@volter/game-editor 0.5.80 → 0.5.82

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 (328) hide show
  1. package/BUNDLED_NOTICES +22 -22
  2. package/catalog/entries/blender.json +2 -2
  3. package/catalog/entries/music.json +2 -2
  4. package/dist/.vite/manifest.json +2115 -2114
  5. package/dist/assets/{AssetBudgetPanel-C-RNso12.js → AssetBudgetPanel-Iip49rxI.js} +3 -3
  6. package/dist/assets/{AudioViewer-BQ4yQJmw.js → AudioViewer-DmkOvskF.js} +1 -1
  7. package/dist/assets/{CanvasBoardDocument-D1_2Ahx7.js → CanvasBoardDocument-DCS8uzQo.js} +1 -1
  8. package/dist/assets/CanvasSceneViewport-CfOuQiQ0.js +1 -0
  9. package/dist/assets/{ColorInput-B-GRGKwB.js → ColorInput-7CPpl8MI.js} +1 -1
  10. package/dist/assets/EntityModelDocument-CplmAib0.js +1 -0
  11. package/dist/assets/{EnvironmentAssetDocument-BbWPrmTc.js → EnvironmentAssetDocument-DlS6KFJu.js} +1 -1
  12. package/dist/assets/{GameplaySessionTimeline-Bi_Z_lDm.js → GameplaySessionTimeline-C3zH6edi.js} +1 -1
  13. package/dist/assets/{ImageViewer-CVYDgTSj.js → ImageViewer-C0lQ6YO0.js} +1 -1
  14. package/dist/assets/InspectorObjectPreview-Bjc1Tn-I.js +1 -0
  15. package/dist/assets/{JsonAssetDocument-O-o1eVJB.js → JsonAssetDocument-DjmH9CQH.js} +1 -1
  16. package/dist/assets/{LiveModuleDocument-CCpe63vw.js → LiveModuleDocument-Hiot8Q5L.js} +1 -1
  17. package/dist/assets/{LutAssetDocument-C_QGvjj7.js → LutAssetDocument-6bBwNMOn.js} +1 -1
  18. package/dist/assets/{ModelAssetDocument-DKyxph4r.js → ModelAssetDocument-G6ajiV51.js} +1 -1
  19. package/dist/assets/{NonThreeAuthoringBootstrap-DkfIBzMs.js → NonThreeAuthoringBootstrap-DpieYAMC.js} +1 -1
  20. package/dist/assets/Object3DDocumentToolbar-BtZkDxKa.js +1 -0
  21. package/dist/assets/Object3DDocumentViewport-BhH8afDi.js +2 -0
  22. package/dist/assets/{Object3DPreview-DI7aoPKe.js → Object3DPreview-DdrYVJUZ.js} +1 -1
  23. package/dist/assets/{OnlineAssetDetail-BIRXvQsJ.js → OnlineAssetDetail-D06eTe3y.js} +1 -1
  24. package/dist/assets/{PlayBar-BYVJHvd5.js → PlayBar-BbzjgLFJ.js} +1 -1
  25. package/dist/assets/{QuarksAssetDocument-DEcSmewA.js → QuarksAssetDocument-wGHNt4ov.js} +1 -1
  26. package/dist/assets/{ReactCanvasControls-DplBODky.js → ReactCanvasControls-BL2tOUj6.js} +1 -1
  27. package/dist/assets/{RootSelectionOverlay-BzEZwAaO.js → RootSelectionOverlay-C6Wu8nIs.js} +1 -1
  28. package/dist/assets/{ShaderAssetDocument-ysUJR4Np.js → ShaderAssetDocument-BDi8iNLA.js} +4 -4
  29. package/dist/assets/{ShadowEditor-BKz_sq1R.js → ShadowEditor-C3L0UWSH.js} +1 -1
  30. package/dist/assets/{SourceAssetViewer-DhoQonvP.js → SourceAssetViewer-D832bARo.js} +1 -1
  31. package/dist/assets/StageHost-Bor1eHEO.js +2 -0
  32. package/dist/assets/{StoryPreviewMount-BF6vqmhx.js → StoryPreviewMount-CmOEFzZY.js} +1 -1
  33. package/dist/assets/{ThreeBoardDocument-vedTeiN9.js → ThreeBoardDocument-BtBMGtiQ.js} +2 -2
  34. package/dist/assets/{ThreeIsolationSceneContent-TT4T-ehp.js → ThreeIsolationSceneContent-BEHNSEsi.js} +1 -1
  35. package/dist/assets/{ToolObject3DPreview-C52QCJAO.js → ToolObject3DPreview-76LMkfin.js} +1 -1
  36. package/dist/assets/{Toolbar-Bo-l61Lo.js → Toolbar-BEBQdxRz.js} +1 -1
  37. package/dist/assets/{TransientHint-DFAcEEFI.js → TransientHint-CzsdY8W6.js} +1 -1
  38. package/dist/assets/{VideoViewer-BM_9gSgl.js → VideoViewer-Ckrawyuq.js} +1 -1
  39. package/dist/assets/{ViewportShadingMenu-CWutLX1G.js → ViewportShadingMenu-BofQt6_4.js} +1 -1
  40. package/dist/assets/{active-ingest-BuNeO4Mb.js → active-ingest-D_ryI_R4.js} +2 -2
  41. package/dist/assets/{animation-clock-B-fl-HTL.js → animation-clock-QjtJDIsR.js} +1 -1
  42. package/dist/assets/{animation-mixers.service-DgxB7R_k.js → animation-mixers.service-BInUs1US.js} +1 -1
  43. package/dist/assets/{animation-timeline.utility-RWwRwQvM.js → animation-timeline.utility-DUrfNSwn.js} +1 -1
  44. package/dist/assets/{asset-budget-asset.menu-D2Tdwqxf.js → asset-budget-asset.menu-DVQEksFp.js} +1 -1
  45. package/dist/assets/{asset-budget.action-WMiFAlTi.js → asset-budget.action-C-ENAa52.js} +1 -1
  46. package/dist/assets/{asset-budget.document-CckPEzno.js → asset-budget.document-Bb1PyL3H.js} +1 -1
  47. package/dist/assets/{asset-budget.menu-DPMPOTSo.js → asset-budget.menu-CPi2yjBA.js} +1 -1
  48. package/dist/assets/{asset-editor-persistence-DttxUta0.js → asset-editor-persistence-Duoq7o22.js} +1 -1
  49. package/dist/assets/{asset-loaders-9M6lxMew.js → asset-loaders-BftJ2m7-.js} +1 -1
  50. package/dist/assets/{asset-preview-C36PaXvM.js → asset-preview-BS71mXsZ.js} +1 -1
  51. package/dist/assets/{audio-unlock.service-BeHFOKOB.js → audio-unlock.service-C3ygvDjU.js} +1 -1
  52. package/dist/assets/{audio.utility-HRjVG-Co.js → audio.utility-DF55sgHW.js} +1 -1
  53. package/dist/assets/autoplay.service-DaonKf7O.js +1 -0
  54. package/dist/assets/{babylon-authoring-adapter-BHQY7yIy.js → babylon-authoring-adapter-CmeehOBt.js} +1 -1
  55. package/dist/assets/{binding-resolver-TD7-fKuX.js → binding-resolver-DUz8C8Fs.js} +2 -2
  56. package/dist/assets/{blender-emscripten-engine-CieQeF-r.js → blender-emscripten-engine-DQljvfR7.js} +1 -1
  57. package/dist/assets/{blender-node-editor.document-Bw2QbNTV.js → blender-node-editor.document-B8S2TVMM.js} +1 -1
  58. package/dist/assets/{blender-properties-tab-BnIbJN4f.js → blender-properties-tab-y-_BeZDx.js} +1 -1
  59. package/dist/assets/blender-runtime-host-CUH6peXj.js +4 -0
  60. package/dist/assets/{blender-runtime-skin-CwXXiusi.js → blender-runtime-skin-B1tYITn2.js} +36 -36
  61. package/dist/assets/blender-runtime.document-DnSl0twI.js +12 -0
  62. package/dist/assets/{blender-timeline.document-CESN0FrA.js → blender-timeline.document-CeCylyXB.js} +1 -1
  63. package/dist/assets/{blender-uv-editor.document-BdIUMC5X.js → blender-uv-editor.document-DEllMw3a.js} +1 -1
  64. package/dist/assets/{blender-version.status-CBKgGtQ0.js → blender-version.status-CrT9NqK-.js} +1 -1
  65. package/dist/assets/{blender-wali-engine-KWIxfB_o.js → blender-wali-engine-CO-jG_ik.js} +1 -1
  66. package/dist/assets/{blender.command-ChUV_DJE.js → blender.command-GIjMG1-m.js} +1 -1
  67. package/dist/assets/{board-guides-ClHJXXuu.js → board-guides-B6TEPOPi.js} +1 -1
  68. package/dist/assets/{bridge.command-DK8zE8yt.js → bridge.command-D6qTcgje.js} +3 -3
  69. package/dist/assets/{browserAll-Be-P25YM.js → browserAll-k35XRFil.js} +1 -1
  70. package/dist/assets/build-player.document-CHxj4P8q.js +1 -0
  71. package/dist/assets/{build-profiles.document-CNZvcPor.js → build-profiles.document-CZCk1HYA.js} +2 -2
  72. package/dist/assets/{build-progress.status-BMfffkUW.js → build-progress.status-BNwBxP2a.js} +1 -1
  73. package/dist/assets/{build-session-BHUOWzok.js → build-session-CW2UyYFF.js} +1 -1
  74. package/dist/assets/{build.action-BGriOSGD.js → build.action-EmCcMu47.js} +1 -1
  75. package/dist/assets/{build.command-BU7Wcsn5.js → build.command-CzEckGcR.js} +1 -1
  76. package/dist/assets/{build.header-B6KRt0O_.js → build.header-CsYLpZbh.js} +1 -1
  77. package/dist/assets/{build.menu-CpxN2aww.js → build.menu-CaDkDQuy.js} +1 -1
  78. package/dist/assets/{build.service-LRCZ0vL7.js → build.service-BcKtbU0-.js} +1 -1
  79. package/dist/assets/{camera-D8fxcMUB.js → camera-BwWZUyKt.js} +1 -1
  80. package/dist/assets/{camera-runtime.inspector-5RS6wvw2.js → camera-runtime.inspector-CJyi3zmp.js} +1 -1
  81. package/dist/assets/{canvas-design-mount-CoKGVZii.js → canvas-design-mount-B_uwZkEU.js} +6 -6
  82. package/dist/assets/{canvas-entry-runtime-Do5zL9dN.js → canvas-entry-runtime-DskaohHK.js} +2 -2
  83. package/dist/assets/{canvas-preview-frames-Jsd4Gi5S.js → canvas-preview-frames-BzLeTumX.js} +1 -1
  84. package/dist/assets/{canvas-story-capture.service-0SYz8LrL.js → canvas-story-capture.service-C80CsS8r.js} +2 -2
  85. package/dist/assets/{capability-coverage-BqCZSu0R.js → capability-coverage-wd6bAhv3.js} +2 -2
  86. package/dist/assets/{collaboration-presence-WWC9ZQsq.js → collaboration-presence-DcPhahtF.js} +1 -1
  87. package/dist/assets/{collider-DsdfCyWG.js → collider-Dw2iWV3F.js} +1 -1
  88. package/dist/assets/{component-board.service-6JDsY08Z.js → component-board.service-CH99sgj0.js} +2 -2
  89. package/dist/assets/component-board.service-Cd1c9oSN.js +2 -0
  90. package/dist/assets/{component-board.service-DZWOfhbB.js → component-board.service-XAxyLCnM.js} +2 -2
  91. package/dist/assets/{component-contracts.service-DXfwve-4.js → component-contracts.service-DerT0BP-.js} +1 -1
  92. package/dist/assets/{component-instance-root-pq7uyyej.js → component-instance-root-Cw_-ajBX.js} +1 -1
  93. package/dist/assets/{component-verbs.command-Cd_-gQ-Z.js → component-verbs.command-BHK9M2Rk.js} +1 -1
  94. package/dist/assets/component-verbs.service-DsxhVcvk.js +1 -0
  95. package/dist/assets/{config-CnqnR-iz.js → config-1rCvm02z.js} +3 -3
  96. package/dist/assets/configurations-CRTYw0r9.js +1 -0
  97. package/dist/assets/{connection.status-BkhMFG12.js → connection.status-D4fjnH24.js} +1 -1
  98. package/dist/assets/{constraints.inspector-CPWFDlY8.js → constraints.inspector-BgnafOLf.js} +1 -1
  99. package/dist/assets/{content-bounds-Ax7CFkXJ.js → content-bounds-D5pXeHJN.js} +1 -1
  100. package/dist/assets/{contract-system-adapters-0Odxcy6d.js → contract-system-adapters-rVGdworX.js} +1 -1
  101. package/dist/assets/{coverage.service-CcKdk7iJ.js → coverage.service-BNme5Agb.js} +1 -1
  102. package/dist/assets/{create-runtime-BhdSylT1.js → create-runtime-CcuQTSfy.js} +2 -2
  103. package/dist/assets/{curve-DiuqWf0-.js → curve-DorFv33R.js} +1 -1
  104. package/dist/assets/{data-asset-BiqUYQnI.js → data-asset-CAE35Emh.js} +1 -1
  105. package/dist/assets/{data-ref-mo1ecq_T.js → data-ref-DXqRnZsJ.js} +1 -1
  106. package/dist/assets/{debug-bridge-BN4INYe7.js → debug-bridge-DdCJSEni.js} +1 -1
  107. package/dist/assets/{debug-registry-BW5cue8V.js → debug-registry-xQJcVubm.js} +1 -1
  108. package/dist/assets/deferred-ingest-play-CEnsC3uN.js +2 -0
  109. package/dist/assets/{design-time-canvas-mount-mhxQlHHP.js → design-time-canvas-mount-CPRrCPFA.js} +2 -2
  110. package/dist/assets/design-time-layers-hmGqBp06.js +1 -0
  111. package/dist/assets/{design-time-mount.service-Cs_mT_-d.js → design-time-mount.service-CEmJjRIJ.js} +2 -2
  112. package/dist/assets/{design-time-mount.service-DPEpO4ny.js → design-time-mount.service-CLL-1Za4.js} +2 -2
  113. package/dist/assets/{design-time-react-mount-RdZmD9Dp.js → design-time-react-mount-DmXi3GBy.js} +1 -1
  114. package/dist/assets/{document-preview-three-D4M5qFH3.js → document-preview-three-B4j_zNef.js} +1 -1
  115. package/dist/assets/{dom-authoring-adapter-B97hwEwz.js → dom-authoring-adapter-BklRbjZB.js} +1 -1
  116. package/dist/assets/{draco3d-B_PtVdzj.js → draco3d-CFWI1XDT.js} +1 -1
  117. package/dist/assets/{edit-mode-audio.service-BZxbnyf-.js → edit-mode-audio.service-SUzv0nHs.js} +1 -1
  118. package/dist/assets/{edit-mode-authoring-CVKwIPOy.js → edit-mode-authoring-CSt3zzmS.js} +1 -1
  119. package/dist/assets/{edit-mode-networking.service-2aXyBwkO.js → edit-mode-networking.service-D6UohrCr.js} +1 -1
  120. package/dist/assets/editor-api-WeHVNlEo.js +1 -0
  121. package/dist/assets/{editor-layers-DI1Wkr8F.js → editor-layers-CjeYrUlm.js} +1 -1
  122. package/dist/assets/{editor-shell-store-DlGykD-E.js → editor-shell-store-DckLm6m8.js} +1 -1
  123. package/dist/assets/{entity-object-C374JqRs.js → entity-object-V13bGmay.js} +1 -1
  124. package/dist/assets/{extend-BOaYynPp.js → extend-BQeRA-aV.js} +1 -1
  125. package/dist/assets/{fork-menu-DGjsgL8L.js → fork-menu-Bthg9viY.js} +1 -1
  126. package/dist/assets/{frame-debugger-store-Czy2FTqO.js → frame-debugger-store-DDxWlDPK.js} +1 -1
  127. package/dist/assets/{game-contract-seams-GoIZaA0s.js → game-contract-seams-DrYyE5PX.js} +1 -1
  128. package/dist/assets/{game-css-scope-transform-9t97Smqk.js → game-css-scope-transform-D5hQWaci.js} +1 -1
  129. package/dist/assets/game-document.service-cJ1yKc2V.js +1 -0
  130. package/dist/assets/{game-eval.command-BYEEWjUv.js → game-eval.command-CKo-W17_.js} +1 -1
  131. package/dist/assets/{game-module-access-BqevF7uR.js → game-module-access-DuptGLGx.js} +1 -1
  132. package/dist/assets/game-network-CAH_Jsh6.js +22 -0
  133. package/dist/assets/gameplay-export-B-JE4uSD.js +1 -0
  134. package/dist/assets/gameplay-replay-WyopKGyB.js +1 -0
  135. package/dist/assets/{gameplay.command-BrleMyQK.js → gameplay.command-D4cY3nOq.js} +1 -1
  136. package/dist/assets/generation-jobs-CcCrhKLM.js +1 -0
  137. package/dist/assets/{generation.service-nVpgwKEB.js → generation.service-CQwmLAOQ.js} +1 -1
  138. package/dist/assets/{generations-AU4LkWAl.js → generations-qfhCRH8C.js} +1 -1
  139. package/dist/assets/{generations.status-CSeb5inI.js → generations.status-CcbR2OfF.js} +1 -1
  140. package/dist/assets/{hierarchy-marks-EEQa08In.js → hierarchy-marks-B1jSqxSv.js} +1 -1
  141. package/dist/assets/{hosted-asset-materialization-DZlaRGkJ.js → hosted-asset-materialization-BZf-8JA1.js} +1 -1
  142. package/dist/assets/{index-ynpEqujB.js → index-CHa43s2p.js} +1 -1
  143. package/dist/assets/{index-N4BP9b5x.js → index-Cj_b0Ygc.js} +1 -1
  144. package/dist/assets/{index-CUBra63E.js → index-D-RMHSzb.js} +1 -1
  145. package/dist/assets/{index-BpXj_ZfC.js → index-DXtfej3G.js} +1 -1
  146. package/dist/assets/{index-BHccVo52.js → index-D_ViOFCz.js} +2 -2
  147. package/dist/assets/{index-DlFjiZgV.js → index-DrEVdQvN.js} +1 -1
  148. package/dist/assets/{index-flxMlfV4.js → index-V4J7xfRg.js} +7 -7
  149. package/dist/assets/{index-OlF4eBxk.js → index-aREcGExk.js} +1 -1
  150. package/dist/assets/index-yXSK_qPW.js +1 -0
  151. package/dist/assets/{inference-diagnostics-MWqnRUsN.js → inference-diagnostics-DoZQ1mpg.js} +1 -1
  152. package/dist/assets/{ingest-boot-viewport-CT1eaWqO.js → ingest-boot-viewport-DWdOtGGE.js} +1 -1
  153. package/dist/assets/ingest-siblings-DyvasVDH.js +1 -0
  154. package/dist/assets/{ingest-source-persistence-CJGE5-AU.js → ingest-source-persistence-CQOJeGhj.js} +1 -1
  155. package/dist/assets/{ingest.service-2TRoiqQ8.js → ingest.service-CqIcydem.js} +1 -1
  156. package/dist/assets/{inspect-Dl5bH02T.js → inspect-DiSjB-N1.js} +1 -1
  157. package/dist/assets/instances.command-COw2QpbN.js +1 -0
  158. package/dist/assets/{json-history-resource-DTUpacfx.js → json-history-resource-CH2nzMZh.js} +1 -1
  159. package/dist/assets/{layered-pick-DKNj5L29.js → layered-pick-BUr1U8lU.js} +1 -1
  160. package/dist/assets/{light-CX-83nBK.js → light-CxiGIJma.js} +1 -1
  161. package/dist/assets/live-project-verbs-CnknlUlT.js +1 -0
  162. package/dist/assets/{machine.document-DE8aRbOi.js → machine.document-D7jMrzXt.js} +1 -1
  163. package/dist/assets/{machines.finder-CZ3P0odZ.js → machines.finder-Dor3O0uf.js} +1 -1
  164. package/dist/assets/{material-f1KOKE_r.js → material-B6cH1Oqw.js} +1 -1
  165. package/dist/assets/{material-factory-DkCPSCLt.js → material-factory-BN3Lax5C.js} +1 -1
  166. package/dist/assets/{mesh-DM3TH9xS.js → mesh-Cj-CYroI.js} +1 -1
  167. package/dist/assets/{model-asset-sections.service-CL4Rlwvc.js → model-asset-sections.service-mC4WJFTA.js} +1 -1
  168. package/dist/assets/{model-inspection-BS3uYvYU.js → model-inspection-8o57YSZW.js} +1 -1
  169. package/dist/assets/{model-thumbnail-WJb6B3qQ.js → model-thumbnail-chePRlH7.js} +1 -1
  170. package/dist/assets/{models.finder-BXJhCiw9.js → models.finder-CKkT5ZdU.js} +1 -1
  171. package/dist/assets/{module-mode-CtoVZDhp.js → module-mode-BMiMhHI3.js} +2 -2
  172. package/dist/assets/{mount-canvas-ingest-root-DI8iSEV4.js → mount-canvas-ingest-root-B1swVIUJ.js} +2 -2
  173. package/dist/assets/{mount-dom-ingest-root-n4tbYw-j.js → mount-dom-ingest-root-B8hO5mht.js} +2 -2
  174. package/dist/assets/{mount-ingest-root-pyV6jEkB.js → mount-ingest-root-Cbnh-mSw.js} +2 -2
  175. package/dist/assets/{mount-manifest-DsGMOkm4.js → mount-manifest-B7oL1Abg.js} +1 -1
  176. package/dist/assets/{mount-three-ingest-root-CeH_uOP0.js → mount-three-ingest-root-BdUJx6ix.js} +1 -1
  177. package/dist/assets/{mounted-authoring-BHpx-z2Y.js → mounted-authoring-C47L5H5t.js} +1 -1
  178. package/dist/assets/{mounted-story-viewport-source-D8kOfa96.js → mounted-story-viewport-source-CyEK_vaq.js} +1 -1
  179. package/dist/assets/{native-debug-module-lR1oG4Vd.js → native-debug-module-JJOFtIVz.js} +1 -1
  180. package/dist/assets/{navigation-DvTw5hJ4.js → navigation-ROJM2w84.js} +1 -1
  181. package/dist/assets/{navmesh.menu-BaBNScgJ.js → navmesh.menu-DjefqtkI.js} +1 -1
  182. package/dist/assets/{navmesh.service-BK6BlOz3.js → navmesh.service-BPqjEQiq.js} +1 -1
  183. package/dist/assets/network-observer.service-GFzXuBMb.js +1 -0
  184. package/dist/assets/{network.utility-BJ3bZOCQ.js → network.utility-6Y5u53n8.js} +1 -1
  185. package/dist/assets/object3d-document-session-registry-DNCOGA3i.js +2 -0
  186. package/dist/assets/{oid-transform-RlofQ4tU.js → oid-transform-DQzN_Gl_.js} +1 -1
  187. package/dist/assets/{particles-CjR9Po6N.js → particles-DGdUmqOr.js} +1 -1
  188. package/dist/assets/{pixi-authoring-adapter-B_mXxWkJ.js → pixi-authoring-adapter-BRktdcIz.js} +1 -1
  189. package/dist/assets/{pixi-live-write-target-tm5yHKss.js → pixi-live-write-target-Dg0mdLaa.js} +1 -1
  190. package/dist/assets/play.command-4IDAqR5W.js +2 -0
  191. package/dist/assets/{presentation-gTgwItzD.js → presentation-8m-RDKIS.js} +1 -1
  192. package/dist/assets/{product-Cmel9X9k.js → product-t6tauO7R.js} +1 -1
  193. package/dist/assets/{profiler.action-DSM2uSYR.js → profiler.action-CXA4IkQB.js} +1 -1
  194. package/dist/assets/{profiler.menu-CcYyqUfU.js → profiler.menu-BgIBv4-I.js} +1 -1
  195. package/dist/assets/{profiler.utility-CQtqdQgC.js → profiler.utility-BYoRbfIK.js} +1 -1
  196. package/dist/assets/{project-authoring-session-BqZuntp2.js → project-authoring-session-DkekCxNv.js} +2 -2
  197. package/dist/assets/{properties-bone-constraints.inspector-D3XrqptB.js → properties-bone-constraints.inspector-DXpiCtf9.js} +1 -1
  198. package/dist/assets/{properties-bone.inspector-CmVamAC6.js → properties-bone.inspector-wIDsP4c5.js} +1 -1
  199. package/dist/assets/{properties-collection.inspector-BGi5eXmI.js → properties-collection.inspector-5SRPbqfM.js} +1 -1
  200. package/dist/assets/{properties-constraints.inspector-C62EOuWg.js → properties-constraints.inspector-DIjKz692.js} +1 -1
  201. package/dist/assets/{properties-data.inspector-qDFtLdw8.js → properties-data.inspector-DE6i8biZ.js} +1 -1
  202. package/dist/assets/{properties-material.inspector-B--PD0se.js → properties-material.inspector-Cu1UCPY4.js} +1 -1
  203. package/dist/assets/{properties-modifiers.inspector-1tdk1EKp.js → properties-modifiers.inspector-DsQzA638.js} +1 -1
  204. package/dist/assets/{properties-object.inspector-CYH5w2un.js → properties-object.inspector-C57X0GJq.js} +1 -1
  205. package/dist/assets/{properties-output.inspector-C78QuVlY.js → properties-output.inspector-DzrcFuRM.js} +1 -1
  206. package/dist/assets/{properties-particles.inspector-DyDiMjmC.js → properties-particles.inspector-DGqSnelN.js} +1 -1
  207. package/dist/assets/{properties-physics.inspector-DG5GOyLE.js → properties-physics.inspector-DIjhtiLe.js} +1 -1
  208. package/dist/assets/{properties-render.inspector-D8ldGTdq.js → properties-render.inspector-CX0orwn9.js} +1 -1
  209. package/dist/assets/{properties-scene.inspector-Cf_KBWbv.js → properties-scene.inspector-DaHNL_sq.js} +1 -1
  210. package/dist/assets/{properties-texture.inspector-BznU5kNc.js → properties-texture.inspector-B5hmxPRy.js} +1 -1
  211. package/dist/assets/{properties-view-layer.inspector-pnRv91FS.js → properties-view-layer.inspector-C7hdJgei.js} +1 -1
  212. package/dist/assets/{properties-world.inspector-CzUtvYuC.js → properties-world.inspector-EWTC6jNw.js} +1 -1
  213. package/dist/assets/r3f-design-session-CXlGV9hp.js +2 -0
  214. package/dist/assets/{r3f-physics-binding-D6DKTgwF.js → r3f-physics-binding-DZSIB0d_.js} +1 -1
  215. package/dist/assets/{r3f-source-authoring-adapter-nqn_PR3m.js → r3f-source-authoring-adapter-GR97EmII.js} +1 -1
  216. package/dist/assets/{react-canvas-navigation-WxI8Mxyc.js → react-canvas-navigation-L_mOnybL.js} +1 -1
  217. package/dist/assets/{react-inspector.service-C1Prvq6u.js → react-inspector.service-B4P3UnSY.js} +1 -1
  218. package/dist/assets/{react-story-board-BRUE9hN1.js → react-story-board-CT1_3sk_.js} +1 -1
  219. package/dist/assets/{react-three-rapier.esm-CA7vFsM3.js → react-three-rapier.esm-DyMNYoA_.js} +1 -1
  220. package/dist/assets/{react-world-authoring-adapter-DVNps-az.js → react-world-authoring-adapter-OR1SW2jI.js} +1 -1
  221. package/dist/assets/{realm-services-CL4ih5gp.js → realm-services-u0mnjXU9.js} +1 -1
  222. package/dist/assets/{reflection-probe-capture.inspector-C9mzBLI7.js → reflection-probe-capture.inspector-CTNlSaGW.js} +1 -1
  223. package/dist/assets/{registry-N8Uqh2X-.js → registry-wqakYaDW.js} +1 -1
  224. package/dist/assets/{relative-import-specifier-cRtWQWmH.js → relative-import-specifier-DXWVQf0o.js} +1 -1
  225. package/dist/assets/{render-env-xu-q_sLG.js → render-env-CN09NtDf.js} +1 -1
  226. package/dist/assets/{render-features-BMOBYkLQ.js → render-features-HCEupUJ6.js} +1 -1
  227. package/dist/assets/{render-settings-Cnd69vhe.js → render-settings-Clt6d05o.js} +1 -1
  228. package/dist/assets/{resolve-three-C9OlnFHx.js → resolve-three-CLzKVMx2.js} +13 -13
  229. package/dist/assets/{root-seam-contract-BoD0NaOZ.js → root-seam-contract-D2uQHWF9.js} +1 -1
  230. package/dist/assets/{run-selection-DL0vJV6z.js → run-selection-AyelFc9T.js} +1 -1
  231. package/dist/assets/{scene-capture-CoTN4qOO.js → scene-capture-WbPcLfJl.js} +1 -1
  232. package/dist/assets/{scene-document.service-kgtsh1r2.js → scene-document.service-4U6rDhCp.js} +2 -2
  233. package/dist/assets/{scene-framing-CljHc6tN.js → scene-framing-DzSL2Cld.js} +1 -1
  234. package/dist/assets/{seeded-random-BlGWBUER.js → seeded-random-tpdJjdqy.js} +1 -1
  235. package/dist/assets/{session-BMie6EFt.js → session-kSIjcXJT.js} +47 -8
  236. package/dist/assets/{setup-renderer-jOQdnmo7.js → setup-renderer-B5vZmCyu.js} +1 -1
  237. package/dist/assets/{source-object3d-authoring-adapter-qg_NN2PX.js → source-object3d-authoring-adapter-BQnQ3Qzg.js} +1 -1
  238. package/dist/assets/{source-persistence-backend-DoNJeJa8.js → source-persistence-backend-uyd6NiWD.js} +1 -1
  239. package/dist/assets/stage-keyboard-B2yrk2zu.js +1 -0
  240. package/dist/assets/stage-overlay-set-Cqtz3s06.js +1 -0
  241. package/dist/assets/{stage-presence-markers-Bu9mH0m_.js → stage-presence-markers-BgLs0Aj5.js} +1 -1
  242. package/dist/assets/stage-transform-tools-BHcz53td.js +1 -0
  243. package/dist/assets/{standard-viewport-dressing-B8VpmbHt.js → standard-viewport-dressing-uhv_3JvQ.js} +2 -2
  244. package/dist/assets/{state-watch.action-Dhb9xQb9.js → state-watch.action-BJ08HgcO.js} +1 -1
  245. package/dist/assets/{state-watch.menu-xf7oO-4l.js → state-watch.menu-rAULwijr.js} +1 -1
  246. package/dist/assets/{state-watch.utility-DnGO08TW.js → state-watch.utility-eEbQcj8t.js} +1 -1
  247. package/dist/assets/{story-capture-CyeAHem-.js → story-capture-B8wfSf5s.js} +1 -1
  248. package/dist/assets/{story-documents-DUm0LUTp.js → story-documents-Cm4jCkW5.js} +2 -2
  249. package/dist/assets/{story-documents.service-BWBSUjBO.js → story-documents.service-BDvQCslK.js} +1 -1
  250. package/dist/assets/{story-documents.service-DOvAnwES.js → story-documents.service-Cgtg6rXn.js} +1 -1
  251. package/dist/assets/story-media-presence-SGlp_afL.js +1 -0
  252. package/dist/assets/{story-pixi-preview-DHtzdru2.js → story-pixi-preview-D62Q_vIW.js} +1 -1
  253. package/dist/assets/{story-presentation-BpfNrI6t.js → story-presentation-CofUdEU7.js} +1 -1
  254. package/dist/assets/{story-three-preview-pzhR44fH.js → story-three-preview-B9O1wapP.js} +2 -2
  255. package/dist/assets/{studio-environment-Dw2FBct5.js → studio-environment-BIhqrtFc.js} +1 -1
  256. package/dist/assets/{surface-state-NwiDDkWI.js → surface-state-DrM3wsrr.js} +1 -1
  257. package/dist/assets/{syntactic-prop-specs-_Yk2QtpW.js → syntactic-prop-specs-BGz0N7Dg.js} +1 -1
  258. package/dist/assets/{team-playtest.service-DdUlOcrk.js → team-playtest.service-CiE8UJAe.js} +1 -1
  259. package/dist/assets/{three-2yjp9YMj.js → three-BQfhEwUz.js} +1 -1
  260. package/dist/assets/{three-authoring-adapter-B5h6dxvp.js → three-authoring-adapter-COBwREQO.js} +1 -1
  261. package/dist/assets/three-authoring.service-C0azvoq8.js +2 -0
  262. package/dist/assets/{three-ingest-runtime-B9surImB.js → three-ingest-runtime-BnRF_nJN.js} +1 -1
  263. package/dist/assets/three-integration-DeWYFf1x.js +2 -0
  264. package/dist/assets/three-integration.service-CoWCBTmg.js +1 -0
  265. package/dist/assets/{three-projection-core-xgnaC08N.js → three-projection-core-PQm-CO61.js} +1 -1
  266. package/dist/assets/{three-state-DVnNjIbQ.js → three-state-C7khRIQE.js} +1 -1
  267. package/dist/assets/{three-story-capture.service-DgVUrOW6.js → three-story-capture.service-B0oiGIfp.js} +2 -2
  268. package/dist/assets/three-story-model-D7g2pqfJ.js +1 -0
  269. package/dist/assets/{three-viewport-presentation-C5wGhMgD.js → three-viewport-presentation-B_tBudM-.js} +5 -5
  270. package/dist/assets/transform-mode-request-DWM6BdRA.js +1 -0
  271. package/dist/assets/{transport-strip-Dvkyjqwq.js → transport-strip-vgXGDgkI.js} +1 -1
  272. package/dist/assets/transport.header-CfVHXjrT.js +1 -0
  273. package/dist/assets/{tuples-tlEYpiUU.js → tuples-BnYrlQqS.js} +1 -1
  274. package/dist/assets/ui-board-document-B_-K9luq.js +2 -0
  275. package/dist/assets/{user-data-C8dmlLGA.js → user-data-CifDDvSr.js} +1 -1
  276. package/dist/assets/{utility-view-state-8ikycS0_.js → utility-view-state-BPl8Asup.js} +1 -1
  277. package/dist/assets/{viewport-door-Brt6-rPp.js → viewport-door-BCXEYmon.js} +1 -1
  278. package/dist/assets/{viewport-root-presentation-DEm3C1-i.js → viewport-root-presentation-DJLpUuf0.js} +1 -1
  279. package/dist/assets/{viewport-surface-status-Dbc5Yxun.js → viewport-surface-status-jwLhIK_M.js} +1 -1
  280. package/dist/assets/{webworkerAll-qWuefF-u.js → webworkerAll-P6jePa6X.js} +1 -1
  281. package/dist/assets/{worker-Gtu-EAm9.js → worker-CJIsrsP6.js} +1 -1
  282. package/dist/assets/{workspace-arrangement-BnGzBm57.js → workspace-arrangement-B_OcbQbj.js} +1 -1
  283. package/dist/assets/{world-documents-DH7drgx-.js → world-documents-Bx3j867R.js} +1 -1
  284. package/dist/assets/{world-root-stage-binding-DIigD-mK.js → world-root-stage-binding-LEhjWDkn.js} +1 -1
  285. package/dist/assets/{xstate-animation-binding-BpYb4mXT.js → xstate-animation-binding-Dionc_fC.js} +1 -1
  286. package/dist/assets/{xstate-animation-meta-0RXvMgDk.js → xstate-animation-meta-XEmD_qc_.js} +1 -1
  287. package/dist-node/cli.js +16 -16
  288. package/package.json +16 -16
  289. package/dist/assets/CanvasSceneViewport-BdHcsAyR.js +0 -1
  290. package/dist/assets/EntityModelDocument-BkRbfE7C.js +0 -1
  291. package/dist/assets/InspectorObjectPreview-BooanIbq.js +0 -1
  292. package/dist/assets/Object3DDocumentToolbar-BGkgzg_Y.js +0 -1
  293. package/dist/assets/Object3DDocumentViewport-C81c8PFJ.js +0 -2
  294. package/dist/assets/StageHost-CSw286Im.js +0 -2
  295. package/dist/assets/autoplay.service-EjNkSGFD.js +0 -1
  296. package/dist/assets/blender-runtime-host-W_QVh8pY.js +0 -4
  297. package/dist/assets/blender-runtime.document-CxTCG8RI.js +0 -12
  298. package/dist/assets/build-player.document-Clkf52m6.js +0 -1
  299. package/dist/assets/component-board.service-Dj_INzxs.js +0 -2
  300. package/dist/assets/component-verbs.service-Do8eBA--.js +0 -1
  301. package/dist/assets/configurations-DFYaoXBK.js +0 -1
  302. package/dist/assets/deferred-ingest-play-C6qytzjB.js +0 -2
  303. package/dist/assets/design-time-layers-CCEX-9ul.js +0 -1
  304. package/dist/assets/editor-api-B0aNu3G5.js +0 -1
  305. package/dist/assets/game-document.service-DBSsz8Ne.js +0 -1
  306. package/dist/assets/game-network-DtzKFtge.js +0 -22
  307. package/dist/assets/gameplay-export-BNVUERuW.js +0 -1
  308. package/dist/assets/gameplay-replay-DEKg9ROx.js +0 -1
  309. package/dist/assets/generation-jobs-Bmm6k_GH.js +0 -1
  310. package/dist/assets/index-PKSmixoy.js +0 -1
  311. package/dist/assets/ingest-siblings-BJ66Uen_.js +0 -1
  312. package/dist/assets/instances.command-2QbcHvH-.js +0 -1
  313. package/dist/assets/live-project-verbs-nmQ1saHI.js +0 -1
  314. package/dist/assets/network-observer.service-CskzAy97.js +0 -1
  315. package/dist/assets/object3d-document-session-registry-DI9WfJDy.js +0 -2
  316. package/dist/assets/play.command-BmsyGtu0.js +0 -2
  317. package/dist/assets/r3f-design-session-Dwqxg13i.js +0 -2
  318. package/dist/assets/stage-keyboard-jfRYkBwZ.js +0 -1
  319. package/dist/assets/stage-overlay-set-Bo-JC6N0.js +0 -1
  320. package/dist/assets/stage-transform-tools-CSnDpsY3.js +0 -1
  321. package/dist/assets/story-media-presence-7Tbl7-hO.js +0 -1
  322. package/dist/assets/three-authoring.service-CIVEDuMV.js +0 -2
  323. package/dist/assets/three-integration-K2zwKa-Z.js +0 -2
  324. package/dist/assets/three-integration.service-kjZ0g0er.js +0 -1
  325. package/dist/assets/three-story-model-B0qnMa7M.js +0 -1
  326. package/dist/assets/transform-mode-request-COfeHSRX.js +0 -1
  327. package/dist/assets/transport.header-CFTM9Q_n.js +0 -1
  328. package/dist/assets/ui-board-document-BlKR5Cyh.js +0 -2
