@volter/game-editor 0.5.82 → 0.5.84

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 (332) 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/catalog/entries/reflections.json +1 -1
  5. package/catalog/project-source/src/lib/reflections/ReflectionProbe.tsx +34 -5
  6. package/catalog/project-source/src/lib/reflections/index.ts +1 -0
  7. package/catalog/project-source/src/lib/reflections/probe-controller.ts +44 -3
  8. package/catalog/project-source/src/lib/reflections/reflection-probe-registry.ts +32 -7
  9. package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +638 -160
  10. package/dist/.vite/manifest.json +2213 -2195
  11. package/dist/assets/{AssetBudgetPanel-Iip49rxI.js → AssetBudgetPanel-BZy2XeqE.js} +3 -3
  12. package/dist/assets/{AudioViewer-DmkOvskF.js → AudioViewer-DIuzLzET.js} +1 -1
  13. package/dist/assets/{CanvasBoardDocument-DCS8uzQo.js → CanvasBoardDocument-3ZxWTKes.js} +1 -1
  14. package/dist/assets/{CanvasSceneViewport-CfOuQiQ0.js → CanvasSceneViewport-BP7FC2z5.js} +1 -1
  15. package/dist/assets/{ColorInput-7CPpl8MI.js → ColorInput-Bm2EzmOy.js} +1 -1
  16. package/dist/assets/EntityModelDocument-Cy-Qproq.js +1 -0
  17. package/dist/assets/{EnvironmentAssetDocument-DlS6KFJu.js → EnvironmentAssetDocument-B8VmbxfT.js} +1 -1
  18. package/dist/assets/{GameplaySessionTimeline-C3zH6edi.js → GameplaySessionTimeline-CDcfr07j.js} +1 -1
  19. package/dist/assets/{ImageViewer-C0lQ6YO0.js → ImageViewer-BNFjkWbV.js} +1 -1
  20. package/dist/assets/InspectorObjectPreview-DZS_A4lG.js +1 -0
  21. package/dist/assets/{JsonAssetDocument-DjmH9CQH.js → JsonAssetDocument-BkdsklFn.js} +1 -1
  22. package/dist/assets/{LiveModuleDocument-Hiot8Q5L.js → LiveModuleDocument-BEDGzgpM.js} +1 -1
  23. package/dist/assets/{LutAssetDocument-6bBwNMOn.js → LutAssetDocument-RmvH4zzl.js} +1 -1
  24. package/dist/assets/ModelAssetDocument-BgkVc8nF.js +1 -0
  25. package/dist/assets/{NonThreeAuthoringBootstrap-DpieYAMC.js → NonThreeAuthoringBootstrap-CcXUHOp3.js} +1 -1
  26. package/dist/assets/{Object3DDocumentToolbar-BtZkDxKa.js → Object3DDocumentToolbar-DaqNoA9f.js} +1 -1
  27. package/dist/assets/Object3DDocumentViewport-DFMCzcLc.js +2 -0
  28. package/dist/assets/{Object3DPreview-DdrYVJUZ.js → Object3DPreview-Dr4GQgGl.js} +1 -1
  29. package/dist/assets/{OnlineAssetDetail-D06eTe3y.js → OnlineAssetDetail-BPAK7Ras.js} +1 -1
  30. package/dist/assets/{PlayBar-BbzjgLFJ.js → PlayBar--cmmDXMt.js} +1 -1
  31. package/dist/assets/{QuarksAssetDocument-wGHNt4ov.js → QuarksAssetDocument-DYr9l2tH.js} +1 -1
  32. package/dist/assets/{ReactCanvasControls-BL2tOUj6.js → ReactCanvasControls-CoK-IJcH.js} +1 -1
  33. package/dist/assets/{RootSelectionOverlay-C6Wu8nIs.js → RootSelectionOverlay-Jz5Ll7BT.js} +1 -1
  34. package/dist/assets/{ShaderAssetDocument-BDi8iNLA.js → ShaderAssetDocument-Fn1SuMaS.js} +3 -3
  35. package/dist/assets/{ShadowEditor-C3L0UWSH.js → ShadowEditor-IrEJWfde.js} +1 -1
  36. package/dist/assets/{SourceAssetViewer-D832bARo.js → SourceAssetViewer-C6gxbMdi.js} +1 -1
  37. package/dist/assets/StageHost-eySsTLUI.js +2 -0
  38. package/dist/assets/{StoryPreviewMount-CmOEFzZY.js → StoryPreviewMount-CkBS-oOC.js} +1 -1
  39. package/dist/assets/{ThreeBoardDocument-BtBMGtiQ.js → ThreeBoardDocument-DiQabLNJ.js} +2 -2
  40. package/dist/assets/{ThreeIsolationSceneContent-BEHNSEsi.js → ThreeIsolationSceneContent-_p4Y5QZ6.js} +1 -1
  41. package/dist/assets/{ToolObject3DPreview-76LMkfin.js → ToolObject3DPreview-CSADrilV.js} +1 -1
  42. package/dist/assets/{Toolbar-BEBQdxRz.js → Toolbar-DhQAiAOw.js} +1 -1
  43. package/dist/assets/{TransientHint-CzsdY8W6.js → TransientHint-B3roDMmv.js} +1 -1
  44. package/dist/assets/{VideoViewer-Ckrawyuq.js → VideoViewer-DARXMIes.js} +1 -1
  45. package/dist/assets/{ViewportShadingMenu-BofQt6_4.js → ViewportShadingMenu-DC5996me.js} +1 -1
  46. package/dist/assets/{active-ingest-D_ryI_R4.js → active-ingest-BQBCy_Hx.js} +3 -3
  47. package/dist/assets/{animation-clock-QjtJDIsR.js → animation-clock-DAhQxVz9.js} +1 -1
  48. package/dist/assets/{animation-mixers.service-BInUs1US.js → animation-mixers.service-cc5qCZnh.js} +1 -1
  49. package/dist/assets/{animation-timeline.utility-DUrfNSwn.js → animation-timeline.utility-DXa0g-qN.js} +1 -1
  50. package/dist/assets/{asset-budget-asset.menu-DVQEksFp.js → asset-budget-asset.menu-DjEcxL08.js} +1 -1
  51. package/dist/assets/{asset-budget.action-C-ENAa52.js → asset-budget.action-D7-3Scj7.js} +1 -1
  52. package/dist/assets/{asset-budget.document-Bb1PyL3H.js → asset-budget.document-Dmn7QkMR.js} +1 -1
  53. package/dist/assets/{asset-budget.menu-CPi2yjBA.js → asset-budget.menu-djdA3Q-S.js} +1 -1
  54. package/dist/assets/{asset-editor-persistence-Duoq7o22.js → asset-editor-persistence-Dcy1Joo-.js} +1 -1
  55. package/dist/assets/{asset-loaders-BftJ2m7-.js → asset-loaders-B0eV8Nk_.js} +1 -1
  56. package/dist/assets/{asset-preview-BS71mXsZ.js → asset-preview-CGO8kmg5.js} +1 -1
  57. package/dist/assets/{audio-unlock.service-C3ygvDjU.js → audio-unlock.service-Bgp8fUjH.js} +1 -1
  58. package/dist/assets/{audio.utility-DF55sgHW.js → audio.utility-DM2IZjJR.js} +1 -1
  59. package/dist/assets/autoplay.service-aGTnDCDQ.js +1 -0
  60. package/dist/assets/{babylon-authoring-adapter-CmeehOBt.js → babylon-authoring-adapter-CNYnKhpl.js} +1 -1
  61. package/dist/assets/{binding-resolver-DUz8C8Fs.js → binding-resolver-By6DQSMJ.js} +2 -2
  62. package/dist/assets/blender-emscripten-engine-3RrRUwov.js +2 -0
  63. package/dist/assets/{blender-node-editor.document-B8S2TVMM.js → blender-node-editor.document-DDxLnK24.js} +1 -1
  64. package/dist/assets/{blender-properties-tab-y-_BeZDx.js → blender-properties-tab-DoLvP4a6.js} +1 -1
  65. package/dist/assets/{blender-runtime-host-CUH6peXj.js → blender-runtime-host-pYPr56UP.js} +2 -2
  66. package/dist/assets/{blender-runtime-skin-B1tYITn2.js → blender-runtime-skin-DGw7Uk4l.js} +13 -13
  67. package/dist/assets/blender-runtime.document-Bvlzayok.js +13 -0
  68. package/dist/assets/blender-screenshot.menu-BSfC-1EL.js +1 -0
  69. package/dist/assets/{blender-timeline.document-CeCylyXB.js → blender-timeline.document-D0P1AfdK.js} +1 -1
  70. package/dist/assets/{blender-uv-editor.document-DEllMw3a.js → blender-uv-editor.document-DEb_AwLC.js} +1 -1
  71. package/dist/assets/{blender-version.status-CrT9NqK-.js → blender-version.status-LifaPI0C.js} +1 -1
  72. package/dist/assets/blender-wali-engine-DGwF1KiV.js +2 -0
  73. package/dist/assets/{blender.command-GIjMG1-m.js → blender.command-DDOcs1dZ.js} +1 -1
  74. package/dist/assets/{board-guides-B6TEPOPi.js → board-guides-CQWXbsSW.js} +1 -1
  75. package/dist/assets/bridge.command-CJCc-avL.js +3 -0
  76. package/dist/assets/{browserAll-k35XRFil.js → browserAll-_6V_eM5P.js} +1 -1
  77. package/dist/assets/{build-player.document-CHxj4P8q.js → build-player.document-Dz_Mq8Pd.js} +1 -1
  78. package/dist/assets/{build-profiles.document-CZCk1HYA.js → build-profiles.document-CLCc3EbW.js} +2 -2
  79. package/dist/assets/{build-progress.status-BNwBxP2a.js → build-progress.status-BfR8rtJ_.js} +1 -1
  80. package/dist/assets/{build-session-CW2UyYFF.js → build-session-BkZeQ_S3.js} +1 -1
  81. package/dist/assets/{build.action-EmCcMu47.js → build.action-SVlllu1R.js} +1 -1
  82. package/dist/assets/{build.command-CzEckGcR.js → build.command-D6c8WqIx.js} +1 -1
  83. package/dist/assets/{build.header-CsYLpZbh.js → build.header-B_QEABFH.js} +1 -1
  84. package/dist/assets/{build.menu-CaDkDQuy.js → build.menu-wIEk8uq4.js} +1 -1
  85. package/dist/assets/{build.service-BcKtbU0-.js → build.service-C24aQmEn.js} +1 -1
  86. package/dist/assets/{camera-BwWZUyKt.js → camera-AsAJwixA.js} +1 -1
  87. package/dist/assets/{camera-runtime.inspector-CJyi3zmp.js → camera-runtime.inspector-EWiln7HZ.js} +1 -1
  88. package/dist/assets/{canvas-design-mount-B_uwZkEU.js → canvas-design-mount-7wA1io5I.js} +4 -4
  89. package/dist/assets/{canvas-entry-runtime-DskaohHK.js → canvas-entry-runtime-DxHv6Yxk.js} +2 -2
  90. package/dist/assets/{canvas-preview-frames-BzLeTumX.js → canvas-preview-frames-BJNr8ArE.js} +1 -1
  91. package/dist/assets/{canvas-story-capture.service-C80CsS8r.js → canvas-story-capture.service-DaHquc4I.js} +2 -2
  92. package/dist/assets/{capability-coverage-wd6bAhv3.js → capability-coverage-Fjv84QQN.js} +3 -3
  93. package/dist/assets/collaboration-presence-BYi9wylK.js +1 -0
  94. package/dist/assets/{collider-Dw2iWV3F.js → collider-BVans4YU.js} +1 -1
  95. package/dist/assets/{component-board.service-XAxyLCnM.js → component-board.service-6eXUhS3p.js} +2 -2
  96. package/dist/assets/component-board.service-C1VJog-q.js +2 -0
  97. package/dist/assets/{component-board.service-CH99sgj0.js → component-board.service-cNKaXoxN.js} +2 -2
  98. package/dist/assets/{component-contracts.service-DerT0BP-.js → component-contracts.service-B9e64gRX.js} +1 -1
  99. package/dist/assets/{component-instance-root-Cw_-ajBX.js → component-instance-root-Cw2jcbxa.js} +1 -1
  100. package/dist/assets/{component-verbs.command-BHK9M2Rk.js → component-verbs.command-CKmDlrFh.js} +1 -1
  101. package/dist/assets/component-verbs.service-C6MrL6R1.js +1 -0
  102. package/dist/assets/{config-1rCvm02z.js → config-CXA3itWR.js} +3 -3
  103. package/dist/assets/{configurations-CRTYw0r9.js → configurations-fjyekkEX.js} +1 -1
  104. package/dist/assets/{connection.status-D4fjnH24.js → connection.status-DmthQqVz.js} +1 -1
  105. package/dist/assets/{constraints.inspector-BgnafOLf.js → constraints.inspector-CvJlw3rw.js} +1 -1
  106. package/dist/assets/{content-bounds-D5pXeHJN.js → content-bounds-vfJMc-IO.js} +1 -1
  107. package/dist/assets/{contract-system-adapters-rVGdworX.js → contract-system-adapters-BL22QlsE.js} +1 -1
  108. package/dist/assets/{coverage.service-BNme5Agb.js → coverage.service-BO-eNB08.js} +2 -2
  109. package/dist/assets/{create-runtime-CcuQTSfy.js → create-runtime-DJ21Fa_i.js} +2 -2
  110. package/dist/assets/{curve-DorFv33R.js → curve-CiO2-ZoW.js} +1 -1
  111. package/dist/assets/{data-asset-CAE35Emh.js → data-asset-ByLXUC98.js} +1 -1
  112. package/dist/assets/{data-ref-DXqRnZsJ.js → data-ref-DpW1ZAc3.js} +1 -1
  113. package/dist/assets/{debug-bridge-DdCJSEni.js → debug-bridge-Bjh7HoG_.js} +1 -1
  114. package/dist/assets/{debug-registry-xQJcVubm.js → debug-registry-Bty6AiHN.js} +1 -1
  115. package/dist/assets/{deferred-ingest-play-CEnsC3uN.js → deferred-ingest-play-BDtHDAut.js} +2 -2
  116. package/dist/assets/{design-time-canvas-mount-CPRrCPFA.js → design-time-canvas-mount-CpNAFajF.js} +2 -2
  117. package/dist/assets/{design-time-layers-hmGqBp06.js → design-time-layers-BjbCzOaH.js} +1 -1
  118. package/dist/assets/{design-time-mount.service-CEmJjRIJ.js → design-time-mount.service-D2nvXCrm.js} +2 -2
  119. package/dist/assets/{design-time-mount.service-CLL-1Za4.js → design-time-mount.service-x4-8taot.js} +2 -2
  120. package/dist/assets/{design-time-react-mount-DmXi3GBy.js → design-time-react-mount-DlBtYE3L.js} +1 -1
  121. package/dist/assets/{document-preview-three-B4j_zNef.js → document-preview-three-CSHYA1BH.js} +1 -1
  122. package/dist/assets/{dom-authoring-adapter-BklRbjZB.js → dom-authoring-adapter-BRkZp4sE.js} +1 -1
  123. package/dist/assets/{draco3d-CFWI1XDT.js → draco3d-az59P8mF.js} +1 -1
  124. package/dist/assets/{edit-mode-audio.service-SUzv0nHs.js → edit-mode-audio.service--N5HyK0y.js} +1 -1
  125. package/dist/assets/{edit-mode-authoring-CSt3zzmS.js → edit-mode-authoring-BeMAYXYR.js} +1 -1
  126. package/dist/assets/{edit-mode-networking.service-D6UohrCr.js → edit-mode-networking.service-ByUOzpRh.js} +1 -1
  127. package/dist/assets/editor-api-dfe-lCMZ.js +1 -0
  128. package/dist/assets/{editor-layers-CjeYrUlm.js → editor-layers-Djcn6Scw.js} +1 -1
  129. package/dist/assets/{editor-shell-store-DckLm6m8.js → editor-shell-store-Br2L1Fw1.js} +1 -1
  130. package/dist/assets/{entity-object-V13bGmay.js → entity-object-BiOrbQZM.js} +1 -1
  131. package/dist/assets/{extend-BQeRA-aV.js → extend-BMnknpN1.js} +1 -1
  132. package/dist/assets/fork-menu-BOn71mbn.js +1 -0
  133. package/dist/assets/{frame-debugger-store-DDxWlDPK.js → frame-debugger-store-DVchJN-z.js} +1 -1
  134. package/dist/assets/{game-contract-seams-DrYyE5PX.js → game-contract-seams-gIFojMW2.js} +1 -1
  135. package/dist/assets/{game-css-scope-transform-D5hQWaci.js → game-css-scope-transform-Dab-AkD5.js} +1 -1
  136. package/dist/assets/{game-document.service-cJ1yKc2V.js → game-document.service-CFLg-vRz.js} +1 -1
  137. package/dist/assets/{game-eval.command-CKo-W17_.js → game-eval.command-Xch06afq.js} +1 -1
  138. package/dist/assets/{game-module-access-DuptGLGx.js → game-module-access-BDliSO9v.js} +1 -1
  139. package/dist/assets/{game-network-CAH_Jsh6.js → game-network-CTdS02CN.js} +3 -3
  140. package/dist/assets/{gameplay-export-B-JE4uSD.js → gameplay-export-Ct4wopUb.js} +1 -1
  141. package/dist/assets/gameplay-replay-xk1wnQ88.js +1 -0
  142. package/dist/assets/{gameplay.command-D4cY3nOq.js → gameplay.command-W3Sq7zn-.js} +1 -1
  143. package/dist/assets/{generation-jobs-CcCrhKLM.js → generation-jobs-BTP2zuZi.js} +1 -1
  144. package/dist/assets/{generation.service-CQwmLAOQ.js → generation.service-CHPmGb7B.js} +1 -1
  145. package/dist/assets/{generations-qfhCRH8C.js → generations-C7ppzxDW.js} +1 -1
  146. package/dist/assets/{generations.status-CcbR2OfF.js → generations.status-Cxb0-UxC.js} +1 -1
  147. package/dist/assets/{hierarchy-marks-B1jSqxSv.js → hierarchy-marks-3Iq1RFIh.js} +1 -1
  148. package/dist/assets/{hosted-asset-materialization-BZf-8JA1.js → hosted-asset-materialization-BK8ZfMnr.js} +2 -2
  149. package/dist/assets/ibl-override-material-C09OAhCc.js +6 -0
  150. package/dist/assets/{index-V4J7xfRg.js → index-BXH2Jsun.js} +294 -294
  151. package/dist/assets/index-CAf6mYXW.js +1 -0
  152. package/dist/assets/{index-aREcGExk.js → index-CP5WJuE9.js} +1 -1
  153. package/dist/assets/{index-D_ViOFCz.js → index-D9H8FkR3.js} +2 -2
  154. package/dist/assets/{index-DrEVdQvN.js → index-DAuA0xMo.js} +1 -1
  155. package/dist/assets/{index-CHa43s2p.js → index-DkTiDXNY.js} +1 -1
  156. package/dist/assets/{index-D-RMHSzb.js → index-Kznwz4yS.js} +1 -1
  157. package/dist/assets/{index-DXtfej3G.js → index-Yw9pOoLh.js} +1 -1
  158. package/dist/assets/{index-Cj_b0Ygc.js → index-k1tDFKMg.js} +1 -1
  159. package/dist/assets/{inference-diagnostics-DoZQ1mpg.js → inference-diagnostics-CxWL3UhK.js} +1 -1
  160. package/dist/assets/{ingest-boot-viewport-DWdOtGGE.js → ingest-boot-viewport-BeYyFYst.js} +1 -1
  161. package/dist/assets/{ingest-siblings-DyvasVDH.js → ingest-siblings-DGjWGyZo.js} +1 -1
  162. package/dist/assets/{ingest-source-persistence-CQOJeGhj.js → ingest-source-persistence-BFkLdeMy.js} +1 -1
  163. package/dist/assets/{ingest.service-CqIcydem.js → ingest.service-adZJNY83.js} +1 -1
  164. package/dist/assets/{inspect-DiSjB-N1.js → inspect-Dah00n9O.js} +1 -1
  165. package/dist/assets/instances.command-neq95jyN.js +1 -0
  166. package/dist/assets/{json-history-resource-CH2nzMZh.js → json-history-resource-DYW614tc.js} +1 -1
  167. package/dist/assets/layered-pick-Cn98HSnj.js +1 -0
  168. package/dist/assets/{light-CxiGIJma.js → light-nb6H9zi_.js} +1 -1
  169. package/dist/assets/{live-project-verbs-CnknlUlT.js → live-project-verbs-CyWrvvzK.js} +1 -1
  170. package/dist/assets/{machine.document-D7jMrzXt.js → machine.document-BlWIYspE.js} +1 -1
  171. package/dist/assets/{machines.finder-Dor3O0uf.js → machines.finder-D-nBx1QJ.js} +1 -1
  172. package/dist/assets/material-CcQQ-mP8.js +1 -0
  173. package/dist/assets/{material-factory-BN3Lax5C.js → material-factory-CKO4sgCS.js} +1 -1
  174. package/dist/assets/{mesh-Cj-CYroI.js → mesh-CGB8fhbT.js} +1 -1
  175. package/dist/assets/{model-asset-sections.service-mC4WJFTA.js → model-asset-sections.service-oZwOlxI-.js} +1 -1
  176. package/dist/assets/{model-inspection-8o57YSZW.js → model-inspection-B5p-uq9q.js} +1 -1
  177. package/dist/assets/{model-thumbnail-chePRlH7.js → model-thumbnail-Cgyfafqg.js} +1 -1
  178. package/dist/assets/{models.finder-CKkT5ZdU.js → models.finder-v4ShdgaO.js} +1 -1
  179. package/dist/assets/{module-mode-BMiMhHI3.js → module-mode-BBCbx1-D.js} +2 -2
  180. package/dist/assets/{mount-canvas-ingest-root-B1swVIUJ.js → mount-canvas-ingest-root-9CLvzAsA.js} +2 -2
  181. package/dist/assets/{mount-dom-ingest-root-B8hO5mht.js → mount-dom-ingest-root-CZA1Dw6t.js} +2 -2
  182. package/dist/assets/{mount-ingest-root-Cbnh-mSw.js → mount-ingest-root-hudyfrT7.js} +2 -2
  183. package/dist/assets/{mount-manifest-B7oL1Abg.js → mount-manifest-C_z-xK97.js} +1 -1
  184. package/dist/assets/{mount-three-ingest-root-BdUJx6ix.js → mount-three-ingest-root-DWoCP70F.js} +1 -1
  185. package/dist/assets/{mounted-authoring-C47L5H5t.js → mounted-authoring-DMWjUr2Z.js} +1 -1
  186. package/dist/assets/{mounted-story-viewport-source-CyEK_vaq.js → mounted-story-viewport-source-Iq6tisms.js} +1 -1
  187. package/dist/assets/{native-debug-module-JJOFtIVz.js → native-debug-module-BO5dlpfD.js} +1 -1
  188. package/dist/assets/{navigation-ROJM2w84.js → navigation-BzH049Ad.js} +1 -1
  189. package/dist/assets/{navmesh.menu-DjefqtkI.js → navmesh.menu-CicRFavg.js} +1 -1
  190. package/dist/assets/{navmesh.service-BPqjEQiq.js → navmesh.service-B0zUTaL0.js} +1 -1
  191. package/dist/assets/network-observer.service-CvC30rDc.js +1 -0
  192. package/dist/assets/{network.utility-6Y5u53n8.js → network.utility-DTpK-Ri9.js} +1 -1
  193. package/dist/assets/{object3d-document-session-registry-DNCOGA3i.js → object3d-document-session-registry-CTeivmwK.js} +2 -2
  194. package/dist/assets/{oid-transform-DQzN_Gl_.js → oid-transform-xxKy1722.js} +1 -1
  195. package/dist/assets/{particles-DGdUmqOr.js → particles-CeOU09tg.js} +1 -1
  196. package/dist/assets/{pixi-authoring-adapter-BRktdcIz.js → pixi-authoring-adapter-qwgLB4nb.js} +1 -1
  197. package/dist/assets/{pixi-live-write-target-Dg0mdLaa.js → pixi-live-write-target-B-E2O-WC.js} +1 -1
  198. package/dist/assets/{play.command-4IDAqR5W.js → play.command-CAhUsYcp.js} +2 -2
  199. package/dist/assets/{presentation-8m-RDKIS.js → presentation-BKcWD0nx.js} +1 -1
  200. package/dist/assets/{product-t6tauO7R.js → product-C8OFGza7.js} +1 -1
  201. package/dist/assets/{profiler.action-CXA4IkQB.js → profiler.action-CyjXGHbx.js} +1 -1
  202. package/dist/assets/{profiler.menu-BgIBv4-I.js → profiler.menu-DXHAGF3Z.js} +1 -1
  203. package/dist/assets/{profiler.utility-BYoRbfIK.js → profiler.utility-Qx-aaTdo.js} +1 -1
  204. package/dist/assets/{project-authoring-session-DkekCxNv.js → project-authoring-session-B0YSloNS.js} +2 -2
  205. package/dist/assets/{properties-bone-constraints.inspector-DXpiCtf9.js → properties-bone-constraints.inspector-C-dwjglB.js} +1 -1
  206. package/dist/assets/{properties-bone.inspector-wIDsP4c5.js → properties-bone.inspector-CeZIE99V.js} +1 -1
  207. package/dist/assets/{properties-collection.inspector-5SRPbqfM.js → properties-collection.inspector-DiSBJpTu.js} +1 -1
  208. package/dist/assets/{properties-constraints.inspector-DIjKz692.js → properties-constraints.inspector-2DxnBAIf.js} +1 -1
  209. package/dist/assets/{properties-data.inspector-DE6i8biZ.js → properties-data.inspector-DvSzTW7_.js} +1 -1
  210. package/dist/assets/{properties-material.inspector-Cu1UCPY4.js → properties-material.inspector-XPNSk9iW.js} +1 -1
  211. package/dist/assets/{properties-modifiers.inspector-DsQzA638.js → properties-modifiers.inspector-8pjl5OY9.js} +1 -1
  212. package/dist/assets/{properties-object.inspector-C57X0GJq.js → properties-object.inspector-a30WyA7Q.js} +1 -1
  213. package/dist/assets/{properties-output.inspector-DzrcFuRM.js → properties-output.inspector-B9JochaR.js} +1 -1
  214. package/dist/assets/{properties-particles.inspector-DGqSnelN.js → properties-particles.inspector-D6rRhjyA.js} +1 -1
  215. package/dist/assets/{properties-physics.inspector-DIjhtiLe.js → properties-physics.inspector-BcJFxv6L.js} +1 -1
  216. package/dist/assets/{properties-render.inspector-CX0orwn9.js → properties-render.inspector-DHPbElDL.js} +1 -1
  217. package/dist/assets/{properties-scene.inspector-DaHNL_sq.js → properties-scene.inspector-ZJueIZwx.js} +1 -1
  218. package/dist/assets/{properties-texture.inspector-B5hmxPRy.js → properties-texture.inspector-CvUhb-u8.js} +1 -1
  219. package/dist/assets/{properties-view-layer.inspector-C7hdJgei.js → properties-view-layer.inspector-CaaGgMEq.js} +1 -1
  220. package/dist/assets/{properties-world.inspector-EWTC6jNw.js → properties-world.inspector-10GD8Fpy.js} +1 -1
  221. package/dist/assets/{r3f-design-session-CXlGV9hp.js → r3f-design-session-CVxU3s62.js} +2 -2
  222. package/dist/assets/{r3f-physics-binding-DZSIB0d_.js → r3f-physics-binding-jUszsaB2.js} +1 -1
  223. package/dist/assets/{r3f-source-authoring-adapter-GR97EmII.js → r3f-source-authoring-adapter-Cmxf0Hvz.js} +1 -1
  224. package/dist/assets/{react-canvas-navigation-L_mOnybL.js → react-canvas-navigation-B-5CNIty.js} +1 -1
  225. package/dist/assets/{react-inspector.service-B4P3UnSY.js → react-inspector.service-wpEmCNFv.js} +1 -1
  226. package/dist/assets/{react-story-board-CT1_3sk_.js → react-story-board-CMghMNcN.js} +1 -1
  227. package/dist/assets/{react-three-rapier.esm-DyMNYoA_.js → react-three-rapier.esm-LvsEG944.js} +1 -1
  228. package/dist/assets/{react-world-authoring-adapter-OR1SW2jI.js → react-world-authoring-adapter-qVYWC2NO.js} +1 -1
  229. package/dist/assets/{realm-services-u0mnjXU9.js → realm-services-DvRrMpdg.js} +1 -1
  230. package/dist/assets/{reflection-probe-capture.inspector-CTNlSaGW.js → reflection-probe-capture.inspector-vo8ShT8w.js} +1 -1
  231. package/dist/assets/{registry-wqakYaDW.js → registry-CC-Vb6qS.js} +1 -1
  232. package/dist/assets/{relative-import-specifier-DXWVQf0o.js → relative-import-specifier-CT_YQo7I.js} +1 -1
  233. package/dist/assets/{render-env-CN09NtDf.js → render-env-YEmoFtX3.js} +1 -1
  234. package/dist/assets/{render-features-HCEupUJ6.js → render-features-B7OI7f1i.js} +1 -1
  235. package/dist/assets/{render-settings-Clt6d05o.js → render-settings-Mh_ddGef.js} +1 -1
  236. package/dist/assets/{resolve-three-CLzKVMx2.js → resolve-three-0A-COMTr.js} +3 -3
  237. package/dist/assets/{root-seam-contract-D2uQHWF9.js → root-seam-contract-SVcCHdYl.js} +1 -1
  238. package/dist/assets/{run-selection-AyelFc9T.js → run-selection-HF9_7IwN.js} +1 -1
  239. package/dist/assets/{scene-capture-WbPcLfJl.js → scene-capture-BvNIvwYD.js} +1 -1
  240. package/dist/assets/{scene-document.service-4U6rDhCp.js → scene-document.service-Ck2pGl4I.js} +2 -2
  241. package/dist/assets/{scene-framing-DzSL2Cld.js → scene-framing-BgT3O3rp.js} +1 -1
  242. package/dist/assets/{seeded-random-tpdJjdqy.js → seeded-random-BVxDLbEH.js} +1 -1
  243. package/dist/assets/{setup-renderer-B5vZmCyu.js → setup-renderer-BCSUurTm.js} +1 -1
  244. package/dist/assets/{source-object3d-authoring-adapter-BQnQ3Qzg.js → source-object3d-authoring-adapter-CShEQbUV.js} +1 -1
  245. package/dist/assets/{source-persistence-backend-uyd6NiWD.js → source-persistence-backend-DOkAuppW.js} +1 -1
  246. package/dist/assets/{stage-keyboard-B2yrk2zu.js → stage-keyboard-BJEP_zFM.js} +1 -1
  247. package/dist/assets/{stage-overlay-set-Cqtz3s06.js → stage-overlay-set-U3RYk04i.js} +1 -1
  248. package/dist/assets/{stage-presence-markers-BgLs0Aj5.js → stage-presence-markers-C9j53BR-.js} +1 -1
  249. package/dist/assets/stage-transform-tools-D9eCTssP.js +1 -0
  250. package/dist/assets/{standard-viewport-dressing-uhv_3JvQ.js → standard-viewport-dressing-CCVrTojE.js} +3 -3
  251. package/dist/assets/{state-watch.action-BJ08HgcO.js → state-watch.action-fGEIwj5w.js} +1 -1
  252. package/dist/assets/{state-watch.menu-rAULwijr.js → state-watch.menu-Bvi0XsP3.js} +1 -1
  253. package/dist/assets/{state-watch.utility-eEbQcj8t.js → state-watch.utility-BNhj8Nnx.js} +1 -1
  254. package/dist/assets/story-capture-D0GNxNYo.js +1 -0
  255. package/dist/assets/{story-documents-Cm4jCkW5.js → story-documents-BF53RkDW.js} +2 -2
  256. package/dist/assets/{story-documents.service-BDvQCslK.js → story-documents.service-cTbf9p1e.js} +1 -1
  257. package/dist/assets/{story-documents.service-Cgtg6rXn.js → story-documents.service-mW6CBXLc.js} +1 -1
  258. package/dist/assets/story-media-presence-DsyVqDVF.js +1 -0
  259. package/dist/assets/{story-pixi-preview-D62Q_vIW.js → story-pixi-preview-DpjZcKtE.js} +1 -1
  260. package/dist/assets/{story-presentation-CofUdEU7.js → story-presentation-CNkoc9rw.js} +1 -1
  261. package/dist/assets/{story-three-preview-B9O1wapP.js → story-three-preview--fB-XR3A.js} +2 -2
  262. package/dist/assets/{studio-environment-BIhqrtFc.js → studio-environment-TibfpTB9.js} +1 -1
  263. package/dist/assets/{surface-state-DrM3wsrr.js → surface-state-Bt3iAf79.js} +1 -1
  264. package/dist/assets/{syntactic-prop-specs-BGz0N7Dg.js → syntactic-prop-specs-CN0U9uqz.js} +1 -1
  265. package/dist/assets/{team-playtest.service-CiE8UJAe.js → team-playtest.service-DiziYIhq.js} +1 -1
  266. package/dist/assets/{three-BQfhEwUz.js → three-DfbLdx-e.js} +1 -1
  267. package/dist/assets/{three-authoring-adapter-COBwREQO.js → three-authoring-adapter-CtjX4v6r.js} +1 -1
  268. package/dist/assets/three-authoring.service-BruYh1LE.js +2 -0
  269. package/dist/assets/{three-ingest-runtime-BnRF_nJN.js → three-ingest-runtime-V4l_ZpBp.js} +1 -1
  270. package/dist/assets/three-integration-BxG_D6RK.js +2 -0
  271. package/dist/assets/three-integration.service-CBSTLULk.js +1 -0
  272. package/dist/assets/{three-projection-core-PQm-CO61.js → three-projection-core-CyqdOvLG.js} +1 -1
  273. package/dist/assets/{three-state-C7khRIQE.js → three-state-B9ax7cgA.js} +1 -1
  274. package/dist/assets/{three-story-capture.service-B0oiGIfp.js → three-story-capture.service-CUVsgZa5.js} +2 -2
  275. package/dist/assets/three-story-model-NEuWKJe1.js +1 -0
  276. package/dist/assets/{three-viewport-presentation-B_tBudM-.js → three-viewport-presentation-Da0lYO0_.js} +1 -1
  277. package/dist/assets/{transform-mode-request-DWM6BdRA.js → transform-mode-request-Bfse_kvX.js} +1 -1
  278. package/dist/assets/{transport-strip-vgXGDgkI.js → transport-strip-DYbGjuX-.js} +1 -1
  279. package/dist/assets/transport.header-BglFgDzu.js +1 -0
  280. package/dist/assets/{tuples-BnYrlQqS.js → tuples-CMTm7T5T.js} +1 -1
  281. package/dist/assets/ui-board-document-GaFlpf81.js +2 -0
  282. package/dist/assets/{user-data-CifDDvSr.js → user-data-CYeyy9Su.js} +1 -1
  283. package/dist/assets/{utility-view-state-BPl8Asup.js → utility-view-state-Ye00iOCB.js} +1 -1
  284. package/dist/assets/{viewport-door-BCXEYmon.js → viewport-door-CCXNhxOW.js} +1 -1
  285. package/dist/assets/{viewport-root-presentation-DJLpUuf0.js → viewport-root-presentation-52V6g9Ae.js} +1 -1
  286. package/dist/assets/{viewport-surface-status-jwLhIK_M.js → viewport-surface-status-BtHfBssH.js} +1 -1
  287. package/dist/assets/{webworkerAll-P6jePa6X.js → webworkerAll-D7_8g3e0.js} +1 -1
  288. package/dist/assets/worker-BRY0I3XJ.js +2 -0
  289. package/dist/assets/{workspace-arrangement-B_OcbQbj.js → workspace-arrangement-D8CXsifv.js} +1 -1
  290. package/dist/assets/{world-documents-Bx3j867R.js → world-documents-C4AdTIHw.js} +1 -1
  291. package/dist/assets/{world-root-stage-binding-LEhjWDkn.js → world-root-stage-binding-CvEyzq0c.js} +1 -1
  292. package/dist/assets/{xstate-animation-binding-Dionc_fC.js → xstate-animation-binding-CmmOqqwV.js} +1 -1
  293. package/dist/assets/{xstate-animation-meta-XEmD_qc_.js → xstate-animation-meta-BSBJhOAT.js} +1 -1
  294. package/dist-node/cli.js +21 -18
  295. package/package.json +16 -16
  296. package/template/src/lib/reflections/ReflectionProbe.tsx +34 -5
  297. package/template/src/lib/reflections/index.ts +1 -0
  298. package/template/src/lib/reflections/probe-controller.ts +44 -3
  299. package/template/src/lib/reflections/reflection-probe-registry.ts +32 -7
  300. package/template/src/lib/reflections/volume-reflection-material.ts +638 -160
  301. package/dist/assets/EntityModelDocument-CplmAib0.js +0 -1
  302. package/dist/assets/InspectorObjectPreview-Bjc1Tn-I.js +0 -1
  303. package/dist/assets/ModelAssetDocument-G6ajiV51.js +0 -1
  304. package/dist/assets/Object3DDocumentViewport-BhH8afDi.js +0 -2
  305. package/dist/assets/StageHost-Bor1eHEO.js +0 -2
  306. package/dist/assets/autoplay.service-DaonKf7O.js +0 -1
  307. package/dist/assets/blender-emscripten-engine-DQljvfR7.js +0 -2
  308. package/dist/assets/blender-runtime.document-DnSl0twI.js +0 -12
  309. package/dist/assets/blender-wali-engine-CO-jG_ik.js +0 -2
  310. package/dist/assets/bridge.command-D6qTcgje.js +0 -3
  311. package/dist/assets/collaboration-presence-DcPhahtF.js +0 -1
  312. package/dist/assets/component-board.service-Cd1c9oSN.js +0 -2
  313. package/dist/assets/component-verbs.service-DsxhVcvk.js +0 -1
  314. package/dist/assets/editor-api-WeHVNlEo.js +0 -1
  315. package/dist/assets/fork-menu-Bthg9viY.js +0 -1
  316. package/dist/assets/gameplay-replay-WyopKGyB.js +0 -1
  317. package/dist/assets/ibl-override-material-CMo_a49U.js +0 -6
  318. package/dist/assets/index-yXSK_qPW.js +0 -1
  319. package/dist/assets/instances.command-COw2QpbN.js +0 -1
  320. package/dist/assets/layered-pick-BUr1U8lU.js +0 -1
  321. package/dist/assets/material-B6cH1Oqw.js +0 -1
  322. package/dist/assets/network-observer.service-GFzXuBMb.js +0 -1
  323. package/dist/assets/stage-transform-tools-BHcz53td.js +0 -1
  324. package/dist/assets/story-capture-B8wfSf5s.js +0 -1
  325. package/dist/assets/story-media-presence-SGlp_afL.js +0 -1
  326. package/dist/assets/three-authoring.service-C0azvoq8.js +0 -2
  327. package/dist/assets/three-integration-DeWYFf1x.js +0 -2
  328. package/dist/assets/three-integration.service-CoWCBTmg.js +0 -1
  329. package/dist/assets/three-story-model-D7g2pqfJ.js +0 -1
  330. package/dist/assets/transport.header-CfVHXjrT.js +0 -1
  331. package/dist/assets/ui-board-document-B_-K9luq.js +0 -2
  332. package/dist/assets/worker-CJIsrsP6.js +0 -2
