@volter/game-editor 0.5.155 → 0.5.157

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 (294) 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 +2156 -2156
  5. package/dist/assets/{AssetBudgetPanel-B2Wb7-b1.js → AssetBudgetPanel-X38cPCO3.js} +3 -3
  6. package/dist/assets/{AudioViewer-gge--M-h.js → AudioViewer-xMM7RZH9.js} +1 -1
  7. package/dist/assets/{CanvasBoardDocument-CyGiXrEJ.js → CanvasBoardDocument-DCyh4eaO.js} +1 -1
  8. package/dist/assets/{CanvasSceneViewport-ChG9oRS8.js → CanvasSceneViewport-BA8eRjJY.js} +1 -1
  9. package/dist/assets/{ColorInput-Dzpqy-J3.js → ColorInput-y8NzQ5q8.js} +1 -1
  10. package/dist/assets/{ColorPicker-CqJPBHlh.js → ColorPicker-C3HI90eU.js} +1 -1
  11. package/dist/assets/{EntityModelDocument-D7XDf6uB.js → EntityModelDocument-DrWN0e0N.js} +1 -1
  12. package/dist/assets/{EnvironmentAssetDocument-BgO7Hl3g.js → EnvironmentAssetDocument-Bv8M7C1O.js} +1 -1
  13. package/dist/assets/{GameplaySessionTimeline-BBmwHCKA.js → GameplaySessionTimeline-mMVtRemn.js} +1 -1
  14. package/dist/assets/{ImageViewer-BjxoscVa.js → ImageViewer-D1mswm2G.js} +1 -1
  15. package/dist/assets/InspectorObjectPreview-DMNRuc0X.js +1 -0
  16. package/dist/assets/{JsonAssetDocument-D81JuRAm.js → JsonAssetDocument-DxLYMceV.js} +1 -1
  17. package/dist/assets/{LiveModuleDocument-bgStMiU1.js → LiveModuleDocument-BOO4_ypf.js} +1 -1
  18. package/dist/assets/{LutAssetDocument-cl9Jq0Zw.js → LutAssetDocument-jf9ogNqN.js} +1 -1
  19. package/dist/assets/{ModelAssetDocument-CYCLKpxJ.js → ModelAssetDocument-DbtKJsGQ.js} +1 -1
  20. package/dist/assets/{NonThreeAuthoringBootstrap-DhHjvD5d.js → NonThreeAuthoringBootstrap-ChEoVJQP.js} +1 -1
  21. package/dist/assets/{Object3DDocumentToolbar-CQbARBIW.js → Object3DDocumentToolbar-Y-jpI3WD.js} +1 -1
  22. package/dist/assets/Object3DDocumentViewport-BOi94JfA.js +2 -0
  23. package/dist/assets/{Object3DPreview-BOZYzjz_.js → Object3DPreview-7LnLFpmg.js} +1 -1
  24. package/dist/assets/{OnlineAssetDetail-DdKHHjxg.js → OnlineAssetDetail-DVdZv1D1.js} +1 -1
  25. package/dist/assets/{PlayBar-CAarfEOh.js → PlayBar-B-GGRbBB.js} +1 -1
  26. package/dist/assets/{QuarksAssetDocument-GTbawoy7.js → QuarksAssetDocument-2MqOJHlY.js} +1 -1
  27. package/dist/assets/{ReactCanvasControls-DIFkxeKv.js → ReactCanvasControls-COp1PvO1.js} +1 -1
  28. package/dist/assets/{RootSelectionOverlay-Dv_w1D9s.js → RootSelectionOverlay-6M-HHI3M.js} +1 -1
  29. package/dist/assets/{ShaderAssetDocument-OA-nshNN.js → ShaderAssetDocument-PrwCSYxk.js} +1 -1
  30. package/dist/assets/{ShadowEditor-Cp1QVCo9.js → ShadowEditor-EXaJ1Kud.js} +1 -1
  31. package/dist/assets/{SourceAssetViewer-CGGHBzgL.js → SourceAssetViewer-Bk_LGk7S.js} +1 -1
  32. package/dist/assets/{StageHost-BMgCrIPG.js → StageHost-CK78ezTC.js} +2 -2
  33. package/dist/assets/{StoryPreviewMount-CyF7FwI7.js → StoryPreviewMount-IbbNNzF4.js} +1 -1
  34. package/dist/assets/{ThreeBoardDocument-DCJkLWU8.js → ThreeBoardDocument-DUakOh0j.js} +2 -2
  35. package/dist/assets/{ThreeIsolationSceneContent-CxsM-QHW.js → ThreeIsolationSceneContent-BjAyHzL2.js} +1 -1
  36. package/dist/assets/{ToolObject3DPreview-lsAoRxtr.js → ToolObject3DPreview-CRb_pBHc.js} +1 -1
  37. package/dist/assets/{Toolbar-yvFlRv8R.js → Toolbar-Bb7KArdo.js} +1 -1
  38. package/dist/assets/{TransientHint-Bslncm_l.js → TransientHint-BlB2atrU.js} +1 -1
  39. package/dist/assets/{VideoViewer-Ba-e91kP.js → VideoViewer-D5fNjrcg.js} +1 -1
  40. package/dist/assets/{ViewportShadingMenu-CgbuQ0e-.js → ViewportShadingMenu-D_-wHbzW.js} +1 -1
  41. package/dist/assets/{active-ingest-CJ2U5L1O.js → active-ingest-DJ8FmH5M.js} +2 -2
  42. package/dist/assets/{animation-clock-CVpGQSVj.js → animation-clock-CINkiVZd.js} +1 -1
  43. package/dist/assets/{animation-mixers.service-CI0K1tfi.js → animation-mixers.service-BST_khGa.js} +1 -1
  44. package/dist/assets/{animation-timeline.utility-Wg6WxkxK.js → animation-timeline.utility-X54fMzvE.js} +1 -1
  45. package/dist/assets/{asset-budget-asset.menu-BbCBxjLY.js → asset-budget-asset.menu-CfJth8-V.js} +1 -1
  46. package/dist/assets/{asset-budget.action-CK8h0v1A.js → asset-budget.action-ByyoIoUI.js} +1 -1
  47. package/dist/assets/{asset-budget.document-CYVcDLvH.js → asset-budget.document-CO1NrMEa.js} +1 -1
  48. package/dist/assets/{asset-budget.menu-BcTijQ2R.js → asset-budget.menu-Cb99KwLd.js} +1 -1
  49. package/dist/assets/{asset-editor-persistence-DWp0E8cc.js → asset-editor-persistence-BF2Eqt0F.js} +1 -1
  50. package/dist/assets/{asset-loaders-Bo91oPiL.js → asset-loaders-2LtXp4_y.js} +1 -1
  51. package/dist/assets/{asset-preview-BUpxsHNd.js → asset-preview-t-7PYPjJ.js} +1 -1
  52. package/dist/assets/{audio-unlock.service-CyiXe5qk.js → audio-unlock.service-DwkIGA6J.js} +1 -1
  53. package/dist/assets/{audio.utility-BN4mANCx.js → audio.utility-Mn4GcZIb.js} +1 -1
  54. package/dist/assets/autoplay.service-D7c8d5PV.js +1 -0
  55. package/dist/assets/{babylon-authoring-adapter-C-EAsfMr.js → babylon-authoring-adapter-BB5HErRG.js} +1 -1
  56. package/dist/assets/{binding-resolver-DoOAFM2m.js → binding-resolver-CXF3o1ZX.js} +2 -2
  57. package/dist/assets/{blender-node-editor.document-BzkGPs0i.js → blender-node-editor.document-djNJTSeo.js} +1 -1
  58. package/dist/assets/{blender-properties-tab-B1ggqOYB.js → blender-properties-tab-06D6TYA0.js} +1 -1
  59. package/dist/assets/{blender-runtime-host-MJZEPwHA.js → blender-runtime-host-Cqitl1ZO.js} +1 -1
  60. package/dist/assets/{blender-runtime-skin-hw-op7Nt.js → blender-runtime-skin-RX6nlrgy.js} +72 -58
  61. package/dist/assets/{blender-runtime.document-CvTyAou8.js → blender-runtime.document-pgD63Zep.js} +10 -10
  62. package/dist/assets/{blender-screenshot.menu-C4VXpXVa.js → blender-screenshot.menu-DZ44fIU0.js} +1 -1
  63. package/dist/assets/{blender-timeline.document-BRFDd7JZ.js → blender-timeline.document-D53mR9D6.js} +1 -1
  64. package/dist/assets/{blender-uv-editor.document-CM09ITWu.js → blender-uv-editor.document-Dux9ZXaj.js} +1 -1
  65. package/dist/assets/{blender-version.status-CPyc_-kA.js → blender-version.status-hK0_7tRC.js} +1 -1
  66. package/dist/assets/{blender.command-ktKz-2Zi.js → blender.command-BF9RHCP_.js} +1 -1
  67. package/dist/assets/{board-guides-CCiyx8cT.js → board-guides-BYnclES1.js} +1 -1
  68. package/dist/assets/{bridge.command-tP5j6w72.js → bridge.command-CS12Cp-B.js} +3 -3
  69. package/dist/assets/{browserAll-BSQVVrNG.js → browserAll-CGQ_uBbB.js} +1 -1
  70. package/dist/assets/{build-player.document-BwbBXtF5.js → build-player.document-RpeG8U_t.js} +1 -1
  71. package/dist/assets/{build-profiles.document-UiF_BsjE.js → build-profiles.document-DydU-eTF.js} +1 -1
  72. package/dist/assets/{build-progress.status-Bf5KpnxC.js → build-progress.status-arvTBGok.js} +1 -1
  73. package/dist/assets/{build-session-C4jVDt-u.js → build-session-D8B-93_A.js} +1 -1
  74. package/dist/assets/{build.action-DP2d1Uhj.js → build.action-CYKD0CrB.js} +1 -1
  75. package/dist/assets/{build.command-D5pyNcoj.js → build.command-BH-4yWaL.js} +1 -1
  76. package/dist/assets/{build.header-DupBIAOw.js → build.header-B5-bZp5Z.js} +1 -1
  77. package/dist/assets/{build.menu-DWrKtdoV.js → build.menu-CyOe8xXz.js} +1 -1
  78. package/dist/assets/{build.service-qnz73gSX.js → build.service-BuhAa1EB.js} +1 -1
  79. package/dist/assets/{camera-C74U5X7o.js → camera-KM5i-TaU.js} +1 -1
  80. package/dist/assets/{camera-runtime.inspector-B2l34Xhl.js → camera-runtime.inspector-DA-GqhBI.js} +1 -1
  81. package/dist/assets/{canvas-design-mount-D4M3E1AX.js → canvas-design-mount-PWQPVLiY.js} +3 -3
  82. package/dist/assets/{canvas-entry-runtime-CLOuJcgT.js → canvas-entry-runtime-nWfnVKYb.js} +2 -2
  83. package/dist/assets/{canvas-preview-frames-CSCcu2sG.js → canvas-preview-frames-BwWVTr-u.js} +1 -1
  84. package/dist/assets/{canvas-story-capture.service-onD_xSpQ.js → canvas-story-capture.service-B1o-VBky.js} +2 -2
  85. package/dist/assets/{capability-coverage-EnZ99FoT.js → capability-coverage-aT7nf05J.js} +1 -1
  86. package/dist/assets/{collaboration-presence-1_UMOAkw.js → collaboration-presence-h1Fxju0A.js} +1 -1
  87. package/dist/assets/{collider-C6R1tHfa.js → collider-BDLEjrr-.js} +1 -1
  88. package/dist/assets/{component-board.service-Ckl-5tA4.js → component-board.service-CetsHh4L.js} +2 -2
  89. package/dist/assets/{component-board.service-Cuf_SXeA.js → component-board.service-DAeFLAlB.js} +2 -2
  90. package/dist/assets/{component-board.service-BX_2bwX3.js → component-board.service-qH45JxuD.js} +2 -2
  91. package/dist/assets/{component-contracts.service-rI-rbvDG.js → component-contracts.service-nYhZ_ceu.js} +1 -1
  92. package/dist/assets/{component-instance-root-wO1p-rLr.js → component-instance-root-QYCCyhxU.js} +1 -1
  93. package/dist/assets/{component-verbs.command-O2bwqmK3.js → component-verbs.command-y1H2CFq-.js} +1 -1
  94. package/dist/assets/{component-verbs.service-BiiQMtJt.js → component-verbs.service-QvBBdzY3.js} +1 -1
  95. package/dist/assets/{config-dVnV1cxW.js → config-YwJJtCF0.js} +2 -2
  96. package/dist/assets/{configurations-8qaUqMH7.js → configurations-B52h5RGp.js} +1 -1
  97. package/dist/assets/{connection.status-vH9WCDDg.js → connection.status-DnEU1lk4.js} +1 -1
  98. package/dist/assets/{constraints.inspector-C7UjUxPR.js → constraints.inspector-DgbM_8l2.js} +1 -1
  99. package/dist/assets/{content-bounds-Dl5Y3LLv.js → content-bounds-BRS42hfD.js} +1 -1
  100. package/dist/assets/{contract-system-adapters-BDUpDoKd.js → contract-system-adapters-DIpeIRm_.js} +1 -1
  101. package/dist/assets/{coverage.service-IS7Oklo8.js → coverage.service-Cjy9MO9F.js} +1 -1
  102. package/dist/assets/{create-runtime-Bucz0XVU.js → create-runtime-ByZWXstA.js} +1 -1
  103. package/dist/assets/{curve-D0Q6TczG.js → curve-DaFJmPin.js} +1 -1
  104. package/dist/assets/{data-asset-B0a1y8M-.js → data-asset-DRCqFyxF.js} +1 -1
  105. package/dist/assets/{data-ref-dRt2Wi5L.js → data-ref-CkvCIusA.js} +1 -1
  106. package/dist/assets/{debug-bridge-EhDkhrLX.js → debug-bridge-C7NLsHKu.js} +1 -1
  107. package/dist/assets/{debug-registry-B2THKz1v.js → debug-registry-BzagDrhV.js} +1 -1
  108. package/dist/assets/{deferred-ingest-play-To3ZratW.js → deferred-ingest-play-DMp_yRhc.js} +2 -2
  109. package/dist/assets/{design-time-canvas-mount-BnSaRAbS.js → design-time-canvas-mount-kB1ZRIvt.js} +2 -2
  110. package/dist/assets/{design-time-layers-OMAIxOrv.js → design-time-layers-Dzu3jW_N.js} +1 -1
  111. package/dist/assets/{design-time-mount.service-RFkiqPIn.js → design-time-mount.service-CLEJHBLW.js} +2 -2
  112. package/dist/assets/{design-time-mount.service-Bgr_nCDs.js → design-time-mount.service-Dgswmfff.js} +2 -2
  113. package/dist/assets/{design-time-react-mount-BsSBoX7J.js → design-time-react-mount-B71UACVS.js} +1 -1
  114. package/dist/assets/{document-preview-three-Qni0oVBw.js → document-preview-three-DxAxdZRF.js} +1 -1
  115. package/dist/assets/{dom-authoring-adapter-DsUgOtQy.js → dom-authoring-adapter-CQiwffQ4.js} +1 -1
  116. package/dist/assets/{draco3d-DyZllcka.js → draco3d-CWfPSgkb.js} +1 -1
  117. package/dist/assets/{edit-mode-audio.service-CjXNAZEs.js → edit-mode-audio.service-CikRAHOi.js} +1 -1
  118. package/dist/assets/{edit-mode-authoring-BDgZD47j.js → edit-mode-authoring-DthrLbz-.js} +1 -1
  119. package/dist/assets/{edit-mode-networking.service-3dUr2g_0.js → edit-mode-networking.service-DBmK8YGU.js} +1 -1
  120. package/dist/assets/{editor-api-DTrNJMXL.js → editor-api-CqqOlRSi.js} +1 -1
  121. package/dist/assets/{editor-layers-DwaX5UFy.js → editor-layers-k0AjpomL.js} +1 -1
  122. package/dist/assets/{editor-shell-store-aKHbAoCV.js → editor-shell-store-B3c29A3l.js} +1 -1
  123. package/dist/assets/{entity-object-BLJ-I8XT.js → entity-object-BOLh6DVA.js} +1 -1
  124. package/dist/assets/{extend-6LrR7eSL.js → extend-CJ7vLkP1.js} +1 -1
  125. package/dist/assets/{fork-menu-V-FM6YuY.js → fork-menu-Bzl-5_GA.js} +1 -1
  126. package/dist/assets/{frame-debugger-store-DwDC0wAm.js → frame-debugger-store-NGsJt0AK.js} +1 -1
  127. package/dist/assets/{game-contract-seams-C22a4B79.js → game-contract-seams-CuBiefwV.js} +1 -1
  128. package/dist/assets/{game-css-scope-transform-Wv0ZdTsR.js → game-css-scope-transform-5yv5zl6t.js} +1 -1
  129. package/dist/assets/{game-document.service-BzvFIWCc.js → game-document.service-DtML_s2L.js} +1 -1
  130. package/dist/assets/{game-eval.command-DpQn_nY8.js → game-eval.command-Cghc-6r3.js} +1 -1
  131. package/dist/assets/{game-module-access-BI6oBa8Y.js → game-module-access-DPnqfsy_.js} +1 -1
  132. package/dist/assets/{game-network-Deo8lcPw.js → game-network-TjOj3K-Z.js} +3 -3
  133. package/dist/assets/{gameplay-export-BOLhxmII.js → gameplay-export-ebDdiP9T.js} +1 -1
  134. package/dist/assets/{gameplay-replay-Dkvmv6hf.js → gameplay-replay-B4BPQnTZ.js} +1 -1
  135. package/dist/assets/{gameplay.command-DCKqLv7C.js → gameplay.command-C__OjBjz.js} +1 -1
  136. package/dist/assets/{generation-jobs-6D562vMB.js → generation-jobs-C57_oOgx.js} +1 -1
  137. package/dist/assets/{generation.service-BFRoLb7y.js → generation.service-BJel-Oiy.js} +1 -1
  138. package/dist/assets/{generations-HwV1btKK.js → generations-DNfmqqzL.js} +1 -1
  139. package/dist/assets/{generations.status-BLiDcKsg.js → generations.status-nXpY7bFU.js} +1 -1
  140. package/dist/assets/{hierarchy-marks-DeG4E4Ke.js → hierarchy-marks-C2temlO0.js} +1 -1
  141. package/dist/assets/{hosted-asset-materialization-Bod7CEMF.js → hosted-asset-materialization-BtbO5pyX.js} +1 -1
  142. package/dist/assets/{index-CLUA6PYq.js → index-7J5pTwW2.js} +1 -1
  143. package/dist/assets/{index-KIR4Has5.js → index-B5GZkByz.js} +1 -1
  144. package/dist/assets/{index-CdLhNxor.js → index-B69_nH5F.js} +1 -1
  145. package/dist/assets/{index-ClgrFOcX.js → index-BfqJPhFO.js} +7 -7
  146. package/dist/assets/{index-DkYeh000.js → index-BiH6f3Mk.js} +1 -1
  147. package/dist/assets/{index-CHOT9sYh.js → index-CFS_B4hc.js} +2 -2
  148. package/dist/assets/{index-CyLPQ8pY.js → index-DYoPv2Wb.js} +1 -1
  149. package/dist/assets/{index-4hL3-0yz.js → index-my7iu018.js} +1 -1
  150. package/dist/assets/{index-jS3rfNkZ.js → index-zXacXllH.js} +1 -1
  151. package/dist/assets/{inference-diagnostics-BmZ5ggEK.js → inference-diagnostics-NvA3SRR7.js} +1 -1
  152. package/dist/assets/{ingest-boot-viewport-CipkFljr.js → ingest-boot-viewport-DHhBi66w.js} +1 -1
  153. package/dist/assets/{ingest-siblings-CEwYp-xg.js → ingest-siblings-CMWO3uRZ.js} +1 -1
  154. package/dist/assets/{ingest-source-persistence-CVU1rTj0.js → ingest-source-persistence-CrXFBT__.js} +1 -1
  155. package/dist/assets/{ingest.service-bNqvcqoK.js → ingest.service-BYEo4j1s.js} +1 -1
  156. package/dist/assets/{inspect-BunjdqX7.js → inspect-UxYR9Ls5.js} +1 -1
  157. package/dist/assets/instances.command-DDOJ3aWq.js +1 -0
  158. package/dist/assets/{json-history-resource-CDEoQe1R.js → json-history-resource-De8KJl61.js} +1 -1
  159. package/dist/assets/{layered-pick-guh6WlA7.js → layered-pick-Dito5b_J.js} +1 -1
  160. package/dist/assets/{light-BPZivpCK.js → light-BnSS9Nzc.js} +1 -1
  161. package/dist/assets/{live-project-verbs-Bqmxbr2o.js → live-project-verbs-CDRzC_D1.js} +1 -1
  162. package/dist/assets/{machine.document-CAFPFq5K.js → machine.document-CVG78EGi.js} +1 -1
  163. package/dist/assets/{machines.finder-CbUWReMp.js → machines.finder-vrUR_Pb_.js} +1 -1
  164. package/dist/assets/{material-huG6lNEK.js → material-7mmxSi8g.js} +1 -1
  165. package/dist/assets/{material-factory-BkyOzJ7B.js → material-factory-CXvJ2goL.js} +1 -1
  166. package/dist/assets/{mesh-CjCfRcFK.js → mesh-DpK09Vho.js} +1 -1
  167. package/dist/assets/{model-asset-sections.service-Dt4V2K2v.js → model-asset-sections.service-ByE7kOXW.js} +1 -1
  168. package/dist/assets/{model-inspection-BDA5jikL.js → model-inspection-PgxfYOnI.js} +1 -1
  169. package/dist/assets/{model-thumbnail-CF3qGQWb.js → model-thumbnail-Dnv7DCt7.js} +1 -1
  170. package/dist/assets/{models.finder-yh4YeGrA.js → models.finder-BaD41xeQ.js} +1 -1
  171. package/dist/assets/{module-mode-D8en13PD.js → module-mode-Bb9fFtEw.js} +2 -2
  172. package/dist/assets/{mount-canvas-ingest-root-JOkm2Ypj.js → mount-canvas-ingest-root-B0_ckx79.js} +2 -2
  173. package/dist/assets/{mount-dom-ingest-root-CVXFnJZb.js → mount-dom-ingest-root-BnZQSayp.js} +2 -2
  174. package/dist/assets/{mount-ingest-root-C3o0o28C.js → mount-ingest-root-DHVNQKHi.js} +2 -2
  175. package/dist/assets/{mount-manifest-d7WQ9MYp.js → mount-manifest-cYykTsXQ.js} +1 -1
  176. package/dist/assets/{mount-three-ingest-root-Dqd4XWP1.js → mount-three-ingest-root-CI-gjlh8.js} +1 -1
  177. package/dist/assets/{mounted-authoring-B697dYuN.js → mounted-authoring-B2dc__pv.js} +1 -1
  178. package/dist/assets/{mounted-story-viewport-source-BvNZ3QQn.js → mounted-story-viewport-source-Ceh05FK8.js} +1 -1
  179. package/dist/assets/{native-debug-module-iX2-V5kg.js → native-debug-module-L_Ofssyj.js} +1 -1
  180. package/dist/assets/{navigation-CIl9OY1F.js → navigation-CADCnkrx.js} +1 -1
  181. package/dist/assets/{navmesh.menu-DrMoj7Ag.js → navmesh.menu-3D6ZEGhB.js} +1 -1
  182. package/dist/assets/{navmesh.service-CTr1NVfz.js → navmesh.service-D_TdU1xw.js} +1 -1
  183. package/dist/assets/network-observer.service-D9nUCc15.js +1 -0
  184. package/dist/assets/{network.utility-Btexm5ao.js → network.utility-B3riF8KT.js} +1 -1
  185. package/dist/assets/{object3d-document-session-registry-CADiW-LP.js → object3d-document-session-registry-CLizyhis.js} +2 -2
  186. package/dist/assets/{oid-transform-Ca1oU_Ei.js → oid-transform-CinlfHYa.js} +1 -1
  187. package/dist/assets/{particles-D1oPwNJh.js → particles--V50tPi5.js} +1 -1
  188. package/dist/assets/{pixi-authoring-adapter-B1BBfTju.js → pixi-authoring-adapter-qbP0YW7g.js} +1 -1
  189. package/dist/assets/{pixi-live-write-target-BcUhtqmJ.js → pixi-live-write-target-coTAFFGW.js} +1 -1
  190. package/dist/assets/{play.command-ScnwcvJr.js → play.command-kc7rzTlg.js} +2 -2
  191. package/dist/assets/{presentation-DPfnCjNA.js → presentation-jBjhcEq1.js} +1 -1
  192. package/dist/assets/{product-D_9saRiZ.js → product-DgYRVeaY.js} +1 -1
  193. package/dist/assets/{profiler.action-PXTw93E5.js → profiler.action-Dj94ZJLY.js} +1 -1
  194. package/dist/assets/{profiler.menu-DPFV6QQD.js → profiler.menu-BHplCv7a.js} +1 -1
  195. package/dist/assets/{profiler.utility-eDooJGnI.js → profiler.utility-D32oIOGk.js} +1 -1
  196. package/dist/assets/{project-authoring-session-BmeutotA.js → project-authoring-session-Cd8SeWEJ.js} +2 -2
  197. package/dist/assets/{properties-bone-constraints.inspector-BW0V1WXQ.js → properties-bone-constraints.inspector-VPTHP6BI.js} +1 -1
  198. package/dist/assets/{properties-bone.inspector-DIvTZhY8.js → properties-bone.inspector-4GD1gzCp.js} +1 -1
  199. package/dist/assets/{properties-collection.inspector-Dbt5XMhs.js → properties-collection.inspector-CehoAair.js} +1 -1
  200. package/dist/assets/{properties-constraints.inspector-5SvB0GDC.js → properties-constraints.inspector-LgPoqURT.js} +1 -1
  201. package/dist/assets/{properties-data.inspector-C-SngIsI.js → properties-data.inspector-D3uEJD3t.js} +1 -1
  202. package/dist/assets/{properties-material.inspector-CYAWsvsX.js → properties-material.inspector-2n9K5IFo.js} +1 -1
  203. package/dist/assets/{properties-modifiers.inspector-XN6BL-Ll.js → properties-modifiers.inspector-B_RsuDyF.js} +1 -1
  204. package/dist/assets/{properties-object.inspector-CfryU0kN.js → properties-object.inspector-CBZA72yZ.js} +1 -1
  205. package/dist/assets/{properties-output.inspector-COfgmFUW.js → properties-output.inspector-DxDAmKI-.js} +1 -1
  206. package/dist/assets/{properties-particles.inspector-BCh0vFr6.js → properties-particles.inspector-pPS920CT.js} +1 -1
  207. package/dist/assets/{properties-physics.inspector-B6to1u6U.js → properties-physics.inspector-XUnPp5Q3.js} +1 -1
  208. package/dist/assets/{properties-render.inspector-C4hVfo7j.js → properties-render.inspector-DnC4sgP3.js} +1 -1
  209. package/dist/assets/{properties-scene.inspector-dKta4xn5.js → properties-scene.inspector-MZ-gCrYM.js} +1 -1
  210. package/dist/assets/{properties-texture.inspector-ZlNhW25m.js → properties-texture.inspector-B7QGBzm5.js} +1 -1
  211. package/dist/assets/{properties-view-layer.inspector-CIxHmkDR.js → properties-view-layer.inspector-rt2qT9SA.js} +1 -1
  212. package/dist/assets/{properties-world.inspector-Ce0q2dmK.js → properties-world.inspector-Vg7GD9HK.js} +1 -1
  213. package/dist/assets/{r3f-design-session-1riISktt.js → r3f-design-session-DfRwB6oN.js} +2 -2
  214. package/dist/assets/{r3f-physics-binding-DuG97FR9.js → r3f-physics-binding-EfYECbQc.js} +1 -1
  215. package/dist/assets/{r3f-source-authoring-adapter-B8qqrdwk.js → r3f-source-authoring-adapter-CVupdJt5.js} +1 -1
  216. package/dist/assets/{react-canvas-navigation-CxBm8iw8.js → react-canvas-navigation-DwiPTVdH.js} +1 -1
  217. package/dist/assets/{react-inspector.service-BcdePwno.js → react-inspector.service-DffkStxd.js} +1 -1
  218. package/dist/assets/{react-story-board-CMvkLAkF.js → react-story-board-CynnmKqO.js} +1 -1
  219. package/dist/assets/{react-three-rapier.esm-D5svf-ME.js → react-three-rapier.esm-DnUfnQnM.js} +1 -1
  220. package/dist/assets/{react-world-authoring-adapter-Dq8NqvWu.js → react-world-authoring-adapter-Cf1jv2dl.js} +1 -1
  221. package/dist/assets/{realm-services-CqjVBanw.js → realm-services-CxfLBQQ9.js} +1 -1
  222. package/dist/assets/{reflection-probe-capture.inspector-uEvyppEj.js → reflection-probe-capture.inspector-DfzDNtJF.js} +1 -1
  223. package/dist/assets/{registry-D7lFIA8c.js → registry-69pUwZEm.js} +1 -1
  224. package/dist/assets/{relative-import-specifier-CA9mSNXO.js → relative-import-specifier-J1WeZQaJ.js} +1 -1
  225. package/dist/assets/{render-env-BHasp-z3.js → render-env-CmR-momj.js} +1 -1
  226. package/dist/assets/{render-features-sSb1-c5x.js → render-features-D7pQr-dE.js} +1 -1
  227. package/dist/assets/{render-settings-CUbo4Sw5.js → render-settings-BUT8gPkc.js} +1 -1
  228. package/dist/assets/{resolve-three-TQ367RQD.js → resolve-three-Dhw2LtAp.js} +3 -3
  229. package/dist/assets/{root-seam-contract-CneTgNww.js → root-seam-contract-BFs0rvG9.js} +1 -1
  230. package/dist/assets/{run-selection-CNsOQTEG.js → run-selection-CEuu_sxz.js} +1 -1
  231. package/dist/assets/{scene-capture-KbdRgsD3.js → scene-capture-DgUSqWTB.js} +1 -1
  232. package/dist/assets/{scene-document.service-CmPSUocW.js → scene-document.service-BDDoO22G.js} +2 -2
  233. package/dist/assets/{scene-framing-B5JC4NeG.js → scene-framing-Dm-rCn3G.js} +1 -1
  234. package/dist/assets/{seeded-random-B6zqGkWP.js → seeded-random-C9256-Ag.js} +1 -1
  235. package/dist/assets/{setup-renderer-efjIBSGF.js → setup-renderer-CWvtkVDR.js} +1 -1
  236. package/dist/assets/{source-object3d-authoring-adapter-DeeboYub.js → source-object3d-authoring-adapter-ehtz9UK_.js} +1 -1
  237. package/dist/assets/{source-persistence-backend-Cwy93SmQ.js → source-persistence-backend-CbCbDOjd.js} +1 -1
  238. package/dist/assets/{stage-keyboard-GNCaTXLA.js → stage-keyboard-DiRyZTZd.js} +1 -1
  239. package/dist/assets/{stage-overlay-set-DV3SCzJb.js → stage-overlay-set-6pmCmKpX.js} +1 -1
  240. package/dist/assets/{stage-presence-markers-CBEU1Kzo.js → stage-presence-markers-mZPecAeK.js} +1 -1
  241. package/dist/assets/{stage-transform-tools-C9nNDW6n.js → stage-transform-tools-Qc0QjPrc.js} +1 -1
  242. package/dist/assets/{standard-viewport-dressing-BJkGwiNT.js → standard-viewport-dressing-BhTPIZTQ.js} +1 -1
  243. package/dist/assets/{state-watch.action-Doz_jrzS.js → state-watch.action-DJfW26od.js} +1 -1
  244. package/dist/assets/{state-watch.menu-Dj4DUUxN.js → state-watch.menu-B1GRE_HT.js} +1 -1
  245. package/dist/assets/{state-watch.utility-COPa8xpV.js → state-watch.utility-BQaTOFU-.js} +1 -1
  246. package/dist/assets/{story-capture-stRSY4PQ.js → story-capture-DZNUtuCH.js} +1 -1
  247. package/dist/assets/{story-documents-CYzWYY1o.js → story-documents-DArOiGNt.js} +1 -1
  248. package/dist/assets/{story-documents.service-DJBu4rve.js → story-documents.service-Bi89tZQ5.js} +1 -1
  249. package/dist/assets/{story-documents.service-C5r8KFEG.js → story-documents.service-DaPhxnzw.js} +1 -1
  250. package/dist/assets/{story-media-presence-D4AIsAtK.js → story-media-presence-CMJ7U-7_.js} +1 -1
  251. package/dist/assets/{story-pixi-preview-mPo3OFOd.js → story-pixi-preview-jmF1ab99.js} +1 -1
  252. package/dist/assets/{story-presentation-Dw4Vw65P.js → story-presentation-DNXF37vS.js} +1 -1
  253. package/dist/assets/{story-three-preview-CWM0Rj7x.js → story-three-preview-CH6Kk934.js} +2 -2
  254. package/dist/assets/{studio-environment-Bw9zMFE8.js → studio-environment-BNM-AjAn.js} +1 -1
  255. package/dist/assets/{surface-state-b_H4iOCJ.js → surface-state-BLuxJ4lb.js} +1 -1
  256. package/dist/assets/{syntactic-prop-specs-BCdwWi-T.js → syntactic-prop-specs-Coas9J4z.js} +1 -1
  257. package/dist/assets/{team-playtest.service-CnxdTghn.js → team-playtest.service-C3cEeDBv.js} +1 -1
  258. package/dist/assets/{three-DWy0sZom.js → three-BvhtsSAr.js} +1 -1
  259. package/dist/assets/{three-authoring-adapter-9LcUBPaU.js → three-authoring-adapter-K8a5THvW.js} +1 -1
  260. package/dist/assets/three-authoring.service-D-uSiCHc.js +2 -0
  261. package/dist/assets/{three-ingest-runtime-x9nLmUl-.js → three-ingest-runtime-QhrURliQ.js} +1 -1
  262. package/dist/assets/{three-integration-DB-xQHD5.js → three-integration-CaC8ivB7.js} +2 -2
  263. package/dist/assets/three-integration.service-BvTtbtlD.js +1 -0
  264. package/dist/assets/{three-projection-core-IUovHgg_.js → three-projection-core-C2Zj6hTy.js} +1 -1
  265. package/dist/assets/{three-state-_ImCbP87.js → three-state-cYB28OIz.js} +1 -1
  266. package/dist/assets/{three-story-capture.service-wKwfSnqA.js → three-story-capture.service-H2Z2O7Nz.js} +2 -2
  267. package/dist/assets/{three-story-model-BxWKcl9d.js → three-story-model-DVfgIOzi.js} +1 -1
  268. package/dist/assets/{three-viewport-presentation-Bg86EsDJ.js → three-viewport-presentation-DoViPvQB.js} +1 -1
  269. package/dist/assets/{transform-mode-request-BnV8FSnx.js → transform-mode-request-CflM_ccL.js} +1 -1
  270. package/dist/assets/{transport-strip-BZQnaxFN.js → transport-strip-DPoEy7PU.js} +1 -1
  271. package/dist/assets/transport.header-DdI58npA.js +1 -0
  272. package/dist/assets/{tuples-DR33sMq6.js → tuples-CA3u4T9B.js} +1 -1
  273. package/dist/assets/{ui-board-document-VJMvm6Ks.js → ui-board-document-CoKY7MDM.js} +2 -2
  274. package/dist/assets/{user-data-DL6HsBPf.js → user-data-CTT8ZvVB.js} +1 -1
  275. package/dist/assets/{utility-view-state-ghWXsYXq.js → utility-view-state-BaO3Fx_-.js} +1 -1
  276. package/dist/assets/{viewport-door-BV_lf5uK.js → viewport-door-BBtilr3V.js} +1 -1
  277. package/dist/assets/{viewport-root-presentation-CKqhX3mt.js → viewport-root-presentation-DmDBAZ8E.js} +1 -1
  278. package/dist/assets/{viewport-surface-status-D7M2L2lI.js → viewport-surface-status-BiDiAZ6z.js} +1 -1
  279. package/dist/assets/{webworkerAll-DDbFvxgB.js → webworkerAll-BCvjBZqG.js} +1 -1
  280. package/dist/assets/{workspace-arrangement-86_8Kk5K.js → workspace-arrangement-BXM0R-Uu.js} +1 -1
  281. package/dist/assets/{world-documents-DeNJUefV.js → world-documents-DGk_J8cp.js} +1 -1
  282. package/dist/assets/{world-root-stage-binding-VOrldLB4.js → world-root-stage-binding-KaIVpo80.js} +1 -1
  283. package/dist/assets/{xstate-animation-binding-747CfEeB.js → xstate-animation-binding-D_kxRsxS.js} +1 -1
  284. package/dist/assets/{xstate-animation-meta-DNMlMnr-.js → xstate-animation-meta-CX5oWqQv.js} +1 -1
  285. package/dist-node/cli.js +16 -16
  286. package/package.json +16 -16
  287. package/dist/assets/InspectorObjectPreview-C87CasN_.js +0 -1
  288. package/dist/assets/Object3DDocumentViewport-BpiyRQ5p.js +0 -2
  289. package/dist/assets/autoplay.service-CKBqjozr.js +0 -1
  290. package/dist/assets/instances.command-DzcXdKuG.js +0 -1
  291. package/dist/assets/network-observer.service-DyzpGKA7.js +0 -1
  292. package/dist/assets/three-authoring.service-DdTMF4A2.js +0 -2
  293. package/dist/assets/three-integration.service-DwToRGIc.js +0 -1
  294. package/dist/assets/transport.header-1SF4ZbEd.js +0 -1
