@volter/game-editor 0.5.81 → 0.5.83

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 (347) hide show
  1. package/BUNDLED_NOTICES +22 -22
  2. package/catalog/entries/blender.json +2 -2
  3. package/catalog/entries/music.json +2 -2
  4. package/catalog/entries/reflections.json +1 -1
  5. package/catalog/project-source/src/lib/reflections/ReflectionProbe.tsx +34 -5
  6. package/catalog/project-source/src/lib/reflections/index.ts +1 -0
  7. package/catalog/project-source/src/lib/reflections/probe-controller.ts +44 -3
  8. package/catalog/project-source/src/lib/reflections/reflection-probe-registry.ts +32 -7
  9. package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +638 -160
  10. package/dist/.vite/manifest.json +2184 -2165
  11. package/dist/assets/{AssetBudgetPanel-CfVYW4ED.js → AssetBudgetPanel-SrgQ5Lx5.js} +3 -3
  12. package/dist/assets/{AudioViewer-J10BXrtm.js → AudioViewer-BqEwLSZN.js} +1 -1
  13. package/dist/assets/{CanvasBoardDocument-BgIbuOQF.js → CanvasBoardDocument-BfzWZdLX.js} +1 -1
  14. package/dist/assets/CanvasSceneViewport-CQ7ewAlO.js +1 -0
  15. package/dist/assets/{ColorInput-fX1V5l8_.js → ColorInput-DQ6YyPD_.js} +1 -1
  16. package/dist/assets/EntityModelDocument-By-BM9dS.js +1 -0
  17. package/dist/assets/{EnvironmentAssetDocument-QuLkCom9.js → EnvironmentAssetDocument-CrD37BI0.js} +1 -1
  18. package/dist/assets/{GameplaySessionTimeline-D0z5Mc0R.js → GameplaySessionTimeline-DYtnW0Si.js} +1 -1
  19. package/dist/assets/{ImageViewer-DWUPPWRf.js → ImageViewer-CZNpdUEA.js} +1 -1
  20. package/dist/assets/InspectorObjectPreview-gWOVV6Ll.js +1 -0
  21. package/dist/assets/{JsonAssetDocument-C0Lr6RwY.js → JsonAssetDocument-Bg74MDXy.js} +1 -1
  22. package/dist/assets/{LiveModuleDocument-CaGmr0EA.js → LiveModuleDocument-CSqzNMjn.js} +1 -1
  23. package/dist/assets/{LutAssetDocument-B6GmsOYd.js → LutAssetDocument-CsboXa8x.js} +1 -1
  24. package/dist/assets/ModelAssetDocument-DDVoKZpQ.js +1 -0
  25. package/dist/assets/{NonThreeAuthoringBootstrap-byKqf1kp.js → NonThreeAuthoringBootstrap-DcqD6_34.js} +1 -1
  26. package/dist/assets/Object3DDocumentToolbar-p2pd2TuS.js +1 -0
  27. package/dist/assets/Object3DDocumentViewport-BvNfSHi_.js +2 -0
  28. package/dist/assets/{Object3DPreview-pn9i3vwZ.js → Object3DPreview-Bv0fZcdS.js} +1 -1
  29. package/dist/assets/{OnlineAssetDetail-PDCDAcqz.js → OnlineAssetDetail-CPDafN4x.js} +1 -1
  30. package/dist/assets/{PlayBar-DEnkv3v6.js → PlayBar-CBD4rcED.js} +1 -1
  31. package/dist/assets/{QuarksAssetDocument-2x66XymD.js → QuarksAssetDocument-DUUhKUxZ.js} +1 -1
  32. package/dist/assets/{ReactCanvasControls-rFwp2CeP.js → ReactCanvasControls-3ual87uP.js} +1 -1
  33. package/dist/assets/{RootSelectionOverlay-B9rf-SSV.js → RootSelectionOverlay-DtX8yWUQ.js} +1 -1
  34. package/dist/assets/{ShaderAssetDocument-ImI6jbzB.js → ShaderAssetDocument-rkhRdPRk.js} +5 -5
  35. package/dist/assets/{ShadowEditor-DXxVxTzk.js → ShadowEditor-B-3FlftY.js} +1 -1
  36. package/dist/assets/{SourceAssetViewer-CMbp_o7v.js → SourceAssetViewer-CsMPohqK.js} +1 -1
  37. package/dist/assets/StageHost-BOaImrmu.js +2 -0
  38. package/dist/assets/{StoryPreviewMount-D2zLWzWy.js → StoryPreviewMount-BI-ANJix.js} +1 -1
  39. package/dist/assets/{ThreeBoardDocument-nX3UiY3u.js → ThreeBoardDocument-CoBjs8BP.js} +2 -2
  40. package/dist/assets/{ThreeIsolationSceneContent-CGHM0vsg.js → ThreeIsolationSceneContent-uShwSK1O.js} +1 -1
  41. package/dist/assets/{ToolObject3DPreview-BfNcqtFv.js → ToolObject3DPreview-CBZdWA_7.js} +1 -1
  42. package/dist/assets/{Toolbar-BJRJsbHG.js → Toolbar-DJK7o_be.js} +1 -1
  43. package/dist/assets/{TransientHint-CDvYgnzu.js → TransientHint-Dgu6u7U5.js} +1 -1
  44. package/dist/assets/{VideoViewer-B6Dv2zeQ.js → VideoViewer-BwTcASO2.js} +1 -1
  45. package/dist/assets/{ViewportShadingMenu-CrTY7tnk.js → ViewportShadingMenu-DUROUZdC.js} +1 -1
  46. package/dist/assets/{active-ingest-lrfMBhf9.js → active-ingest-Ra07ruDo.js} +3 -3
  47. package/dist/assets/{animation-clock-DktVGV5-.js → animation-clock-CKeqYCt9.js} +1 -1
  48. package/dist/assets/{animation-mixers.service-fkojNtor.js → animation-mixers.service-BNiEU2dA.js} +1 -1
  49. package/dist/assets/{animation-timeline.utility-DDrUZKe8.js → animation-timeline.utility-DQqMh1lF.js} +1 -1
  50. package/dist/assets/{asset-budget-asset.menu-CDlgKSO9.js → asset-budget-asset.menu-DFFih9b4.js} +1 -1
  51. package/dist/assets/{asset-budget.action-D6n-wIR3.js → asset-budget.action-C3SMMeSX.js} +1 -1
  52. package/dist/assets/{asset-budget.document-DFByoagB.js → asset-budget.document-B5NTy5dU.js} +1 -1
  53. package/dist/assets/{asset-budget.menu-B2u_1dWR.js → asset-budget.menu-Cclz2utV.js} +1 -1
  54. package/dist/assets/{asset-editor-persistence-e6bYhVnm.js → asset-editor-persistence-DsIjTddX.js} +1 -1
  55. package/dist/assets/{asset-loaders-Bsq-3hNt.js → asset-loaders-CQiLyapK.js} +1 -1
  56. package/dist/assets/{asset-preview-B7j9QV6N.js → asset-preview-BkFAKkZH.js} +1 -1
  57. package/dist/assets/{audio-unlock.service-7oO4YVIj.js → audio-unlock.service-CupzdUuC.js} +1 -1
  58. package/dist/assets/{audio.utility-9fcsT3YY.js → audio.utility-0il96T5s.js} +1 -1
  59. package/dist/assets/autoplay.service-SQBFaKvM.js +1 -0
  60. package/dist/assets/{babylon-authoring-adapter-BJfYxqDM.js → babylon-authoring-adapter-HZ_SbAet.js} +1 -1
  61. package/dist/assets/{binding-resolver-CBXePHiR.js → binding-resolver-BoecCqTq.js} +2 -2
  62. package/dist/assets/blender-emscripten-engine-Dk-rq4bm.js +2 -0
  63. package/dist/assets/{blender-node-editor.document-xA7eGv3-.js → blender-node-editor.document-B_MGPd1D.js} +1 -1
  64. package/dist/assets/{blender-properties-tab-nY8UOQUL.js → blender-properties-tab-ITmWT_gZ.js} +1 -1
  65. package/dist/assets/blender-runtime-host-CACzxt1b.js +4 -0
  66. package/dist/assets/{blender-runtime-skin-D3Arti9-.js → blender-runtime-skin-CwFW2Hj7.js} +36 -36
  67. package/dist/assets/blender-runtime.document-CozOB5TX.js +13 -0
  68. package/dist/assets/blender-screenshot.menu-BFR44H0L.js +1 -0
  69. package/dist/assets/{blender-timeline.document-DXoQ7y8E.js → blender-timeline.document-C0Zzi8Vo.js} +1 -1
  70. package/dist/assets/{blender-uv-editor.document-CMOyob1N.js → blender-uv-editor.document-BktbYoor.js} +1 -1
  71. package/dist/assets/{blender-version.status-16xnuezC.js → blender-version.status-CLPjDPFV.js} +1 -1
  72. package/dist/assets/blender-wali-engine-CUWSQ_vI.js +2 -0
  73. package/dist/assets/{blender.command-Br2EUk6Q.js → blender.command-DdHEHM62.js} +1 -1
  74. package/dist/assets/{board-guides-whelE-Dr.js → board-guides-DhwRYHGT.js} +1 -1
  75. package/dist/assets/bridge.command-D4O9w4ft.js +3 -0
  76. package/dist/assets/{browserAll-BfZu7-UJ.js → browserAll-BhQBgoJL.js} +1 -1
  77. package/dist/assets/build-player.document-DFr-d97N.js +1 -0
  78. package/dist/assets/{build-profiles.document-DNncGOL3.js → build-profiles.document-C-64YHSV.js} +2 -2
  79. package/dist/assets/{build-progress.status-DnJetNft.js → build-progress.status-DVm95Lmt.js} +1 -1
  80. package/dist/assets/{build-session-BaEmzCkm.js → build-session-C_SD2MNJ.js} +1 -1
  81. package/dist/assets/{build.action-exbllMgM.js → build.action-CPee4b_9.js} +1 -1
  82. package/dist/assets/{build.command-Imykh8LN.js → build.command-CrZ5sHYt.js} +1 -1
  83. package/dist/assets/{build.header-9RzLy3UQ.js → build.header-DDbhXD6t.js} +1 -1
  84. package/dist/assets/{build.menu-CRhA3yID.js → build.menu-Ci-W_A1E.js} +1 -1
  85. package/dist/assets/{build.service-CxIdSEPw.js → build.service-CpUtTLP4.js} +1 -1
  86. package/dist/assets/{camera-BiBGeQQ4.js → camera-BZM67LhS.js} +1 -1
  87. package/dist/assets/{camera-runtime.inspector-DmRFynxC.js → camera-runtime.inspector-BLgPGd97.js} +1 -1
  88. package/dist/assets/{canvas-design-mount-DJ6zQJKG.js → canvas-design-mount-DPAhHuIQ.js} +6 -6
  89. package/dist/assets/{canvas-entry-runtime-Cjga4XYp.js → canvas-entry-runtime-DeyvFKWS.js} +2 -2
  90. package/dist/assets/{canvas-preview-frames-EoYgD6W4.js → canvas-preview-frames-Cm0GJ-40.js} +1 -1
  91. package/dist/assets/{canvas-story-capture.service-D5UntNCd.js → canvas-story-capture.service-Ziv9XNot.js} +2 -2
  92. package/dist/assets/{capability-coverage-9qm5WVwt.js → capability-coverage-39yK3DGt.js} +4 -4
  93. package/dist/assets/collaboration-presence-MR8LW4mZ.js +1 -0
  94. package/dist/assets/{collider-CTHtUvnl.js → collider-4Sgmy-qt.js} +1 -1
  95. package/dist/assets/{component-board.service-yIS2UB-T.js → component-board.service-BdcOkwgn.js} +2 -2
  96. package/dist/assets/{component-board.service-Bf-ETQF0.js → component-board.service-DO_oHdnS.js} +2 -2
  97. package/dist/assets/{component-board.service-foqmr9Ii.js → component-board.service-DRJcETCR.js} +2 -2
  98. package/dist/assets/{component-contracts.service-Do9hADdW.js → component-contracts.service-BYQTO1HK.js} +1 -1
  99. package/dist/assets/{component-instance-root-MBgAuUpp.js → component-instance-root-CzRnRMe6.js} +1 -1
  100. package/dist/assets/{component-verbs.command-DtMdPuyO.js → component-verbs.command-CFv5y_pR.js} +1 -1
  101. package/dist/assets/component-verbs.service-BMBAwqjA.js +1 -0
  102. package/dist/assets/{config-B6tt9xy3.js → config-C6iAsozB.js} +2 -2
  103. package/dist/assets/configurations-Dua_x6Wx.js +1 -0
  104. package/dist/assets/{connection.status-BNPvWdJD.js → connection.status-DQJvEgdT.js} +1 -1
  105. package/dist/assets/{constraints.inspector-DoOn25Lk.js → constraints.inspector-AHeP-LBc.js} +1 -1
  106. package/dist/assets/{content-bounds-BFpR_e--.js → content-bounds-tMCAobKq.js} +1 -1
  107. package/dist/assets/{contract-system-adapters-BRHtWOi_.js → contract-system-adapters-D6ion7SF.js} +1 -1
  108. package/dist/assets/{coverage.service-BB1XhwsL.js → coverage.service-Dm_H5o74.js} +2 -2
  109. package/dist/assets/{create-runtime-B6u6x5eK.js → create-runtime-C82CmCbc.js} +2 -2
  110. package/dist/assets/{curve-D11mIGoN.js → curve-C7Gg05DV.js} +1 -1
  111. package/dist/assets/{data-asset-DejEwzXj.js → data-asset-BquhdFX2.js} +1 -1
  112. package/dist/assets/{data-ref-DJNVzksb.js → data-ref-Dcq9KJIG.js} +1 -1
  113. package/dist/assets/{debug-bridge-DlGIEyTc.js → debug-bridge-DODnLefz.js} +1 -1
  114. package/dist/assets/{debug-registry-Dagj3b6J.js → debug-registry-CwYeaZ9J.js} +1 -1
  115. package/dist/assets/deferred-ingest-play-7EJo_GNB.js +2 -0
  116. package/dist/assets/{design-time-canvas-mount-Cpb_jITI.js → design-time-canvas-mount-DCINR1Hg.js} +2 -2
  117. package/dist/assets/{design-time-layers-DT4X-pJp.js → design-time-layers-i1N-JjPz.js} +1 -1
  118. package/dist/assets/{design-time-mount.service-DEa-41ij.js → design-time-mount.service-CtnijZJJ.js} +2 -2
  119. package/dist/assets/{design-time-mount.service-Ck5Hjxtn.js → design-time-mount.service-DrUVDx2-.js} +2 -2
  120. package/dist/assets/{design-time-react-mount-DCTpYS51.js → design-time-react-mount-CpgoPMGr.js} +1 -1
  121. package/dist/assets/{document-preview-three-TjlxMDBR.js → document-preview-three-CuBUMP4o.js} +1 -1
  122. package/dist/assets/{dom-authoring-adapter-C3ZsI41l.js → dom-authoring-adapter-DSM-2JgU.js} +1 -1
  123. package/dist/assets/{draco3d-Ddr7J1sS.js → draco3d--d91Ay95.js} +1 -1
  124. package/dist/assets/{edit-mode-audio.service-D047aZ6I.js → edit-mode-audio.service-C9_299G0.js} +1 -1
  125. package/dist/assets/{edit-mode-authoring-DubxVdEM.js → edit-mode-authoring-DgvzXpiM.js} +1 -1
  126. package/dist/assets/{edit-mode-networking.service-DitjC2ZL.js → edit-mode-networking.service-B6l9ESo-.js} +1 -1
  127. package/dist/assets/editor-api-D9NJWRVZ.js +1 -0
  128. package/dist/assets/{editor-layers-BK3fNRb7.js → editor-layers-D7HXdvWY.js} +1 -1
  129. package/dist/assets/{editor-shell-store-Bro0arjr.js → editor-shell-store-CGWO4Ldz.js} +1 -1
  130. package/dist/assets/{entity-object-BFppZ54X.js → entity-object-Dl04-FE8.js} +1 -1
  131. package/dist/assets/{extend-MkXq6t1H.js → extend-GXzJ7XU_.js} +1 -1
  132. package/dist/assets/fork-menu-DO1KASKk.js +1 -0
  133. package/dist/assets/{frame-debugger-store-xbOH83D0.js → frame-debugger-store-DOewah-x.js} +1 -1
  134. package/dist/assets/{game-contract-seams-5IUqvr7b.js → game-contract-seams-B5a-Ev-f.js} +1 -1
  135. package/dist/assets/{game-css-scope-transform-DDAoTvZQ.js → game-css-scope-transform-CQhuDfMR.js} +1 -1
  136. package/dist/assets/game-document.service-CMc6SfH9.js +1 -0
  137. package/dist/assets/{game-eval.command-DcFoKUe7.js → game-eval.command-MY5YxNL-.js} +1 -1
  138. package/dist/assets/{game-module-access-ABBzTWg7.js → game-module-access-BafPamOR.js} +1 -1
  139. package/dist/assets/game-network-COQRxS_4.js +22 -0
  140. package/dist/assets/gameplay-export-i_fnSpRp.js +1 -0
  141. package/dist/assets/gameplay-replay-BM_frdpr.js +1 -0
  142. package/dist/assets/{gameplay.command-qdQLKC3A.js → gameplay.command-Dkp2IG9Q.js} +1 -1
  143. package/dist/assets/generation-jobs-B6T_j2D_.js +1 -0
  144. package/dist/assets/{generation.service-CdwRWoIV.js → generation.service-BXJTa6dr.js} +1 -1
  145. package/dist/assets/{generations-nW4LG5qG.js → generations-DqNhoKz8.js} +1 -1
  146. package/dist/assets/{generations.status-DgjVrgGL.js → generations.status-Dt8TW7Lk.js} +1 -1
  147. package/dist/assets/{hierarchy-marks-Pb6wnNcu.js → hierarchy-marks-fSNwXIFe.js} +1 -1
  148. package/dist/assets/{hosted-asset-materialization-BCnTLunr.js → hosted-asset-materialization-76jdNP28.js} +2 -2
  149. package/dist/assets/ibl-override-material-C09OAhCc.js +6 -0
  150. package/dist/assets/{index-CvGsVzTo.js → index-C5tasxXb.js} +294 -294
  151. package/dist/assets/{index-D7q1gYjq.js → index-CKznhnFr.js} +1 -1
  152. package/dist/assets/{index-BPuw4yre.js → index-CO6HFW9e.js} +1 -1
  153. package/dist/assets/{index-CaZZDx3x.js → index-Cf-uQvPt.js} +1 -1
  154. package/dist/assets/{index-BlWeDGvp.js → index-Cub6ESrb.js} +2 -2
  155. package/dist/assets/{index-Ds9fZyOU.js → index-D5pDWxZH.js} +1 -1
  156. package/dist/assets/{index-BYoN6-Qw.js → index-c6fd_bqy.js} +1 -1
  157. package/dist/assets/{index-Bz4YDJ7o.js → index-cGaEzVz5.js} +1 -1
  158. package/dist/assets/{index-Db2ixdvK.js → index-cNdu8TlA.js} +1 -1
  159. package/dist/assets/{inference-diagnostics-BCwXk-CS.js → inference-diagnostics-D7uYs70A.js} +1 -1
  160. package/dist/assets/{ingest-boot-viewport-BPER30gQ.js → ingest-boot-viewport-CjtFKkMD.js} +1 -1
  161. package/dist/assets/ingest-siblings-Dlx0quan.js +1 -0
  162. package/dist/assets/{ingest-source-persistence-CPlDA2D8.js → ingest-source-persistence-SAe0xIy-.js} +1 -1
  163. package/dist/assets/{ingest.service-BhwFGlqY.js → ingest.service-BXkZ1vXa.js} +1 -1
  164. package/dist/assets/{inspect-DxfAFkho.js → inspect-BqIL-41D.js} +1 -1
  165. package/dist/assets/instances.command-wpQVWPb9.js +1 -0
  166. package/dist/assets/{json-history-resource-CckDydoO.js → json-history-resource-BUJgH5iK.js} +1 -1
  167. package/dist/assets/layered-pick-RElCrqXb.js +1 -0
  168. package/dist/assets/{light-DF4nTzTq.js → light-DLADuHH2.js} +1 -1
  169. package/dist/assets/live-project-verbs-Cc1GXtG5.js +1 -0
  170. package/dist/assets/{machine.document-DaPLAXaa.js → machine.document-ER7OD-37.js} +1 -1
  171. package/dist/assets/{machines.finder-C9s8SFtp.js → machines.finder-CZ2ZxPFR.js} +1 -1
  172. package/dist/assets/material-CspuVO3Q.js +1 -0
  173. package/dist/assets/{material-factory-CCcnlv8E.js → material-factory-KV4mqSzl.js} +1 -1
  174. package/dist/assets/{mesh-CVBvSsCX.js → mesh-CrIkl8_H.js} +1 -1
  175. package/dist/assets/{model-asset-sections.service-vVRv6iOD.js → model-asset-sections.service-Cyom1FRs.js} +1 -1
  176. package/dist/assets/{model-inspection-Dd-hn5v2.js → model-inspection-BLOiPoW4.js} +1 -1
  177. package/dist/assets/{model-thumbnail-BDU_QU37.js → model-thumbnail-B7DVMYtQ.js} +1 -1
  178. package/dist/assets/{models.finder-CQMZz5xX.js → models.finder-At2wuWE3.js} +1 -1
  179. package/dist/assets/{module-mode-DcBz3aI7.js → module-mode-CHqvCb69.js} +2 -2
  180. package/dist/assets/{mount-canvas-ingest-root-DMWeT_c3.js → mount-canvas-ingest-root-uISMj3zn.js} +2 -2
  181. package/dist/assets/{mount-dom-ingest-root-Bx1TmleJ.js → mount-dom-ingest-root-C8PsgrCd.js} +2 -2
  182. package/dist/assets/{mount-ingest-root-BDP8atUq.js → mount-ingest-root-Dmb_D_oY.js} +2 -2
  183. package/dist/assets/{mount-manifest-C5QVCZlS.js → mount-manifest-CGwCOZO6.js} +1 -1
  184. package/dist/assets/{mount-three-ingest-root-DSmhgOJn.js → mount-three-ingest-root-BGdd6UoG.js} +1 -1
  185. package/dist/assets/{mounted-authoring-D-tXkNKH.js → mounted-authoring-BS53gpIm.js} +1 -1
  186. package/dist/assets/{mounted-story-viewport-source-Snu9yn1n.js → mounted-story-viewport-source-CL9Ra-_N.js} +1 -1
  187. package/dist/assets/{native-debug-module-XfhvyMrK.js → native-debug-module-DRmkIrIW.js} +1 -1
  188. package/dist/assets/{navigation-CTTcWe0R.js → navigation-DOuNvaV6.js} +1 -1
  189. package/dist/assets/{navmesh.menu-mFjQ30B0.js → navmesh.menu-9g4nO2dp.js} +1 -1
  190. package/dist/assets/{navmesh.service-BJPp7ZXu.js → navmesh.service-B7MllQj9.js} +1 -1
  191. package/dist/assets/network-observer.service-DY_39EdG.js +1 -0
  192. package/dist/assets/{network.utility-C-_7MTIV.js → network.utility-BgzPLUS5.js} +1 -1
  193. package/dist/assets/object3d-document-session-registry-Bk-I9jZH.js +2 -0
  194. package/dist/assets/{oid-transform-Bgdv7kST.js → oid-transform-CHeHFNUu.js} +1 -1
  195. package/dist/assets/{particles-CHXYb9Jd.js → particles-RD4cI69F.js} +1 -1
  196. package/dist/assets/{pixi-authoring-adapter-lj5CidSR.js → pixi-authoring-adapter-BuP3Qc7X.js} +1 -1
  197. package/dist/assets/{pixi-live-write-target-BEL9GCCr.js → pixi-live-write-target-DzyXhmiw.js} +1 -1
  198. package/dist/assets/play.command-C7iZbm26.js +2 -0
  199. package/dist/assets/{presentation-CmK-bEDi.js → presentation-43UAzXCV.js} +1 -1
  200. package/dist/assets/{product-gjrRHe-K.js → product-BfaoEtK8.js} +1 -1
  201. package/dist/assets/{profiler.action-CZ6UQi9A.js → profiler.action-DIp4OPNA.js} +1 -1
  202. package/dist/assets/{profiler.menu-DxbnC3d6.js → profiler.menu-tHZqii7c.js} +1 -1
  203. package/dist/assets/{profiler.utility-BvARl7sM.js → profiler.utility-CSg5WNN8.js} +1 -1
  204. package/dist/assets/{project-authoring-session-CBKXzBlD.js → project-authoring-session-BbwFHEzZ.js} +2 -2
  205. package/dist/assets/{properties-bone-constraints.inspector-Co8UpbhC.js → properties-bone-constraints.inspector-ooGWoGiI.js} +1 -1
  206. package/dist/assets/{properties-bone.inspector-CFXh2lQH.js → properties-bone.inspector-C_UdJjDe.js} +1 -1
  207. package/dist/assets/{properties-collection.inspector-Jq9X8fEq.js → properties-collection.inspector-Dm4MNZQK.js} +1 -1
  208. package/dist/assets/{properties-constraints.inspector-CMcKD_Jc.js → properties-constraints.inspector-DlCHF3Nd.js} +1 -1
  209. package/dist/assets/{properties-data.inspector-cP3izSat.js → properties-data.inspector-DTfv2ILq.js} +1 -1
  210. package/dist/assets/{properties-material.inspector-CrZIovv9.js → properties-material.inspector-C_-GsOvF.js} +1 -1
  211. package/dist/assets/{properties-modifiers.inspector-DqQMxoiL.js → properties-modifiers.inspector-BELGiG49.js} +1 -1
  212. package/dist/assets/{properties-object.inspector-DM63eANJ.js → properties-object.inspector-COLlzAo4.js} +1 -1
  213. package/dist/assets/{properties-output.inspector-B475IBEd.js → properties-output.inspector-DLpqLRCp.js} +1 -1
  214. package/dist/assets/{properties-particles.inspector-vGXQ4kWx.js → properties-particles.inspector-C8ZhuG-X.js} +1 -1
  215. package/dist/assets/{properties-physics.inspector-CfwqpVGS.js → properties-physics.inspector-DQ3fUdPx.js} +1 -1
  216. package/dist/assets/{properties-render.inspector-BYLknsM7.js → properties-render.inspector-DlPuoXQ-.js} +1 -1
  217. package/dist/assets/{properties-scene.inspector-BcIZBfGk.js → properties-scene.inspector-itnV8qGu.js} +1 -1
  218. package/dist/assets/{properties-texture.inspector-p3Owurhl.js → properties-texture.inspector-BZbBAQ_O.js} +1 -1
  219. package/dist/assets/{properties-view-layer.inspector-CN-5jzB9.js → properties-view-layer.inspector-CNOevOy3.js} +1 -1
  220. package/dist/assets/{properties-world.inspector-DVp8fYWx.js → properties-world.inspector-C7u-dAkO.js} +1 -1
  221. package/dist/assets/r3f-design-session-DbXiRez3.js +2 -0
  222. package/dist/assets/{r3f-physics-binding-BcTFD1ZS.js → r3f-physics-binding-B8Je7bNy.js} +1 -1
  223. package/dist/assets/{r3f-source-authoring-adapter-DVnhzoxp.js → r3f-source-authoring-adapter-CarxaAwC.js} +1 -1
  224. package/dist/assets/{react-canvas-navigation-CBorZtWB.js → react-canvas-navigation-BTVCmK_d.js} +1 -1
  225. package/dist/assets/{react-inspector.service-Dc99kogU.js → react-inspector.service-BV9ZVls7.js} +1 -1
  226. package/dist/assets/{react-story-board-6-BjI32N.js → react-story-board-CETbMKNG.js} +1 -1
  227. package/dist/assets/{react-three-rapier.esm-BO2XPUEM.js → react-three-rapier.esm-BQ3IBcaP.js} +1 -1
  228. package/dist/assets/{react-world-authoring-adapter-B6BiehHR.js → react-world-authoring-adapter-DsywMgco.js} +1 -1
  229. package/dist/assets/{realm-services-DCnaxwIb.js → realm-services-DoN23Ol2.js} +1 -1
  230. package/dist/assets/{reflection-probe-capture.inspector-CWneVfEe.js → reflection-probe-capture.inspector-D0grUDdX.js} +1 -1
  231. package/dist/assets/{registry-BQ9YcFZF.js → registry-CZxNkOhN.js} +1 -1
  232. package/dist/assets/{relative-import-specifier-BvzqkvYS.js → relative-import-specifier-DMppRnNH.js} +1 -1
  233. package/dist/assets/{render-env-F320_iHT.js → render-env-BAO3Rc6G.js} +1 -1
  234. package/dist/assets/{render-features-DFwHsGxu.js → render-features-CBm-s0QE.js} +1 -1
  235. package/dist/assets/{render-settings-BPcHd4LA.js → render-settings-DCZaLK-j.js} +1 -1
  236. package/dist/assets/{resolve-three-CnxafYrg.js → resolve-three-Bwj7rkZB.js} +13 -13
  237. package/dist/assets/{root-seam-contract-CueaHgB9.js → root-seam-contract-DMUsCBFW.js} +1 -1
  238. package/dist/assets/{run-selection-BMQWV9Fn.js → run-selection-DRkjJF-w.js} +1 -1
  239. package/dist/assets/{scene-capture-DcMYbX9_.js → scene-capture-DVXdql_1.js} +1 -1
  240. package/dist/assets/{scene-document.service-CZpLI3b6.js → scene-document.service-CxGQ1BN-.js} +2 -2
  241. package/dist/assets/{scene-framing-nVyYC4Y-.js → scene-framing-DUd4lKtW.js} +1 -1
  242. package/dist/assets/{seeded-random-D0QPgfm6.js → seeded-random-DzZFJTfh.js} +1 -1
  243. package/dist/assets/{setup-renderer-ji8Qt-PP.js → setup-renderer-DF2zFw-E.js} +1 -1
  244. package/dist/assets/{source-object3d-authoring-adapter-owosRx07.js → source-object3d-authoring-adapter-RimvAMDG.js} +1 -1
  245. package/dist/assets/{source-persistence-backend-Djuk0m-7.js → source-persistence-backend-BRcy23H9.js} +1 -1
  246. package/dist/assets/stage-keyboard-JRZ1CNbL.js +1 -0
  247. package/dist/assets/stage-overlay-set-DHN11xPU.js +1 -0
  248. package/dist/assets/{stage-presence-markers-CQlXR9fX.js → stage-presence-markers-AQuGIbnu.js} +1 -1
  249. package/dist/assets/stage-transform-tools-B8u8n8gJ.js +1 -0
  250. package/dist/assets/{standard-viewport-dressing-e4mnLmI6.js → standard-viewport-dressing-NHKaiGVg.js} +3 -3
  251. package/dist/assets/{state-watch.action-Cv3W67Kr.js → state-watch.action-B_conRk5.js} +1 -1
  252. package/dist/assets/{state-watch.menu-Cuziz9RM.js → state-watch.menu-B6GNrnYH.js} +1 -1
  253. package/dist/assets/{state-watch.utility-B1zkFd_6.js → state-watch.utility-CxuUOPhl.js} +1 -1
  254. package/dist/assets/story-capture-DYXQlnlZ.js +1 -0
  255. package/dist/assets/{story-documents-Cjoy-ydN.js → story-documents-D_Tg0idt.js} +1 -1
  256. package/dist/assets/{story-documents.service-Csto-LsX.js → story-documents.service-DQh0SkkQ.js} +1 -1
  257. package/dist/assets/{story-documents.service-gVxcUtso.js → story-documents.service-ES8nxeNu.js} +1 -1
  258. package/dist/assets/story-media-presence-D4w-waFJ.js +1 -0
  259. package/dist/assets/{story-pixi-preview-uA6AevDw.js → story-pixi-preview-B6GFGUQG.js} +1 -1
  260. package/dist/assets/{story-presentation-DgAoj9Qt.js → story-presentation-6qhUDkv4.js} +1 -1
  261. package/dist/assets/{story-three-preview-CQYi1rZ_.js → story-three-preview-BgLSJIlN.js} +2 -2
  262. package/dist/assets/{studio-environment-DK0ke0m0.js → studio-environment-BGU84AOG.js} +1 -1
  263. package/dist/assets/{surface-state-DlUcJe84.js → surface-state-BtNEZzCd.js} +1 -1
  264. package/dist/assets/{syntactic-prop-specs-92aOVqyZ.js → syntactic-prop-specs-B309atpv.js} +1 -1
  265. package/dist/assets/{team-playtest.service-CGBismiY.js → team-playtest.service-B8leDEE-.js} +1 -1
  266. package/dist/assets/{three-bdxPiUPb.js → three-BRZq2Px5.js} +1 -1
  267. package/dist/assets/{three-authoring-adapter-BuqO9MDt.js → three-authoring-adapter-DkfGlaNQ.js} +1 -1
  268. package/dist/assets/three-authoring.service-sOchR4o8.js +2 -0
  269. package/dist/assets/{three-ingest-runtime-CwRnwvb0.js → three-ingest-runtime-D9JoNRjk.js} +1 -1
  270. package/dist/assets/three-integration-D3zBmOoj.js +2 -0
  271. package/dist/assets/three-integration.service-CE8aNHob.js +1 -0
  272. package/dist/assets/{three-projection-core-BO23VKAP.js → three-projection-core-Dt5ARGlM.js} +1 -1
  273. package/dist/assets/{three-state-BhQOBgKC.js → three-state-3qPk0Sq8.js} +1 -1
  274. package/dist/assets/{three-story-capture.service-BAtrzxHq.js → three-story-capture.service-B3U2L4qG.js} +2 -2
  275. package/dist/assets/{three-story-model-D_bo7Gl-.js → three-story-model-C96x-E0V.js} +1 -1
  276. package/dist/assets/{three-viewport-presentation-CWanX03c.js → three-viewport-presentation-DGctcUkE.js} +5 -5
  277. package/dist/assets/transform-mode-request-C0cdwtJf.js +1 -0
  278. package/dist/assets/{transport-strip-CFLRAIQd.js → transport-strip-8OsPiJIm.js} +1 -1
  279. package/dist/assets/transport.header-D1Otpit3.js +1 -0
  280. package/dist/assets/{tuples-BKzzn3tK.js → tuples-CaBWqclR.js} +1 -1
  281. package/dist/assets/ui-board-document-BMTAhmJP.js +2 -0
  282. package/dist/assets/{user-data-DfBtZvxw.js → user-data-4Ls0MsfF.js} +1 -1
  283. package/dist/assets/{utility-view-state-CL4NJh3n.js → utility-view-state-gIzv2Oo_.js} +1 -1
  284. package/dist/assets/{viewport-door-CuJjGYTz.js → viewport-door-C4Fu0zS3.js} +1 -1
  285. package/dist/assets/{viewport-root-presentation-CkSAEMH-.js → viewport-root-presentation-DMMIH4rt.js} +1 -1
  286. package/dist/assets/{viewport-surface-status-D3t-0oLs.js → viewport-surface-status-CdI6sQko.js} +1 -1
  287. package/dist/assets/{webworkerAll-DCmB9rsA.js → webworkerAll-BINEvomm.js} +1 -1
  288. package/dist/assets/worker-Cu9kIzIf.js +2 -0
  289. package/dist/assets/{workspace-arrangement-C9uemwSK.js → workspace-arrangement-w-T2xUGF.js} +1 -1
  290. package/dist/assets/{world-documents-Dvn8e5I0.js → world-documents-feEUCgVE.js} +1 -1
  291. package/dist/assets/{world-root-stage-binding-BB7acZV_.js → world-root-stage-binding-BDb6wt_C.js} +1 -1
  292. package/dist/assets/{xstate-animation-binding-DctwT981.js → xstate-animation-binding-Bhz1Uhhw.js} +1 -1
  293. package/dist/assets/{xstate-animation-meta-s4Vc8Wu3.js → xstate-animation-meta-CvDlYgrt.js} +1 -1
  294. package/dist-node/cli.js +21 -18
  295. package/package.json +16 -16
  296. package/template/src/lib/reflections/ReflectionProbe.tsx +34 -5
  297. package/template/src/lib/reflections/index.ts +1 -0
  298. package/template/src/lib/reflections/probe-controller.ts +44 -3
  299. package/template/src/lib/reflections/reflection-probe-registry.ts +32 -7
  300. package/template/src/lib/reflections/volume-reflection-material.ts +638 -160
  301. package/dist/assets/CanvasSceneViewport-Z8OReqpB.js +0 -1
  302. package/dist/assets/EntityModelDocument-BltE1A7W.js +0 -1
  303. package/dist/assets/InspectorObjectPreview-BpttBw3o.js +0 -1
  304. package/dist/assets/ModelAssetDocument-BBDnXTQm.js +0 -1
  305. package/dist/assets/Object3DDocumentToolbar-BHuuMZnS.js +0 -1
  306. package/dist/assets/Object3DDocumentViewport-ByDDwGJD.js +0 -2
  307. package/dist/assets/StageHost-D1Sz5aud.js +0 -2
  308. package/dist/assets/autoplay.service-DncOrn-K.js +0 -1
  309. package/dist/assets/blender-emscripten-engine-DQljvfR7.js +0 -2
  310. package/dist/assets/blender-runtime-host-CcqXT39s.js +0 -4
  311. package/dist/assets/blender-runtime.document-DDW5jIJe.js +0 -12
  312. package/dist/assets/blender-wali-engine-CO-jG_ik.js +0 -2
  313. package/dist/assets/bridge.command-T93eURWq.js +0 -3
  314. package/dist/assets/build-player.document-DJQLP4xM.js +0 -1
  315. package/dist/assets/collaboration-presence-Q6zcL5v0.js +0 -1
  316. package/dist/assets/component-verbs.service-CJYq28Zw.js +0 -1
  317. package/dist/assets/configurations-BcYOQ7i-.js +0 -1
  318. package/dist/assets/deferred-ingest-play-DZiOEH9a.js +0 -2
  319. package/dist/assets/editor-api-CPh65aBN.js +0 -1
  320. package/dist/assets/fork-menu-DzoCyQvA.js +0 -1
  321. package/dist/assets/game-document.service-CxfiFnxt.js +0 -1
  322. package/dist/assets/game-network-BPTyOFqA.js +0 -22
  323. package/dist/assets/gameplay-export-CRnHCUBb.js +0 -1
  324. package/dist/assets/gameplay-replay-yPaMxi2o.js +0 -1
  325. package/dist/assets/generation-jobs-Cy1oE-Ff.js +0 -1
  326. package/dist/assets/ibl-override-material-CMo_a49U.js +0 -6
  327. package/dist/assets/ingest-siblings-2QHhcCgA.js +0 -1
  328. package/dist/assets/instances.command-BJ-I9vtW.js +0 -1
  329. package/dist/assets/layered-pick-BaxBYi7u.js +0 -1
  330. package/dist/assets/live-project-verbs-B7S-wGjC.js +0 -1
  331. package/dist/assets/material-rGFsBrD0.js +0 -1
  332. package/dist/assets/network-observer.service-CjeDB1Id.js +0 -1
  333. package/dist/assets/object3d-document-session-registry-CWaOPDYg.js +0 -2
  334. package/dist/assets/play.command-C9QyYFgv.js +0 -2
  335. package/dist/assets/r3f-design-session-Cyy1sDGH.js +0 -2
  336. package/dist/assets/stage-keyboard-G6HMStmP.js +0 -1
  337. package/dist/assets/stage-overlay-set-ChHqsFiR.js +0 -1
  338. package/dist/assets/stage-transform-tools-BM9u9Awe.js +0 -1
  339. package/dist/assets/story-capture-Drqhmo7i.js +0 -1
  340. package/dist/assets/story-media-presence-CYc2fP4y.js +0 -1
  341. package/dist/assets/three-authoring.service-CMym8IbB.js +0 -2
  342. package/dist/assets/three-integration-BHoulbny.js +0 -2
  343. package/dist/assets/three-integration.service-BlgF9hV3.js +0 -1
  344. package/dist/assets/transform-mode-request-Bg6T_rOC.js +0 -1
  345. package/dist/assets/transport.header-B3dK1KaC.js +0 -1
  346. package/dist/assets/ui-board-document-DMxgQ-9n.js +0 -2
  347. package/dist/assets/worker-CJIsrsP6.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-CvGsVzTo.js";import{r as u}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{S as Fe,a as re}from"./react-canvas-navigation-CBorZtWB.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-B9rf-SSV.js";import{a as De}from"./Toolbar-BJRJsbHG.js";import{r as We}from"./transform-mode-request-Bg6T_rOC.js";import{T as Ye}from"./TransientHint-CDvYgnzu.js";import{p as $e}from"./layered-pick-BaxBYi7u.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-Bro0arjr.js";import{K as d,af as v}from"./index-CvGsVzTo.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-B7j9QV6N.js";import{O as j}from"./StageHost-D1Sz5aud.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-BK3fNRb7.js";import"./workspace-arrangement-C9uemwSK.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-DfBtZvxw.js";import"./entity-object-BFppZ54X.js";import"./three-contract-Dkt6PmWY.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-Pb6wnNcu.js";import"./studio-environment-DK0ke0m0.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-BhQOBgKC.js";import"./standard-viewport-dressing-e4mnLmI6.js";import"./content-bounds-BFpR_e--.js";import"./preview-renderer-BrYNFV1p.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-Dd-hn5v2.js";import"./three-viewport-presentation-CWanX03c.js";import"./clip-planes-CnAI6DZn.js";import"./three-bdxPiUPb.js";import"./component-instance-root-MBgAuUpp.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-BDU_QU37.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-BHoulbny.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-BaxBYi7u.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-CWaOPDYg.js";import"./viewport-door-CuJjGYTz.js";import"./scene-framing-nVyYC4Y-.js";import"./source-object3d-authoring-adapter-owosRx07.js";import"./three-projection-core-BO23VKAP.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-CFLRAIQd.js";import"./viewport-surface-status-D3t-0oLs.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-BltE1A7W.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./editor-shell-store-Bro0arjr.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-BK3fNRb7.js";import"./workspace-arrangement-C9uemwSK.js";import"./index-CvGsVzTo.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-DfBtZvxw.js";import"./entity-object-BFppZ54X.js";import"./three-contract-Dkt6PmWY.js";import"./live-mixers-B-bwLZ7c.js";import"./asset-preview-B7j9QV6N.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-Pb6wnNcu.js";import"./studio-environment-DK0ke0m0.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-D1Sz5aud.js";import"./three-state-BhQOBgKC.js";import"./standard-viewport-dressing-e4mnLmI6.js";import"./content-bounds-BFpR_e--.js";import"./preview-renderer-BrYNFV1p.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-Dd-hn5v2.js";import"./three-viewport-presentation-CWanX03c.js";import"./clip-planes-CnAI6DZn.js";import"./three-bdxPiUPb.js";import"./component-instance-root-MBgAuUpp.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-BDU_QU37.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-BHoulbny.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-BaxBYi7u.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-CWaOPDYg.js";import"./viewport-door-CuJjGYTz.js";import"./scene-framing-nVyYC4Y-.js";import"./source-object3d-authoring-adapter-owosRx07.js";import"./three-projection-core-BO23VKAP.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-CFLRAIQd.js";import"./viewport-surface-status-D3t-0oLs.js";function ut({previewKey:o,object:r,displayName:i,fill:p=!1}){return t.jsx("div",{"data-testid":"inspector-object-preview",style:p?{position:"absolute",inset:0,overflow:"hidden"}:{width:"100%",height:220,minHeight:220,borderBottom:"1px solid var(--volter-structural-divider)",overflow:"hidden",position:"relative"},children:t.jsx(m,{documentId:`inspector-preview:${o}`,source:r,displayName:i,active:!0,chromeless:!0})})}export{ut as InspectorObjectPreview};