@@ -1 +0,0 @@
1
- import{a as n}from"./jsx-runtime-DPjLkJKQ.js";import{t as f}from"./editor-shell-store-DckLm6m8.js";import{T as d,ak as v}from"./index-V4J7xfRg.js";import{r as l}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a as S}from"./live-mixers-B-bwLZ7c.js";import{b as h,e as b,f as x}from"./asset-preview-BS71mXsZ.js";import{O as j}from"./StageHost-Bor1eHEO.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-CjeYrUlm.js";import"./workspace-arrangement-B_OcbQbj.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-CifDDvSr.js";import"./entity-object-V13bGmay.js";import"./three-contract-Dkt6PmWY.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-B1jSqxSv.js";import"./studio-environment-BIhqrtFc.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";import"./three-state-C7khRIQE.js";import"./standard-viewport-dressing-uhv_3JvQ.js";import"./content-bounds-D5pXeHJN.js";import"./preview-renderer-BrYNFV1p.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-8o57YSZW.js";import"./three-viewport-presentation-B_tBudM-.js";import"./clip-planes-CnAI6DZn.js";import"./three-BQfhEwUz.js";import"./component-instance-root-Cw_-ajBX.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-chePRlH7.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-DeWYFf1x.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-BUr1U8lU.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-DNCOGA3i.js";import"./viewport-door-BCXEYmon.js";import"./scene-framing-DzSL2Cld.js";import"./source-object3d-authoring-adapter-BQnQ3Qzg.js";import"./three-projection-core-PQm-CO61.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-vgXGDgkI.js";import"./viewport-surface-status-jwLhIK_M.js";function w(e){const t=new Set;return e.traverse(i=>{const r=S(i);if(r)for(const o of r.clips.values())t.add(o);for(const o of i.animations)t.add(o)}),[...t]}function E({documentId:e,source:t,sourcePath:i,displayName:r,active:o,chromeless:p=!1,revision:m=0,modelSource:a}){const u=l.useCallback(()=>{const s=h(b(t)),c=w(t);return s.animations=[...c],{root:s,animations:c,dispose(){x(s)}}},[t,m]);return n.jsx(j,{documentId:e,sourcePath:i??r,displayName:r,build:u,active:o,chromeless:p,rendererLane:p?"inspector-preview":"own",assetType:"entity",...a?{modelSource:a}:{}})}function Mt({documentId:e,entityId:t,displayName:i,active:r}){const o=f(d()),p=l.useSyncExternalStore(o.shell.subscribe,o.shell.getSnapshot),m=o.objectMap.get(t);return m?n.jsx(E,{documentId:e,source:m,sourcePath:`Entity ${t}`,displayName:i,active:r,revision:p,modelSource:{kind:"entity",entityId:t}}):n.jsxs("div",{role:"alert",style:{padding:20,color:v.semantic.danger},children:["Scene entity ",t," is no longer available."]})}export{Mt as EntityModelDocument,E as Object3DSnapshotDocument};
@@ -1 +0,0 @@
1
- import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{Object3DSnapshotDocument as m}from"./EntityModelDocument-CplmAib0.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./editor-shell-store-DckLm6m8.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-CjeYrUlm.js";import"./workspace-arrangement-B_OcbQbj.js";import"./index-V4J7xfRg.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-CifDDvSr.js";import"./entity-object-V13bGmay.js";import"./three-contract-Dkt6PmWY.js";import"./live-mixers-B-bwLZ7c.js";import"./asset-preview-BS71mXsZ.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-B1jSqxSv.js";import"./studio-environment-BIhqrtFc.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";import"./StageHost-Bor1eHEO.js";import"./three-state-C7khRIQE.js";import"./standard-viewport-dressing-uhv_3JvQ.js";import"./content-bounds-D5pXeHJN.js";import"./preview-renderer-BrYNFV1p.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-8o57YSZW.js";import"./three-viewport-presentation-B_tBudM-.js";import"./clip-planes-CnAI6DZn.js";import"./three-BQfhEwUz.js";import"./component-instance-root-Cw_-ajBX.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-chePRlH7.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-DeWYFf1x.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-BUr1U8lU.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-DNCOGA3i.js";import"./viewport-door-BCXEYmon.js";import"./scene-framing-DzSL2Cld.js";import"./source-object3d-authoring-adapter-BQnQ3Qzg.js";import"./three-projection-core-PQm-CO61.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-vgXGDgkI.js";import"./viewport-surface-status-jwLhIK_M.js";function ut({previewKey:o,object:r,displayName:i,fill:p=!1}){return t.jsx("div",{"data-testid":"inspector-object-preview",style:p?{position:"absolute",inset:0,overflow:"hidden"}:{width:"100%",height:220,minHeight:220,borderBottom:"1px solid var(--volter-structural-divider)",overflow:"hidden",position:"relative"},children:t.jsx(m,{documentId:`inspector-preview:${o}`,source:r,displayName:i,active:!0,chromeless:!0})})}export{ut as InspectorObjectPreview};
@@ -1 +0,0 @@
1
- import{a as s}from"./jsx-runtime-DPjLkJKQ.js";import{r as e}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{ak as a}from"./index-V4J7xfRg.js";import{l as w,d as f}from"./asset-preview-BS71mXsZ.js";import{m as x,l as E,c as S}from"./model-thumbnail-chePRlH7.js";import{O as M}from"./StageHost-Bor1eHEO.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./editor-layers-CjeYrUlm.js";import"./workspace-arrangement-B_OcbQbj.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-B1jSqxSv.js";import"./studio-environment-BIhqrtFc.js";import"./user-data-CifDDvSr.js";import"./KTX2Loader-CaqVE6nY.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";import"./three-state-C7khRIQE.js";import"./editor-shell-store-DckLm6m8.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./entity-object-V13bGmay.js";import"./three-contract-Dkt6PmWY.js";import"./standard-viewport-dressing-uhv_3JvQ.js";import"./content-bounds-D5pXeHJN.js";import"./preview-renderer-BrYNFV1p.js";import"./live-mixers-B-bwLZ7c.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-8o57YSZW.js";import"./three-viewport-presentation-B_tBudM-.js";import"./clip-planes-CnAI6DZn.js";import"./three-BQfhEwUz.js";import"./component-instance-root-Cw_-ajBX.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-DeWYFf1x.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-BUr1U8lU.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-DNCOGA3i.js";import"./viewport-door-BCXEYmon.js";import"./scene-framing-DzSL2Cld.js";import"./source-object3d-authoring-adapter-BQnQ3Qzg.js";import"./three-projection-core-PQm-CO61.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-vgXGDgkI.js";import"./viewport-surface-status-jwLhIK_M.js";function Co({documentId:g,assetPath:o,displayName:u,active:p}){const[b,n]=e.useState(null),[d,c]=e.useState(null);e.useEffect(()=>{if(!p){n(null);return}const m=new AbortController;let l=null;n(null),c(null);const i=x(o);return(i==="glb"||i==="gltf"||i==="spz"?w(o,m.signal):i?E({url:o,format:i}).then(S).then(r=>({root:r,sourceBytes:null})):Promise.reject(new Error(`No native Three.js model loader supports ${o}.`))).then(r=>{if(m.signal.aborted){f(r.root);return}l=r.root,n(r)},r=>{m.signal.aborted||c(r instanceof Error?r.message:String(r))}),()=>{m.abort(),l&&f(l)}},[p,o]);const t=b?.root??null,j=e.useCallback(()=>{if(!t)throw new Error(`Model asset ${o} is not loaded.`);return{root:t,animations:t.animations,dispose(){}}},[o,t]);return d?s.jsx("div",{role:"alert",style:{padding:20,color:a.semantic.danger},children:d}):t?s.jsx(M,{documentId:g,sourcePath:o,displayName:u,build:j,active:p,assetType:"model",modelSource:{kind:"project-file",path:o}}):s.jsxs("div",{style:{padding:20,color:a.content.muted},children:["Loading ",u,"…"]})}export{Co as ModelAssetDocument};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StageHost-Bor1eHEO.js","assets/index-V4J7xfRg.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-state-C7khRIQE.js","assets/editor-shell-store-DckLm6m8.js","assets/output-pass-HurwNl0G.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/Pass-D1MRT672.js","assets/editor-layers-CjeYrUlm.js","assets/workspace-arrangement-B_OcbQbj.js","assets/user-data-CifDDvSr.js","assets/entity-object-V13bGmay.js","assets/three-contract-Dkt6PmWY.js","assets/standard-viewport-dressing-uhv_3JvQ.js","assets/content-bounds-D5pXeHJN.js","assets/hierarchy-marks-B1jSqxSv.js","assets/environment-Dg-YaLsA.js","assets/RoomEnvironment-BkknvS_I.js","assets/EXRLoader-CITMBvGd.js","assets/HDRLoader-BTGuGhVo.js","assets/preview-renderer-BrYNFV1p.js","assets/renderer-ownership-BovSEcLv.js","assets/live-mixers-B-bwLZ7c.js","assets/live-gesture-lock-DJbrjOqf.js","assets/model-inspection-8o57YSZW.js","assets/three-viewport-presentation-B_tBudM-.js","assets/clip-planes-CnAI6DZn.js","assets/three-BQfhEwUz.js","assets/component-instance-root-Cw_-ajBX.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/model-thumbnail-chePRlH7.js","assets/studio-environment-BIhqrtFc.js","assets/KTX2Loader-CaqVE6nY.js","assets/GLTFLoader-KeoruJgS.js","assets/BufferGeometryUtils-B22h7jo4.js","assets/OrbitControls-B13MKuwC.js","assets/LineSegments2-DN9pUfWA.js","assets/three.quarks.esm-C_HmSKXo.js","assets/three-integration-DeWYFf1x.js","assets/host-hierarchy-objects-BV3WqU2w.js","assets/layered-pick-BUr1U8lU.js","assets/root-stacking-BEd9ZvxC.js","assets/object3d-document-session-registry-DNCOGA3i.js","assets/viewport-door-BCXEYmon.js","assets/asset-preview-BS71mXsZ.js","assets/bitmap-label-Ct4k6ehY.js","assets/scene-framing-DzSL2Cld.js","assets/source-object3d-authoring-adapter-BQnQ3Qzg.js","assets/three-projection-core-PQm-CO61.js","assets/editor-presentation-activity-CqJH4G9t.js","assets/transport-strip-vgXGDgkI.js","assets/viewport-surface-status-jwLhIK_M.js"])))=>i.map(i=>d[i]);
2
- import{aj as r,_ as a}from"./index-V4J7xfRg.js";import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{r as n}from"./index-nmcBqr7Y.js";import{V as c,O as u}from"./viewport-surface-status-jwLhIK_M.js";const s=n.lazy(async()=>({default:(await a(()=>import("./StageHost-Bor1eHEO.js").then(e=>e.S),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60]))).Object3DDocumentViewport}));function l(t){return i(t.documentId,t.chromeless),o.jsx(n.Suspense,{fallback:o.jsx(c,{testId:"object3d-document-loading",children:u}),children:o.jsx(s,{...t})})}function i(t,e=!1){n.useEffect(()=>{if(!e)return r(t)},[t,e])}export{l as O};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DHhMOs_s.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/stage-transform-tools-BHcz53td.js","assets/jsx-runtime-DPjLkJKQ.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-V4J7xfRg.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/editor-shell-store-DckLm6m8.js","assets/output-pass-HurwNl0G.js","assets/Pass-D1MRT672.js","assets/editor-layers-CjeYrUlm.js","assets/workspace-arrangement-B_OcbQbj.js","assets/user-data-CifDDvSr.js","assets/entity-object-V13bGmay.js","assets/three-contract-Dkt6PmWY.js","assets/Toolbar-BEBQdxRz.js","assets/transform-mode-request-DWM6BdRA.js","assets/three-state-C7khRIQE.js","assets/standard-viewport-dressing-uhv_3JvQ.js","assets/content-bounds-D5pXeHJN.js","assets/hierarchy-marks-B1jSqxSv.js","assets/environment-Dg-YaLsA.js","assets/RoomEnvironment-BkknvS_I.js","assets/EXRLoader-CITMBvGd.js","assets/HDRLoader-BTGuGhVo.js","assets/preview-renderer-BrYNFV1p.js","assets/renderer-ownership-BovSEcLv.js","assets/live-mixers-B-bwLZ7c.js","assets/live-gesture-lock-DJbrjOqf.js","assets/model-inspection-8o57YSZW.js","assets/three-viewport-presentation-B_tBudM-.js","assets/clip-planes-CnAI6DZn.js","assets/three-BQfhEwUz.js","assets/component-instance-root-Cw_-ajBX.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/model-thumbnail-chePRlH7.js","assets/studio-environment-BIhqrtFc.js","assets/KTX2Loader-CaqVE6nY.js","assets/GLTFLoader-KeoruJgS.js","assets/BufferGeometryUtils-B22h7jo4.js","assets/OrbitControls-B13MKuwC.js","assets/LineSegments2-DN9pUfWA.js","assets/three.quarks.esm-C_HmSKXo.js","assets/three-integration-DeWYFf1x.js","assets/host-hierarchy-objects-BV3WqU2w.js","assets/layered-pick-BUr1U8lU.js","assets/root-stacking-BEd9ZvxC.js","assets/object3d-document-session-registry-DNCOGA3i.js","assets/viewport-door-BCXEYmon.js","assets/asset-preview-BS71mXsZ.js","assets/bitmap-label-Ct4k6ehY.js","assets/scene-framing-DzSL2Cld.js","assets/source-object3d-authoring-adapter-BQnQ3Qzg.js","assets/three-projection-core-PQm-CO61.js","assets/editor-presentation-activity-CqJH4G9t.js","assets/transport-strip-vgXGDgkI.js","assets/viewport-surface-status-jwLhIK_M.js","assets/stage-overlay-set-Cqtz3s06.js","assets/TransientHint-CzsdY8W6.js","assets/ViewportShadingMenu-BofQt6_4.js","assets/stage-keyboard-B2yrk2zu.js","assets/camera-authoring-DYjhU5Zp.js","assets/stage-presence-markers-BgLs0Aj5.js","assets/collaboration-presence-DcPhahtF.js"])))=>i.map(i=>d[i]);
2
- import{kL as Cr,lk as ur,kS as Ie,Y as us,eU as zn,lH as In,_ as Ye,F as Nn,lI as $n,j0 as Ys,bv as Ge,aL as Te,a6 as we,by as Un,bM as Gn,a5 as Ne,lJ as qn,bO as Yn,dd as Kn,aK as hs,de as ds,lK as Ks,lL as Xn,iW as Zn,bp as vr,bq as ps,br as ct,ak as qe,en as Jn,lM as Qn,lN as ei,a7 as ve,aj as ti,lO as ri,lP as si,lQ as ni,lR as ii,lS as oi,hi as ai,lT as ci,b4 as li,lU as Xs,aP as ui,gJ as hi,lV as fs,lW as ms,lX as gs,b0 as vs,kK as ws,fz as bs,lY as di,E as pi,bt as fi,bs as ys,lZ as mi,bJ as gi,j3 as vi,gj as Ss,l_ as wi,l$ as bi,m0 as yi,hd as Si,dH as xi,kT as Pi,kJ as Ci,fU as ki,gd as Mi,m1 as xs,z as Ei,m2 as Oi,bQ as Ri}from"./index-V4J7xfRg.js";import{a as d}from"./jsx-runtime-DPjLkJKQ.js";import{t as wr,a as ji}from"./three-state-C7khRIQE.js";import{i as N,b as Ti,a as Vi,w as Ai,c as Li,s as Ps}from"./standard-viewport-dressing-uhv_3JvQ.js";import{r as f}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a as br}from"./content-bounds-D5pXeHJN.js";import{EDITOR_LAYER as Zs,isInEditorOwnedSubtree as Fi}from"./editor-layers-CjeYrUlm.js";import{createStandardEnvironment as Di}from"./environment-Dg-YaLsA.js";import{a as _i}from"./preview-renderer-BrYNFV1p.js";import{s as Js}from"./user-data-CifDDvSr.js";import{s as Hi,a as Bi}from"./live-mixers-B-bwLZ7c.js";import{n as Wi,T as Qs,ej as kr,c1 as Cs,cu as zi,cp as Vt,aI as Ii,d as Ni,ct as $i,cx as Ui,_ as pe,bh as Lt,N as en,M as tn,dg as rn,df as sn,fo as z,d5 as yr,d9 as Gi,L as ks,I as Sr,ez as qi,dp as Ms,cj as xr,em as Yi,c0 as Ki,aO as Xi,bX as Zi,fx as Es,bi as Ji,eu as Qi,cg as me,el as nn,A as eo,d7 as to,eW as Os,fd as Tt,e6 as Rs,cm as js}from"./three.core-3arARmh6.js";import{l as ro,w as so}from"./live-gesture-lock-DJbrjOqf.js";import{v as no}from"./output-pass-HurwNl0G.js";import{a as Ve}from"./three-contract-Dkt6PmWY.js";import{d as Ft,f as io}from"./model-inspection-8o57YSZW.js";import{c as oo,p as At,d as Ts,i as Vs,r as ao,b as co,a as lo,t as As,s as Ls,C as uo,e as ho,f as po,E as fo}from"./three-viewport-presentation-B_tBudM-.js";import{s as Pr}from"./workspace-arrangement-B_OcbQbj.js";import{a as mo,b as go,L as vo}from"./LineSegments2-DN9pUfWA.js";import{s as wo,o as bo,a as yo,c as So}from"./object3d-document-session-registry-DNCOGA3i.js";import{S as xo}from"./source-object3d-authoring-adapter-BQnQ3Qzg.js";import{s as Po,i as hr}from"./editor-presentation-activity-CqJH4G9t.js";import{a as Co}from"./three-integration-DeWYFf1x.js";import{r as Fs,d as Ds}from"./viewport-door-BCXEYmon.js";import{T as ko}from"./transport-strip-vgXGDgkI.js";import{V as Mo,O as Eo}from"./viewport-surface-status-jwLhIK_M.js";import{t as on}from"./editor-shell-store-DckLm6m8.js";const an=30;function cn(n,e,t){return n<e?e:n>t?t:n}function Oo(n,e){const t=n.animations;if(t.length===0)return null;const r=new Wi(n);let i=t[0];if(!i)return null;const a=o=>{r.stopAllAction();const l=r.clipAction(o);l.paused=!1,l.play(),i=o};a(i);const c=e.attach({id:n.uuid,label:n.name||i.name||"Clip",range:()=>({start:0,end:i?.duration??0,fps:an}),seek:o=>{r.setTime(cn(o,0,i?.duration??0))},clips:()=>t.map(o=>({id:o.name,label:o.name})),setClip:o=>{const l=t.find(p=>p.name===o);l&&a(l)}});return()=>{c(),r.stopAllAction(),r.uncacheRoot(n)}}function Ro(n,e){const t=Bi(n);if(!t)return null;let r=t.clips.values().next().value;if(!r)return null;const i=c=>{t.mixer.stopAllAction();const o=t.mixer.clipAction(c);o.paused=!1,o.play(),r=c};return e.attach({id:n.uuid,label:n.name||r.name||"Animation",range:()=>({start:0,end:r?.duration??0,fps:an}),seek:c=>{t.mixer.setTime(cn(c,0,r?.duration??0))},clips:()=>[...t.clips.entries()].map(([c,o])=>({id:c,label:o.name||c})),setClip:c=>{const o=t.clips.get(c);o&&i(o)}})}function _s(n,e,t={}){const r=new Map,i=()=>{const o=new Set;(typeof n=="function"?n():n)?.traverse(p=>{if(r.has(p.uuid)){o.add(p.uuid);return}const x=Ro(p,e)??Oo(p,e);x&&(r.set(p.uuid,x),o.add(p.uuid))});for(const[p,x]of[...r])o.has(p)||(x(),r.delete(p))};i();const a=t.rescanOnLiveMixers,c=a?Hi(()=>{a()&&i()}):()=>{};return{refresh:i,dispose:()=>{c();for(const o of r.values())o();r.clear()}}}const ke=()=>globalThis.performance?.now()??Date.now();function jo(n,e){return n.length===0?0:n[Math.min(n.length-1,Math.floor((n.length-1)*e))]??0}function To(n=!1){const e=new Set,t=[],r=new Map,i=new Map,a=new Map;let c=[],o=[],l=n,p=!1,x=!1,v=0,P=0,w=0;const L=[];let F=0,M=0,C={gpuMs:null,drawCalls:0,triangles:0,geometries:0,textures:0,renderPasses:null},D={enabled:l,recording:x,fps:0,cpuMs:0,p95Ms:0,p99Ms:0,frames:[],phases:[],systems:[],components:[],render:C};function X(){const b=t.at(-1),I=t.slice();let _;const G=j=>(_??=I.map(H=>H.intervalMs).filter(H=>H>0).sort((H,T)=>H-T),jo(_,j));D={enabled:l,recording:x,fps:b?.intervalMs?1e3/b.intervalMs:0,cpuMs:b?.cpuMs??0,get p95Ms(){return G(.95)},get p99Ms(){return G(.99)},frames:I,phases:b?.phases??[],systems:[...i].map(([j,H])=>({name:j,ms:H})).sort((j,H)=>H.ms-j.ms),components:[...a].map(([j,H])=>({name:j,ms:H})).sort((j,H)=>H.ms-j.ms),render:C};for(const j of e)j()}return{get enabled(){return l},set enabled(b){l!==b&&(l=b,b&&!p&&(w=0),X())},get telemetryEnabled(){return p},set telemetryEnabled(b){if(p===b)return;const I=!l&&!p;p=b,b&&I&&(w=0),X()},get recording(){return x},startRecording(){const b=!l&&!p;l=!0,b&&(w=0),x=!0,t.length=0,X()},stopRecording(){x=!1,X()},clear(){t.length=0,X()},beginFrame(){!l&&!p||(r.clear(),i.clear(),a.clear(),c=[],o=[],L.length=0,C={gpuMs:null,drawCalls:0,triangles:0,geometries:0,textures:0,renderPasses:null},P=ke())},beginPhase(){l&&L.push(ke())},endPhase(b){if(!l)return;const I=L.pop()??P,_=ke()-I,G=r.get(b);r.set(b,{ms:(G?.ms??0)+_,startMs:G?.startMs??I-P}),x&&performance.measure(`volter.phase.${b}`,{start:I,duration:_})},systemObserver:{beginSystem(){l&&(F=ke())},endSystem(b,I,_){if(!l)return;const G=ke(),j=`${b} / ${I} / ${_}`;i.set(j,(i.get(j)??0)+G-F),c.push({name:j,phase:I,startMs:F-P,ms:G-F})}},beginComponent(){x&&(M=ke())},endComponent(b,I=""){if(!x)return;const _=ke();a.set(b,(a.get(b)??0)+_-M),o.push({name:b,phase:I,startMs:M-P,ms:_-M})},reportRender(b){l&&(C={gpuMs:b.gpuMs??C.gpuMs,drawCalls:C.drawCalls+b.drawCalls,triangles:C.triangles+b.triangles,geometries:C.geometries+b.geometries,textures:C.textures+b.textures,renderPasses:b.renderPasses===void 0?C.renderPasses:(C.renderPasses??0)+b.renderPasses})},endFrame(){if(!l&&!p)return;const b=ke(),I=w===0?0:P-w;w=P;const _={id:++v,timestamp:b,intervalMs:I,cpuMs:b-P,phases:[...r].map(([G,{ms:j,startMs:H}])=>({name:G,ms:j,startMs:H})).sort((G,j)=>j.ms-G.ms),systems:c.slice(),components:o.slice(),render:{...C}};t.push(_),t.length>600&&t.splice(0,t.length-600),x&&performance.measure("volter.frame",{start:P,duration:_.cpuMs}),X()},subscribe(b){return e.add(b),()=>{e.delete(b)}},getSnapshot(){return D},exportJSON(){return JSON.stringify({version:2,capturedAt:new Date().toISOString(),frames:t},null,2)}}}const ln=256;function Vo(n){const e=Math.min(1,Math.max(0,n));return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function dr(n,e,t){const r=Math.hypot(n,e,t)||1;return[n/r,e/r,t/r]}function Ao(n=ln){const e=document.createElement("canvas");e.width=n,e.height=n;const t=e.getContext("2d");if(!t)return e;const r=t.createImageData(n,n),i=dr(-.45,.62,.64),a=dr(.65,-.35,.5),c=dr(i[0],i[1],i[2]+1),o=[.7,.69,.68],l=[.34,.4,.52],p=[.85,.88,1];for(let x=0;x<n;x++)for(let v=0;v<n;v++){const P=(v+.5)/n/.5-1,w=1-(x+.5)/n/.5,L=P*P+w*w,F=L>1,M=F?1/Math.sqrt(L):1,C=P*M,D=w*M,X=F?0:Math.sqrt(Math.max(0,1-L)),b=Math.max(0,C*i[0]+D*i[1]+X*i[2]),I=Math.max(0,C*a[0]+D*a[1]+X*a[2]),_=Math.max(0,C*c[0]+D*c[1]+X*c[2])**42*.5,G=(1-X)**3.2*.4,j=(x*n+v)*4;for(let H=0;H<3;H++){const T=o[H]*(.16+.8*b)+l[H]*.3*I+p[H]*G+_;r.data[j+H]=Math.round(Vo(T)*255)}r.data[j+3]=255}return t.putImageData(r,0,0),e}function Lo(n=ln){const e=new Qs(Ao(n));return e.colorSpace=kr,e.minFilter=Cs,e.magFilter=Cs,e.generateMipmaps=!1,e.needsUpdate=!0,e}function Fo(n){return n.color?.clone()??new pe(12502993)}function pr(n,e){return n[e]??null}class Do{_derived=new Map;_normals=new zi;_matcap=null;_matcapTexture=null;_overdraw=new Vt({color:16777215,transparent:!0,opacity:.08,depthTest:!1,depthWrite:!1,blending:Ni,side:Ii,toneMapped:!1});render(e,t,r,i=()=>!0){if(t==="solid"||t==="preview"||t==="rendered"){r();return}const a=[];e.traverse(c=>{const o=c;!o.isMesh||!o.material||!i(o)||(a.push({mesh:o,material:o.material}),o.material=Array.isArray(o.material)?o.material.map(l=>this._materialFor(l,t)):this._materialFor(o.material,t))});try{r()}finally{for(const{mesh:c,material:o}of a)c.material=o}}dispose(){for(const e of this._derived.values())e.clay.dispose(),e.unlit.dispose(),e.wireframe.dispose();this._derived.clear(),this._normals.dispose(),this._overdraw.dispose(),this._matcap?.dispose(),this._matcapTexture?.dispose(),this._matcap=null,this._matcapTexture=null}_materialFor(e,t){if(t==="normals")return this._normals;if(t==="overdraw")return this._overdraw;if(t==="matcap")return this._matcap||(this._matcapTexture=Lo(),this._matcap=new $i({matcap:this._matcapTexture,toneMapped:!1})),this._matcap;let r=this._derived.get(e);if(!r){const i={color:Fo(e),map:pr(e,"map"),alphaMap:pr(e,"alphaMap"),alphaTest:e.alphaTest,opacity:e.opacity,transparent:e.transparent,side:e.side,depthTest:e.depthTest,depthWrite:e.depthWrite,vertexColors:!!e.vertexColors,fog:e.fog??!0};r={clay:new Ui({color:11450048,roughness:.82,metalness:0,flatShading:!0,alphaMap:pr(e,"alphaMap"),alphaTest:e.alphaTest,opacity:e.opacity,transparent:e.transparent,side:e.side,depthTest:e.depthTest,depthWrite:e.depthWrite}),unlit:new Vt(i),wireframe:new Vt({...i,wireframe:!0})},this._derived.set(e,r)}return r[t]}}class _o extends Lt{constructor(e,t){super(),this.bones=e;const r=new Set;for(const o of e){const l=o.parent;l?.isBone&&this.addSegment(l,o,r);for(const p of o.children)p.isBone&&this.addSegment(o,p,r)}this.linePositions=new Float32Array(Math.max(this.segments.length*6,6));const i=new mo;i.setPositions(this.linePositions),this.lineMaterial=new go({color:t,linewidth:5,worldUnits:!1,depthTest:!1,depthWrite:!1,toneMapped:!1,alphaToCoverage:!0}),this.lines=new vo(i,this.lineMaterial),this.lines.onBeforeRender=o=>{o.getSize(this.lineMaterial.resolution)},this.lines.frustumCulled=!1,this.lines.renderOrder=1001,this.add(this.lines),this.pointPositions=new Float32Array(Math.max(e.length*3,3));const a=new en;a.setAttribute("position",new tn(this.pointPositions,3));const c=new rn({color:t,size:11,sizeAttenuation:!1,depthTest:!1,depthWrite:!1,toneMapped:!1});this.points=new sn(a,c),this.points.frustumCulled=!1,this.points.renderOrder=1002,this.add(this.points),this.name="__object3d_document_bone_selection",Pr(this,"editorHelper",!0),this.traverse(o=>o.layers.set(Zs)),this.update()}segments=[];linePositions;pointPositions;lines;lineMaterial;points;worldPosition=new z;setColor(e){this.lineMaterial.color.setHex(e),this.points.material.color.setHex(e)}update(){let e=0;for(const[i,a]of this.segments)i.getWorldPosition(this.worldPosition),this.linePositions.set(this.worldPosition.toArray(),e),a.getWorldPosition(this.worldPosition),this.linePositions.set(this.worldPosition.toArray(),e+3),e+=6;const t=this.lines.geometry.getAttribute("instanceStart");t&&(t.data.needsUpdate=!0),e=0;for(const i of this.bones)i.getWorldPosition(this.worldPosition),this.pointPositions.set(this.worldPosition.toArray(),e),e+=3;const r=this.points.geometry.getAttribute("position");r&&(r.needsUpdate=!0)}dispose(){this.lines.geometry.dispose(),this.lineMaterial.dispose(),this.points.geometry.dispose(),this.points.material.dispose()}addSegment(e,t,r){const i=`${e.uuid}:${t.uuid}`;r.has(i)||(r.add(i),this.segments.push([e,t]))}}const Ho="skeletons",fr=new pe(58879),mr=new pe(16756736);function Bo(n){const e=n.geometry.getAttribute("color");for(let r=0;r<e.count;r+=2)e.setXYZ(r,fr.r,fr.g,fr.b),r+1<e.count&&e.setXYZ(r+1,mr.r,mr.g,mr.b);e.needsUpdate=!0,n.renderOrder=999;const t=n.material;t.depthTest=!1,t.depthWrite=!1,t.toneMapped=!1,Pr(n,"editorHelper",!0),Pr(n,"editorHelperType",Ho),n.traverse(r=>r.layers.set(Zs))}const Wo=1,zo=700,Io=.001,No=Math.PI-.001,$o=n=>n<.5?4*n*n*n:1-(-2*n+2)**3/2,Uo=n=>n;function $e(n,e){return typeof n=="number"&&Number.isFinite(n)?n:e}const Hs={mode:"solid",background:"neutral",projection:"perspective",skeleton:!1,bounds:!1},Bs=1119773;class Go{constructor(e,t,r,i,a,c,o=new pe(2106410),l=null){this.documentId=e,this.root=t,this.scene=r,this.renderer=i,this.viewport=a,this.authoring=c,this.neutralBackground=o,this.frameBox=l,this.unsubscribeSelectionTheme=Cr(i.domElement,this.syncSelectionTheme),a.orbitControls.addEventListener("start",this.cancelLookForHuman),this.unsubscribeRotateStart=a.onRotateStart(this.autoPerspective),this.unsubscribeAxisView=a.onAxisView(this.axisView)}profiler=To();shading=new Do;helpers=[];skeletonHelper=null;boundsHelper=null;boneSelectionHighlight=null;boneSelectionSignature="";composer=null;composerLoading=!1;disposed=!1;sceneRenderPass=null;selectionOutline=null;selectionOutlinePass=null;selectedObjects=[];selectionOrigins=null;renderWidth=1;renderHeight=1;orthographicCamera=new yr;captureAspect=null;cameraOverride=null;cameraViewSource=null;through=null;leaving=!1;viewMemo=null;throughPerspective=new Gi;throughOrthographic=new yr;beforeRender=null;state=Hs;version=0;listeners=new Set;unsubscribeSelectionTheme=()=>{};flight=null;flightPose=new z;topologyOverlay=null;topologyFollowers=[];unsubscribeRotateStart;unsubscribeAxisView;axisView=()=>(this.leaveCameraView(!1),this.settleFlight("superseded"),ur().autoPerspective&&this.setProjection("orthographic"),!0);autoPerspective=()=>{if(!ur().autoPerspective||this.cameraView()!==null||this.state.projection!=="orthographic")return;const e=this.viewport.camera,t=e.position.clone().sub(this.viewport.orbitControls.target),r=new z(0,1,0).applyQuaternion(e.quaternion);Ft(t,r)!==null&&this.setProjection("perspective")};replaceContent(e,t){N(),this.selectionOutline?.selection.clear(),this.selectedObjects=[],this.boneSelectionSignature="",this.clearBoneSelectionHighlight(),this.clearSkeletonHelper(),this.clearBoundsHelper(),this.clearTopologyOverlay(),this.root=e,this.authoring=t,this.state.mode==="wireframe"&&this.buildTopologyOverlay(),this.state.bounds&&(this.boundsHelper=new ks(e,16757844),this.addHelper(this.boundsHelper,"bounds")),this.syncSelectionPresentation(),this.refreshSkeletonHelper(),this.notify()}cancelLookForHuman=()=>{this.settleFlight("human")};selectionColors=null;syncSelectionTheme=()=>{this.selectionColors=Ie(this.renderer.domElement);const e=this.selectionColors.visible;this.selectionOutline&&oo(this.selectionOutline,Ie(this.renderer.domElement)),this.boneSelectionHighlight?.setColor(e)};subscribe=e=>(this.listeners.add(e),()=>this.listeners.delete(e));getSnapshot=()=>this.version;presentation(){return this.state}resolveFrameBounds(e="selection"){const t=e==="all"?[]:this.authoring?.selection?.get()??[];if(t.length>0){const r=new Sr;let i=!1;for(const a of t){const c=this.authoring?Ve(this.authoring.hierarchy,a):null;if(!c)continue;const o=br(c);o.isEmpty()||(r.union(o),i=!0)}if(i)return r}return this.frameBox&&!this.frameBox.isEmpty()?this.frameBox:br(this.root)}frame(e=1,t="selection"){this.leaveCameraView(!1);const r=this.resolveFrameBounds(t);if(r.isEmpty()){let l=0,p=0;return this.root.traverse(x=>{const v=x.geometry;v&&(l+=1,p+=v.getAttribute("position")?.count??0)}),us.warn(`frame: nothing to frame — root "${this.root.name}" (${this.root.children.length} children, ${l} meshes, ${p} positions), selection ${JSON.stringify(this.authoring?.selection?.get()??[])}, frameBox ${this.frameBox?this.frameBox.isEmpty()?"empty":"set":"none"}`,"document"),!1}this.settleFlight("superseded");const i=r.getCenter(new z),a=this.viewport.camera.position.clone().sub(this.viewport.orbitControls.target).normalize();a.lengthSq()===0&&a.set(.8,.5,-1).normalize();const c=Math.min(10,Math.max(.1,$e(e,1))),o=At(r,this.viewport.camera,a)*c;return this.viewport.setPose(i.clone().addScaledVector(a,o),i),!0}orbit(e){return this.launchFlight($e(e.azimuth,0),$e(e.elevation,0),Math.min(60,Math.max(0,$e(e.duration,.6))),$o)}turntable(e){const t=$e(e.revolutions,1);return this.launchFlight(t*Math.PI*2,0,Math.min(60,Math.max(0,$e(e.seconds,6))),Uo)}looking(){return this.flight!==null}launchFlight(e,t,r,i){this.settleFlight("superseded");const a=this.viewport.camera,c=this.viewport.orbitControls.target.clone(),o=new qi().setFromVector3(a.position.clone().sub(c)),l=o.radius>1e-4?o.radius:Math.max(this.resolveFrameBounds().getSize(new z).length(),1),p={pivot:c,radius:l,startTheta:o.theta,startPhi:o.phi,deltaTheta:e,deltaPhi:-t,duration:r,ease:i,elapsed:0,theta:o.theta,phi:o.phi,settle:null};this.flight=p;const x=new Promise(v=>{p.settle=v});return this.applyFlightPose(p,0),r<=0&&this.settleFlight(null),x}applyFlightPose(e,t){const r=e.ease(t);e.theta=e.startTheta+e.deltaTheta*r,e.phi=Math.min(No,Math.max(Io,e.startPhi+e.deltaPhi*r));const i=this.viewport.camera;i.position.setFromSphericalCoords(e.radius,e.phi,e.theta).add(e.pivot),this.viewport.orbitControls.target.copy(e.pivot),i.lookAt(e.pivot),i.updateMatrixWorld(),this.flightPose.copy(i.position)}advanceLook(e){const t=this.flight;if(!t)return;const r=Math.max(1e-4,t.radius*.001);if(this.viewport.camera.position.distanceToSquared(this.flightPose)>r*r){this.settleFlight("human");return}e>0&&Number.isFinite(e)&&(t.elapsed+=e);const i=t.duration<=0?1:Math.min(1,t.elapsed/t.duration);this.applyFlightPose(t,i),i>=1&&this.settleFlight(null)}settleFlight(e){const t=this.flight;if(!t)return;this.flight=null;const r={completed:e===null,azimuth:t.theta,elevation:Math.PI/2-t.phi,seconds:Math.min(t.elapsed,t.duration)};t.settle?.(e===null?r:{...r,cancelledBy:e})}select(e){N(),this.authoring&&zn(this.authoring,[...e])}selection(){return[...this.authoring?.selection?.get()??[]]}idForObject(e){return this.authoring?.hierarchy.idForObject3D?.(e)??null}syncSelectionPresentation(){N();const e=(this.authoring?.selection?.get()??[]).map(i=>this.authoring?Ve(this.authoring.hierarchy,i):null).filter(i=>i!==null);if(this.selectedObjects=e,this.selectionOutline&&(Ts(this.selectionOutline,this.selectionOutlineWanted?e:[]),this.syncComposerOutput()),this.selectionOrigins){const i=Ie(this.renderer.domElement);this.selectionOrigins.update(e,{visible:i.visible,...i.active?{active:i.active.visible}:{}})}const t=e.filter(i=>!!i.isBone),r=t.map(i=>i.uuid).join("\0");r!==this.boneSelectionSignature&&(this.boneSelectionSignature=r,this.clearBoneSelectionHighlight(),t.length>0&&(this.boneSelectionHighlight=new _o(t,Ie(this.renderer.domElement).visible),this.scene.add(this.boneSelectionHighlight)),this.refreshSkeletonHelper())}frameSelection(){return this.frameIds(this.authoring?.selection?.get()??[])}frameIds(e){this.leaveCameraView(!1),this.settleFlight("superseded");const t=e.map(r=>this.authoring?Ve(this.authoring.hierarchy,r):null).filter(r=>r!==null);return t.length===0?!1:t.every(r=>r.isBone)?(this.frameBones(t),!0):(this.viewport.focusOnMultiple(t),!0)}setViewPreset(e,t="bounds"){N(),this.leaveCameraView(!1),this.settleFlight("superseded");const r=io(e);let i,a;if(t==="view")i=this.viewport.orbitControls.target.clone(),a=this.viewport.camera.position.distanceTo(i);else{const l=this.resolveFrameBounds();if(l.isEmpty())return;i=l.getCenter(new z),a=At(l,this.viewport.camera,r)}const c=i.clone().addScaledVector(r,a),o=e==="top"?{x:0,y:0,z:-1}:e==="bottom"?{x:0,y:0,z:1}:{x:0,y:1,z:0};this.viewport.setPose(c,i,void 0,o),this.setProjection(e==="isometric"?"perspective":"orthographic")}setCameraPose(e,t,r){N(),this.leaveCameraView(!1),this.settleFlight("superseded"),this.viewport.setPose(e,t,r)}cameraPose(){return{position:this.viewport.camera.position.toArray(),target:this.viewport.orbitControls.target.toArray(),fov:this.viewport.camera.fov}}camera(){if(this.cameraOverride)return this.cameraOverride;const e=this.drawnCamera();return this.viewport.setGizmoCamera(e===this.viewport.camera?null:e),e}drawnCamera(){const e=this.through?this.cameraView():null;return e?this.throughCamera(e):(this.through&&!this.leaving&&(this.leaving=!0,queueMicrotask(()=>{this.leaving=!1,this.through&&!this.cameraView()&&this.leaveCameraView(!1)})),this.state.projection==="perspective"?this.viewport.camera:(this.syncOrthographicCamera(),this.orthographicCamera))}setCameraViewSource(e){this.cameraViewSource!==e&&(this.cameraViewSource=e,e||this.leaveCameraView(!1),this.notify())}hasCameraView(){return this.cameraViewSource!==null}cameraView(){const e=this.through,t=this.cameraViewSource;if(!e||!t)return null;const r=this.renderer.domElement,i=this.captureAspect?{width:this.captureAspect,height:1}:{width:r.clientWidth,height:r.clientHeight},a=this.viewport.camera,c=e.locked?`${a.position.toArray().join(",")}|${a.quaternion.toArray().join(",")}`:"",o=`${e.camera}|${i.width}|${i.height}|${e.zoom}|${e.offset.join(",")}|${c}`;if(this.viewMemo?.key===o)return this.viewMemo.view;const l=t.view(e.camera,i,e.zoom,e.offset),p=l&&e.locked?{...l,position:a.position.toArray(),quaternion:a.quaternion.toArray()}:l;return this.viewMemo={key:o,view:p},queueMicrotask(()=>{this.viewMemo=null}),p}toggleCameraView(){if(this.through)return this.leaveCameraView(!0),!0;const e=this.cameraViewSource,t=e?.camera()??null;if(!e)return!1;if(t===null)return us.warn("camera view: No active camera — the scene has no camera to look through","document"),!1;N(),this.settleFlight("superseded");const r=this.viewport,i=r.orbitControls,a=i.enableDamping;return i.enableDamping=!1,i.update(),i.enableDamping=a,this.through={camera:t,zoom:e.zoom.opening,offset:[0,0],left:{position:r.camera.position.clone(),target:r.orbitControls.target.clone(),up:r.camera.up.clone(),projection:this.state.projection},release:this.captureCameraViewInput(),locked:!1},e.showing?.(t),this.notify(),!0}cameraViewLocked(){return!this.through||!this.cameraViewSource?.setPose?null:this.through.locked}toggleCameraViewLock(){const e=this.through,t=this.cameraViewSource;if(!(!e||!t?.setPose)){if(e.release(),e.locked=!e.locked,!e.locked)e.release=this.captureCameraViewInput();else{const r=this.cameraView(),i=this.viewport.orbitControls,a=this.viewport.camera;if(r){const M=new z(...r.position),C=new Ms(...r.quaternion),D=e.left.position.distanceTo(e.left.target);a.up.set(0,1,0).applyQuaternion(C),a.position.copy(M),a.quaternion.copy(C),i.target.copy(M).addScaledVector(new z(0,0,-1).applyQuaternion(C),D),i.update()}const c=i.enabled;i.enabled=!0;const o=i.enableDamping;i.enableDamping=!1;const l=e.camera,p=M=>({position:a.position.toArray(),quaternion:a.quaternion.toArray(),final:M});let x=!1,v=null,P=!1;const w=M=>{if(x){v={...M,final:M.final||(v?.final??!1)};return}x=!0,v=null,Promise.resolve(t.setPose(l,M.position,M.quaternion,M.final)).catch(()=>{}).finally(()=>{x=!1,v&&w(v)})},L=()=>{P=!0,N(),this.notify(),w(p(!1))},F=()=>{P&&(P=!1,w(p(!0)))};i.addEventListener("change",L),i.addEventListener("end",F),e.release=()=>{F(),i.removeEventListener("change",L),i.removeEventListener("end",F),i.enabled=c,i.enableDamping=o}}this.viewMemo=null,N(),this.notify()}}cameraViewZoom(){return this.through?.zoom??null}setCameraViewZoom(e){const t=this.through,r=this.cameraViewSource;!t||!r||!Number.isFinite(e)||e<=0||(t.zoom=Math.min(r.zoom.max,Math.max(r.zoom.min,e)),N(),this.notify())}zoomCameraView(e){this.through&&this.setCameraViewZoom(this.through.zoom*e)}panCameraView(e,t){const r=this.through,i=this.cameraViewSource;if(!r||!i)return;const[a,c]=i.pan(r.offset,r.zoom,e,t);r.offset=[a,c],N(),this.notify()}leaveCameraView(e){const t=this.through;if(!t)return;const r=this.cameraView();t.release(),this.through=null,this.viewMemo=null,this.cameraViewSource?.showing?.(null),this.viewport.setGizmoCamera(null);const i=this.viewport;if(e)i.camera.position.copy(t.left.position),i.camera.up.copy(t.left.up),i.orbitControls.target.copy(t.left.target),this.state={...this.state,projection:t.left.projection};else if(r){const a=t.left.position.distanceTo(t.left.target),c=new z(...r.position),o=new Ms(...r.quaternion),l=new z(0,0,-1).applyQuaternion(o);i.camera.up.set(0,1,0).applyQuaternion(o),i.camera.position.copy(c),i.orbitControls.target.copy(c).addScaledVector(l,a);const p=Ft(t.left.position.clone().sub(t.left.target),t.left.up)!==null,x=ur().autoPerspective&&p?"perspective":t.left.projection;this.state={...this.state,projection:x}}i.camera.lookAt(i.orbitControls.target),i.orbitControls.update(),N(),this.notify()}throughCamera(e){const{left:t,right:r,top:i,bottom:a}=e.window,c=this.viewport.camera.layers.mask;if(e.projection==="orthographic"){const l=this.throughOrthographic;return Object.assign(l,{left:t,right:r,top:i,bottom:a,near:e.near,far:e.far,zoom:1}),l.position.set(...e.position),l.quaternion.set(...e.quaternion),l.layers.mask=c,l.updateProjectionMatrix(),l.updateMatrixWorld(!0),l}const o=this.throughPerspective;return o.near=e.near,o.far=e.far,o.fov=xr.radToDeg(2*Math.atan((i-a)/2)),o.aspect=(r-t)/(i-a),o.zoom=1,o.position.set(...e.position),o.quaternion.set(...e.quaternion),o.layers.mask=c,o.projectionMatrix.makePerspective(t*e.near,r*e.near,i*e.near,a*e.near,e.near,e.far),o.projectionMatrixInverse.copy(o.projectionMatrix).invert(),o.updateMatrixWorld(!0),o}captureCameraViewInput(){const e=this.viewport.orbitControls,t=this.renderer.domElement,r=t.parentElement??t,i=e.enabled;e.enabled=!1;const a=o=>{o.target!==t||o.deltaY===0||(o.preventDefault(),this.zoomCameraView(o.deltaY<0?1.2:1/1.2))},c=o=>{if(o.target!==t)return;const l=e.mouseButtons;let p=[l.LEFT,l.MIDDLE,l.RIGHT][o.button]??null;const x=o.ctrlKey||o.metaKey||o.shiftKey;if(o.button===1&&(o.ctrlKey||o.metaKey)&&p===me.ROTATE?p=me.DOLLY:x&&p===me.ROTATE?p=me.PAN:x&&p===me.PAN&&(p=me.ROTATE),p===me.ROTATE){this.leaveCameraView(!1);return}if(p!==me.PAN&&p!==me.DOLLY)return;o.preventDefault();const v=t.getBoundingClientRect();let P=o.clientX,w=o.clientY;const L=this.through?.zoom??1,F=Math.max(5+o.clientY-v.top,1),M=D=>{if(p===me.PAN){this.panCameraView((D.clientX-P)/Math.max(v.width,1),(D.clientY-w)/Math.max(v.height,1)),P=D.clientX,w=D.clientY;return}const X=Math.max(.01,2*((5+D.clientY-v.top)/F-1)+1);this.setCameraViewZoom(L/X)},C=()=>{window.removeEventListener("pointermove",M),window.removeEventListener("pointerup",C),window.removeEventListener("pointercancel",C)};window.addEventListener("pointermove",M),window.addEventListener("pointerup",C),window.addEventListener("pointercancel",C)};return r.addEventListener("wheel",a,{capture:!0,passive:!1}),r.addEventListener("pointerdown",c,{capture:!0}),()=>{r.removeEventListener("wheel",a,{capture:!0}),r.removeEventListener("pointerdown",c,{capture:!0}),e.enabled=i}}projection(){return this.state.projection}setProjection(e){N(),this.state.projection!==e&&(this.state={...this.state,projection:e},this.notify())}setMode(e){N(),this.state.mode!==e&&(this.clearDiagnosticPresentation(),this.state={...this.state,mode:e},e==="uv"?this.scene.overrideMaterial=new Yi({vertexShader:"varying vec2 vUv; void main(){ vUv=uv; gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0); }",fragmentShader:"varying vec2 vUv; void main(){ gl_FragColor=vec4(vUv,0.0,1.0); }"}):e==="vertex-colors"?this.scene.overrideMaterial=new Vt({vertexColors:!0}):e==="wireframe"&&this.buildTopologyOverlay(),this.notify())}buildTopologyOverlay(){const e=new Lt,t=[];this.root.updateMatrixWorld(!0),this.root.traverse(r=>{const i=r;if(!i.isMesh||!i.geometry)return;const a=new Ki(new Xi(i.geometry,Wo),new Zi({color:Bs,toneMapped:!1,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1}));a.matrixAutoUpdate=!1,a.matrixWorldAutoUpdate=!1,a.matrixWorld.copy(i.matrixWorld),a.frustumCulled=!1,a.renderOrder=2,e.add(a),t.push({line:a,source:i})}),t.length!==0&&(this.topologyOverlay=e,this.topologyFollowers=t,this.addHelper(e,"topology"))}syncTopologyOverlay(){this.topologyFollowers.some(({source:i})=>i.parent===null)&&(this.clearTopologyOverlay(),this.buildTopologyOverlay()),this.selectionColors??=Ie(this.renderer.domElement);const e=this.selectionColors,t=this.selectedObjects.at(-1)??null,r=(i,a)=>{for(let c=i;c;c=c.parent)if(c===a)return!0;return!1};for(const{line:i,source:a}of this.topologyFollowers){i.matrixWorld.copy(a.matrixWorld),i.visible=a.visible;const c=i.material,o=t!==null&&r(a,t),l=o||this.selectedObjects.some(x=>r(a,x)),p=o?e.active?.visible??e.visible:l?e.visible:null;c.color.setHex(p??Bs)}}clearTopologyOverlay(){for(const{line:r}of this.topologyFollowers.splice(0))r.geometry.dispose(),r.material.dispose();const e=this.topologyOverlay;if(this.topologyOverlay=null,!e)return;e.removeFromParent();const t=this.helpers.indexOf(e);t>=0&&this.helpers.splice(t,1)}setBounds(e){N(),this.state.bounds!==e&&(this.state={...this.state,bounds:e},e?(this.boundsHelper=new ks(this.root,16757844),this.addHelper(this.boundsHelper,"bounds")):this.clearBoundsHelper(),this.notify())}setSkeleton(e){N(),this.state.skeleton!==e&&(this.state={...this.state,skeleton:e},this.refreshSkeletonHelper(),this.notify())}neutralBackgroundTexture(){return this.neutralBackground}setNeutralBackground(e){N();const t=this.scene.background,r=this.neutralBackground,i=t===r||t instanceof pe&&r instanceof pe&&t.equals(r);this.neutralBackground=e,i&&(this.scene.background=e)}setBackground(e){N(),this.state.background!==e&&(this.scene.background=e==="transparent"?null:this.neutralBackground,this.state={...this.state,background:e},this.notify())}resetPresentation(){N(),In(this.documentId),this.clearDiagnosticPresentation(),this.state=Hs,this.refreshSkeletonHelper(),this.clearBoundsHelper(),this.scene.background=this.neutralBackground,this.viewport.camera.up.set(0,1,0),this.frame(),this.notify()}setBeforeRender(e){this.beforeRender=e}presentedFrameWaiters=[];presentsFrames=!1;setPresentsFrames(e){this.presentsFrames=e,e||this.resolvePresentedFrame(null)}requestPresentedFrame(){return this.presentsFrames?new Promise(e=>{let t=!1;const r=i=>{t||(t=!0,e(i))};this.presentedFrameWaiters.push(r),N(),setTimeout(()=>r(null),zo)}):Promise.resolve(null)}needsFrame(){return this.flight!==null||this.presentedFrameWaiters.length>0}servePresentedFrame(){if(this.presentedFrameWaiters.length===0)return;const e=this.renderer.domElement,t=document.createElement("canvas");t.width=Math.max(1,e.width),t.height=Math.max(1,e.height);const r=t.getContext("2d");if(!r){this.resolvePresentedFrame(null);return}r.drawImage(e,0,0),this.resolvePresentedFrame(t)}resolvePresentedFrame(e){const t=this.presentedFrameWaiters;this.presentedFrameWaiters=[];for(const r of t)r(e)}render(e){this.beforeRender?.(),this.boneSelectionHighlight?.update();const t=this.camera(),r=this.state.mode;if(this.boundsHelper?.update(),this.selectionOrigins?.place(),r==="uv"||r==="vertex-colors"){e(t);return}if(r==="wireframe"&&this.topologyOverlay){if(this.syncTopologyOverlay(),this.xray.enabled&&this.xray.alpha<=0){const i=new Set;this.root.traverse(a=>{const c=a;if(c.isMesh)for(const o of Array.isArray(c.material)?c.material:[c.material])o?.visible&&(o.visible=!1,i.add(o))});try{e(t)}finally{for(const a of i)a.visible=!0}return}this.shading.render(this.scene,"clay",()=>e(t),Vs);return}this.shading.render(this.scene,r,()=>e(t),Vs)}renderViewport(e=0){this.advanceLook(e),this.ensureComposer(),this.render(t=>{const r=this.composer;if(!r){this.renderer.render(this.scene,t);return}r.setMainScene(this.scene),r.setMainCamera(t),r.render(e)})}resize(e,t){N(),this.renderWidth=Math.max(1,e),this.renderHeight=Math.max(1,t),this.composer?.setSize(this.renderWidth,this.renderHeight)}renderCapture(e,t){this.render(r=>{if(!t){e(r);return}const i=this.scene.background,a=this.renderer.getClearColor(new pe),c=this.renderer.getClearAlpha();try{this.scene.background=null,this.renderer.setClearColor(0,0),e(r)}finally{this.scene.background=i,this.renderer.setClearColor(a,c)}})}captureImage(e=512){const t=typeof e=="number"?e:e.width,r=typeof e=="number"?e:e.height;if(!Number.isFinite(t)||t<1||!Number.isFinite(r)||r<1)return null;const i=Math.min(2048,Math.round(t)),a=Math.min(2048,Math.round(r)),c=i*2,o=a*2,l=new Es(c,o,{type:Ji}),p=new Es(c,o),x=this.renderer.getRenderTarget(),v=this.renderer.getPixelRatio(),P=this.viewport.camera,w=P.aspect;try{this.captureAspect=i/a;const L=typeof e=="number"?void 0:e.camera;L?this.cameraOverride=L:(P.aspect=i/a,P.updateProjectionMatrix()),this.renderer.setPixelRatio(1),this.renderer.setRenderTarget(l),this.renderCapture(_=>this.renderSolidForCapture(_,l,c,o),typeof e!="number"&&e.transparent===!0),no(typeof e!="number"&&e.transparent===!0).render(this.renderer,p,l,0,!1);const F=c*4,M=new Uint8Array(F*o);this.renderer.readRenderTargetPixels(p,0,0,c,o,M);const C=document.createElement("canvas");C.width=c,C.height=o;const D=C.getContext("2d");if(!D)return null;const X=D.createImageData(c,o);for(let _=0;_<o;_++){const G=(o-1-_)*F,j=_*F;X.data.set(M.subarray(G,G+F),j)}D.putImageData(X,0,0);const b=document.createElement("canvas");b.width=i,b.height=a;const I=b.getContext("2d");return I?(I.drawImage(C,0,0,i,a),b.toDataURL("image/png")):null}finally{this.captureAspect=null,this.cameraOverride=null,P.aspect=w,P.updateProjectionMatrix(),this.renderer.setRenderTarget(x),this.renderer.setPixelRatio(v),this.composer?.setSize(this.renderWidth,this.renderHeight,!1),p.dispose(),l.dispose()}}dispose(){this.disposed=!0,this.leaveCameraView(!1),this.selectionOrigins?.dispose(),this.selectionOrigins=null,this.settleFlight("closed"),this.viewport.orbitControls.removeEventListener("start",this.cancelLookForHuman),this.unsubscribeRotateStart(),this.unsubscribeAxisView(),this.unsubscribeSelectionTheme(),this.clearDiagnosticPresentation(),this.clearBoneSelectionHighlight(),this.clearBoundsHelper(),this.clearSkeletonHelper(),this.selectionOutline&&ao(this.renderer,this.selectionOutline,this.selectionOutlinePass),this.composer?.dispose(),this.sceneRenderPass=null,this.selectionOutline=null,this.selectionOutlinePass=null,this.composer=null,this.shading.dispose(),this.listeners.clear()}addHelper(e,t){e.name=`__object3d_document_${t}`,Js(e,"editorHelper",!0),this.scene.add(e),this.helpers.push(e)}get selectionOutlineEnabled(){return this.selectionOutlineWanted}set selectionOutlineEnabled(e){e!==this.selectionOutlineWanted&&(this.selectionOutlineWanted=e,e?this.syncSelectionPresentation():(this.selectionOutline?.selection.clear(),this.syncComposerOutput()))}selectionOutlineWanted=!0;xray={enabled:!1,alpha:1};setXray(e){this.xray.enabled===e.enabled&&this.xray.alpha===e.alpha||(this.xray=e,N())}set selectionOriginsEnabled(e){e!==(this.selectionOrigins!==null)&&(e?(this.selectionOrigins=new Ko,this.scene.add(this.selectionOrigins),this.syncSelectionPresentation()):(this.selectionOrigins?.dispose(),this.selectionOrigins=null,N()))}ensureComposer(){this.selectionOutlineWanted&&(this.composer||this.composerLoading||this.disposed||(this.composerLoading=!0,Ye(()=>import("./index-DHhMOs_s.js"),__vite__mapDeps([0,1,2])).then(e=>{if(this.composerLoading=!1,this.disposed||this.composer)return;const t=this.camera(),r=new e.EffectComposer(this.renderer);this.sceneRenderPass=new e.RenderPass(this.scene,t),r.addPass(this.sceneRenderPass),this.selectionOutline=co(e,this.renderer,this.scene,t,Ie(this.renderer.domElement)),this.syncSelectionTheme(),Ts(this.selectionOutline,this.selectedObjects),this.selectionOutlinePass=new e.EffectPass(t,this.selectionOutline),r.addPass(this.selectionOutlinePass),this.composer=r,this.syncComposerOutput(),r.setSize(this.renderWidth,this.renderHeight),N()}).catch(()=>{this.composerLoading=!1})))}renderSolidForCapture(e,t,r,i){const a=this.composer,c=(this.selectionOutline?.selection.size??0)>0;if(!a||!c||!this.sceneRenderPass||!this.selectionOutlinePass){this.renderer.render(this.scene,e);return}const o=this.renderWidth,l=this.renderHeight;try{this.sceneRenderPass.renderToScreen=!1,this.selectionOutlinePass.renderToScreen=!1,a.setSize(r,i,!1),this.sceneRenderPass.render(this.renderer,a.inputBuffer,a.outputBuffer,0),this.selectionOutlinePass.render(this.renderer,a.inputBuffer,t,0)}finally{a.setSize(o,l,!1),this.syncComposerOutput(),this.renderer.setRenderTarget(t)}}syncComposerOutput(){const e=(this.selectionOutline?.selection.size??0)>0;this.sceneRenderPass&&(this.sceneRenderPass.renderToScreen=!e),this.selectionOutlinePass&&(this.selectionOutlinePass.enabled=e,this.selectionOutlinePass.renderToScreen=e)}refreshSkeletonHelper(){const e=this.state.skeleton||this.boneSelectionHighlight!==null;e&&!this.skeletonHelper?(this.skeletonHelper=new Qi(this.root),Bo(this.skeletonHelper),this.scene.add(this.skeletonHelper)):e||this.clearSkeletonHelper()}clearSkeletonHelper(){this.skeletonHelper&&(this.skeletonHelper.removeFromParent(),this.skeletonHelper.dispose(),this.skeletonHelper=null)}clearBoneSelectionHighlight(){this.boneSelectionHighlight&&(this.boneSelectionHighlight.removeFromParent(),this.boneSelectionHighlight.dispose(),this.boneSelectionHighlight=null)}clearBoundsHelper(){if(!this.boundsHelper)return;const e=this.boundsHelper;this.boundsHelper=null;const t=this.helpers.indexOf(e);t>=0&&this.helpers.splice(t,1),e.removeFromParent(),e.geometry.dispose(),Array.isArray(e.material)?e.material.forEach(r=>{r.dispose()}):e.material.dispose()}frameBones(e){const t=new Sr,r=new z;for(const l of e){t.expandByPoint(l.getWorldPosition(r)),l.parent?.isBone&&t.expandByPoint(l.parent.getWorldPosition(r));for(const p of l.children)p.isBone&&t.expandByPoint(p.getWorldPosition(r))}const i=t.getCenter(new z),a=Math.max(t.getSize(new z).length(),.2);t.expandByScalar(a*.35);const c=this.viewport.camera.position.clone().sub(this.viewport.orbitControls.target).normalize(),o=At(t,this.viewport.camera,c);this.viewport.setPose(i.clone().addScaledVector(c,o),i)}syncOrthographicCamera(){const e=this.viewport.camera,t=this.viewport.orbitControls.target,r=Math.max(e.position.distanceTo(t),.001),i=Math.max(r*Math.tan(xr.degToRad(e.fov)/2),.001),a=Math.max(this.renderer.domElement.clientWidth,1),c=Math.max(this.renderer.domElement.clientHeight,1),o=this.captureAspect??a/c;this.orthographicCamera.left=-i*o,this.orthographicCamera.right=i*o,this.orthographicCamera.top=i,this.orthographicCamera.bottom=-i,this.orthographicCamera.near=e.near,this.orthographicCamera.far=e.far,this.orthographicCamera.position.copy(e.position),this.orthographicCamera.quaternion.copy(e.quaternion),this.orthographicCamera.up.copy(e.up),this.orthographicCamera.layers.mask=e.layers.mask,this.orthographicCamera.updateProjectionMatrix(),this.orthographicCamera.updateMatrixWorld(!0)}clearDiagnosticPresentation(){this.clearTopologyOverlay(),this.scene.overrideMaterial?.dispose(),this.scene.overrideMaterial=null;for(const e of this.helpers.splice(0)){e.removeFromParent();const t=e;t.geometry?.dispose();const r=t.material;Array.isArray(r)?r.forEach(i=>{i.dispose()}):r?.dispose()}}notify(){this.version++;for(const e of this.listeners)e()}}const qo=7;let at=null;function Yo(){if(at)return at;const n=64,e=document.createElement("canvas");e.width=n,e.height=n;const t=e.getContext("2d");return t.beginPath(),t.arc(n/2,n/2,n/2-1,0,Math.PI*2),t.fillStyle="rgba(0, 0, 0, 0.75)",t.fill(),t.beginPath(),t.arc(n/2,n/2,n/2-8,0,Math.PI*2),t.fillStyle="#ffffff",t.fill(),at=new Qs(e),at.colorSpace=kr,at}class Ko extends sn{objects=[];origin=new z;constructor(){super(new en,new rn({map:Yo(),size:qo,sizeAttenuation:!1,transparent:!0,alphaTest:.05,depthTest:!1,depthWrite:!1,toneMapped:!1})),this.name="volter:selection-origins",this.userData.editorHelper=!0,this.renderOrder=1e3,this.frustumCulled=!1,this.raycast=()=>{}}update(e,t){this.objects=e,this.material.color.setHex(e.length===1&&t.active!==void 0?t.active:t.visible),this.visible=e.length>0}place(){const e=this.objects.length;let t=this.geometry.getAttribute("position");(t===void 0||t.count<e)&&(this.geometry.dispose(),t=new tn(new Float32Array(Math.max(e,8)*3),3),this.geometry.setAttribute("position",t)),this.geometry.setDrawRange(0,e),this.objects.forEach((r,i)=>{r.getWorldPosition(this.origin),t.setXYZ(i,this.origin.x,this.origin.y,this.origin.z)}),t.needsUpdate=!0}dispose(){this.removeFromParent(),this.geometry.dispose(),this.material.dispose()}}class Xo{constructor(e){this.options=e}active=null;settling=!1;idleWaiters=new Set;begin(e){if(this.active||this.settling)return!1;try{const t=this.options.begin(e);return t?(this.active={pointerId:e.pointerId,gesture:t},!0):!1}catch(t){return this.options.reportError(t),!1}}update(e){if(!(!this.active||this.active.pointerId!==e.pointerId))try{this.active.gesture.update(e)}catch(t){this.cancelWithError(t)}}async commit(e){const t=this.take(e.pointerId);if(!t)return!1;this.settling=!0;try{return await t.commit(e),await this.options.persist(t.label),!0}catch(r){try{await t.cancel()}catch(i){return this.options.reportError({operationError:r,rollbackError:i}),!1}return this.options.reportError(r),!1}finally{this.settling=!1;for(const r of this.idleWaiters)r();this.idleWaiters.clear()}}async cancel(e){const t=this.take(e);if(!t)return!1;this.settling=!0;try{return await t.cancel(),!0}catch(r){return this.options.reportError(r),!1}finally{this.settling=!1;for(const r of this.idleWaiters)r();this.idleWaiters.clear()}}async settle(){this.active&&await this.cancel(),this.settling&&await new Promise(e=>this.idleWaiters.add(e))}hasActiveGesture(){return this.active!==null}take(e){if(!this.active||e!==void 0&&this.active.pointerId!==e)return null;const t=this.active.gesture;return this.active=null,t}async cancelWithError(e){const t=this.take();if(t){this.settling=!0;try{await t.cancel(),this.options.reportError(e)}catch(r){this.options.reportError({operationError:e,rollbackError:r})}finally{this.settling=!1;for(const r of this.idleWaiters)r();this.idleWaiters.clear()}}}}class Zo{constructor(e,t){this.frame=e,this.releaseRenderer=t,this.unsubscribeActivity=Po(()=>this.syncActivity())}rafId=0;running=!1;disposed=!1;active=!1;unsubscribeActivity;get isDisposed(){return this.disposed}get isRunning(){return this.running}setActive(e){this.disposed||(this.active=e,this.syncActivity())}syncActivity(){this.active&&hr()?this.start():this.stop()}redraw(){this.running&&!this.disposed&&hr()&&this.guardedFrame(performance.now())}dispose(){this.stop(),!this.disposed&&(this.disposed=!0,this.unsubscribeActivity(),this.releaseRenderer())}start(){this.disposed||this.running||(this.running=!0,this.guardedFrame(performance.now(),!0),!(!this.running||this.disposed)&&(this.rafId=requestAnimationFrame(this.tick)))}lastFrameFailure=null;guardedFrame(e,t=!1){try{this.frame(e,t),this.lastFrameFailure=null}catch(r){const i=r instanceof Error?r.message:String(r);i!==this.lastFrameFailure&&(this.lastFrameFailure=i,console.error("[document renderer] a frame threw; the loop continues:",r))}}stop(){this.running=!1,this.rafId!==0&&(cancelAnimationFrame(this.rafId),this.rafId=0)}tick=e=>{if(!(!this.running||this.disposed)){if(!hr()){this.stop();return}this.guardedFrame(e),!(!this.running||this.disposed)&&(this.rafId=requestAnimationFrame(this.tick))}}}const Jo=new Set(["solid","clay","unlit","wireframe","normals","overdraw"]);function Qo(n,e){return{read:()=>{const t=n.cameraPose;if(!t)return null;const{position:r,target:i}=t;return{camera:{position:{x:r.x,y:r.y,z:r.z},target:{x:i.x,y:i.y,z:i.z},...t.fov?{fov:t.fov}:{}},diagnostic:n.shadingMode,grid:Nn(e)}},setDiagnostic:t=>Jo.has(t)?(n.setShadingMode(t),!0):!1,setCamera:t=>typeof t!="string"?(n.shell.setCameraPose(t.position,t.target,t.fov),!0):t==="isometric"?!1:(n.shell.setViewPreset(t),!0),frame:t=>t==="document"?!1:(n.shell.focusOnSelection(),!0)}}function ea(n){const e=wr();return e?$n(Ys(e.shell,n)):"none"}const ta=f.lazy(()=>Ye(()=>import("./stage-transform-tools-BHcz53td.js"),__vite__mapDeps([3,4,5,6,7,8,9,10,11,12,13,14,15,1,2,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63])).then(n=>({default:n.ThreeStageTransformTools}))),ra=f.lazy(()=>Ye(()=>import("./stage-transform-tools-BHcz53td.js"),__vite__mapDeps([3,4,5,6,7,8,9,10,11,12,13,14,15,1,2,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63])).then(n=>({default:n.ThreeStageTransformControls})));function Ws(n){return{transformTools:()=>ea(n),TransformTools:ta,TransformControls:ra}}class sa{constructor(e,t,r){this.create=e,this.isOpen=t,this.subscribe=r}states=new Map;generations=new WeakMap;unsubscribe=null;claim(e){const t=this.states.get(e)??[];let r=t.find(i=>!i.inUse);return r||(r=this.create(e),t.push(r),this.states.set(e,t)),r.inUse=!0,this.generations.set(r,this.generation(r)+1),this.unsubscribe??=this.subscribe(()=>this.discardClosed()),r}generation(e){return this.generations.get(e)??0}release(e,t=this.generation(e)){this.generation(e)===t&&(e.inUse=!1,queueMicrotask(()=>this.discardClosed()))}retain(e,t,r){if(!this.isOpen(e.documentId)||!this.states.get(e.documentId)?.includes(e)||this.generation(e)!==r){t.dispose();return}const i=e.source;e.source=t,i!==t&&i?.dispose()}discardClosed(){const e=[];for(const[r,i]of this.states){if(this.isOpen(r))continue;const a=i.filter(c=>c.inUse);e.push(...i.filter(c=>!c.inUse)),a.length?this.states.set(r,a):this.states.delete(r)}this.states.size===0&&(this.unsubscribe?.(),this.unsubscribe=null);const t=[];for(const r of e){const i=r.source;r.source=null;try{i?.dispose()}catch(a){t.push(a)}}if(t.length)throw new AggregateError(t,"Retained document cleanup failed")}}const na=f.lazy(async()=>({default:(await Ye(()=>import("./stage-overlay-set-Cqtz3s06.js"),__vite__mapDeps([64,4,5,7,8,6,9,10,11,12,13,54,65,66,24,14,15,1,2,16,17,18,19,20,21,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,55,56,57,58,59,60,61,62,63]))).StageOverlaySet}));function ia(n){return d.jsx(f.Suspense,{fallback:null,children:d.jsx(na,{...n})})}function zs(n,e,t){if(e==="orthographic"){const r=Ft(n.camera.position.clone().sub(n.orbitControls.target),new z(0,1,0).applyQuaternion(n.camera.quaternion));return r!==null?r:t==="short"?"Iso":"Orthographic"}return t==="short"?"Persp":"Perspective"}const oa=()=>()=>{},Is=()=>0;function aa({shell:n,documentId:e,label:t,kebab:r=!1}){const i=f.useSyncExternalStore(lo,As,As);f.useSyncExternalStore(wo,bo);const a=e?yo(e):null;f.useSyncExternalStore(a?.subscribe??oa,a?.getSnapshot??Is,a?.getSnapshot??Is);const c=a?a.projection():i.projection,o=P=>{a?a.setProjection(P):Ls(P)},[l,p]=f.useState(!1),x=f.useRef(null);f.useEffect(()=>{if(!l)return;const P=w=>{x.current?.contains(w.target)||p(!1)};return document.addEventListener("mousedown",P),()=>document.removeEventListener("mousedown",P)},[l]);const v=P=>{if(a){a.setViewPreset(P,"view");return}Ls("orthographic"),n.setViewPreset(P)};return d.jsxs("div",{ref:x,className:"volter-viewport-popover-anchor",children:[t===void 0?d.jsx(Ge,{text:c==="perspective"?"Perspective":"Orthographic",children:d.jsx(Te,{"aria-label":"Viewport views","aria-expanded":l,size:"comfortable",onClick:()=>p(P=>!P),children:d.jsx(we,{icon:l?Un:Gn,size:"md"})})}):d.jsxs(Ne,{size:"comfortable",variant:"ghost","aria-label":"Viewport views","aria-expanded":l,"data-testid":"viewport-view-name",onClick:()=>p(P=>!P),children:[r?d.jsx(we,{icon:qn,size:"sm"}):null,t]}),l?d.jsx(Yn,{style:{minWidth:230},children:d.jsxs(Kn,{gap:3,children:[d.jsx(hs,{variant:"caption",tone:"muted",children:"Projection"}),d.jsxs(ds,{gap:1,children:[d.jsx(Ne,{size:"compact",variant:c==="perspective"?"primary":"ghost",onClick:()=>o("perspective"),children:"Perspective"}),d.jsx(Ne,{size:"compact",variant:c==="orthographic"?"primary":"ghost",onClick:()=>o("orthographic"),children:"Orthographic"})]}),d.jsx(hs,{variant:"caption",tone:"muted",children:"Axis View"}),d.jsxs(ds,{gap:1,children:[d.jsx(Ne,{size:"compact",variant:"ghost",onClick:()=>v("top"),children:"Top"}),d.jsx(Ne,{size:"compact",variant:"ghost",onClick:()=>v("front"),children:"Front"}),d.jsx(Ne,{size:"compact",variant:"ghost",onClick:()=>v("right"),children:"Right"})]})]})}):null]})}const ca=po;function Ns(n){return Cr(null,n)}const la=()=>()=>{},$s=()=>0,ua=5,ha=58;function da(n,e){const t=e?.camera()??n.renderCamera,r=n.camera.position,i=n.orbitControls.target,a=t.isOrthographicCamera?un(t,n,e):0;return[r.x,r.y,r.z,i.x,i.y,i.z,a].map(c=>c.toPrecision(6)).join(",")}function un(n,e,t){const r=e.orbitControls.domElement,i=Math.max(1,t?.renderer.domElement.height??(r?.clientHeight??1)*(r?.ownerDocument.defaultView?.devicePixelRatio??1));return(n.top-n.bottom)/n.zoom/i}function pa({viewport:n,documentId:e,session:t,store:r,projection:i,displayName:a,objectName:c,statistics:o,subject:l,gridScale:p}){f.useSyncExternalStore(r.subscribe,r.getShellSnapshot??r.getSnapshot),f.useSyncExternalStore(f.useCallback(T=>{const W=n?.orbitControls;return W?.addEventListener("change",T),()=>W?.removeEventListener("change",T)},[n]),()=>n?da(n,t):""),f.useSyncExternalStore(t?.subscribe??la,t?.getSnapshot??$s,t?.getSnapshot??$s);const x=f.useSyncExternalStore(Ns,Ks),v=f.useSyncExternalStore(Ns,Xn),P=x&&!v?qe.content.onAccent:qe.content.primary,w=Zn();f.useSyncExternalStore(vr,ps,ps);const L=ct(e).overlays.navigationControls;if(!n)return null;const F=Ft(n.camera.position.clone().sub(n.orbitControls.target),new z(0,1,0).applyQuaternion(n.camera.quaternion))??"User",M=t?.projection()??i,C=t?.cameraView()??null,D=C?`Camera ${C.projection==="perspective"?"Perspective":"Orthographic"}`:`${F} ${M==="perspective"?"Perspective":"Orthographic"}`,X=r.selectedEntityId,b=(X===null?null:c(X))||null,I=l??(b===null||b===a?a:`${a} | ${b}`),_=t?.camera()??n.renderCamera,G=p&&!C&&F!=="User"&&_.isOrthographicCamera?p(un(_,n,t)):null,j=T=>{T.preventDefault();const W=T.currentTarget;W.setPointerCapture(T.pointerId);const be=n.orbitControls.domElement?.getBoundingClientRect().top??0,Me=Math.max(5+T.clientY-be,1),oe=n.camera,le=n.orbitControls.target,ae=oe.position.clone().sub(le),te=!t&&n.renderCamera instanceof yr?n.renderCamera:null,se=te?.zoom??1,Ee=t?.cameraViewZoom()??null,ue=he=>{const Ae=5+he.clientY-be,ye=Math.max(.01,2*(Ae/Me-1)+1);Ee!==null&&t?.cameraView()?t.setCameraViewZoom(Ee/ye):te?(te.zoom=se/ye,te.updateProjectionMatrix()):oe.position.copy(le).addScaledVector(ae,ye),n.orbitControls.update()},Q=()=>{W.removeEventListener("pointermove",ue),W.removeEventListener("pointerup",Q),W.removeEventListener("pointercancel",Q),W.removeEventListener("lostpointercapture",Q)};W.addEventListener("pointermove",ue),W.addEventListener("pointerup",Q),W.addEventListener("pointercancel",Q),W.addEventListener("lostpointercapture",Q)},H=T=>{T.preventDefault();const W=T.currentTarget;W.setPointerCapture(T.pointerId);let be=T.clientX,Me=T.clientY;const oe=new z,le=new z,ae=se=>{const Ee=se.clientX-be,ue=se.clientY-Me;if(be=se.clientX,Me=se.clientY,t?.cameraView()){const Xe=t.renderer.domElement;t.panCameraView(Ee/Math.max(Xe.clientWidth,1),ue/Math.max(Xe.clientHeight,1));return}const Q=n.camera,he=n.orbitControls.target,Ae=Q.position.distanceTo(he),ye=Math.max(1,W.ownerDocument.defaultView?.innerHeight??1),Ke=2*Ae*Math.tan(xr.degToRad(Q.fov/2))/ye;oe.setFromMatrixColumn(Q.matrixWorld,0).multiplyScalar(-Ee*Ke),le.setFromMatrixColumn(Q.matrixWorld,1).multiplyScalar(ue*Ke),Q.position.add(oe).add(le),he.add(oe).add(le),n.orbitControls.update()},te=()=>{W.removeEventListener("pointermove",ae),W.removeEventListener("pointerup",te),W.removeEventListener("pointercancel",te),W.removeEventListener("lostpointercapture",te)};W.addEventListener("pointermove",ae),W.addEventListener("pointerup",te),W.addEventListener("pointercancel",te),W.addEventListener("lostpointercapture",te)};return d.jsxs(d.Fragment,{children:[w.viewName==="text"?d.jsxs("div",{"data-testid":"viewport-view-text","aria-hidden":"true",style:{position:"absolute",top:"var(--volter-space-3)",left:"calc(var(--volter-space-4) + var(--volter-control-comfortable-height) * 2 + var(--volter-space-4))",display:"flex",flexDirection:"column",gap:"var(--volter-space-1)",fontSize:"var(--volter-font-sm)",color:P,textShadow:"var(--volter-content-text-shadow, none)",pointerEvents:"none",userSelect:"none"},children:[d.jsx("span",{children:D}),d.jsx("span",{children:I}),G?d.jsx("span",{"data-testid":"viewport-grid-scale",children:G}):null,o&&o.length>0?d.jsx("div",{"data-testid":"viewport-statistics",style:{display:"grid",gridTemplateColumns:`${ha}px auto`,rowGap:"var(--volter-space-1)",marginTop:Jn[ua]},children:o.map(T=>d.jsxs(f.Fragment,{children:[d.jsx("span",{children:T.label}),d.jsx("span",{children:T.value})]},T.id))}):null]}):null,w.viewName==="menu"?d.jsx("div",{className:"volter-viewport-view-pill",style:{position:"absolute",top:"var(--volter-viewport-overlay-top, var(--volter-space-4))",left:"var(--volter-stage-name-left, calc(var(--volter-space-4) + var(--volter-control-comfortable-height) * 2 + var(--volter-space-4)))",zIndex:"calc(var(--volter-z-dropdown, 1000) - 1)",pointerEvents:"auto"},children:d.jsx(aa,{shell:r,documentId:e,label:zs(n,M,"long"),kebab:!0})}):null,w.viewName==="gizmo"?d.jsxs("button",{type:"button","data-testid":"viewport-view-name",className:"volter-viewport-gizmo-label","aria-label":M==="perspective"?"Switch to orthographic":"Switch to perspective",onClick:()=>{const T=M==="perspective"?"orthographic":"perspective";t?t.setProjection(T):n.setProjection(T)},style:{position:"absolute",top:ho+4,right:uo,transform:"translateX(50%)",display:"inline-flex",alignItems:"center",gap:"var(--volter-space-1)",padding:0,border:0,background:"none",fontSize:"var(--volter-font-sm)",color:P,textShadow:"var(--volter-content-text-shadow, none)",cursor:"pointer",pointerEvents:"auto"},children:[d.jsx(we,{size:"xs",icon:M==="perspective"?Qn:ei}),zs(n,M,"short")]}):null,L?d.jsxs("div",{"data-testid":"viewport-navigation",role:"toolbar","aria-label":"Navigation","aria-orientation":"vertical",className:"volter-chrome-island volter-viewport-navigation",style:{position:"absolute",top:ca,right:"var(--volter-space-6)",display:"flex",flexDirection:"column",gap:"var(--volter-space-1)",padding:"var(--volter-space-1) 0",borderRadius:"var(--volter-radius-full)",background:"var(--volter-island-surface, var(--volter-surface-overlay))",pointerEvents:"auto"},children:[d.jsx(Ge,{text:"Zoom (drag)",children:d.jsx(Te,{size:"comfortable","aria-label":"Zoom the view",onPointerDown:j,children:d.jsx(we,{size:"2xl",icon:ve.viewport.zoomIn})})}),d.jsx(Ge,{text:"Pan (drag)",children:d.jsx(Te,{size:"comfortable","aria-label":"Pan the view",onPointerDown:H,children:d.jsx(we,{size:"2xl",icon:ve.viewport.pan})})}),t?.hasCameraView()?d.jsx(Ge,{text:C?"Leave the camera view":"Look through the camera",children:d.jsx(Te,{size:"comfortable","aria-label":"Toggle the camera view",onClick:()=>t.toggleCameraView(),children:d.jsx(we,{size:"2xl",icon:C?ve.viewport.cameraView:ve.viewport.camera})})}):null,C&&t?.cameraViewLocked()!==null?d.jsx(Ge,{text:t?.cameraViewLocked()?"Unlock the camera from the view":"Lock the camera to the view",children:d.jsx(Te,{size:"comfortable","aria-label":"Lock the camera to the view",onClick:()=>t?.toggleCameraViewLock(),children:d.jsx(we,{size:"2xl",icon:t?.cameraViewLocked()?ve.viewport.cameraLocked:ve.viewport.cameraUnlocked})})}):null,C||w.viewName==="gizmo"?null:d.jsx(Ge,{text:M==="perspective"?"Orthographic":"Perspective",children:d.jsx(Te,{size:"comfortable","aria-label":"Toggle perspective and orthographic",onClick:()=>{const T=M==="perspective"?"orthographic":"perspective";t?t.setProjection(T):n.setProjection(T)},children:d.jsx(we,{size:"2xl",icon:M==="orthographic"?ve.viewport.projectionOrthographic:ve.viewport.projection})})})]}):null,C&&t?d.jsx(fa,{view:C,canvas:t.renderer.domElement,locked:t.cameraViewLocked()===!0}):null]})}function fa({view:n,canvas:e,locked:t}){const[r,i]=f.useState(null),[,a]=f.useState(0);f.useEffect(()=>{const M=new ResizeObserver(()=>a(C=>C+1));return M.observe(e),()=>M.disconnect()},[e]);const c=e.clientWidth,o=e.clientHeight,l=e.ownerDocument.defaultView?.devicePixelRatio??1,p=e.getBoundingClientRect(),x=r?.getBoundingClientRect(),v=1/l,P=n.frame.left*c-v,w=n.frame.top*o-v,L=n.frame.width*c+2*v,F=n.frame.height*o+2*v;return d.jsx("div",{ref:i,"aria-hidden":"true",style:{position:"absolute",inset:0,pointerEvents:"none"},children:x?d.jsxs("svg",{"data-testid":"viewport-camera-frame",width:c,height:o,style:{position:"absolute",left:p.left-x.left,top:p.top-x.top},children:[n.passepartout.opacity>0?d.jsx("path",{d:`M0 0H${c}V${o}H0Z M${P} ${w}V${w+F}H${P+L}V${w}Z`,fill:n.passepartout.color,fillOpacity:n.passepartout.opacity,fillRule:"evenodd"}):null,n.passepartout.opacity>0?d.jsx("rect",{x:P,y:w,width:L,height:F,fill:"none",stroke:n.border.solid,strokeWidth:v,shapeRendering:"crispEdges"}):null,d.jsx("rect",{x:P,y:w,width:L,height:F,fill:"none",stroke:n.border.dashed,strokeWidth:v,strokeDasharray:`${3*v} ${3*v}`,shapeRendering:"crispEdges"}),t?d.jsx("rect",{x:P-v,y:w-v,width:L+2*v,height:F+2*v,fill:"none",stroke:n.border.locked,strokeWidth:v,strokeDasharray:`${3*v} ${3*v}`,shapeRendering:"crispEdges"}):null]}):null})}const ma=f.lazy(async()=>({default:(await Ye(()=>import("./stage-keyboard-B2yrk2zu.js"),__vite__mapDeps([67,7,5,8,68,6,4,9,10,11,12,13,54,23]))).StageKeyboardBinding})),ga=n=>{const e=n.split(":");return(e[0]==="document"?e[1]:e[0])??n},Us=()=>Ri(),gr=12;function Gs(n){if(!n)return null;const e=new Sr(new z(n.min[0],n.min[1],n.min[2]),new z(n.max[0],n.max[1],n.max[2]));return e.isEmpty()?null:e}const va=500;function wa(n){return Cr(null,n)}const ba=["solid","preview","rendered","clay","unlit","wireframe","matcap","normals","overdraw"];let ya=0;const Ue=new sa(n=>({documentId:n,store:on(new Xs),inUse:!1,source:null,camera:null,presentation:null,transport:null,contentSeconds:0,transportAdvances:0}),n=>ui().some(e=>e.descriptor.id===n),hi);function Sa({canvasHostRef:n}){return d.jsx("div",{ref:n,style:{position:"absolute",inset:0}})}function xa(n,e,t,r,i){if(e==="inspector-preview"){const l=_i();return l.canvas.setAttribute("aria-label",`${t} authoring viewport`),n.appendChild(l.canvas),{canvas:l.canvas,renderer:l.renderer,lease:l}}const a=Co(r.width,r.height,i),{canvas:c,renderer:o}=a;return c.setAttribute("aria-label",`${t} authoring viewport`),n.appendChild(c),{canvas:c,renderer:o,lease:a}}class qs{constructor(e,t,r){this.lane=e,this.surface=t,this.store=r??on(new Xs),this.transport=new Oi(this.store.shell)}scene=new nn;store;cleanups=[];rendererSession=new Zo((e,t)=>this.frame?.(e,t),()=>{});viewport=null;session=null;dressing=null;presentationRig=null;applyPresentation=null;backdropOverridden=!1;documentStudio=null;contentLights=[];contentHas={light:!1,"directional-light":!1};darkened=[];darkenContentLights(){for(const t of this.contentLights)t.visible&&(t.visible=!1,this.darkened.push(t));if(this.darkened.length===0)return 0;const e=this.darkened.length;return this.scene.onAfterRender=()=>{for(const t of this.darkened)t.visible=!0;this.darkened=[],this.scene.onAfterRender=()=>{}},e}defaultEnvironment=null;defaultBackground=null;adapter=null;presentationAdapter=null;content=null;frame=null;syncHostScene=null;presence=null;initialized=!1;contentSeconds=0;transportAdvances=0;users=0;closed=!1;released=!1;get isClosed(){return this.closed}transport;borrow(){this.users++;let e=!1;return()=>{e||(e=!0,this.users--,this.releaseIfClosed())}}close(){this.closed=!0,this.frame=null,this.syncHostScene=null,this.session?.setBeforeRender(null),this.session?.setPresentsFrames(!1),this.rendererSession.setActive(!1),this.content?.dispose(),this.transport.dispose(),this.releaseIfClosed()}releaseIfClosed(){if(!this.closed||this.users!==0||this.released)return;this.released=!0;const{lease:e,renderer:t,canvas:r}=this.surface;for(const i of[...this.cleanups.splice(0),()=>this.session?.dispose(),()=>this.viewport?.dispose(),()=>this.rendererSession.dispose(),()=>this.dressing?.dispose(),...e?[()=>e.release()]:[()=>t.dispose(),()=>t.forceContextLoss(),()=>r.remove()]])try{i()}catch(a){console.error("Object3D document cleanup failed.",a)}}}function hn({documentId:n,sourcePath:e,build:t,displayName:r="Source Object3D",background:i,cameraDirection:a,persistence:c,documentSource:o,authoring:l,interaction:p,selectionOutline:x=!0,active:v=!0,audit:P=!0,chromeless:w=!1,modelSource:L,assetType:F,sourceAuthoring:M,dressing:C,rendererLane:D="own",onOpenNode:X,frameBounds:b,openingFrameBounds:I,openingFit:_,openingView:G,presentation:j,cameraView:H,stageKind:T,statistics:W,subject:be,gridScale:Me,content:oe}){const le=T??ga(n);f.useEffect(()=>{if(!w)return ti(n)},[n,w]);const ae=ji(ri()),te=ae??wr(),se=te?Ys(te.shell,n,w?"embedded":"document"):null,Ee=f.useSyncExternalStore(wa,Ks),ue=se!==null&&si(se,Ee),Q=f.useRef(ue);Q.current=ue;const he=se!==null&&ni(se),Ae=f.useRef(he);Ae.current=he;const ye=se!==null&&ii(se),Ke=f.useRef(ye);Ke.current=ye;const Xe=oi(),Dt=f.useRef(Xe);Dt.current=Xe;const _t=f.useRef(null),Ht=f.useRef(null),q=f.useRef(null),Oe=f.useRef(null);(!Oe.current||Oe.current.documentId!==n)&&(Oe.current&&Ue.release(Oe.current),Oe.current=Ue.claim(n)),f.useEffect(()=>{const O=Oe.current,de=Ue.generation(O);return()=>Ue.release(O,de)},[n]);const $=Oe.current,Le=oe?.kind==="world-root",Bt=v||Le,Mr=f.useRef(oe?.kind==="world-root"?oe.load:null);Mr.current=oe?.kind==="world-root"?oe.load:null;const[Fe,Wt]=f.useState(Bt);f.useEffect(()=>Wt(Bt),[Bt]);const zt=f.useRef(x);f.useEffect(()=>{zt.current=x;const O=q.current?.session;O&&(O.selectionOutlineEnabled=D!=="inspector-preview"&&x),q.current?.applyPresentation?.()},[x,D]);const Er=f.useRef(Promise.resolve()),It=f.useRef(!1);f.useEffect(()=>{if(Fe)return Ze.current=!1,Gt("building"),()=>{const O=q.current;if(O&&!Le){It.current=!lt.current;const de=O.store.cameraPose;$.camera=de&&O.viewport?{...de,up:O.viewport.camera.up.clone()}:null,$.presentation=O.session?.presentation()??null,$.transport=O.transport.snapshot(),$.contentSeconds=O.contentSeconds,$.transportAdvances=O.transportAdvances}dt.current=null,pt.current=null,ht.current=null,ut.current=null,O?.close(),q.current=null}},[n,D,$,Fe,Le]);const Or=f.useRef(X);Or.current=X;const Rr=f.useRef(b);Rr.current=b;const jr=f.useRef(I);jr.current=I;const Nt=f.useRef(G);Nt.current=G;const Tr=f.useRef(j);Tr.current=j;const Vr=f.useRef(H);Vr.current=H;const lt=f.useRef(v);lt.current=v;const Ar=f.useRef(v),Lr=f.useRef({build:t,sourcePath:e});f.useEffect(()=>{const O=Lr.current;Lr.current={build:t,sourcePath:e},!(O.build===t&&O.sourcePath===e)&&!Fe&&$.source&&($.source.dispose(),$.source=null)},[t,$,e,Fe]);const ut=f.useRef(null),Ze=f.useRef(!1),ht=f.useRef(null),dt=f.useRef(null),pt=f.useRef(null),[$t,ne]=f.useState(null),[Ut,Gt]=f.useState("building"),[Fr,dn]=f.useState(null),[pn,fn]=f.useState("mounting"),[mn,gn]=f.useState([]),Dr=f.useRef(null),[_r,vn]=f.useState("perspective"),[wn,Hr]=f.useState(null),ft=f.useRef(null);ft.current=wn;const qt=a?.[0],Yt=a?.[1],Kt=a?.[2],Je=L?.kind,Xt=L?.kind==="project-file"?L.path:void 0,mt=L?.kind==="entity"?L.entityId:void 0,Br=C?.environment,Wr=C?.background,zr=C?.keyLight,Zt=C?.grid,Qe=C?.viewLocked,Jt=C?.toneMapping;v&&ai(n),f.useEffect(()=>{let O=!1;if(!Fe)return;const de=async Se=>{const U=_t.current,et=Ht.current;if(!U||!et||q.current)return;const E=Dt.current;if(!E){ne("The world root needs the editor shell above it; this host has none.");return}const tt=await Se();if(O||q.current)return;dn(()=>tt),fs();const s=new qs("own",tt.mountWorldRootSurface(et,U,r),wr()??void 0);q.current=s,s.cleanups.push(ms(n,s.store.shell)),s.cleanups.push(gs(n,s.transport)),s.cleanups.push(Ei(n,{...Qo(s.store,n),...Ws(n)}));const ie=tt.installWorldRootStage({store:s.store,documentId:n,container:U,canvas:s.surface.canvas,renderer:s.surface.renderer,stats:E,cameraPreview:()=>Dr.current,onMountStatus:fn,onRootIds:gn,runFrame:xe=>Fs(n,xe)});s.viewport=ie.viewport,s.frame=ie.frame,s.content={scene:ie.scene,settle:()=>Promise.resolve(),dispose:async()=>ie.dispose()};const V=_s(()=>s.store.scene??ie.scene,s.transport,{rescanOnLiveMixers:()=>s.store.shell.playState==="stopped"});let re=0;s.cleanups.push(()=>V.dispose()),s.cleanups.push(s.store.shell.subscribe(()=>{if(s.store.shell.playState!=="stopped")return;const xe=performance.now();xe-re<va||(re=xe,V.refresh())})),s.cleanups.push(Ds({camera:ie.viewport.camera,drawCamera:()=>ie.viewport.renderCamera,orbit:ie.viewport.orbitControls,scene:ie.scene},ie.present,ie.setHelper,{documentId:n})),ut.current=s.rendererSession,s.initialized=!0,xs(),Gt("ready"),s.rendererSession.setActive(!0)},yn=async()=>{for(await q.current?.content?.settle();ro();)await so();if(O)return;const Se=Mr.current;if(Se)return de(Se);const U=_t.current,et=Ht.current;if(!U||!et)return;if(!t||e===void 0){ne("This stage shows `build` content and was given no `build()`/`sourcePath`.");return}let E;const tt=Ue.generation($);try{E=$.source??t(),$.source=null}catch(ee){ne(ee instanceof Error?ee.message:String(ee));return}try{q.current||(fs(),q.current=new qs(D,xa(et,D,r,{width:Math.max(1,U.clientWidth),height:Math.max(1,U.clientHeight)},()=>{Wt(!1),window.setTimeout(()=>{lt.current&&Wt(!0)},0)}),$.store),q.current.contentSeconds=$.contentSeconds,q.current.transportAdvances=$.transportAdvances)}catch(ee){throw E.dispose(),ee}const s=q.current,ie=s.borrow(),{renderer:V,canvas:re,lease:xe}=s.surface,A=s.store;w||(s.cleanups.push(ms(n,A.shell)),s.cleanups.push(gs(n,s.transport)));const vt=vs();vt&&A.shell.attachHistory(vt);const er=D==="inspector-preview",De=Q.current,Nr=Ae.current,$r=Ke.current,B=new nn,wt=E.root.parent;B.add(E.root),E.animations&&(E.root.animations=[...E.animations]);const tr={root:E.root,animations:E.root.animations};let _e=null,He=null,Be=null,Pe=null,ce=null,bt=null,yt=null,St=null,xt=null,Pt=null,rr=null,Ur=null,Gr=null,qr=!1,Ct=!1,kt=null;const sr={scene:B,settle:()=>ce?.settle()??Promise.resolve(),dispose:()=>{if(kt)return kt;Ct=!0;const ee=It.current;return It.current=!1,bt&&U.removeEventListener("pointerdown",bt,!0),yt&&U.removeEventListener("pointermove",yt,!0),St&&U.removeEventListener("pointerup",St,!0),xt&&U.removeEventListener("pointercancel",xt,!0),Pt&&window.removeEventListener("keydown",Pt),rr?.(),rr=null,kt=(async()=>{await ce?.settle();const rt=[];for(const Mt of[()=>Pe?.dispose(),()=>He?.dispose?.(),()=>_e?.dispose(),()=>B.removeFromParent(),()=>{ee?Ue.retain($,E,tt):E.dispose()},ie])try{Mt()}catch(fe){rt.push(fe)}rt.length&&console.error("Object3D source cleanup failed.",...rt)})(),kt}};try{const ee=async u=>{try{const g=tr;if(o&&!c){if(!g)throw new Error("Project history is unavailable; the edit was not saved.");const h=vs();if(!h)throw new Error("Project history is unavailable; the edit was not saved.");const m=o.serialize(g);if(m===null)return ne(null),!1;const y=await Us().replaceSource(h,{file:o.path,source:m,label:u??o.label??`Edit ${r}`});return ne(null),y}if(!c)throw new Error("This Asset Lab document has no persistence binding.");if(!Be||!g)throw new Error("Project history is unavailable; the edit was not saved.");const{persisted:k}=await(await Be).commit(g,u);return ne(null),k}catch(g){throw ne(g instanceof Error?g.message:JSON.stringify(g)),g}};_e=new xo(A,B,{documentId:n,title:r,sourcePath:e,documentKind:$r?"asset":"source",audit:P,...E.hierarchyRoots?{hierarchyRoots:E.hierarchyRoots}:{},...Je==="project-file"&&Xt?{modelSource:{kind:Je,path:Xt}}:Je==="entity"&&mt?{modelSource:{kind:Je,entityId:mt}}:{}});const rt={documentId:n,sourcePath:e,root:E.root,animations:E.root.animations,scene:B,defaultAdapter:_e,commit:ee};He=l?.(rt)??null;const Mt=He?_e:null;!He&&M&&(He=M({store:A,scene:B,...E.hierarchyRoots?{hierarchyRoots:E.hierarchyRoots}:{}}),_e.dispose()),Be=c&&vt?Us().openPersistence({binding:c,document:tr,history:vt}):null,Be&&Be.catch(u=>{!Ct&&q.current?.content===sr&&ne(u instanceof Error?u.message:JSON.stringify(u))});const fe=He?.adapter??_e;if(!s.dressing){V.outputColorSpace=kr,V.toneMapping=Jt??eo,V.shadowMap.enabled=!0,V.shadowMap.type=to,V.info.autoReset=!1,V.setPixelRatio(Math.min(window.devicePixelRatio,2)),De&&V.setClearColor(0,0);const u=Br===!1?null:xe&&"environment"in xe?xe.environment():Di(V),g=ws(re);s.dressing=Ti(s.scene,{environment:u,background:!De&&i===void 0&&Wr!==!1,keyLight:!1,grid:Zt===!0,content:E.root}),!De&&i!==void 0?s.scene.background=new pe(i):!De&&g.background!==null&&(s.scene.background=new pe(g.background)),s.defaultEnvironment=s.scene.environment,s.defaultBackground=s.scene.background;{const k=new Vi(s.scene,N);s.presentationRig=k,bs(n,le);const h=()=>{const m=ct(n);if(k.apply(m,V,Jt),s.viewport?.setStageFunction(m.world,m.interaction),s.viewport?.setFieldOfView(m.camera.fov),s.viewport?.setSelectionMarks(m.overlays.selection),s.viewport?.setGridMajorEvery(m.overlays.grid.majorEvery),s.viewport?.setAxisLines(m.overlays.axes),s.viewport?.setNavigation(m.overlays.navigation),s.viewport?.setGridVisible(m.overlays.grid.visible),s.session){const y=s.session.presentation().mode==="wireframe"&&m.xray.enabled&&m.xray.alpha<=0;s.session.selectionOutlineEnabled=!er&&zt.current&&m.overlays.selection.outline&&!y,s.session.selectionOriginsEnabled=!er&&m.overlays.selection.origins,s.session.setXray(m.xray)}N()};s.applyPresentation=h,h(),s.cleanups.push(vr(h)),s.cleanups.push(di(()=>{k.forgetFailedImages(),h()})),s.cleanups.push(()=>{k.dispose(),s.presentationRig===k&&(s.presentationRig=null)})}s.cleanups.push(()=>{s.defaultBackground instanceof Os&&s.defaultBackground!==s.dressing?.backgroundTexture&&s.defaultBackground.dispose()})}const Yr=(u,g)=>{const k=s.adapter,h=s.viewport;if(!k||!h)return null;const m=re.getBoundingClientRect(),y=new Tt((u-m.left)/Math.max(m.width,1)*2-1,-((g-m.top)/Math.max(m.height,1))*2+1),R=new Rs;R.layers.enableAll(),R.params.Line2={threshold:4},R.setFromCamera(y,s.session?.camera()??h.camera);const J=s.presentationAdapter,ge=K=>{for(let Z=K;Z;Z=Z.parent){const it=J?.hierarchy.idForObject3D?.(Z)??k.hierarchy.idForObject3D?.(Z);if(it)return it}return null};let je=null;for(const K of R.intersectObjects([...A.objectMap.values()],!0)){if(Fi(K.object))continue;const Z=ge(K.object);if(Z){je={distance:K.distance,id:Z};break}}const jt=h.visibleHelpers().filter(K=>K.userData.volterPickable===!0);for(const K of R.intersectObjects(jt,!0)){let Z=null,it=!0;for(let ot=K.object;ot;ot=ot.parent)ot.visible||(it=!1),Z??=ot.userData.volterPicksAs??null;if(!it)continue;const ls=Z?ge(Z):null;if(ls){(!je||K.distance<je.distance)&&(je={distance:K.distance,id:ls});break}}return je?.id??null};if(!s.viewport){s.viewport=new fo(re,s.scene,A,U,{renderer:V,authoring:()=>s.adapter??fe,pick:Yr,drawCamera:()=>s.session?.camera()??s.viewport.camera,publishPickContext:!1,onProjectionChange:vn,chromeInsetPx:w||Nr?0:gr,lightRig:!1}),Zt===!0&&s.viewport.grid.removeFromParent();const u=g=>{const k=Yr(g.clientX,g.clientY),h=k&&s.adapter?Ve(s.adapter.hierarchy,k):null;h&&Or.current?.(h)};U.addEventListener("dblclick",u),s.cleanups.push(()=>U.removeEventListener("dblclick",u))}const S=s.viewport;if(Qe){const u=S.camera;s.scene.add(u);const g=new Lt;g.name="volter:document-studio",g.add(Qe),u.add(g),s.documentStudio=g,s.cleanups.push(()=>{Qe.removeFromParent(),g.removeFromParent(),s.documentStudio===g&&(s.documentStudio=null),u.removeFromParent()})}if(p){const u=new Lt;u.name="__object3d_document_overlay",Js(u,"editorHelper",!0),B.add(u),Pe=p.setup({root:E.root,scene:B,renderer:V,overlay:u,camera:()=>s.session?.camera()??S.camera,writable:c!==void 0||o!==void 0});const g=h=>{const m=re.getBoundingClientRect(),y=new Tt((h.clientX-m.left)/Math.max(m.width,1)*2-1,-((h.clientY-m.top)/Math.max(m.height,1))*2+1),R=new Rs;return R.layers.enableAll(),R.setFromCamera(y,s.session?.camera()??S.camera),{pointerId:h.pointerId,button:h.button,buttons:h.buttons,clientX:h.clientX,clientY:h.clientY,altKey:h.altKey,ctrlKey:h.ctrlKey,metaKey:h.metaKey,shiftKey:h.shiftKey,ray:R.ray.clone(),hits:R.intersectObjects([E.root,u],!0)}};ce=new Xo({begin:h=>{if(!c&&!o)throw new Error("This Asset Lab document has no persistence binding; project gestures are read-only.");return Pe.begin(h)},persist:async h=>{await ee(h)},reportError:h=>ne(h instanceof Error?h.message:JSON.stringify(h))});const k=h=>{h.preventDefault(),h.stopPropagation()};bt=h=>{h.target instanceof Element&&h.target.closest('[role="alert"], [role="toolbar"]')!==null||ce?.begin(g(h))&&(k(h),h.isTrusted&&re.setPointerCapture?.(h.pointerId))},yt=h=>{ce?.hasActiveGesture()&&(k(h),ce.update(g(h)))},St=h=>{ce?.hasActiveGesture()&&(k(h),re.hasPointerCapture?.(h.pointerId)&&re.releasePointerCapture?.(h.pointerId),ce.commit(g(h)))},xt=h=>{ce?.hasActiveGesture()&&(k(h),ce.cancel(h.pointerId))},Pt=h=>{h.key!=="Escape"||!ce?.hasActiveGesture()||(h.preventDefault(),ce.cancel())},Ur=()=>{U.addEventListener("pointerdown",bt,!0),U.addEventListener("pointermove",yt,!0),U.addEventListener("pointerup",St,!0),U.addEventListener("pointercancel",xt,!0),window.addEventListener("keydown",Pt)}}const Re=s.content,Kr=[...A.shell.selectedEntityIds],st=s.adapter,xn=s.presentationAdapter,Pn=new Map(A.objectMap),We=s.session?.root,Cn=s.frame,kn=s.syncHostScene,Mn=dt.current,En=pt.current,On=ht.current,Xr=s.session?.neutralBackgroundTexture(),Rn=s.dressing.lights.map(u=>u.visible),jn=s.cleanups.length,Tn=s.initialized;if(Gr=()=>{B.removeFromParent(),wt&&wt.add(E.root),Re&&s.scene.add(Re.scene),s.adapter=st,s.presentationAdapter=xn,s.content=Re,s.frame=Cn,s.syncHostScene=kn,s.initialized=Tn;for(const u of s.cleanups.splice(jn))u();!We&&s.session&&(s.session.dispose(),s.session=null),A.objectMap.clear();for(const[u,g]of Pn)A.objectMap.set(u,g);Re&&A.bindScene(Re.scene,V,S.batchedRenderer,S.camera),We&&st&&s.session?.replaceContent(We,st),dt.current=Mn,pt.current=En,ht.current=On,ft.current=st,Hr(st),Xr!==void 0&&s.session?.setNeutralBackground(Xr),s.dressing?.lights.forEach((u,g)=>{u.visible=Rn[g]??!0}),We&&(s.dressing?.frameContent(We),s.presentationRig?.placeFloor(We)),A.shell.selectMultiple(Kr),A.notifyIngestObjectMapEdit()},Re?.scene.removeFromParent(),s.scene.add(B),s.adapter=fe,s.presentationAdapter=Mt,s.content=sr,A.bindScene(B,V,S.batchedRenderer,S.camera),A.setOrbitTarget(S.orbitControls.target),A.objectMap.clear(),B.traverse(u=>{const g=Mt?.hierarchy.idForObject3D?.(u)??fe.hierarchy.idForObject3D?.(u);g&&A.objectMap.set(g,u)}),s.session)s.session.replaceContent(E.root,fe);else{const u=Gs(Rr.current),g=Gs(jr.current)??u,k=ct(n).camera;S.setFieldOfView(k.fov);const h=Nt.current,m=qt!==void 0&&Yt!==void 0&&Kt!==void 0;if(!h&&!m){const y=S.orbitControls.target,R=S.camera.position.distanceTo(y);S.camera.position.copy(y).addScaledVector(new z(...k.opening).normalize(),R)}if(g||S.focusOn(E.root),h){const y=new z(...h.target),R=new z(...h.direction).normalize();S.camera.position.copy(y).addScaledVector(R,h.distance),S.camera.up.set(0,1,0),h.up&&S.camera.up.set(...h.up),S.orbitControls.target.copy(y)}else if(m){const y=g??br(E.root),R=y.getCenter(new z),J=new z(qt,Yt,Kt).normalize(),ge=At(y,S.camera,J)*Math.min(10,Math.max(.1,_??1));S.camera.position.copy(R).add(J.multiplyScalar(ge)),S.orbitControls.target.copy(R)}if(s.session=new Go(n,E.root,s.scene,V,S,fe,De?null:i===void 0?s.dressing.backgroundTexture:new pe(i),u),s.session.selectionOutlineEnabled=!er&&zt.current,s.session.setCameraViewSource(Vr.current??null),s.applyPresentation?.(),Nt.current?.projection==="orthographic"&&s.session.setProjection("orthographic"),!De&&i===void 0&&s.dressing.backgroundTexture){const y=s.session;s.cleanups.push(Ai(()=>{const R=ws(re).background,J=s.defaultBackground;s.defaultBackground=R!==null?new pe(R):Li(),y.neutralBackgroundTexture()===J&&y.setNeutralBackground(s.defaultBackground),J instanceof Os&&J!==s.dressing?.backgroundTexture&&J.dispose()}))}}const nt=$.camera;nt&&(S.setPose(nt.position,nt.target,nt.fov||void 0,nt.up),S.setProjection(_r),$.camera=null);const Y=s.session;dt.current=tr,pt.current=Be,ht.current=Pe,ft.current=fe,Hr(fe);const nr=pi(le)?.all?.lighting!==void 0||fi(le)?null:Qe?{all:{lighting:{source:"studio",studioPreset:ys.id,auto:null}}}:zr===!1?{all:{lighting:{source:"scene"}}}:null,ir=Tr.current??null;bs(n,le,nr&&ir?mi(nr,ir):ir??nr);const or=new Set(ba);let Zr;const Jr=()=>{const u=s.session?.presentation().mode;u!==Zr&&(Zr=u,s.applyPresentation?.()),!(u===void 0||!or.has(u))&&ct(n).drawMode!==u&&gi(n,{drawMode:u})},ar=vi(n).drawMode;ar!==void 0&&or.has(ar)&&s.session?s.session.setMode(ar):Jr();const Vn=s.session?.subscribe(Jr),An=vr(()=>{const u=s.session,g=ct(n).drawMode;u&&u.presentation().mode!==g&&or.has(u.presentation().mode)&&u.setMode(g)});s.cleanups.push(()=>{Vn?.(),An()});const Et=[];E.root.traverse(u=>{u.isLight&&Et.push(u)});const Ln={light:Et.length>0,"directional-light":Et.some(u=>u.isDirectionalLight)};s.contentLights=Et,s.contentHas=Ln,s.dressing.frameContent(E.root),s.presentationRig?.placeFloor(E.root),s.cleanups.push(A.shell.subscribe(()=>s.presentationRig?.placeFloor(E.root)));const Qr=new Set;A.shell.selectMultiple(Kr.filter(u=>{const g=A.objectMap.get(u)??Ve(fe.hierarchy,u);if(g===null&&!A.objectMap.has(u))return!1;const k=g??u;return Qr.has(k)?!1:(Qr.add(k),!0)})),A.notifyIngestObjectMapEdit(),Y.syncSelectionPresentation(),Ur?.(),ne(null),w||Ss(n);let Ot=B.background;Y.setNeutralBackground(Ot??s.defaultBackground);const ze=$.presentation;ze&&(Y.setMode(ze.mode),Y.setBackground(ze.background),Y.setProjection(ze.projection),Y.setSkeleton(ze.skeleton),Y.setBounds(ze.bounds),$.presentation=null);const Fn=()=>{s.viewport?.alignGridToView(Y.camera(),V.domElement.width),s.scene.environment=B.environment??s.defaultEnvironment,s.scene.fog=B.fog,s.scene.environmentIntensity=B.environmentIntensity,s.scene.environmentRotation.copy(B.environmentRotation),s.scene.backgroundIntensity=B.backgroundIntensity,s.scene.backgroundBlurriness=B.backgroundBlurriness,s.scene.backgroundRotation.copy(B.backgroundRotation);const u=s.presentationRig;if(u){const g=u.resolveSource({...s.contentHas,environment:B.environment!==null}),k=u.environment();k&&(s.scene.environment=k.texture??s.defaultEnvironment,s.scene.environmentIntensity=k.intensity,s.scene.environmentRotation.set(0,k.rotation,0));const h=u.backdrop();h!=="keep"?(s.scene.background=h.value,s.scene.backgroundBlurriness=h.blur,s.scene.backgroundIntensity=h.intensity,s.scene.backgroundRotation.set(0,h.rotation,0),s.backdropOverridden=!0):s.backdropOverridden&&(s.scene.background=Y.neutralBackgroundTexture(),s.scene.backgroundBlurriness=B.backgroundBlurriness,s.scene.backgroundIntensity=B.backgroundIntensity,s.backdropOverridden=!1);const m=g==="studio"&&u.presetId()===ys.id;s.documentStudio&&(s.documentStudio.visible=m);const y=g==="studio"&&!m||g==="preview"&&!u.sceneLightsShown()?s.darkenContentLights():0;u.update(Y.camera()),wi(n,{source:g,presetId:u.presetId(),presetLights:u.lightsVisible(),documentStudio:s.documentStudio?s.documentStudio.visible:null,contentLights:s.contentLights.length,contentLightsDarkened:y,environmentIntensity:s.scene.environmentIntensity,environmentImage:u.imageReport().shown,environmentImagePending:u.imageReport().pending,toneMapping:String(V.toneMapping)})}Ot!==B.background&&(Ot=B.background,Y.setNeutralBackground(Ot??s.defaultBackground))};s.syncHostScene=Fn,Y.setBeforeRender(()=>s.syncHostScene?.()),Y.setPresentsFrames(!0);const Dn=u=>{Ct||!(u>0)||!Number.isFinite(u)||(s.contentSeconds+=u,s.transportAdvances++,E.update?.(u))},_n=_s(E.root,s.transport);s.cleanups.push(()=>_n.dispose());const Ce=$.transport;Ce&&(Ce.activeSubject&&s.transport.setActiveSubject(Ce.activeSubject),s.transport.setLoop(Ce.range.loop),s.transport.setTimeScale(Ce.timeScale),s.transport.seek(Ce.time),Ce.playbackState==="playing"?s.transport.play():Ce.playbackState==="paused"&&s.transport.pause(),$.transport=null);let cr=performance.now();const es=typeof E.onChange=="function";let lr=!0;const Rt=()=>{lr=!0};if(es){const u=E.onChange(Rt),g=A.shell.subscribe(Rt),k=["pointerdown","pointermove","pointerup","pointerleave","wheel","keydown","keyup"];for(const h of k)U.addEventListener(h,Rt,{capture:!0,passive:!0});rr=()=>{u(),g();for(const h of k)U.removeEventListener(h,Rt,{capture:!0})}}let ts=-1;const rs=new js,ss=new js,ns=new Tt,is=new Tt;let os,as=null,cs=Number.NaN;const Hn=u=>{if(!es||lr||u>0||Ps()!==ts||Y.needsFrame()||s.presence?.live()||Pe?.prepareFrame||Pe?.update||(S.batchedRenderer.batches?.length??0)>0)return!0;const g=Y.camera();return g.updateMatrixWorld(),V.getDrawingBufferSize(is),!g.matrixWorld.equals(rs)||!g.projectionMatrix.equals(ss)||!is.equals(ns)||s.scene.background!==os||V.toneMapping!==as||V.toneMappingExposure!==cs},Bn=()=>{lr=!1,ts=Ps();const u=Y.camera();rs.copy(u.matrixWorld),ss.copy(u.projectionMatrix),V.getDrawingBufferSize(ns),os=s.scene.background,as=V.toneMapping,cs=V.toneMappingExposure},Wn=(u,g)=>{if(Ct||!V||!S)return;const k=V,h=S,m=Y?.profiler;m?.beginFrame(),g&&(cr=u);const y=Math.min((u-cr)/1e3,.1);cr=u,m?.beginPhase();const R=s.transport.tick(y);if(R>0&&Dn(R),Pe?.prepareFrame?.(y),Pe?.update?.(y),m?.endPhase("animation"),m?.beginPhase(),s.presence?.syncMarkers(y),S.update(y),w||Fs(n,y),S.batchedRenderer.update(y),m?.endPhase("editor"),!g&&!Hn(R)){m?.endFrame();return}m?.beginPhase(),k.info.reset();const J=!Ze.current&&bi()===n;J&&yi(n);const ge=J?Date.now():0,je=s.scene.overrideMaterial,jt=Y.presentation().mode;jt!=="uv"&&jt!=="vertex-colors"&&(s.scene.overrideMaterial=B.overrideMaterial);try{h.renderWithInfrastructure(()=>{Y.renderViewport(y),h.renderViewCube(k)})}finally{s.scene.overrideMaterial=je}Y.servePresentedFrame(),Bn(),Ze.current||(Ze.current=!0,J&&Si("first-render",Date.now()-ge),xi(n),Gt("ready")),m?.reportRender({gpuMs:null,drawCalls:k.info.render.calls,triangles:k.info.render.triangles,geometries:k.info.memory.geometries,textures:k.info.memory.textures}),m?.endPhase("render"),m?.endFrame();const K=Dt.current;if(K&&ae&&Pi(ae.shell)===A.shell){const Z=Y.cameraPose();K.frameTime=y*1e3,K.fps=y>0?1/y:0,K.drawCalls=k.info.render.calls,K.triangles=k.info.render.triangles,K.cameraPosition.x=Z.position[0],K.cameraPosition.y=Z.position[1],K.cameraPosition.z=Z.position[2],K.cameraTarget.x=Z.target[0],K.cameraTarget.y=Z.target[1],K.cameraTarget.z=Z.target[2]}};if(s.frame=Wn,ut.current=s.rendererSession,!s.initialized){w||(s.cleanups.push(Ds({camera:S.camera,drawCamera:()=>s.session?.camera()??S.camera,orbit:S.orbitControls,scene:s.scene},()=>null,(m,y)=>S.setHelper(m,y),{documentId:n})),Ye(()=>import("./stage-presence-markers-BgLs0Aj5.js"),__vite__mapDeps([69,4,5,7,8,9,10,6,11,12,13,26,27,18,2,70])).then(m=>{if(s.isClosed||q.current!==s||s.presence)return;const y=m.bindStagePresenceMarkers({scene:s.scene,store:A,documentId:n,container:U,canvas:re,viewport:S,readVisibleCameraPose:()=>{const R=s.session?.camera()??S.renderCamera,J=R.getWorldPosition(new z),ge=R.fov;return{position:J,target:S.orbitControls.target,fov:typeof ge=="number"?ge:0}}});s.presence=y,s.cleanups.push(()=>y.dispose())}),s.cleanups.push(So(Y,Ws(n))),s.cleanups.push(Ci({id:n,label:r,kind:$r?"asset":"source",profiler:Y.profiler}))),!w&&!Nr&&s.cleanups.push(ki(n,()=>({adapter:s.adapter,nodeId:s.adapter?.selection?.get()[0]??null})));const u=w?`${n}#chromeless-${++ya}`:n;s.cleanups.push(Mi({id:u,label:r,contentClock:()=>s.contentSeconds,transportAdvances:()=>s.transportAdvances})),s.cleanups.push(A.shell.onViewportAction(m=>{switch(m.type){case"focus-selection":case"focus-scene":!s.session?.frame()&&s.session?.root&&S.focusOn(s.session.root);break;case"focus-entity":{const y=s.adapter?Ve(s.adapter.hierarchy,m.id):null;y&&S.focusOn(y);break}case"snap-selection-to-floor":S.snapSelectionToFloor();break;case"set-view-preset":s.session?s.session.setViewPreset(m.preset==="perspective"?"isometric":m.preset,"view"):S.setViewPreset(m.preset);break;case"toggle-camera-view":s.session?.toggleCameraView();break;case"frame-all":!s.session?.frame(1,"all")&&s.session?.root?S.focusOn(s.session.root):s.session||S.focusOnScene();break;case"zoom-view":s.session?.cameraView()&&!s.session.cameraViewLocked()?s.session.zoomCameraView(m.direction>0?1.2:1/1.2):S.zoomStep(m.direction);break;case"step-view":if(s.session?.cameraView()&&!s.session.cameraViewLocked())break;S.stepView(m.step);break;case"toggle-projection":{const y=s.session;if(y?.cameraView())break;const J=(y?y.projection():S.projection)==="perspective"?"orthographic":"perspective";y?y.setProjection(J):S.setProjection(J);break}case"set-camera-pose":S.setPose(m.position,m.target,m.fov);break}}));let g="";s.cleanups.push(A.shell.subscribe(()=>{S.objectMap=A.objectMap,S.syncFromStore(),s.session?.syncSelectionPresentation();const m=(s.adapter?.selection?.get()??[]).join("\0");m!==g&&(g=m,w||Ss(n))}));const k=()=>{const m=Math.max(1,U.clientWidth),y=Math.max(1,U.clientHeight),R=V.getPixelRatio();(re.width!==Math.floor(m*R)||re.height!==Math.floor(y*R))&&V.setSize(m,y,!1),S.resize(m,y),s.session?.resize(m,y),s.rendererSession.redraw()},h=new ResizeObserver(k);h.observe(U),s.cleanups.push(()=>h.disconnect()),k(),s.initialized=!0,xs()}S.objectMap=A.objectMap,S.syncFromStore(),s.rendererSession.setActive(lt.current),s.rendererSession.redraw(),qr=!0,Re?.dispose()}catch(ee){if(!qr)try{Gr?.()}finally{wt&&E.root.parent===B&&wt.add(E.root),sr.dispose()}console.error(`[object3d document] ${r}: source update failed`,ee),ne(ee instanceof Error?ee.message:String(ee))}},Sn=Er.current.then(yn);return Er.current=Sn.catch(Se=>{O||ne(Se instanceof Error?Se.message:String(Se))}),()=>{O=!0}},[l,i,t,qt,Yt,Kt,r,n,ue,Wr,Br,Zt,zr,Qe,Jt,w,mt,Je,Xt,p,c,o,D,$,Fe,M,e,Le]),f.useEffect(()=>{const O=ut.current,de=v&&!Ar.current;Ar.current=v,O&&(de&&(Ze.current=!1,ci(n)),O.setActive(v||Le))},[v,n,Le]);const gt=q.current,Qt=Ut==="ready"&&gt?.viewport?{store:gt.store,viewport:gt.viewport,canvas:gt.surface.canvas}:null,bn=f.useCallback(()=>{const O=ft.current;return O?{adapter:O,nodeId:O.selection?.get()[0]??O.hierarchy.roots()[0]?.id??null}:null},[]),Ir=d.jsx("div",{"data-testid":"tool-object3d-authoring","data-volter-chromeless":w||void 0,className:ue?"volter-object3d-studio-stage":void 0,style:{position:w||he?"relative":"absolute",...w?{width:"100%",height:"100%"}:he?{flex:1,minHeight:0}:{inset:-gr},overflow:"hidden",background:ue?void 0:qe.surface.raised,pointerEvents:"auto"},children:d.jsxs("div",{ref:_t,style:{position:"absolute",inset:0,minHeight:0,overflow:"hidden"},children:[d.jsx(Sa,{canvasHostRef:Ht}),v&&Qt&&!w?d.jsx(f.Suspense,{fallback:null,children:d.jsx(ma,{stage:Qt})}):null,ae&&!w?d.jsx(ia,{store:ae,documentId:n,stage:Qt,active:v,chrome:"document"}):null,ae&&Fr?d.jsx(Fr.Overlays,{store:ae,documentId:n,cameraPreviewRef:Dr,mountStatus:pn,rootIds:mn}):null,$t&&d.jsx("div",{role:"alert",style:{position:"absolute",insetInline:0,top:0,display:"flex",justifyContent:"center",padding:"var(--volter-space-3)",pointerEvents:"none"},children:d.jsxs("div",{className:"volter-chrome-island",style:{display:"flex",alignItems:"center",gap:"var(--volter-space-3)",maxWidth:"80%",padding:"var(--volter-space-2) var(--volter-space-3)",borderRadius:"var(--volter-radius-md)",border:`var(--volter-stroke-resting) solid ${qe.semantic.danger}`,background:qe.surface.raised,color:qe.semantic.danger,pointerEvents:"auto"},children:[d.jsx("span",{children:$t}),d.jsx(Te,{size:"compact","aria-label":"Dismiss",onClick:()=>ne(null),"data-testid":"object3d-document-error-dismiss",children:d.jsx(we,{icon:ve.action.close})})]})}),!$t&&Ut==="building"&&d.jsx(Mo,{testId:"object3d-document-status",children:Eo}),d.jsx("div",{style:{position:"absolute",inset:w||he?0:gr,pointerEvents:"none"},children:!w&&Ut==="ready"&&q.current&&d.jsx(pa,{viewport:q.current.viewport,documentId:n,session:q.current.session,store:q.current.store.shell,projection:_r,displayName:r,...W?{statistics:W}:{},...be!==void 0?{subject:be}:{},...Me?{gridScale:Me}:{},objectName:O=>(de=>de?Ve(de.hierarchy,O)?.name:void 0)(q.current?.adapter)??q.current?.store.objectMap.get(O)?.name??null})})]})});return he?d.jsx(li,{documentId:n,active:v,type:F??(mt?"entity":"model"),title:r,status:e,selection:bn,fill:!0,children:d.jsxs("div",{className:"volter-object3d-asset-workspace",children:[Ir,d.jsx(ko,{transport:q.current?.transport??null})]})}):Ir}function Pa(n){return d.jsx(hn,{...n})}const Qa=Object.freeze(Object.defineProperty({__proto__:null,Object3DDocumentViewport:hn,ToolObject3DAuthoring:Pa},Symbol.toStringTag,{value:"Module"}));export{hn as O,Qa as S,aa as V,zs as s,ea as t};
@@ -1 +0,0 @@
1
- import{Q as i,r as m}from"./index-V4J7xfRg.js";import{e as p}from"./game-network-CAH_Jsh6.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"./index-OZVqp6xS.js";import"./index-Da9JhEvW.js";import"./native-debug-module-JJOFtIVz.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-xQJcVubm.js";import"./contract-system-adapters-rVGdworX.js";import"./game-contract-seams-DrYyE5PX.js";import"./seeded-random-tpdJjdqy.js";import"./game-audio-BeCyd0Ha.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./index-bQE2NA0D.js";import"./live-project-verbs-CnknlUlT.js";import"./capability-coverage-wd6bAhv3.js";import"./edit-mode-authoring-CSt3zzmS.js";import"./json-history-resource-CH2nzMZh.js";import"./binding-resolver-DUz8C8Fs.js";import"./adapter-surface-Y37Nzcyw.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./realm-services-u0mnjXU9.js";import"./canvas-entry-runtime-DskaohHK.js";import"./three-ingest-runtime-BnRF_nJN.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./relative-path-guard-GiM7Lsz8.js";import"./react-root-BHA-cdrW.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./active-ingest-D_ryI_R4.js";import"./ingest-source-persistence-CQOJeGhj.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-DJLpUuf0.js";import"./mounted-authoring-C47L5H5t.js";import"./entity-object-V13bGmay.js";import"./user-data-CifDDvSr.js";import"./workspace-arrangement-B_OcbQbj.js";import"./three-contract-Dkt6PmWY.js";import"./three-BQfhEwUz.js";import"./editor-layers-CjeYrUlm.js";import"./component-instance-root-Cw_-ajBX.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./three-authoring-adapter-COBwREQO.js";import"./source-persistence-backend-uyd6NiWD.js";import"./three-projection-core-PQm-CO61.js";import"./body-marks-C1LxJtQb.js";import"./user-data-CODoGZqA.js";import"./object-marks-BnvSuCTt.js";import"./structural-ids-BOo2BRoY.js";import"./object3d-authoring-subject-XccsO0xG.js";import"./r3f-physics-binding-DZSIB0d_.js";import"./deferred-ingest-play-CEnsC3uN.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-OR1SW2jI.js";import"./board-guides-B6TEPOPi.js";import"./relative-import-specifier-DXWVQf0o.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-DiSjB-N1.js";import"./inference-diagnostics-DoZQ1mpg.js";import"./writer-tw6EcuVO.js";import"./three-state-C7khRIQE.js";import"./editor-shell-store-DckLm6m8.js";import"./output-pass-HurwNl0G.js";import"./viewport-door-BCXEYmon.js";import"./game-surface-defaults-D8S4cRxi.js";const Rt="workspace.service";function e(o){p().catch(t=>{m().console.error(`${o}: ${t instanceof Error?t.message:String(t)}`,"play")})}function Ut(){let o,t=!1;const r=i(()=>{t||new URLSearchParams(window.location.search).get("play")==="1"&&(t=!0,o=window.setTimeout(()=>e("Could not enter requested Play mode"),0))});return()=>{o!==void 0&&window.clearTimeout(o),r()}}export{Rt as point,Ut as start};
@@ -1,2 +0,0 @@
1
- import{a as y,b as P,S as p,P as _,s as k,o as B}from"./worker-CJIsrsP6.js";import{s as A}from"./session-kSIjcXJT.js";async function $(o){const a=await fetch(o);if(!a.ok)throw new Error(`${o}: HTTP ${a.status}`);const e=await a.text(),r={exports:{}},i=new Function("module","exports","define",`${e}
2
- return typeof createBlenderModule === 'function' ? createBlenderModule : module.exports;`)(r,r.exports,void 0);if(typeof i!="function")throw new Error("blender_browser.js did not produce a module factory");return i}const I=new TextEncoder;function N(o,a){let e="";for(const r of a.split("/").filter(Boolean))o.FS_createPath(e||"/",r,!0,!0),e+=`/${r}`}function D(o){const a=o.FS;return{readFile:async e=>a.readFile(e),writeFile:(e,r)=>(a.writeFile(e,r),Promise.resolve()),mkdirTree:async e=>a.mkdirTree(e),readdir:async e=>a.readdir(e),stat:async e=>{let r;try{r=a.stat(e)}catch{return null}const n=r.mtime;return{size:r.size,mode:r.mode??0,mtimeMs:typeof n=="number"?n:n?.getTime()??0}},unlink:async e=>a.unlink(e)}}const L="volter-blender-artifacts";async function m(o,a){const e=y(o);if(!a||typeof caches>"u")return fetch(e);const r=`${e}?sha256=${a}`,n=await caches.open(L),i=await n.match(r);if(i)return i;const l=await fetch(e);if(!l.ok)return l;for(const c of await n.keys())c.url.startsWith(`${e}?sha256=`)&&c.url!==r&&await n.delete(c);const s=new Response(await l.blob(),{headers:{"content-type":l.headers.get("content-type")??"application/octet-stream"}});return await n.put(r,s.clone()),s}async function C(o,a){if(!self.crossOriginIsolated)throw new Error("Headless Blender needs SharedArrayBuffer, so the editor page has to be cross-origin isolated (Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy on every response). This worker reports crossOriginIsolated=false.");const e=y("blender_browser.js"),r=a.digests??{},[n,i]=await Promise.all([$(e),m("blender_browser.data",r["blender_browser.data"]).then(async t=>{if(!t.ok)throw new Error(`blender_browser.data: HTTP ${t.status}`);return t.arrayBuffer()})]);let l=null;const s=performance.now();let c=null;const u=(t,f)=>{f.startsWith("@@VOLTER-READY ")&&(c=f.slice(15)),o.log(f.startsWith("@@VOLTER-WARN")||f.startsWith("@@VOLTER-ERROR")?"error":"log",f)},d=await n({arguments:["--background","--factory-startup","--python",P],locateFile:t=>y(t),getPreloadedPackage:()=>i,instantiateWasm:(t,f)=>((async()=>{const w=await m("blender_browser.wasm",r["blender_browser.wasm"]);if(!w.ok)throw new Error(`blender_browser.wasm: HTTP ${w.status}`);const{instance:O,module:F}=await WebAssembly.instantiateStreaming(w,t);f(O,F)})().catch(w=>{l=w}),{}),mainScriptUrlOrBlob:e,print:t=>u("log",t),printErr:t=>u("error",t),preRun:[t=>{t.ENV??={},Object.assign(t.ENV,{BLENDER_SYSTEM_RESOURCES:"/bw",BLENDER_SYSTEM_PYTHON:"/bw/python",BLENDER_SYSTEM_SCRIPTS:"/bw/scripts",BLENDER_SYSTEM_DATAFILES:"/bw/datafiles",VOLTER_SESSION_ROOT:p,HOME:"/root",TMPDIR:"/tmp"});for(const f of["/tmp","/root","/work",p,..._,o.project])N(t,f);t.FS_createDataFile(p,"session.py",I.encode(A),!0,!0,!0)}]});for(;c===null;){if(l)throw l instanceof Error?l:new Error(String(l));await k(5)}const g=performance.now()-s,T=JSON.parse(c);let E=null;if(typeof d.releasePreloadedFileData=="function"){const t=d.releasePreloadedFileData();E=t.bytes,o.log("log",`blender: released the preloaded ${(t.bytes/1048576).toFixed(0)} MB payload (${t.files} files); WasmFS already holds it`)}else o.log("error","blender: this bundle has no releasePreloadedFileData, so the ~55 MB packed .data payload stays resident beside the copy WasmFS made of it — relink with the recipe's --post-js (recipe/release-preloaded-file-data.js).");const h=d.FS;let S="";for(const t of`${o.project}`.split("/").filter(Boolean)){S+=`/${t}`;try{h.chmod(S,511)}catch{}}for(const t of["/work","/tmp","/root",p,..._])try{h.chmod(t,511)}catch{}const b=D(d);h.chmod("/bw/datafiles",493),await M(b,r["essentials.bin"]);const{request:R}=B(b,o);return{skew:"emscripten",banner:T,files:b,request:R,readArena:async()=>d.HEAPU8.subarray(d._blender_web_export_buffer(),d._blender_web_export_buffer()+d._blender_web_export_buffer_size()),bootMs:g,memoryBytes:()=>d.HEAPU8.length,releasedPayloadBytes:E}}async function M(o,a){const[e,r]=await Promise.all([fetch(y("essentials.json")),m("essentials.bin",a)]);if(!e.ok||!r.ok)throw new Error(`Blender Essentials assets are missing (${e.status}/${r.status})`);const n=await e.json(),i=await r.arrayBuffer(),l=Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",i)),s=>s.toString(16).padStart(2,"0")).join("");if(i.byteLength!==n.bytes||l!==n.sha256)throw new Error("Blender Essentials payload does not match its source manifest");for(const s of n.files){if(!s.path||s.path.includes("\\")||s.path.split("/").some(u=>!u||u==="."||u==="..")||!Number.isInteger(s.offset)||!Number.isInteger(s.bytes)||s.offset<0||s.bytes<0||s.offset+s.bytes>i.byteLength)throw new Error(`Invalid Blender Essentials file: ${s.path}`);const c=`/bw/datafiles/assets/${s.path}`;await o.mkdirTree(c.slice(0,c.lastIndexOf("/"))),await o.writeFile(c,new Uint8Array(i,s.offset,s.bytes))}}export{C as startEmscriptenBlenderEngine};
@@ -1,12 +0,0 @@
1
- import{a as c}from"./jsx-runtime-DPjLkJKQ.js";import{j2 as Ee,bs as _e,r as D,bu as Oe,fK as W,bA as R,bB as U,hQ as Ce,bz as Fe,j3 as Ne,bJ as Re,bp as Ae,j4 as Le,j5 as be,j6 as Me,br as Ie}from"./index-V4J7xfRg.js";import{c as Te,a as J}from"./blender-runtime-skin-B1tYITn2.js";import{r as h}from"./index-nmcBqr7Y.js";import{u as $e,v as X,k as q,w as Q,x as Be,y as le,t as pe,z as Pe,A as De,B as fe,C as Ve,D as te,E as Ge,F as We,G as He}from"./blender-runtime-host-CUH6peXj.js";import"./index-CtzuWnCS.js";import{a as Ue}from"./three-contract-Dkt6PmWY.js";import{o as re,b as K}from"./viewport-door-BCXEYmon.js";import{s as Ke,a as ze}from"./object3d-document-session-registry-DNCOGA3i.js";import{d9 as Ye}from"./three.core-3arARmh6.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"./LineSegments2-DN9pUfWA.js";import"./three.module-BLhyNg0e.js";import"./preview-renderer-BrYNFV1p.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./renderer-ownership-BovSEcLv.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./clip-planes-CnAI6DZn.js";import"./content-bounds-D5pXeHJN.js";import"./hierarchy-marks-B1jSqxSv.js";import"./workspace-arrangement-B_OcbQbj.js";function ve(r){const o=Number.isFinite(r)&&r>0?r:50;return{degrees:2*Math.atan(72/(2*o))*180/Math.PI,axis:"larger"}}Ee("model",{camera:{fov:ve(50),opening:[.8187,.4458,.3617]},interaction:{bootTool:"select",boxSelect:"touch"},all:{lighting:{source:"studio",studioPreset:_e.id,auto:null,tone:{mapper:"none",exposure:1}},xray:{enabled:!1,alpha:.5}},modes:{wireframe:{xray:{enabled:!0,alpha:0}},preview:{lighting:{source:"preview",auto:null,preview:{sceneLights:!1,sun:{enabled:!1},environment:{enabled:!0,image:"blender:forest",energy:1,rotation:0}},tone:{mapper:"agx",exposure:1}},backdrop:{source:"fill"}},rendered:{lighting:{source:"scene",auto:null,tone:{mapper:"agx",exposure:1}},backdrop:{source:"scene"}}},overlays:{selection:{origins:!0}},world:{upAxis:"z"}});function Je(r){return`blender-${r.toLowerCase().replace(/_/g,"-")}`}function B(r){return r?.type==="TSE_SOME_ID"&&r.struct==="Object"&&r.object!==void 0}function me(r){if(r.struct)return r.struct}function ge(r,o){return{id:r.id,label:r.name,role:"entity",kind:Je(r.icon),...me(r)?{typeLabel:me(r)}:{},parentId:o,childIds:r.children.map(l=>l.id),defaultExpanded:r.expanded}}const Xe={transform:!0,inspectorFields:!1,persist:!0},ee=new Set;function qe(r){for(const o of ee)if(o.documentId===r||o.documentId===`object3d-document:${r}`)return o;return ee.values().next().value??null}const Qe=()=>({position:[0,0,0],rotation:[0,0,0,1],scale:[1,1,1]});function Ze(r,o){r.updateWorldMatrix(!0,!1);const l=o.matrixWorld.clone().invert().multiply(r.matrixWorld).elements;return[[l[0],l[1],l[2],l[3]],[l[4],l[5],l[6],l[7]],[l[8],l[9],l[10],l[11]],[l[12],l[13],l[14],l[15]]]}function z(r,o){return`${r} needs a file, and this editor has no door to ask for one: the host's file door (\`EditorHost.files\`, \`@volter/editor-sdk/host\`) reads and writes project-relative paths and has no file-picker member, so there is nothing to open the workbench's own dialog through. Blender's row opens a file browser; run without one, the engine answers "${o}".`}const et=[{kind:"mesh.plane",label:"Plane",group:"Mesh",call:"mesh.primitive_plane_add"},{kind:"mesh.cube",label:"Cube",group:"Mesh",call:"mesh.primitive_cube_add"},{kind:"mesh.circle",label:"Circle",group:"Mesh",call:"mesh.primitive_circle_add"},{kind:"mesh.uv-sphere",label:"UV Sphere",group:"Mesh",call:"mesh.primitive_uv_sphere_add"},{kind:"mesh.ico-sphere",label:"Ico Sphere",group:"Mesh",call:"mesh.primitive_ico_sphere_add"},{kind:"mesh.cylinder",label:"Cylinder",group:"Mesh",call:"mesh.primitive_cylinder_add"},{kind:"mesh.cone",label:"Cone",group:"Mesh",call:"mesh.primitive_cone_add"},{kind:"mesh.torus",label:"Torus",group:"Mesh",call:"mesh.primitive_torus_add"},{kind:"mesh.grid",label:"Grid",group:"Mesh",call:"mesh.primitive_grid_add",separatorBefore:!0},{kind:"mesh.monkey",label:"Monkey",group:"Mesh",call:"mesh.primitive_monkey_add"},{kind:"curve.bezier",label:"Bézier",group:"Curve",call:"curve.primitive_bezier_curve_add"},{kind:"curve.bezier-circle",label:"Circle",group:"Curve",call:"curve.primitive_bezier_circle_add"},{kind:"curve.nurbs-curve",label:"Nurbs Curve",group:"Curve",call:"curve.primitive_nurbs_curve_add",separatorBefore:!0},{kind:"curve.nurbs-circle",label:"Nurbs Circle",group:"Curve",call:"curve.primitive_nurbs_circle_add"},{kind:"curve.path",label:"Path",group:"Curve",call:"curve.primitive_nurbs_path_add"},{kind:"curve.empty-hair",label:"Empty Hair",group:"Curve",call:"object.curves_empty_hair_add",separatorBefore:!0},{kind:"curve.fur",label:"Fur",group:"Curve",call:"object.quick_fur"},{kind:"surface.nurbs-curve",label:"Nurbs Curve",group:"Surface",call:"surface.primitive_nurbs_surface_curve_add"},{kind:"surface.nurbs-circle",label:"Nurbs Circle",group:"Surface",call:"surface.primitive_nurbs_surface_circle_add"},{kind:"surface.nurbs-surface",label:"Nurbs Surface",group:"Surface",call:"surface.primitive_nurbs_surface_surface_add"},{kind:"surface.nurbs-cylinder",label:"Nurbs Cylinder",group:"Surface",call:"surface.primitive_nurbs_surface_cylinder_add"},{kind:"surface.nurbs-sphere",label:"Nurbs Sphere",group:"Surface",call:"surface.primitive_nurbs_surface_sphere_add"},{kind:"surface.nurbs-torus",label:"Nurbs Torus",group:"Surface",call:"surface.primitive_nurbs_surface_torus_add"},{kind:"metaball.ball",label:"Ball",group:"Metaball",call:"object.metaball_add, type='BALL'"},{kind:"metaball.capsule",label:"Capsule",group:"Metaball",call:"object.metaball_add, type='CAPSULE'"},{kind:"metaball.plane",label:"Plane",group:"Metaball",call:"object.metaball_add, type='PLANE'"},{kind:"metaball.ellipsoid",label:"Ellipsoid",group:"Metaball",call:"object.metaball_add, type='ELLIPSOID'"},{kind:"metaball.cube",label:"Cube",group:"Metaball",call:"object.metaball_add, type='CUBE'"},{kind:"text",label:"Text",group:null,call:"object.text_add"},{kind:"point-cloud",label:"Point Cloud",group:null,call:"object.pointcloud_random_add"},{kind:"volume.import",label:"Import OpenVDB...",group:"Volume",call:"object.volume_import",refusal:`${z("Importing an OpenVDB volume","CANCELLED, with nothing created")} This build also has no OpenVDB at all (\`bpy.app.build_options.openvdb\` is False), so a file would not be read even with a picker.`},{kind:"volume.empty",label:"Empty",group:"Volume",call:"object.volume_add"},{kind:"grease-pencil.blank",label:"Blank",group:"Grease Pencil",call:"object.grease_pencil_add, type='EMPTY'"},{kind:"grease-pencil.stroke",label:"Stroke",group:"Grease Pencil",call:"object.grease_pencil_add, type='STROKE'"},{kind:"grease-pencil.monkey",label:"Monkey",group:"Grease Pencil",call:"object.grease_pencil_add, type='MONKEY'"},{kind:"grease-pencil.lineart-scene",label:"Scene Line Art",group:"Grease Pencil",call:"object.grease_pencil_add, type='LINEART_SCENE'",separatorBefore:!0},{kind:"grease-pencil.lineart-collection",label:"Collection Line Art",group:"Grease Pencil",call:"object.grease_pencil_add, type='LINEART_COLLECTION'"},{kind:"grease-pencil.lineart-object",label:"Object Line Art",group:"Grease Pencil",call:"object.grease_pencil_add, type='LINEART_OBJECT'"},{kind:"armature",label:"Armature",group:null,call:"object.armature_add"},{kind:"lattice.lattice",label:"Lattice",group:"Lattice",call:"object.add, type='LATTICE'"},{kind:"lattice.deform-selected",label:"Lattice Deform Selected",group:"Lattice",call:"object.lattice_add_to_selected"},{kind:"empty.plain-axes",label:"Plain Axes",group:"Empty",call:"object.empty_add, type='PLAIN_AXES'"},{kind:"empty.arrows",label:"Arrows",group:"Empty",call:"object.empty_add, type='ARROWS'"},{kind:"empty.single-arrow",label:"Single Arrow",group:"Empty",call:"object.empty_add, type='SINGLE_ARROW'"},{kind:"empty.circle",label:"Circle",group:"Empty",call:"object.empty_add, type='CIRCLE'"},{kind:"empty.cube",label:"Cube",group:"Empty",call:"object.empty_add, type='CUBE'"},{kind:"empty.sphere",label:"Sphere",group:"Empty",call:"object.empty_add, type='SPHERE'"},{kind:"empty.cone",label:"Cone",group:"Empty",call:"object.empty_add, type='CONE'"},{kind:"image.reference",label:"Reference...",group:"Image",call:"object.empty_image_add, background=False",refusal:z("A reference image","poll() failed, context is incorrect / Please select at least one image")},{kind:"image.background",label:"Background...",group:"Image",call:"object.empty_image_add, background=True",refusal:z("A background image","poll() failed, context is incorrect / Please select at least one image")},{kind:"image.mesh-plane",label:"Mesh Plane...",group:"Image",call:"image.import_as_mesh_planes",refusal:z("An image as a mesh plane","CANCELLED, with nothing created")},{kind:"image.empty-image",label:"Empty Image",group:"Image",call:"object.empty_add, type='IMAGE'"},{kind:"light.point",label:"Point",group:"Light",call:"object.light_add, type='POINT'"},{kind:"light.sun",label:"Sun",group:"Light",call:"object.light_add, type='SUN'"},{kind:"light.spot",label:"Spot",group:"Light",call:"object.light_add, type='SPOT'"},{kind:"light.area",label:"Area",group:"Light",call:"object.light_add, type='AREA'"},{kind:"light-probe.sphere",label:"Sphere",group:"Light Probe",call:"object.lightprobe_add, type='SPHERE'"},{kind:"light-probe.plane",label:"Plane",group:"Light Probe",call:"object.lightprobe_add, type='PLANE'"},{kind:"light-probe.volume",label:"Volume",group:"Light Probe",call:"object.lightprobe_add, type='VOLUME'"},{kind:"camera",label:"Camera",group:null,call:"object.camera_add"},{kind:"speaker",label:"Speaker",group:null,call:"object.speaker_add"},{kind:"force-field.force",label:"Force",group:"Force Field",call:"object.effector_add, type='FORCE'"},{kind:"force-field.wind",label:"Wind",group:"Force Field",call:"object.effector_add, type='WIND'"},{kind:"force-field.vortex",label:"Vortex",group:"Force Field",call:"object.effector_add, type='VORTEX'"},{kind:"force-field.magnetic",label:"Magnetic",group:"Force Field",call:"object.effector_add, type='MAGNET'"},{kind:"force-field.harmonic",label:"Harmonic",group:"Force Field",call:"object.effector_add, type='HARMONIC'"},{kind:"force-field.charge",label:"Charge",group:"Force Field",call:"object.effector_add, type='CHARGE'"},{kind:"force-field.lennard-jones",label:"Lennard-Jones",group:"Force Field",call:"object.effector_add, type='LENNARDJ'"},{kind:"force-field.texture",label:"Texture",group:"Force Field",call:"object.effector_add, type='TEXTURE'"},{kind:"force-field.curve-guide",label:"Curve Guide",group:"Force Field",call:"object.effector_add, type='GUIDE'"},{kind:"force-field.boid",label:"Boid",group:"Force Field",call:"object.effector_add, type='BOID'"},{kind:"force-field.turbulence",label:"Turbulence",group:"Force Field",call:"object.effector_add, type='TURBULENCE'"},{kind:"force-field.drag",label:"Drag",group:"Force Field",call:"object.effector_add, type='DRAG'"},{kind:"force-field.fluid-flow",label:"Fluid Flow",group:"Force Field",call:"object.effector_add, type='FLUID'"}],tt="collection-instance:";function rt(){const r=new Map;for(const o of q().byId.values()){if(o.type!=="TSE_LAYER_COLLECTION")continue;const l=o.data;l===void 0||!l.startsWith("bpy.data.collections[")||r.has(o.name)||r.set(o.name,{kind:`${tt}${o.name}`,label:o.name,group:"Collection Instance",call:`object.collection_instance_add, collection=${V(o.name)}`})}return[...r.values()]}function Z(){return[...et,...rt()]}function nt(r){const[o,...l]=r.call.split(", ");return`bpy.ops.${o}(${l.join(", ")})`}function V(r){return JSON.stringify(r)}async function H(r,o="Blender Python"){const l=["before = {o.name for o in bpy.data.objects}",r,"made = [o.name for o in bpy.data.objects if o.name not in before]",'print("\\n".join(made))'].join(`
2
- `),s=await te(l,!0,o);return s.error!==null?{made:[],error:s.error}:{made:s.result.split(`
3
- `).map(f=>f.trim()).filter(f=>f.length>0),error:null}}async function lt(r,o){const l=[`_sel = {${r.map(V).join(", ")}}`,"_vl = bpy.context.view_layer","for _o in _vl.objects:"," _o.select_set(_o.name in _sel)",o===null?"_vl.objects.active = None":`_vl.objects.active = bpy.data.objects.get(${V(o)})`].join(`
4
- `),s=await te(l,!1);s.error!==null&&D().console.error(`Blender refused the selection write: ${s.error}`,"blender-outliner")}async function ne(r,o){if(r.length===0)return{destination:"Nothing is selected, so there was nothing to run it on.",persisted:!1};const l=[`targets = [bpy.data.objects[n] for n in [${r.map(V).join(", ")}]]`,"with bpy.context.temp_override(selected_objects=targets, selected_editable_objects=targets, active_object=targets[0], object=targets[0]):",` ${o}`].join(`
5
- `),{error:s}=await H(l);return s!==null?{destination:s,persisted:!1}:(await Q(r),{destination:`Blender — ${o}; the session saves the .blend`,persisted:!0})}const ot={source:"document",label:"blender",detail:"These rows are Blender's own View Layer tree, read from the engine through RNA. Editing the model is a bpy call; the eye and render columns write the engine directly."},at="This collection is excluded from the view layer (LayerCollection.exclude), so its viewport visibility is not what is hiding it. Clear the Exclude checkbox on this row first.";function we(r){return({defaultAdapter:o})=>{const l=new Set;let s=[],u=null;const f=new Map,v=new Map,x=()=>{for(const n of[...l])n()},b=()=>q().byId,O=n=>{const e=b().get(n),a=r();return e===void 0||a===null?null:e.type==="TSE_VIEW_COLLECTION_BASE"?a.root:e.object===void 0?null:a.objectForBlenderName(e.object)},E=n=>{const e=r();if(e===null)return null;for(const a of b().values())if(B(a)&&e.objectForBlenderName(a.object)===n)return a.id;return null},_=n=>{for(const e of b().values())if(B(e)&&e.object===n)return e.id;return null},g=n=>{if(b().has(n))return n;const e=Ue(o.hierarchy,n);return e===null?null:E(e)},S=n=>{const e=g(n);return e===null?null:O(e)},C=n=>{const e=S(n);return e===null?null:o.hierarchy.idForObject3D?.(e)??null},I={roots:()=>(Ve(A()),(q().tree?.rows??[]).map(e=>ge(e,null))),node:n=>{const e=q(),a=e.byId.has(n)?n:g(n),d=a===null?void 0:e.byId.get(a);return d===void 0?null:ge(d,e.parentOf.get(d.id)??null)},object3D:n=>S(n),idForObject3D:n=>E(n)};function A(){const n=b(),e=new Set;for(const a of s){const d=n.get(a)?.object;d!==void 0&&e.add(d)}return[...e]}const L=()=>{const n=[];for(const e of s){const a=S(e),d=a===null?null:o.hierarchy.idForObject3D?.(a);d&&n.push(d)}o.selection?.set(n,{intent:"exact"}),x()},M=()=>{const n=Be(),e=`${le()}\0${n.active??""}\0${[...n.selected].sort().join("")}`;if(e===u)return;u=e;const a=n.selected.filter(m=>m!==n.active);n.active!==null&&a.push(n.active);const d=a.map(_).filter(m=>m!==null);d.length===s.length&&d.every((m,k)=>m===s[k])||(s=d,L())},t={get:()=>[...s],set:n=>{s=n.map(g).filter(m=>m!==null),L();const e=b(),a=[],d=[];for(const m of s){const k=e.get(m),F=k?.object;F===void 0?d.push(k?.name??m):a.includes(F)||a.push(F)}d.length>0&&D().console.warn(`${d.join(", ")} ${d.length===1?"is":"are"} not an object, so Blender's object selection does not carry ${d.length===1?"it":"them"}. Selecting a collection sets the ACTIVE COLLECTION in Blender, which is its own gesture and not in this editor yet.`,"blender-outliner"),lt(a,a.length===0?null:a[a.length-1])}},i=n=>b().get(n)?.restrict,p={properties:n=>{const e=i(n);if(e===void 0)return[];const a=b().get(n),d=[{path:"name",label:"Name",type:"string",readonly:!B(a)}];return e.hide!==void 0&&d.push({path:"visible",label:"Show in Viewport",type:"boolean"}),e.render!==void 0&&d.push({path:"renderVisible",label:"Show in Renders",type:"boolean"}),e.exclude!==void 0&&d.push({path:"exclude",label:"Exclude from View Layer",type:"boolean"}),d},get:(n,e)=>{const a=b().get(n);if(a!==void 0){if(e==="name")return a.name;if(e==="visible")return a.restrict?.hide===void 0?void 0:!a.restrict.hide;if(e==="renderVisible")return a.restrict?.render===void 0?void 0:!a.restrict.render;if(e==="exclude")return a.restrict?.exclude}},editability:(n,e)=>{const a=b().get(n);return a===void 0?{writable:!1}:e==="name"?B(a)?{writable:!0}:{writable:!1,reason:`Renaming a ${a.struct??a.type} is not in this Outliner yet — only an object row renames here. Rename it with bpy.`}:a.notInCollection?{writable:!1,reason:"This row is a child drawn under its parent although it is not in that collection, and Blender's Outliner draws it no restriction columns."}:e==="visible"&&a.restrict?.exclude===!0?{writable:!1,reason:at}:{writable:!0}},set:async(n,e,a)=>{const d=b().get(n);if(d===void 0)return;if(e==="name"){if(!B(d))return;const k=String(a);if(k===d.name||k.length===0)return;await pe(`bpy.data.objects[${V(d.object)}]`,"name",k),await Q([k]);const F=_(k);F!==null&&t.set([F]);return}if(e==="exclude"){await fe(d.path,"exclude",a===!0);return}const m=e==="visible"?"hide":e==="renderVisible"?"render":null;m!==null&&await fe(d.path,m,a===!1)}},w={get:n=>{const e=C(n);return(e===null?void 0:o.transforms?.get(e))??Qe()},editability:n=>{const e=g(n),a=e===null?void 0:b().get(e);return B(a)&&O(a.id)!==null?{writable:!0}:{writable:!1,reason:`Only an object has a transform; this row is a ${a?.struct??a?.type??"row"}.`}},beginEdit:n=>{const e=S(n);e!==null&&!f.has(e)&&(f.set(e,e.matrixWorld.clone()),v.set(n,e),De())},apply:(n,e)=>{const a=S(n);a!==null&&(a.position.fromArray(e.position),a.quaternion.fromArray(e.rotation),a.scale.fromArray(e.scale),a.updateMatrix(),a.updateMatrixWorld(!0))},endEdit:async n=>{const e=v.get(n)??S(n);v.delete(n);const a=r();if(e===null)return;const d=f.get(e);f.delete(e);try{if(a===null||(e.updateWorldMatrix(!0,!1),d?.equals(e.matrixWorld)===!0))return;const m=a.blenderObjectName(e);if(m===null)return;const k=`bpy.data.objects[${JSON.stringify(m)}]`;try{return await pe(k,"matrix_world",Ze(e,a.root)),{destination:`Blender — ${k}.matrix_world; the session saves the .blend`,persisted:!0}}catch(F){return{destination:F instanceof Error?F.message:String(F),persisted:!1}}}finally{d&&await Pe()}}},y=n=>{const e=g(n),a=e===null?void 0:b().get(e);return B(a)?a.object:null},j=n=>({destination:n,persisted:!1}),T=async n=>{await Q(n);const e=n.map(_).filter(a=>a!==null);return e.length>0&&t.set(e),e[0]??""},P={creatableKinds:()=>Z().map(({kind:n,label:e})=>({kind:n,label:e})),create:n=>{const e=Z().find(d=>d.kind===n);if(e===void 0)return{id:"",ack:j(`${n} is not a row of Blender's Add menu that this editor adds. Its rows are: ${Z().map(d=>d.label).join(", ")}.`)};if(e.refusal!==void 0)return{id:"",ack:j(e.refusal)};const a=nt(e);return{id:"",ack:(async()=>{const{made:d,error:m}=await H(a);return m!==null?j(m):d.length===0?j(`Blender ran ${a} and created nothing. The operator reported no error, so it cancelled — most often because it wanted a file browser or a context this headless engine has no window for.`):(await T(d),{destination:`Blender — ${a}; the session saves the .blend`,persisted:!0})})()}},remove:n=>P.removeMany?.([n])??void 0,removeMany:async n=>{const e=[];for(const k of n){const F=y(k);if(F===null){const ue=g(k)===null?void 0:b().get(g(k));return j(`Only an object can be deleted here; this row is a ${ue?.struct??ue?.type??"row"}. Deleting a collection, a modifier or a vertex group is that datablock’s own bpy call.`)}e.push(F)}if(e.length===0)return j("Nothing selected to delete.");const d=[`targets = ${`[bpy.data.objects[n] for n in [${e.map(V).join(", ")}]]`}`,"with bpy.context.temp_override(selected_objects=targets, active_object=targets[0]):"," result = bpy.ops.object.delete(use_global=False)",'if "FINISHED" not in result: raise RuntimeError("Blender cancelled deleting the selected objects")'].join(`
6
- `),{error:m}=await H(d,"Delete Objects");return m!==null?j(m):(t.set([]),await Q([]),{destination:"Blender — bpy.ops.object.delete(use_global=False); the session saves the .blend",persisted:!0})},duplicate:n=>{const e=y(n);if(e===null)return{id:n,ack:j("Only an object can be duplicated here. Duplicating a collection is `bpy.ops.object.collection_instance_add`, its own gesture.")};const a=[`source = bpy.data.objects[${V(e)}]`,"with bpy.context.temp_override(selected_objects=[source], active_object=source):"," result = bpy.ops.object.duplicate(linked=False)",'if "FINISHED" not in result: raise RuntimeError("Blender cancelled duplicating the selected object")'].join(`
7
- `);return{id:n,ack:(async()=>{const{made:d,error:m}=await H(a,"Duplicate Object");return m!==null?j(m):(await T(d),{destination:`Blender — bpy.ops.object.duplicate(linked=False) on ${e}; the session saves the .blend`,persisted:!0})})()}},duplicateMany:async n=>{const e=[...new Set(n.map(y))];if(e.length===0||e.some(k=>k===null))return j("Select objects to duplicate; collections and data rows cannot be duplicated here.");const a=[`sources = [bpy.data.objects[name] for name in ${JSON.stringify(e)}]`,"with bpy.context.temp_override(selected_objects=sources, active_object=sources[0]):"," result = bpy.ops.object.duplicate(linked=False)",'if "FINISHED" not in result: raise RuntimeError("Blender cancelled duplicating the selected objects")'].join(`
8
- `),{made:d,error:m}=await H(a,"Duplicate Objects");return m!==null?j(m):(await T(d),{destination:"Blender — duplicate selected objects as one native operation; the session saves the .blend",persisted:!0})},reparent:()=>j("Reparenting is Blender's `bpy.ops.object.parent_set`, which needs a parent TYPE (Object, Object Keep Transform, Armature Deform, …) that a drag does not say. Set the parent on the object’s Relations panel, or with bpy.")},N={get documentId(){return o.documentId},get documentRootObject(){return o.documentRootObject},capabilities:Xe,provenance:ot,hierarchy:I,selection:t,inspector:p,transforms:w,structure:P,subscribe:n=>{l.add(n);const e=X(n),a=o.subscribe?.(n)??(()=>{});return()=>{l.delete(n),e(),a()}}},$={get documentId(){return N.documentId},selectedObjectNames:()=>A(),allObjectNames:()=>{const n=[];for(const e of b().values())B(e)&&n.push(e.object);return n},selectObjects:n=>{const e=n.map(_).filter(a=>a!==null);t.set(e)},rowIdForObject:n=>_(n),structure:P,subscribe:n=>{l.add(n);const e=X(n);return()=>{l.delete(n),e()}}};ee.add($);const G=$e(M),xe=X(M);return M(),{adapter:N,dispose:()=>{G(),xe(),ee.delete($),l.clear()}}}}const st=we(Ge),oe="volter.blender.area-split:",ae=new Set,se=new Map;function it(r){try{return globalThis.localStorage?.getItem(oe+r)==="1"}catch{return!1}}function de(r){let o=se.get(r);return o===void 0&&(o=it(r),se.set(r,o)),o}function he(r,o){if(de(r)!==o){se.set(r,o);try{o?globalThis.localStorage?.setItem(oe+r,"1"):globalThis.localStorage?.removeItem(oe+r)}catch{}for(const l of[...ae])l()}}function ke(r){return ae.add(r),()=>{ae.delete(r)}}const ct=[{label:"Location",call:"location=True, rotation=False, scale=False"},{label:"Rotation",call:"location=False, rotation=True, scale=False"},{label:"Scale",call:"location=False, rotation=False, scale=True"},{label:"All Transforms",call:"location=True, rotation=True, scale=True"}],dt=[{label:"Location",call:"bpy.ops.object.location_clear(clear_delta=False)"},{label:"Rotation",call:"bpy.ops.object.rotation_clear(clear_delta=False)"},{label:"Scale",call:"bpy.ops.object.scale_clear(clear_delta=False)"}],ut=[{label:"Geometry to Origin",type:"GEOMETRY_ORIGIN"},{label:"Origin to Geometry",type:"ORIGIN_GEOMETRY"},{label:"Origin to 3D Cursor",type:"ORIGIN_CURSOR"}],bt=[{submenu:"Mesh",at:"2699"},{submenu:"Curve",at:"2702"},{submenu:"Surface",at:"2704"},{submenu:"Metaball",at:"2705"},{kind:"text",at:"2706"},{kind:"point-cloud",at:"2707"},{submenu:"Volume",at:"2708"},{submenu:"Grease Pencil",at:"2709"},{separatorAt:"2711"},{kind:"armature",at:"2716"},{submenu:"Lattice",at:"2718"},{separatorAt:"2720"},{submenu:"Empty",at:"2722"},{submenu:"Image",at:"2723"},{separatorAt:"2725"},{submenu:"Light",at:"2727"},{submenu:"Light Probe",at:"2728"},{separatorAt:"2730"},{kind:"camera",at:"2735"},{separatorAt:"2737"},{kind:"speaker",at:"2739"},{separatorAt:"2741"},{submenu:"Force Field",at:"2743"},{separatorAt:"2745"},{submenu:"Collection Instance",at:"2759"}],pt="No Collections to Instance";function Y({id:r,open:o,setOpen:l,anchorRef:s,children:u}){return c.jsxs("div",{ref:s,style:{position:"relative"},children:[c.jsx(Ce,{"data-testid":`blender-menu-${r}`,"aria-expanded":o===r,onClick:()=>l(o===r?null:r),onPointerEnter:()=>{o&&l(r)},style:{textTransform:"capitalize"},children:r}),o===r&&c.jsx(Fe,{anchorRef:s,dismissBoundaryRef:s,align:"start",gap:0,clamp:!0,"aria-label":r,onDismiss:()=>l(null),children:u})]})}function ft(r,o,l){(async()=>{const s=await l;s===void 0||typeof s.destination!="string"||s.persisted!==!0&&r?.({tone:"error",title:`${o} was refused`,detail:s.destination})})()}function Se({documentId:r,notify:o}){h.useSyncExternalStore(X,le,le);const[l,s]=h.useState(null),u=h.useRef(null),f=h.useRef(null),v=h.useRef(null),x=h.useRef(null),b=h.useRef(null),O=h.useSyncExternalStore(ke,()=>r===void 0?!1:de(r),()=>!1),E=qe(r);if(E===null)return null;const _=(t,i)=>()=>{s(null),ft(o,t,i(E))},g=E.selectedObjectNames(),S=E.allObjectNames(),C=g.length===0?"Nothing is selected.":void 0,I=Z(),A=t=>c.jsx(R,{"data-testid":`blender-add-${t.kind}`,disabled:t.refusal!==void 0,title:t.refusal,onSelect:_(`Add ${t.label}`,i=>i.structure.create(t.kind).ack),children:t.label},t.kind),L=t=>I.filter(i=>i.group===t).flatMap(i=>i.separatorBefore===!0?[c.jsx(U,{},`${i.kind}-separator`),A(i)]:[A(i)]),M=t=>{if("separatorAt"in t)return c.jsx(U,{},`separator-${t.separatorAt}`);if("kind"in t){const p=I.find(w=>w.kind===t.kind);return p===void 0?null:A(p)}const i=L(t.submenu);return i.length===0?c.jsx(R,{"data-testid":"blender-add-collection-instance",disabled:!0,children:pt},t.submenu):c.jsx(W,{label:t.submenu,"data-testid":`blender-add-${t.submenu.toLowerCase().replaceAll(" ","-")}`,children:i},t.submenu)};return c.jsxs(Oe,{compact:!0,label:"Blender Object Mode menus","data-testid":"blender-object-mode-menus",ref:u,children:[c.jsx(Y,{id:"view",open:l,setOpen:s,anchorRef:f,children:c.jsxs(W,{label:"Area","data-testid":"blender-view-area",children:[c.jsx(R,{"data-testid":"blender-area-vertical-split",disabled:O||r===void 0,title:O?"This area is already split.":void 0,onSelect:()=>{s(null),r!==void 0&&he(r,!0)},children:"Vertical Split"}),c.jsx(U,{}),c.jsx(R,{"data-testid":"blender-area-close",disabled:!O,title:O?void 0:"There is no second area to close.",onSelect:()=>{s(null),r!==void 0&&he(r,!1)},children:"Close Area"})]})}),c.jsxs(Y,{id:"select",open:l,setOpen:s,anchorRef:v,children:[c.jsx(R,{"data-testid":"blender-select-all",onSelect:_("Select All",t=>t.selectObjects(S)),children:"All"}),c.jsx(R,{"data-testid":"blender-select-none",onSelect:_("Select None",t=>t.selectObjects([])),children:"None"}),c.jsx(R,{"data-testid":"blender-select-invert",onSelect:_("Select Invert",t=>t.selectObjects(S.filter(i=>!g.includes(i)))),children:"Invert"})]}),c.jsx(Y,{id:"add",open:l,setOpen:s,anchorRef:x,children:bt.map(t=>M(t))}),c.jsxs(Y,{id:"object",open:l,setOpen:s,anchorRef:b,children:[c.jsx(W,{label:"Set Origin","data-testid":"blender-object-origin",children:ut.map(t=>c.jsx(R,{"data-testid":`blender-origin-${t.type}`,disabled:t.refusal!==void 0||g.length===0,title:t.refusal??C,onSelect:_(`Set Origin ▸ ${t.label}`,i=>ne(i.selectedObjectNames(),`bpy.ops.object.origin_set(type='${t.type}')`)),children:t.label},t.type))}),c.jsx(W,{label:"Clear","data-testid":"blender-object-clear",children:dt.map(t=>c.jsx(R,{"data-testid":`blender-clear-${t.label.toLowerCase()}`,disabled:g.length===0,title:C,onSelect:_(`Clear ▸ ${t.label}`,i=>ne(i.selectedObjectNames(),t.call)),children:t.label},t.label))}),c.jsx(W,{label:"Apply","data-testid":"blender-object-apply",children:ct.map(t=>c.jsx(R,{"data-testid":`blender-apply-${t.label.toLowerCase().replace(/ /g,"-")}`,disabled:g.length===0,title:C,onSelect:_(`Apply ▸ ${t.label}`,i=>ne(i.selectedObjectNames(),`bpy.ops.object.transform_apply(${t.call})`)),children:t.label},t.label))}),c.jsx(U,{}),c.jsx(R,{"data-testid":"blender-object-duplicate",disabled:g.length===0,title:C,onSelect:_("Duplicate Objects",async t=>{const i=t.selectedObjectNames().map(p=>t.rowIdForObject(p)).filter(p=>p!==null);return t.structure.duplicateMany?.(i)}),children:"Duplicate Objects"}),c.jsx(R,{"data-testid":"blender-object-delete",disabled:g.length===0,title:C,onSelect:_("Delete",t=>{const i=t.selectedObjectNames().map(p=>t.rowIdForObject(p)).filter(p=>p!==null);return t.structure.removeMany?.(i)}),children:"Delete"})]})]})}const Yt="workspace.document",Jt="Blender Model",Xt=({documentId:r,notify:o})=>c.jsx(Se,{documentId:r,notify:o}),mt="model",qt="owned",Qt=[],ie=Te,ye=new WeakMap;function gt(r){let o=ye.get(r);return o||(o={subject:()=>{const l=J.playhead();return r.subjectLine(l===null?null:Math.floor(l))},gridScale:l=>r.gridUnitName(l),cameraView:{camera:()=>r.cameraViewCamera(),zoom:r.cameraViewZoom,pan:r.cameraViewPan,showing:l=>r.setCameraViewShowing(l),setPose:(l,s,u,f)=>{const{location:v,rotation:x}=r.blenderPose(s,u);return te(`from mathutils import Matrix, Quaternion, Vector
9
- import bpy
10
- object = bpy.data.objects[${JSON.stringify(l)}]
11
- object.matrix_world = Matrix.LocRotScale(Vector((${v.join(", ")})), Quaternion((${x.join(", ")})), object.matrix_world.to_scale())`,f,"Lock Camera to View").then(b=>{b.error!==null&&D().console.error(`Blender refused the camera's pose: ${b.error}`,"blender-camera")},b=>D().console.error(`The camera's pose was not written to Blender: ${String(b)}`,"blender-camera"))},view:(l,s,u,f)=>r.cameraView(l,s,u,f)}},ye.set(r,o),o)}function Zt(r){const{active:o,document:l,documentId:s,notify:u,publishContext:f}=r,v=l?.source?.path,x=l?.id,b=JSON.stringify([s,x,v]),[O,E]=h.useState(null),_=h.useRef({notify:u,publishContext:f});return _.current={notify:u,publishContext:f},h.useEffect(()=>{if(o===!1||!s)return;let g=!1,S;const C=v===void 0?null:{documentId:s,entryId:x,blend:v},I=We(C),A=()=>{S=_.current.publishContext?.(ie)};return E(null),(async()=>{try{if(C){if(!await He(C,A))return}else A();g||E({key:b,error:null})}catch(L){if(g)return;S?.(),S=void 0;const M=L instanceof Error?L.message:String(L);E({key:b,error:M}),_.current.notify?.({tone:"error",title:`Blender could not open ${v??"the model"}`,detail:M})}})(),()=>{g=!0,S?.(),I()}},[o,v,s,x,b]),o===!1||!s?null:O?.key!==b?c.jsx("div",{role:"status",children:"Opening model…"}):O.error?c.jsx("div",{role:"alert",children:O.error}):c.jsx(ht,{...r})}function ht(r){const{documentId:o}=r,l=h.useSyncExternalStore(ke,()=>o?de(o):!1,()=>!1),[s,u]=h.useState(null);if(h.useEffect(()=>{if(!l||!o)return;const x=`${o}#area-2`;Ne(x).drawMode===void 0&&Re(x,{drawMode:"rendered"});const b=ie.follow();return u(b),()=>{u(null),b.dispose()}},[l,o]),!o)return null;const f=l?s:null,v={position:"relative",flex:"1 1 0",minWidth:0,margin:12};return c.jsxs("div",{style:f?{position:"absolute",inset:-12,display:"flex",gap:2}:{display:"contents"},children:[c.jsx("div",{style:f?v:{display:"contents"},children:c.jsx(je,{...r,view:ie,main:!0})}),f&&c.jsxs("div",{style:{...v,marginTop:24+ce},"data-testid":"blender-second-area",children:[c.jsx(je,{...r,documentId:`${o}#area-2`,view:f.view,main:!1}),c.jsx(yt,{documentId:o,areaId:`${o}#area-2`,notify:r.notify})]})]})}const ce=26;function yt({documentId:r,areaId:o,notify:l}){h.useSyncExternalStore(Le,be,be);const s=Me(o)?.HeaderControls;return c.jsx(c.Fragment,{children:s&&c.jsxs("div",{className:"volter-dock-document-toolbar","data-testid":`document-header:${o}`,style:{position:"absolute",top:-12-ce,height:ce,left:-12,right:-12},children:[c.jsx("div",{className:"volter-dock-document-toolbar-own",children:c.jsx(Se,{documentId:r,notify:l})}),c.jsx(h.Suspense,{fallback:null,children:c.jsx(s,{documentId:o})})]})})}function je({active:r,document:o,documentId:l,surfaces:s,view:u,main:f}){const v=gt(u),x=h.useCallback(()=>({root:u.root,onChange(t){const i=u.onChange(t),p=J.subscribe(t);return()=>{i(),p()}},dispose(){}}),[u]),b=o?.source?.path,O=h.useCallback(t=>{const i=u.onChange(t),p=J.subscribe(t);let w=null;const y=()=>{w?.(),w=K().find(T=>T.documentId===l)?.onFrame(t)??null};y();const j=re(y);return()=>{i(),p(),j(),w?.()}},[l,u]),E=h.useSyncExternalStore(O,v.subject),_=h.useMemo(()=>f?st:we(()=>u),[f,u]);h.useEffect(()=>{if(f||!l)return;let t=!1;const i=()=>{if(t)return;const y=ze(l);y===null||u.cameraViewCamera()===null||(t=y.toggleCameraView())};i();const p=Ke(i),w=u.subscribeFrames(i);return()=>{p(),w()}},[f,l,u]),h.useEffect(()=>{if(!l)return;const t=u.overlayGroups(),i=()=>{const w=K().find(y=>y.documentId===l);if(w)for(const{kind:y,object:j}of t)w.setHelper(y,j)};i();const p=re(i);return()=>{p();const w=K().find(y=>y.documentId===l);for(const{kind:y}of t)w?.setHelper(y,null)}},[l,u]),h.useEffect(()=>{if(!l||!f)return;const{transport:t}=D();let i=null;const p=()=>{if(i)return;const y=t.for(l);y&&(i=J.attachTo(y))};p();const w=t.subscribe(p);return()=>{w(),i?.()}},[l,f]),h.useEffect(()=>{if(!l)return;const t=()=>K().find(N=>N.documentId===l);let i,p=null;const w=new Ye,y=()=>t()?.rig().drawCamera()??w,j=()=>{const N=t();N!==i&&(p?.(),p=N?N.onFrame(()=>u.refreshRendered()):null,i=N);const{lighting:$}=Ie(l);u.holdRendered($.source==="scene"&&N?y:null),u.setWorkbench($.source==="studio"&&$.studioPreset===_e.id)};j();const T=Ae(j),P=re(j);return()=>{T(),P(),p?.(),u.holdRendered(null),u.setWorkbench(!1)}},[l,u]);const g=h.useRef(null),S=t=>t.button===2&&t.shiftKey&&t.target instanceof HTMLCanvasElement,C=t=>{if(!S(t)){g.current=null;return}t.preventDefault(),t.stopPropagation(),g.current={id:t.pointerId,x:t.clientX,y:t.clientY},t.isTrusted&&t.target.setPointerCapture(t.pointerId)},I=()=>{g.current=null},A=t=>{const i=g.current;if(i===null||t.pointerId!==i.id||t.button!==2||(g.current=null,t.preventDefault(),t.stopPropagation(),Math.hypot(t.clientX-i.x,t.clientY-i.y)>3))return;const p=u.placeCursor(t.clientX,t.clientY,t.target);if(p===null)return;const[w,y,j]=p.location,[T,P,N,$]=p.rotation;te(`from mathutils import Matrix, Quaternion, Vector
12
- bpy.context.scene.cursor.matrix = Matrix.LocRotScale(Vector((${w}, ${y}, ${j})), Quaternion((${T}, ${P}, ${N}, ${$})), None)`,!1,"Set 3D Cursor").then(G=>{G.error!==null&&D().console.error(`Blender refused the 3D cursor: ${G.error}`,"blender-cursor")},G=>D().console.error(`The 3D cursor was not written to Blender: ${String(G)}`,"blender-cursor"))},L=t=>{S(t)&&t.preventDefault()};if(!l)return null;const M=s.Object3DAuthoring;return c.jsx("div",{style:{display:"contents"},onPointerDownCapture:C,onPointerUpCapture:A,onPointerCancelCapture:I,onLostPointerCaptureCapture:I,onContextMenuCapture:L,children:c.jsx(M,{active:r??!0,documentId:l,sourcePath:b??"blender:runtime",displayName:o?.label??"Model",...E===null?{}:{subject:E},gridScale:v.gridScale,cameraView:v.cameraView,build:x,audit:!1,authoring:_,cameraDirection:[.8187,.4458,.3617],openingFit:3,openingView:u.savedView(),presentation:(()=>{const t=u.savedView();return t?{camera:{fov:ve(t.lens)}}:null})(),stageKind:mt,dressing:{environment:!1,keyLight:!1,viewLocked:u.studioLights()}})})}export{Xt as Toolbar,Zt as default,mt as documentKind,Qt as inspectorBuiltins,qt as inspectorRail,Yt as point,Jt as title};
@@ -1,2 +0,0 @@
1
- import{a as f,S as p,P,b as O,s as x,A as S,o as v}from"./worker-CJIsrsP6.js";import{s as I}from"./session-kSIjcXJT.js";const u="/bw",A=`${p}/frame.bin`,k=new Set(["scripts/startup/vgai_three.py","scripts/startup/volter_three.py"]);async function R(e){const o=f(`wali/${e}`);try{return await import(o)}catch(l){throw new Error(`The substrate skew needs ${e}, which this editor serves from the WALI pack directory beside blender.wasm (${o}): ${l instanceof Error?l.message:String(l)}`)}}async function F(e,o){const l=performance.now(),r=await fetch(f("runtime.idx"));if(!r.ok)throw new Error(`${S}/runtime.idx answered ${r.status}`);const n=await r.json(),i=await fetch(f("runtime.bin"));if(!i.ok)throw new Error(`${S}/runtime.bin answered ${i.status}`);const s=new Uint8Array(await i.arrayBuffer());let a=0;for(const t of n.files){if(a+t.size>s.byteLength)throw new Error(`Blender runtime ${t.path}: bytes ${a}..${a+t.size} lie outside the ${s.byteLength}-byte runtime blob`);if(k.has(t.path)){a+=t.size;continue}const w=`${u}/${t.path}`;e.mkdirSync(w.slice(0,w.lastIndexOf("/")),{recursive:!0}),e.writeFileSync(w,s.subarray(a,a+t.size)),a+=t.size}if(a!==s.byteLength)throw new Error(`Blender runtime index accounts for ${a} of the ${s.byteLength} bytes served`);const h=Math.round(performance.now()-l);return o("log",`blender: staged Blender's ${n.files.length}-file runtime tree in ${h} ms`),{files:n.files.length,bytes:s.byteLength,ms:h}}async function M(e,o){const l=performance.now(),r=await fetch(f("runtime.idx"));if(!r.ok)throw new Error(`${S}/runtime.idx answered ${r.status}`);const n=await r.json(),i=n.files.reduce((d,m)=>d+m.size,0),s=await fetch(f("runtime.bin"));if(!s.ok||!s.body)throw new Error(`${S}/runtime.bin answered ${s.status}`);const a=new SharedArrayBuffer(i),h=new Uint8Array(a);let t=0;const w=s.body.getReader();for(;;){const{done:d,value:m}=await w.read();if(d)break;if(t+m.byteLength>i)throw new Error(`Blender runtime blob is longer than the ${i} bytes its index accounts for`);h.set(m,t),t+=m.byteLength}if(t!==i)throw new Error(`Blender runtime index accounts for ${i} bytes; the blob served ${t}`);const E=e(u,n.files,a,{mtimeMs:Date.now(),include:d=>!k.has(d)});return o("log",`blender: shared Blender's ${n.files.length}-file runtime tree in ${Math.round(performance.now()-l)} ms`),E}function D(e){const o=new Set,l=()=>{for(const r of[...o])r()};return e.on?.("change",l),e.on?.("delete",l),{...e.on?{changed:r=>new Promise(n=>{const i=()=>{clearTimeout(s),o.delete(i),n()},s=setTimeout(i,r);o.add(i)})}:{},readFile:r=>e.readFile(r),writeFile:(r,n)=>(e.writeFileSync(r,n),Promise.resolve()),mkdirTree:async r=>e.mkdirSync(r,{recursive:!0}),readdir:async r=>e.readdirSync(r),stat:async r=>{if(!e.existsSync(r))return null;const n=e.statSync(r);return{size:n.size,mode:n.mode&4095|(n.isDirectory()?16384:32768),mtimeMs:n.mtimeMs}},unlink:async r=>e.unlinkSync(r)}}async function z(e,o){const l=performance.now(),[r,n,i]=await Promise.all([R("browser-wali/worker-program.js"),R("browser-runtime/browser-memory-filesystem.js"),R("browser-wali/shared-file-layer.js").catch(()=>({}))]),s=r.BrowserWaliWorkerProgram,a=n.BrowserMemoryFileSystem;if(!s||!a)throw new Error("The substrate modules this editor served do not export BrowserWaliWorkerProgram and BrowserMemoryFileSystem; the WALI pack directory holds a browser-substrate this engine does not know.");const h=r.preloadWaliModule;h&&o.integrity&&h(f("blender.wasm"),o.integrity).catch(()=>{});const t=new a;for(const c of["/tmp","/root","/work",p,...P,e.project])t.mkdirSync(c,{recursive:!0});const w=i.sharedFileLayerFromIndex,E=w?await M(w,e.log):void 0;E||await F(t,e.log),t.writeFileSync(O,I);const d=o.workers??{pool:16,blender:4},m=new s(t,{url:f("blender.wasm"),...o.integrity?{integrity:o.integrity}:{},cwd:"/work",env:{HOME:"/root",TMPDIR:"/tmp",PATH:"/usr/bin:/bin",BLENDER_SYSTEM_RESOURCES:u,BLENDER_SYSTEM_SCRIPTS:`${u}/scripts`,BLENDER_SYSTEM_DATAFILES:`${u}/datafiles`,BLENDER_SYSTEM_PYTHON:`${u}/python`,PYTHONPATH:`${u}/python/lib/numpy313.zip:${u}/python/lib/wheels313.zip`,VOLTER_SESSION_ROOT:p,VOLTER_EXPORT_BUFFER_PATH:A,OPENIMAGEIO_THREADS:"1"},...E?{layers:[E]}:{},privateRoots:["/tmp"],threadPoolSize:d.pool,network:{allowedHosts:[],maxConnections:0,maxBytes:0}});let g=null,y=null;const $=c=>{for(const b of c.split(`
2
- `))b!==""&&(b.startsWith("@@VOLTER-READY ")&&(g=b.slice(15)),e.log(b.startsWith("@@VOLTER-WARN")||b.startsWith("@@VOLTER-ERROR")?"error":"log",b))};for(m.run(["/blender","-b","--factory-startup","-noaudio","--python-use-system-env","-t",String(d.blender),"--python",O],{onStdout:$,onStderr:$,onDiagnostic:c=>e.log("error",`@@VOLTER-ERROR ${c}`)}).then(c=>{y=`Blender exited ${c.exitCode}`},c=>{y=c instanceof Error?c.message:String(c)}).finally(()=>{y!==null&&e.log("error",`@@VOLTER-ERROR the Blender program ended: ${y}`)});g===null;){if(y!==null)throw new Error(`Blender never reached its session: ${y}`);await x(5)}const B=performance.now()-l,L=JSON.parse(g);e.log("log",`blender: the substrate skew is up (${d.blender} Blender threads in a pool of ${d.pool}; Blender is SERIAL without -t N and says so)`);const T=D(t),{request:_}=v(T,e,()=>y);return{skew:"wali",banner:L,files:T,request:_,readArena:()=>t.readFile(A),bootMs:B,memoryBytes:()=>null,releasedPayloadBytes:null}}export{z as startWaliBlenderEngine};
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-V4J7xfRg.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/editor-api-WeHVNlEo.js","assets/game-network-CAH_Jsh6.js","assets/index-OZVqp6xS.js","assets/index-Da9JhEvW.js","assets/native-debug-module-JJOFtIVz.js","assets/native-entry-surface-BE8LJNdu.js","assets/debug-registry-xQJcVubm.js","assets/contract-system-adapters-rVGdworX.js","assets/game-contract-seams-DrYyE5PX.js","assets/seeded-random-tpdJjdqy.js","assets/game-audio-BeCyd0Ha.js","assets/rapier-physics-adapter-CaZqWLu0.js","assets/events-156d8d12.esm-CYeuVCYr.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/index-bQE2NA0D.js","assets/live-project-verbs-CnknlUlT.js","assets/capability-coverage-wd6bAhv3.js","assets/edit-mode-authoring-CSt3zzmS.js","assets/json-history-resource-CH2nzMZh.js","assets/binding-resolver-DUz8C8Fs.js","assets/adapter-surface-Y37Nzcyw.js","assets/structural-signature-Dc7skRiy.js","assets/webgl-frame-capture-DdJkM2mi.js","assets/realm-services-u0mnjXU9.js","assets/canvas-entry-runtime-DskaohHK.js","assets/three-ingest-runtime-BnRF_nJN.js","assets/EffectComposer-BEAt0PtQ.js","assets/CopyShader-BzTUYzf6.js","assets/ShaderPass-DTnDQXm0.js","assets/Pass-D1MRT672.js","assets/CSS3DRenderer-BsAqfavI.js","assets/relative-path-guard-GiM7Lsz8.js","assets/react-root-BHA-cdrW.js","assets/editor-presentation-activity-CqJH4G9t.js","assets/active-ingest-D_ryI_R4.js","assets/ingest-source-persistence-CQOJeGhj.js","assets/pixi-story-model-DNkfnWUV.js","assets/surface-content-Dg9Kkazf.js","assets/viewport-root-presentation-DJLpUuf0.js","assets/mounted-authoring-C47L5H5t.js","assets/entity-object-V13bGmay.js","assets/user-data-CifDDvSr.js","assets/workspace-arrangement-B_OcbQbj.js","assets/three-contract-Dkt6PmWY.js","assets/three-BQfhEwUz.js","assets/editor-layers-CjeYrUlm.js","assets/component-instance-root-Cw_-ajBX.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/three-authoring-adapter-COBwREQO.js","assets/source-persistence-backend-uyd6NiWD.js","assets/three-projection-core-PQm-CO61.js","assets/body-marks-C1LxJtQb.js","assets/user-data-CODoGZqA.js","assets/object-marks-BnvSuCTt.js","assets/structural-ids-BOo2BRoY.js","assets/object3d-authoring-subject-XccsO0xG.js","assets/r3f-physics-binding-DZSIB0d_.js","assets/deferred-ingest-play-CEnsC3uN.js","assets/rrweb-Cd2ifIRP.js","assets/react-world-authoring-adapter-OR1SW2jI.js","assets/board-guides-B6TEPOPi.js","assets/relative-import-specifier-DXWVQf0o.js","assets/story-arg-descriptors-Ek86ExX7.js","assets/inspect-DiSjB-N1.js","assets/inference-diagnostics-DoZQ1mpg.js","assets/writer-tw6EcuVO.js","assets/three-state-C7khRIQE.js","assets/editor-shell-store-DckLm6m8.js","assets/output-pass-HurwNl0G.js","assets/viewport-door-BCXEYmon.js","assets/game-surface-defaults-D8S4cRxi.js"])))=>i.map(i=>d[i]);
2
- import{aa as _,ja as $,jb as N,jc as f,jd as g,je as V,_ as R,jf as U,$ as B,aB as C,jg as M,Y as j,jh as G,J as k}from"./index-V4J7xfRg.js";import{g as l,a as b,A as D,B as F,C as O,d as x,D as q,E as H}from"./game-network-CAH_Jsh6.js";import{e as z,c as K}from"./gameplay-replay-WyopKGyB.js";import{n as A,s as h}from"./command-results-CUQD49AB.js";import{z as W,i as y}from"./active-ingest-D_ryI_R4.js";import{g as J}from"./capability-coverage-wd6bAhv3.js";import{w as X,H as Y}from"./debug-bridge-DdCJSEni.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"./index-OZVqp6xS.js";import"./index-Da9JhEvW.js";import"./native-debug-module-JJOFtIVz.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-xQJcVubm.js";import"./contract-system-adapters-rVGdworX.js";import"./game-contract-seams-DrYyE5PX.js";import"./seeded-random-tpdJjdqy.js";import"./game-audio-BeCyd0Ha.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./index-bQE2NA0D.js";import"./live-project-verbs-CnknlUlT.js";import"./edit-mode-authoring-CSt3zzmS.js";import"./json-history-resource-CH2nzMZh.js";import"./binding-resolver-DUz8C8Fs.js";import"./adapter-surface-Y37Nzcyw.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./realm-services-u0mnjXU9.js";import"./canvas-entry-runtime-DskaohHK.js";import"./three-ingest-runtime-BnRF_nJN.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./relative-path-guard-GiM7Lsz8.js";import"./react-root-BHA-cdrW.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-DJLpUuf0.js";import"./mounted-authoring-C47L5H5t.js";import"./entity-object-V13bGmay.js";import"./user-data-CifDDvSr.js";import"./workspace-arrangement-B_OcbQbj.js";import"./three-contract-Dkt6PmWY.js";import"./three-BQfhEwUz.js";import"./editor-layers-CjeYrUlm.js";import"./component-instance-root-Cw_-ajBX.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./three-authoring-adapter-COBwREQO.js";import"./source-persistence-backend-uyd6NiWD.js";import"./ingest-source-persistence-CQOJeGhj.js";import"./three-projection-core-PQm-CO61.js";import"./body-marks-C1LxJtQb.js";import"./user-data-CODoGZqA.js";import"./object-marks-BnvSuCTt.js";import"./structural-ids-BOo2BRoY.js";import"./object3d-authoring-subject-XccsO0xG.js";import"./r3f-physics-binding-DZSIB0d_.js";import"./deferred-ingest-play-CEnsC3uN.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-OR1SW2jI.js";import"./board-guides-B6TEPOPi.js";import"./relative-import-specifier-DXWVQf0o.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-DiSjB-N1.js";import"./inference-diagnostics-DoZQ1mpg.js";import"./writer-tw6EcuVO.js";import"./three-state-C7khRIQE.js";import"./editor-shell-store-DckLm6m8.js";import"./output-pass-HurwNl0G.js";import"./viewport-door-BCXEYmon.js";import"./game-surface-defaults-D8S4cRxi.js";import"./output-DK8waum9.js";const E=()=>_().debug!=null;function d(e,t,s){const a=new Error(t);return a.code=e,s&&(a.data=s),a}function S(e){return Array.isArray(e)?new Set(e.filter(t=>!!(t&&typeof t=="object"&&typeof t.name=="string")).map(t=>t.name)):new Set}function Q(e,t,s,a,i){if(e==="commands"){const c=S(t);return Array.isArray(t)&&[...a].every(o=>c.has(o))}if(e==="providers"){const c=S(t);return Array.isArray(t)&&[...i].every(o=>c.has(o))}return s?e==="state"?i.has(s):e==="invoke"?a.has(s):!1:!1}function T(e,t,s){const a=W(),i=a?.systems;if(!a||!i)return;const c=new Set((i.commands??[]).map(n=>n.name)),o=new Set((i.state??[]).map(n=>n.name));Q(e,t,s,c,o)&&f({seam:"contract.systems",subject:"game",epoch:J(a),stage:"operation",outcome:"pass",source:"consumer",detail:`the session wire consumed contract systems through debug.${e}`})}async function Z(e,t,s){let a;try{a=$(s).debug}catch(o){throw o instanceof N?d("INSTANCE_UNRESOLVED",`session wire: "${e}" — ${o.message}`,{instances:o.instances}):o}const i=()=>{if(!a)throw d("DEBUG_ADAPTER_UNAVAILABLE",`session wire: "${e}" — this game exposes no debug adapter`);return a},c=(o,n,r)=>{const u=i(),m=g(u);try{const p=r();return f({seam:`system.debug.${o}`,subject:"game",epoch:m,stage:n,outcome:"pass",source:"consumer",detail:`the session wire called debug.${o} and received its result`}),f({seam:"system.debug",subject:"game",epoch:m,stage:"operation",outcome:"pass",source:"consumer",detail:"the session wire consumed the mounted debug adapter"}),T(o,p,t[0]),p}catch(p){throw f({seam:`system.debug.${o}`,subject:"game",epoch:m,stage:n,outcome:"fail",source:"consumer",detail:`the session wire called debug.${o} and it failed: ${p instanceof Error?p.message:String(p)}`}),p}};switch(e){case"state":return c("state","operation",()=>i().state(t[0]));case"stateAll":return c("stateAll","operation",()=>i().stateAll());case"providers":return c("providers","operation",()=>i().providers());case"commands":return c("commands","operation",()=>i().commands());case"events":return c("events","operation",()=>i().events(t[0]));case"snapshot":{const o=i();return{time:c("state","operation",()=>o.state("time")),state:c("stateAll","operation",()=>o.stateAll()),events:c("events","operation",()=>o.events(t[0])),pageErrors:V()}}case"invoke":{const o=t[0],n=t[1]??[];try{const r=await i().invoke(o,n),u=i();return f({seam:"system.debug.invoke",subject:"game",epoch:g(u),stage:"effect",outcome:"pass",source:"consumer",detail:`the session wire invoked debug command "${o}" and received its result`}),f({seam:"system.debug",subject:"game",epoch:g(u),stage:"operation",outcome:"pass",source:"consumer",detail:"the session wire consumed the mounted debug adapter"}),T("invoke",r,o),r}catch(r){const u=i();throw f({seam:"system.debug.invoke",subject:"game",epoch:g(u),stage:"effect",outcome:"fail",source:"consumer",detail:`the session wire invoked debug command "${o}" and it failed: ${r instanceof Error?r.message:String(r)}`}),r}}case"runTicks":{const o=l();if(!o?.runTicks)throw d("RUN_TICKS_UNAVAILABLE","this play session has no first-party Game to run ticks on");const n=t[0],r=t[1];o.runTicks(n,r);return}case"runTicksSettled":{const o=l();if(!o?.runTicksSettled)throw d("RUN_TICKS_UNAVAILABLE","this play session has no first-party Game to run ticks on");const n=t[0],r=t[1];await o.runTicksSettled(n,r);return}case"input.setVirtualAction":case"input.tapVirtualAction":case"input.clearVirtualActions":case"input.startRecording":case"input.stopRecording":case"input.isRecording":{const o=l(),n=e==="input.setVirtualAction"?t[2]:e==="input.tapVirtualAction"?t[1]:t[0],r=o?o.getInputTarget(n):null;if(!r)throw d("DEBUG_INPUT_UNAVAILABLE",`session wire: ${e}() has no virtual-input target wired — no root entry exports \`debug.input\` (the game's own input door), or none has mounted yet`);if(e==="input.setVirtualAction")return r.setVirtualAction(t[0],t[1]);if(e==="input.tapVirtualAction")return r.tapVirtualAction(t[0]);if(e==="input.clearVirtualActions"){r.clearVirtualActions();return}if(e==="input.startRecording"){r.startInputRecording();return}if(e==="input.stopRecording"){r.stopInputRecording();return}return r.isInputRecording()}case"input.scheduleActionAtTick":{const o=l(),n=t[0],r=t[1],u=t[2],m=t[3],p=o?o.getInputTarget(m):null;if(!p)throw d("DEBUG_INPUT_UNAVAILABLE","session wire: input.scheduleActionAtTick() has no virtual-input target wired — no root entry exports `debug.input` (the game's own input door), or none has mounted yet");return p.scheduleActionAtTick(n,r,u)}case"input.injectPointerDelta":case"input.injectPointerPosition":{const o=l(),n=t[0],r=t[1],u=t[2],m=o?o.getInputTarget(u):null;if(!m)throw d("DEBUG_INPUT_UNAVAILABLE",`session wire: ${e}() has no virtual-input target wired — no root entry exports \`debug.input\` (the game's own input door), or none has mounted yet`);e==="input.injectPointerDelta"?m.injectPointerDelta(n,r):m.injectPointerPosition(n,r);return}case"holdFor":{const o=l(),n=t[2],r=o?o.getInputTarget(n):null;if(!r)throw d("DEBUG_INPUT_UNAVAILABLE","session wire: holdFor() has no virtual-input target wired — no root entry exports `debug.input` (the game's own input door), or none has mounted yet");const u=t[0],m=t[1],p=r.setVirtualAction(u,!0);if(!p.delivered)return r.clearVirtualActions(),{delivered:!1,reason:p.reason};const{stalled:v,starvedWithoutDriver:w}=await X(i(),m,o?.runTicks?L=>o.runTicks?.(L,{render:"last"}):void 0);return r.clearVirtualActions(),v?{delivered:!1,reason:w?Y:"play stopped during hold"}:{delivered:!0}}default:throw d("UNKNOWN_BRIDGE_METHOD",`session wire: unknown bridge method "${e}"`)}}async function ee(e){if(!b()&&!E())return y()?{ok:!1,error:"this ingest mount is live, but it publishes no debug plane — the mount installs no SystemAdapters.debug, so there is nothing to enumerate, read or drive through the game seam. Starting play will not change that; the game itself must declare the volter game contract (or carry a contract shim beside it) for these calls to have an answer."}:A();const t=e.method,s=e.callArgs??[];try{const a=e.instance;return{ok:!0,data:{result:await Z(t,s,a)}}}catch(a){return h(a)}}async function P(e){const{liveCanvasFrame:t}=await R(async()=>{const{liveCanvasFrame:s}=await import("./index-V4J7xfRg.js").then(a=>a.u0);return{liveCanvasFrame:s}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]));return t(e)}function te(){const e=l();e?.loop.liveness==="loop-starved"&&e.runTicks?.(1,{render:"last"})}function I(e,t){const s=re();return{ok:!0,data:{base64:e,mimeType:"image/png",composite:t.composite,...t.layers?{layers:t.layers}:{},...t.flatness?{flatness:t.flatness}:{},...t.loopRecoveryFrame?{loopRecoveryFrame:!0}:{},...s?{recording:s}:{}}}}function re(){const e=O();return e?{path:e.path,startedAt:e.startedAt,notice:[`This run is being RECORDED — the still above is one frame of ${e.path}.`,"A still cannot answer a question about a moving game (did the jump land, did the shot","register). If that is the question, read the clip:","",` recording: ${e.path}${e.rotates?` (the next ${k("play")} replaces this file)`:" (named — never rotated)"}`,...e.format==="canvas-dom"?[` HUD replay: ${e.replayPath}`," The raw WebM contains the canvas only. Reconstruct HUD stills with"," editor.recording.captureReplay, or export a full video with editor.recording.exportReplay."]:[],` startedAt: ${e.startedAt} (clip offset 0)`,` play log: ${e.logFile===null?"(none — nothing is logging this run)":`logs/${e.logFile}`} (event timestamps → clip offsets)`,"","THE BAR for a temporal question: examine AT LEAST 10 frames spanning no more than 5","seconds around the moment. One frame, or ten frames spread across the run, is the same","guess a single screenshot was.","",`The clip is finalized and readable when play stops — ${k("stop")}, or the idle`,`auto-stop after ${Math.round(e.idleAutoStopMs/1e3)}s with no session command and no player input.`].join(`
3
- `)}:null}async function oe(e){if(!b()&&!E()&&!y())return A();const t=e.instance,s=D(t),a=F(t),i=U(s).medium,c=l();let o=!1,n=null;if(a&&c?.loop.liveness==="loop-starved")if(e.refreshStarvedFrame===!0&&c.runTicks)try{c.runTicks(1,{render:"last"}),o=!0}catch(r){return h(r)}else return{ok:!1,error:"cannot capture a fresh game frame while the host loop reports 'loop-starved' — inspect the separate visibility readings, let presentation resume, or request a deterministic loop-recovery frame",data:{code:"BRIDGE_SCREENSHOT_STALE"}};if(s&&typeof Image<"u"&&typeof XMLSerializer<"u"&&typeof s.getBoundingClientRect=="function")try{const r=await B(s,{canvasFrame:P,projectRoot:C()?.rootPath,...i==="unknown"?{}:{presentsOnCanvas:i==="canvas"}});if(r.layers.canvases===0&&r.layers.domOverlays===0)throw new M(i==="dom"?"dom-overlay":"composite-output","no game layers were mounted");return I(r.base64,{composite:!0,layers:r.layers,flatness:r.flatness,loopRecoveryFrame:o})}catch(r){n=r,j.warn(`Full-stack screenshot failed; returning the canvas-only fallback — ${r instanceof Error?r.message:String(r)}`,"screenshot")}if(!a){const r=n instanceof Error?n.message:String(n);return{ok:!1,error:n!==null?`full game-stack capture failed — ${r}; no canvas layer is available as a fallback`:y()?"the ingest mount is live but no DOM overlay or canvas layer is mounted for capture":"no play-mode DOM overlay or canvas layer is mounted yet",data:{code:"BRIDGE_SCREENSHOT_UNAVAILABLE"}}}try{const r=await R(()=>import("./index-V4J7xfRg.js").then(w=>w.u0),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),u=r.readablePngSource(await r.liveCanvasFrame(a))??a,m=u.toDataURL("image/png"),p=m.indexOf(","),v=p>=0?m.slice(p+1):m;return I(v,{composite:!1,flatness:G(u,a.ownerDocument),loopRecoveryFrame:o})}catch(r){return{ok:!1,error:`bridge-screenshot: canvas layer capture failed — ${r instanceof Error?r.message:String(r)}`+(n===null?"":`; full game-stack capture also failed — ${n instanceof Error?n.message:String(n)}`),data:{code:"BRIDGE_SCREENSHOT_UNAVAILABLE"}}}}const Vt="workspace.command",Ut={"bridge-call":{timeoutMs:6e4,derivedRefresh:"always",handle:ee},"bridge-screenshot":{timeoutMs:15e3,derivedRefresh:"if-content-changed",handle:oe},"bridge-recording-start":{timeoutMs:15e3,derivedRefresh:"none",handle:async e=>{if(!b()&&!E()&&!y())return A();const t=D();if(!t)return{ok:!1,error:"no play-mode game surface is mounted yet"};const s=_().audio?.acquireRecordingStream?.()??null;try{return{ok:!0,data:{...await q(t,{fps:typeof e.fps=="number"?e.fps:void 0,format:e.format==="canvas-dom"||e.format==="composite-webm"?e.format:void 0,name:typeof e.name=="string"||e.name===null?e.name:void 0,canvasFrame:P,refreshFrame:te,audio:s})}}}catch(a){return h(a)}}},"bridge-recording-stop":{timeoutMs:6e4,derivedRefresh:"none",handle:async()=>{try{return{ok:!0,data:{...await x()}}}catch(e){return h(e)}}},"bridge-recording-timeline":{derivedRefresh:"none",handle:()=>{const e=H();return e===null?{ok:!1,error:"no gameplay recording is active"}:{ok:!0,data:{...e}}}},"bridge-recording-replay-capture":{timeoutMs:6e4,derivedRefresh:"none",handle:async e=>{try{return typeof e.replayPath!="string"?{ok:!1,error:"replayPath is required"}:typeof e.positionMs!="number"||!Number.isFinite(e.positionMs)?{ok:!1,error:"finite positionMs is required"}:{ok:!0,data:{...await K(e.replayPath,e.positionMs)}}}catch(t){return h(t)}}},"bridge-recording-replay-export":{timeoutMs:6e5,derivedRefresh:"none",handle:async e=>{try{if(typeof e.replayPath!="string")return{ok:!1,error:"replayPath is required"};const{blob:t,...s}=await z({replayPath:e.replayPath,...typeof e.fps=="number"?{fps:e.fps}:{},...typeof e.startMs=="number"?{startMs:e.startMs}:{},...typeof e.endMs=="number"?{endMs:e.endMs}:{}}),{beginGameplayRecordingSink:a,appendGameplayRecordingChunk:i,finishGameplayRecordingSink:c,abortGameplayRecordingSink:o}=await R(async()=>{const{beginGameplayRecordingSink:r,appendGameplayRecordingChunk:u,finishGameplayRecordingSink:m,abortGameplayRecordingSink:p}=await import("./editor-api-WeHVNlEo.js");return{beginGameplayRecordingSink:r,appendGameplayRecordingChunk:u,finishGameplayRecordingSink:m,abortGameplayRecordingSink:p}},__vite__mapDeps([10,0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81])),n=await a({startedAt:new Date().toISOString(),mimeType:"video/webm",purpose:"export",name:typeof e.name=="string"?e.name:`replay-export-${Date.now()}`});try{for(let r=0,u=0;r<t.size;r+=4*1024*1024,u++)await i(n,u,t.slice(r,r+4*1024*1024));await c(n,"post-processed canvas and DOM recording")}catch(r){throw await o(n),r}return{ok:!0,data:{...s,path:n.path}}}catch(t){return h(t)}}}};export{Ut as commands,Vt as point};
@@ -1 +0,0 @@
1
- import{aq as s}from"./index-V4J7xfRg.js";let e={document:null,file:null,oid:null,selection:[],camera:null,gesture:null},t="",n=!1,i=!1;const o=100;function r(){n||i||(n=!0,globalThis.setTimeout(()=>{n=!1;const l=JSON.stringify(e);l!==t&&(t=l,i=!0,s(e).catch(()=>{t=""}).finally(()=>{i=!1,JSON.stringify(e)!==t&&r()}))},o))}function u(l){e={...e,...l},r()}export{u as r};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ui-board-document-B_-K9luq.js","assets/index-V4J7xfRg.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css","assets/design-time-layers-hmGqBp06.js","assets/root-stacking-BEd9ZvxC.js","assets/edit-mode-authoring-CSt3zzmS.js","assets/design-time-mount-registry-DUpXCg1U.js","assets/react-story-board-CT1_3sk_.js","assets/game-surface-defaults-D8S4cRxi.js","assets/world-documents-Bx3j867R.js","assets/react-canvas-navigation-L_mOnybL.js","assets/component-board-registry-DrIa2csL.js","assets/surface-state-DrM3wsrr.js","assets/board-guides-B6TEPOPi.js","assets/CanvasSceneViewport-CfOuQiQ0.js","assets/RootSelectionOverlay-C6Wu8nIs.js","assets/eyedropper-session-bjPXnfeX.js","assets/layered-pick-BUr1U8lU.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/inspect-DiSjB-N1.js","assets/inference-diagnostics-DoZQ1mpg.js","assets/Toolbar-BEBQdxRz.js","assets/transform-mode-request-DWM6BdRA.js","assets/TransientHint-CzsdY8W6.js","assets/ReactCanvasControls-BL2tOUj6.js","assets/story-media-presence-SGlp_afL.js"])))=>i.map(i=>d[i]);
2
- import{r as a}from"./component-board-registry-DrIa2csL.js";import{dK as s,J as n,_ as i,Y as c,ar as d,eH as l}from"./index-V4J7xfRg.js";import{s as m,g as p}from"./story-media-presence-SGlp_afL.js";const t="UI",u={medium:"dom",owner:"@volter/editor-game/react/ui-board",documentId:s,title:t,presence:()=>l()?p().dom?"present":"absent":null,subscribe:o=>{const e=m(o),r=d(o);return()=>{e(),r()}},install:async o=>{try{const{installUiBoard:e}=await i(async()=>{const{installUiBoard:r}=await import("./ui-board-document-B_-K9luq.js");return{installUiBoard:r}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]));e(o)}catch(e){throw c.error(`Failed to load the ${t} board: ${String(e)}`,"scene"),e}},absentReason:()=>`This project has no ${t} board (${s}): board presence keys on STORIES, not on roots, and none of this project's stories declares the "dom" medium. Declare it — a manifest root entry naming the story's module, or a \`volter.adapter.ts\` regionInclude that covers it — and the board appears. ${n("console")} names every story it could not place.`},_="workspace.service";function b(){return a(u)}const h=Object.freeze(Object.defineProperty({__proto__:null,point:_,start:b},Symbol.toStringTag,{value:"Module"}));export{t as U,h as c};
@@ -1 +0,0 @@
1
- import{e as o,b as a,u as l,c as u}from"./fork-menu-Bthg9viY.js";import{ff as c,aC as i,fg as p,fh as m,fi as g,fj as f}from"./index-V4J7xfRg.js";import"./instance-fork-actions-D3sRzS3K.js";import"./editor-shell-store-DckLm6m8.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-CjeYrUlm.js";import"./workspace-arrangement-B_OcbQbj.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-CifDDvSr.js";import"./entity-object-V13bGmay.js";import"./three-contract-Dkt6PmWY.js";const I="Reveal Internals",E="Hide Internals";function s(n,e){const t=n;return typeof t.hasInternals!="function"||!t.hasInternals(e)||p(t,m()).isInternal(e)?null:{label:f(e)?E:I,toggle:()=>{g(e)}}}let r=null;function R(){r||(r=c(({nodeId:n,store:e})=>s(i(e),n)!==null,({nodeId:n,store:e})=>{const t=s(i(e),n);return t?[{label:t.label,action:()=>{t.toggle(),e.notifyIngestEdit()}}]:[]}))}function A(){r?.(),r=null}const V="workspace.service";function q(){return o(),a(),R(),()=>{l(),u(),A()}}export{V as point,q as start};
@@ -1 +0,0 @@
1
- import{Z as e,a2 as r,c6 as i,c7 as a,c8 as p,c9 as c}from"./index-V4J7xfRg.js";import{ca as Ot,cb as Ht,cc as Ut,cd as qt,ce as Bt,cf as Jt,cg as Mt,b1 as Vt,ch as Zt,ci as _t,cj as zt,ck as Kt,cl as Nt,a_ as Qt,cm as Xt,cn as Yt,co as te,cp as ee,cq as re,cr as oe,cs as se,ct as ie,cu as ae,cv as pe,cw as ce,cx as me,cy as ne,cz as le,cA as de,cB as ge,cC as ue,cD as Ee,cE as ye,cF as Se,cG as Pe,cH as je,cI as ve,cJ as be,cK as fe,cL as he,cM as Ae,cN as ke,cO as we,cP as Ce,cQ as Re,cR as xe,cS as Fe,cT as Te,cU as Le,cV as De,cW as Ge,a$ as We,cX as $e,cY as Ie,cZ as Oe,c_ as He,c$ as Ue,d0 as qe,d1 as Be}from"./index-V4J7xfRg.js";import{o as Me,q as Ve,t as Ze}from"./game-network-CAH_Jsh6.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"./index-OZVqp6xS.js";import"./index-Da9JhEvW.js";import"./native-debug-module-JJOFtIVz.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-xQJcVubm.js";import"./contract-system-adapters-rVGdworX.js";import"./game-contract-seams-DrYyE5PX.js";import"./seeded-random-tpdJjdqy.js";import"./game-audio-BeCyd0Ha.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./index-bQE2NA0D.js";import"./live-project-verbs-CnknlUlT.js";import"./capability-coverage-wd6bAhv3.js";import"./edit-mode-authoring-CSt3zzmS.js";import"./json-history-resource-CH2nzMZh.js";import"./binding-resolver-DUz8C8Fs.js";import"./adapter-surface-Y37Nzcyw.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./realm-services-u0mnjXU9.js";import"./canvas-entry-runtime-DskaohHK.js";import"./three-ingest-runtime-BnRF_nJN.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./relative-path-guard-GiM7Lsz8.js";import"./react-root-BHA-cdrW.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./active-ingest-D_ryI_R4.js";import"./ingest-source-persistence-CQOJeGhj.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-DJLpUuf0.js";import"./mounted-authoring-C47L5H5t.js";import"./entity-object-V13bGmay.js";import"./user-data-CifDDvSr.js";import"./workspace-arrangement-B_OcbQbj.js";import"./three-contract-Dkt6PmWY.js";import"./three-BQfhEwUz.js";import"./editor-layers-CjeYrUlm.js";import"./component-instance-root-Cw_-ajBX.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./three-authoring-adapter-COBwREQO.js";import"./source-persistence-backend-uyd6NiWD.js";import"./three-projection-core-PQm-CO61.js";import"./body-marks-C1LxJtQb.js";import"./user-data-CODoGZqA.js";import"./object-marks-BnvSuCTt.js";import"./structural-ids-BOo2BRoY.js";import"./object3d-authoring-subject-XccsO0xG.js";import"./r3f-physics-binding-DZSIB0d_.js";import"./deferred-ingest-play-CEnsC3uN.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-OR1SW2jI.js";import"./board-guides-B6TEPOPi.js";import"./relative-import-specifier-DXWVQf0o.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-DiSjB-N1.js";import"./inference-diagnostics-DoZQ1mpg.js";import"./writer-tw6EcuVO.js";import"./three-state-C7khRIQE.js";import"./editor-shell-store-DckLm6m8.js";import"./output-pass-HurwNl0G.js";import"./viewport-door-BCXEYmon.js";import"./game-surface-defaults-D8S4cRxi.js";async function Dt(){try{const t=await fetch(`${e}/examples`);return(await r(t,`GET ${e}/examples failed`)).examples}catch{return[]}}function Gt(t){return t.startsWith("/")?t:`${e}/learn-thumbnail?file=${encodeURIComponent(t)}`}async function Wt(){const t=await fetch(`${e}/templates`);return(await r(t,`GET ${e}/templates failed`)).templates}export{Ot as AssetDeliveryError,c as abortGameplayRecordingSink,Ht as adaptProjectFolder,Ut as appendGameplayRecordingAsset,a as appendGameplayRecordingChunk,qt as appendGameplayRecordingDomEvents,Bt as archiveEditorWorktree,Jt as assetDeliveryIssueMessage,i as beginGameplayRecordingSink,Mt as browseFolder,Vt as captureProjectAssetHistory,Zt as connectEvents,_t as connectTabPresence,zt as createEditorWorktree,Kt as createProject,Nt as delegateEditorTask,Qt as downloadOnlineAsset,Me as endLogSession,p as finishGameplayRecordingSink,Ve as flushLogEntries,Xt as getAssetLibraryCategories,Yt as getCurrentServerProject,te as getDownloadUrl,ee as getDownloadedAssetPath,re as getEditorCompatibility,oe as getEditorRepositoryPresence,se as getEditorSessionWorktreeIdentity,ie as getLauncherSettings,ae as getOnlineAssetFiles,pe as getOnlineAssetPreview,ce as getServerValidationLog,me as inspectProjectFolder,Gt as learnThumbnailUrl,ne as listAssets,le as listDelegateHarnesses,de as listEditorWorktrees,Dt as listExamples,ge as listProjectComponents,ue as listProjectSourceFiles,Ee as listRecentProjects,Wt as listTemplates,ye as loadDownloadedAssets,Se as loadEditorState,Pe as onAssetDownloaded,je as openEditorWorktree,ve as openProjectOnServer,be as pollEditorLeaseIdentity,fe as probeCurrentServerProject,he as probeProjectFile,Ae as projectFileExists,ke as readProjectSourceText,we as readProjectTextFile,Ce as removeRecentProject,Re as reportCommandListener,xe as reportCommandReceived,Fe as reportCommandResult,Te as reportEditorState,Le as reportPlayBootPhase,De as reportTabRoute,Ge as requireEditorCompatibility,We as restoreProjectAssetHistory,$e as revealInFinder,Ie as saveEditorState,Oe as saveFile,He as saveThumbnail,Ue as searchOnlineAssets,Ze as startLogSession,qe as stopEditorWorktreeSession,Be as updateLauncherSettings};
@@ -1 +0,0 @@
1
- import{fe as c,ff as o,aC as s,du as u}from"./index-V4J7xfRg.js";import{E as h,a as E,F as g,c as m}from"./instance-fork-actions-D3sRzS3K.js";import{t as i}from"./editor-shell-store-DckLm6m8.js";function l(t,e){return c(t,e)}function F(t,e){const n=s(t.shell);return E(n.hierarchy.node(e),l(n,e),e)}let r=null;function C(){r||(r=o(({nodeId:t,store:e})=>F(i(e),t),({nodeId:t,store:e})=>{const n=l(s(e),t);return[{label:h,action:()=>{n?.extractComponent?.(t).then(u)}}]}))}function O(){r?.(),r=null}function f(t,e){return c(t,e)}function p(t,e){const n=s(t.shell);return m(n.hierarchy.node(e),f(n,e),e)}let a=null;function b(){a||(a=o(({nodeId:t,store:e})=>p(i(e),t),({nodeId:t,store:e})=>{const n=f(s(e),t);return[{label:g,action:()=>{n?.forkComponent?.(t).then(u)}}]}))}function A(){a?.(),a=null}export{l as a,b,A as c,C as e,f as i,O as u};
@@ -1 +0,0 @@
1
- import{R as N,E as P}from"./rrweb-Cd2ifIRP.js";import{Z as C,$ as L,a0 as F,a1 as O}from"./index-V4J7xfRg.js";import{B as U,O as $,W as B,C as D,Q as A,I,a as W,U as H,A as V,b as q}from"./output-DK8waum9.js";function x(e,r){const o=new URLSearchParams({replay:e,file:r});return`${C}/recording/replay-file?${o}`}async function T(e,r){const o=await fetch(x(e,r));if(!o.ok)throw new Error(`could not load replay ${r}: HTTP ${o.status}`);return o.text()}function z(e){return new Promise((r,o)=>{const s=new FileReader;s.onload=()=>r(String(s.result)),s.onerror=()=>o(s.error??new Error("could not read replay asset")),s.readAsDataURL(e)})}async function j(e){let r=await T(e,"events.json");const o=new Set(r.match(/https:\/\/replay-assets\.invalid\/\d{6}\.(?:png|jpg|webp|gif|svg)/g)??[]),s=await Promise.all([...o].map(async a=>{const i=a.split("/").at(-1),n=await fetch(x(e,`assets/${i}`));if(!n.ok)throw new Error(`could not load replay asset ${i}`);return[a,await z(await n.blob())]}));for(const[a,i]of s)r=r.replaceAll(a,i);const t=JSON.parse(r);if(!Array.isArray(t)||t.length===0)throw new Error("replay contains no DOM events");return t}function G(e,r,o){return Math.max(0,e.videoStartEpochMs+o-r[0].timestamp)}function _(e,r,o){const s=e.videoStartEpochMs+o;let t={rect:e.canvas,drawingWidth:e.canvas.drawingWidth,drawingHeight:e.canvas.drawingHeight};for(const a of r){if(a.timestamp>s)break;a.type===P.Custom&&a.data.tag==="volter-canvas-layout"&&a.data.payload&&typeof a.data.payload=="object"&&"rect"in a.data.payload&&"drawingWidth"in a.data.payload&&"drawingHeight"in a.data.payload&&(t=a.data.payload)}return t}async function J(e,r){await new Promise((o,s)=>{const t=()=>{clearTimeout(n),e.removeEventListener("loadeddata",a),e.removeEventListener("error",i)},a=()=>{t(),o()},i=()=>{t(),s(new Error("replay video failed to load"))},n=setTimeout(()=>{t(),s(new Error("replay video load timed out"))},15e3);e.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA?a():(e.addEventListener("loadeddata",a,{once:!0}),e.addEventListener("error",i,{once:!0}))}),!(Math.abs(e.currentTime-r)<.001)&&await new Promise((o,s)=>{const t=()=>{clearTimeout(n),e.removeEventListener("seeked",a),e.removeEventListener("error",i)},a=()=>{t(),o()},i=()=>{t(),s(new Error("replay video seek failed"))},n=setTimeout(()=>{t(),s(new Error("replay video seek timed out"))},15e3);e.addEventListener("seeked",a,{once:!0}),e.addEventListener("error",i,{once:!0}),e.currentTime=r})}async function Q(e){e.fonts.size>0&&e.fonts.status!=="loaded"&&await Promise.race([e.fonts.ready.then(()=>{}),new Promise(r=>setTimeout(r,3e3))]),await Promise.all(Array.from(e.images,r=>r.decode().catch(()=>{})))}async function S(e,r){const[o,s]=await Promise.all([T(e,"manifest.json"),j(e)]),t=JSON.parse(o);if(t.status!=="complete"||t.format!=="canvas-dom"||t.version!==1||!t.capture||typeof t.capture.durationMs!="number")throw new Error("replay manifest is incomplete or unsupported");const a=document.createElement("div");a.setAttribute("data-volter-replay-block",""),Object.assign(a.style,{position:"fixed",left:"-100000px",top:"0",width:`${t.viewport.width}px`,height:`${t.viewport.height}px`,overflow:"hidden",pointerEvents:"none"});const i=document.createElement("div");a.append(i),document.body.append(a);const n=document.createElement("video");n.muted=!0,n.preload="auto",n.playsInline=!0,n.src=x(e,"video"),a.append(n);let w;try{w=new N(s,{root:i,showWarning:!1,showDebug:!1,mouseTail:!1,UNSAFE_replayCanvas:!0,insertStyleRules:["[data-volter-replay-video] { visibility: hidden !important; }"]});const f=w;return await r({manifest:t,async render(u){const h=Math.max(0,Math.min(u,t.capture.durationMs));await J(n,h/1e3),f.pause(G(t,s,h)),await Q(f.iframe.contentDocument);const y=f.getMirror().getNode(t.canvas.nodeId),p=f.getMirror().getNode(t.surfaceNodeId);if(!y||y.tagName!=="CANVAS")throw new Error("replay canvas placeholder is unavailable");if(!p||typeof p.getBoundingClientRect!="function")throw new Error("replay game surface is unavailable");const c=y,g=p;c.setAttribute("data-volter-root-surface","true");const E=_(t,s,h);c.width=E.drawingWidth,c.height=E.drawingHeight;const d=c.getContext("2d");if(!d)throw new Error("replay canvas has no 2D context");return d.drawImage(n,0,0,c.width,c.height),c.style.setProperty("visibility","visible","important"),g}})}finally{n.pause(),w?.destroy(),n.removeAttribute("src"),n.load(),a.remove()}}async function Y(e,r){return S(e,async({manifest:o,render:s})=>{const t=Math.max(0,Math.min(r,o.capture.durationMs)),a=await s(t),i=await L(a),n=a.getBoundingClientRect();return{...i,replayPath:e,positionMs:t,width:Math.max(1,Math.round(n.width)),height:Math.max(1,Math.round(n.height))}})}async function ee(e){const r=e.fps??30;if(!Number.isInteger(r)||r<1||r>60)throw new Error("replay export fps must be an integer from 1 to 60");return S(e.replayPath,async({manifest:o,render:s})=>{const t=e.startMs??0,a=e.endMs??o.capture.durationMs;if(!Number.isFinite(t)||!Number.isFinite(a)||t<0||a<=t||a>o.capture.durationMs||a-t>3e5)throw new Error("replay export requires a valid recorded interval of at most five minutes");const i=t/1e3,n=a/1e3,w=Math.ceil((n-i)*r),f=await s(t),u=document.createElement("canvas"),h=f.getBoundingClientRect();u.width=Math.max(1,Math.round(h.width)),u.height=Math.max(1,Math.round(h.height));const y={width:u.width,height:u.height},p=new U,c=new $({target:p,format:new B}),g=new D(u,{codec:"vp9",quality:new A({bitrate:3e6})});c.addVideoTrack(g,{frameRate:r});const E=new I({source:new H(x(e.replayPath,"video")),formats:[W]});try{const d=await E.getPrimaryAudioTrack();if(o.capture.audio&&!d)throw new Error("recorded audio track is missing");const M=d?new V({codec:"opus",quality:new A({bitrate:128e3})}):null;M&&c.addAudioTrack(M),await c.start();const R=async()=>{if(!(!M||!d)){for await(const l of new q(d).samples(i,n))try{const m=Math.max(0,Math.ceil((i-l.timestamp)*l.sampleRate)),v=Math.min(l.numberOfFrames,Math.ceil((n-l.timestamp)*l.sampleRate));if(v<=m)continue;const b=l.trim(m,v);try{b.setTimestamp(Math.max(0,b.timestamp-i)),await M.add(b)}finally{b.close()}}finally{l.close()}M.close()}},k=async()=>{const l=F();for(let m=0;m<w;m++){const v=m/r;await O(await s(t+v*1e3),u,{size:y,snapshots:l}),await g.add(v,Math.min(1/r,n-i-v),{keyFrame:m%(r*2)===0})}g.close()};if(await Promise.all([R(),k()]),await c.finalize(),!p.buffer)throw new Error("replay encoder produced no output");return{blob:new Blob([p.buffer],{type:"video/webm"}),frames:w,fps:r,durationMs:a-t,...y,audio:d!==null}}catch(d){throw c.state!=="finalized"&&await c.cancel(),d}finally{E.dispose()}})}export{Y as c,ee as e};
@@ -1,6 +0,0 @@
1
- import{S as s}from"./three.module-BLhyNg0e.js";import{au as d,dw as u,ff as p,ae as f}from"./three.core-3arARmh6.js";const o="volterIblWorldPosition";function v(){return s.envmap_physical_pars_fragment.replaceAll("getIBLIrradiance","getBaseIBLIrradiance").replaceAll("getIBLRadiance","getBaseIBLRadiance")}function y(e){return(Array.isArray(e.material)?e.material:[e.material]).filter(a=>!!a.isMeshStandardMaterial)}function _(){const e=new d(new Uint8Array(1024),16,16,u,p);return e.mapping=f,e.needsUpdate=!0,e}function I(e,n){const a=e.onBeforeCompile,i=e.customProgramCacheKey;let t=null;return e.onBeforeCompile=(r,c)=>{a.call(e,r,c),l(r.vertexShader,"#include <worldpos_vertex>"),l(r.fragmentShader,"#include <envmap_physical_pars_fragment>"),r.vertexShader=`varying vec3 ${o};
2
- ${r.vertexShader.replace("#include <worldpos_vertex>",`#include <worldpos_vertex>
3
- #if defined(USE_ENVMAP)
4
- ${o} = worldPosition.xyz;
5
- #endif`)}`,r.fragmentShader=`varying vec3 ${o};
6
- ${r.fragmentShader.replace("#include <envmap_physical_pars_fragment>",n.fragment())}`,t=r,n.onCompile?.(r)},e.customProgramCacheKey=()=>`${i.call(e)}|${n.cacheKey()}`,e.needsUpdate=!0,{material:e,get shader(){return t},restore(){e.onBeforeCompile=a,e.customProgramCacheKey=i,e.needsUpdate=!0,t=null}}}function l(e,n){if(!e.includes(n))throw new Error(`overrideMaterialIbl needs three's ${n} shader chunk, and this material's program no longer contains it.`)}export{o as IBL_WORLD_POSITION,v as baseIblFunctions,_ as createIblSentinelTexture,I as overrideMaterialIbl,y as standardMaterialsOf};