@@ -1 +0,0 @@
1
- import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{r as he,K as $,fw as ge,dG as R,dH as X,aJ as U,fx as H,aw as te,fy as xe,fz as oe,cE as T,aL as F,a1 as k,fA as fe,cW as me,fB as be,fC as Se,cD as q,a0 as _,cU as ye,de as ve,df as je,fD as ne,fE as ze,fF as se,dR as Y,fG as L,cR as Ee,fH as Q,cS as P,cT as I,dj as ee,fI as we,fJ as Ce,fK as ke,fL as Me,fM as Ge,fN as Ne}from"./index-flxMlfV4.js";import{r as u}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{S as Fe,a as re}from"./react-canvas-navigation-WxI8Mxyc.js";import{s as ie,c as ae,a as le,r as Le,b as K,m as ce,V as Pe,d as Te,e as Ve}from"./RootSelectionOverlay-BzEZwAaO.js";import{a as De}from"./Toolbar-Bo-l61Lo.js";import{r as We}from"./transform-mode-request-COfeHSRX.js";import{T as Ye}from"./TransientHint-DFAcEEFI.js";import{p as $e}from"./layered-pick-DKNj5L29.js";function Re(t,s,o,r){const g=i=>()=>{s(),We(t,i)};return he().keyboard.bindActions([{id:"transform.select",scope:"stage",run:g("select")},{id:"transform.translate",scope:"stage",run:g("translate")},{id:"transform.rotate",scope:"stage",run:g("rotate")},{id:"transform.scale",scope:"stage",run:g("scale")},{id:"canvas.panMode",scope:"stage",run:()=>o("pan")},{id:"canvas.rulerMode",scope:"stage",run:()=>o("ruler")},{id:"canvas.toggleGrid",scope:"stage",run:r}])}const nt="#111214";function de(t,s=32){let o=s>0?s:32;for(;o*t<12;)o*=2;for(;o*t>48;)o/=2;return o}function D(t){if(t.length===0)return null;let s=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,g=Number.NEGATIVE_INFINITY;for(const i of t)s=Math.min(s,i.x),o=Math.min(o,i.y),r=Math.max(r,i.x+i.width),g=Math.max(g,i.y+i.height);return{x:s,y:o,width:r-s,height:g-o}}function B(t,s,o){if(!o||!(o.width>0)||!(o.height>0))return;const r=Math.max(1,t.clientWidth-96),g=Math.max(1,t.clientHeight-96),i=Math.min(4,Math.max(re,Math.min(r/o.width,g/o.height)));s.setView(t.clientWidth/2-(o.x+o.width/2)*i,t.clientHeight/2-(o.y+o.height/2)*i,i)}function st({view:t,documentId:s}){const o=$();u.useSyncExternalStore(o.subscribe,o.getSnapshot),u.useEffect(()=>ge(s,"canvas"),[s]),u.useSyncExternalStore(R,X);const r=U(s),g=H(s),i=te()?.config.resolution,l=u.useSyncExternalStore(t.subscribe,t.get,t.get);u.useSyncExternalStore(u.useCallback(x=>ie(t,x),[t]),u.useCallback(()=>ae(t),[t]));const c=le(t),v=o.snap2D,a=de(l.zoom,v.step)*l.zoom,y=a*Math.max(1,Math.round(v.primaryEvery)),p=l.x+v.offsetX*l.zoom,b=l.y+v.offsetY*l.zoom;return e.jsxs("div",{"data-testid":"canvas-scene-backdrop",style:{position:"absolute",inset:0,zIndex:2,overflow:"hidden",pointerEvents:"none"},children:[r&&(!g.gridWhenSnapping||o.snapEnabled)&&e.jsx("div",{"data-testid":"canvas-scene-grid",style:{position:"absolute",inset:0,backgroundImage:"linear-gradient(rgba(255,255,255,.075) 1px, transparent 1px),linear-gradient(90deg, rgba(255,255,255,.075) 1px, transparent 1px),linear-gradient(rgba(255,255,255,.14) 1px, transparent 1px),linear-gradient(90deg, rgba(255,255,255,.14) 1px, transparent 1px)",backgroundPosition:`${p}px ${b}px`,backgroundSize:`${a}px ${a}px, ${a}px ${a}px, ${y}px ${y}px, ${y}px ${y}px`}}),g.viewport&&i&&i.width>0&&i.height>0&&e.jsx("div",{"data-testid":"canvas-scene-viewport-rect",style:{position:"absolute",left:l.x,top:l.y,width:i.width*l.zoom,height:i.height*l.zoom,boxSizing:"border-box",borderStyle:"solid",borderWidth:1,borderColor:"rgba(160, 120, 255, .75)"}}),g.origin&&e.jsxs(e.Fragment,{children:[e.jsx("div",{"data-testid":"canvas-scene-origin-y",style:{position:"absolute",left:0,right:0,top:l.y,height:1,background:"rgba(238, 91, 91, .8)"}}),e.jsx("div",{"data-testid":"canvas-scene-origin-x",style:{position:"absolute",top:0,bottom:0,left:l.x,width:1,background:"rgba(87, 199, 126, .8)"}}),e.jsx("div",{style:{position:"absolute",left:l.x+6,top:l.y+6,color:"rgba(255,255,255,.68)",font:"10px ui-monospace, SFMono-Regular, Menlo, monospace"},children:"0, 0"})]}),g.guides&&c.map(x=>e.jsx("div",{"data-testid":`canvas-scene-guide-${x.axis}`,title:`${x.axis.toUpperCase()} ${Math.round(x.value*100)/100} · drag to move · right-click to remove`,onContextMenu:S=>{S.preventDefault(),Le(t,x.id)},onPointerDown:S=>{S.preventDefault(),S.stopPropagation();const h=S.currentTarget.parentElement?.getBoundingClientRect();if(!h)return;const E=d=>{const m=x.axis==="x"?d.clientX-h.left:d.clientY-h.top,n=t.get();ce(t,x.id,(m-(x.axis==="x"?n.x:n.y))/n.zoom)},C=()=>{window.removeEventListener("pointermove",E),window.removeEventListener("pointerup",C)};window.addEventListener("pointermove",E),window.addEventListener("pointerup",C,{once:!0})},style:{position:"absolute",pointerEvents:"auto",cursor:x.axis==="x"?"ew-resize":"ns-resize",...x.axis==="x"?{left:l.x+x.value*l.zoom-4,top:20,bottom:0,width:9,borderLeft:"1px solid rgba(74, 180, 255, .95)"}:{top:l.y+x.value*l.zoom-4,left:20,right:0,height:9,borderTop:"1px solid rgba(74, 180, 255, .95)"}}},x.id)),g.rulers&&e.jsx(Xe,{view:t})]})}function Xe({view:t}){const s=u.useSyncExternalStore(t.subscribe,t.get,t.get),o=u.useRef(null),r=u.useRef(null),[g,i]=u.useState({width:0,height:0});u.useEffect(()=>{const p=()=>{const x=o.current?.clientWidth??0,S=r.current?.clientHeight??0;i(h=>h.width===x&&h.height===S?h:{width:x,height:S})};if(p(),typeof ResizeObserver>"u")return;const b=new ResizeObserver(p);return o.current&&b.observe(o.current),r.current&&b.observe(r.current),()=>b.disconnect()},[]);const l=(p,b)=>{if(!(b>0))return[];const x=p==="x"?s.x:s.y,S=de(s.zoom),h=S*s.zoom,E=20,C=Math.ceil((E-x)/h),d=Math.floor((E+b-x)/h);return Array.from({length:Math.max(0,d-C+1)},(m,n)=>{const f=C+n;return{major:f%4===0,screen:x+f*h-E,value:f*S}})},c=l("x",g.width),v=l("y",g.height),a=(p,b)=>{b.preventDefault(),b.stopPropagation();const x=b.currentTarget.parentElement?.getBoundingClientRect();if(!x)return;const S=(d,m)=>{const n=t.get();return((p==="x"?d-x.left:m-x.top)-(p==="x"?n.x:n.y))/n.zoom},h=Te(t,p,S(b.clientX,b.clientY)),E=d=>ce(t,h,S(d.clientX,d.clientY)),C=()=>{window.removeEventListener("pointermove",E),window.removeEventListener("pointerup",C)};window.addEventListener("pointermove",E),window.addEventListener("pointerup",C,{once:!0})},y={position:"absolute",pointerEvents:"auto",backgroundColor:"rgba(24, 26, 30, .96)",border:0,borderColor:"rgba(255,255,255,.14)",boxSizing:"border-box"};return e.jsxs(e.Fragment,{children:[e.jsx("button",{ref:o,type:"button","data-testid":"canvas-scene-ruler-x","aria-label":"Horizontal ruler; drag to create a horizontal guide",onPointerDown:p=>a("y",p),style:{...y,left:20,right:0,top:0,height:20,borderBottomStyle:"solid",borderBottomWidth:1,cursor:"row-resize",padding:0,overflow:"hidden"},children:c.map(p=>e.jsx("span",{"aria-hidden":"true","data-ruler-axis":"x","data-ruler-value":p.value,style:{position:"absolute",left:p.screen,bottom:0,width:1,height:p.major?8:4,background:p.major?"rgba(255,255,255,.5)":"rgba(255,255,255,.28)",pointerEvents:"none"},children:p.major&&e.jsx("span",{style:{position:"absolute",left:3,bottom:5,color:"rgba(255,255,255,.62)",font:"9px ui-monospace, SFMono-Regular, Menlo, monospace",lineHeight:1,whiteSpace:"nowrap"},children:p.value})},p.value))}),e.jsx("button",{ref:r,type:"button","data-testid":"canvas-scene-ruler-y","aria-label":"Vertical ruler; drag to create a vertical guide",onPointerDown:p=>a("x",p),style:{...y,top:20,bottom:0,left:0,width:20,borderRightStyle:"solid",borderRightWidth:1,cursor:"col-resize",padding:0,overflow:"hidden"},children:v.map(p=>e.jsx("span",{"aria-hidden":"true","data-ruler-axis":"y","data-ruler-value":p.value,style:{position:"absolute",top:p.screen,right:0,width:p.major?8:4,height:1,background:p.major?"rgba(255,255,255,.5)":"rgba(255,255,255,.28)",pointerEvents:"none"},children:p.major&&e.jsx("span",{style:{position:"absolute",right:4,top:3,color:"rgba(255,255,255,.62)",font:"9px ui-monospace, SFMono-Regular, Menlo, monospace",lineHeight:1,whiteSpace:"nowrap",writingMode:"vertical-rl",transform:"rotate(180deg)"},children:p.value})},p.value))}),e.jsx("div",{style:{...y,left:0,top:0,width:20,height:20}})]})}function rt({active:t,adapter:s,containerRef:o,view:r,documentId:g}){const i=$();u.useSyncExternalStore(i.subscribe,i.getSnapshot),u.useSyncExternalStore(R,X);const l=u.useSyncExternalStore(r.subscribe,r.get,r.get),[c,v]=u.useState(()=>O.get(r)??null),a=u.useCallback(d=>{O.set(r,d),v(d)},[r]);u.useEffect(()=>xe(g),[g]),u.useEffect(()=>{if(t)return Re(i,()=>a(null),d=>a(O.get(r)===d?null:d),()=>ue(g))},[t,i,a,r,g]);const y=i.transformMode,p=u.useRef(y);u.useEffect(()=>{p.current!==y&&(p.current=y,a(null))},[y,a]);const b=u.useCallback(d=>{const m=o.current;if(!m)return;const n=Math.min(Fe,Math.max(re,d)),f=m.clientWidth/2,j=m.clientHeight/2,z=(f-l.x)/l.zoom,G=(j-l.y)/l.zoom;r.setView(f-z*n,j-G*n,n)},[o,l,r]),x=u.useCallback(d=>{if(!s?.rects)return[];const m=[];for(const n of d){const f=s.rects.rect(n);f&&f.width>0&&f.height>0&&m.push(f)}return m},[s]),S=u.useCallback(()=>{const d=o.current;d&&B(d,r,D(x(i.selectedEntityIds)))},[o,x,i,r]),h=u.useCallback(()=>{const d=o.current;if(!d)return;const m=r.get(),n=te()?.config.resolution,f=n?n.width/2:0,j=n?n.height/2:0;r.setView(d.clientWidth/2-f*m.zoom,d.clientHeight/2-j*m.zoom,m.zoom)},[o,r]),E=u.useCallback(()=>{const d=o.current,m=D(x(i.selectedEntityIds));if(!d||!m)return;const n=r.get();r.setView(d.clientWidth/2-(m.x+m.width/2)*n.zoom,d.clientHeight/2-(m.y+m.height/2)*n.zoom,n.zoom)},[o,x,i,r]),C=u.useCallback(()=>{const d=o.current;!d||!s||B(d,r,D(x(oe(s))))},[s,o,x,r]);return u.useEffect(()=>{if(t)return i.onViewportAction(d=>{if(d.type==="focus-entity"){const m=o.current;if(!m)return;B(m,r,D(x([d.id])))}else d.type==="focus-selection"?S():d.type==="focus-scene"&&C()})},[t,o,C,S,x,i,r]),e.jsxs(e.Fragment,{children:[e.jsx(Ye,{}),e.jsx(De,{dimensions:"2d",otherToolActive:c!==null,onToolArmed:()=>a(null),viewTools:e.jsxs(e.Fragment,{children:[e.jsx(T,{text:"List Select: click to list the selectable nodes there",children:e.jsx(F,{"aria-label":"List Select mode","aria-pressed":c==="list",size:"comfortable",onClick:()=>a(c==="list"?null:"list"),children:e.jsx(k,{icon:fe,size:"md"})})}),e.jsx(T,{text:"Pivot: click or drag to put the selected node's pivot there",children:e.jsx(F,{"aria-label":"Pivot mode","aria-pressed":c==="pivot",size:"comfortable",onClick:d=>{if(d.shiftKey){const m=s?[...i.selectedEntityIds].map(f=>s.rects?.rect(f)).filter(f=>f!=null):[],n=D(m);n&&K(r,{x:n.x+n.width/2,y:n.y+n.height/2}),a("pivot");return}a(c==="pivot"?null:"pivot")},children:e.jsx(k,{icon:me,size:"md"})})}),e.jsx(T,{text:"Pan (Space-drag pans in any mode)",children:e.jsx(F,{"aria-label":"Pan mode","aria-pressed":c==="pan",size:"comfortable",onClick:()=>a(c==="pan"?null:"pan"),children:e.jsx(k,{icon:be,size:"md"})})}),e.jsx(T,{text:"Ruler: drag to measure distance and angle",children:e.jsx(F,{"aria-label":"Ruler mode","aria-pressed":c==="ruler",size:"comfortable",onClick:()=>a(c==="ruler"?null:"ruler"),children:e.jsx(k,{icon:Se,size:"md"})})})]}),trailingTools:e.jsxs(e.Fragment,{children:[e.jsx(Ie,{adapter:s,selected:[...i.selectedEntityIds]}),e.jsx(Oe,{adapter:s,selected:[...i.selectedEntityIds]}),e.jsx(Ae,{documentId:g,view:r,hasSelection:i.selectedEntityIds.size>0,onCenterSelection:E,onFrameSelection:S})]})}),e.jsx(He,{adapter:s,view:r,documentId:g}),c?e.jsx(Be,{mode:c,view:r,adapter:s,containerRef:o,onExit:()=>a(null)}):null,e.jsx(q,{label:"2D scene display",className:"volter-viewport-toolbar volter-viewport-toolbar-right","data-volter-canvas-navigation-ignore":"true",children:e.jsx(_,{"aria-label":"Frame all",variant:"ghost",size:"comfortable",onClick:C,children:"Frame all"})}),e.jsxs(q,{label:"2D scene navigation",className:"volter-canvas-scene-navigation","data-volter-canvas-navigation-ignore":"true",children:[e.jsx(F,{"aria-label":"Center view",title:"Center view: the game's viewport in the middle of the pane, at this zoom",size:"comfortable",onClick:h,children:e.jsx(k,{icon:ye,size:"md"})}),e.jsx(F,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>b(l.zoom/1.2),children:e.jsx(k,{icon:ve,size:"md"})}),e.jsxs(_,{variant:"ghost","aria-label":"Reset zoom to 100%",title:"Reset zoom to 100%",size:"comfortable",onClick:()=>b(1),children:[Math.round(l.zoom*100),"%"]}),e.jsx(F,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>b(l.zoom*1.2),children:e.jsx(k,{icon:je,size:"md"})})]})]})}function He({adapter:t,view:s,documentId:o}){const r=u.useSyncExternalStore(s.subscribe,s.get,s.get),g=u.useCallback(a=>t?.subscribe?.(a)??(()=>{}),[t]),[i,l]=u.useState(0);u.useEffect(()=>g(()=>l(a=>a+1)),[g]),u.useSyncExternalStore(R,X);const c=H(o);if(!t?.inspector||!t.rects||!c.lock&&!c.group)return null;const v=oe(t).flatMap(a=>{const y=c.lock&&t.inspector?.get(a,"locked")===!0,p=c.group&&t.inspector?.get(a,"grouped")===!0,b=y||p?t.rects?.rect(a):null;return b?[{id:a,locked:y,grouped:p,x:r.x+b.x*r.zoom,y:r.y+b.y*r.zoom}]:[]});return e.jsx("div",{"data-testid":"canvas-scene-edit-gizmos","data-revision":i,style:{position:"absolute",inset:0,zIndex:55,pointerEvents:"none",overflow:"hidden"},children:v.map(a=>e.jsxs("div",{"data-testid":"canvas-scene-edit-gizmo","data-locked":a.locked,"data-grouped":a.grouped,style:{position:"absolute",left:a.x+2,top:a.y+2,display:"flex",gap:2,color:"#fff"},children:[a.locked?e.jsx(k,{icon:ne,size:"xs"}):null,a.grouped?e.jsx(k,{icon:se,size:"xs"}):null]},a.id))})}function Ae({documentId:t,view:s,hasSelection:o,onCenterSelection:r,onFrameSelection:g}){const[i,l]=u.useState(!1),c=u.useRef(null);u.useSyncExternalStore(R,X),u.useSyncExternalStore(u.useCallback(h=>ie(s,h),[s]),u.useCallback(()=>ae(s),[s]));const v=$();u.useSyncExternalStore(v.subscribe,v.getSnapshot);const a=H(t),y=U(t),p=[{label:"Show Grid",on:y&&!a.gridWhenSnapping,pick:()=>{Y(t,!0),L(t,{gridWhenSnapping:!1})}},{label:"Show Grid When Snapping",on:y&&a.gridWhenSnapping,pick:()=>{Y(t,!0),L(t,{gridWhenSnapping:!0})}},{label:"Hide Grid",on:!y,pick:()=>Y(t,!1)}],b=()=>ue(t),x=[{label:"Rulers",on:a.rulers,toggle:()=>L(t,{rulers:!a.rulers})},{label:"Guides",on:a.guides,toggle:()=>L(t,{guides:!a.guides})},{label:"Origin",on:a.origin,toggle:()=>L(t,{origin:!a.origin})},{label:"Viewport",on:a.viewport,toggle:()=>L(t,{viewport:!a.viewport})}],S=h=>()=>{h(),l(!1)};return e.jsxs(e.Fragment,{children:[e.jsx(_,{ref:c,"aria-label":"View","aria-haspopup":"menu","aria-expanded":i,variant:"ghost",size:"comfortable",onClick:()=>l(!i),children:"View"}),i&&e.jsxs(Ee,{anchorRef:c,align:"end",clamp:!0,"aria-label":"2D view",onDismiss:()=>l(!1),children:[e.jsxs(Q,{label:"Grid","data-testid":"canvas-scene-grid-submenu",children:[p.map(h=>e.jsxs(P,{role:"menuitemradio","aria-checked":h.on,onSelect:S(h.pick),children:[e.jsx("span",{className:"volter-menu-check",children:h.on&&e.jsx(k,{icon:I,size:"xs"})}),h.label]},h.label)),e.jsx(ee,{}),e.jsxs(P,{"data-testid":"canvas-scene-toggle-grid",onSelect:S(b),children:[e.jsx("span",{className:"volter-menu-check"}),"Toggle Grid"]})]}),x.map(h=>e.jsxs(P,{role:"menuitemcheckbox","aria-checked":h.on,onSelect:S(h.toggle),children:[e.jsx("span",{className:"volter-menu-check",children:h.on&&e.jsx(k,{icon:I,size:"xs"})}),h.label.startsWith("Show ")?h.label:`Show ${h.label}`]},h.label)),e.jsx(Q,{label:"Gizmos","data-testid":"canvas-scene-gizmos-submenu",children:[["position","Position"],["lock","Lock"],["group","Group"],["transformation","Transformation"]].map(([h,E])=>e.jsxs(P,{role:"menuitemcheckbox","aria-checked":a[h],onSelect:S(()=>L(t,{[h]:!a[h]})),children:[e.jsx("span",{className:"volter-menu-check",children:a[h]&&e.jsx(k,{icon:I,size:"xs"})}),E]},h))}),e.jsx(ee,{}),e.jsxs(P,{disabled:!o,onSelect:S(r),children:[e.jsx("span",{className:"volter-menu-check"}),"Center Selection"]}),e.jsxs(P,{disabled:!o,onSelect:S(g),children:[e.jsx("span",{className:"volter-menu-check"}),"Frame Selection"]}),e.jsxs(P,{disabled:le(s).length===0,onSelect:S(()=>Ve(s)),children:[e.jsx("span",{className:"volter-menu-check"}),"Clear Guides"]})]})]})}function Ie({adapter:t,selected:s}){const o=s.filter(l=>t?.inspector?.properties(l).some(c=>c.path==="locked")),r=o.length>0&&o.every(l=>t?.inspector?.get(l,"locked")===!0),g=o.length>1?"nodes":"node",i=r?`Unlock selected ${g}`:`Lock selected ${g}`;return e.jsx(T,{text:o.length>0?i:"Select a node to lock it",children:e.jsx(F,{"aria-label":i,"aria-pressed":r,size:"comfortable",disabled:o.length===0||!t?.inspector?.set,onClick:()=>{for(const l of o)t?.inspector?.set?.(l,"locked",!r)},children:e.jsx(k,{icon:r?ne:ze,size:"md"})})})}function ue(t){const s=U(t)&&!H(t).gridWhenSnapping;Y(t,!0),L(t,{gridWhenSnapping:s})}const O=new WeakMap;function Be({mode:t,view:s,adapter:o,containerRef:r,onExit:g}){const i=$(),l=u.useSyncExternalStore(s.subscribe,s.get,s.get),[c,v]=u.useState(null),[a,y]=u.useState(null);u.useEffect(()=>{const n=f=>{f.key==="Escape"&&(t==="pivot"&&K(s,null),g())};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[g]);const p=(n,f)=>{const j=r.current?.getBoundingClientRect(),z=s.get(),G=n-(j?.left??0),w=f-(j?.top??0);return{x:(G-z.x)/z.zoom,y:(w-z.y)/z.zoom}},b=n=>{const f=i.snap2D,j=(G,w)=>i.snapEnabled&&f.step>0?Math.round((G-w)/f.step)*f.step+w:G,z={x:j(n.x,f.offsetX),y:j(n.y,f.offsetY)};return f.pixel?{x:Math.round(z.x),y:Math.round(z.y)}:z},x=(n,f,j)=>{if(!o)return f;const z=Ce(o,n);return ke(f,Ge(o,n)??(z?Ne(z):null),{invert:j,smart:i.smartSnap,gridOn:i.snapEnabled,grid:i.snap2D,threshold:Me/Math.max(s.get().zoom,.01)})},S=n=>{if(n.button!==0)return;if(n.preventDefault(),t==="list"){const w=$e(i,n.clientX,n.clientY,o?{adapter:o}:{});y(w.length>0?{x:n.clientX,y:n.clientY,ids:w}:null);return}if(t==="pivot"&&n.shiftKey){K(s,b(p(n.clientX,n.clientY)));return}if(t==="pivot"){const w=i.selectedEntityIds,N=w.size===1&&o?[...w][0]:null,V=N&&o?we(o,N):null,W=N?V?.layers(N).find(M=>M.category==="origin")?.handles.find(M=>M.writable):void 0;if(!N||!V||!W)return;n.currentTarget.setPointerCapture(n.pointerId);const A=M=>{const J=x(N,p(M.clientX,M.clientY),M.metaKey||M.ctrlKey);return[J.x,J.y,0]};V.preview(N,W.id,A(n));const Z=M=>V.preview(N,W.id,A(M)),pe=M=>{window.removeEventListener("pointermove",Z),V.commit(N,W.id,A(M))};window.addEventListener("pointermove",Z),window.addEventListener("pointerup",pe,{once:!0});return}n.currentTarget.setPointerCapture(n.pointerId);const f={clientX:n.clientX,clientY:n.clientY,pose:s.get()},j=p(n.clientX,n.clientY);t==="ruler"&&v({from:b(j),to:b(j)});const z=w=>{t==="pan"?s.setView(f.pose.x+w.clientX-f.clientX,f.pose.y+w.clientY-f.clientY,f.pose.zoom):v({from:b(j),to:b(p(w.clientX,w.clientY))})},G=()=>{window.removeEventListener("pointermove",z),window.removeEventListener("pointerup",G)};window.addEventListener("pointermove",z),window.addEventListener("pointerup",G,{once:!0})},h=n=>({x:l.x+n.x*l.zoom,y:l.y+n.y*l.zoom}),E=c?Math.hypot(c.to.x-c.from.x,c.to.y-c.from.y):0,C=c?Math.atan2(c.to.y-c.from.y,c.to.x-c.from.x)*180/Math.PI:0,d=c?h(c.from):null,m=c?h(c.to):null;return e.jsxs("div",{"data-testid":`canvas-scene-${t}-layer`,"data-volter-canvas-navigation-ignore":"true",onPointerDown:S,style:{position:"absolute",inset:0,zIndex:60,cursor:t==="pan"?"grab":t==="list"?"context-menu":"crosshair"},children:[a&&o?e.jsx(Pe,{state:a,adapter:o,onClose:()=>y(null)}):null,d&&m?e.jsxs(e.Fragment,{children:[e.jsx("svg",{style:{position:"absolute",inset:0,width:"100%",height:"100%",pointerEvents:"none"},children:e.jsx("line",{x1:d.x,y1:d.y,x2:m.x,y2:m.y,stroke:"#ff5fa2",strokeWidth:1.5})}),e.jsx("div",{"data-testid":"canvas-scene-ruler-reading",style:{position:"absolute",left:(d.x+m.x)/2+8,top:(d.y+m.y)/2+8,padding:"2px 6px",borderRadius:4,background:"rgba(24, 26, 30, .92)",color:"#fff",font:"11px ui-monospace, SFMono-Regular, Menlo, monospace",pointerEvents:"none",whiteSpace:"nowrap"},children:`${E.toFixed(1)} px · ${C.toFixed(1)}° · Δ ${(c.to.x-c.from.x).toFixed(1)}, ${(c.to.y-c.from.y).toFixed(1)}`})]}):null]})}function Oe({adapter:t,selected:s}){const o=s.filter(l=>t?.inspector?.properties(l).some(c=>c.path==="grouped")),r=o.length>0&&o.every(l=>t?.inspector?.get(l,"grouped")===!0),g=o.length>1?"nodes":"node",i=r?`Ungroup selected ${g}`:`Group selected ${g} with their children`;return e.jsx(T,{text:o.length>0?i:"Select a node to group it",children:e.jsx(F,{"aria-label":i,"aria-pressed":r,size:"comfortable",disabled:o.length===0||!t?.inspector?.set,onClick:()=>{for(const l of o)t?.inspector?.set?.(l,"grouped",!r)},children:e.jsx(k,{icon:se,size:"md"})})})}export{nt as C,st as a,rt as b};
@@ -1 +0,0 @@
1
- import{a as n}from"./jsx-runtime-DPjLkJKQ.js";import{t as f}from"./editor-shell-store-DlGykD-E.js";import{K as d,af as v}from"./index-flxMlfV4.js";import{r as l}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a as S}from"./live-mixers-B-bwLZ7c.js";import{c as h,a as b,b as x}from"./asset-preview-C36PaXvM.js";import{O as j}from"./StageHost-CSw286Im.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-DI1Wkr8F.js";import"./workspace-arrangement-BnGzBm57.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-C8dmlLGA.js";import"./entity-object-C374JqRs.js";import"./three-contract-Dkt6PmWY.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-EEQa08In.js";import"./studio-environment-Dw2FBct5.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-DVnNjIbQ.js";import"./standard-viewport-dressing-B8VpmbHt.js";import"./content-bounds-Ax7CFkXJ.js";import"./preview-renderer-BrYNFV1p.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-BS3uYvYU.js";import"./three-viewport-presentation-C5wGhMgD.js";import"./clip-planes-CnAI6DZn.js";import"./three-2yjp9YMj.js";import"./component-instance-root-pq7uyyej.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-WJb6B3qQ.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-K2zwKa-Z.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-DKNj5L29.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-DI9WfJDy.js";import"./viewport-door-Brt6-rPp.js";import"./scene-framing-CljHc6tN.js";import"./source-object3d-authoring-adapter-qg_NN2PX.js";import"./three-projection-core-xgnaC08N.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-Dvkyjqwq.js";import"./viewport-surface-status-Dbc5Yxun.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 Vt({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{Vt as EntityModelDocument,E as Object3DSnapshotDocument};
@@ -1 +0,0 @@
1
- import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{Object3DSnapshotDocument as m}from"./EntityModelDocument-BkRbfE7C.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./editor-shell-store-DlGykD-E.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-DI1Wkr8F.js";import"./workspace-arrangement-BnGzBm57.js";import"./index-flxMlfV4.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-C8dmlLGA.js";import"./entity-object-C374JqRs.js";import"./three-contract-Dkt6PmWY.js";import"./live-mixers-B-bwLZ7c.js";import"./asset-preview-C36PaXvM.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-EEQa08In.js";import"./studio-environment-Dw2FBct5.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-CSw286Im.js";import"./three-state-DVnNjIbQ.js";import"./standard-viewport-dressing-B8VpmbHt.js";import"./content-bounds-Ax7CFkXJ.js";import"./preview-renderer-BrYNFV1p.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-BS3uYvYU.js";import"./three-viewport-presentation-C5wGhMgD.js";import"./clip-planes-CnAI6DZn.js";import"./three-2yjp9YMj.js";import"./component-instance-root-pq7uyyej.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-WJb6B3qQ.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-K2zwKa-Z.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-DKNj5L29.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-DI9WfJDy.js";import"./viewport-door-Brt6-rPp.js";import"./scene-framing-CljHc6tN.js";import"./source-object3d-authoring-adapter-qg_NN2PX.js";import"./three-projection-core-xgnaC08N.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-Dvkyjqwq.js";import"./viewport-surface-status-Dbc5Yxun.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{dB as ee,dC as N,dD as se,dE as L,dF as te,dG as ie,dH as z,dI as B,aH as re,aI as ae,dJ as S,dK as oe,cO as F,cE as v,aL as f,a1 as n,dg as ne,a0 as W,cQ as le,cJ as ce,cR as A,cS as d,dj as H,cT as de,dL as pe,dM as me,dN as K,dh as U,dO as ue,dP as he,dQ as $,aM as ge,aK as G,dR as ve,aJ as _,dS as be,dT as xe,dU as je,cK as we,dV as Se,dW as fe}from"./index-flxMlfV4.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{e as ye,f as Ce}from"./asset-preview-C36PaXvM.js";import{s as Ee}from"./model-inspection-BS3uYvYU.js";import{s as Pe,o as J,a as Ve}from"./object3d-document-session-registry-DI9WfJDy.js";import{v as ke}from"./viewport-door-Brt6-rPp.js";import{v as Q,V as Me,a as De,p as Oe,b as Te,c as Re}from"./ViewportShadingMenu-CWutLX1G.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"./editor-layers-DI1Wkr8F.js";import"./workspace-arrangement-BnGzBm57.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-EEQa08In.js";import"./studio-environment-Dw2FBct5.js";import"./user-data-C8dmlLGA.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";const q=()=>()=>{},b=()=>0,Ne=[{key:"skeletons",label:"Bones"},{key:"weights",label:"Weights"},{key:"cursor",label:"3D Cursor"},{key:"cameras",label:"Cameras"},{key:"lights",label:"Lights"},{key:"empties",label:"Empties"}];function ps({documentId:i,assetPath:p}){r.useSyncExternalStore(Pe,J,J);const t=Ve(i);r.useSyncExternalStore(ee,N,N),r.useSyncExternalStore(t?.subscribe??q,t?.getSnapshot??b,t?.getSnapshot??b),r.useSyncExternalStore(se,L,L);const l=te(i);r.useSyncExternalStore(l?.subscribe??q,l?.getSnapshot??b,l?.getSnapshot??b);const X=ke(i),[y,C]=r.useState(null),[E,h]=r.useState(null),[P,g]=r.useState(!1),[V,c]=r.useState(!1),k=r.useRef(null),M=r.useRef(null);if(r.useSyncExternalStore(ie,z,z),!t)return null;const a=t.presentation(),{lighting:m}=B(i),u=re(i),D=u?ae(u.stageKind):null,Y=u?.documentLayer?.all?.lighting?.studioPreset===S.id||D?.all?.lighting?.studioPreset===S.id,x=u?oe(u.stageKind):!1,O=e=>x?{modes:{[B(i).drawMode]:{lighting:e}}}:{all:{lighting:e}},j=new Set(Object.entries(D?.modes??{}).filter(([,e])=>e?.lighting!==void 0).map(([e])=>e)),w=new Set(Ee(t.root).filter(e=>e.available).map(e=>e.mode)),Z=[...x?Q.map(e=>e.mode==="solid"?{...e,label:"Solid",description:"Materials' colours under the studio lights"}:e.mode==="clay"?{...e,label:"Clay"}:e):Q,...j.has("preview")?[{mode:"preview",label:"Material Preview",description:"Materials lit by a preview environment"}]:[],...j.has("rendered")?[{mode:"rendered",label:"Rendered",description:"Lit as a render is, by the scene's own lights"}]:[],...w.has("uv")?[{mode:"uv",label:"UV",description:"UV coordinates as surface color"}]:[],...w.has("vertex-colors")?[{mode:"vertex-colors",label:"Vertex colors",description:"Authored color attributes without textures"}]:[]],T=async e=>{if(p){h(null);try{await fe().saveThumbnailFraming(p,e?void 0:t.cameraPose())}catch(o){h(o instanceof Error?o.message:String(o))}}},I=async()=>{h(null);try{const e={background:a.background},o=p?.toLowerCase().endsWith(".spz")?await ye(p,e):Ce(t.root,e);C(`data:image/png;base64,${o.contactSheet.base64}`)}catch(e){h(e instanceof Error?e.message:String(e))}},R=t.selection().length>0?"Frame selection":"Frame all";return s.jsxs("div",{className:"volter-model-document-header",children:[s.jsxs(F,{compact:!0,label:"Viewport view controls",className:"volter-model-viewport-toolbar volter-model-viewport-toolbar--view",children:[s.jsx(v,{text:R,children:s.jsx(f,{"aria-label":R,onClick:()=>t.frame(),children:s.jsx(n,{icon:ne,size:"md"})})}),s.jsxs("div",{className:"volter-viewport-popover-anchor",children:[s.jsx(v,{text:"Camera orientation and projection",children:s.jsxs(W,{ref:k,type:"button",size:"compact",variant:"secondary","aria-label":`Camera view: ${a.projection}`,"aria-haspopup":"menu","aria-expanded":P,onClick:()=>g(e=>!e),className:"volter-model-toolbar-labelled-control",children:[s.jsx(n,{icon:le,size:"sm"}),s.jsx("span",{children:a.projection==="perspective"?"Perspective":"Orthographic"}),s.jsx(n,{icon:ce,size:"xs"})]})}),P&&s.jsxs(A,{anchorRef:k,align:"start",clamp:!0,"aria-label":"Camera view",onDismiss:()=>g(!1),style:{minWidth:210},children:[["front","right","top","isometric"].map(e=>s.jsx(d,{onSelect:()=>{t.setViewPreset(e,"view"),g(!1)},children:e==="isometric"?"Perspective 3/4":`${e[0]?.toUpperCase()}${e.slice(1)} view`},e)),s.jsx(H,{}),["perspective","orthographic"].map(e=>s.jsxs(d,{role:"menuitemradio","aria-checked":a.projection===e,onSelect:()=>{t.setProjection(e),g(!1)},children:[s.jsx("span",{className:"volter-menu-check",children:a.projection===e&&s.jsx(n,{icon:de,size:"xs"})}),e==="perspective"?"Perspective":"Orthographic"]},e))]})]}),w.has("skeleton")?s.jsx(v,{text:`Rig: ${a.skeleton?"Visible":"Hidden"}`,children:s.jsx(f,{"aria-label":"Toggle rig overlay","aria-pressed":a.skeleton,onClick:()=>t.setSkeleton(!a.skeleton),children:s.jsx(n,{icon:pe,size:"md"})})}):null,me("object3d-document").map(({id:e,Component:o})=>s.jsx(o,{documentId:i},e))]}),s.jsxs(F,{compact:!0,label:"Viewport preview controls",className:"volter-model-viewport-toolbar volter-model-viewport-toolbar--preview",children:[s.jsxs(Me,{mode:a.mode,onChange:e=>t.setMode(e),choices:Z,segments:x?Oe(j):De,children:[K().length>0?s.jsxs("label",{children:[s.jsx("span",{children:"View"}),s.jsxs(U,{"aria-label":"View preset",value:"",onChange:e=>{e.target.value&&ue(i,e.target.value)},children:[s.jsx("option",{value:"",children:"Choose…"}),K().map(e=>s.jsx("option",{value:e.id,children:e.title},e.id))]})]}):null,s.jsxs("label",{children:[s.jsx("span",{children:"Lighting"}),s.jsxs(U,{"aria-label":"Lighting",value:m.source==="studio"?`studio:${m.studioPreset}`:m.source,onChange:e=>{const o=e.target.value;$(i,O(o.startsWith("studio:")?{source:"studio",studioPreset:o.slice(7)}:{source:o}))},children:[he().filter(e=>e.id!==S.id||Y).map(e=>s.jsx("option",{value:`studio:${e.id}`,children:e.title},e.id)),s.jsx("option",{value:"scene",children:"Scene lights"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"Exposure"}),s.jsx(ge,{"aria-label":"Preview exposure",type:"range",min:"0.2",max:"2",step:"0.1",value:m.tone.exposure,onChange:e=>$(i,O({tone:{exposure:Number(e.target.value)}}))}),s.jsx(G,{as:"span",variant:"caption",children:m.tone.exposure.toFixed(1)})]})]}),s.jsx(Te,{glyph:s.jsx(Re,{}),choices:[{id:"grid",label:"Grid",enabled:_(i),onToggle:()=>ve(i,!_(i))},{id:"bounds",label:"Bounds",enabled:a.bounds,onToggle:()=>t.setBounds(!a.bounds)},...l===null?[]:Ne.filter(e=>X.includes(e.key)).map(e=>({id:e.key,label:e.label,enabled:l.helperVisibility[e.key],onToggle:()=>l.toggleHelperType(e.key)}))]}),s.jsxs("div",{className:"volter-viewport-popover-anchor",children:[s.jsx(v,{text:"Asset preview actions",children:s.jsx(f,{ref:M,"aria-label":"Asset preview actions","aria-haspopup":"menu","aria-expanded":V,onClick:()=>c(e=>!e),children:s.jsx(n,{icon:be,size:"md"})})}),V&&s.jsxs(A,{anchorRef:M,clamp:!0,"aria-label":"Asset preview actions",onDismiss:()=>c(!1),style:{minWidth:210},children:[s.jsxs(d,{onSelect:()=>{c(!1),I()},children:[s.jsx(n,{icon:xe,size:"sm"}),"Capture preview"]}),p?s.jsxs(s.Fragment,{children:[s.jsx(d,{onSelect:()=>{c(!1),T(!1)},children:"Save thumbnail framing"}),s.jsx(d,{onSelect:()=>{c(!1),T(!0)},children:"Reset thumbnail framing"})]}):null,s.jsx(H,{}),s.jsxs(d,{onSelect:()=>{t.resetPresentation(),c(!1)},children:[s.jsx(n,{icon:je,size:"sm"}),"Reset viewport settings"]})]})]})]}),y?s.jsxs(we,{className:"volter-model-capture-preview",children:[s.jsxs("div",{children:[s.jsx(G,{as:"strong",variant:"label",children:"Deterministic views"}),s.jsx(W,{type:"button",variant:"ghost",onClick:()=>C(null),children:"Close"})]}),s.jsx("img",{src:y,alt:"Front, right, top, and three-quarter model preview"})]}):null,E?s.jsx(Se,{className:"volter-model-toolbar-error",tone:"error",children:E}):null]})}export{ps as Object3DDocumentToolbar};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StageHost-CSw286Im.js","assets/index-flxMlfV4.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-DVnNjIbQ.js","assets/editor-shell-store-DlGykD-E.js","assets/output-pass-HurwNl0G.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/Pass-D1MRT672.js","assets/editor-layers-DI1Wkr8F.js","assets/workspace-arrangement-BnGzBm57.js","assets/user-data-C8dmlLGA.js","assets/entity-object-C374JqRs.js","assets/three-contract-Dkt6PmWY.js","assets/standard-viewport-dressing-B8VpmbHt.js","assets/content-bounds-Ax7CFkXJ.js","assets/hierarchy-marks-EEQa08In.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-BS3uYvYU.js","assets/three-viewport-presentation-C5wGhMgD.js","assets/clip-planes-CnAI6DZn.js","assets/three-2yjp9YMj.js","assets/component-instance-root-pq7uyyej.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/model-thumbnail-WJb6B3qQ.js","assets/studio-environment-Dw2FBct5.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-K2zwKa-Z.js","assets/host-hierarchy-objects-BV3WqU2w.js","assets/layered-pick-DKNj5L29.js","assets/root-stacking-BEd9ZvxC.js","assets/object3d-document-session-registry-DI9WfJDy.js","assets/viewport-door-Brt6-rPp.js","assets/asset-preview-C36PaXvM.js","assets/bitmap-label-Ct4k6ehY.js","assets/scene-framing-CljHc6tN.js","assets/source-object3d-authoring-adapter-qg_NN2PX.js","assets/three-projection-core-xgnaC08N.js","assets/editor-presentation-activity-CqJH4G9t.js","assets/transport-strip-Dvkyjqwq.js","assets/viewport-surface-status-Dbc5Yxun.js"])))=>i.map(i=>d[i]);
2
- import{ae as r,_ as a}from"./index-flxMlfV4.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-Dbc5Yxun.js";const s=n.lazy(async()=>({default:(await a(()=>import("./StageHost-CSw286Im.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-CSnDpsY3.js","assets/jsx-runtime-DPjLkJKQ.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-flxMlfV4.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-DlGykD-E.js","assets/output-pass-HurwNl0G.js","assets/Pass-D1MRT672.js","assets/editor-layers-DI1Wkr8F.js","assets/workspace-arrangement-BnGzBm57.js","assets/user-data-C8dmlLGA.js","assets/entity-object-C374JqRs.js","assets/three-contract-Dkt6PmWY.js","assets/Toolbar-Bo-l61Lo.js","assets/transform-mode-request-COfeHSRX.js","assets/three-state-DVnNjIbQ.js","assets/standard-viewport-dressing-B8VpmbHt.js","assets/content-bounds-Ax7CFkXJ.js","assets/hierarchy-marks-EEQa08In.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-BS3uYvYU.js","assets/three-viewport-presentation-C5wGhMgD.js","assets/clip-planes-CnAI6DZn.js","assets/three-2yjp9YMj.js","assets/component-instance-root-pq7uyyej.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/model-thumbnail-WJb6B3qQ.js","assets/studio-environment-Dw2FBct5.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-K2zwKa-Z.js","assets/host-hierarchy-objects-BV3WqU2w.js","assets/layered-pick-DKNj5L29.js","assets/root-stacking-BEd9ZvxC.js","assets/object3d-document-session-registry-DI9WfJDy.js","assets/viewport-door-Brt6-rPp.js","assets/asset-preview-C36PaXvM.js","assets/bitmap-label-Ct4k6ehY.js","assets/scene-framing-CljHc6tN.js","assets/source-object3d-authoring-adapter-qg_NN2PX.js","assets/three-projection-core-xgnaC08N.js","assets/editor-presentation-activity-CqJH4G9t.js","assets/transport-strip-Dvkyjqwq.js","assets/viewport-surface-status-Dbc5Yxun.js","assets/stage-overlay-set-Bo-JC6N0.js","assets/TransientHint-DFAcEEFI.js","assets/ViewportShadingMenu-CWutLX1G.js","assets/stage-keyboard-jfRYkBwZ.js","assets/camera-authoring-DYjhU5Zp.js","assets/stage-presence-markers-Bu9mH0m_.js","assets/collaboration-presence-WWC9ZQsq.js"])))=>i.map(i=>d[i]);
2
- import{kH as Cr,lg as ur,kO as Ie,O as us,eU as zn,lD as In,_ as Ke,aJ as Nn,lE as $n,j0 as Ks,cE as Ue,aL as Te,a1 as we,cJ as Gn,dT as Un,a0 as Ne,lF as qn,cK as Kn,cL as Yn,aK as hs,cM as ds,lG as Ys,lH as Xn,iW as Zn,dG as vr,dH as ps,dI as ct,af as qe,en as Jn,lI as Qn,lJ as ei,a2 as ve,ae as ti,lK as ri,lL as si,lM as ni,lN as ii,lO as oi,hi as ai,lP as ci,b4 as li,lQ as Xs,aP as ui,gJ as hi,lR as fs,lS as ms,lT as gs,b0 as vs,kG as ws,fw as bs,lU as di,aI as pi,dK as fi,dJ as ys,lV as mi,dQ as gi,lW as vi,gg as Ss,lX as wi,lY as bi,lZ as yi,hd as Si,dk as xi,kP as Pi,kF as Ci,fR as ki,ga as Mi,l_ as xs,aG as Ei,l$ as Oi,dW as Ri}from"./index-flxMlfV4.js";import{a as d}from"./jsx-runtime-DPjLkJKQ.js";import{t as wr,a as ji}from"./three-state-DVnNjIbQ.js";import{i as N,b as Ti,a as Vi,w as Ai,c as Li,s as Ps}from"./standard-viewport-dressing-B8VpmbHt.js";import{r as f}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a as br}from"./content-bounds-Ax7CFkXJ.js";import{EDITOR_LAYER as Zs,isInEditorOwnedSubtree as Fi}from"./editor-layers-DI1Wkr8F.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-C8dmlLGA.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 Gi,_ 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 Ui,L as ks,I as Sr,ez as qi,dp as Ms,cj as xr,em as Ki,c0 as Yi,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-BS3uYvYU.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-C5wGhMgD.js";import{s as Pr}from"./workspace-arrangement-BnGzBm57.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-DI9WfJDy.js";import{S as xo}from"./source-object3d-authoring-adapter-qg_NN2PX.js";import{s as Po,i as hr}from"./editor-presentation-activity-CqJH4G9t.js";import{a as Co}from"./three-integration-K2zwKa-Z.js";import{r as Fs,d as Ds}from"./viewport-door-Brt6-rPp.js";import{T as ko}from"./transport-strip-Dvkyjqwq.js";import{V as Mo,O as Eo}from"./viewport-surface-status-Dbc5Yxun.js";import{t as on}from"./editor-shell-store-DlGykD-E.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 U=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 U(.95)},get p99Ms(){return U(.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,U=r.get(b);r.set(b,{ms:(U?.ms??0)+_,startMs:U?.startMs??I-P}),x&&performance.measure(`volter.phase.${b}`,{start:I,duration:_})},systemObserver:{beginSystem(){l&&(F=ke())},endSystem(b,I,_){if(!l)return;const U=ke(),j=`${b} / ${I} / ${_}`;i.set(j,(i.get(j)??0)+U-F),c.push({name:j,phase:I,startMs:F-P,ms:U-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(([U,{ms:j,startMs:H}])=>({name:U,ms:j,startMs:H})).sort((U,j)=>j.ms-U.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,U=(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]*U+_;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 Gi({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,Go=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 Uo{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 Ui;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))),Go)}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 Ki({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 Yi(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 U=(o-1-_)*F,j=_*F;X.data.set(M.subarray(U,U+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 Yo,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,Ke(()=>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 Ko(){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 Yo extends sn{objects=[];origin=new z;constructor(){super(new en,new rn({map:Ko(),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(Ks(e.shell,n)):"none"}const ta=f.lazy(()=>Ke(()=>import("./stage-transform-tools-CSnDpsY3.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(()=>Ke(()=>import("./stage-transform-tools-CSnDpsY3.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 Ke(()=>import("./stage-overlay-set-Bo-JC6N0.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(Ue,{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?Gn:Un,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(Kn,{style:{minWidth:230},children:d.jsxs(Yn,{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,Ys),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,U=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),Ye=2*Ae*Math.tan(xr.degToRad(Q.fov/2))/ye;oe.setFromMatrixColumn(Q.matrixWorld,0).multiplyScalar(-Ee*Ye),le.setFromMatrixColumn(Q.matrixWorld,1).multiplyScalar(ue*Ye),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}),U?d.jsx("span",{"data-testid":"viewport-grid-scale",children:U}):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(Ue,{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(Ue,{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(Ue,{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(Ue,{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(Ue,{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 Ke(()=>import("./stage-keyboard-jfRYkBwZ.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},Gs=()=>Ri(),gr=12;function Us(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 Ge=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:U,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?Ks(te.shell,n,w?"embedded":"document"):null,Ee=f.useSyncExternalStore(wa,Ys),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),Ye=f.useRef(ye);Ye.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&&Ge.release(Oe.current),Oe.current=Ge.claim(n)),f.useEffect(()=>{const O=Oe.current,de=Ge.generation(O);return()=>Ge.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,Ut("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(U);Nt.current=U;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),[Gt,Ut]=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],Kt=a?.[1],Yt=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 G=_t.current,et=Ht.current;if(!G||!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,G,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:G,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(),Ut("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 G=_t.current,et=Ht.current;if(!G||!et)return;if(!t||e===void 0){ne("This stage shows `build` content and was given no `build()`/`sourcePath`.");return}let E;const tt=Ge.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,G.clientWidth),height:Math.max(1,G.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=Ye.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,Gr=null,Ur=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&&G.removeEventListener("pointerdown",bt,!0),yt&&G.removeEventListener("pointermove",yt,!0),St&&G.removeEventListener("pointerup",St,!0),xt&&G.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?Ge.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 Gs().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?Gs().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 Kr=(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=Y=>{for(let Z=Y;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 Y of R.intersectObjects([...A.objectMap.values()],!0)){if(Fi(Y.object))continue;const Z=ge(Y.object);if(Z){je={distance:Y.distance,id:Z};break}}const jt=h.visibleHelpers().filter(Y=>Y.userData.volterPickable===!0);for(const Y of R.intersectObjects(jt,!0)){let Z=null,it=!0;for(let ot=Y.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||Y.distance<je.distance)&&(je={distance:Y.distance,id:ls});break}}return je?.id??null};if(!s.viewport){s.viewport=new fo(re,s.scene,A,G,{renderer:V,authoring:()=>s.adapter??fe,pick:Kr,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=Kr(g.clientX,g.clientY),h=k&&s.adapter?Ve(s.adapter.hierarchy,k):null;h&&Or.current?.(h)};G.addEventListener("dblclick",u),s.cleanups.push(()=>G.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())},Gr=()=>{G.addEventListener("pointerdown",bt,!0),G.addEventListener("pointermove",yt,!0),G.addEventListener("pointerup",St,!0),G.addEventListener("pointercancel",xt,!0),window.addEventListener("keydown",Pt)}}const Re=s.content,Yr=[...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(Ur=()=>{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(Yr),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=Us(Rr.current),g=Us(jr.current)??u,k=ct(n).camera;S.setFieldOfView(k.fov);const h=Nt.current,m=qt!==void 0&&Kt!==void 0&&Yt!==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,Kt,Yt).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 Uo(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 K=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(Yr.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(),K.syncSelectionPresentation(),Gr?.(),ne(null),w||Ss(n);let Ot=B.background;K.setNeutralBackground(Ot??s.defaultBackground);const ze=$.presentation;ze&&(K.setMode(ze.mode),K.setBackground(ze.background),K.setProjection(ze.projection),K.setSkeleton(ze.skeleton),K.setBounds(ze.bounds),$.presentation=null);const Fn=()=>{s.viewport?.alignGridToView(K.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=K.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(K.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,K.setNeutralBackground(Ot??s.defaultBackground))};s.syncHostScene=Fn,K.setBeforeRender(()=>s.syncHostScene?.()),K.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)G.addEventListener(h,Rt,{capture:!0,passive:!0});rr=()=>{u(),g();for(const h of k)G.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||K.needsFrame()||s.presence?.live()||Pe?.prepareFrame||Pe?.update||(S.batchedRenderer.batches?.length??0)>0)return!0;const g=K.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=K.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=K?.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=K.presentation().mode;jt!=="uv"&&jt!=="vertex-colors"&&(s.scene.overrideMaterial=B.overrideMaterial);try{h.renderWithInfrastructure(()=>{K.renderViewport(y),h.renderViewCube(k)})}finally{s.scene.overrideMaterial=je}K.servePresentedFrame(),Bn(),Ze.current||(Ze.current=!0,J&&Si("first-render",Date.now()-ge),xi(n),Ut("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 Y=Dt.current;if(Y&&ae&&Pi(ae.shell)===A.shell){const Z=K.cameraPose();Y.frameTime=y*1e3,Y.fps=y>0?1/y:0,Y.drawCalls=k.info.render.calls,Y.triangles=k.info.render.triangles,Y.cameraPosition.x=Z.position[0],Y.cameraPosition.y=Z.position[1],Y.cameraPosition.z=Z.position[2],Y.cameraTarget.x=Z.target[0],Y.cameraTarget.y=Z.target[1],Y.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})),Ke(()=>import("./stage-presence-markers-Bu9mH0m_.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:G,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(K,Ws(n))),s.cleanups.push(Ci({id:n,label:r,kind:$r?"asset":"source",profiler:K.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,G.clientWidth),y=Math.max(1,G.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(G),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{Ur?.()}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,Kt,Yt,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=Gt==="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&&Gt==="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&&Gt==="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{J as i,r as m}from"./index-flxMlfV4.js";import{e as p}from"./game-network-DtzKFtge.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-lR1oG4Vd.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-BW5cue8V.js";import"./contract-system-adapters-0Odxcy6d.js";import"./game-contract-seams-GoIZaA0s.js";import"./seeded-random-BlGWBUER.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-nmQ1saHI.js";import"./capability-coverage-BqCZSu0R.js";import"./edit-mode-authoring-CVKwIPOy.js";import"./json-history-resource-DTUpacfx.js";import"./binding-resolver-TD7-fKuX.js";import"./adapter-surface-Y37Nzcyw.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./realm-services-CL4ih5gp.js";import"./canvas-entry-runtime-Do5zL9dN.js";import"./three-ingest-runtime-B9surImB.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-BuNeO4Mb.js";import"./ingest-source-persistence-CJGE5-AU.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-DEm3C1-i.js";import"./mounted-authoring-BHpx-z2Y.js";import"./entity-object-C374JqRs.js";import"./user-data-C8dmlLGA.js";import"./workspace-arrangement-BnGzBm57.js";import"./three-contract-Dkt6PmWY.js";import"./three-2yjp9YMj.js";import"./editor-layers-DI1Wkr8F.js";import"./component-instance-root-pq7uyyej.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./three-authoring-adapter-B5h6dxvp.js";import"./source-persistence-backend-DoNJeJa8.js";import"./three-projection-core-xgnaC08N.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-D6DKTgwF.js";import"./deferred-ingest-play-C6qytzjB.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-DVNps-az.js";import"./board-guides-ClHJXXuu.js";import"./relative-import-specifier-cRtWQWmH.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-Dl5bH02T.js";import"./inference-diagnostics-MWqnRUsN.js";import"./writer-tw6EcuVO.js";import"./three-state-DVnNjIbQ.js";import"./editor-shell-store-DlGykD-E.js";import"./output-pass-HurwNl0G.js";import"./viewport-door-Brt6-rPp.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,4 +0,0 @@
1
- import{r as B,la as xt}from"./index-flxMlfV4.js";import{a as kt}from"./preview-renderer-BrYNFV1p.js";import{v as Et}from"./output-pass-HurwNl0G.js";import{_ as St,fx as Pe,bi as Ve,aC as Bt,d7 as Ct,ej as At,cP as ve,el as Ye,cm as jt,cl as Ue,fo as ie,ex as Je,d5 as Qe,d9 as et,cJ as Tt,e as We,cj as It}from"./three.core-3arARmh6.js";import{f as tt}from"./clip-planes-CnAI6DZn.js";import{a as nt}from"./content-bounds-Ax7CFkXJ.js";class _t{#r;#s;#n=new Map;#k=0;#c=null;#a=null;#u=!1;#y=!1;#b=t=>{!this.#y&&this.#n.size===0||(t.preventDefault(),t.returnValue="")};#d=new Map;#f=new Map;#h=null;#w=0;#M=0;#v=0;#i=null;#x=null;#g=null;constructor(t){this.#s=t,this.#r=new Worker(new URL("/assets/worker-Gtu-EAm9.js",import.meta.url),{type:"module",name:"blender"}),globalThis.addEventListener?.("beforeunload",this.#b),this.#r.onmessage=n=>void this.#E(n.data),this.#r.onerror=n=>{const r=n.error,a=n.filename?` at ${n.filename}:${n.lineno}:${n.colno}`:"",o=r?.stack??r?.message??n.message,s=new Error(`Blender worker failed: ${o||"the worker script did not load"}${a}`);console.error(s.message);for(const i of[...this.#n.keys()])this.#p(i);for(const i of this.#n.values())i.reject(s);this.#n.clear()}}#o=null;#l=null;get project(){return this.#o}get document(){return this.#l}start(t,n){return this.#o!==null&&this.#o!==t?Promise.reject(new Error(`The Blender session is bound to ${this.#o}, not ${t}`)):n!==void 0&&this.#l!==null&&this.#l!==n?Promise.reject(new Error(`Blender resource conflict: the session holds ${this.#l}; cannot open ${n}`)):(this.#o=t,this.#l??=n??"models/model.blend",this.#c??=this.#e({op:"start",project:t,...n===void 0?{}:{document:n}}),this.#c)}#t(){return this.#o===null?Promise.reject(new Error("The Blender session has not been started with a project (blender-start)")):this.start(this.#o)}async execute(t,n=!0,r="Blender Python"){return await this.#t(),await this.#e({op:"execute",code:t,history:n,label:r})}async historyGesture(t){await this.#t(),await this.#e({op:t})}async historyStep(t,n){return await this.#t(),(await this.#e({op:"history-step",token:t,direction:n})).moved}async sceneInfo(){return await this.#t(),await this.#e({op:"scene-info"})}async objectInfo(t){return await this.#t(),await this.#e({op:"object-info",name:t})}async rna(t,n){return await this.#t(),await this.#e({op:"rna",path:t,...n===void 0?{}:{names:n}})}async rnaContext(t,n){return await this.#t(),await this.#e({op:"rna-context",...t===void 0?{}:{object:t},...n===void 0?{}:{collection:n}})}async rnaSet(t,n,r,a,o=!0){return await this.#t(),await this.#e({op:"rna-set",history:o,path:t,property:n,value:r,...a===void 0?{}:{index:a}})}async outliner(t){return await this.#t(),await this.#e({op:"outliner",...t===void 0?{}:{selected:t}})}async nodeTree(t){return await this.#t(),await this.#e({op:"node-tree",...t?.path===void 0?{}:{path:t.path},...t?.material===void 0?{}:{material:t.material}})}async uvLayout(t){return await this.#t(),await this.#e({op:"uv-layout",...t?.object===void 0?{}:{object:t.object},...t?.uvLayer===void 0?{}:{uvLayer:t.uvLayer}})}async rig(t){return await this.#t(),await this.#e({op:"rig",...t?.object===void 0?{}:{object:t.object}})}async actionClip(t){return await this.#t(),await this.#e({op:"action-clip",...t?.object===void 0?{}:{object:t.object},...t?.bake===void 0?{}:{bake:t.bake}})}async outlinerSet(t,n,r){return await this.#t(),await this.#e({op:"outliner-set",path:t,column:n,value:r})}async present(){await this.#t(),await this.#e({op:"present"})}async screenshotView(t){return await this.#t(),await this.#e({op:"screenshot-view",maxSize:t})}async readFile(t){return await this.#t(),await this.#e({op:"read-file",path:t})}async writeFile(t,n){await this.#t(),await this.#e({op:"write-file",path:t,bytes:n})}async listFiles(t){return await this.#t(),await this.#e({op:"list-files",path:t})}get presented(){return this.#x}stop(){return this.#u?Promise.resolve():this.#a?this.#a:(this.#a=(async()=>{(this.#c?await this.#c.then(()=>!0,()=>!1):!1)&&await this.#e({op:"flush-document"},!0),this.terminate()})().catch(t=>{throw this.#a=null,t}),this.#a)}terminate(){if(this.#u)return;this.#u=!0,globalThis.removeEventListener?.("beforeunload",this.#b);const t=this.#m("terminating worker");try{this.#r.terminate()}finally{t()}const n=new Error("The Blender session was terminated");for(const r of[...this.#n.keys()])this.#p(r);for(const r of this.#n.values())r.reject(n);this.#n.clear()}metrics(t=performance.now()){let n=null,r=this.#w,a=this.#M,o=this.#v;for(const s of this.#d.values()){const i=t-s;(n===null||i>n)&&(n=i),i>r&&(r=i),i>=5e3&&(a+=1),i>=3e4&&(o+=1)}return{inFlightMs:n===null?null:Math.round(n),lastCallMs:this.#h===null?null:Math.round(this.#h),maxCallMs:this.#h===null&&n===null?null:Math.round(r),callsOver5s:a,callsOver30s:o,lastCallWindow:this.#i,wasmMemoryMB:this.#g===null?null:Math.round(this.#g/1048576)}}#p(t){this.#f.get(t)?.(),this.#f.delete(t);const n=this.#d.get(t);if(n===void 0)return;this.#d.delete(t);const r=performance.now()-n;this.#h=r,r>this.#w&&(this.#w=r),r>=5e3&&(this.#M+=1),r>=3e4&&(this.#v+=1),this.#i!==null&&this.#i.start===n&&(this.#i={start:n,end:n+r})}#e(t,n=!1){if(this.#u||this.#a&&!n)return Promise.reject(new Error("The Blender session is stopping or terminated"));const r=++this.#k;return new Promise((a,o)=>{this.#n.set(r,{resolve:a,reject:o});const s=performance.now();this.#d.set(r,s),this.#i={start:s,end:null},this.#f.set(r,this.#m(`waiting for worker ${t.op}`));try{this.#r.postMessage({...t,id:r})}catch(i){this.#n.delete(r),this.#p(r),o(i instanceof Error?i:new Error(String(i)))}})}#m(t){try{const n=this.#s.work?.(t);return()=>{try{n?.()}catch{}}}catch{return()=>{}}}async#E(t){if("op"in t){if(t.op==="document-dirty"){this.#y=t.dirty;return}if(t.op==="history"){this.#s.history?.(t.entries);return}if(t.op==="log"){this.#s.log?.(t.level,t.text);return}if(t.op==="memory"){this.#g=t.bytes;return}const r=t.frame;typeof r?.session=="string"&&typeof r.revision=="number"&&(this.#x={session:r.session,revision:r.revision});const a=this.#m("presenting worker frame");try{const o=await this.#s.present(t.frame,t.description,t.capture);this.#r.postMessage({op:"present-result",id:t.id,...o?.capture===void 0?{}:{capture:o.capture},...o!=null&&"held"in o?{held:o.held}:{}})}catch(o){this.#r.postMessage({op:"present-result",id:t.id,error:o instanceof Error?o.message:String(o)})}finally{a()}return}const n=this.#n.get(t.id);n&&(this.#n.delete(t.id),this.#p(t.id),"error"in t?n.reject(new Error(t.error)):n.resolve(t.result))}}const Ft="/assets/agx-base-srgb-BjWZJgrZ.lut",Rt="/assets/agx-look-medium-high-contrast-D5F_ob1L.lut",$t="/assets/agx-look-punchy-dxsnycNs.lut",Lt="/assets/filmic-srgb-Ct35FIH6.lut",R=new Float64Array(12),Ge=[0,0,0],W=new Float64Array(3),ee=new Float64Array(3),$=new Int8Array([1,0,0,1,1,0,0,1,2,1,0,0,1,0,1,0,2,1,0,0,1,1,0,1,2,0,1,0,0,1,0,1,1,2,1,0,0,1,0,0,1,1,1,2,0,0,1,0,1,1,0,1,0,2]);function Nt(e,t,n){return e>t?t>n?0:e>n?1:2:n>t?3:n>e?4:5}function rt(e,t,n,r,a){const o=t*t,s=Math.min(1,Math.max(0,n))*(t-1),i=Math.min(1,Math.max(0,r))*(t-1),c=Math.min(1,Math.max(0,a))*(t-1),h=Math.min(Math.floor(s),t-2),l=Math.min(Math.floor(i),t-2),u=Math.min(Math.floor(c),t-2),M=s-h,v=i-l,E=c-u,g=(d,f,b,x)=>{const w=(h+f+(l+b)*t+(u+x)*o)*3;R[d]=e[w]/65535,R[d+1]=e[w+1]/65535,R[d+2]=e[w+2]/65535};g(0,0,0,0),g(9,1,1,1),W[0]=M,W[1]=v,W[2]=E;const m=Nt(M,v,E)*9;g(3,$[m],$[m+1],$[m+2]),g(6,$[m+3],$[m+4],$[m+5]);const k=W[$[m+6]],p=W[$[m+7]],y=W[$[m+8]];for(let d=0;d<3;d++){const f=R[d];Ge[d]=f+k*(R[3+d]-f)+p*(R[6+d]-R[3+d])+y*(R[9+d]-R[6+d])}return Ge}function te(e){const t=e&32768?-1:1,n=e>>10&31,r=e&1023;return n===0?t*2**-24*r:n===31?r?Number.NaN:t*Number.POSITIVE_INFINITY:t*2**(n-15)*(1+r/1024)}function Fe(e,t,n,r){const a=new Uint8ClampedArray(t*4);for(let o=0;o<t;o++){const s=o*4,i=te(e[s+3]),c=i===0?n:n/i;ee[0]=te(e[s])*c,ee[1]=te(e[s+1])*c,ee[2]=te(e[s+2])*c;const h=r(ee);a[s]=Math.round(h[0]*255),a[s+1]=Math.round(h[1]*255),a[s+2]=Math.round(h[2]*255),a[s+3]=Math.round(Math.min(1,Math.max(0,i))*255)}return a}function Ot(e){return new URL(Object.assign({"./agx-base-srgb.lut":Ft,"./agx-look-medium-high-contrast.lut":Rt,"./agx-look-punchy.lut":$t,"./filmic-srgb.lut":Lt})[`./${e.replace(/\.lut$/,"")}.lut`],import.meta.url)}const Dt=57,N=-12.47393,ot=12.5260688117,Pt=[[.4123908,.3575843,.1804808],[.212639,.7151687,.0721923],[.0193308,.1191948,.9505322]],Vt=[[1.5250528,-.3159135,-.1226583],[-.5091526,1.3333274,.1382844],[.0957153,.0508974,.7879558]];function qe(e,t,n){const r=t[0],a=t[1],o=t[2];n[0]=e[0][0]*r+e[0][1]*a+e[0][2]*o,n[1]=e[1][0]*r+e[1][1]*a+e[1][2]*o,n[2]=e[2][0]*r+e[2][1]*a+e[2][2]*o}const ne=new Float64Array(3),ze=new Float64Array(3),re=[0,0,0];function pe(e){const t=Math.min(1,Math.max(0,e));return t<=.0031308?12.92*t:1.055*t**(1/2.4)-.055}function at(e,t,n,r){return rt(e,Dt,t,n,r)}function Ut(e,t){qe(Pt,t,ze),qe(Vt,ze,ne);const n=ot-N,r=at(e,(Math.log2(Math.max(ne[0],1e-10))-N)/n,(Math.log2(Math.max(ne[1],1e-10))-N)/n,(Math.log2(Math.max(ne[2],1e-10))-N)/n);return re[0]=pe(Math.max(0,r[0])**2.4),re[1]=pe(Math.max(0,r[1])**2.4),re[2]=pe(Math.max(0,r[2])**2.4),re}const Wt={"AgX - Medium High Contrast":"agx-look-medium-high-contrast.lut","AgX - Punchy":"agx-look-punchy.lut"};function Gt(e,t){const n=ot-N;return at(e,(Math.log2(Math.max(t[0],1e-10))-N)/n,(Math.log2(Math.max(t[1],1e-10))-N)/n,(Math.log2(Math.max(t[2],1e-10))-N)/n)}function qt(e,t,n,r={}){const a=r.exposure??1,o=r.composedLook===!0?Gt:Ut;return Fe(t,n,a,s=>o(e,s))}const st=33,xe=st**3*3,ke=4096,fe=-12.473931188,we=25;function ge(e,t){const n=Math.min(1,Math.max(0,t))*(ke-1),r=Math.min(Math.floor(n),ke-2),a=n-r;return((1-a)*e[xe+r]+a*e[xe+r+1])/65535}const oe=[0,0,0];function zt(e,t){const n=rt(e,st,(Math.log2(Math.max(t[0],1e-10))-fe)/we,(Math.log2(Math.max(t[1],1e-10))-fe)/we,(Math.log2(Math.max(t[2],1e-10))-fe)/we);return oe[0]=ge(e,n[0]/.66),oe[1]=ge(e,n[1]/.66),oe[2]=ge(e,n[2]/.66),oe}function Xt(e,t,n,r){if(e.length!==xe+ke)throw new Error("Invalid Blender Filmic display table");return Fe(t,n,r,a=>zt(e,a))}const J=2.4,O=.055,it=O/(J-1),Ht=1/(J/(1+O)*((it+O)/(1+O))**(J-1)),Zt=((it+O)/(1+O))**J;function me(e){return e>0?e<Zt?e*Ht:(1+O)*e**(1/J)-O:0}const ae=[0,0,0];function Kt(e){return ae[0]=me(e[0]),ae[1]=me(e[1]),ae[2]=me(e[2]),ae}function Yt(e,t,n){return Fe(e,t,n,Kt)}function lt(e,t,n,r){if(!Number.isFinite(n.width)||!Number.isFinite(n.height)||n.width<1||n.height<1)throw new Error("Scene capture requires finite positive dimensions");const a=Math.min(2048,Math.round(n.width)),o=Math.min(2048,Math.round(n.height)),s=r?1:2,i=a*s,c=o*s,h=kt(),l=h.renderer,u={target:l.getRenderTarget(),toneMapping:l.toneMapping,exposure:l.toneMappingExposure,colorSpace:l.outputColorSpace,shadows:l.shadowMap.enabled,shadowType:l.shadowMap.type,clearColor:l.getClearColor(new St),clearAlpha:l.getClearAlpha(),background:e.background};let M,v,E=!1;try{M=new Pe(i,c,{type:Ve}),n.effect&&(M.depthTexture=new Bt(i,c)),l.shadowMap.enabled=!0,l.shadowMap.type=Ct,l.outputColorSpace=At,l.toneMapping=n.toneMapping??ve,l.toneMappingExposure=n.exposure??1,l.setClearColor(0,n.transparent?0:1),n.transparent&&(e.background=null),l.setRenderTarget(M),l.clear(),l.render(e,t);const g=n.effect?.render(l,M,e,t)??M;if(g.texture.type!==Ve||g.width!==i||g.height!==c)throw new Error("Scene capture effect must return a same-size half-float target");if(r){const w=new Uint16Array(i*c*4);return l.readRenderTargetPixels(g,0,0,i,c,w),E=!0,{pixels:w,width:a,height:o}}v=new Pe(i,c),Et(n.transparent===!0).render(l,v,g,0,!1);const m=new Uint8Array(i*c*4);l.readRenderTargetPixels(v,0,0,i,c,m);const k=document.createElement("canvas");k.width=i,k.height=c;const p=k.getContext("2d");if(!p)throw new Error("Scene capture could not create an image canvas");const y=p.createImageData(i,c),d=i*4;for(let w=0;w<c;w++)y.data.set(m.subarray((c-1-w)*d,(c-w)*d),w*d);p.putImageData(y,0,0);const f=document.createElement("canvas");f.width=a,f.height=o;const b=f.getContext("2d");if(!b)throw new Error("Scene capture could not create an output canvas");b.drawImage(k,0,0,a,o);const x=f.toDataURL("image/png");return E=!0,x}finally{e.background=u.background,l.setRenderTarget(u.target),l.toneMapping=u.toneMapping,l.toneMappingExposure=u.exposure,l.outputColorSpace=u.colorSpace,l.shadowMap.enabled=u.shadows,l.shadowMap.type=u.shadowType,l.setClearColor(u.clearColor,u.clearAlpha),v?.dispose(),M?.dispose(),h.release({discard:!E})}}function Jt(e,t,n){return lt(e,t,n,!0)}function Qt(e,t,n){return lt(e,t,n,!1)}const en=e=>typeof e=="object"&&e!==null&&typeof e.subscribeFrames=="function"&&typeof e.objectForBlenderName=="function"&&typeof e.blenderObjectName=="function"&&typeof e.blenderSelection=="function"&&typeof e.setStageMode=="function";function Re(){const e=B().documents.context(wt());return en(e)?e:null}function tn(){return Re()?.blenderSelection()??{selected:[],active:null}}const nn={tree:null,byId:new Map,parentOf:new Map,error:null,loading:!1};let Ee=nn,ct=0;const Se=new Set;let Z=null,he=null,$e="",K=null;function rn(e){const t=new Map,n=new Map,r=(a,o)=>{t.set(a.id,a),n.set(a.id,o);for(const s of a.children)r(s,a.id)};for(const a of e?.rows??[])r(a,null);return{byId:t,parentOf:n}}function le(e){Ee={...Ee,...e},ct+=1;for(const t of[...Se])t()}function In(e){return Se.add(e),()=>{Se.delete(e)}}function _n(){return ct}function Fn(){return Ee}function Le(e){K!==e&&(K=e,setTimeout(()=>{K===e&&(K=null,ut(e===""?[]:e.split("\0")))},0))}let ye=0,Be=Promise.resolve();function ut(e){const t=on(e);return Be=t,t}async function on(e){const t=e.join("\0"),n=++ye;he=t,$e=t,le({loading:!0});try{const r=await yn(e);if(n!==ye)return;Re()?.setStageMode(r?.mode??null),le({tree:r,...rn(r),loading:!1,error:null})}catch(r){if(n!==ye)return;le({loading:!1,error:dt(r)})}}function an(){he=null,Le($e);for(const e of[...Ce])e()}const Ce=new Set;function Rn(e){return Ne(),Ce.add(e),()=>{Ce.delete(e)}}let se=!1,be=null;function Ne(){const e=Re();if(Z!==null&&be===e)return;Z!==null&&(Z(),Z=null,be=null);const t=e;if(t!==null){Z=t.subscribeFrames(an),be=t;return}se||(se=!0,B().documents.waitForContext(wt()).then(()=>{se=!1,Ne()}).catch(()=>{se=!1}))}function $n(e){if(!I())return;Ne();const t=[...e].sort().join("\0");he!==t&&Le(t)}async function sn(e){if(!I())return;K=null;let t=ut([...e].sort());for(;;){if(await t,Be===t)return;t=Be}}async function Ln(e,t,n){try{return await mt(e,t,n),he=null,Le($e),!0}catch(r){return le({error:dt(r)}),!1}}function dt(e){return e instanceof Error?e.message:String(e)}const ln={transform:{cx:0,cy:0,zoom:1},looked:null,refusal:null,size:{w:0,h:0},framedAt:0,drawn:[]};let Ae=ln,Oe=0;const de=new Set;let ht=0;function Me(){return Ae}function Nn(){return Oe}function On(e){return de.add(e),()=>{de.delete(e)}}function Y(e){Ae={...Ae,...e},Oe+=1;for(const t of[...de])t()}function cn(){ht+=1,Oe+=1;for(const e of[...de])e()}function Dn(){return ht}function G(e){Y({refusal:e})}const Xe=new Map;function un(e){let t=Xe.get(e);return t||(t=fetch(Ot(e)).then(async n=>{if(!n.ok)throw new Error(`Blender display table ${e}: ${n.status} ${n.statusText}`);return new Uint16Array(await n.arrayBuffer())}),Xe.set(e,t)),t}function dn(e){const t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return new Uint16Array(n.buffer,n.byteOffset,n.byteLength>>1)}async function pt(e,t){const n=t.look??"None",r=t.toneMapping==="filmic",a=t.toneMapping==="none";if(!a&&t.toneMapping!=="agx"&&!r)throw new Error("Blender's Khronos PBR Neutral view transform has no scene-linear implementation in the browser, so it cannot resolve a composited or scene-referred frame (implemented: Standard, AgX, Filmic)");const o=a?null:r?"filmic-srgb.lut":n==="None"?"agx-base-srgb.lut":Wt[n];if(o===void 0)throw new Error(`Blender display transform has no table for look ${n}`);const s=o?await un(o):null,i=t.linearInput,c=i?{pixels:dn(i.base64),width:i.width,height:i.height}:e;if(!c)throw new Error("Blender display transform requires a linear capture");const{pixels:h,width:l,height:u}=c,M=a?Yt(h,l*u,t.exposure):r?Xt(s,h,l*u,t.exposure):qt(s,h,l*u,{exposure:t.exposure,composedLook:n!=="None"}),v=document.createElement("canvas");v.width=l,v.height=u;const E=v.getContext("2d");if(!E)throw new Error("Blender display transform could not create its image canvas");const g=E.createImageData(l,u),m=l*4;for(let y=0;y<u;y++){const d=(u-1-y)*m;g.data.set(M.subarray(d,d+m),y*m)}E.putImageData(g,0,0);const k=v.toDataURL("image/png"),p={base64:k.slice(k.indexOf(",")+1),mimeType:"image/png"};if(t.linear===!0){const y=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);let d="";for(let f=0;f<y.length;f+=32768)d+=String.fromCharCode(...y.subarray(f,f+32768));p.linearBase64=btoa(d),p.linearWidth=l,p.linearHeight=u}return p}async function ft(e,t,n,r,a=()=>{}){const o={none:ve,agx:We,neutral:Tt,filmic:ve};await n.prepare(t),a();const s={effect:n.effect,width:r.width,height:r.height,transparent:r.transparent===!0,toneMapping:o[r.toneMapping]??We,exposure:r.exposure},i=r.toneMapping==="agx"||r.toneMapping==="filmic"||r.linear===!0?await pt(Jt(e,t,s),r):null;if(a(),i)return i;const c=Qt(e,t,s);if(!c)throw new Error("Blender render could not capture its image");return{base64:c.slice(c.indexOf(",")+1),mimeType:"image/png"}}const hn={Standard:"none",AgX:"agx",Filmic:"filmic","Khronos PBR Neutral":"neutral"},pn=1600;async function Pn(e,t){const n=b=>({kind:"refused",reason:b}),r=e.cameraViewCamera(),a="The scene has no camera, so there is nothing to render";if(r===null)return n(a);const o=e.cameraView(r,{width:1e3,height:1e3},1,[0,0]);if(o===null)return n(a);const s=o.frame.width/o.frame.height,i=Math.min(1,pn/Math.max(t.width,t.height)),c=Math.min(t.width,t.height*s)*i,h=Math.max(1,Math.round(c)),l=Math.max(1,Math.round(c/s)),u=e.cameraView(r,{width:h,height:l},1,[0,0]);if(u===null)return n(a);const M=await wn();if(M===null)return n("Blender is starting");const[v,E]=await Promise.all([Ze(`${M.scene}.view_settings`),Ze(`${M.scene}.render`)]),g=(b,x)=>b?.kind==="struct"?b.groups.flatMap(w=>w.rows).find(w=>w.identifier===x)?.value:void 0,m=String(g(v,"view_transform")),k=hn[m];if(k===void 0)return n(`Blender view transform ${m} has no curve in the renderer`);const p=String(g(v,"look")??"None"),y=Number(g(v,"exposure")??0),d={width:h,height:l,fov:0,toneMapping:k,exposure:2**(Number.isFinite(y)?y:0),orthographic:u.projection==="orthographic",transparent:g(E,"film_transparent")===!0,...p==="None"||p==="AgX - Base Contrast"?{}:{look:p}},f=e.captureSnapshot();try{const b=new Ye;b.add(f.root),b.updateMatrixWorld(!0);const x=new ie(...u.position),w=nt(f.root).getBoundingSphere(new Je),{near:T,far:z}=tt(x.distanceTo(w.center),w.radius),{left:X,right:D,top:P,bottom:V}=u.window;let _;if(u.projection==="orthographic")_=new Qe(X,D,P,V,T,z);else{const F=new et(It.radToDeg(2*Math.atan((P-V)/2)),(D-X)/(P-V),T,z);F.projectionMatrix.makePerspective(X*T,D*T,P*T,V*T,T,z),F.projectionMatrixInverse.copy(F.projectionMatrix).invert(),_=F}_.position.copy(x),_.quaternion.set(...u.quaternion),_.updateMatrixWorld(!0);const H=await ft(b,_,f,d);return{kind:"image",url:`data:${H.mimeType};base64,${H.base64}`,width:h,height:l,projection:u.projection}}finally{f.dispose()}}const fn="document:blender:runtime";let j=null,He=0;function Vn(e){const t=++He;return j=e,q(),()=>{He===t&&(j=null,q())}}function je(){const e=S?.document,t=B().documents.activeId(),n=t?.startsWith("document:model:")?t.slice(15):j?.blend;return!n||!e||n===e?null:`Blender is editing ${e}; ${n} is not open. Return to ${e} before editing.`}function L(){return j?.documentId??fn}function wt(){return L()}async function Un(e,t){const n=B();if(!n.session.open())throw new Error("Opening a model requires an open project session.");const r=n.projectLocalState.projectRootPath();if(r===null)throw new Error("Opening a model requires a project path.");if(j!==e||n.documents.activeId()!==e.documentId)return!1;const a=C(),o=a.start(r,e.blend);return t(),await o,j!==e?!1:(await a.present(),j===e)}function I(){return S?.project!=null&&je()===null}let gt=0;const Te=new Set;function Wn(){return gt}function Gn(e){return Te.add(e),()=>{Te.delete(e)}}function q(){gt+=1;for(const e of[...Te])e()}async function Ze(e,t){return I()?C().rna(e,t):null}async function wn(e,t){return I()?C().rnaContext(e,t):null}async function gn(e,t,n,r,a=!0){if(!I())return null;const o=await C().rnaSet(e,t,n,r,a);return q(),o}async function mn(e,t=!0,n="Blender Python"){const r=await C().execute(e,t,n);q();const a=/^Error executing code:/.exec(r);return{text:r,executed:a===null,result:a===null?r.replace(/^Code executed successfully: ?/,""):"",error:a===null?null:r.replace(/^Error executing code: ?/,"")}}function qn(){C().historyGesture("history-begin").catch(e=>B().console.error(`Could not begin Blender undo gesture: ${String(e)}`,"blender-history"))}async function zn(){await C().historyGesture("history-end")}async function yn(e){return I()?C().outliner(e):null}async function Xn(e){return I()?C().nodeTree(e):null}async function Hn(e){return I()?C().uvLayout(e):null}async function Zn(e){return I()?C().rig(e):null}async function Kn(e){return I()?C().actionClip(e):null}async function mt(e,t,n){if(!I())return null;const r=await C().outlinerSet(e,t,n);return q(),r}const bn={view:"blender-node-view",title:"Node Editor",verbs:[["state",void 0],["look",void 0],["view-all","Node Editor: Frame All"],["zoom",void 0],["pan",void 0],["move",void 0],["link",void 0],["set-value",void 0],["use-nodes",void 0],["collapse-panel",void 0]].map(([e,t])=>({id:e,...t?{title:t}:{},run:n=>yt({...n,action:e})}))};function yt(e){const t=typeof e.action=="string"?e.action:"state";switch(t){case"state":break;case"look":Y({looked:typeof e.node=="string"?e.node:null,refusal:null});break;case"view-all":cn(),Y({refusal:null});break;case"zoom":{const n=typeof e.zoom=="number"?e.zoom:1;Y({transform:{...Me().transform,zoom:n},refusal:null});break}case"pan":{const n=Me().transform;Y({transform:{...n,cx:typeof e.cx=="number"?e.cx:n.cx,cy:typeof e.cy=="number"?e.cy:n.cy},refusal:null});break}case"move":G(`Moving "${String(e.node??"a node")}" writes Node.location — editing parity is not the program.`);break;case"link":G("Dragging between sockets would make a link — editing parity is not the program.");break;case"set-value":G(`Changing "${String(e.socket??"a socket")}" writes the socket's default_value — editing parity is not the program.`);break;case"use-nodes":G("Use Nodes writes Material.use_nodes — editing parity is not the program.");break;case"collapse-panel":G(`Collapsing "${String(e.panel??"a panel")}" writes the panel's is_collapsed — editing parity is not the program.`);break;default:G(`blender-node-view: no action "${t}" — state, look, view-all, zoom, pan, and the refusals move, link, set-value, use-nodes, collapse-panel.`)}return Me()}let S=null;const ce=new Set;function bt(){ce.size&&B().history.invalidate([...ce]),ce.clear()}let Ie=null,Ke=!1;function ue(e){try{const t=B().session.beginWork(`Blender: ${e}`);return()=>{try{t()}catch{}}}catch{return()=>{}}}function _e(){const e=ue("invalidating history and releasing runtime");try{bt(),Ie?.abort(),Ie=null,S?.terminate(),S=null,Mt=null}finally{e()}}function Mn(){Ke||(Ke=!0,B().session.onBeforeClose(async()=>{await S?.stop(),_e()}),B().session.onEnded(_e))}let Mt=null;const vn=e=>typeof e=="object"&&e!==null&&typeof e.applyFrame=="function"&&typeof e.snapshot=="function"&&typeof e.captureSnapshot=="function"&&typeof e.recordPresentation=="function"&&typeof e.recordPhotograph=="function";async function xn(){const{documents:e}=B(),t=Date.now()+15e3;let n=L();for(;;){n=L();const r=await e.waitForContext(n,Math.max(0,Math.min(250,t-Date.now())));if(vn(r))return r;if(Date.now()>=t)break}throw new Error(`The Blender Model document is not open, or the open one is not a Model this engine can present to (it must answer applyFrame, captureSnapshot, recordPresentation and recordPhotograph): nothing published a presentable view as ${n} within 15 s (bound model: ${j?.documentId??"none"}). Open the Model document first (\`volter blender-mcp\` opens it before its first call).`)}function C(){const e=je();if(e)throw new Error(e);if(S!==null)return S;Mn();const t=new AbortController;Ie=t;let n=!1;S=new _t({work:ue,history:a=>{const o=S;if(!o)throw new Error("Blender history arrived before its runtime");for(const s of a){if("reset"in s){bt();continue}if(!s.resource)throw new Error("A Blender edit has no document resource");ce.add(s.resource);const i=async c=>{if(S!==o)throw new Error("This Blender history belongs to a closed worker");const h=await o.historyStep(s.id,c);return q(),await sn(tn().selected),h};B().history.record({id:s.id,label:s.label,resources:[s.resource],document:L(),undo:()=>i("undo"),redo:()=>i("redo")})}},present:async(a,o,s)=>{const i=je();if(i)throw new Error(i);if(j===null){if(s?.render)throw new Error("Rendering a Blender frame needs the Model document open; nothing is presenting.");return{}}const c=L(),h=ue("waiting for Model presenter");let l;try{l=await xn()}finally{h()}if(t.signal.throwIfAborted(),L()!==c)throw new Error("Blender document changed before its frame could be presented");const u=ue("applying frame to Model"),M=(()=>{try{return l.applyFrame(a)}finally{u()}})(),v=typeof M=="object"&&M!==null&&"held"in M,E=v?M.held:null,g=x=>({...x===void 0?{}:{capture:x},...v?{held:E}:{}});if(l.recordPresentation(o),!s||(Mt=s,!s.render))return g(void 0);const m=l.snapshot(),k=()=>{if(t.signal.throwIfAborted(),L()!==c||l.snapshot()!==m)throw new Error("Blender capture document or source revision changed before completion")};if(s.render.linearInput){const x=await pt(null,s.render);return k(),g(x)}const{render:p,position:y,target:d,up:f}=s;if(!y||!d||!f)throw new Error("A Blender render capture must carry the scene camera position, target and up");if(n)throw new Error("A Blender render capture is already in progress");const b=l.captureSnapshot();n=!0,t.signal.addEventListener("abort",b.dispose,{once:!0});try{k();const x=new Ye;x.add(b.root),x.updateMatrixWorld(!0);const w=b.root.matrixWorld,T=new jt().copy(w).invert(),z=new Ue().setFromMatrix4(w),X=new Ue().setFromMatrix4(T),D=new ie(y[0],y[1],y[2]).applyMatrix4(w),P=new ie(d[0],d[1],d[2]).applyMatrix4(w),V=new ie(f[0],f[1],f[2]).applyMatrix3(z),_=Math.min(2048,Math.round(p.width))/Math.min(2048,Math.round(p.height)),H=nt(b.root).getBoundingSphere(new Je),F=tt(D.distanceTo(H.center),H.radius);let U;if(p.orthographic){const Q=p.fov/2;U=new Qe(-Q*_,Q*_,Q,-Q,F.near,F.far)}else U=new et(p.fov,_,F.near,F.far);U.up.copy(V),U.position.copy(D),U.lookAt(P),U.updateMatrixWorld(!0);const De={position:D.clone().applyMatrix4(T).toArray(),target:P.clone().applyMatrix4(T).toArray(),up:V.clone().applyMatrix3(X).toArray()};l.recordPhotograph({sent:{position:y,target:d,up:f},photographed:De,render:{width:p.width,height:p.height,fov:p.fov,orthographic:p.orthographic}});const vt=await ft(x,U,b,p,k);return g({...vt,camera:De})}finally{n=!1,t.signal.removeEventListener("abort",b.dispose),b.dispose()}},log:(a,o)=>(a==="error"?console.error:console.log)(`[blender] ${o}`)});const r=S;return B().session.reportWorkerCallMeter("Blender",()=>r.metrics()),S}const kn="models/model.blend",A=(e,t)=>{const n=e[t];if(typeof n!="string")throw new Error(`${String(e.type)} requires a string "${t}"`);return n};async function En(e){const t=B().projectLocalState.projectRootPath();if(t===null)return{};let n;try{n=await e.execute(`import bpy
2
- print(bpy.data.filepath)
3
- `,!1)}catch{return{}}if(/^Error executing code:/m.test(n))return{};const r=n.replace(/^Code executed successfully:/,"").split(`
4
- `).map(o=>o.trim()).filter(o=>o.startsWith("/")).pop()??"";if(r==="")return{};const a=t.endsWith("/")?t:`${t}/`;return r.startsWith(a)?{document:r.slice(a.length)}:{}}async function Yn(e){const t=B();if(e.type==="blender-status")return{ok:!0,data:{started:S?.project!=null,document:t.documents.context(L())!==void 0}};if(!t.session.open())return{ok:!1,error:`${e.type} needs an open project session; this editor page has none.`};try{const n=e.type==="blender-start"?A(e,"project"):null;let r=typeof e.document=="string"?e.document:void 0;if((e.type==="blender-stop"||e.type==="blender-start"&&e.fresh===!0)&&(await S?.stop(),_e(),e.type==="blender-stop"))return{ok:!0,data:{stopped:!0}};if(e.type==="blender-start"&&!t.documents.context(L())){const o=await t.project.documentTable(),s=o.entries.filter(l=>l.kind==="model"),i=r!==void 0?s.find(l=>l.source?.path===r):s.find(l=>l.id===(j?.entryId??o.default))??(s.length===1?s[0]:void 0);if(!i)return{ok:!1,error:r!==void 0?`No declared Model document names ${r}.`:`Choose a Model document before starting Blender. Available: ${s.map(l=>l.id).join(", ")||"(none)"}.`};const c=i.id;if(r=i.source?.path,!await t.workspace.open({kind:"document",id:c}))return{ok:!1,error:`blender-start could not open the Blender Model document ${c}: nothing in this editor opens that document (the Model document ships with @volter/editor-blender).`}}const a=C();switch(e.type){case"blender-start":{const o=r!==void 0?r:j?.blend??kn;return{ok:!0,data:{...await a.start(n,o)}}}case"blender-execute":return{ok:!0,data:{result:(await mn(A(e,"code"))).text}};case"blender-scene-info":return{ok:!0,data:{result:await a.sceneInfo()}};case"blender-object-info":return{ok:!0,data:{result:await a.objectInfo(A(e,"name"))}};case"blender-rna":{const o=typeof e.names=="number"?e.names:void 0;return{ok:!0,data:{result:await a.rna(A(e,"path"),o)}}}case"blender-rna-context":{const o=typeof e.object=="string"?e.object:void 0,s=typeof e.collection=="string"?e.collection:void 0;return{ok:!0,data:{result:await a.rnaContext(o,s)}}}case"blender-rna-set":{const o=typeof e.index=="number"?e.index:void 0;return{ok:!0,data:{result:await gn(A(e,"path"),A(e,"property"),e.value,o)}}}case"blender-outliner":{const o=Array.isArray(e.selected)?e.selected.filter(s=>typeof s=="string"):void 0;return{ok:!0,data:{result:await a.outliner(o)}}}case"blender-node-tree":return{ok:!0,data:{result:await a.nodeTree({...typeof e.path=="string"?{path:e.path}:{},...typeof e.material=="string"?{material:e.material}:{}})}};case"blender-uv-layout":return{ok:!0,data:{result:await a.uvLayout({...typeof e.object=="string"?{object:e.object}:{},...typeof e.uvLayer=="string"?{uvLayer:e.uvLayer}:{}})}};case"blender-rig":return{ok:!0,data:{result:await a.rig({...typeof e.object=="string"?{object:e.object}:{}})}};case"blender-action-clip":return{ok:!0,data:{result:await a.actionClip({...typeof e.object=="string"?{object:e.object}:{},...typeof e.bake=="boolean"?{bake:e.bake}:{}})}};case"blender-node-view":{const o=typeof e.action=="string"?e.action:"state";return{ok:!0,data:{result:bn.verbs.some(i=>i.id===o)?xt("blender-node-view",o,e):yt(e)}}}case"blender-outliner-set":return{ok:!0,data:{result:await mt(A(e,"path"),A(e,"column"),e.value!==!1)}};case"blender-screenshot-view":{const o=typeof e.maxSize=="number"?e.maxSize:1e3,s={kind:"document",id:j?.entryId??"blender:runtime"};return{ok:!0,data:{...await a.screenshotView(o),document:s}}}case"blender-read-file":{const o=await a.readFile(A(e,"path")),s=A(e,"transferId"),i=await fetch(`/__editor/blender-file?id=${encodeURIComponent(s)}`,{method:"POST",headers:{"content-type":"application/octet-stream"},body:new Blob([o])});return i.ok?{ok:!0,data:{bytes:o.length}}:{ok:!1,error:`Transfer ${s} was refused: ${i.status}`}}case"blender-write-file":{const o=atob(A(e,"base64")),s=Uint8Array.from(o,i=>i.charCodeAt(0));return await a.writeFile(A(e,"path"),s),{ok:!0,data:{written:s.length}}}case"blender-list-files":{const o=await a.listFiles(A(e,"path")),s=a.presented;return{ok:!0,data:{entries:o,...s?{session:s.session,revision:s.revision}:{},...await En(a)}}}}return{ok:!1,error:`Unknown Blender command ${e.type}`}}catch(n){return{ok:!1,error:n instanceof Error?n.message:String(n)}}}export{zn as A,qn as B,Ln as C,$n as D,mn as E,Pn as F,Vn as G,Un as H,bn as N,On as a,Wn as b,Y as c,Me as d,Xn as e,Dn as f,Kn as g,Yn as h,Zn as i,Hn as j,Fn as k,wt as l,I as m,Nn as n,q as o,wn as p,Ze as q,G as r,Gn as s,gn as t,Rn as u,In as v,sn as w,tn as x,_n as y,Re as z};
@@ -1,12 +0,0 @@
1
- import{a as u}from"./jsx-runtime-DPjLkJKQ.js";import{jC as ke,dJ as he,r as $,cO as Se,fH as V,cS as M,dj as H,hQ as xe,cR as Ee,dG as Oe,dI as Ce}from"./index-flxMlfV4.js";import{c as ye,a as X}from"./blender-runtime-skin-CwXXiusi.js";import{r as y}from"./index-nmcBqr7Y.js";import{u as Re,v as Y,w as J,x as Fe,y as ne,z as ee,t as de,A as Ne,B as Le,C as ue,D as Te,k as q,E as Z,F as Me,G as Ae,H as Ie}from"./blender-runtime-host-W_QVh8pY.js";import"./index-CtzuWnCS.js";import{a as Be}from"./three-contract-Dkt6PmWY.js";import{o as te,b as U}from"./viewport-door-Brt6-rPp.js";import{d9 as Pe}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-Ax7CFkXJ.js";import"./hierarchy-marks-EEQa08In.js";import"./workspace-arrangement-BnGzBm57.js";function je(t){const a=Number.isFinite(t)&&t>0?t:50;return{degrees:2*Math.atan(72/(2*a))*180/Math.PI,axis:"larger"}}ke("model",{camera:{fov:je(50),opening:[.8187,.4458,.3617]},interaction:{bootTool:"select",boxSelect:"touch"},all:{lighting:{source:"studio",studioPreset:he.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 $e(t){return`blender-${t.toLowerCase().replace(/_/g,"-")}`}function B(t){return t?.type==="TSE_SOME_ID"&&t.struct==="Object"&&t.object!==void 0}function pe(t){if(t.struct)return t.struct}function be(t,a){return{id:t.id,label:t.name,role:"entity",kind:$e(t.icon),...pe(t)?{typeLabel:pe(t)}:{},parentId:a,childIds:t.children.map(l=>l.id),defaultExpanded:t.expanded}}const De={transform:!0,inspectorFields:!1,persist:!0},W=new Set;function Ve(t){for(const a of W)if(a.documentId===t)return a;return W.size===1?[...W][0]:null}const Ge=()=>({position:[0,0,0],rotation:[0,0,0,1],scale:[1,1,1]});function We(t,a){t.updateWorldMatrix(!0,!1);const l=a.matrixWorld.clone().invert().multiply(t.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(t,a){return`${t} 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 "${a}".`}const He=[{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'"}],Ue="collection-instance:";function ze(){const t=new Map;for(const a of q().byId.values()){if(a.type!=="TSE_LAYER_COLLECTION")continue;const l=a.data;l===void 0||!l.startsWith("bpy.data.collections[")||t.has(a.name)||t.set(a.name,{kind:`${Ue}${a.name}`,label:a.name,group:"Collection Instance",call:`object.collection_instance_add, collection=${D(a.name)}`})}return[...t.values()]}function Q(){return[...He,...ze()]}function Ke(t){const[a,...l]=t.call.split(", ");return`bpy.ops.${a}(${l.join(", ")})`}function D(t){return JSON.stringify(t)}async function G(t,a="Blender Python"){const l=["before = {o.name for o in bpy.data.objects}",t,"made = [o.name for o in bpy.data.objects if o.name not in before]",'print("\\n".join(made))'].join(`
2
- `),d=await Z(l,!0,a);return d.error!==null?{made:[],error:d.error}:{made:d.result.split(`
3
- `).map(_=>_.trim()).filter(_=>_.length>0),error:null}}async function Xe(t,a){const l=[`_sel = {${t.map(D).join(", ")}}`,"_vl = bpy.context.view_layer","for _o in _vl.objects:"," _o.select_set(_o.name in _sel)",a===null?"_vl.objects.active = None":`_vl.objects.active = bpy.data.objects.get(${D(a)})`].join(`
4
- `),d=await Z(l,!1);d.error!==null&&$().console.error(`Blender refused the selection write: ${d.error}`,"blender-outliner")}async function re(t,a){if(t.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 [${t.map(D).join(", ")}]]`,"with bpy.context.temp_override(selected_objects=targets, selected_editable_objects=targets, active_object=targets[0], object=targets[0]):",` ${a}`].join(`
5
- `),{error:d}=await G(l);return d!==null?{destination:d,persisted:!1}:(await J(t),{destination:`Blender — ${a}; the session saves the .blend`,persisted:!0})}const Ye={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."},Je="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.",qe=({defaultAdapter:t})=>{const a=new Set;let l=[],d=null;const S=new Map,_=new Map,w=()=>{for(const r of[...a])r()},p=()=>q().byId,O=r=>{const e=p().get(r),n=ee();return e===void 0||n===null?null:e.type==="TSE_VIEW_COLLECTION_BASE"?n.root:e.object===void 0?null:n.objectForBlenderName(e.object)},x=r=>{const e=ee();if(e===null)return null;for(const n of p().values())if(B(n)&&e.objectForBlenderName(n.object)===r)return n.id;return null},k=r=>{for(const e of p().values())if(B(e)&&e.object===r)return e.id;return null},g=r=>{if(p().has(r))return r;const e=Be(t.hierarchy,r);return e===null?null:x(e)},h=r=>{const e=g(r);return e===null?null:O(e)},F=r=>{const e=h(r);return e===null?null:t.hierarchy.idForObject3D?.(e)??null},R={roots:()=>(Te(N()),(q().tree?.rows??[]).map(e=>be(e,null))),node:r=>{const e=q(),n=e.byId.has(r)?r:g(r),s=n===null?void 0:e.byId.get(n);return s===void 0?null:be(s,e.parentOf.get(s.id)??null)},object3D:r=>h(r),idForObject3D:r=>x(r)};function N(){const r=p(),e=new Set;for(const n of l){const s=r.get(n)?.object;s!==void 0&&e.add(s)}return[...e]}const i=()=>{const r=[];for(const e of l){const n=h(e),s=n===null?null:t.hierarchy.idForObject3D?.(n);s&&r.push(s)}t.selection?.set(r,{intent:"exact"}),w()},b=()=>{const r=Fe(),e=`${ne()}\0${r.active??""}\0${[...r.selected].sort().join("")}`;if(e===d)return;d=e;const n=r.selected.filter(f=>f!==r.active);r.active!==null&&n.push(r.active);const s=n.map(k).filter(f=>f!==null);s.length===l.length&&s.every((f,E)=>f===l[E])||(l=s,i())},m={get:()=>[...l],set:r=>{l=r.map(g).filter(f=>f!==null),i();const e=p(),n=[],s=[];for(const f of l){const E=e.get(f),T=E?.object;T===void 0?s.push(E?.name??f):n.includes(T)||n.push(T)}s.length>0&&$().console.warn(`${s.join(", ")} ${s.length===1?"is":"are"} not an object, so Blender's object selection does not carry ${s.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"),Xe(n,n.length===0?null:n[n.length-1])}},o=r=>p().get(r)?.restrict,c={properties:r=>{const e=o(r);if(e===void 0)return[];const n=p().get(r),s=[{path:"name",label:"Name",type:"string",readonly:!B(n)}];return e.hide!==void 0&&s.push({path:"visible",label:"Show in Viewport",type:"boolean"}),e.render!==void 0&&s.push({path:"renderVisible",label:"Show in Renders",type:"boolean"}),e.exclude!==void 0&&s.push({path:"exclude",label:"Exclude from View Layer",type:"boolean"}),s},get:(r,e)=>{const n=p().get(r);if(n!==void 0){if(e==="name")return n.name;if(e==="visible")return n.restrict?.hide===void 0?void 0:!n.restrict.hide;if(e==="renderVisible")return n.restrict?.render===void 0?void 0:!n.restrict.render;if(e==="exclude")return n.restrict?.exclude}},editability:(r,e)=>{const n=p().get(r);return n===void 0?{writable:!1}:e==="name"?B(n)?{writable:!0}:{writable:!1,reason:`Renaming a ${n.struct??n.type} is not in this Outliner yet — only an object row renames here. Rename it with bpy.`}:n.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"&&n.restrict?.exclude===!0?{writable:!1,reason:Je}:{writable:!0}},set:async(r,e,n)=>{const s=p().get(r);if(s===void 0)return;if(e==="name"){if(!B(s))return;const E=String(n);if(E===s.name||E.length===0)return;await de(`bpy.data.objects[${D(s.object)}]`,"name",E),await J([E]);const T=k(E);T!==null&&m.set([T]);return}if(e==="exclude"){await ue(s.path,"exclude",n===!0);return}const f=e==="visible"?"hide":e==="renderVisible"?"render":null;f!==null&&await ue(s.path,f,n===!1)}},j={get:r=>{const e=F(r);return(e===null?void 0:t.transforms?.get(e))??Ge()},editability:r=>{const e=g(r),n=e===null?void 0:p().get(e);return B(n)&&O(n.id)!==null?{writable:!0}:{writable:!1,reason:`Only an object has a transform; this row is a ${n?.struct??n?.type??"row"}.`}},beginEdit:r=>{const e=h(r);e!==null&&!S.has(e)&&(S.set(e,e.matrixWorld.clone()),_.set(r,e),Le())},apply:(r,e)=>{const n=h(r);n!==null&&(n.position.fromArray(e.position),n.quaternion.fromArray(e.rotation),n.scale.fromArray(e.scale),n.updateMatrix(),n.updateMatrixWorld(!0))},endEdit:async r=>{const e=_.get(r)??h(r);_.delete(r);const n=ee();if(e===null)return;const s=S.get(e);S.delete(e);try{if(n===null||(e.updateWorldMatrix(!0,!1),s?.equals(e.matrixWorld)===!0))return;const f=n.blenderObjectName(e);if(f===null)return;const E=`bpy.data.objects[${JSON.stringify(f)}]`;try{return await de(E,"matrix_world",We(e,n.root)),{destination:`Blender — ${E}.matrix_world; the session saves the .blend`,persisted:!0}}catch(T){return{destination:T instanceof Error?T.message:String(T),persisted:!1}}}finally{s&&await Ne()}}},A=r=>{const e=g(r),n=e===null?void 0:p().get(e);return B(n)?n.object:null},C=r=>({destination:r,persisted:!1}),L=async r=>{await J(r);const e=r.map(k).filter(n=>n!==null);return e.length>0&&m.set(e),e[0]??""},I={creatableKinds:()=>Q().map(({kind:r,label:e})=>({kind:r,label:e})),create:r=>{const e=Q().find(s=>s.kind===r);if(e===void 0)return{id:"",ack:C(`${r} is not a row of Blender's Add menu that this editor adds. Its rows are: ${Q().map(s=>s.label).join(", ")}.`)};if(e.refusal!==void 0)return{id:"",ack:C(e.refusal)};const n=Ke(e);return{id:"",ack:(async()=>{const{made:s,error:f}=await G(n);return f!==null?C(f):s.length===0?C(`Blender ran ${n} 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 L(s),{destination:`Blender — ${n}; the session saves the .blend`,persisted:!0})})()}},remove:r=>I.removeMany?.([r])??void 0,removeMany:async r=>{const e=[];for(const E of r){const T=A(E);if(T===null){const ce=g(E)===null?void 0:p().get(g(E));return C(`Only an object can be deleted here; this row is a ${ce?.struct??ce?.type??"row"}. Deleting a collection, a modifier or a vertex group is that datablock’s own bpy call.`)}e.push(T)}if(e.length===0)return C("Nothing selected to delete.");const s=[`targets = ${`[bpy.data.objects[n] for n in [${e.map(D).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:f}=await G(s,"Delete Objects");return f!==null?C(f):(m.set([]),await J([]),{destination:"Blender — bpy.ops.object.delete(use_global=False); the session saves the .blend",persisted:!0})},duplicate:r=>{const e=A(r);if(e===null)return{id:r,ack:C("Only an object can be duplicated here. Duplicating a collection is `bpy.ops.object.collection_instance_add`, its own gesture.")};const n=[`source = bpy.data.objects[${D(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:r,ack:(async()=>{const{made:s,error:f}=await G(n,"Duplicate Object");return f!==null?C(f):(await L(s),{destination:`Blender — bpy.ops.object.duplicate(linked=False) on ${e}; the session saves the .blend`,persisted:!0})})()}},duplicateMany:async r=>{const e=[...new Set(r.map(A))];if(e.length===0||e.some(E=>E===null))return C("Select objects to duplicate; collections and data rows cannot be duplicated here.");const n=[`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:s,error:f}=await G(n,"Duplicate Objects");return f!==null?C(f):(await L(s),{destination:"Blender — duplicate selected objects as one native operation; the session saves the .blend",persisted:!0})},reparent:()=>C("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.")},P={get documentId(){return t.documentId},get documentRootObject(){return t.documentRootObject},capabilities:De,provenance:Ye,hierarchy:R,selection:m,inspector:c,transforms:j,structure:I,subscribe:r=>{a.add(r);const e=Y(r),n=t.subscribe?.(r)??(()=>{});return()=>{a.delete(r),e(),n()}}},se={get documentId(){return P.documentId},selectedObjectNames:()=>N(),allObjectNames:()=>{const r=[];for(const e of p().values())B(e)&&r.push(e.object);return r},selectObjects:r=>{const e=r.map(k).filter(n=>n!==null);m.set(e)},rowIdForObject:r=>k(r),structure:I,subscribe:r=>{a.add(r);const e=Y(r);return()=>{a.delete(r),e()}}};W.add(se);const _e=Re(b),we=Y(b);return b(),{adapter:P,dispose:()=>{_e(),we(),W.delete(se),a.clear()}}},le="volter.blender.render-view-split:",oe=new Set,ae=new Map;function Qe(t){try{return globalThis.localStorage?.getItem(le+t)==="1"}catch{return!1}}function ie(t){let a=ae.get(t);return a===void 0&&(a=Qe(t),ae.set(t,a)),a}function fe(t,a){if(ie(t)!==a){ae.set(t,a);try{a?globalThis.localStorage?.setItem(le+t,"1"):globalThis.localStorage?.removeItem(le+t)}catch{}for(const l of[...oe])l()}}function ve(t){return oe.add(t),()=>{oe.delete(t)}}const Ze=[{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"}],et=[{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)"}],tt=[{label:"Geometry to Origin",type:"GEOMETRY_ORIGIN"},{label:"Origin to Geometry",type:"ORIGIN_GEOMETRY"},{label:"Origin to 3D Cursor",type:"ORIGIN_CURSOR"}],rt=[{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"}],nt="No Collections to Instance";function K({id:t,open:a,setOpen:l,anchorRef:d,children:S}){return u.jsxs("div",{ref:d,style:{position:"relative"},children:[u.jsx(xe,{"data-testid":`blender-menu-${t}`,"aria-expanded":a===t,onClick:()=>l(a===t?null:t),onPointerEnter:()=>{a&&l(t)},style:{textTransform:"capitalize"},children:t}),a===t&&u.jsx(Ee,{anchorRef:d,dismissBoundaryRef:d,align:"start",gap:0,clamp:!0,"aria-label":t,onDismiss:()=>l(null),children:S})]})}function lt(t,a,l){(async()=>{const d=await l;d===void 0||typeof d.destination!="string"||d.persisted!==!0&&t?.({tone:"error",title:`${a} was refused`,detail:d.destination})})()}function ot({documentId:t,notify:a}){y.useSyncExternalStore(Y,ne,ne);const[l,d]=y.useState(null),S=y.useRef(null),_=y.useRef(null),w=y.useRef(null),p=y.useRef(null),O=y.useRef(null),x=y.useSyncExternalStore(ve,()=>t===void 0?!1:ie(t),()=>!1),k=Ve(t);if(k===null)return null;const g=(o,c)=>()=>{d(null),lt(a,o,c(k))},h=k.selectedObjectNames(),F=k.allObjectNames(),R=h.length===0?"Nothing is selected.":void 0,N=Q(),i=o=>u.jsx(M,{"data-testid":`blender-add-${o.kind}`,disabled:o.refusal!==void 0,title:o.refusal,onSelect:g(`Add ${o.label}`,c=>c.structure.create(o.kind).ack),children:o.label},o.kind),b=o=>N.filter(c=>c.group===o).flatMap(c=>c.separatorBefore===!0?[u.jsx(H,{},`${c.kind}-separator`),i(c)]:[i(c)]),m=o=>{if("separatorAt"in o)return u.jsx(H,{},`separator-${o.separatorAt}`);if("kind"in o){const j=N.find(A=>A.kind===o.kind);return j===void 0?null:i(j)}const c=b(o.submenu);return c.length===0?u.jsx(M,{"data-testid":"blender-add-collection-instance",disabled:!0,children:nt},o.submenu):u.jsx(V,{label:o.submenu,"data-testid":`blender-add-${o.submenu.toLowerCase().replaceAll(" ","-")}`,children:c},o.submenu)};return u.jsxs(Se,{compact:!0,label:"Blender Object Mode menus","data-testid":"blender-object-mode-menus",ref:S,children:[u.jsx(K,{id:"view",open:l,setOpen:d,anchorRef:_,children:u.jsxs(V,{label:"Area","data-testid":"blender-view-area",children:[u.jsx(M,{"data-testid":"blender-area-vertical-split",disabled:x||t===void 0,title:x?"The Render view is already beside this area.":void 0,onSelect:()=>{d(null),t!==void 0&&fe(t,!0)},children:"Vertical Split"}),u.jsx(H,{}),u.jsx(M,{"data-testid":"blender-area-close",disabled:!x,title:x?void 0:"There is no second area to close.",onSelect:()=>{d(null),t!==void 0&&fe(t,!1)},children:"Close Area"})]})}),u.jsxs(K,{id:"select",open:l,setOpen:d,anchorRef:w,children:[u.jsx(M,{"data-testid":"blender-select-all",onSelect:g("Select All",o=>o.selectObjects(F)),children:"All"}),u.jsx(M,{"data-testid":"blender-select-none",onSelect:g("Select None",o=>o.selectObjects([])),children:"None"}),u.jsx(M,{"data-testid":"blender-select-invert",onSelect:g("Select Invert",o=>o.selectObjects(F.filter(c=>!h.includes(c)))),children:"Invert"})]}),u.jsx(K,{id:"add",open:l,setOpen:d,anchorRef:p,children:rt.map(o=>m(o))}),u.jsxs(K,{id:"object",open:l,setOpen:d,anchorRef:O,children:[u.jsx(V,{label:"Set Origin","data-testid":"blender-object-origin",children:tt.map(o=>u.jsx(M,{"data-testid":`blender-origin-${o.type}`,disabled:o.refusal!==void 0||h.length===0,title:o.refusal??R,onSelect:g(`Set Origin ▸ ${o.label}`,c=>re(c.selectedObjectNames(),`bpy.ops.object.origin_set(type='${o.type}')`)),children:o.label},o.type))}),u.jsx(V,{label:"Clear","data-testid":"blender-object-clear",children:et.map(o=>u.jsx(M,{"data-testid":`blender-clear-${o.label.toLowerCase()}`,disabled:h.length===0,title:R,onSelect:g(`Clear ▸ ${o.label}`,c=>re(c.selectedObjectNames(),o.call)),children:o.label},o.label))}),u.jsx(V,{label:"Apply","data-testid":"blender-object-apply",children:Ze.map(o=>u.jsx(M,{"data-testid":`blender-apply-${o.label.toLowerCase().replace(/ /g,"-")}`,disabled:h.length===0,title:R,onSelect:g(`Apply ▸ ${o.label}`,c=>re(c.selectedObjectNames(),`bpy.ops.object.transform_apply(${o.call})`)),children:o.label},o.label))}),u.jsx(H,{}),u.jsx(M,{"data-testid":"blender-object-duplicate",disabled:h.length===0,title:R,onSelect:g("Duplicate Objects",async o=>{const c=o.selectedObjectNames().map(j=>o.rowIdForObject(j)).filter(j=>j!==null);return o.structure.duplicateMany?.(c)}),children:"Duplicate Objects"}),u.jsx(M,{"data-testid":"blender-object-delete",disabled:h.length===0,title:R,onSelect:g("Delete",o=>{const c=o.selectedObjectNames().map(j=>o.rowIdForObject(j)).filter(j=>j!==null);return o.structure.removeMany?.(c)}),children:"Delete"})]})]})}const me=ye,at="#3d3d3d",ge="#ffffff";function it(){const t=y.useRef(null),[a,l]=y.useState(null),[d,S]=y.useState(!1);return y.useEffect(()=>{const _=t.current;if(!_)return;let w=!1,p=!1,O=!1;const x=async()=>{if(!O){O=!0,S(!0);try{for(;p&&!w;){p=!1;const F=globalThis.devicePixelRatio||1,R={width:Math.max(1,Math.round(_.clientWidth*F)),height:Math.max(1,Math.round(_.clientHeight*F))};let N;try{N=await Me(me,R)}catch(i){N={kind:"refused",reason:i instanceof Error?i.message:String(i)}}w||l(N)}}finally{O=!1,w||S(!1)}}},k=()=>{p=!0,x()},g=me.subscribeFrames(k),h=new ResizeObserver(k);return h.observe(_),k(),()=>{w=!0,g(),h.disconnect()}},[]),u.jsxs("div",{ref:t,"data-testid":"blender-render-view","aria-label":"Render view",style:{position:"relative",flex:"1 1 0",minWidth:0,marginTop:12,background:at,overflow:"hidden"},children:[a?.kind==="image"&&u.jsx("img",{src:a.url,alt:"The scene camera's render","data-testid":"blender-render-view-image",style:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"contain"}}),a?.kind==="refused"&&u.jsx("div",{role:"status","data-testid":"blender-render-view-refusal",style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",padding:16,textAlign:"center",color:ge,opacity:.8,fontSize:12},children:a.reason}),u.jsxs("div",{style:{position:"absolute",top:6,left:8,color:ge,fontSize:11,lineHeight:"14px",textShadow:"0 0 2px #000, 0 0 2px #000",pointerEvents:"none"},children:[a?.kind==="image"&&u.jsx("div",{children:a.projection==="orthographic"?"Camera Orthographic":"Camera Perspective"}),d&&u.jsx("div",{"data-testid":"blender-render-view-rendering",children:"Rendering…"})]})]})}const Vt="workspace.document",Gt="Blender Model",Wt=({documentId:t,notify:a})=>u.jsx(ot,{documentId:t,notify:a}),st="model",Ht="owned",Ut=[],v=ye,ct=()=>{const t=X.playhead();return v.subjectLine(t===null?null:Math.floor(t))},dt=t=>v.gridUnitName(t),ut={camera:()=>v.cameraViewCamera(),zoom:v.cameraViewZoom,pan:v.cameraViewPan,showing:t=>v.setCameraViewShowing(t),setPose:(t,a,l,d)=>{const{location:S,rotation:_}=v.blenderPose(a,l);return Z(`from mathutils import Matrix, Quaternion, Vector
9
- import bpy
10
- object = bpy.data.objects[${JSON.stringify(t)}]
11
- object.matrix_world = Matrix.LocRotScale(Vector((${S.join(", ")})), Quaternion((${_.join(", ")})), object.matrix_world.to_scale())`,d,"Lock Camera to View").then(w=>{w.error!==null&&$().console.error(`Blender refused the camera's pose: ${w.error}`,"blender-camera")},w=>$().console.error(`The camera's pose was not written to Blender: ${String(w)}`,"blender-camera"))},view:(t,a,l,d)=>v.cameraView(t,a,l,d)};function zt(t){const{active:a,document:l,documentId:d,notify:S,publishContext:_}=t,w=l?.source?.path,p=l?.id,O=JSON.stringify([d,p,w]),[x,k]=y.useState(null),g=y.useRef({notify:S,publishContext:_});return g.current={notify:S,publishContext:_},y.useEffect(()=>{if(a===!1||!d)return;let h=!1,F;const R=w===void 0?null:{documentId:d,entryId:p,blend:w},N=Ae(R),i=()=>{F=g.current.publishContext?.(v)};return k(null),(async()=>{try{if(R){if(!await Ie(R,i))return}else i();h||k({key:O,error:null})}catch(b){if(h)return;F?.(),F=void 0;const m=b instanceof Error?b.message:String(b);k({key:O,error:m}),g.current.notify?.({tone:"error",title:`Blender could not open ${w??"the model"}`,detail:m})}})(),()=>{h=!0,F?.(),N()}},[a,w,d,p,O]),a===!1||!d?null:x?.key!==O?u.jsx("div",{role:"status",children:"Opening model…"}):x.error?u.jsx("div",{role:"alert",children:x.error}):u.jsx(pt,{...t})}function pt({active:t,document:a,documentId:l,surfaces:d}){const S=y.useCallback(()=>({root:v.root,onChange(i){const b=v.onChange(i),m=X.subscribe(i);return()=>{b(),m()}},dispose(){}}),[]),_=a?.source?.path,w=y.useCallback(i=>{const b=v.onChange(i),m=X.subscribe(i);let o=null;const c=()=>{o?.(),o=U().find(A=>A.documentId===l)?.onFrame(i)??null};c();const j=te(c);return()=>{b(),m(),j(),o?.()}},[l]),p=y.useSyncExternalStore(w,ct),O=y.useSyncExternalStore(ve,()=>l?ie(l):!1,()=>!1);y.useEffect(()=>{if(!l)return;const i=v.overlayGroups(),b=()=>{const o=U().find(c=>c.documentId===l);if(o)for(const{kind:c,object:j}of i)o.setHelper(c,j)};b();const m=te(b);return()=>{m();const o=U().find(c=>c.documentId===l);for(const{kind:c}of i)o?.setHelper(c,null)}},[l]),y.useEffect(()=>{if(!l)return;const{transport:i}=$();let b=null;const m=()=>{if(b)return;const c=i.for(l);c&&(b=X.attachTo(c))};m();const o=i.subscribe(m);return()=>{o(),b?.()}},[l]),y.useEffect(()=>{if(!l)return;const i=()=>U().find(L=>L.documentId===l);let b,m=null;const o=new Pe,c=()=>i()?.rig().drawCamera()??o,j=()=>{const L=i();L!==b&&(m?.(),m=L?L.onFrame(()=>v.refreshRendered()):null,b=L);const{lighting:I}=Ce(l);v.holdRendered(I.source==="scene"&&L?c:null),v.setWorkbench(I.source==="studio"&&I.studioPreset===he.id)};j();const A=Oe(j),C=te(j);return()=>{A(),C(),m?.(),v.holdRendered(null),v.setWorkbench(!1)}},[l]);const x=y.useRef(null),k=i=>i.button===2&&i.shiftKey&&i.target instanceof HTMLCanvasElement,g=i=>{if(!k(i)){x.current=null;return}i.preventDefault(),i.stopPropagation(),x.current={id:i.pointerId,x:i.clientX,y:i.clientY},i.isTrusted&&i.target.setPointerCapture(i.pointerId)},h=()=>{x.current=null},F=i=>{const b=x.current;if(b===null||i.pointerId!==b.id||i.button!==2||(x.current=null,i.preventDefault(),i.stopPropagation(),Math.hypot(i.clientX-b.x,i.clientY-b.y)>3))return;const m=v.placeCursor(i.clientX,i.clientY,i.target);if(m===null)return;const[o,c,j]=m.location,[A,C,L,I]=m.rotation;Z(`from mathutils import Matrix, Quaternion, Vector
12
- bpy.context.scene.cursor.matrix = Matrix.LocRotScale(Vector((${o}, ${c}, ${j})), Quaternion((${A}, ${C}, ${L}, ${I})), None)`,!1,"Set 3D Cursor").then(P=>{P.error!==null&&$().console.error(`Blender refused the 3D cursor: ${P.error}`,"blender-cursor")},P=>$().console.error(`The 3D cursor was not written to Blender: ${String(P)}`,"blender-cursor"))},R=i=>{k(i)&&i.preventDefault()};if(!l)return null;const N=d.Object3DAuthoring;return u.jsxs("div",{style:O?{position:"absolute",inset:-12,display:"flex",gap:2}:{display:"contents"},children:[u.jsx("div",{style:O?{position:"relative",flex:"1 1 0",minWidth:0,margin:12}:{display:"contents"},onPointerDownCapture:g,onPointerUpCapture:F,onPointerCancelCapture:h,onLostPointerCaptureCapture:h,onContextMenuCapture:R,children:u.jsx(N,{active:t??!0,documentId:l,sourcePath:_??"blender:runtime",displayName:a?.label??"Model",...p===null?{}:{subject:p},gridScale:dt,cameraView:ut,build:S,audit:!1,authoring:qe,cameraDirection:[.8187,.4458,.3617],openingFit:3,openingView:v.savedView(),presentation:(()=>{const i=v.savedView();return i?{camera:{fov:je(i.lens)}}:null})(),stageKind:st,dressing:{environment:!1,keyLight:!1,viewLocked:v.studioLights()}})}),O&&u.jsx(it,{})]})}export{Wt as Toolbar,zt as default,st as documentKind,Ut as inspectorBuiltins,Ht as inspectorRail,Vt as point,Gt as title};
@@ -1 +0,0 @@
1
- import{a as u}from"./jsx-runtime-DPjLkJKQ.js";import{$ as s}from"./index-flxMlfV4.js";import{r as a}from"./index-nmcBqr7Y.js";import{s as d,b as l,B as i}from"./build-session-BHUOWzok.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-D_NuPfjr.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./configurations-DFYaoXBK.js";const F="workspace.document",U="Build Player",m=["log","info","warn","error"],c=Symbol("build-player-output");function p(e){if(!e)return;const t=()=>{if(!e.isConnected)return;const o=e.contentWindow;o?.location.pathname===new URL(i,location.href).pathname&&(o[c]||(h(o),s(e,{container:()=>o.document.getElementById("game-canvas")??o.document.body,canvasFrame:n=>f(o,n)})),o.document.readyState==="complete")||setTimeout(t,0)};t()}function f(e,t){return new Promise(o=>{e.requestAnimationFrame(()=>{const n=e.document.createElement("canvas");n.width=t.width,n.height=t.height;const r=n.getContext("2d");if(!r)return o(null);r.drawImage(t,0,0),o(n)})})}function h(e){e[c]=!0;for(const t of m){const o=e.console[t].bind(e.console);e.console[t]=(...n)=>{o(...n),console[t]("[Build Player]",...n)}}e.addEventListener("error",t=>{console.error("[Build Player] Uncaught",t.error??t.message)}),e.addEventListener("unhandledrejection",t=>{console.error("[Build Player] Unhandled rejection",t.reason)}),console.info(`[Build Player] Running ${e.document.title||"the build"}`)}function j(e){const t=a.useSyncExternalStore(d,l);return u.jsx("iframe",{title:"Build Player","data-build-player":t,src:`${i}?run=${t}`,ref:p,style:{width:"100%",height:"100%",border:0,display:"block",background:"#000"}},t)}export{j as default,F as point,U as title};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ui-board-document-BlKR5Cyh.js","assets/index-flxMlfV4.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-CCEX-9ul.js","assets/root-stacking-BEd9ZvxC.js","assets/edit-mode-authoring-CVKwIPOy.js","assets/design-time-mount-registry-DUpXCg1U.js","assets/react-story-board-BRUE9hN1.js","assets/game-surface-defaults-D8S4cRxi.js","assets/world-documents-DH7drgx-.js","assets/react-canvas-navigation-WxI8Mxyc.js","assets/component-board-registry-DrIa2csL.js","assets/surface-state-NwiDDkWI.js","assets/board-guides-ClHJXXuu.js","assets/CanvasSceneViewport-BdHcsAyR.js","assets/RootSelectionOverlay-BzEZwAaO.js","assets/eyedropper-session-bjPXnfeX.js","assets/layered-pick-DKNj5L29.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/inspect-Dl5bH02T.js","assets/inference-diagnostics-MWqnRUsN.js","assets/Toolbar-Bo-l61Lo.js","assets/transform-mode-request-COfeHSRX.js","assets/TransientHint-DFAcEEFI.js","assets/ReactCanvasControls-DplBODky.js","assets/story-media-presence-7Tbl7-hO.js"])))=>i.map(i=>d[i]);
2
- import{r as a}from"./component-board-registry-DrIa2csL.js";import{dn as s,B as n,_ as i,O as c,am as d,eH as l}from"./index-flxMlfV4.js";import{s as m,g as p}from"./story-media-presence-7Tbl7-hO.js";const r="UI",u={medium:"dom",owner:"@volter/editor-game/react/ui-board",documentId:s,title:r,presence:()=>l()?p().dom?"present":"absent":null,subscribe:o=>{const e=m(o),t=d(o);return()=>{e(),t()}},install:async o=>{try{const{installUiBoard:e}=await i(async()=>{const{installUiBoard:t}=await import("./ui-board-document-BlKR5Cyh.js");return{installUiBoard:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]));e(o)}catch(e){throw c.error(`Failed to load the ${r} board: ${String(e)}`,"scene"),e}},absentReason:()=>`This project has no ${r} board (${s}): board presence keys on STORIES, not on roots, and none of this project's stories declares the "dom" medium. Declare it — a manifest root entry naming the story's module, or a \`volter.adapter.ts\` regionInclude that covers it — and the board appears. ${n("console")} names every story it could not place.`},_="workspace.service";function b(){return a(u)}const h=Object.freeze(Object.defineProperty({__proto__:null,point:_,start:b},Symbol.toStringTag,{value:"Module"}));export{r as U,h as c};