@@ -1 +0,0 @@
1
- import{a as s}from"./jsx-runtime-DPjLkJKQ.js";import{r as e}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{af as a}from"./index-CvGsVzTo.js";import{l as w,d as f}from"./asset-preview-B7j9QV6N.js";import{m as x,l as E,c as S}from"./model-thumbnail-BDU_QU37.js";import{O as M}from"./StageHost-D1Sz5aud.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./editor-layers-BK3fNRb7.js";import"./workspace-arrangement-C9uemwSK.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-Pb6wnNcu.js";import"./studio-environment-DK0ke0m0.js";import"./user-data-DfBtZvxw.js";import"./KTX2Loader-CaqVE6nY.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";import"./three-state-BhQOBgKC.js";import"./editor-shell-store-Bro0arjr.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./entity-object-BFppZ54X.js";import"./three-contract-Dkt6PmWY.js";import"./standard-viewport-dressing-e4mnLmI6.js";import"./content-bounds-BFpR_e--.js";import"./preview-renderer-BrYNFV1p.js";import"./live-mixers-B-bwLZ7c.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-Dd-hn5v2.js";import"./three-viewport-presentation-CWanX03c.js";import"./clip-planes-CnAI6DZn.js";import"./three-bdxPiUPb.js";import"./component-instance-root-MBgAuUpp.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-BHoulbny.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-BaxBYi7u.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-CWaOPDYg.js";import"./viewport-door-CuJjGYTz.js";import"./scene-framing-nVyYC4Y-.js";import"./source-object3d-authoring-adapter-owosRx07.js";import"./three-projection-core-BO23VKAP.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-CFLRAIQd.js";import"./viewport-surface-status-D3t-0oLs.js";function Co({documentId:g,assetPath:o,displayName:u,active:p}){const[b,n]=e.useState(null),[d,c]=e.useState(null);e.useEffect(()=>{if(!p){n(null);return}const m=new AbortController;let l=null;n(null),c(null);const i=x(o);return(i==="glb"||i==="gltf"||i==="spz"?w(o,m.signal):i?E({url:o,format:i}).then(S).then(r=>({root:r,sourceBytes:null})):Promise.reject(new Error(`No native Three.js model loader supports ${o}.`))).then(r=>{if(m.signal.aborted){f(r.root);return}l=r.root,n(r)},r=>{m.signal.aborted||c(r instanceof Error?r.message:String(r))}),()=>{m.abort(),l&&f(l)}},[p,o]);const t=b?.root??null,j=e.useCallback(()=>{if(!t)throw new Error(`Model asset ${o} is not loaded.`);return{root:t,animations:t.animations,dispose(){}}},[o,t]);return d?s.jsx("div",{role:"alert",style:{padding:20,color:a.semantic.danger},children:d}):t?s.jsx(M,{documentId:g,sourcePath:o,displayName:u,build:j,active:p,assetType:"model",modelSource:{kind:"project-file",path:o}}):s.jsxs("div",{style:{padding:20,color:a.content.muted},children:["Loading ",u,"…"]})}export{Co as ModelAssetDocument};
@@ -1 +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-CvGsVzTo.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{e as ye,f as Ce}from"./asset-preview-B7j9QV6N.js";import{s as Ee}from"./model-inspection-Dd-hn5v2.js";import{s as Pe,o as J,a as Ve}from"./object3d-document-session-registry-CWaOPDYg.js";import{v as ke}from"./viewport-door-CuJjGYTz.js";import{v as Q,V as Me,a as De,p as Oe,b as Te,c as Re}from"./ViewportShadingMenu-CrTY7tnk.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-BK3fNRb7.js";import"./workspace-arrangement-C9uemwSK.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-Pb6wnNcu.js";import"./studio-environment-DK0ke0m0.js";import"./user-data-DfBtZvxw.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-D1Sz5aud.js","assets/index-CvGsVzTo.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-BhQOBgKC.js","assets/editor-shell-store-Bro0arjr.js","assets/output-pass-HurwNl0G.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/Pass-D1MRT672.js","assets/editor-layers-BK3fNRb7.js","assets/workspace-arrangement-C9uemwSK.js","assets/user-data-DfBtZvxw.js","assets/entity-object-BFppZ54X.js","assets/three-contract-Dkt6PmWY.js","assets/standard-viewport-dressing-e4mnLmI6.js","assets/content-bounds-BFpR_e--.js","assets/hierarchy-marks-Pb6wnNcu.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-Dd-hn5v2.js","assets/three-viewport-presentation-CWanX03c.js","assets/clip-planes-CnAI6DZn.js","assets/three-bdxPiUPb.js","assets/component-instance-root-MBgAuUpp.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/model-thumbnail-BDU_QU37.js","assets/studio-environment-DK0ke0m0.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-BHoulbny.js","assets/host-hierarchy-objects-BV3WqU2w.js","assets/layered-pick-BaxBYi7u.js","assets/root-stacking-BEd9ZvxC.js","assets/object3d-document-session-registry-CWaOPDYg.js","assets/viewport-door-CuJjGYTz.js","assets/asset-preview-B7j9QV6N.js","assets/bitmap-label-Ct4k6ehY.js","assets/scene-framing-nVyYC4Y-.js","assets/source-object3d-authoring-adapter-owosRx07.js","assets/three-projection-core-BO23VKAP.js","assets/editor-presentation-activity-CqJH4G9t.js","assets/transport-strip-CFLRAIQd.js","assets/viewport-surface-status-D3t-0oLs.js"])))=>i.map(i=>d[i]);
2
- import{ae as r,_ as a}from"./index-CvGsVzTo.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-D3t-0oLs.js";const s=n.lazy(async()=>({default:(await a(()=>import("./StageHost-D1Sz5aud.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-BM9u9Awe.js","assets/jsx-runtime-DPjLkJKQ.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-CvGsVzTo.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-Bro0arjr.js","assets/output-pass-HurwNl0G.js","assets/Pass-D1MRT672.js","assets/editor-layers-BK3fNRb7.js","assets/workspace-arrangement-C9uemwSK.js","assets/user-data-DfBtZvxw.js","assets/entity-object-BFppZ54X.js","assets/three-contract-Dkt6PmWY.js","assets/Toolbar-BJRJsbHG.js","assets/transform-mode-request-Bg6T_rOC.js","assets/three-state-BhQOBgKC.js","assets/standard-viewport-dressing-e4mnLmI6.js","assets/content-bounds-BFpR_e--.js","assets/hierarchy-marks-Pb6wnNcu.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-Dd-hn5v2.js","assets/three-viewport-presentation-CWanX03c.js","assets/clip-planes-CnAI6DZn.js","assets/three-bdxPiUPb.js","assets/component-instance-root-MBgAuUpp.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/model-thumbnail-BDU_QU37.js","assets/studio-environment-DK0ke0m0.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-BHoulbny.js","assets/host-hierarchy-objects-BV3WqU2w.js","assets/layered-pick-BaxBYi7u.js","assets/root-stacking-BEd9ZvxC.js","assets/object3d-document-session-registry-CWaOPDYg.js","assets/viewport-door-CuJjGYTz.js","assets/asset-preview-B7j9QV6N.js","assets/bitmap-label-Ct4k6ehY.js","assets/scene-framing-nVyYC4Y-.js","assets/source-object3d-authoring-adapter-owosRx07.js","assets/three-projection-core-BO23VKAP.js","assets/editor-presentation-activity-CqJH4G9t.js","assets/transport-strip-CFLRAIQd.js","assets/viewport-surface-status-D3t-0oLs.js","assets/stage-overlay-set-ChHqsFiR.js","assets/TransientHint-CDvYgnzu.js","assets/ViewportShadingMenu-CrTY7tnk.js","assets/stage-keyboard-G6HMStmP.js","assets/camera-authoring-DYjhU5Zp.js","assets/stage-presence-markers-CQlXR9fX.js","assets/collaboration-presence-Q6zcL5v0.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-CvGsVzTo.js";import{a as d}from"./jsx-runtime-DPjLkJKQ.js";import{t as wr,a as ji}from"./three-state-BhQOBgKC.js";import{i as N,b as Ti,a as Vi,w as Ai,c as Li,s as Ps}from"./standard-viewport-dressing-e4mnLmI6.js";import{r as f}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a as br}from"./content-bounds-BFpR_e--.js";import{EDITOR_LAYER as Zs,isInEditorOwnedSubtree as Fi}from"./editor-layers-BK3fNRb7.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-DfBtZvxw.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-Dd-hn5v2.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-CWanX03c.js";import{s as Pr}from"./workspace-arrangement-C9uemwSK.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-CWaOPDYg.js";import{S as xo}from"./source-object3d-authoring-adapter-owosRx07.js";import{s as Po,i as hr}from"./editor-presentation-activity-CqJH4G9t.js";import{a as Co}from"./three-integration-BHoulbny.js";import{r as Fs,d as Ds}from"./viewport-door-CuJjGYTz.js";import{T as ko}from"./transport-strip-CFLRAIQd.js";import{V as Mo,O as Eo}from"./viewport-surface-status-D3t-0oLs.js";import{t as on}from"./editor-shell-store-Bro0arjr.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-BM9u9Awe.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-BM9u9Awe.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-ChHqsFiR.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-G6HMStmP.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-CQlXR9fX.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-CvGsVzTo.js";import{e as p}from"./game-network-BPTyOFqA.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-XfhvyMrK.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-Dagj3b6J.js";import"./contract-system-adapters-BRHtWOi_.js";import"./game-contract-seams-5IUqvr7b.js";import"./seeded-random-D0QPgfm6.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-B7S-wGjC.js";import"./capability-coverage-9qm5WVwt.js";import"./edit-mode-authoring-DubxVdEM.js";import"./json-history-resource-CckDydoO.js";import"./binding-resolver-CBXePHiR.js";import"./adapter-surface-Y37Nzcyw.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./realm-services-DCnaxwIb.js";import"./canvas-entry-runtime-Cjga4XYp.js";import"./three-ingest-runtime-CwRnwvb0.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-lrfMBhf9.js";import"./ingest-source-persistence-CPlDA2D8.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-CkSAEMH-.js";import"./mounted-authoring-D-tXkNKH.js";import"./entity-object-BFppZ54X.js";import"./user-data-DfBtZvxw.js";import"./workspace-arrangement-C9uemwSK.js";import"./three-contract-Dkt6PmWY.js";import"./three-bdxPiUPb.js";import"./editor-layers-BK3fNRb7.js";import"./component-instance-root-MBgAuUpp.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./three-authoring-adapter-BuqO9MDt.js";import"./source-persistence-backend-Djuk0m-7.js";import"./three-projection-core-BO23VKAP.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-BcTFD1ZS.js";import"./deferred-ingest-play-DZiOEH9a.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-B6BiehHR.js";import"./board-guides-whelE-Dr.js";import"./relative-import-specifier-BvzqkvYS.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-DxfAFkho.js";import"./inference-diagnostics-BCwXk-CS.js";import"./writer-tw6EcuVO.js";import"./three-state-BhQOBgKC.js";import"./editor-shell-store-Bro0arjr.js";import"./output-pass-HurwNl0G.js";import"./viewport-door-CuJjGYTz.js";import"./game-surface-defaults-D8S4cRxi.js";const Rt="workspace.service";function e(o){p().catch(t=>{m().console.error(`${o}: ${t instanceof Error?t.message:String(t)}`,"play")})}function Ut(){let o,t=!1;const r=i(()=>{t||new URLSearchParams(window.location.search).get("play")==="1"&&(t=!0,o=window.setTimeout(()=>e("Could not enter requested Play mode"),0))});return()=>{o!==void 0&&window.clearTimeout(o),r()}}export{Rt as point,Ut as start};
@@ -1,2 +0,0 @@
1
- import{a as y,b as P,S as p,P as _,s as k,o as B}from"./worker-CJIsrsP6.js";import{s as A}from"./session-kSIjcXJT.js";async function $(o){const a=await fetch(o);if(!a.ok)throw new Error(`${o}: HTTP ${a.status}`);const e=await a.text(),r={exports:{}},i=new Function("module","exports","define",`${e}
2
- return typeof createBlenderModule === 'function' ? createBlenderModule : module.exports;`)(r,r.exports,void 0);if(typeof i!="function")throw new Error("blender_browser.js did not produce a module factory");return i}const I=new TextEncoder;function N(o,a){let e="";for(const r of a.split("/").filter(Boolean))o.FS_createPath(e||"/",r,!0,!0),e+=`/${r}`}function D(o){const a=o.FS;return{readFile:async e=>a.readFile(e),writeFile:(e,r)=>(a.writeFile(e,r),Promise.resolve()),mkdirTree:async e=>a.mkdirTree(e),readdir:async e=>a.readdir(e),stat:async e=>{let r;try{r=a.stat(e)}catch{return null}const n=r.mtime;return{size:r.size,mode:r.mode??0,mtimeMs:typeof n=="number"?n:n?.getTime()??0}},unlink:async e=>a.unlink(e)}}const L="volter-blender-artifacts";async function m(o,a){const e=y(o);if(!a||typeof caches>"u")return fetch(e);const r=`${e}?sha256=${a}`,n=await caches.open(L),i=await n.match(r);if(i)return i;const l=await fetch(e);if(!l.ok)return l;for(const c of await n.keys())c.url.startsWith(`${e}?sha256=`)&&c.url!==r&&await n.delete(c);const s=new Response(await l.blob(),{headers:{"content-type":l.headers.get("content-type")??"application/octet-stream"}});return await n.put(r,s.clone()),s}async function C(o,a){if(!self.crossOriginIsolated)throw new Error("Headless Blender needs SharedArrayBuffer, so the editor page has to be cross-origin isolated (Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy on every response). This worker reports crossOriginIsolated=false.");const e=y("blender_browser.js"),r=a.digests??{},[n,i]=await Promise.all([$(e),m("blender_browser.data",r["blender_browser.data"]).then(async t=>{if(!t.ok)throw new Error(`blender_browser.data: HTTP ${t.status}`);return t.arrayBuffer()})]);let l=null;const s=performance.now();let c=null;const u=(t,f)=>{f.startsWith("@@VOLTER-READY ")&&(c=f.slice(15)),o.log(f.startsWith("@@VOLTER-WARN")||f.startsWith("@@VOLTER-ERROR")?"error":"log",f)},d=await n({arguments:["--background","--factory-startup","--python",P],locateFile:t=>y(t),getPreloadedPackage:()=>i,instantiateWasm:(t,f)=>((async()=>{const w=await m("blender_browser.wasm",r["blender_browser.wasm"]);if(!w.ok)throw new Error(`blender_browser.wasm: HTTP ${w.status}`);const{instance:O,module:F}=await WebAssembly.instantiateStreaming(w,t);f(O,F)})().catch(w=>{l=w}),{}),mainScriptUrlOrBlob:e,print:t=>u("log",t),printErr:t=>u("error",t),preRun:[t=>{t.ENV??={},Object.assign(t.ENV,{BLENDER_SYSTEM_RESOURCES:"/bw",BLENDER_SYSTEM_PYTHON:"/bw/python",BLENDER_SYSTEM_SCRIPTS:"/bw/scripts",BLENDER_SYSTEM_DATAFILES:"/bw/datafiles",VOLTER_SESSION_ROOT:p,HOME:"/root",TMPDIR:"/tmp"});for(const f of["/tmp","/root","/work",p,..._,o.project])N(t,f);t.FS_createDataFile(p,"session.py",I.encode(A),!0,!0,!0)}]});for(;c===null;){if(l)throw l instanceof Error?l:new Error(String(l));await k(5)}const g=performance.now()-s,T=JSON.parse(c);let E=null;if(typeof d.releasePreloadedFileData=="function"){const t=d.releasePreloadedFileData();E=t.bytes,o.log("log",`blender: released the preloaded ${(t.bytes/1048576).toFixed(0)} MB payload (${t.files} files); WasmFS already holds it`)}else o.log("error","blender: this bundle has no releasePreloadedFileData, so the ~55 MB packed .data payload stays resident beside the copy WasmFS made of it — relink with the recipe's --post-js (recipe/release-preloaded-file-data.js).");const h=d.FS;let S="";for(const t of`${o.project}`.split("/").filter(Boolean)){S+=`/${t}`;try{h.chmod(S,511)}catch{}}for(const t of["/work","/tmp","/root",p,..._])try{h.chmod(t,511)}catch{}const b=D(d);h.chmod("/bw/datafiles",493),await M(b,r["essentials.bin"]);const{request:R}=B(b,o);return{skew:"emscripten",banner:T,files:b,request:R,readArena:async()=>d.HEAPU8.subarray(d._blender_web_export_buffer(),d._blender_web_export_buffer()+d._blender_web_export_buffer_size()),bootMs:g,memoryBytes:()=>d.HEAPU8.length,releasedPayloadBytes:E}}async function M(o,a){const[e,r]=await Promise.all([fetch(y("essentials.json")),m("essentials.bin",a)]);if(!e.ok||!r.ok)throw new Error(`Blender Essentials assets are missing (${e.status}/${r.status})`);const n=await e.json(),i=await r.arrayBuffer(),l=Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",i)),s=>s.toString(16).padStart(2,"0")).join("");if(i.byteLength!==n.bytes||l!==n.sha256)throw new Error("Blender Essentials payload does not match its source manifest");for(const s of n.files){if(!s.path||s.path.includes("\\")||s.path.split("/").some(u=>!u||u==="."||u==="..")||!Number.isInteger(s.offset)||!Number.isInteger(s.bytes)||s.offset<0||s.bytes<0||s.offset+s.bytes>i.byteLength)throw new Error(`Invalid Blender Essentials file: ${s.path}`);const c=`/bw/datafiles/assets/${s.path}`;await o.mkdirTree(c.slice(0,c.lastIndexOf("/"))),await o.writeFile(c,new Uint8Array(i,s.offset,s.bytes))}}export{C as startEmscriptenBlenderEngine};
@@ -1,4 +0,0 @@
1
- import{r as B,la as xt}from"./index-CvGsVzTo.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 jt,cP as ve,el as Ye,cm as At,cl as Ue,fo as ie,ex as Je,d5 as Qe,d9 as et,cJ as It,e as We,cj as Tt}from"./three.core-3arARmh6.js";import{f as tt}from"./clip-planes-CnAI6DZn.js";import{a as nt}from"./content-bounds-BFpR_e--.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-CJIsrsP6.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=jt,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 Tn(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(!T())return;Ne();const t=[...e].sort().join("\0");he!==t&&Le(t)}async function sn(e){if(!T())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 je=ln,Oe=0;const de=new Set;let ht=0;function Me(){return je}function Nn(){return Oe}function On(e){return de.add(e),()=>{de.delete(e)}}function Y(e){je={...je,...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:It,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:I,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,I,z);else{const F=new et(Tt.radToDeg(2*Math.atan((P-V)/2)),(D-X)/(P-V),I,z);F.projectionMatrix.makePerspective(X*I,D*I,P*I,V*I,I,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 A=null,He=0;function Vn(e){const t=++He;return A=e,q(),()=>{He===t&&(A=null,q())}}function Ae(){const e=S?.document,t=B().documents.activeId(),n=t?.startsWith("document:model:")?t.slice(15):A?.blend;return!n||!e||n===e?null:`Blender is editing ${e}; ${n} is not open. Return to ${e} before editing.`}function L(){return A?.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(A!==e||n.documents.activeId()!==e.documentId)return!1;const a=C(),o=a.start(r,e.blend);return t(),await o,A!==e?!1:(await a.present(),A===e)}function T(){return S?.project!=null&&Ae()===null}let gt=0;const Ie=new Set;function Wn(){return gt}function Gn(e){return Ie.add(e),()=>{Ie.delete(e)}}function q(){gt+=1;for(const e of[...Ie])e()}async function Ze(e,t){return T()?C().rna(e,t):null}async function wn(e,t){return T()?C().rnaContext(e,t):null}async function gn(e,t,n,r,a=!0){if(!T())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 T()?C().outliner(e):null}async function Xn(e){return T()?C().nodeTree(e):null}async function Hn(e){return T()?C().uvLayout(e):null}async function Zn(e){return T()?C().rig(e):null}async function Kn(e){return T()?C().actionClip(e):null}async function mt(e,t,n){if(!T())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 Te=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(),Te?.abort(),Te=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: ${A?.documentId??"none"}). Open the Model document first (\`volter blender-mcp\` opens it before its first call).`)}function C(){const e=Ae();if(e)throw new Error(e);if(S!==null)return S;Mn();const t=new AbortController;Te=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=Ae();if(i)throw new Error(i);if(A===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,I=new At().copy(w).invert(),z=new Ue().setFromMatrix4(w),X=new Ue().setFromMatrix4(I),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(I).toArray(),target:P.clone().applyMatrix4(I).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",j=(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"?j(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===(A?.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:A?.blend??kn;return{ok:!0,data:{...await a.start(n,o)}}}case"blender-execute":return{ok:!0,data:{result:(await mn(j(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(j(e,"name"))}};case"blender-rna":{const o=typeof e.names=="number"?e.names:void 0;return{ok:!0,data:{result:await a.rna(j(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(j(e,"path"),j(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(j(e,"path"),j(e,"column"),e.value!==!1)}};case"blender-screenshot-view":{const o=typeof e.maxSize=="number"?e.maxSize:1e3,s={kind:"document",id:A?.entryId??"blender:runtime"};return{ok:!0,data:{...await a.screenshotView(o),document:s}}}case"blender-read-file":{const o=await a.readFile(j(e,"path")),s=j(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(j(e,"base64")),s=Uint8Array.from(o,i=>i.charCodeAt(0));return await a.writeFile(j(e,"path"),s),{ok:!0,data:{written:s.length}}}case"blender-list-files":{const o=await a.listFiles(j(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,T 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,Tn as v,sn as w,tn as x,_n as y,Re as z};