@@ -1,2 +1,2 @@
1
- import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{b4 as D,cP as F,c_ as H,eo as O,ep as I,eq as M,er as i,a7 as L,es as R,aZ as o,et as n,dh as G,aN as j,a6 as k,b1 as _,eu as J,ev as V,cp as U,ew as q,ex as Y}from"./index-ClgrFOcX.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a as Z,c as A,u as K,e as Q,f as X,g as ee,h as te,r as P,i as C}from"./build-session-C4jVDt-u.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./configurations-8qaUqMH7.js";const f="volter.project.json",S={name:"My Game",resolution:{width:1280,height:720},appId:"com.example.mygame"};function ie(){r.useSyncExternalStore(Z,A,A);const s=ee(),p=_(),a=p?D(p):null,[y,T]=r.useState(S),m=K(),[d,N]=r.useState("");r.useEffect(()=>{!d&&m.length>0&&N(m[0]?.id??"")},[m,d]);const x=r.useRef(null),h=r.useCallback(async()=>{const t=await F(f),l=t?JSON.parse(t):S;T({...S,...l,resolution:{...S.resolution,...l.resolution}})},[]);r.useEffect(()=>(h().catch(()=>{}),a?.subscribeAll(t=>{t===f&&h().catch(()=>{})})??(()=>{})),[a,h]),r.useEffect(()=>()=>{x.current&&clearTimeout(x.current)},[]);const v=r.useCallback(t=>{x.current&&clearTimeout(x.current),x.current=setTimeout(async()=>{const l=await F(f);if(!l)throw new Error(`Cannot edit build settings: ${f} is missing`);const u=JSON.parse(l),g=`${JSON.stringify({...u,name:t.name,resolution:t.resolution,appId:t.appId},null,2)}
1
+ import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{b4 as D,cP as F,c_ as H,eo as O,ep as I,eq as M,er as i,a7 as L,es as R,aZ as o,et as n,dh as G,aN as j,a6 as k,b1 as _,eu as J,ev as V,cp as U,ew as q,ex as Y}from"./index-BfqJPhFO.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a as Z,c as A,u as K,e as Q,f as X,g as ee,h as te,r as P,i as C}from"./build-session-D8B-93_A.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./configurations-B52h5RGp.js";const f="volter.project.json",S={name:"My Game",resolution:{width:1280,height:720},appId:"com.example.mygame"};function ie(){r.useSyncExternalStore(Z,A,A);const s=ee(),p=_(),a=p?D(p):null,[y,T]=r.useState(S),m=K(),[d,N]=r.useState("");r.useEffect(()=>{!d&&m.length>0&&N(m[0]?.id??"")},[m,d]);const x=r.useRef(null),h=r.useCallback(async()=>{const t=await F(f),l=t?JSON.parse(t):S;T({...S,...l,resolution:{...S.resolution,...l.resolution}})},[]);r.useEffect(()=>(h().catch(()=>{}),a?.subscribeAll(t=>{t===f&&h().catch(()=>{})})??(()=>{})),[a,h]),r.useEffect(()=>()=>{x.current&&clearTimeout(x.current)},[]);const v=r.useCallback(t=>{x.current&&clearTimeout(x.current),x.current=setTimeout(async()=>{const l=await F(f);if(!l)throw new Error(`Cannot edit build settings: ${f} is missing`);const u=JSON.parse(l),g=`${JSON.stringify({...u,name:t.name,resolution:t.resolution,appId:t.appId},null,2)}
2
2
  `;if(!a){await H(f,g);return}await a.write(f,g,{label:"Edit Build Settings",kind:"settings",contentType:"application/json"}).catch(()=>void h().catch(()=>{}))},500)},[a,h]),$=r.useCallback(t=>{T(l=>{const u={...l,...t};return v(u),u})},[v]),E=r.useCallback((t,l)=>{T(u=>{const g={...u,resolution:{...u.resolution,[t]:Math.round(l)}};return v(g),g})},[v]),c=s.phase,b=s.result?.report?.artifact??null;return e.jsxs("div",{"data-testid":"build-profiles-document",style:{display:"flex",flex:1,minHeight:0,background:O[1],pointerEvents:"auto"},children:[e.jsx("div",{style:le,children:m.map(t=>e.jsx(M,{selected:d===t.id,disabled:c==="building",onClick:()=>{c!=="building"&&N(t.id)},style:{padding:`${i[4]} ${i[6]}`,opacity:c==="building"&&d!==t.id?.4:1},children:e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:i[4]},children:[e.jsx(L,{icon:G,style:{fontSize:n.lg,color:d===t.id?R:o[2]}}),e.jsxs("div",{children:[e.jsx("div",{style:{fontSize:n.md,fontWeight:600,color:d===t.id?o[1]:o[2]},children:t.label}),e.jsx("div",{style:{fontSize:n.sm,color:o[3],marginTop:1},children:t.subtitle})]})]})},t.id))}),e.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",minWidth:0,padding:`${i[5]} ${i[8]}`,maxWidth:560},children:[e.jsx("div",{style:W,children:"Project"}),e.jsxs("div",{style:w,children:[e.jsx("label",{style:B,children:"Name"}),e.jsx(j,{className:"volter-input",style:{flex:1},value:y.name,onChange:t=>$({name:t.target.value})})]}),e.jsxs("div",{style:w,children:[e.jsx("label",{style:B,children:"Resolution"}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:i[2],flex:1},children:[e.jsx(j,{type:"number",className:"volter-input",style:{width:0,flex:1},value:y.resolution.width,onChange:t=>{const l=Number.parseInt(t.target.value,10);Number.isFinite(l)&&l>0&&E("width",l)}}),e.jsx("span",{style:{fontSize:n.sm,color:o[3]},children:"×"}),e.jsx(j,{type:"number",className:"volter-input",style:{width:0,flex:1},value:y.resolution.height,onChange:t=>{const l=Number.parseInt(t.target.value,10);Number.isFinite(l)&&l>0&&E("height",l)}})]})]}),e.jsxs("div",{style:w,children:[e.jsx("label",{style:B,children:"App ID"}),e.jsx(j,{className:"volter-input",style:{flex:1},value:y.appId,onChange:t=>$({appId:t.target.value})})]}),e.jsxs("div",{style:{...w,marginTop:i[2]},children:[e.jsx("label",{style:B,children:"Output"}),e.jsx("span",{style:{fontSize:n.md,color:o[2]},children:b??"Artifact appears here after a build"})]}),e.jsx("div",{style:{marginTop:i[6],display:"flex",alignItems:"center",gap:i[4],paddingTop:i[4],borderTop:`1px solid ${I[1]}`},children:c==="building"?e.jsxs(e.Fragment,{children:[e.jsxs("span",{style:{fontSize:n.md,fontWeight:600,color:R},children:["Building for ",m.find(t=>t.id===s.target)?.label??s.target,"… (log in Build Output below)"]}),e.jsx(k,{size:"compact",onClick:te,children:"Cancel"})]}):e.jsxs(e.Fragment,{children:[c==="done"&&s.result&&e.jsx("span",{"data-testid":"build-profiles-result",style:{fontSize:n.md,fontWeight:600,color:s.result.ok?J:V},children:s.result.ok?"✓ Build complete":`✗ Build failed (exit ${s.result.code??"unknown"})`}),c==="done"&&s.result?.ok&&b&&e.jsx("a",{href:U(b),download:b,className:"volter-btn","data-variant":"secondary","data-size":"default",style:{textDecoration:"none",display:"inline-flex"},children:"Download"}),e.jsx(k,{variant:"primary","data-testid":"build-profiles-build",onClick:()=>{d&&(c==="done"&&P(),Q(d))},style:{marginLeft:"auto"},children:c==="done"?"Build Again":"Build"}),e.jsx(k,{"data-testid":"build-profiles-build-and-run",onClick:()=>{d&&(c==="done"&&P(),X(d))},children:"Build And Run"})]})}),c==="done"&&s.result?.report&&e.jsx(se,{report:s.result.report})]})]})}function se({report:s}){const p=s.largestFiles[0]?.bytes??1;return e.jsxs("section",{"data-testid":"build-report",style:{marginTop:i[6],paddingTop:i[5],borderTop:`1px solid ${I[1]}`},children:[e.jsx("div",{style:W,children:"Build report"}),e.jsxs("div",{style:{display:"flex",gap:i[4],marginBottom:i[5]},children:[e.jsx(z,{label:"Package",value:C(s.artifactBytes)}),e.jsx(z,{label:"Output",value:C(s.outputBytes)}),e.jsx(z,{label:"Files",value:String(s.fileCount)})]}),e.jsx("div",{style:{fontSize:n.sm,color:o[3],marginBottom:i[2]},children:"Largest output files"}),e.jsx("div",{style:{display:"grid",gap:3},children:s.largestFiles.slice(0,8).map(a=>e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr) max-content",gap:i[3]},children:[e.jsxs("div",{title:a.path,style:{position:"relative",minWidth:0,overflow:"hidden",borderRadius:2},children:[e.jsx("div",{"aria-hidden":"true",style:{position:"absolute",inset:0,width:`${Math.max(2,a.bytes/p*100)}%`,background:"color-mix(in srgb, var(--volter-accent) 16%, transparent)"}}),e.jsx("div",{style:{position:"relative",padding:`${i[1]} ${i[2]}`,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontFamily:q,fontSize:n.sm,color:o[2]},children:a.path})]}),e.jsx("div",{style:{textAlign:"right",padding:`${i[1]} 0`,fontSize:n.sm,color:o[2]},children:C(a.bytes)})]},a.path))})]})}function z({label:s,value:p}){return e.jsxs("div",{style:{flex:1,padding:`${i[3]} ${i[4]}`,background:O[2],borderRadius:Y.sm},children:[e.jsx("div",{style:{fontSize:n.sm,color:o[3]},children:s}),e.jsx("div",{style:{marginTop:i[1],fontSize:n.lg,fontWeight:650,color:o[1]},children:p})]})}const le={width:160,flexShrink:0,borderRight:`1px solid ${I[1]}`,overflowY:"auto"},W={fontSize:n.sm,fontWeight:700,textTransform:"uppercase",color:o[3],letterSpacing:"0.05em",marginBottom:i[3]},w={display:"flex",alignItems:"center",gap:i[3],marginBottom:i[2]},B={width:65,fontSize:n.base,color:o[2],flexShrink:0},he="workspace.document",ge="Build Profiles";function ye(s){return e.jsx(ie,{})}export{ye as default,he as point,ge as title};
@@ -1 +1 @@
1
- import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{r}from"./index-nmcBqr7Y.js";import{a,c as e,g as i}from"./build-session-C4jVDt-u.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./configurations-8qaUqMH7.js";import"./index-ClgrFOcX.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const x="workspace.status",B="Build Progress",h="left",S=30;function k(){r.useSyncExternalStore(a,e,e);const s=i();return s.phase==="idle"?null:s.phase==="building"?t.jsxs("span",{className:"volter-status-copy","data-testid":"status-build-progress","data-build-phase":"building","data-status-tone":"accent",children:["Building ",s.target,"…"]}):t.jsx("span",{className:"volter-status-copy","data-testid":"status-build-progress","data-build-phase":s.result?.ok?"complete":"failed","data-status-tone":s.result?.ok?"success":"danger",children:s.result?.ok?"Build complete":"Build failed"})}export{h as align,k as default,S as order,x as point,B as title};
1
+ import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{r}from"./index-nmcBqr7Y.js";import{a,c as e,g as i}from"./build-session-D8B-93_A.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./configurations-B52h5RGp.js";import"./index-BfqJPhFO.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const x="workspace.status",B="Build Progress",h="left",S=30;function k(){r.useSyncExternalStore(a,e,e);const s=i();return s.phase==="idle"?null:s.phase==="building"?t.jsxs("span",{className:"volter-status-copy","data-testid":"status-build-progress","data-build-phase":"building","data-status-tone":"accent",children:["Building ",s.target,"…"]}):t.jsx("span",{className:"volter-status-copy","data-testid":"status-build-progress","data-build-phase":s.result?.ok?"complete":"failed","data-status-tone":s.result?.ok?"success":"danger",children:s.result?.ok?"Build complete":"Build failed"})}export{h as align,k as default,S as order,x as point,B as title};
@@ -1,4 +1,4 @@
1
- import{l as E,b as L}from"./configurations-8qaUqMH7.js";import{$ as y,r as c}from"./index-ClgrFOcX.js";import{r as m}from"./index-nmcBqr7Y.js";function B(e){if(e<1024)return`${e} B`;const n=["KB","MB","GB"];let t=e/1024,i=n[0];for(let s=1;s<n.length&&t>=1024;s++)t/=1024,i=n[s];return`${t>=10?t.toFixed(1):t.toFixed(2)} ${i}`}const w="build",C="build-profiles.document";function M(){return c().workspace.openContributedDocument(C)}const U="build-player.document",W=`${y}/build/web/index.html`;let _=0;const p=new Set;function F(){return _}function j(e){return p.add(e),()=>{p.delete(e)}}function I(){_++;for(const e of p)e();return c().workspace.openContributedDocument(U)}async function J(e){await P(e),r.phase==="done"&&r.result?.ok&&I()}function Y(){const[e,n]=m.useState([]);return m.useEffect(()=>{let t=!1;return E().then(i=>{t||n(i.filter(s=>s.role==="build").map(s=>({id:s.id,label:s.id,subtitle:s.describe??s.kind})))}).catch(()=>{t||n([])}),()=>{t=!0}},[]),e}let r={phase:"idle",target:"",log:[],result:null},$=0;const h=new Set;let D=null;function u(e){r={...r,...e},$++,x();for(const n of h)n()}function q(e){return h.add(e),()=>{h.delete(e)}}function G(){return $}function O(){return r}function H(){r.phase!=="building"&&u({phase:"idle",log:[],result:null})}function K(){D?.abort(),u({phase:"idle"})}function R(){x(),c().output.show(w)}function x(){const e=O();let n=e.log.length?`${e.log.join(`
1
+ import{l as E,b as L}from"./configurations-B52h5RGp.js";import{$ as y,r as c}from"./index-BfqJPhFO.js";import{r as m}from"./index-nmcBqr7Y.js";function B(e){if(e<1024)return`${e} B`;const n=["KB","MB","GB"];let t=e/1024,i=n[0];for(let s=1;s<n.length&&t>=1024;s++)t/=1024,i=n[s];return`${t>=10?t.toFixed(1):t.toFixed(2)} ${i}`}const w="build",C="build-profiles.document";function M(){return c().workspace.openContributedDocument(C)}const U="build-player.document",W=`${y}/build/web/index.html`;let _=0;const p=new Set;function F(){return _}function j(e){return p.add(e),()=>{p.delete(e)}}function I(){_++;for(const e of p)e();return c().workspace.openContributedDocument(U)}async function J(e){await P(e),r.phase==="done"&&r.result?.ok&&I()}function Y(){const[e,n]=m.useState([]);return m.useEffect(()=>{let t=!1;return E().then(i=>{t||n(i.filter(s=>s.role==="build").map(s=>({id:s.id,label:s.id,subtitle:s.describe??s.kind})))}).catch(()=>{t||n([])}),()=>{t=!0}},[]),e}let r={phase:"idle",target:"",log:[],result:null},$=0;const h=new Set;let D=null;function u(e){r={...r,...e},$++,x();for(const n of h)n()}function q(e){return h.add(e),()=>{h.delete(e)}}function G(){return $}function O(){return r}function H(){r.phase!=="building"&&u({phase:"idle",log:[],result:null})}function K(){D?.abort(),u({phase:"idle"})}function R(){x(),c().output.show(w)}function x(){const e=O();let n=e.log.length?`${e.log.join(`
2
2
  `)}
3
3
  `:"";if(e.phase==="done"&&e.result&&(n+=`
4
4
  ${e.result.ok?"Build complete.":`Build failed (exit code: ${e.result.code??"unknown"}).`}
@@ -1 +1 @@
1
- import{o}from"./build-session-C4jVDt-u.js";import"./configurations-8qaUqMH7.js";import"./index-ClgrFOcX.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const d="workspace.action",n=[{id:"build.web",label:"Build for Web (itch.io)",execute:()=>{o()}},{id:"build.steam",label:"Build for Desktop (Steam)",execute:()=>{o()}}];export{n as actions,d as point};
1
+ import{o}from"./build-session-D8B-93_A.js";import"./configurations-B52h5RGp.js";import"./index-BfqJPhFO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const d="workspace.action",n=[{id:"build.web",label:"Build for Web (itch.io)",execute:()=>{o()}},{id:"build.steam",label:"Build for Desktop (Steam)",execute:()=>{o()}}];export{n as actions,d as point};
@@ -1 +1 @@
1
- import{o}from"./build-session-C4jVDt-u.js";import"./configurations-8qaUqMH7.js";import"./index-ClgrFOcX.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 u="workspace.command",c={"show-build":{derivedRefresh:"always",handle:()=>o()?{ok:!0}:{ok:!1,error:"The Build Profiles document is not registered in this session."}}};export{c as commands,u as point};
1
+ import{o}from"./build-session-D8B-93_A.js";import"./configurations-B52h5RGp.js";import"./index-BfqJPhFO.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 u="workspace.command",c={"show-build":{derivedRefresh:"always",handle:()=>o()?{ok:!0}:{ok:!1,error:"The Build Profiles document is not registered in this session."}}};export{c as commands,u as point};
@@ -1 +1 @@
1
- import{a as r}from"./jsx-runtime-DPjLkJKQ.js";import{r as e,a6 as a,a7 as s,a8 as i}from"./index-ClgrFOcX.js";import{r as p}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{o as n}from"./build-session-C4jVDt-u.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./configurations-8qaUqMH7.js";const h="workspace.header",g=10;function v(){const{session:t}=e(),o=p.useSyncExternalStore(t.subscribe,t.playState,t.playState)!=="stopped";return r.jsxs(a,{variant:"ghost",size:"compact","data-testid":"project-export","aria-label":"Export project",disabled:o,title:o?"Stop Play mode before exporting the project":"Export project",className:"volter-chrome-island volter-glass-island",onClick:()=>{n()},children:[r.jsx(s,{icon:i.action.export}),"Export"]})}export{v as default,g as order,h as point};
1
+ import{a as r}from"./jsx-runtime-DPjLkJKQ.js";import{r as e,a6 as a,a7 as s,a8 as i}from"./index-BfqJPhFO.js";import{r as p}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{o as n}from"./build-session-D8B-93_A.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./configurations-B52h5RGp.js";const h="workspace.header",g=10;function v(){const{session:t}=e(),o=p.useSyncExternalStore(t.subscribe,t.playState,t.playState)!=="stopped";return r.jsxs(a,{variant:"ghost",size:"compact","data-testid":"project-export","aria-label":"Export project",disabled:o,title:o?"Stop Play mode before exporting the project":"Export project",className:"volter-chrome-island volter-glass-island",onClick:()=>{n()},children:[r.jsx(s,{icon:i.action.export}),"Export"]})}export{v as default,g as order,h as point};
@@ -1 +1 @@
1
- import{o as t,d as i}from"./build-session-C4jVDt-u.js";import"./configurations-8qaUqMH7.js";import"./index-ClgrFOcX.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 c="workspace.menu",a={menu:"window",items:[{id:"build-profiles",label:"Build Profiles",testId:"menu-build-profiles",execute:()=>{t()}},{id:"build-output",label:"Build Output",testId:"menu-build-output",execute:()=>{i()}}]};export{a as menu,c as point};
1
+ import{o as t,d as i}from"./build-session-D8B-93_A.js";import"./configurations-B52h5RGp.js";import"./index-BfqJPhFO.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 c="workspace.menu",a={menu:"window",items:[{id:"build-profiles",label:"Build Profiles",testId:"menu-build-profiles",execute:()=>{t()}},{id:"build-output",label:"Build Output",testId:"menu-build-output",execute:()=>{i()}}]};export{a as menu,c as point};
@@ -1 +1 @@
1
- import{a as i,g as t,d as r}from"./build-session-C4jVDt-u.js";import"./configurations-8qaUqMH7.js";import"./index-ClgrFOcX.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 B="workspace.service",b=()=>{let s=t().phase;return i(()=>{const o=t();o.phase==="done"&&s!=="done"&&o.result?.ok===!1&&r(),s=o.phase})};export{B as point,b as start};
1
+ import{a as i,g as t,d as r}from"./build-session-D8B-93_A.js";import"./configurations-B52h5RGp.js";import"./index-BfqJPhFO.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 B="workspace.service",b=()=>{let s=t().phase;return i(()=>{const o=t();o.phase==="done"&&s!=="done"&&o.result?.ok===!1&&r(),s=o.phase})};export{B as point,b as start};
@@ -1 +1 @@
1
- import{u as i,c6 as e,c4 as o}from"./index-ClgrFOcX.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const d=i({type:o(["perspective","orthographic"]).describe("Camera projection type"),fov:e().optional().describe("Vertical field of view in degrees (perspective only)"),near:e().optional().describe("Near clipping plane distance"),far:e().optional().describe("Far clipping plane distance"),orthoSize:e().optional().describe("Half-height of the orthographic frustum (orthographic only)"),width:e().optional().describe("Render width in pixels. Defaults to viewport width"),height:e().optional().describe("Render height in pixels. Defaults to viewport height")}).describe("Camera configuration");export{d as CameraDescriptorSchema};
1
+ import{u as i,c6 as e,c4 as o}from"./index-BfqJPhFO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const d=i({type:o(["perspective","orthographic"]).describe("Camera projection type"),fov:e().optional().describe("Vertical field of view in degrees (perspective only)"),near:e().optional().describe("Near clipping plane distance"),far:e().optional().describe("Far clipping plane distance"),orthoSize:e().optional().describe("Half-height of the orthographic frustum (orthographic only)"),width:e().optional().describe("Render width in pixels. Defaults to viewport width"),height:e().optional().describe("Render height in pixels. Defaults to viewport height")}).describe("Camera configuration");export{d as CameraDescriptorSchema};
@@ -1 +1 @@
1
- import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{a as x}from"./three-contract-Dkt6PmWY.js";import{fd as m,bQ as f,fe as j,ff as s,aL as l}from"./index-ClgrFOcX.js";import{r as u}from"./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";function h(n,t){const r=t?x(n.hierarchy,t):null;if(!r)return null;if(r.isCamera)return r;const i=r.userData._camera;return i?.isCamera?i:null}function b(n,t){return!!m()&&!!h(t,n?.id??null)}function C(n,t){return t.cameras.find(r=>r.nativeId===n.uuid)??t.cameras.find(r=>r.id===n.name||r.label===n.name)??null}function v(n){const[,t]=u.useReducer(r=>r+1,0);return u.useEffect(()=>{if(n)return n.subscribe(t)},[n]),n?.snapshot()??null}function g({adapter:n,nodeId:t}){const r=m(),i=v(r);if(!i)return null;const c=h(n,t);if(!c)return null;const a=C(c,i),d=a?.id===i.activeCameraId,o=i.transition,p=o?Math.max(0,o.durationSeconds-o.elapsedSeconds):null;return e.jsxs("div",{style:{display:"grid",gap:8},children:[a?null:e.jsx(f,{tone:"info",children:"This native camera is not registered with the active runtime controller."}),e.jsxs(j,{children:[e.jsx(s,{label:"Role",children:e.jsx(l,{tone:d?"success":"muted",children:d?"Active camera":a?"Registered camera":"Scene camera"})}),a?e.jsx(s,{label:"Runtime ID",children:e.jsx(l,{tone:"muted",children:a.id})}):null,a?.priority!==void 0?e.jsx(s,{label:"Priority",children:e.jsx(l,{tone:"muted",children:a.priority})}):null,a?.enabled!==void 0?e.jsx(s,{label:"Enabled",children:e.jsx(l,{tone:a.enabled?"success":"muted",children:a.enabled?"Yes":"No"})}):null,e.jsx(s,{label:"Active camera",children:e.jsx(l,{tone:"muted",children:i.activeCameraId??"None"})}),e.jsx(s,{label:"Controller",children:e.jsx(l,{tone:"muted",children:i.activeControllerId??"Gameplay / unowned"})}),e.jsx(s,{label:"Ownership depth",children:e.jsx(l,{tone:"muted",children:i.ownershipDepth})}),o?e.jsxs(e.Fragment,{children:[e.jsx(s,{label:"Blend",children:e.jsx(l,{tone:"muted",children:`${o.fromCameraId??"current pose"} → ${o.toCameraId}`})}),e.jsx(s,{label:"Progress",children:e.jsx(l,{tone:"muted",children:`${Math.round(o.progress*100)}% · ${p?.toFixed(2)}s left`})})]}):null]})]})}const N="selection.inspector",B="Runtime Camera",G="camera",M=350;function O(n,t){return b(n,t)}function P({adapter:n,nodeId:t}){return e.jsx(g,{adapter:n,nodeId:t})}export{P as default,G as icon,O as match,M as order,N as point,B as title};
1
+ import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{a as x}from"./three-contract-Dkt6PmWY.js";import{fd as m,bQ as f,fe as j,ff as s,aL as l}from"./index-BfqJPhFO.js";import{r as u}from"./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";function h(n,t){const r=t?x(n.hierarchy,t):null;if(!r)return null;if(r.isCamera)return r;const i=r.userData._camera;return i?.isCamera?i:null}function b(n,t){return!!m()&&!!h(t,n?.id??null)}function C(n,t){return t.cameras.find(r=>r.nativeId===n.uuid)??t.cameras.find(r=>r.id===n.name||r.label===n.name)??null}function v(n){const[,t]=u.useReducer(r=>r+1,0);return u.useEffect(()=>{if(n)return n.subscribe(t)},[n]),n?.snapshot()??null}function g({adapter:n,nodeId:t}){const r=m(),i=v(r);if(!i)return null;const c=h(n,t);if(!c)return null;const a=C(c,i),d=a?.id===i.activeCameraId,o=i.transition,p=o?Math.max(0,o.durationSeconds-o.elapsedSeconds):null;return e.jsxs("div",{style:{display:"grid",gap:8},children:[a?null:e.jsx(f,{tone:"info",children:"This native camera is not registered with the active runtime controller."}),e.jsxs(j,{children:[e.jsx(s,{label:"Role",children:e.jsx(l,{tone:d?"success":"muted",children:d?"Active camera":a?"Registered camera":"Scene camera"})}),a?e.jsx(s,{label:"Runtime ID",children:e.jsx(l,{tone:"muted",children:a.id})}):null,a?.priority!==void 0?e.jsx(s,{label:"Priority",children:e.jsx(l,{tone:"muted",children:a.priority})}):null,a?.enabled!==void 0?e.jsx(s,{label:"Enabled",children:e.jsx(l,{tone:a.enabled?"success":"muted",children:a.enabled?"Yes":"No"})}):null,e.jsx(s,{label:"Active camera",children:e.jsx(l,{tone:"muted",children:i.activeCameraId??"None"})}),e.jsx(s,{label:"Controller",children:e.jsx(l,{tone:"muted",children:i.activeControllerId??"Gameplay / unowned"})}),e.jsx(s,{label:"Ownership depth",children:e.jsx(l,{tone:"muted",children:i.ownershipDepth})}),o?e.jsxs(e.Fragment,{children:[e.jsx(s,{label:"Blend",children:e.jsx(l,{tone:"muted",children:`${o.fromCameraId??"current pose"} → ${o.toCameraId}`})}),e.jsx(s,{label:"Progress",children:e.jsx(l,{tone:"muted",children:`${Math.round(o.progress*100)}% · ${p?.toFixed(2)}s left`})})]}):null]})]})}const N="selection.inspector",B="Runtime Camera",G="camera",M=350;function O(n,t){return b(n,t)}function P({adapter:n,nodeId:t}){return e.jsx(g,{adapter:n,nodeId:t})}export{P as default,G as icon,O as match,M as order,N as point,B as title};
@@ -1,6 +1,6 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/r3f-physics-binding-DuG97FR9.js","assets/index-ClgrFOcX.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/syntactic-prop-specs-BCdwWi-T.js"])))=>i.map(i=>d[i]);
2
- import{eg as Ke,hd as Xe,d4 as Ze,eK as Ye,dv as se,he as Se,bU as Qe,bV as et,Z as q,_ as Pe,bW as tt,dw as rt,c0 as pe,hf as Ie,ge as nt,d6 as ot,aC as st}from"./index-ClgrFOcX.js";import{BabylonAuthoringAdapter as it}from"./babylon-authoring-adapter-C-EAsfMr.js";import{i as Te,a as at,b as fe,o as ct,r as me,P as lt,c as ut}from"./pixi-authoring-adapter-B1BBfTju.js";import{f as Z,t as dt,p as he}from"./pixi-transform-channels-P4rvmusc.js";import{r as pt,c as ft}from"./relative-import-specifier-CA9mSNXO.js";import{l as Ce}from"./oid-transform-Ca1oU_Ei.js";import{f as mt,a as ht,b as gt}from"./writer-tw6EcuVO.js";import{s as wt}from"./index-CHOT9sYh.js";import{registerPresentedCanvasFrame as yt,withApplicationCollector as vt,capturePixiDisplayObjectThumbnail as bt}from"./canvas-preview-frames-CSCcu2sG.js";import{a as xt}from"./source-persistence-backend-Cwy93SmQ.js";import{resolveCanvasEntryAdapterForEditor as $t,resolveCanvasPixiForEditor as St}from"./canvas-entry-runtime-CLOuJcgT.js";import{a as Ne}from"./json-history-resource-CDEoQe1R.js";import{a as Pt}from"./realm-services-CqjVBanw.js";import{n as Tt,a as Ct,i as Ot,b as Et}from"./native-debug-module-iX2-V5kg.js";import{createAssetCache as At}from"./assets-BcrMQHRv.js";import{r as kt,a as jt,b as Mt}from"./create-runtime-Bucz0XVU.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"./ingest-source-persistence-CVU1rTj0.js";import"./component-instance-root-wO1p-rLr.js";import"./user-data-DL6HsBPf.js";import"./workspace-arrangement-86_8Kk5K.js";import"./r3f-physics-binding-DuG97FR9.js";import"./debug-registry-B2THKz1v.js";import"./three-ingest-runtime-x9nLmUl-.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./native-entry-surface-BE8LJNdu.js";import"./contract-system-adapters-BDUpDoKd.js";import"./game-contract-seams-C22a4B79.js";import"./loader-BTUKnX5Q.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./adapter-surface-Y37Nzcyw.js";import"./binding-Bmxqznjk.js";import"./root-stacking-BEd9ZvxC.js";import"./setup-renderer-efjIBSGF.js";import"./index-DHhMOs_s.js";import"./defaults-DKiBJCPN.js";import"./render-settings-CUbo4Sw5.js";import"./render-features-sSb1-c5x.js";import"./seeded-random-B6zqGkWP.js";import"./loop-gate-report-N52EWFGD.js";import"./system-slot-E2mEdiih.js";import"./user-data-CODoGZqA.js";import"./object-marks-BnvSuCTt.js";import"./performance-profiler-CMbwGBuk.js";const Oe="this session has no source-write backend",Rt=new Set(["key","ref","data-oid","children","style","className"]),Ee=new Set(["x","y","rotation","scale","scale-x","scale-y","label","visible","skew"]),_t=new Set(["x","y","name","children"]),Ae=/^-?\d+(\.\d+)?$/,ke={container:'<pixiContainer label="Container" />',sprite:'<pixiSprite label="Sprite" />',text:'<pixiText label="Text" text="Text" />',graphics:'<pixiGraphics label="Graphics" />',animatedSprite:'<pixiAnimatedSprite label="AnimatedSprite" textures={[Texture.WHITE]} width={64} height={64} />',tilingSprite:'<pixiTilingSprite label="TilingSprite" texture={Texture.WHITE} width={100} height={100} />',nineSliceSprite:'<pixiNineSliceSprite label="NineSliceSprite" texture={Texture.WHITE} width={100} height={100} />',bitmapText:'<pixiBitmapText label="BitmapText" text="BitmapText" />',htmlText:'<pixiHTMLText label="HTMLText" text="HTMLText" />',meshPlane:'<pixiMeshPlane label="MeshPlane" texture={Texture.WHITE} width={100} height={100} />',perspectiveMesh:'<pixiPerspectiveMesh label="PerspectiveMesh" texture={Texture.WHITE} width={100} height={100} />',particleContainer:'<pixiParticleContainer label="ParticleContainer" />'},It=new Set(["animatedSprite","tilingSprite","nineSliceSprite","meshPlane","perspectiveMesh"]);function je(d){return Rt.has(d)||/^on[A-Z]/.test(d)||d.startsWith("__volter")}function Me(d){const h=d.replace(/[_-]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").trim();return h?h[0].toUpperCase()+h.slice(1):d}function Nt(d,h,g){const C=d.slice(d.lastIndexOf(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/r3f-physics-binding-EfYECbQc.js","assets/index-BfqJPhFO.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/syntactic-prop-specs-Coas9J4z.js"])))=>i.map(i=>d[i]);
2
+ import{eg as Ke,hd as Xe,d4 as Ze,eK as Ye,dv as se,he as Se,bU as Qe,bV as et,Z as q,_ as Pe,bW as tt,dw as rt,c0 as pe,hf as Ie,ge as nt,d6 as ot,aC as st}from"./index-BfqJPhFO.js";import{BabylonAuthoringAdapter as it}from"./babylon-authoring-adapter-BB5HErRG.js";import{i as Te,a as at,b as fe,o as ct,r as me,P as lt,c as ut}from"./pixi-authoring-adapter-qbP0YW7g.js";import{f as Z,t as dt,p as he}from"./pixi-transform-channels-P4rvmusc.js";import{r as pt,c as ft}from"./relative-import-specifier-J1WeZQaJ.js";import{l as Ce}from"./oid-transform-CinlfHYa.js";import{f as mt,a as ht,b as gt}from"./writer-tw6EcuVO.js";import{s as wt}from"./index-CFS_B4hc.js";import{registerPresentedCanvasFrame as yt,withApplicationCollector as vt,capturePixiDisplayObjectThumbnail as bt}from"./canvas-preview-frames-BwWVTr-u.js";import{a as xt}from"./source-persistence-backend-CbCbDOjd.js";import{resolveCanvasEntryAdapterForEditor as $t,resolveCanvasPixiForEditor as St}from"./canvas-entry-runtime-nWfnVKYb.js";import{a as Ne}from"./json-history-resource-De8KJl61.js";import{a as Pt}from"./realm-services-CxfLBQQ9.js";import{n as Tt,a as Ct,i as Ot,b as Et}from"./native-debug-module-L_Ofssyj.js";import{createAssetCache as At}from"./assets-BcrMQHRv.js";import{r as kt,a as jt,b as Mt}from"./create-runtime-ByZWXstA.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"./ingest-source-persistence-CrXFBT__.js";import"./component-instance-root-QYCCyhxU.js";import"./user-data-CTT8ZvVB.js";import"./workspace-arrangement-BXM0R-Uu.js";import"./r3f-physics-binding-EfYECbQc.js";import"./debug-registry-BzagDrhV.js";import"./three-ingest-runtime-QhrURliQ.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./native-entry-surface-BE8LJNdu.js";import"./contract-system-adapters-DIpeIRm_.js";import"./game-contract-seams-CuBiefwV.js";import"./loader-BTUKnX5Q.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./adapter-surface-Y37Nzcyw.js";import"./binding-Bmxqznjk.js";import"./root-stacking-BEd9ZvxC.js";import"./setup-renderer-CWvtkVDR.js";import"./index-DHhMOs_s.js";import"./defaults-DKiBJCPN.js";import"./render-settings-BUT8gPkc.js";import"./render-features-D7pQr-dE.js";import"./seeded-random-C9256-Ag.js";import"./loop-gate-report-N52EWFGD.js";import"./system-slot-E2mEdiih.js";import"./user-data-CODoGZqA.js";import"./object-marks-BnvSuCTt.js";import"./performance-profiler-CMbwGBuk.js";const Oe="this session has no source-write backend",Rt=new Set(["key","ref","data-oid","children","style","className"]),Ee=new Set(["x","y","rotation","scale","scale-x","scale-y","label","visible","skew"]),_t=new Set(["x","y","name","children"]),Ae=/^-?\d+(\.\d+)?$/,ke={container:'<pixiContainer label="Container" />',sprite:'<pixiSprite label="Sprite" />',text:'<pixiText label="Text" text="Text" />',graphics:'<pixiGraphics label="Graphics" />',animatedSprite:'<pixiAnimatedSprite label="AnimatedSprite" textures={[Texture.WHITE]} width={64} height={64} />',tilingSprite:'<pixiTilingSprite label="TilingSprite" texture={Texture.WHITE} width={100} height={100} />',nineSliceSprite:'<pixiNineSliceSprite label="NineSliceSprite" texture={Texture.WHITE} width={100} height={100} />',bitmapText:'<pixiBitmapText label="BitmapText" text="BitmapText" />',htmlText:'<pixiHTMLText label="HTMLText" text="HTMLText" />',meshPlane:'<pixiMeshPlane label="MeshPlane" texture={Texture.WHITE} width={100} height={100} />',perspectiveMesh:'<pixiPerspectiveMesh label="PerspectiveMesh" texture={Texture.WHITE} width={100} height={100} />',particleContainer:'<pixiParticleContainer label="ParticleContainer" />'},It=new Set(["animatedSprite","tilingSprite","nineSliceSprite","meshPlane","perspectiveMesh"]);function je(d){return Rt.has(d)||/^on[A-Z]/.test(d)||d.startsWith("__volter")}function Me(d){const h=d.replace(/[_-]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").trim();return h?h[0].toUpperCase()+h.slice(1):d}function Nt(d,h,g){const C=d.slice(d.lastIndexOf(`
3
3
  `,h-1)+1,h),a=d.slice(h,g);return/^\s*$/.test(C)?a.split(`
4
4
  `).map((w,c)=>c>0&&w.startsWith(C)?w.slice(C.length):w).join(`
5
5
  `):a}function Ft(d,h){const g=new Set(d);return[...g].filter(C=>{let a=h(C);for(;a;){if(g.has(a))return!1;a=h(a)}return!0})}function Bt(d){const{worldId:h,entryPath:g}=d,C=d.pixi??wt;let a,w=()=>{},c,J,N=null,P=new Map,D=new Map;const A=new Map,R=new Set,F=new Map,W=new Map;let M=Promise.resolve();const m=e=>{const t=a.displayObject(e);return(t?fe(t):void 0)??ct(h,e)},$=()=>{const e=new Set,t=r=>{const n=a.displayObject(r),o=me(n);o!==void 0&&e.add(o);const s=n?fe(n):void 0;s!==void 0&&e.add(s);for(const i of a.node(r)?.childIds??[])t(i)};for(const r of a.roots())t(r.id);return e},E=async()=>{if(!(!c?.index||!c.readSource))try{const e=await c.index();P=new Map(Object.entries(e));const t=new Set;for(const n of $()){const o=P.get(n);o&&t.add(o.file)}const r=new Map;await Promise.all([...t].map(async n=>{const o=await c.readSource(n);r.set(n,o.source)})),D=r,w()}catch{}},b=e=>{const t=m(e);if(!t)return null;const r=P.get(t);if(!r)return null;const n=D.get(r.file);if(n===void 0)return null;const o=Ce(n,r.line,r.col);if(n[o]!=="<")return null;const s=mt(n,o);return s<0?null:ht(n,o,s)},z=e=>{const t=e.replaceAll("\\","/"),r=g.replaceAll("\\","/").replace(/^\.?\//,"");if(!t.startsWith("/")&&!/^[A-Za-z]:\//.test(t))return t;for(const n of P.values()){const o=n.file.replaceAll("\\","/");if(o!==r&&!o.endsWith(`/${r}`))continue;const s=o.slice(0,-r.length);if(t.startsWith(s))return t.slice(s.length)}return r},V=e=>{const t=m(e);return(t?P.get(t)?.props:void 0)??[]},B=e=>{const t=a.displayObject(e);if(!t||!Te(t))return null;const r=me(t),n=fe(t);return r&&r!==n?r:null},_=e=>{const t=a.displayObject(e);if(!t||!Te(t))return null;const r=B(e),n=r?P.get(r):void 0,o=m(e),s=o?P.get(o):void 0,i=n?.component??s?.tag;return i?{name:i,...n?.file?{sourcePath:z(n.file)}:{}}:null},ie=e=>{const t=m(e);if(!t)return{anchored:!1,reason:"This rendered Canvas object has no authored source identity."};const r=P.get(t);if(!r)return{anchored:!1,reason:"Source metadata is still loading or unavailable."};const n=z(r.file);return{anchored:!0,kind:"source",file:n,line:r.line,col:r.col,display:`${n}:${r.line}`}},ae=d.writeBackend?{isDirty:()=>!1,save:async()=>{},destination:g,lastError:()=>{const e=J?.shell.projectHistory?.getSnapshot().lastError;return e&&(e.code==="apply-failed"||e.code==="compensation-failed"||e.code==="history-limit")?e.message:null}}:void 0,K=e=>a.getTransform(e)??{position:[0,0],rotation:0,scale:[1,1]},ee=(e,t,r,n)=>{if(!_(e))return!1;const o=he(t,n,r);if(!o.writable)return!1;const s=V(e);return o.writes.some(i=>!r.some(l=>l.name===i.prop)&&!s.some(l=>l.name===i.prop))},te=e=>{if(!e.isLiteral)return`{${e.rawValue}}`;const t=e.rawValue;return e.isExpression?t==="true"?!0:t==="false"?!1:Ae.test(t)?Number(t):t.replace(/^['"]|['"]$/g,""):t},ce=e=>e.isExpression?e.rawValue==="true"||e.rawValue==="false"?"boolean":Ae.test(e.rawValue)?"number":"string":"string",le=e=>typeof e=="number"?Z(e):typeof e=="boolean"?e?"true":"false":String(e),G=(e,t,r)=>{const n=e?.find(s=>s.name===r);if(n)return te(n);const o=t.find(s=>s.name===r);return o?o.defaultValue??o.defaultText:void 0},Y=(e,t,r)=>!!(t?.isLiteral&&r?.optional&&c?.removeProp&&!R.has(`${e}|jsx.${t.name}`)),ue=async(e,t)=>{const r=K(e),n=["position","rotation","scale"].filter(v=>dt(v,t,r)),o=W.get(e);if(W.delete(e),n.length===0&&!o)return!1;const s=v=>{if(v==="origin"){const S=a.displayObject(e);S&&o&&(S[o.kind]={x:o.before[0],y:o.before[1]})}else v==="position"?a.setTransform(e,{position:t.position}):v==="rotation"?a.setTransform(e,{rotation:t.rotation}):a.setTransform(e,{scale:t.scale});w()},i=m(e);if(!i||!c?.writeProp){console.warn(`[canvas-source ${g}] transform on "${e}" is not persistable (${i?"no source-write backend":"node has no source stamp"}) — reverting.`);for(const v of n)s(v);return!1}const l=b(e)??[],u=_(e),f=v=>ee(e,v,l,r),y=[];for(const v of n){if(f(v)){R.add(`${e}|${v}`),se(`${v} is owned by <${u?.name??"this component"}>'s own code — see Console`),q.warn(`${v} on <${u?.name??"this component"}> is not writable — the component declares no prop for it, so a written value would never reach the running game (the component's own code owns that channel). Edit ${u?.sourcePath??"the component definition"} instead. Reverting.`,"authoring"),s(v);continue}const S=he(v,r,l);if(!S.writable){R.add(`${e}|${v}`),console.warn(`[canvas-source ${g}] ${v} on "${e}" is not writable — ${S.reason} Reverting the live object.`),s(v);continue}for(const O of S.writes)y.push({channel:v,...O})}if(o&&(u&&f("position")?s("origin"):y.push({channel:"origin",prop:o.kind,value:`{ x: ${Z(o.value[0])}, y: ${Z(o.value[1])} }`})),y.length===0)return!1;let x=!1;const U=async v=>{for(const S of y){const O=await v.writeProp(i,S.prop,S.value,{addIfMissing:!0,...S.prop==="scale"||S.channel==="origin"?{allowShapeUpgrade:!0}:{}});if(O.changed){x=!0;continue}!O.dynamic&&!O.error||(O.dynamic&&R.add(`${e}|${S.channel}`),console.warn(`[canvas-source ${g}] ${S.prop} write refused for oid "${i}": ${O.dynamic?"dynamic expression (guarded)":O.error??"no change"} — reverting.`),s(S.channel))}};return y.length>1&&c.runGesture?await c.runGesture("Transform",v=>U(v)):await U(c),await E(),w(),x},de=(e,t)=>{const r=a.displayObject(e);if(r)return t==="label"?r.label:t in r?r[t]:void 0},re=(e,t,r)=>{const n=a.displayObject(e);n&&(t==="label"?n.label=String(r):t in n&&(n[t]=r))},Q=async(e,t,r)=>{const n=a.displayObject(e),o=m(e);if(!n||!o||!c?.writeProp||!Number.isFinite(r))return!1;const s={x:n.skew.x,y:n.skew.y},i=r*Math.PI/180,l={x:t==="x"?i:s.x,y:t==="y"?i:s.y};n.skew.set(l.x,l.y),w();const u=await c.writeProp(o,"skew",`{ x: ${String(Number(l.x.toFixed(6)))}, y: ${String(Number(l.y.toFixed(6)))} }`,{addIfMissing:!0,allowShapeUpgrade:!0});return!u.changed&&(u.dynamic||u.error)?(n.skew.set(s.x,s.y),w(),console.warn(`[canvas-source ${g}] skew write refused for oid "${o}": ${u.dynamic?"dynamic expression (guarded)":u.error} — reverting.`),!1):(await E(),w(),u.changed)},ne=async(e,t,r,n)=>{const o=m(e);if(!o||!c?.writeProp)return console.warn(`[canvas-source ${g}] cannot write "${r}" on "${e}": ${o?"no source-write backend in this session":"node has no source stamp"}.`),!1;const s=`${e}|${t}`,i=de(e,r);A.set(s,n),re(e,r,n),w();let l;try{l=await c.writeProp(o,r,le(n),{addIfMissing:!0})}catch(u){return A.delete(s),w(),console.warn(`[canvas-source ${g}] prop write failed for oid "${o}" prop "${r}": ${String(u)}`),!1}if(!l.changed){A.delete(s),l.dynamic&&R.add(s),i!==void 0&&re(e,r,i),w();const u=_(e)?.name??a.displayObject(e)?.label??e,f=l.dynamic?`it is bound to an expression in <${u}>'s own source, so a direct edit cannot land`:`the component declares no ${JSON.stringify(r)} prop to write${l.error?` (${l.error})`:""}`;return se(`${r} on <${u}> is not writable — see Console`),q.warn(`${JSON.stringify(r)} on <${u}> is not writable — ${f}. Edit the component definition (right-click the row → Open Component Source), or the prop that drives it. Reverting.`,"authoring"),!1}return await E(),!0},I=e=>{const t=ie(e);return t.anchored?t.file:g},H=(e,t=c?.writeProp!==void 0,r=g)=>Qe({resolve:()=>t?{reaches:"writer",anchorKind:"source-prop",destination:r,write:e}:et(Oe),record:()=>{},report:n=>{console.warn(`[canvas-source ${r}] this edit stays live-only — ${n}.`)}}),X=e=>{console.warn(`[canvas-source ${g}] ${e}`)},oe=ft({report:X,noWriterReason:Oe,backend:()=>c,onChanged:async()=>{await E(),w()}}),k=e=>oe.structRefusal(e),p=(e,t,r,n)=>oe.structOp(n??m(e),e,t,r,I(e)),T=(e,t,r)=>{const n=[...new Set(e.map(m).filter(o=>!!o))];return n.length!==new Set(e).size?k(`${t} refused: every selected node must be source-addressable.`):oe.structMany(n,t,r,I(e[0]??""))},L=e=>{const t=Ft(e,i=>a.node(i)?.parentId??null),r=i=>{const l=m(i),u=l?P.get(l):void 0,f=u?D.get(u.file):void 0;if(!l||!u||f===void 0)return null;const y=Ce(f,u.line,u.col),x=gt(f,y);return f[y]==="<"&&x>y?{file:u.file,offset:y,text:Nt(f,y,x)}:null},n=[],o=new Set;for(const i of t){const l=m(i);if(!l||o.has(l))continue;o.add(l);const u=r(i);if(!u)return null;n.push(u)}if(n.length===0)return null;const s=n[0].file;return n.some(i=>i.file!==s)?null:(n.sort((i,l)=>i.offset-l.offset),{sourceFile:s,text:n.map(i=>i.text).join(`
6
- `),count:n.length})},j=e=>(X(e),se(e),!1),ge=async e=>{N=null;const t=L(e);if(!t)return j("Copy needs source-addressable Canvas nodes from one source file.");const r=globalThis.navigator?.clipboard;if(!r?.writeText)return j("The system clipboard is unavailable.");try{await r.writeText(t.text)}catch{return j("The system clipboard refused the Canvas copy.")}return N=t,se(`Copied ${t.count} ${t.count===1?"node":"nodes"}.`),!0},we=async e=>{if(c?.writeStructMany)return T(e,"delete");let t=tt;for(const r of e)t=await p(r,"delete");return t},ye=e=>{const t=(o,s,i)=>{const l=B(o),u=l??m(o),f=u?P.get(u):void 0;return u&&f?{id:o,oid:u,file:f.file,op:s,definition:!!l}:null};if(e)return t(e,"create");const r=a.roots().at(-1);if(!r)return null;const n=t(r.id,"create-sibling");return n?{...n,op:n.definition?"create":"create-sibling"}:null},Fe=e=>{const t=ye(e);return!!N&&!!t&&t.file===N.sourceFile},Be=async e=>{const t=N;if(!t)return j("Copy or cut a Canvas node before pasting.");const r=globalThis.navigator?.clipboard;if(!r?.readText)return j("The system clipboard is unavailable.");try{if(await r.readText()!==t.text)return j("The clipboard changed after the Canvas copy.")}catch{return j("The system clipboard refused the Canvas paste.")}const n=ye(e);return n?n.file!==t.sourceFile?j("Cross-file paste is refused because the destination may not import the copied dependencies."):Se(await p(n.id,n.op,{snippet:t.text},n.oid)):j("Paste needs a source-addressable Canvas parent.")},ve=e=>{const t=[];let r=e;for(;r;)t.push(r),r=r.parent;const n=new C.Matrix;for(let o=t.length-1;o>=0;o--){const s=t[o];s.updateLocalTransform(),n.append(s.localTransform)}return n},De=(e,t)=>{const r=a.displayObject(e),n=a.displayObject(t);if(!r||!n)return null;const o=ve(n).clone().invert().append(ve(r)),s=new C.Transform;o.decompose(s);const i=r.pivot??{x:0,y:0};return{position:[o.tx+i.x*o.a+i.y*o.c,o.ty+i.x*o.b+i.y*o.d],rotation:[s.rotation],scale:[s.scale.x,s.scale.y],scalarChannels:["rotation"]}},be=e=>{let t=0;const r=n=>{me(a.displayObject(n))===e&&t++;for(const o of a.node(n)?.childIds??[])r(o)};for(const n of a.roots())r(n.id);return t},We=(e,t)=>{const r=B(e);if(!r)return 0;let n=1;const o=s=>{s!==e&&B(s)===r&&!b(s)?.some(i=>i.name===t)&&(n+=1);for(const i of a.node(s)?.childIds??[])o(i)};for(const s of a.roots())o(s.id);return n},Ve=async(e,t)=>{const r=m(e),n=t.startsWith("jsx.")?t.slice(4):null;if(!r||!n||!c?.removeProp)return!1;const o=await c.removeProp(r,n);return o.changed?(A.delete(`${e}|${t}`),await E(),w(),!0):(X(`revert ${n} refused/no-op: ${o.error??"no change"}.`),!1)},xe=(e,t)=>(e==="position"?["x","y"]:e==="rotation"?["rotation"]:t.some(n=>n.name==="scale-x"||n.name==="scale-y")?["scale-x","scale-y"]:["scale"]).filter(n=>t.some(o=>o.name===n)),Le=async(e,t)=>{const r=m(e),n=b(e);if(!r||!n||!c?.removeProp)return!1;const o=xe(t,n);if(o.length===0)return!1;let s=!1;const i=async l=>{for(const u of o){const f=await l.removeProp?.(r,u);f?.changed?s=!0:X(`revert ${u} refused/no-op: ${f?.error??"no change"}.`)}};return o.length>1&&c.runGesture?await c.runGesture(`Remove ${t}`,l=>i(l)):await i(c),s?(await E(),w(),!0):!1},ze={openComponent:()=>{Ze(Ye)},describe:e=>{const t=_(e);if(!t||Xe(t.name,t.sourcePath).length===0)return null;const r=b(e);if(!r)return null;const n=V(e),o=r.map(s=>{const i=`jsx.${s.name}`,l=n.find(f=>f.name===s.name);if(je(s.name)||Ee.has(s.name)||!Y(e,s,l))return null;const u=!!(l?.defaultValue!==void 0&&B(e)&&c?.runGesture&&c.writeComponentDefault&&c.removeProp);return{path:i,label:Me(s.name),value:te(s),...l?.defaultText===void 0?{}:{defaultText:l.defaultText},canApplyToComponent:u,affectedInstanceCount:We(e,s.name),...u?{}:{applyUnavailableReason:l?.defaultValue===void 0?"The component default is computed or absent, so source cannot be changed safely.":"This session cannot atomically update the component and its callsite."}}}).filter(s=>s!==null);return{componentName:t.name,...t.sourcePath?{sourcePath:t.sourcePath}:{},overrides:o}},revert:async(e,t)=>{let r=!1;const n=async o=>{const s=m(e);if(s)for(const i of t){const l=i.startsWith("jsx.")?i.slice(4):null;if(!l)continue;const u=await o.removeProp?.(s,l);r||=u?.changed===!0}};return t.length>1&&c?.runGesture?await c.runGesture(`Revert ${t.length} Overrides`,n):c&&await n(c),await E(),w(),r?{destination:I(e),persisted:!0}:void 0},applyToComponent:async(e,t)=>{const r=t.startsWith("jsx.")?t.slice(4):null,n=r?V(e).find(u=>u.name===r):void 0,o=B(e),s=m(e),i=_(e);if(!r||n?.defaultValue===void 0||!o||!s||!c?.runGesture||!c.writeComponentDefault||!c.removeProp)return{changed:!1,message:"Apply was refused because both literal source writes are not available."};const l=G(b(e),V(e),r);return await c.runGesture(`Apply ${r} to ${i?.name??"Component"}`,async u=>{const f=await u.writeComponentDefault?.(o,r,le(l));if(!f?.changed)throw new Error(f?.error??"The component default did not change.");const y=await u.removeProp?.(s,r);if(!y?.changed)throw new Error(y?.error??"The callsite override was not removed.")}),await E(),w(),{changed:!0,message:`${r} now defaults to ${String(l)} in ${i?.name??"the component"}.`,write:{destination:i?.sourcePath??I(e),persisted:!0}}}},$e={create:(e,t,r)=>{const n=ke[e],o=n&&r?n.replace(/\s*\/>$/,` x={${Z(r.x)}} y={${Z(r.y)}} />`):n;if(!o||!c?.writeStruct)return{id:"",ack:void 0};const s=It.has(e)?{snippet:o,ensureImport:{name:"Texture",module:"pixi.js"}}:{snippet:o};if(t)return{id:"",ack:p(t,"create",s)};const i=a.roots().at(-1);return i?{id:"",ack:p(i.id,"create-sibling",s)}:{id:"",ack:k("create refused: the source needs one addressable root insertion point.")}},creatableKinds:e=>c?.writeStruct?e&&!m(e)?[]:!e&&a.roots().length===0?[]:at.filter(t=>ke[t.kind]!==void 0).map(t=>({...t})):[],remove:e=>p(e,"delete"),removeMany:e=>we(e),copy:e=>ge(e),canCopy:e=>L(e)!==null,cut:async e=>await ge(e)?Se(await we(e)):!1,paste:e=>Be(e),canPaste:e=>Fe(e),duplicate:e=>({id:e,ack:p(e,"duplicate")}),wrap:(e,t)=>p(e,"wrap",{wrapperTag:t??"pixiContainer"}),unwrap:e=>p(e,"unwrap"),group:e=>{const t=[...new Set(e)];if(t.length<2)return{id:null,ack:void 0};const r=a.node(t[0])?.parentId??null;return t.some(n=>a.node(n)?.parentId!==r)?{id:null,ack:k("group refused: select two or more siblings.")}:{id:"",ack:T(t,"group",{wrapperTag:"pixiContainer"})}},canUngroup:e=>{const t=m(e);return!!(t&&P.get(t)?.tag==="pixiContainer"&&(a.node(e)?.childIds.length??0)>0)},ungroup:e=>$e.canUngroup?.(e)?{ids:[...a.node(e)?.childIds??[]],ack:p(e,"unwrap")}:{ids:[],ack:void 0},reparent:(e,t)=>{if(!t)return k("reparent refused: drop onto a source-addressable container.");const r=m(t),n=m(e),o=De(e,t);return!r||!n||!o?k("reparent refused: the source or destination is not addressable."):p(e,"reparent",{parentOid:r,rebase:o,destinationInstances:be(r),sourceInstances:be(n)})},reorder:(e,t)=>{if(t){const o=m(t);return o?p(e,"reorder",{targetOid:o}):k("reorder refused: the target has no source identity.")}const r=a.node(e)?.parentId,n=r?m(r):null;return n?p(e,"reorder",{parentOid:n}):k("reorder-to-end refused: the parent has no source identity.")}},Ge=(e,t)=>pt(z(e),z(t)),He=async e=>{const t=e.sourcePath;if(!t||!c?.readSource)return null;try{const{source:r}=await c.readSource(t),{parseAuthoringTsx:n}=await Pe(async()=>{const{parseAuthoringTsx:s}=await import("./r3f-physics-binding-DuG97FR9.js").then(i=>i.t);return{parseAuthoringTsx:s}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),{localComponentPropSpecs:o}=await Pe(async()=>{const{localComponentPropSpecs:s}=await import("./syntactic-prop-specs-BCdwWi-T.js");return{localComponentPropSpecs:s}},__vite__mapDeps([11,1,2,3,4,5,6,7,8,9,10]));return o(n(t,r),new Map).get(e.name)??null}catch{return null}},Ue=e=>e.filter(t=>!t.optional&&t.defaultText===void 0&&t.type!=="enum"&&!_t.has(t.name)),qe=e=>e.filter(t=>!t.optional&&t.defaultText===void 0&&t.type==="enum"&&t.options?.[0]!==void 0).map(t=>{const r=t.options?.[0];return typeof r=="string"?` ${t.name}=${JSON.stringify(r)}`:` ${t.name}={${r}}`}).join("");return{provenance:{source:"source-code",label:"Pixi source",detail:"Live @pixi/react display tree; literal JSX props write back to the .tsx source (expression-bound props are read-only)."},...ae?{persistence:ae}:{},structure:$e,assetDrop:{accepts:(e,t,r)=>{if(!c?.writeStruct||!(e?m(e):a.roots().at(-1)?.id))return!1;const o=r?.item;return o?.kind==="component"?o.surface==="canvas":/\.(?:png|jpe?g|webp|gif|avif|svg)$/i.test(t)},drop:async(e,t,r)=>{const n=e||a.roots().at(-1)?.id||"",o=m(n),s=o?P.get(o):void 0;if(!n||!s)return k("asset drop refused: there is no source-addressable insertion point.");const i=r?.item,l=r?.position,u=l?` x={${Z(l[0])}} y={${Z(l[1])}}`:"";let f,y;if(i?.kind==="component"){if(i.surface!=="canvas")return k(`${i.name} is a ${i.surface} component, not a Canvas prefab.`);const x=await He(i),U=x?Ue(x):[];if(U.length>0){const O=U.map(Je=>`\`${Je.name}\``).join(", ");return k(`${i.name} needs ${O} — required props with no default, which a drop cannot supply. Place it from a story that provides them, or give them defaults in ${i.sourcePath??"its component"}.`)}const S=(x?x.some(O=>O.name==="x"||O.name==="y"):null)===!1;if(S&&l){const O=`${i.name} places itself — its own code owns x/y, so the drop point was not written. Move it by editing that component, or give it x/y props.`;se(O),X(O)}f=`<${i.name}${S?"":u}${x?qe(x):""} />`,y={name:i.name,module:Ge(s.file,i.sourcePath),kind:i.exportKind}}else{if(!/\.(?:png|jpe?g|webp|gif|avif|svg)$/i.test(t))return k(`${t} is not an image or Canvas prefab.`);f=`<pixiSprite label="${(t.split("/").pop()?.replace(/\.[^.]+$/,"")||"Sprite").replace(/["\\]/g,"")}" texture={Texture.from(${JSON.stringify(t)})}${u} />`,y={name:"Texture",module:"pixi.js"}}return p(n,e?"create":"create-sibling",{snippet:f,ensureImport:y})}},truth:e=>({site:ie(e),writeAnchorKind:c&&m(e)?"source-prop":"live-only"}),componentIdentity:_,instances:()=>ze,bind(e){a=e.a2d,w=e.notify,J=e.store,c=Ke(d.writeBackend,e.store.shell.projectHistory),E()},onReindex(){for(const e of $()){const t=P.get(e);if(t===void 0||!D.has(t.file)){E();return}}},transformEditability(e,t){if(!m(e))return{writable:!1,reason:"This rendered part has no authored source identity."};if(!c?.writeProp)return{writable:!1,reason:"This session has no source writer."};if(R.has(`${e}|${t}`))return{writable:!1,reason:`${t} is controlled by a JSX expression.`};const n=b(e);if(!n)return{writable:!1,reason:"Source metadata is still loading or unavailable."};if(ee(e,t,n,K(e))){const s=_(e)?.name??"this component";return{writable:!1,reason:`${t} is owned by <${s}>'s own code — it declares no prop for it.`}}const o=he(t,K(e),n);return o.writable?{writable:!0,...c.removeProp&&xe(t,n).length>0?{removable:!0}:{}}:{writable:!1,reason:o.reason}},beginTransformEdit(e){F.has(e)||F.set(e,K(e))},writeOrigin(e,t,r){const n=a.displayObject(e),o=n?.[t];if(!n||typeof o?.x!="number"||typeof o.y!="number")return;const s=W.get(e)?.before??[o.x,o.y];n[t]={x:r[0],y:r[1]},W.set(e,{kind:t,value:r,before:s}),w()},writeTransform(e,t){a.setTransform(e,t),w()},endTransformEdit(e){const t=F.get(e);if(!t)return;F.delete(e);const r=M.then(()=>H(()=>ue(e,t).catch(n=>(console.error(`[canvas-source ${I(e)}] transform commit failed`,n),!1)),c?.writeProp!==void 0,I(e)));return M=r.then(()=>{},n=>{console.error(`[canvas-source ${g}] transform commit failed`,n)}),r},removeTransform(e,t){return H(()=>Le(e,t),c?.removeProp!==void 0,I(e))},reportStructureLiveOnly(e,t){console.warn(`[canvas-source ${g}] ${e} stayed live-only — ${t}.`)},properties(e){if(!a.displayObject(e))return[];const t=[{path:"name",label:"Name",type:"string"},{path:"visible",label:"Visible",type:"boolean",group:"Visibility"}],r=b(e)??[],n=r.find(f=>f.name==="skew"),o=n?!n.isLiteral:!1;t.push({path:"skew.x",label:"Skew X (deg)",type:"number",group:"Transform",readonly:o},{path:"skew.y",label:"Skew Y (deg)",type:"number",group:"Transform",readonly:o});const s=V(e),i=new Map(r.map(f=>[f.name,f])),l=[...s.map(f=>f.name),...r.filter(f=>!s.some(y=>y.name===f.name)).map(f=>f.name)],u=_(e)?.name??"Properties";for(const f of l){if(je(f)||Ee.has(f))continue;const y=i.get(f),x=s.find(S=>S.name===f),U=!y&&x?.defaultText!==void 0&&x.defaultValue===void 0,v=Y(e,y,x);t.push({path:`jsx.${f}`,label:Me(f),type:U?"string":x?.type??(y?ce(y):"string"),...x?.options?{options:[...x.options]}:{},readonly:U||(y?!y.isLiteral:!1),...y?{}:{defaulted:!0},...v?{resettable:!0}:{},...v&&x?.defaultText!==void 0?{revertsTo:x.defaultText}:{},group:u})}return t},get(e,t){const r=a.displayObject(e);if(!r)return;const n=A.get(`${e}|${t}`);if(n!==void 0)return n;if(t==="name")return r.label??"";if(t==="visible")return r.visible;if(t==="skew.x"||t==="skew.y")return Number(((t==="skew.x"?r.skew.x:r.skew.y)*180/Math.PI).toFixed(4));if(t.startsWith("jsx."))return G(b(e),V(e),t.slice(4))},set(e,t,r){if(t==="skew.x"||t==="skew.y")return H(()=>Q(e,t==="skew.x"?"x":"y",Number(r)),void 0,I(e));const n=t==="name"?"label":t==="visible"?"visible":t.startsWith("jsx.")?t.slice(4):null;if(n)return H(()=>ne(e,t,n,r),void 0,I(e))},remove(e,t){return H(()=>Ve(e,t),c?.removeProp!==void 0,I(e))},dispose(){A.clear(),R.clear(),F.clear()}}}function Dt(d,h,g,C=.1){const a=d.getBoundingClientRect();if(a.width<2||a.height<2||!(h.width>0)||!(h.height>0))return!1;const w=Math.min(4,Math.max(C,Math.min((a.width-96)/h.width,(a.height-96)/h.height)));return g.setView(a.width/2-(h.x+h.width/2)*w,a.height/2-(h.y+h.height/2)*w,w),!0}function Wt(d,h){return yt(d,async()=>{for(let g=0;g<24;g++){if(h())return null;await new Promise(C=>setTimeout(C,0))}return null})}const Re={width:1280,height:720};function Vt(){return jt({loop:Mt({update:()=>{}}),assets:At()})}function Lt(){const d=document.createElement("canvas");return d.dataset.volterCanvasSceneSurface="true",d.style.position="absolute",d.style.inset="0",d.style.width="100%",d.style.height="100%",d.style.display="block",d}function zt(d){const{worldId:h,entry:g,layer:C,canvas:a,game:w,mounted:c,store:J,onFirstFrame:N}=d,P=xt({history:J.shell.projectHistory}),D=new it(c.substrate.root,J,{canvas:a,api:c.substrate.api,persistence:P,journal:Ne(h),provenance:{source:"source-code",label:"babylon",detail:"Native Babylon.js scene graph; imperative edits write to the construction site in the game’s own source."}});let A=w.systemAdapters;pe(A);const R=w.subscribeSystemAdapters?.(()=>{A=w.systemAdapters,Ie(A),J.shell.notifyIngestEdit()}),F=()=>{const b=C.getBoundingClientRect();b.width>0&&b.height>0&&c.resize?.(b.width,b.height)},W=new ResizeObserver(F);W.observe(C),F();let M=!1,m=!1,$=0;const E=()=>{if($=requestAnimationFrame(E),!M)try{c.update?.(0),m||(m=!0,N?.())}catch(b){cancelAnimationFrame($),q.error(`[babylon-design] world "${h}" failed to render: ${String(b)}`,"authoring")}};return $=requestAnimationFrame(E),q.log(`[babylon-design] world "${h}" mounted as a native Babylon Scene (${g})`,"authoring"),{adapter:D,dispose(){M=!0,cancelAnimationFrame($),W.disconnect(),D.dispose(),R?.(),pe(null),c.dispose(),a.remove(),w.dispose()}}}const _e=new WeakSet;async function Xr(d,h,g,C,a,w,c){if(!h)throw new Error(`canvas root "${d}": no \`entry\` declared — nothing to mount.`);const N=await(await Pt(C,rt())).loadEntryModule(h,d,"canvas"),P=Tt(d,N),D=Ct(d,N,"canvas"),A=await $t(N,d);if(!A)throw new Error(`canvas root "${d}": entry module "${h}" must default-export a React component (\`export default function World() { … }\`) — or export an \`adapter\` for full control.`);const R=st(),F=R?.config.resolution?.width??Re.width,W=R?.config.resolution?.height??Re.height,M=w??ot,m=Lt();g.appendChild(m);const $=Vt(),E={canvas:m,width:F,height:W,game:$,headless:!1,transparent:!0,preserveDrawingBuffer:!0};let b,z;try{b=await vt(async p=>{const T=await A.mount(E);return z=p[0],T})}catch(p){throw m.remove(),$.dispose(),p}if(kt($,A,b,{id:d}),Ot($,P?[P]:[]),Et($,D?[D]:[]),b.substrate.name==="babylon")return zt({worldId:d,entry:h,layer:g,canvas:m,game:$,mounted:b,store:a,onFirstFrame:c});if(b.substrate.name!=="pixi")throw b.dispose(),m.remove(),$.dispose(),new Error(`canvas root "${d}" mounted undeclared editor substrate "${b.substrate.name}" — declare pixi or babylon and provide its authoring adapter.`);const V=b.substrate.root,B=await St();z===void 0&&q.error(`[canvas-design] world "${d}" mounted, but its Pixi Application was never handed to the design view (Pixi's \`__PIXI_APP_INIT__\` hook did not report one) — this Scene will render no frames at all. The world itself is fine; the editor cannot draw it.`,"authoring");let _=$.systemAdapters;pe(_);const ie=$.subscribeSystemAdapters?.(()=>{_=$.systemAdapters,Ie(_),a.shell.notifyIngestEdit()}),ae=await nt(),K=new lt(V,a,{pixi:B,identity:ut(d),journal:Ne(d),target:Bt({worldId:d,entryPath:h,pixi:B,writeBackend:ae}),surface:()=>m,capturePreview:(p,T)=>bt(p,{...T,pixi:B}),pointFromClient:(p,T,L)=>{const j=M.get();return{x:(p-L.left-j.x)/j.zoom,y:(T-L.top-j.y)/j.zoom}}}),ee=()=>{const p=g.getBoundingClientRect(),T=z?.renderer;T&&p.width>0&&p.height>0&&T.resize(p.width,p.height)},te=new ResizeObserver(ee);te.observe(g),ee();const ce=()=>{const p=z?.renderer;if(!p)return!1;const T=g.getBoundingClientRect();T.width>0&&T.height>0&&(p.screen.width!==T.width||p.screen.height!==T.height)&&p.resize(T.width,T.height);const L=M.get();return p.render({container:V,transform:new B.Matrix(L.zoom,0,0,L.zoom,L.x,L.y)}),!0},le=Wt(m,ce);let G=0,Y=!1,ue=!1;const de=()=>{if(G=requestAnimationFrame(de),!Y)try{ce()&&!ue&&(ue=!0,c?.())}catch(p){cancelAnimationFrame(G),G=0,q.error(`[canvas-design] world "${d}" failed to render — the design view is frozen: ${String(p)}`,"authoring")}};G=requestAnimationFrame(de);const re=_e.has(M);_e.add(M);const Q=g.getBoundingClientRect();!re&&Q.width>0&&Q.height>0&&M.setView(Q.width/2,Q.height/2,1);let ne=0,I=0,H=re;const X=M.subscribe(()=>{H=!0}),oe=()=>{const p=g.getBoundingClientRect();return p.width<2||p.height<2?1:Math.max(1,Math.min((p.width-96)/F,(p.height-96)/W))},k=()=>{if(H||Y||I++>180)return;const p=V.getBounds();Dt(g,p,M,oe())||(ne=requestAnimationFrame(k))};return ne=requestAnimationFrame(k),q.log(`[canvas-design] world "${d}" mounted for design-time authoring (${h})`,"authoring"),{adapter:K,dispose(){Y=!0,cancelAnimationFrame(G),cancelAnimationFrame(ne),X(),te.disconnect(),le(),K.dispose(),ie?.(),pe(null);try{b.dispose()}catch(p){q.error(`[canvas-design] dispose failed: ${String(p)}`,"authoring")}m.remove(),$.dispose()}}}export{Xr as mountCanvasDesignLayer};
6
+ `),count:n.length})},j=e=>(X(e),se(e),!1),ge=async e=>{N=null;const t=L(e);if(!t)return j("Copy needs source-addressable Canvas nodes from one source file.");const r=globalThis.navigator?.clipboard;if(!r?.writeText)return j("The system clipboard is unavailable.");try{await r.writeText(t.text)}catch{return j("The system clipboard refused the Canvas copy.")}return N=t,se(`Copied ${t.count} ${t.count===1?"node":"nodes"}.`),!0},we=async e=>{if(c?.writeStructMany)return T(e,"delete");let t=tt;for(const r of e)t=await p(r,"delete");return t},ye=e=>{const t=(o,s,i)=>{const l=B(o),u=l??m(o),f=u?P.get(u):void 0;return u&&f?{id:o,oid:u,file:f.file,op:s,definition:!!l}:null};if(e)return t(e,"create");const r=a.roots().at(-1);if(!r)return null;const n=t(r.id,"create-sibling");return n?{...n,op:n.definition?"create":"create-sibling"}:null},Fe=e=>{const t=ye(e);return!!N&&!!t&&t.file===N.sourceFile},Be=async e=>{const t=N;if(!t)return j("Copy or cut a Canvas node before pasting.");const r=globalThis.navigator?.clipboard;if(!r?.readText)return j("The system clipboard is unavailable.");try{if(await r.readText()!==t.text)return j("The clipboard changed after the Canvas copy.")}catch{return j("The system clipboard refused the Canvas paste.")}const n=ye(e);return n?n.file!==t.sourceFile?j("Cross-file paste is refused because the destination may not import the copied dependencies."):Se(await p(n.id,n.op,{snippet:t.text},n.oid)):j("Paste needs a source-addressable Canvas parent.")},ve=e=>{const t=[];let r=e;for(;r;)t.push(r),r=r.parent;const n=new C.Matrix;for(let o=t.length-1;o>=0;o--){const s=t[o];s.updateLocalTransform(),n.append(s.localTransform)}return n},De=(e,t)=>{const r=a.displayObject(e),n=a.displayObject(t);if(!r||!n)return null;const o=ve(n).clone().invert().append(ve(r)),s=new C.Transform;o.decompose(s);const i=r.pivot??{x:0,y:0};return{position:[o.tx+i.x*o.a+i.y*o.c,o.ty+i.x*o.b+i.y*o.d],rotation:[s.rotation],scale:[s.scale.x,s.scale.y],scalarChannels:["rotation"]}},be=e=>{let t=0;const r=n=>{me(a.displayObject(n))===e&&t++;for(const o of a.node(n)?.childIds??[])r(o)};for(const n of a.roots())r(n.id);return t},We=(e,t)=>{const r=B(e);if(!r)return 0;let n=1;const o=s=>{s!==e&&B(s)===r&&!b(s)?.some(i=>i.name===t)&&(n+=1);for(const i of a.node(s)?.childIds??[])o(i)};for(const s of a.roots())o(s.id);return n},Ve=async(e,t)=>{const r=m(e),n=t.startsWith("jsx.")?t.slice(4):null;if(!r||!n||!c?.removeProp)return!1;const o=await c.removeProp(r,n);return o.changed?(A.delete(`${e}|${t}`),await E(),w(),!0):(X(`revert ${n} refused/no-op: ${o.error??"no change"}.`),!1)},xe=(e,t)=>(e==="position"?["x","y"]:e==="rotation"?["rotation"]:t.some(n=>n.name==="scale-x"||n.name==="scale-y")?["scale-x","scale-y"]:["scale"]).filter(n=>t.some(o=>o.name===n)),Le=async(e,t)=>{const r=m(e),n=b(e);if(!r||!n||!c?.removeProp)return!1;const o=xe(t,n);if(o.length===0)return!1;let s=!1;const i=async l=>{for(const u of o){const f=await l.removeProp?.(r,u);f?.changed?s=!0:X(`revert ${u} refused/no-op: ${f?.error??"no change"}.`)}};return o.length>1&&c.runGesture?await c.runGesture(`Remove ${t}`,l=>i(l)):await i(c),s?(await E(),w(),!0):!1},ze={openComponent:()=>{Ze(Ye)},describe:e=>{const t=_(e);if(!t||Xe(t.name,t.sourcePath).length===0)return null;const r=b(e);if(!r)return null;const n=V(e),o=r.map(s=>{const i=`jsx.${s.name}`,l=n.find(f=>f.name===s.name);if(je(s.name)||Ee.has(s.name)||!Y(e,s,l))return null;const u=!!(l?.defaultValue!==void 0&&B(e)&&c?.runGesture&&c.writeComponentDefault&&c.removeProp);return{path:i,label:Me(s.name),value:te(s),...l?.defaultText===void 0?{}:{defaultText:l.defaultText},canApplyToComponent:u,affectedInstanceCount:We(e,s.name),...u?{}:{applyUnavailableReason:l?.defaultValue===void 0?"The component default is computed or absent, so source cannot be changed safely.":"This session cannot atomically update the component and its callsite."}}}).filter(s=>s!==null);return{componentName:t.name,...t.sourcePath?{sourcePath:t.sourcePath}:{},overrides:o}},revert:async(e,t)=>{let r=!1;const n=async o=>{const s=m(e);if(s)for(const i of t){const l=i.startsWith("jsx.")?i.slice(4):null;if(!l)continue;const u=await o.removeProp?.(s,l);r||=u?.changed===!0}};return t.length>1&&c?.runGesture?await c.runGesture(`Revert ${t.length} Overrides`,n):c&&await n(c),await E(),w(),r?{destination:I(e),persisted:!0}:void 0},applyToComponent:async(e,t)=>{const r=t.startsWith("jsx.")?t.slice(4):null,n=r?V(e).find(u=>u.name===r):void 0,o=B(e),s=m(e),i=_(e);if(!r||n?.defaultValue===void 0||!o||!s||!c?.runGesture||!c.writeComponentDefault||!c.removeProp)return{changed:!1,message:"Apply was refused because both literal source writes are not available."};const l=G(b(e),V(e),r);return await c.runGesture(`Apply ${r} to ${i?.name??"Component"}`,async u=>{const f=await u.writeComponentDefault?.(o,r,le(l));if(!f?.changed)throw new Error(f?.error??"The component default did not change.");const y=await u.removeProp?.(s,r);if(!y?.changed)throw new Error(y?.error??"The callsite override was not removed.")}),await E(),w(),{changed:!0,message:`${r} now defaults to ${String(l)} in ${i?.name??"the component"}.`,write:{destination:i?.sourcePath??I(e),persisted:!0}}}},$e={create:(e,t,r)=>{const n=ke[e],o=n&&r?n.replace(/\s*\/>$/,` x={${Z(r.x)}} y={${Z(r.y)}} />`):n;if(!o||!c?.writeStruct)return{id:"",ack:void 0};const s=It.has(e)?{snippet:o,ensureImport:{name:"Texture",module:"pixi.js"}}:{snippet:o};if(t)return{id:"",ack:p(t,"create",s)};const i=a.roots().at(-1);return i?{id:"",ack:p(i.id,"create-sibling",s)}:{id:"",ack:k("create refused: the source needs one addressable root insertion point.")}},creatableKinds:e=>c?.writeStruct?e&&!m(e)?[]:!e&&a.roots().length===0?[]:at.filter(t=>ke[t.kind]!==void 0).map(t=>({...t})):[],remove:e=>p(e,"delete"),removeMany:e=>we(e),copy:e=>ge(e),canCopy:e=>L(e)!==null,cut:async e=>await ge(e)?Se(await we(e)):!1,paste:e=>Be(e),canPaste:e=>Fe(e),duplicate:e=>({id:e,ack:p(e,"duplicate")}),wrap:(e,t)=>p(e,"wrap",{wrapperTag:t??"pixiContainer"}),unwrap:e=>p(e,"unwrap"),group:e=>{const t=[...new Set(e)];if(t.length<2)return{id:null,ack:void 0};const r=a.node(t[0])?.parentId??null;return t.some(n=>a.node(n)?.parentId!==r)?{id:null,ack:k("group refused: select two or more siblings.")}:{id:"",ack:T(t,"group",{wrapperTag:"pixiContainer"})}},canUngroup:e=>{const t=m(e);return!!(t&&P.get(t)?.tag==="pixiContainer"&&(a.node(e)?.childIds.length??0)>0)},ungroup:e=>$e.canUngroup?.(e)?{ids:[...a.node(e)?.childIds??[]],ack:p(e,"unwrap")}:{ids:[],ack:void 0},reparent:(e,t)=>{if(!t)return k("reparent refused: drop onto a source-addressable container.");const r=m(t),n=m(e),o=De(e,t);return!r||!n||!o?k("reparent refused: the source or destination is not addressable."):p(e,"reparent",{parentOid:r,rebase:o,destinationInstances:be(r),sourceInstances:be(n)})},reorder:(e,t)=>{if(t){const o=m(t);return o?p(e,"reorder",{targetOid:o}):k("reorder refused: the target has no source identity.")}const r=a.node(e)?.parentId,n=r?m(r):null;return n?p(e,"reorder",{parentOid:n}):k("reorder-to-end refused: the parent has no source identity.")}},Ge=(e,t)=>pt(z(e),z(t)),He=async e=>{const t=e.sourcePath;if(!t||!c?.readSource)return null;try{const{source:r}=await c.readSource(t),{parseAuthoringTsx:n}=await Pe(async()=>{const{parseAuthoringTsx:s}=await import("./r3f-physics-binding-EfYECbQc.js").then(i=>i.t);return{parseAuthoringTsx:s}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),{localComponentPropSpecs:o}=await Pe(async()=>{const{localComponentPropSpecs:s}=await import("./syntactic-prop-specs-Coas9J4z.js");return{localComponentPropSpecs:s}},__vite__mapDeps([11,1,2,3,4,5,6,7,8,9,10]));return o(n(t,r),new Map).get(e.name)??null}catch{return null}},Ue=e=>e.filter(t=>!t.optional&&t.defaultText===void 0&&t.type!=="enum"&&!_t.has(t.name)),qe=e=>e.filter(t=>!t.optional&&t.defaultText===void 0&&t.type==="enum"&&t.options?.[0]!==void 0).map(t=>{const r=t.options?.[0];return typeof r=="string"?` ${t.name}=${JSON.stringify(r)}`:` ${t.name}={${r}}`}).join("");return{provenance:{source:"source-code",label:"Pixi source",detail:"Live @pixi/react display tree; literal JSX props write back to the .tsx source (expression-bound props are read-only)."},...ae?{persistence:ae}:{},structure:$e,assetDrop:{accepts:(e,t,r)=>{if(!c?.writeStruct||!(e?m(e):a.roots().at(-1)?.id))return!1;const o=r?.item;return o?.kind==="component"?o.surface==="canvas":/\.(?:png|jpe?g|webp|gif|avif|svg)$/i.test(t)},drop:async(e,t,r)=>{const n=e||a.roots().at(-1)?.id||"",o=m(n),s=o?P.get(o):void 0;if(!n||!s)return k("asset drop refused: there is no source-addressable insertion point.");const i=r?.item,l=r?.position,u=l?` x={${Z(l[0])}} y={${Z(l[1])}}`:"";let f,y;if(i?.kind==="component"){if(i.surface!=="canvas")return k(`${i.name} is a ${i.surface} component, not a Canvas prefab.`);const x=await He(i),U=x?Ue(x):[];if(U.length>0){const O=U.map(Je=>`\`${Je.name}\``).join(", ");return k(`${i.name} needs ${O} — required props with no default, which a drop cannot supply. Place it from a story that provides them, or give them defaults in ${i.sourcePath??"its component"}.`)}const S=(x?x.some(O=>O.name==="x"||O.name==="y"):null)===!1;if(S&&l){const O=`${i.name} places itself — its own code owns x/y, so the drop point was not written. Move it by editing that component, or give it x/y props.`;se(O),X(O)}f=`<${i.name}${S?"":u}${x?qe(x):""} />`,y={name:i.name,module:Ge(s.file,i.sourcePath),kind:i.exportKind}}else{if(!/\.(?:png|jpe?g|webp|gif|avif|svg)$/i.test(t))return k(`${t} is not an image or Canvas prefab.`);f=`<pixiSprite label="${(t.split("/").pop()?.replace(/\.[^.]+$/,"")||"Sprite").replace(/["\\]/g,"")}" texture={Texture.from(${JSON.stringify(t)})}${u} />`,y={name:"Texture",module:"pixi.js"}}return p(n,e?"create":"create-sibling",{snippet:f,ensureImport:y})}},truth:e=>({site:ie(e),writeAnchorKind:c&&m(e)?"source-prop":"live-only"}),componentIdentity:_,instances:()=>ze,bind(e){a=e.a2d,w=e.notify,J=e.store,c=Ke(d.writeBackend,e.store.shell.projectHistory),E()},onReindex(){for(const e of $()){const t=P.get(e);if(t===void 0||!D.has(t.file)){E();return}}},transformEditability(e,t){if(!m(e))return{writable:!1,reason:"This rendered part has no authored source identity."};if(!c?.writeProp)return{writable:!1,reason:"This session has no source writer."};if(R.has(`${e}|${t}`))return{writable:!1,reason:`${t} is controlled by a JSX expression.`};const n=b(e);if(!n)return{writable:!1,reason:"Source metadata is still loading or unavailable."};if(ee(e,t,n,K(e))){const s=_(e)?.name??"this component";return{writable:!1,reason:`${t} is owned by <${s}>'s own code — it declares no prop for it.`}}const o=he(t,K(e),n);return o.writable?{writable:!0,...c.removeProp&&xe(t,n).length>0?{removable:!0}:{}}:{writable:!1,reason:o.reason}},beginTransformEdit(e){F.has(e)||F.set(e,K(e))},writeOrigin(e,t,r){const n=a.displayObject(e),o=n?.[t];if(!n||typeof o?.x!="number"||typeof o.y!="number")return;const s=W.get(e)?.before??[o.x,o.y];n[t]={x:r[0],y:r[1]},W.set(e,{kind:t,value:r,before:s}),w()},writeTransform(e,t){a.setTransform(e,t),w()},endTransformEdit(e){const t=F.get(e);if(!t)return;F.delete(e);const r=M.then(()=>H(()=>ue(e,t).catch(n=>(console.error(`[canvas-source ${I(e)}] transform commit failed`,n),!1)),c?.writeProp!==void 0,I(e)));return M=r.then(()=>{},n=>{console.error(`[canvas-source ${g}] transform commit failed`,n)}),r},removeTransform(e,t){return H(()=>Le(e,t),c?.removeProp!==void 0,I(e))},reportStructureLiveOnly(e,t){console.warn(`[canvas-source ${g}] ${e} stayed live-only — ${t}.`)},properties(e){if(!a.displayObject(e))return[];const t=[{path:"name",label:"Name",type:"string"},{path:"visible",label:"Visible",type:"boolean",group:"Visibility"}],r=b(e)??[],n=r.find(f=>f.name==="skew"),o=n?!n.isLiteral:!1;t.push({path:"skew.x",label:"Skew X (deg)",type:"number",group:"Transform",readonly:o},{path:"skew.y",label:"Skew Y (deg)",type:"number",group:"Transform",readonly:o});const s=V(e),i=new Map(r.map(f=>[f.name,f])),l=[...s.map(f=>f.name),...r.filter(f=>!s.some(y=>y.name===f.name)).map(f=>f.name)],u=_(e)?.name??"Properties";for(const f of l){if(je(f)||Ee.has(f))continue;const y=i.get(f),x=s.find(S=>S.name===f),U=!y&&x?.defaultText!==void 0&&x.defaultValue===void 0,v=Y(e,y,x);t.push({path:`jsx.${f}`,label:Me(f),type:U?"string":x?.type??(y?ce(y):"string"),...x?.options?{options:[...x.options]}:{},readonly:U||(y?!y.isLiteral:!1),...y?{}:{defaulted:!0},...v?{resettable:!0}:{},...v&&x?.defaultText!==void 0?{revertsTo:x.defaultText}:{},group:u})}return t},get(e,t){const r=a.displayObject(e);if(!r)return;const n=A.get(`${e}|${t}`);if(n!==void 0)return n;if(t==="name")return r.label??"";if(t==="visible")return r.visible;if(t==="skew.x"||t==="skew.y")return Number(((t==="skew.x"?r.skew.x:r.skew.y)*180/Math.PI).toFixed(4));if(t.startsWith("jsx."))return G(b(e),V(e),t.slice(4))},set(e,t,r){if(t==="skew.x"||t==="skew.y")return H(()=>Q(e,t==="skew.x"?"x":"y",Number(r)),void 0,I(e));const n=t==="name"?"label":t==="visible"?"visible":t.startsWith("jsx.")?t.slice(4):null;if(n)return H(()=>ne(e,t,n,r),void 0,I(e))},remove(e,t){return H(()=>Ve(e,t),c?.removeProp!==void 0,I(e))},dispose(){A.clear(),R.clear(),F.clear()}}}function Dt(d,h,g,C=.1){const a=d.getBoundingClientRect();if(a.width<2||a.height<2||!(h.width>0)||!(h.height>0))return!1;const w=Math.min(4,Math.max(C,Math.min((a.width-96)/h.width,(a.height-96)/h.height)));return g.setView(a.width/2-(h.x+h.width/2)*w,a.height/2-(h.y+h.height/2)*w,w),!0}function Wt(d,h){return yt(d,async()=>{for(let g=0;g<24;g++){if(h())return null;await new Promise(C=>setTimeout(C,0))}return null})}const Re={width:1280,height:720};function Vt(){return jt({loop:Mt({update:()=>{}}),assets:At()})}function Lt(){const d=document.createElement("canvas");return d.dataset.volterCanvasSceneSurface="true",d.style.position="absolute",d.style.inset="0",d.style.width="100%",d.style.height="100%",d.style.display="block",d}function zt(d){const{worldId:h,entry:g,layer:C,canvas:a,game:w,mounted:c,store:J,onFirstFrame:N}=d,P=xt({history:J.shell.projectHistory}),D=new it(c.substrate.root,J,{canvas:a,api:c.substrate.api,persistence:P,journal:Ne(h),provenance:{source:"source-code",label:"babylon",detail:"Native Babylon.js scene graph; imperative edits write to the construction site in the game’s own source."}});let A=w.systemAdapters;pe(A);const R=w.subscribeSystemAdapters?.(()=>{A=w.systemAdapters,Ie(A),J.shell.notifyIngestEdit()}),F=()=>{const b=C.getBoundingClientRect();b.width>0&&b.height>0&&c.resize?.(b.width,b.height)},W=new ResizeObserver(F);W.observe(C),F();let M=!1,m=!1,$=0;const E=()=>{if($=requestAnimationFrame(E),!M)try{c.update?.(0),m||(m=!0,N?.())}catch(b){cancelAnimationFrame($),q.error(`[babylon-design] world "${h}" failed to render: ${String(b)}`,"authoring")}};return $=requestAnimationFrame(E),q.log(`[babylon-design] world "${h}" mounted as a native Babylon Scene (${g})`,"authoring"),{adapter:D,dispose(){M=!0,cancelAnimationFrame($),W.disconnect(),D.dispose(),R?.(),pe(null),c.dispose(),a.remove(),w.dispose()}}}const _e=new WeakSet;async function Xr(d,h,g,C,a,w,c){if(!h)throw new Error(`canvas root "${d}": no \`entry\` declared — nothing to mount.`);const N=await(await Pt(C,rt())).loadEntryModule(h,d,"canvas"),P=Tt(d,N),D=Ct(d,N,"canvas"),A=await $t(N,d);if(!A)throw new Error(`canvas root "${d}": entry module "${h}" must default-export a React component (\`export default function World() { … }\`) — or export an \`adapter\` for full control.`);const R=st(),F=R?.config.resolution?.width??Re.width,W=R?.config.resolution?.height??Re.height,M=w??ot,m=Lt();g.appendChild(m);const $=Vt(),E={canvas:m,width:F,height:W,game:$,headless:!1,transparent:!0,preserveDrawingBuffer:!0};let b,z;try{b=await vt(async p=>{const T=await A.mount(E);return z=p[0],T})}catch(p){throw m.remove(),$.dispose(),p}if(kt($,A,b,{id:d}),Ot($,P?[P]:[]),Et($,D?[D]:[]),b.substrate.name==="babylon")return zt({worldId:d,entry:h,layer:g,canvas:m,game:$,mounted:b,store:a,onFirstFrame:c});if(b.substrate.name!=="pixi")throw b.dispose(),m.remove(),$.dispose(),new Error(`canvas root "${d}" mounted undeclared editor substrate "${b.substrate.name}" — declare pixi or babylon and provide its authoring adapter.`);const V=b.substrate.root,B=await St();z===void 0&&q.error(`[canvas-design] world "${d}" mounted, but its Pixi Application was never handed to the design view (Pixi's \`__PIXI_APP_INIT__\` hook did not report one) — this Scene will render no frames at all. The world itself is fine; the editor cannot draw it.`,"authoring");let _=$.systemAdapters;pe(_);const ie=$.subscribeSystemAdapters?.(()=>{_=$.systemAdapters,Ie(_),a.shell.notifyIngestEdit()}),ae=await nt(),K=new lt(V,a,{pixi:B,identity:ut(d),journal:Ne(d),target:Bt({worldId:d,entryPath:h,pixi:B,writeBackend:ae}),surface:()=>m,capturePreview:(p,T)=>bt(p,{...T,pixi:B}),pointFromClient:(p,T,L)=>{const j=M.get();return{x:(p-L.left-j.x)/j.zoom,y:(T-L.top-j.y)/j.zoom}}}),ee=()=>{const p=g.getBoundingClientRect(),T=z?.renderer;T&&p.width>0&&p.height>0&&T.resize(p.width,p.height)},te=new ResizeObserver(ee);te.observe(g),ee();const ce=()=>{const p=z?.renderer;if(!p)return!1;const T=g.getBoundingClientRect();T.width>0&&T.height>0&&(p.screen.width!==T.width||p.screen.height!==T.height)&&p.resize(T.width,T.height);const L=M.get();return p.render({container:V,transform:new B.Matrix(L.zoom,0,0,L.zoom,L.x,L.y)}),!0},le=Wt(m,ce);let G=0,Y=!1,ue=!1;const de=()=>{if(G=requestAnimationFrame(de),!Y)try{ce()&&!ue&&(ue=!0,c?.())}catch(p){cancelAnimationFrame(G),G=0,q.error(`[canvas-design] world "${d}" failed to render — the design view is frozen: ${String(p)}`,"authoring")}};G=requestAnimationFrame(de);const re=_e.has(M);_e.add(M);const Q=g.getBoundingClientRect();!re&&Q.width>0&&Q.height>0&&M.setView(Q.width/2,Q.height/2,1);let ne=0,I=0,H=re;const X=M.subscribe(()=>{H=!0}),oe=()=>{const p=g.getBoundingClientRect();return p.width<2||p.height<2?1:Math.max(1,Math.min((p.width-96)/F,(p.height-96)/W))},k=()=>{if(H||Y||I++>180)return;const p=V.getBounds();Dt(g,p,M,oe())||(ne=requestAnimationFrame(k))};return ne=requestAnimationFrame(k),q.log(`[canvas-design] world "${d}" mounted for design-time authoring (${h})`,"authoring"),{adapter:K,dispose(){Y=!0,cancelAnimationFrame(G),cancelAnimationFrame(ne),X(),te.disconnect(),le(),K.dispose(),ie?.(),pe(null);try{b.dispose()}catch(p){q.error(`[canvas-design] dispose failed: ${String(p)}`,"authoring")}m.remove(),$.dispose()}}}export{Xr as mountCanvasDesignLayer};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CyLPQ8pY.js","assets/extend-6LrR7eSL.js","assets/jsx-runtime-DPjLkJKQ.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-DzuOGwVB.js","assets/index-nmcBqr7Y.js","assets/index-D_NuPfjr.js","assets/index-CHOT9sYh.js","assets/index-ClgrFOcX.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{X as H,en as Y,_ as T}from"./index-ClgrFOcX.js";import{r as m}from"./index-nmcBqr7Y.js";import{g as X}from"./debug-registry-B2THKz1v.js";import"./jsx-runtime-DPjLkJKQ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-D_NuPfjr.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const _=1e4,L=new WeakSet;function q(e){if(e===null||typeof e!="object")return!1;const r=e;return typeof r.id=="string"&&r.id.length>0&&typeof r.mount=="function"}function G(e,r,n){const{createElement:o,Fragment:k,useEffect:F,useLayoutEffect:C,createRoot:D,extend:M}=n,S=o(r);return{id:e,async mount(i){const v=i.game?X(i.game):null,u=i.canvas;if(L.has(u))throw new Error(`canvas world "${e}": this lane has already mounted this canvas. @pixi/react keys its reconciler roots off the canvas element, so re-using one would resurrect a root whose Application is destroyed. Hand each mount a fresh canvas (every volter host already does).`);L.add(u),M(n.pixi);let y;const $=new Promise(t=>{y=t});let E;const I=new Promise(t=>{E=t});let g;const U=new Promise(t=>{g=t});let h;const j=new Promise(t=>{h=t});function N(){return C(()=>(y(),g),[]),F(()=>(E(),h),[]),null}const V=o(k,null,S,o(N)),w=D(u),R={antialias:!0,width:i.width,height:i.height,resolution:i.dpr??globalThis.devicePixelRatio??1,autoDensity:!0,backgroundAlpha:i.transparent?0:1,preserveDrawingBuffer:i.preserveDrawingBuffer??!1,autoStart:!1,sharedTicker:!1};let x;const B=new Promise(t=>{x=t}),P=t=>{x(`the Pixi tree crashed before its first commit — ${t.message} (mount() fails loudly instead of hanging)`)};globalThis.addEventListener?.("error",P);let d,p;try{d=await w.render(V,R);const c=new Promise(f=>{p=setTimeout(()=>f(`no first commit within ${_/1e3}s (mount() fails loudly instead of hanging)`),_)}),l=await Promise.race([Promise.all([$,I]).then(()=>null),B,c]);if(l!==null)throw new Error(`canvas world "${e}": ${l}`)}catch(t){try{d?.destroy(!1,{children:!0})}catch{}throw t}finally{p!==void 0&&clearTimeout(p),globalThis.removeEventListener?.("error",P)}if(d===void 0)throw new Error(`canvas world "${e}": initialized without an Application`);const a=d;a.ticker.lastTime=0;let A=0,s=!1;const W=v?{debug:v.adapter}:{},z=Promise.all([U,j]).then(()=>{s=!0,a.destroy(!1,{children:!0})});return{kind:"canvas",canvas:u,substrate:{name:"pixi",root:a.stage},drivesOwnLoop:!1,systems:W,disposeComplete:z,update(t){s||(A+=t*1e3,a.ticker.update(A))},hitTest(t,c){if(s)return!1;const l=a.renderer.events.rootBoundary,f=a.renderer.lastObjectRendered;return f?(l.rootTarget=f,l.hitTest(t,c)!==null):!1},resize(t,c){s||a.renderer.resize(t,c)},dispose(){s||(s=!0,a.renderer.events.setTargetElement(null),w.render(null,R))}}}}}function J(e,r,n){const o=e;return q(o?.adapter)?o.adapter:typeof o?.default=="function"?G(r,o.default,n):null}let O=null;const K=["createElement","Fragment","useEffect","useLayoutEffect","createPixiRoot","extendPixi","projectPixi"];async function Q(){const e=await import(Y),r=K.filter(n=>e[n]===void 0||e[n]===null);if(r.length>0)throw new Error(`The packaged runtime's synthetic canvas module did not export ${r.join(", ")} — see CANVAS_DOORWAY in vite-plugin-module-doorways.ts.`);return{createElement:e.createElement,Fragment:e.Fragment,useEffect:e.useEffect,useLayoutEffect:e.useLayoutEffect,createRoot:e.createPixiRoot,extend:e.extendPixi,pixi:e.projectPixi}}async function Z(){const[e,r]=await Promise.all([T(()=>import("./index-CyLPQ8pY.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13])),T(()=>import("./index-CHOT9sYh.js").then(n=>n.s),__vite__mapDeps([7,8,5,3,6,2,9,10,11,12,13]))]);return{createElement:m.createElement,Fragment:m.Fragment,useEffect:m.useEffect,useLayoutEffect:m.useLayoutEffect,createRoot:e.createRoot,extend:e.extend,pixi:r}}async function b(){return O??=(async()=>await H()?Q():Z())(),O}async function ue(){return(await b()).pixi}async function de(e,r){return J(e,r,await b())}export{de as resolveCanvasEntryAdapterForEditor,ue as resolveCanvasPixiForEditor};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DYoPv2Wb.js","assets/extend-CJ7vLkP1.js","assets/jsx-runtime-DPjLkJKQ.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-DzuOGwVB.js","assets/index-nmcBqr7Y.js","assets/index-D_NuPfjr.js","assets/index-CFS_B4hc.js","assets/index-BfqJPhFO.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{X as H,en as Y,_ as T}from"./index-BfqJPhFO.js";import{r as m}from"./index-nmcBqr7Y.js";import{g as X}from"./debug-registry-BzagDrhV.js";import"./jsx-runtime-DPjLkJKQ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-D_NuPfjr.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const _=1e4,L=new WeakSet;function q(e){if(e===null||typeof e!="object")return!1;const r=e;return typeof r.id=="string"&&r.id.length>0&&typeof r.mount=="function"}function G(e,r,n){const{createElement:o,Fragment:k,useEffect:F,useLayoutEffect:C,createRoot:D,extend:M}=n,S=o(r);return{id:e,async mount(i){const v=i.game?X(i.game):null,u=i.canvas;if(L.has(u))throw new Error(`canvas world "${e}": this lane has already mounted this canvas. @pixi/react keys its reconciler roots off the canvas element, so re-using one would resurrect a root whose Application is destroyed. Hand each mount a fresh canvas (every volter host already does).`);L.add(u),M(n.pixi);let y;const $=new Promise(t=>{y=t});let E;const I=new Promise(t=>{E=t});let g;const U=new Promise(t=>{g=t});let h;const j=new Promise(t=>{h=t});function N(){return C(()=>(y(),g),[]),F(()=>(E(),h),[]),null}const V=o(k,null,S,o(N)),w=D(u),R={antialias:!0,width:i.width,height:i.height,resolution:i.dpr??globalThis.devicePixelRatio??1,autoDensity:!0,backgroundAlpha:i.transparent?0:1,preserveDrawingBuffer:i.preserveDrawingBuffer??!1,autoStart:!1,sharedTicker:!1};let x;const B=new Promise(t=>{x=t}),P=t=>{x(`the Pixi tree crashed before its first commit — ${t.message} (mount() fails loudly instead of hanging)`)};globalThis.addEventListener?.("error",P);let d,p;try{d=await w.render(V,R);const c=new Promise(f=>{p=setTimeout(()=>f(`no first commit within ${_/1e3}s (mount() fails loudly instead of hanging)`),_)}),l=await Promise.race([Promise.all([$,I]).then(()=>null),B,c]);if(l!==null)throw new Error(`canvas world "${e}": ${l}`)}catch(t){try{d?.destroy(!1,{children:!0})}catch{}throw t}finally{p!==void 0&&clearTimeout(p),globalThis.removeEventListener?.("error",P)}if(d===void 0)throw new Error(`canvas world "${e}": initialized without an Application`);const a=d;a.ticker.lastTime=0;let A=0,s=!1;const W=v?{debug:v.adapter}:{},z=Promise.all([U,j]).then(()=>{s=!0,a.destroy(!1,{children:!0})});return{kind:"canvas",canvas:u,substrate:{name:"pixi",root:a.stage},drivesOwnLoop:!1,systems:W,disposeComplete:z,update(t){s||(A+=t*1e3,a.ticker.update(A))},hitTest(t,c){if(s)return!1;const l=a.renderer.events.rootBoundary,f=a.renderer.lastObjectRendered;return f?(l.rootTarget=f,l.hitTest(t,c)!==null):!1},resize(t,c){s||a.renderer.resize(t,c)},dispose(){s||(s=!0,a.renderer.events.setTargetElement(null),w.render(null,R))}}}}}function J(e,r,n){const o=e;return q(o?.adapter)?o.adapter:typeof o?.default=="function"?G(r,o.default,n):null}let O=null;const K=["createElement","Fragment","useEffect","useLayoutEffect","createPixiRoot","extendPixi","projectPixi"];async function Q(){const e=await import(Y),r=K.filter(n=>e[n]===void 0||e[n]===null);if(r.length>0)throw new Error(`The packaged runtime's synthetic canvas module did not export ${r.join(", ")} — see CANVAS_DOORWAY in vite-plugin-module-doorways.ts.`);return{createElement:e.createElement,Fragment:e.Fragment,useEffect:e.useEffect,useLayoutEffect:e.useLayoutEffect,createRoot:e.createPixiRoot,extend:e.extendPixi,pixi:e.projectPixi}}async function Z(){const[e,r]=await Promise.all([T(()=>import("./index-DYoPv2Wb.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13])),T(()=>import("./index-CFS_B4hc.js").then(n=>n.s),__vite__mapDeps([7,8,5,3,6,2,9,10,11,12,13]))]);return{createElement:m.createElement,Fragment:m.Fragment,useEffect:m.useEffect,useLayoutEffect:m.useLayoutEffect,createRoot:e.createRoot,extend:e.extend,pixi:r}}async function b(){return O??=(async()=>await H()?Q():Z())(),O}async function ue(){return(await b()).pixi}async function de(e,r){return J(e,r,await b())}export{de as resolveCanvasEntryAdapterForEditor,ue as resolveCanvasPixiForEditor};
@@ -1 +1 @@
1
- import{s as P}from"./index-CHOT9sYh.js";import"./index-ClgrFOcX.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 x=2e3;function _(n,t){const i=[n];let e=0,r=0;for(;e<i.length;){const a=i[e++];if(r++,r>t)return t+1;for(const o of a.children)i.push(o)}return r}function S(n,t=x,i=P){if(_(n,t)>t)return null;const e=v(i,n),r=T(i,n);return e.position.set(0,0),e.scale.set(Math.hypot(r.a,r.b),Math.hypot(r.c,r.d)),e.rotation=Math.atan2(r.b,r.a),e.visible=!0,e}function T(n,t){const i=new n.Matrix,e=[];for(let r=t;r;r=r.parent)e.push(r);for(let r=e.length-1;r>=0;r--)e[r].updateLocalTransform(),i.append(e[r].localTransform);return i}function v(n,t){if(t instanceof n.NineSliceSprite){const e=new n.NineSliceSprite({texture:t.texture,leftWidth:t.leftWidth,rightWidth:t.rightWidth,topHeight:t.topHeight,bottomHeight:t.bottomHeight,width:t.width,height:t.height});return e.anchor.copyFrom(t.anchor),e.tint=t.tint,c(t,e),e}if(t instanceof n.TilingSprite){const e=new n.TilingSprite({texture:t.texture,width:t.width,height:t.height});return e.tilePosition.copyFrom(t.tilePosition),e.tileScale.copyFrom(t.tileScale),e.anchor.copyFrom(t.anchor),c(t,e),e}if(t instanceof n.Text){const e=new n.Text({text:t.text,style:t.style.clone()});return"anchor"in t&&e.anchor.copyFrom(t.anchor),c(t,e),e}if(t instanceof n.Graphics){const e=t.clone(!0);return c(t,e),e}if(t instanceof n.Sprite){const e=new n.Sprite(t.texture);return e.anchor.copyFrom(t.anchor),e.tint=t.tint,c(t,e),e}const i=new n.Container;c(t,i),i.pivot.copyFrom(t.pivot);for(const e of t.children)i.addChild(v(n,e));return i}function c(n,t){t.alpha=n.alpha,t.visible=n.visible,t.rotation=n.rotation,t.scale.copyFrom(n.scale),t.position.copyFrom(n.position),t.skew.copyFrom(n.skew)}const u=new Map,y=new Map;async function F(n){const t=u.get(n);if(t)return t;let i=y.get(n);return i||(i=(async()=>{const e=new n.Application;return await e.init({autoStart:!1,sharedTicker:!1,backgroundAlpha:0,width:128,height:96,antialias:!0}),u.set(n,e),e})(),y.set(n,i)),i}function I(n,t,i,e){const a=new n.Rectangle(t.x-8,t.y-8,Math.max(1,t.width+16),Math.max(1,t.height+16)),o=i/e;if(a.width/a.height<o){const h=a.height*o;a.x-=(h-a.width)/2,a.width=h}else if(a.width/a.height>o){const h=a.width/o;a.y-=(h-a.height)/2,a.height=h}return a}async function B(n,t={}){const i=t.width??128,e=t.height??96,r=t.pixi??P,a=t.budget??x;if(_(n,a)>a)return null;const o=await F(r),h=S(n,a,r);if(h===null)return null;o.stage.removeChildren(),o.stage.addChild(h);try{const b=I(r,h.getLocalBounds(),i,e),l=await o.renderer.extract.canvas({target:o.stage,frame:b}),s=document.createElement("canvas");s.width=i,s.height=e;const f=s.getContext("2d");if(!f)throw new Error("Canvas selection preview could not create a 2D readback context.");const g=Math.min(i/l.width,e/l.height),w=l.width*g,m=l.height*g;return f.drawImage(l,(i-w)/2,(e-m)/2,w,m),s.toDataURL("image/png")}finally{o.stage.removeChildren(),h.destroy({children:!0,texture:!1,textureSource:!1})}}function A(n){return async t=>{const i=n.find(r=>r.canvas===t);if(!i?.renderer)return null;const e=i.renderer.background;return i.renderer.extract.canvas({target:i.stage,frame:i.screen,...e.alpha>0?{clearColor:e.color}:{}})}}const p=new Set,d=new Map;function U(n){for(const t of n)p.add(t);return()=>{for(const t of n)p.delete(t)}}function X(n,t){return d.set(n,t),()=>{d.get(n)===t&&d.delete(n)}}function j(n){const t=d.get(n);return t?t():A([...p])(n)}async function G(n){const t=[],i=globalThis.__PIXI_APP_INIT__;globalThis.__PIXI_APP_INIT__=(e,r)=>{const a=e;a.stage&&a.ticker&&t.push(e),i?.(e,r)};try{return await n(t)}finally{globalThis.__PIXI_APP_INIT__=i}}export{x as PREVIEW_SUBTREE_NODE_BUDGET,B as capturePixiDisplayObjectThumbnail,_ as countPixiSubtree,A as pixiCanvasFrame,j as presentedPixiFrame,X as registerPresentedCanvasFrame,U as registerPresentedPixiApps,S as snapshotPixiPreviewSubject,G as withApplicationCollector};
1
+ import{s as P}from"./index-CFS_B4hc.js";import"./index-BfqJPhFO.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 x=2e3;function _(n,t){const i=[n];let e=0,r=0;for(;e<i.length;){const a=i[e++];if(r++,r>t)return t+1;for(const o of a.children)i.push(o)}return r}function S(n,t=x,i=P){if(_(n,t)>t)return null;const e=v(i,n),r=T(i,n);return e.position.set(0,0),e.scale.set(Math.hypot(r.a,r.b),Math.hypot(r.c,r.d)),e.rotation=Math.atan2(r.b,r.a),e.visible=!0,e}function T(n,t){const i=new n.Matrix,e=[];for(let r=t;r;r=r.parent)e.push(r);for(let r=e.length-1;r>=0;r--)e[r].updateLocalTransform(),i.append(e[r].localTransform);return i}function v(n,t){if(t instanceof n.NineSliceSprite){const e=new n.NineSliceSprite({texture:t.texture,leftWidth:t.leftWidth,rightWidth:t.rightWidth,topHeight:t.topHeight,bottomHeight:t.bottomHeight,width:t.width,height:t.height});return e.anchor.copyFrom(t.anchor),e.tint=t.tint,c(t,e),e}if(t instanceof n.TilingSprite){const e=new n.TilingSprite({texture:t.texture,width:t.width,height:t.height});return e.tilePosition.copyFrom(t.tilePosition),e.tileScale.copyFrom(t.tileScale),e.anchor.copyFrom(t.anchor),c(t,e),e}if(t instanceof n.Text){const e=new n.Text({text:t.text,style:t.style.clone()});return"anchor"in t&&e.anchor.copyFrom(t.anchor),c(t,e),e}if(t instanceof n.Graphics){const e=t.clone(!0);return c(t,e),e}if(t instanceof n.Sprite){const e=new n.Sprite(t.texture);return e.anchor.copyFrom(t.anchor),e.tint=t.tint,c(t,e),e}const i=new n.Container;c(t,i),i.pivot.copyFrom(t.pivot);for(const e of t.children)i.addChild(v(n,e));return i}function c(n,t){t.alpha=n.alpha,t.visible=n.visible,t.rotation=n.rotation,t.scale.copyFrom(n.scale),t.position.copyFrom(n.position),t.skew.copyFrom(n.skew)}const u=new Map,y=new Map;async function F(n){const t=u.get(n);if(t)return t;let i=y.get(n);return i||(i=(async()=>{const e=new n.Application;return await e.init({autoStart:!1,sharedTicker:!1,backgroundAlpha:0,width:128,height:96,antialias:!0}),u.set(n,e),e})(),y.set(n,i)),i}function I(n,t,i,e){const a=new n.Rectangle(t.x-8,t.y-8,Math.max(1,t.width+16),Math.max(1,t.height+16)),o=i/e;if(a.width/a.height<o){const h=a.height*o;a.x-=(h-a.width)/2,a.width=h}else if(a.width/a.height>o){const h=a.width/o;a.y-=(h-a.height)/2,a.height=h}return a}async function B(n,t={}){const i=t.width??128,e=t.height??96,r=t.pixi??P,a=t.budget??x;if(_(n,a)>a)return null;const o=await F(r),h=S(n,a,r);if(h===null)return null;o.stage.removeChildren(),o.stage.addChild(h);try{const b=I(r,h.getLocalBounds(),i,e),l=await o.renderer.extract.canvas({target:o.stage,frame:b}),s=document.createElement("canvas");s.width=i,s.height=e;const f=s.getContext("2d");if(!f)throw new Error("Canvas selection preview could not create a 2D readback context.");const g=Math.min(i/l.width,e/l.height),w=l.width*g,m=l.height*g;return f.drawImage(l,(i-w)/2,(e-m)/2,w,m),s.toDataURL("image/png")}finally{o.stage.removeChildren(),h.destroy({children:!0,texture:!1,textureSource:!1})}}function A(n){return async t=>{const i=n.find(r=>r.canvas===t);if(!i?.renderer)return null;const e=i.renderer.background;return i.renderer.extract.canvas({target:i.stage,frame:i.screen,...e.alpha>0?{clearColor:e.color}:{}})}}const p=new Set,d=new Map;function U(n){for(const t of n)p.add(t);return()=>{for(const t of n)p.delete(t)}}function X(n,t){return d.set(n,t),()=>{d.get(n)===t&&d.delete(n)}}function j(n){const t=d.get(n);return t?t():A([...p])(n)}async function G(n){const t=[],i=globalThis.__PIXI_APP_INIT__;globalThis.__PIXI_APP_INIT__=(e,r)=>{const a=e;a.stage&&a.ticker&&t.push(e),i?.(e,r)};try{return await n(t)}finally{globalThis.__PIXI_APP_INIT__=i}}export{x as PREVIEW_SUBTREE_NODE_BUDGET,B as capturePixiDisplayObjectThumbnail,_ as countPixiSubtree,A as pixiCanvasFrame,j as presentedPixiFrame,X as registerPresentedCanvasFrame,U as registerPresentedPixiApps,S as snapshotPixiPreviewSubject,G as withApplicationCollector};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/story-pixi-preview-mPo3OFOd.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/canvas-preview-frames-CSCcu2sG.js","assets/index-CHOT9sYh.js","assets/index-ClgrFOcX.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/crash-null-boundary-v3a0uEgw.js","assets/pixi-story-model-DNkfnWUV.js","assets/story-mount-turn-DFRTj5hi.js"])))=>i.map(i=>d[i]);
2
- import{fr as v,ft as w,_ as i,fu as y}from"./index-ClgrFOcX.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 l(){const n=v("canvas",async(t,r)=>{const{capturePixiStoryThumbnail:e}=await i(async()=>{const{capturePixiStoryThumbnail:o}=await import("./story-pixi-preview-mPo3OFOd.js");return{capturePixiStoryThumbnail:o}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]));return e(t,r)}),c=w(async t=>(await i(async()=>{const{presentedPixiFrame:r}=await import("./canvas-preview-frames-CSCcu2sG.js");return{presentedPixiFrame:r}},__vite__mapDeps([4,5,6,1,2,3,7,8,9,10,11,12]))).presentedPixiFrame(t)),p=y({observe:async t=>{const{pixiCanvasFrame:r,withApplicationCollector:e}=await i(async()=>{const{pixiCanvasFrame:a,withApplicationCollector:_}=await import("./canvas-preview-frames-CSCcu2sG.js");return{pixiCanvasFrame:a,withApplicationCollector:_}},__vite__mapDeps([4,5,6,1,2,3,7,8,9,10,11,12])),{awaitPixiStoryFrame:o}=await i(async()=>{const{awaitPixiStoryFrame:a}=await import("./story-pixi-preview-mPo3OFOd.js");return{awaitPixiStoryFrame:a}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]));let s=[];const m=await e(async a=>(s=a,t())),u=r(s);return{result:m,settled:()=>o(s),frame:u}}});return()=>{n(),c(),p()}}const b="workspace.service";function A(){return l()}export{b as point,A as start};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/story-pixi-preview-jmF1ab99.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/canvas-preview-frames-BwWVTr-u.js","assets/index-CFS_B4hc.js","assets/index-BfqJPhFO.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/crash-null-boundary-v3a0uEgw.js","assets/pixi-story-model-DNkfnWUV.js","assets/story-mount-turn-DFRTj5hi.js"])))=>i.map(i=>d[i]);
2
+ import{fr as v,ft as w,_ as i,fu as y}from"./index-BfqJPhFO.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 l(){const n=v("canvas",async(t,r)=>{const{capturePixiStoryThumbnail:e}=await i(async()=>{const{capturePixiStoryThumbnail:o}=await import("./story-pixi-preview-jmF1ab99.js");return{capturePixiStoryThumbnail:o}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]));return e(t,r)}),c=w(async t=>(await i(async()=>{const{presentedPixiFrame:r}=await import("./canvas-preview-frames-BwWVTr-u.js");return{presentedPixiFrame:r}},__vite__mapDeps([4,5,6,1,2,3,7,8,9,10,11,12]))).presentedPixiFrame(t)),p=y({observe:async t=>{const{pixiCanvasFrame:r,withApplicationCollector:e}=await i(async()=>{const{pixiCanvasFrame:a,withApplicationCollector:_}=await import("./canvas-preview-frames-BwWVTr-u.js");return{pixiCanvasFrame:a,withApplicationCollector:_}},__vite__mapDeps([4,5,6,1,2,3,7,8,9,10,11,12])),{awaitPixiStoryFrame:o}=await i(async()=>{const{awaitPixiStoryFrame:a}=await import("./story-pixi-preview-jmF1ab99.js");return{awaitPixiStoryFrame:a}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]));let s=[];const m=await e(async a=>(s=a,t())),u=r(s);return{result:m,settled:()=>o(s),frame:u}}});return()=>{n(),c(),p()}}const b="workspace.service";function A(){return l()}export{b as point,A as start};
@@ -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-ClgrFOcX.js";import{GAME_CONTRACT_SHAPE as V,GAME_LIFECYCLE_SHAPE as U,GAME_SYSTEMS_SHAPE as z}from"./game-contract-seams-C22a4B79.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-BfqJPhFO.js";import{GAME_CONTRACT_SHAPE as V,GAME_LIFECYCLE_SHAPE as U,GAME_SYSTEMS_SHAPE as z}from"./game-contract-seams-CuBiefwV.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-ClgrFOcX.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-BfqJPhFO.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-DR33sMq6.js";import{u as i,c6 as e,c5 as o,c4 as t}from"./index-ClgrFOcX.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-CA3u4T9B.js";import{u as i,c6 as e,c5 as o,c4 as t}from"./index-BfqJPhFO.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/ThreeBoardDocument-DCJkLWU8.js","assets/index-ClgrFOcX.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-CADiW-LP.js","assets/Object3DDocumentViewport-BpiyRQ5p.js","assets/viewport-surface-status-D7M2L2lI.js","assets/standard-viewport-dressing-BJkGwiNT.js","assets/content-bounds-Dl5Y3LLv.js","assets/hierarchy-marks-DeG4E4Ke.js","assets/workspace-arrangement-86_8Kk5K.js","assets/three.core-3arARmh6.js","assets/editor-layers-DwaX5UFy.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-DL6HsBPf.js","assets/story-three-preview-CWM0Rj7x.js","assets/asset-preview-BUpxsHNd.js","assets/renderer-ownership-BovSEcLv.js","assets/studio-environment-Bw9zMFE8.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-DmeaOP4r.js","assets/index-DzuOGwVB.js","assets/story-mount-turn-DFRTj5hi.js","assets/three-story-model-BxWKcl9d.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-ClgrFOcX.js";import{s as p,g as l}from"./story-media-presence-D4AIsAtK.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-DCJkLWU8.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-DUakOh0j.js","assets/index-BfqJPhFO.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-CLizyhis.js","assets/Object3DDocumentViewport-BOi94JfA.js","assets/viewport-surface-status-BiDiAZ6z.js","assets/standard-viewport-dressing-BhTPIZTQ.js","assets/content-bounds-BRS42hfD.js","assets/hierarchy-marks-C2temlO0.js","assets/workspace-arrangement-BXM0R-Uu.js","assets/three.core-3arARmh6.js","assets/editor-layers-k0AjpomL.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-CTT8ZvVB.js","assets/story-three-preview-CH6Kk934.js","assets/asset-preview-t-7PYPjJ.js","assets/renderer-ownership-BovSEcLv.js","assets/studio-environment-BNM-AjAn.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-DmeaOP4r.js","assets/index-DzuOGwVB.js","assets/story-mount-turn-DFRTj5hi.js","assets/three-story-model-DVfgIOzi.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-BfqJPhFO.js";import{s as p,g as l}from"./story-media-presence-CMJ7U-7_.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-DUakOh0j.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-CyGiXrEJ.js","assets/jsx-runtime-DPjLkJKQ.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/react-canvas-navigation-CxBm8iw8.js","assets/index-ClgrFOcX.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-CMvkLAkF.js","assets/canvas-preview-frames-CSCcu2sG.js","assets/index-CHOT9sYh.js","assets/ReactCanvasControls-DIFkxeKv.js","assets/story-presentation-Dw4Vw65P.js","assets/pixi-story-model-DNkfnWUV.js","assets/story-pixi-preview-mPo3OFOd.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-ClgrFOcX.js";import{s as m,g as p}from"./story-media-presence-D4AIsAtK.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-CyGiXrEJ.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-DCyh4eaO.js","assets/jsx-runtime-DPjLkJKQ.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/react-canvas-navigation-DwiPTVdH.js","assets/index-BfqJPhFO.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-CynnmKqO.js","assets/canvas-preview-frames-BwWVTr-u.js","assets/index-CFS_B4hc.js","assets/ReactCanvasControls-COp1PvO1.js","assets/story-presentation-DNXF37vS.js","assets/pixi-story-model-DNkfnWUV.js","assets/story-pixi-preview-jmF1ab99.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-BfqJPhFO.js";import{s as m,g as p}from"./story-media-presence-CMJ7U-7_.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-DCyh4eaO.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};