@volter/game-editor 0.5.81 → 0.5.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/BUNDLED_NOTICES +22 -22
  2. package/catalog/entries/blender.json +2 -2
  3. package/catalog/entries/music.json +2 -2
  4. package/dist/.vite/manifest.json +2138 -2137
  5. package/dist/assets/{AssetBudgetPanel-CfVYW4ED.js → AssetBudgetPanel-Iip49rxI.js} +3 -3
  6. package/dist/assets/{AudioViewer-J10BXrtm.js → AudioViewer-DmkOvskF.js} +1 -1
  7. package/dist/assets/{CanvasBoardDocument-BgIbuOQF.js → CanvasBoardDocument-DCS8uzQo.js} +1 -1
  8. package/dist/assets/CanvasSceneViewport-CfOuQiQ0.js +1 -0
  9. package/dist/assets/{ColorInput-fX1V5l8_.js → ColorInput-7CPpl8MI.js} +1 -1
  10. package/dist/assets/EntityModelDocument-CplmAib0.js +1 -0
  11. package/dist/assets/{EnvironmentAssetDocument-QuLkCom9.js → EnvironmentAssetDocument-DlS6KFJu.js} +1 -1
  12. package/dist/assets/{GameplaySessionTimeline-D0z5Mc0R.js → GameplaySessionTimeline-C3zH6edi.js} +1 -1
  13. package/dist/assets/{ImageViewer-DWUPPWRf.js → ImageViewer-C0lQ6YO0.js} +1 -1
  14. package/dist/assets/InspectorObjectPreview-Bjc1Tn-I.js +1 -0
  15. package/dist/assets/{JsonAssetDocument-C0Lr6RwY.js → JsonAssetDocument-DjmH9CQH.js} +1 -1
  16. package/dist/assets/{LiveModuleDocument-CaGmr0EA.js → LiveModuleDocument-Hiot8Q5L.js} +1 -1
  17. package/dist/assets/{LutAssetDocument-B6GmsOYd.js → LutAssetDocument-6bBwNMOn.js} +1 -1
  18. package/dist/assets/{ModelAssetDocument-BBDnXTQm.js → ModelAssetDocument-G6ajiV51.js} +1 -1
  19. package/dist/assets/{NonThreeAuthoringBootstrap-byKqf1kp.js → NonThreeAuthoringBootstrap-DpieYAMC.js} +1 -1
  20. package/dist/assets/Object3DDocumentToolbar-BtZkDxKa.js +1 -0
  21. package/dist/assets/Object3DDocumentViewport-BhH8afDi.js +2 -0
  22. package/dist/assets/{Object3DPreview-pn9i3vwZ.js → Object3DPreview-DdrYVJUZ.js} +1 -1
  23. package/dist/assets/{OnlineAssetDetail-PDCDAcqz.js → OnlineAssetDetail-D06eTe3y.js} +1 -1
  24. package/dist/assets/{PlayBar-DEnkv3v6.js → PlayBar-BbzjgLFJ.js} +1 -1
  25. package/dist/assets/{QuarksAssetDocument-2x66XymD.js → QuarksAssetDocument-wGHNt4ov.js} +1 -1
  26. package/dist/assets/{ReactCanvasControls-rFwp2CeP.js → ReactCanvasControls-BL2tOUj6.js} +1 -1
  27. package/dist/assets/{RootSelectionOverlay-B9rf-SSV.js → RootSelectionOverlay-C6Wu8nIs.js} +1 -1
  28. package/dist/assets/{ShaderAssetDocument-ImI6jbzB.js → ShaderAssetDocument-BDi8iNLA.js} +4 -4
  29. package/dist/assets/{ShadowEditor-DXxVxTzk.js → ShadowEditor-C3L0UWSH.js} +1 -1
  30. package/dist/assets/{SourceAssetViewer-CMbp_o7v.js → SourceAssetViewer-D832bARo.js} +1 -1
  31. package/dist/assets/StageHost-Bor1eHEO.js +2 -0
  32. package/dist/assets/{StoryPreviewMount-D2zLWzWy.js → StoryPreviewMount-CmOEFzZY.js} +1 -1
  33. package/dist/assets/{ThreeBoardDocument-nX3UiY3u.js → ThreeBoardDocument-BtBMGtiQ.js} +2 -2
  34. package/dist/assets/{ThreeIsolationSceneContent-CGHM0vsg.js → ThreeIsolationSceneContent-BEHNSEsi.js} +1 -1
  35. package/dist/assets/{ToolObject3DPreview-BfNcqtFv.js → ToolObject3DPreview-76LMkfin.js} +1 -1
  36. package/dist/assets/{Toolbar-BJRJsbHG.js → Toolbar-BEBQdxRz.js} +1 -1
  37. package/dist/assets/{TransientHint-CDvYgnzu.js → TransientHint-CzsdY8W6.js} +1 -1
  38. package/dist/assets/{VideoViewer-B6Dv2zeQ.js → VideoViewer-Ckrawyuq.js} +1 -1
  39. package/dist/assets/{ViewportShadingMenu-CrTY7tnk.js → ViewportShadingMenu-BofQt6_4.js} +1 -1
  40. package/dist/assets/{active-ingest-lrfMBhf9.js → active-ingest-D_ryI_R4.js} +2 -2
  41. package/dist/assets/{animation-clock-DktVGV5-.js → animation-clock-QjtJDIsR.js} +1 -1
  42. package/dist/assets/{animation-mixers.service-fkojNtor.js → animation-mixers.service-BInUs1US.js} +1 -1
  43. package/dist/assets/{animation-timeline.utility-DDrUZKe8.js → animation-timeline.utility-DUrfNSwn.js} +1 -1
  44. package/dist/assets/{asset-budget-asset.menu-CDlgKSO9.js → asset-budget-asset.menu-DVQEksFp.js} +1 -1
  45. package/dist/assets/{asset-budget.action-D6n-wIR3.js → asset-budget.action-C-ENAa52.js} +1 -1
  46. package/dist/assets/{asset-budget.document-DFByoagB.js → asset-budget.document-Bb1PyL3H.js} +1 -1
  47. package/dist/assets/{asset-budget.menu-B2u_1dWR.js → asset-budget.menu-CPi2yjBA.js} +1 -1
  48. package/dist/assets/{asset-editor-persistence-e6bYhVnm.js → asset-editor-persistence-Duoq7o22.js} +1 -1
  49. package/dist/assets/{asset-loaders-Bsq-3hNt.js → asset-loaders-BftJ2m7-.js} +1 -1
  50. package/dist/assets/{asset-preview-B7j9QV6N.js → asset-preview-BS71mXsZ.js} +1 -1
  51. package/dist/assets/{audio-unlock.service-7oO4YVIj.js → audio-unlock.service-C3ygvDjU.js} +1 -1
  52. package/dist/assets/{audio.utility-9fcsT3YY.js → audio.utility-DF55sgHW.js} +1 -1
  53. package/dist/assets/autoplay.service-DaonKf7O.js +1 -0
  54. package/dist/assets/{babylon-authoring-adapter-BJfYxqDM.js → babylon-authoring-adapter-CmeehOBt.js} +1 -1
  55. package/dist/assets/{binding-resolver-CBXePHiR.js → binding-resolver-DUz8C8Fs.js} +2 -2
  56. package/dist/assets/{blender-node-editor.document-xA7eGv3-.js → blender-node-editor.document-B8S2TVMM.js} +1 -1
  57. package/dist/assets/{blender-properties-tab-nY8UOQUL.js → blender-properties-tab-y-_BeZDx.js} +1 -1
  58. package/dist/assets/blender-runtime-host-CUH6peXj.js +4 -0
  59. package/dist/assets/{blender-runtime-skin-D3Arti9-.js → blender-runtime-skin-B1tYITn2.js} +36 -36
  60. package/dist/assets/blender-runtime.document-DnSl0twI.js +12 -0
  61. package/dist/assets/{blender-timeline.document-DXoQ7y8E.js → blender-timeline.document-CeCylyXB.js} +1 -1
  62. package/dist/assets/{blender-uv-editor.document-CMOyob1N.js → blender-uv-editor.document-DEllMw3a.js} +1 -1
  63. package/dist/assets/{blender-version.status-16xnuezC.js → blender-version.status-CrT9NqK-.js} +1 -1
  64. package/dist/assets/{blender.command-Br2EUk6Q.js → blender.command-GIjMG1-m.js} +1 -1
  65. package/dist/assets/{board-guides-whelE-Dr.js → board-guides-B6TEPOPi.js} +1 -1
  66. package/dist/assets/{bridge.command-T93eURWq.js → bridge.command-D6qTcgje.js} +3 -3
  67. package/dist/assets/{browserAll-BfZu7-UJ.js → browserAll-k35XRFil.js} +1 -1
  68. package/dist/assets/build-player.document-CHxj4P8q.js +1 -0
  69. package/dist/assets/{build-profiles.document-DNncGOL3.js → build-profiles.document-CZCk1HYA.js} +2 -2
  70. package/dist/assets/{build-progress.status-DnJetNft.js → build-progress.status-BNwBxP2a.js} +1 -1
  71. package/dist/assets/{build-session-BaEmzCkm.js → build-session-CW2UyYFF.js} +1 -1
  72. package/dist/assets/{build.action-exbllMgM.js → build.action-EmCcMu47.js} +1 -1
  73. package/dist/assets/{build.command-Imykh8LN.js → build.command-CzEckGcR.js} +1 -1
  74. package/dist/assets/{build.header-9RzLy3UQ.js → build.header-CsYLpZbh.js} +1 -1
  75. package/dist/assets/{build.menu-CRhA3yID.js → build.menu-CaDkDQuy.js} +1 -1
  76. package/dist/assets/{build.service-CxIdSEPw.js → build.service-BcKtbU0-.js} +1 -1
  77. package/dist/assets/{camera-BiBGeQQ4.js → camera-BwWZUyKt.js} +1 -1
  78. package/dist/assets/{camera-runtime.inspector-DmRFynxC.js → camera-runtime.inspector-CJyi3zmp.js} +1 -1
  79. package/dist/assets/{canvas-design-mount-DJ6zQJKG.js → canvas-design-mount-B_uwZkEU.js} +6 -6
  80. package/dist/assets/{canvas-entry-runtime-Cjga4XYp.js → canvas-entry-runtime-DskaohHK.js} +2 -2
  81. package/dist/assets/{canvas-preview-frames-EoYgD6W4.js → canvas-preview-frames-BzLeTumX.js} +1 -1
  82. package/dist/assets/{canvas-story-capture.service-D5UntNCd.js → canvas-story-capture.service-C80CsS8r.js} +2 -2
  83. package/dist/assets/{capability-coverage-9qm5WVwt.js → capability-coverage-wd6bAhv3.js} +2 -2
  84. package/dist/assets/{collaboration-presence-Q6zcL5v0.js → collaboration-presence-DcPhahtF.js} +1 -1
  85. package/dist/assets/{collider-CTHtUvnl.js → collider-Dw2iWV3F.js} +1 -1
  86. package/dist/assets/{component-board.service-Bf-ETQF0.js → component-board.service-CH99sgj0.js} +2 -2
  87. package/dist/assets/component-board.service-Cd1c9oSN.js +2 -0
  88. package/dist/assets/{component-board.service-foqmr9Ii.js → component-board.service-XAxyLCnM.js} +2 -2
  89. package/dist/assets/{component-contracts.service-Do9hADdW.js → component-contracts.service-DerT0BP-.js} +1 -1
  90. package/dist/assets/{component-instance-root-MBgAuUpp.js → component-instance-root-Cw_-ajBX.js} +1 -1
  91. package/dist/assets/{component-verbs.command-DtMdPuyO.js → component-verbs.command-BHK9M2Rk.js} +1 -1
  92. package/dist/assets/component-verbs.service-DsxhVcvk.js +1 -0
  93. package/dist/assets/{config-B6tt9xy3.js → config-1rCvm02z.js} +3 -3
  94. package/dist/assets/configurations-CRTYw0r9.js +1 -0
  95. package/dist/assets/{connection.status-BNPvWdJD.js → connection.status-D4fjnH24.js} +1 -1
  96. package/dist/assets/{constraints.inspector-DoOn25Lk.js → constraints.inspector-BgnafOLf.js} +1 -1
  97. package/dist/assets/{content-bounds-BFpR_e--.js → content-bounds-D5pXeHJN.js} +1 -1
  98. package/dist/assets/{contract-system-adapters-BRHtWOi_.js → contract-system-adapters-rVGdworX.js} +1 -1
  99. package/dist/assets/{coverage.service-BB1XhwsL.js → coverage.service-BNme5Agb.js} +1 -1
  100. package/dist/assets/{create-runtime-B6u6x5eK.js → create-runtime-CcuQTSfy.js} +2 -2
  101. package/dist/assets/{curve-D11mIGoN.js → curve-DorFv33R.js} +1 -1
  102. package/dist/assets/{data-asset-DejEwzXj.js → data-asset-CAE35Emh.js} +1 -1
  103. package/dist/assets/{data-ref-DJNVzksb.js → data-ref-DXqRnZsJ.js} +1 -1
  104. package/dist/assets/{debug-bridge-DlGIEyTc.js → debug-bridge-DdCJSEni.js} +1 -1
  105. package/dist/assets/{debug-registry-Dagj3b6J.js → debug-registry-xQJcVubm.js} +1 -1
  106. package/dist/assets/deferred-ingest-play-CEnsC3uN.js +2 -0
  107. package/dist/assets/{design-time-canvas-mount-Cpb_jITI.js → design-time-canvas-mount-CPRrCPFA.js} +2 -2
  108. package/dist/assets/design-time-layers-hmGqBp06.js +1 -0
  109. package/dist/assets/{design-time-mount.service-Ck5Hjxtn.js → design-time-mount.service-CEmJjRIJ.js} +2 -2
  110. package/dist/assets/{design-time-mount.service-DEa-41ij.js → design-time-mount.service-CLL-1Za4.js} +2 -2
  111. package/dist/assets/{design-time-react-mount-DCTpYS51.js → design-time-react-mount-DmXi3GBy.js} +1 -1
  112. package/dist/assets/{document-preview-three-TjlxMDBR.js → document-preview-three-B4j_zNef.js} +1 -1
  113. package/dist/assets/{dom-authoring-adapter-C3ZsI41l.js → dom-authoring-adapter-BklRbjZB.js} +1 -1
  114. package/dist/assets/{draco3d-Ddr7J1sS.js → draco3d-CFWI1XDT.js} +1 -1
  115. package/dist/assets/{edit-mode-audio.service-D047aZ6I.js → edit-mode-audio.service-SUzv0nHs.js} +1 -1
  116. package/dist/assets/{edit-mode-authoring-DubxVdEM.js → edit-mode-authoring-CSt3zzmS.js} +1 -1
  117. package/dist/assets/{edit-mode-networking.service-DitjC2ZL.js → edit-mode-networking.service-D6UohrCr.js} +1 -1
  118. package/dist/assets/editor-api-WeHVNlEo.js +1 -0
  119. package/dist/assets/{editor-layers-BK3fNRb7.js → editor-layers-CjeYrUlm.js} +1 -1
  120. package/dist/assets/{editor-shell-store-Bro0arjr.js → editor-shell-store-DckLm6m8.js} +1 -1
  121. package/dist/assets/{entity-object-BFppZ54X.js → entity-object-V13bGmay.js} +1 -1
  122. package/dist/assets/{extend-MkXq6t1H.js → extend-BQeRA-aV.js} +1 -1
  123. package/dist/assets/{fork-menu-DzoCyQvA.js → fork-menu-Bthg9viY.js} +1 -1
  124. package/dist/assets/{frame-debugger-store-xbOH83D0.js → frame-debugger-store-DDxWlDPK.js} +1 -1
  125. package/dist/assets/{game-contract-seams-5IUqvr7b.js → game-contract-seams-DrYyE5PX.js} +1 -1
  126. package/dist/assets/{game-css-scope-transform-DDAoTvZQ.js → game-css-scope-transform-D5hQWaci.js} +1 -1
  127. package/dist/assets/game-document.service-cJ1yKc2V.js +1 -0
  128. package/dist/assets/{game-eval.command-DcFoKUe7.js → game-eval.command-CKo-W17_.js} +1 -1
  129. package/dist/assets/{game-module-access-ABBzTWg7.js → game-module-access-DuptGLGx.js} +1 -1
  130. package/dist/assets/game-network-CAH_Jsh6.js +22 -0
  131. package/dist/assets/gameplay-export-B-JE4uSD.js +1 -0
  132. package/dist/assets/gameplay-replay-WyopKGyB.js +1 -0
  133. package/dist/assets/{gameplay.command-qdQLKC3A.js → gameplay.command-D4cY3nOq.js} +1 -1
  134. package/dist/assets/generation-jobs-CcCrhKLM.js +1 -0
  135. package/dist/assets/{generation.service-CdwRWoIV.js → generation.service-CQwmLAOQ.js} +1 -1
  136. package/dist/assets/{generations-nW4LG5qG.js → generations-qfhCRH8C.js} +1 -1
  137. package/dist/assets/{generations.status-DgjVrgGL.js → generations.status-CcbR2OfF.js} +1 -1
  138. package/dist/assets/{hierarchy-marks-Pb6wnNcu.js → hierarchy-marks-B1jSqxSv.js} +1 -1
  139. package/dist/assets/{hosted-asset-materialization-BCnTLunr.js → hosted-asset-materialization-BZf-8JA1.js} +1 -1
  140. package/dist/assets/{index-Bz4YDJ7o.js → index-CHa43s2p.js} +1 -1
  141. package/dist/assets/{index-BYoN6-Qw.js → index-Cj_b0Ygc.js} +1 -1
  142. package/dist/assets/{index-Db2ixdvK.js → index-D-RMHSzb.js} +1 -1
  143. package/dist/assets/{index-D7q1gYjq.js → index-DXtfej3G.js} +1 -1
  144. package/dist/assets/{index-BlWeDGvp.js → index-D_ViOFCz.js} +2 -2
  145. package/dist/assets/{index-Ds9fZyOU.js → index-DrEVdQvN.js} +1 -1
  146. package/dist/assets/{index-CvGsVzTo.js → index-V4J7xfRg.js} +7 -7
  147. package/dist/assets/{index-CaZZDx3x.js → index-aREcGExk.js} +1 -1
  148. package/dist/assets/index-yXSK_qPW.js +1 -0
  149. package/dist/assets/{inference-diagnostics-BCwXk-CS.js → inference-diagnostics-DoZQ1mpg.js} +1 -1
  150. package/dist/assets/{ingest-boot-viewport-BPER30gQ.js → ingest-boot-viewport-DWdOtGGE.js} +1 -1
  151. package/dist/assets/ingest-siblings-DyvasVDH.js +1 -0
  152. package/dist/assets/{ingest-source-persistence-CPlDA2D8.js → ingest-source-persistence-CQOJeGhj.js} +1 -1
  153. package/dist/assets/{ingest.service-BhwFGlqY.js → ingest.service-CqIcydem.js} +1 -1
  154. package/dist/assets/{inspect-DxfAFkho.js → inspect-DiSjB-N1.js} +1 -1
  155. package/dist/assets/instances.command-COw2QpbN.js +1 -0
  156. package/dist/assets/{json-history-resource-CckDydoO.js → json-history-resource-CH2nzMZh.js} +1 -1
  157. package/dist/assets/{layered-pick-BaxBYi7u.js → layered-pick-BUr1U8lU.js} +1 -1
  158. package/dist/assets/{light-DF4nTzTq.js → light-CxiGIJma.js} +1 -1
  159. package/dist/assets/live-project-verbs-CnknlUlT.js +1 -0
  160. package/dist/assets/{machine.document-DaPLAXaa.js → machine.document-D7jMrzXt.js} +1 -1
  161. package/dist/assets/{machines.finder-C9s8SFtp.js → machines.finder-Dor3O0uf.js} +1 -1
  162. package/dist/assets/{material-rGFsBrD0.js → material-B6cH1Oqw.js} +1 -1
  163. package/dist/assets/{material-factory-CCcnlv8E.js → material-factory-BN3Lax5C.js} +1 -1
  164. package/dist/assets/{mesh-CVBvSsCX.js → mesh-Cj-CYroI.js} +1 -1
  165. package/dist/assets/{model-asset-sections.service-vVRv6iOD.js → model-asset-sections.service-mC4WJFTA.js} +1 -1
  166. package/dist/assets/{model-inspection-Dd-hn5v2.js → model-inspection-8o57YSZW.js} +1 -1
  167. package/dist/assets/{model-thumbnail-BDU_QU37.js → model-thumbnail-chePRlH7.js} +1 -1
  168. package/dist/assets/{models.finder-CQMZz5xX.js → models.finder-CKkT5ZdU.js} +1 -1
  169. package/dist/assets/{module-mode-DcBz3aI7.js → module-mode-BMiMhHI3.js} +2 -2
  170. package/dist/assets/{mount-canvas-ingest-root-DMWeT_c3.js → mount-canvas-ingest-root-B1swVIUJ.js} +2 -2
  171. package/dist/assets/{mount-dom-ingest-root-Bx1TmleJ.js → mount-dom-ingest-root-B8hO5mht.js} +2 -2
  172. package/dist/assets/{mount-ingest-root-BDP8atUq.js → mount-ingest-root-Cbnh-mSw.js} +2 -2
  173. package/dist/assets/{mount-manifest-C5QVCZlS.js → mount-manifest-B7oL1Abg.js} +1 -1
  174. package/dist/assets/{mount-three-ingest-root-DSmhgOJn.js → mount-three-ingest-root-BdUJx6ix.js} +1 -1
  175. package/dist/assets/{mounted-authoring-D-tXkNKH.js → mounted-authoring-C47L5H5t.js} +1 -1
  176. package/dist/assets/{mounted-story-viewport-source-Snu9yn1n.js → mounted-story-viewport-source-CyEK_vaq.js} +1 -1
  177. package/dist/assets/{native-debug-module-XfhvyMrK.js → native-debug-module-JJOFtIVz.js} +1 -1
  178. package/dist/assets/{navigation-CTTcWe0R.js → navigation-ROJM2w84.js} +1 -1
  179. package/dist/assets/{navmesh.menu-mFjQ30B0.js → navmesh.menu-DjefqtkI.js} +1 -1
  180. package/dist/assets/{navmesh.service-BJPp7ZXu.js → navmesh.service-BPqjEQiq.js} +1 -1
  181. package/dist/assets/network-observer.service-GFzXuBMb.js +1 -0
  182. package/dist/assets/{network.utility-C-_7MTIV.js → network.utility-6Y5u53n8.js} +1 -1
  183. package/dist/assets/object3d-document-session-registry-DNCOGA3i.js +2 -0
  184. package/dist/assets/{oid-transform-Bgdv7kST.js → oid-transform-DQzN_Gl_.js} +1 -1
  185. package/dist/assets/{particles-CHXYb9Jd.js → particles-DGdUmqOr.js} +1 -1
  186. package/dist/assets/{pixi-authoring-adapter-lj5CidSR.js → pixi-authoring-adapter-BRktdcIz.js} +1 -1
  187. package/dist/assets/{pixi-live-write-target-BEL9GCCr.js → pixi-live-write-target-Dg0mdLaa.js} +1 -1
  188. package/dist/assets/play.command-4IDAqR5W.js +2 -0
  189. package/dist/assets/{presentation-CmK-bEDi.js → presentation-8m-RDKIS.js} +1 -1
  190. package/dist/assets/{product-gjrRHe-K.js → product-t6tauO7R.js} +1 -1
  191. package/dist/assets/{profiler.action-CZ6UQi9A.js → profiler.action-CXA4IkQB.js} +1 -1
  192. package/dist/assets/{profiler.menu-DxbnC3d6.js → profiler.menu-BgIBv4-I.js} +1 -1
  193. package/dist/assets/{profiler.utility-BvARl7sM.js → profiler.utility-BYoRbfIK.js} +1 -1
  194. package/dist/assets/{project-authoring-session-CBKXzBlD.js → project-authoring-session-DkekCxNv.js} +2 -2
  195. package/dist/assets/{properties-bone-constraints.inspector-Co8UpbhC.js → properties-bone-constraints.inspector-DXpiCtf9.js} +1 -1
  196. package/dist/assets/{properties-bone.inspector-CFXh2lQH.js → properties-bone.inspector-wIDsP4c5.js} +1 -1
  197. package/dist/assets/{properties-collection.inspector-Jq9X8fEq.js → properties-collection.inspector-5SRPbqfM.js} +1 -1
  198. package/dist/assets/{properties-constraints.inspector-CMcKD_Jc.js → properties-constraints.inspector-DIjKz692.js} +1 -1
  199. package/dist/assets/{properties-data.inspector-cP3izSat.js → properties-data.inspector-DE6i8biZ.js} +1 -1
  200. package/dist/assets/{properties-material.inspector-CrZIovv9.js → properties-material.inspector-Cu1UCPY4.js} +1 -1
  201. package/dist/assets/{properties-modifiers.inspector-DqQMxoiL.js → properties-modifiers.inspector-DsQzA638.js} +1 -1
  202. package/dist/assets/{properties-object.inspector-DM63eANJ.js → properties-object.inspector-C57X0GJq.js} +1 -1
  203. package/dist/assets/{properties-output.inspector-B475IBEd.js → properties-output.inspector-DzrcFuRM.js} +1 -1
  204. package/dist/assets/{properties-particles.inspector-vGXQ4kWx.js → properties-particles.inspector-DGqSnelN.js} +1 -1
  205. package/dist/assets/{properties-physics.inspector-CfwqpVGS.js → properties-physics.inspector-DIjhtiLe.js} +1 -1
  206. package/dist/assets/{properties-render.inspector-BYLknsM7.js → properties-render.inspector-CX0orwn9.js} +1 -1
  207. package/dist/assets/{properties-scene.inspector-BcIZBfGk.js → properties-scene.inspector-DaHNL_sq.js} +1 -1
  208. package/dist/assets/{properties-texture.inspector-p3Owurhl.js → properties-texture.inspector-B5hmxPRy.js} +1 -1
  209. package/dist/assets/{properties-view-layer.inspector-CN-5jzB9.js → properties-view-layer.inspector-C7hdJgei.js} +1 -1
  210. package/dist/assets/{properties-world.inspector-DVp8fYWx.js → properties-world.inspector-EWTC6jNw.js} +1 -1
  211. package/dist/assets/r3f-design-session-CXlGV9hp.js +2 -0
  212. package/dist/assets/{r3f-physics-binding-BcTFD1ZS.js → r3f-physics-binding-DZSIB0d_.js} +1 -1
  213. package/dist/assets/{r3f-source-authoring-adapter-DVnhzoxp.js → r3f-source-authoring-adapter-GR97EmII.js} +1 -1
  214. package/dist/assets/{react-canvas-navigation-CBorZtWB.js → react-canvas-navigation-L_mOnybL.js} +1 -1
  215. package/dist/assets/{react-inspector.service-Dc99kogU.js → react-inspector.service-B4P3UnSY.js} +1 -1
  216. package/dist/assets/{react-story-board-6-BjI32N.js → react-story-board-CT1_3sk_.js} +1 -1
  217. package/dist/assets/{react-three-rapier.esm-BO2XPUEM.js → react-three-rapier.esm-DyMNYoA_.js} +1 -1
  218. package/dist/assets/{react-world-authoring-adapter-B6BiehHR.js → react-world-authoring-adapter-OR1SW2jI.js} +1 -1
  219. package/dist/assets/{realm-services-DCnaxwIb.js → realm-services-u0mnjXU9.js} +1 -1
  220. package/dist/assets/{reflection-probe-capture.inspector-CWneVfEe.js → reflection-probe-capture.inspector-CTNlSaGW.js} +1 -1
  221. package/dist/assets/{registry-BQ9YcFZF.js → registry-wqakYaDW.js} +1 -1
  222. package/dist/assets/{relative-import-specifier-BvzqkvYS.js → relative-import-specifier-DXWVQf0o.js} +1 -1
  223. package/dist/assets/{render-env-F320_iHT.js → render-env-CN09NtDf.js} +1 -1
  224. package/dist/assets/{render-features-DFwHsGxu.js → render-features-HCEupUJ6.js} +1 -1
  225. package/dist/assets/{render-settings-BPcHd4LA.js → render-settings-Clt6d05o.js} +1 -1
  226. package/dist/assets/{resolve-three-CnxafYrg.js → resolve-three-CLzKVMx2.js} +13 -13
  227. package/dist/assets/{root-seam-contract-CueaHgB9.js → root-seam-contract-D2uQHWF9.js} +1 -1
  228. package/dist/assets/{run-selection-BMQWV9Fn.js → run-selection-AyelFc9T.js} +1 -1
  229. package/dist/assets/{scene-capture-DcMYbX9_.js → scene-capture-WbPcLfJl.js} +1 -1
  230. package/dist/assets/{scene-document.service-CZpLI3b6.js → scene-document.service-4U6rDhCp.js} +2 -2
  231. package/dist/assets/{scene-framing-nVyYC4Y-.js → scene-framing-DzSL2Cld.js} +1 -1
  232. package/dist/assets/{seeded-random-D0QPgfm6.js → seeded-random-tpdJjdqy.js} +1 -1
  233. package/dist/assets/{setup-renderer-ji8Qt-PP.js → setup-renderer-B5vZmCyu.js} +1 -1
  234. package/dist/assets/{source-object3d-authoring-adapter-owosRx07.js → source-object3d-authoring-adapter-BQnQ3Qzg.js} +1 -1
  235. package/dist/assets/{source-persistence-backend-Djuk0m-7.js → source-persistence-backend-uyd6NiWD.js} +1 -1
  236. package/dist/assets/stage-keyboard-B2yrk2zu.js +1 -0
  237. package/dist/assets/stage-overlay-set-Cqtz3s06.js +1 -0
  238. package/dist/assets/{stage-presence-markers-CQlXR9fX.js → stage-presence-markers-BgLs0Aj5.js} +1 -1
  239. package/dist/assets/stage-transform-tools-BHcz53td.js +1 -0
  240. package/dist/assets/{standard-viewport-dressing-e4mnLmI6.js → standard-viewport-dressing-uhv_3JvQ.js} +2 -2
  241. package/dist/assets/{state-watch.action-Cv3W67Kr.js → state-watch.action-BJ08HgcO.js} +1 -1
  242. package/dist/assets/{state-watch.menu-Cuziz9RM.js → state-watch.menu-rAULwijr.js} +1 -1
  243. package/dist/assets/{state-watch.utility-B1zkFd_6.js → state-watch.utility-eEbQcj8t.js} +1 -1
  244. package/dist/assets/{story-capture-Drqhmo7i.js → story-capture-B8wfSf5s.js} +1 -1
  245. package/dist/assets/{story-documents-Cjoy-ydN.js → story-documents-Cm4jCkW5.js} +2 -2
  246. package/dist/assets/{story-documents.service-gVxcUtso.js → story-documents.service-BDvQCslK.js} +1 -1
  247. package/dist/assets/{story-documents.service-Csto-LsX.js → story-documents.service-Cgtg6rXn.js} +1 -1
  248. package/dist/assets/story-media-presence-SGlp_afL.js +1 -0
  249. package/dist/assets/{story-pixi-preview-uA6AevDw.js → story-pixi-preview-D62Q_vIW.js} +1 -1
  250. package/dist/assets/{story-presentation-DgAoj9Qt.js → story-presentation-CofUdEU7.js} +1 -1
  251. package/dist/assets/{story-three-preview-CQYi1rZ_.js → story-three-preview-B9O1wapP.js} +2 -2
  252. package/dist/assets/{studio-environment-DK0ke0m0.js → studio-environment-BIhqrtFc.js} +1 -1
  253. package/dist/assets/{surface-state-DlUcJe84.js → surface-state-DrM3wsrr.js} +1 -1
  254. package/dist/assets/{syntactic-prop-specs-92aOVqyZ.js → syntactic-prop-specs-BGz0N7Dg.js} +1 -1
  255. package/dist/assets/{team-playtest.service-CGBismiY.js → team-playtest.service-CiE8UJAe.js} +1 -1
  256. package/dist/assets/{three-bdxPiUPb.js → three-BQfhEwUz.js} +1 -1
  257. package/dist/assets/{three-authoring-adapter-BuqO9MDt.js → three-authoring-adapter-COBwREQO.js} +1 -1
  258. package/dist/assets/three-authoring.service-C0azvoq8.js +2 -0
  259. package/dist/assets/{three-ingest-runtime-CwRnwvb0.js → three-ingest-runtime-BnRF_nJN.js} +1 -1
  260. package/dist/assets/three-integration-DeWYFf1x.js +2 -0
  261. package/dist/assets/three-integration.service-CoWCBTmg.js +1 -0
  262. package/dist/assets/{three-projection-core-BO23VKAP.js → three-projection-core-PQm-CO61.js} +1 -1
  263. package/dist/assets/{three-state-BhQOBgKC.js → three-state-C7khRIQE.js} +1 -1
  264. package/dist/assets/{three-story-capture.service-BAtrzxHq.js → three-story-capture.service-B0oiGIfp.js} +2 -2
  265. package/dist/assets/three-story-model-D7g2pqfJ.js +1 -0
  266. package/dist/assets/{three-viewport-presentation-CWanX03c.js → three-viewport-presentation-B_tBudM-.js} +5 -5
  267. package/dist/assets/transform-mode-request-DWM6BdRA.js +1 -0
  268. package/dist/assets/{transport-strip-CFLRAIQd.js → transport-strip-vgXGDgkI.js} +1 -1
  269. package/dist/assets/transport.header-CfVHXjrT.js +1 -0
  270. package/dist/assets/{tuples-BKzzn3tK.js → tuples-BnYrlQqS.js} +1 -1
  271. package/dist/assets/ui-board-document-B_-K9luq.js +2 -0
  272. package/dist/assets/{user-data-DfBtZvxw.js → user-data-CifDDvSr.js} +1 -1
  273. package/dist/assets/{utility-view-state-CL4NJh3n.js → utility-view-state-BPl8Asup.js} +1 -1
  274. package/dist/assets/{viewport-door-CuJjGYTz.js → viewport-door-BCXEYmon.js} +1 -1
  275. package/dist/assets/{viewport-root-presentation-CkSAEMH-.js → viewport-root-presentation-DJLpUuf0.js} +1 -1
  276. package/dist/assets/{viewport-surface-status-D3t-0oLs.js → viewport-surface-status-jwLhIK_M.js} +1 -1
  277. package/dist/assets/{webworkerAll-DCmB9rsA.js → webworkerAll-P6jePa6X.js} +1 -1
  278. package/dist/assets/{workspace-arrangement-C9uemwSK.js → workspace-arrangement-B_OcbQbj.js} +1 -1
  279. package/dist/assets/{world-documents-Dvn8e5I0.js → world-documents-Bx3j867R.js} +1 -1
  280. package/dist/assets/{world-root-stage-binding-BB7acZV_.js → world-root-stage-binding-LEhjWDkn.js} +1 -1
  281. package/dist/assets/{xstate-animation-binding-DctwT981.js → xstate-animation-binding-Dionc_fC.js} +1 -1
  282. package/dist/assets/{xstate-animation-meta-s4Vc8Wu3.js → xstate-animation-meta-XEmD_qc_.js} +1 -1
  283. package/dist-node/cli.js +16 -16
  284. package/package.json +16 -16
  285. package/dist/assets/CanvasSceneViewport-Z8OReqpB.js +0 -1
  286. package/dist/assets/EntityModelDocument-BltE1A7W.js +0 -1
  287. package/dist/assets/InspectorObjectPreview-BpttBw3o.js +0 -1
  288. package/dist/assets/Object3DDocumentToolbar-BHuuMZnS.js +0 -1
  289. package/dist/assets/Object3DDocumentViewport-ByDDwGJD.js +0 -2
  290. package/dist/assets/StageHost-D1Sz5aud.js +0 -2
  291. package/dist/assets/autoplay.service-DncOrn-K.js +0 -1
  292. package/dist/assets/blender-runtime-host-CcqXT39s.js +0 -4
  293. package/dist/assets/blender-runtime.document-DDW5jIJe.js +0 -12
  294. package/dist/assets/build-player.document-DJQLP4xM.js +0 -1
  295. package/dist/assets/component-board.service-yIS2UB-T.js +0 -2
  296. package/dist/assets/component-verbs.service-CJYq28Zw.js +0 -1
  297. package/dist/assets/configurations-BcYOQ7i-.js +0 -1
  298. package/dist/assets/deferred-ingest-play-DZiOEH9a.js +0 -2
  299. package/dist/assets/design-time-layers-DT4X-pJp.js +0 -1
  300. package/dist/assets/editor-api-CPh65aBN.js +0 -1
  301. package/dist/assets/game-document.service-CxfiFnxt.js +0 -1
  302. package/dist/assets/game-network-BPTyOFqA.js +0 -22
  303. package/dist/assets/gameplay-export-CRnHCUBb.js +0 -1
  304. package/dist/assets/gameplay-replay-yPaMxi2o.js +0 -1
  305. package/dist/assets/generation-jobs-Cy1oE-Ff.js +0 -1
  306. package/dist/assets/index-BPuw4yre.js +0 -1
  307. package/dist/assets/ingest-siblings-2QHhcCgA.js +0 -1
  308. package/dist/assets/instances.command-BJ-I9vtW.js +0 -1
  309. package/dist/assets/live-project-verbs-B7S-wGjC.js +0 -1
  310. package/dist/assets/network-observer.service-CjeDB1Id.js +0 -1
  311. package/dist/assets/object3d-document-session-registry-CWaOPDYg.js +0 -2
  312. package/dist/assets/play.command-C9QyYFgv.js +0 -2
  313. package/dist/assets/r3f-design-session-Cyy1sDGH.js +0 -2
  314. package/dist/assets/stage-keyboard-G6HMStmP.js +0 -1
  315. package/dist/assets/stage-overlay-set-ChHqsFiR.js +0 -1
  316. package/dist/assets/stage-transform-tools-BM9u9Awe.js +0 -1
  317. package/dist/assets/story-media-presence-CYc2fP4y.js +0 -1
  318. package/dist/assets/three-authoring.service-CMym8IbB.js +0 -2
  319. package/dist/assets/three-integration-BHoulbny.js +0 -2
  320. package/dist/assets/three-integration.service-BlgF9hV3.js +0 -1
  321. package/dist/assets/three-story-model-D_bo7Gl-.js +0 -1
  322. package/dist/assets/transform-mode-request-Bg6T_rOC.js +0 -1
  323. package/dist/assets/transport.header-B3dK1KaC.js +0 -1
  324. package/dist/assets/ui-board-document-DMxgQ-9n.js +0 -2
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/spark.module-Byplgb8G.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/Pass-D1MRT672.js"])))=>i.map(i=>d[i]);
2
- import{kH as Oi,kO as ht,lb as De,lc as Re,ld as je,kG as ki,le as Di,lf as Fe,cB as Ri,lg as Z,eU as Lt,d4 as V,O as It,lh as te,aB as ji,fw as Fi,dG as Gi,kJ as Ge,kK as Be,kL as Ve,c_ as We,af as Ot,li as Bi,lj as Vi,lk as Xe,jL as Ne,dI as Wi,_ as Xi}from"./index-CvGsVzTo.js";import{a as Ni,i as st}from"./standard-viewport-dressing-e4mnLmI6.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{E as Ye,a as qe,f as Yi}from"./clip-planes-CnAI6DZn.js";import{b as qi,a as Vt,C as Qe,e as Qi,d as Zi}from"./content-bounds-BFpR_e--.js";import{EDITOR_LAYER as P,isInEditorOwnedSubtree as J,EDITOR_SELECTION_LAYER as _e,isEditorOwnedObject as Ui}from"./editor-layers-BK3fNRb7.js";import{e as ge,r as Wt,f as Ze}from"./three-bdxPiUPb.js";import{g as tt,s as W}from"./user-data-DfBtZvxw.js";import{d as Ki,s as $i,a as Ji}from"./model-thumbnail-BDU_QU37.js";import{d as Ue,e as ts}from"./model-inspection-Dd-hn5v2.js";import{OrbitControls as es}from"./OrbitControls-B13MKuwC.js";import"./three.module-BLhyNg0e.js";import{a8 as is,fo as p,dp as L,e6 as nt,cW as qt,cp as R,bX as lt,aq as O,K as I,N as mt,a$ as Mt,co as y,cZ as at,bV as Y,e$ as yt,ey as U,aV as bi,cm as ft,db as xi,aI as Qt,bh as K,eV as ss,_ as C,cj as j,aO as Si,c0 as Zt,b_ as Ci,I as xt,cP as os,c8 as ns,e as rs,ap as as,A as ls,c7 as Ee,b$ as cs,da as Ke,fd as et,el as hs,d9 as ds,d5 as $e,j as ps,aE as us,eg as fs,cg as dt,fA as ms,aF as _s,de as gs,eD as ys,bk as vs,S as ws,ex as bs,a5 as xs,ej as it,eE as Je,eF as ti,em as Ss,T as Mi,c1 as Ai}from"./three.core-3arARmh6.js";import{L as ye,a as ve,b as we}from"./LineSegments2-DN9pUfWA.js";import{B as Cs}from"./three.quarks.esm-C_HmSKXo.js";import{b as Ms,e as As}from"./live-gesture-lock-DJbrjOqf.js";import{f as Ps}from"./editor-shell-store-Bro0arjr.js";import{a as Hs,e as Es}from"./entity-object-BFppZ54X.js";import{e as Ts,v as kt,i as zs,d as Ls}from"./three-integration-BHoulbny.js";import{f as ei,v as Is,s as Os}from"./scene-framing-nVyYC4Y-.js";import{a as ks}from"./live-mixers-B-bwLZ7c.js";function be(c){const t=tt(c,"triggerVolume");if(!t||typeof t!="object")return null;const{radius:e}=t;return typeof e=="number"&&Number.isFinite(e)&&e>0?{radius:e}:null}const ot=new nt,k=new p,$=new p,T=new L,ii={X:new p(1,0,0),Y:new p(0,1,0),Z:new p(0,0,1)},ee={type:"change"},si={type:"mouseDown",mode:null},oi={type:"mouseUp",mode:null},ni={type:"objectChange"};class ie extends is{constructor(t,e=null){super(void 0,e);const i=new Bs(this);this._root=i;const s=new Vs;this._gizmo=s,i.add(s);const o=new Ws;this._plane=o,i.add(o);const n=this;function r(w,S){let z=S;Object.defineProperty(n,w,{get:function(){return z!==void 0?z:S},set:function(x){z!==x&&(z=x,o[w]=x,s[w]=x,n.dispatchEvent({type:w+"-changed",value:x}),n.dispatchEvent(ee))}}),n[w]=S,o[w]=S,s[w]=S}r("camera",t),r("object",void 0),r("enabled",!0),r("axis",null),r("mode","translate"),r("translationSnap",null),r("rotationSnap",null),r("scaleSnap",null),r("space","world"),r("size",1),r("dragging",!1),r("showX",!0),r("showY",!0),r("showZ",!0),r("minX",-1/0),r("maxX",1/0),r("minY",-1/0),r("maxY",1/0),r("minZ",-1/0),r("maxZ",1/0);const l=new p,a=new p,h=new L,d=new L,f=new p,u=new L,m=new p,_=new p,g=new p,v=0,b=new p;r("worldPosition",l),r("worldPositionStart",a),r("worldQuaternion",h),r("worldQuaternionStart",d),r("cameraPosition",f),r("cameraQuaternion",u),r("pointStart",m),r("pointEnd",_),r("rotationAxis",g),r("rotationAngle",v),r("eye",b),this._offset=new p,this._startNorm=new p,this._endNorm=new p,this._cameraScale=new p,this._parentPosition=new p,this._parentQuaternion=new L,this._parentQuaternionInv=new L,this._parentScale=new p,this._worldScaleStart=new p,this._worldQuaternionInv=new L,this._worldScale=new p,this._positionStart=new p,this._quaternionStart=new L,this._scaleStart=new p,this._getPointer=Ds.bind(this),this._onPointerDown=js.bind(this),this._onPointerHover=Rs.bind(this),this._onPointerMove=Fs.bind(this),this._onPointerUp=Gs.bind(this),e!==null&&this.connect(e)}connect(t){super.connect(t),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointermove",this._onPointerHover),this.domElement.addEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerHover),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="auto"}getHelper(){return this._root}pointerHover(t){if(this.object===void 0||this.dragging===!0)return;t!==null&&ot.setFromCamera(t,this.camera);const e=se(this._gizmo.picker[this.mode],ot);e?this.axis=e.object.name:this.axis=null}pointerDown(t){if(!(this.object===void 0||this.dragging===!0||t!=null&&t.button!==0)&&this.axis!==null){t!==null&&ot.setFromCamera(t,this.camera);const e=se(this._plane,ot,!0);e&&(this.object.updateMatrixWorld(),this.object.parent.updateMatrixWorld(),this._positionStart.copy(this.object.position),this._quaternionStart.copy(this.object.quaternion),this._scaleStart.copy(this.object.scale),this.object.matrixWorld.decompose(this.worldPositionStart,this.worldQuaternionStart,this._worldScaleStart),this.pointStart.copy(e.point).sub(this.worldPositionStart)),this.dragging=!0,si.mode=this.mode,this.dispatchEvent(si)}}pointerMove(t){const e=this.axis,i=this.mode,s=this.object;let o=this.space;if(i==="scale"?o="local":(e==="E"||e==="XYZE"||e==="XYZ")&&(o="world"),s===void 0||e===null||this.dragging===!1||t!==null&&t.button!==-1)return;t!==null&&ot.setFromCamera(t,this.camera);const n=se(this._plane,ot,!0);if(n){if(this.pointEnd.copy(n.point).sub(this.worldPositionStart),i==="translate")this._offset.copy(this.pointEnd).sub(this.pointStart),o==="local"&&e!=="XYZ"&&this._offset.applyQuaternion(this._worldQuaternionInv),e.indexOf("X")===-1&&(this._offset.x=0),e.indexOf("Y")===-1&&(this._offset.y=0),e.indexOf("Z")===-1&&(this._offset.z=0),o==="local"&&e!=="XYZ"?this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale):this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale),s.position.copy(this._offset).add(this._positionStart),this.translationSnap&&(o==="local"&&(s.position.applyQuaternion(T.copy(this._quaternionStart).invert()),e.search("X")!==-1&&(s.position.x=Math.round(s.position.x/this.translationSnap)*this.translationSnap),e.search("Y")!==-1&&(s.position.y=Math.round(s.position.y/this.translationSnap)*this.translationSnap),e.search("Z")!==-1&&(s.position.z=Math.round(s.position.z/this.translationSnap)*this.translationSnap),s.position.applyQuaternion(this._quaternionStart)),o==="world"&&(s.parent&&s.position.add(k.setFromMatrixPosition(s.parent.matrixWorld)),e.search("X")!==-1&&(s.position.x=Math.round(s.position.x/this.translationSnap)*this.translationSnap),e.search("Y")!==-1&&(s.position.y=Math.round(s.position.y/this.translationSnap)*this.translationSnap),e.search("Z")!==-1&&(s.position.z=Math.round(s.position.z/this.translationSnap)*this.translationSnap),s.parent&&s.position.sub(k.setFromMatrixPosition(s.parent.matrixWorld)))),s.position.x=Math.max(this.minX,Math.min(this.maxX,s.position.x)),s.position.y=Math.max(this.minY,Math.min(this.maxY,s.position.y)),s.position.z=Math.max(this.minZ,Math.min(this.maxZ,s.position.z));else if(i==="scale"){if(e.search("XYZ")!==-1){let r=this.pointEnd.length()/this.pointStart.length();this.pointEnd.dot(this.pointStart)<0&&(r*=-1),$.set(r,r,r)}else k.copy(this.pointStart),$.copy(this.pointEnd),k.applyQuaternion(this._worldQuaternionInv),$.applyQuaternion(this._worldQuaternionInv),$.divide(k),e.search("X")===-1&&($.x=1),e.search("Y")===-1&&($.y=1),e.search("Z")===-1&&($.z=1);s.scale.copy(this._scaleStart).multiply($),this.scaleSnap&&(e.search("X")!==-1&&(s.scale.x=Math.round(s.scale.x/this.scaleSnap)*this.scaleSnap||this.scaleSnap),e.search("Y")!==-1&&(s.scale.y=Math.round(s.scale.y/this.scaleSnap)*this.scaleSnap||this.scaleSnap),e.search("Z")!==-1&&(s.scale.z=Math.round(s.scale.z/this.scaleSnap)*this.scaleSnap||this.scaleSnap))}else if(i==="rotate"){this._offset.copy(this.pointEnd).sub(this.pointStart);const r=20/this.worldPosition.distanceTo(k.setFromMatrixPosition(this.camera.matrixWorld));let l=!1;e==="XYZE"?(this.rotationAxis.copy(this._offset).cross(this.eye).normalize(),this.rotationAngle=this._offset.dot(k.copy(this.rotationAxis).cross(this.eye))*r):(e==="X"||e==="Y"||e==="Z")&&(this.rotationAxis.copy(ii[e]),k.copy(ii[e]),o==="local"&&k.applyQuaternion(this.worldQuaternion),k.cross(this.eye),k.length()===0?l=!0:this.rotationAngle=this._offset.dot(k.normalize())*r),(e==="E"||l)&&(this.rotationAxis.copy(this.eye),this.rotationAngle=this.pointEnd.angleTo(this.pointStart),this._startNorm.copy(this.pointStart).normalize(),this._endNorm.copy(this.pointEnd).normalize(),this.rotationAngle*=this._endNorm.cross(this._startNorm).dot(this.eye)<0?1:-1),this.rotationSnap&&(this.rotationAngle=Math.round(this.rotationAngle/this.rotationSnap)*this.rotationSnap),o==="local"&&e!=="E"&&e!=="XYZE"?(s.quaternion.copy(this._quaternionStart),s.quaternion.multiply(T.setFromAxisAngle(this.rotationAxis,this.rotationAngle)).normalize()):(this.rotationAxis.applyQuaternion(this._parentQuaternionInv),s.quaternion.copy(T.setFromAxisAngle(this.rotationAxis,this.rotationAngle)),s.quaternion.multiply(this._quaternionStart).normalize())}this.dispatchEvent(ee),this.dispatchEvent(ni)}}pointerUp(t){t!==null&&t.button!==0||(this.dragging&&this.axis!==null&&(oi.mode=this.mode,this.dispatchEvent(oi)),this.dragging=!1,this.axis=null)}dispose(){this.disconnect(),this._root.dispose()}attach(t){return this.object=t,this._root.visible=!0,this}detach(){return this.object=void 0,this.axis=null,this._root.visible=!1,this}reset(){this.enabled&&this.dragging&&(this.object.position.copy(this._positionStart),this.object.quaternion.copy(this._quaternionStart),this.object.scale.copy(this._scaleStart),this.dispatchEvent(ee),this.dispatchEvent(ni),this.pointStart.copy(this.pointEnd))}getRaycaster(){return ot}getMode(){return this.mode}setMode(t){this.mode=t}setTranslationSnap(t){this.translationSnap=t}setRotationSnap(t){this.rotationSnap=t}setScaleSnap(t){this.scaleSnap=t}setSize(t){this.size=t}setSpace(t){this.space=t}setColors(t,e,i,s){const o=this._gizmo.materialLib;o.xAxis.color.set(t),o.yAxis.color.set(e),o.zAxis.color.set(i),o.active.color.set(s),o.xAxisTransparent.color.set(t),o.yAxisTransparent.color.set(e),o.zAxisTransparent.color.set(i),o.activeTransparent.color.set(s),o.xAxis._color&&o.xAxis._color.set(t),o.yAxis._color&&o.yAxis._color.set(e),o.zAxis._color&&o.zAxis._color.set(i),o.active._color&&o.active._color.set(s),o.xAxisTransparent._color&&o.xAxisTransparent._color.set(t),o.yAxisTransparent._color&&o.yAxisTransparent._color.set(e),o.zAxisTransparent._color&&o.zAxisTransparent._color.set(i),o.activeTransparent._color&&o.activeTransparent._color.set(s)}}function Ds(c){if(this.domElement.ownerDocument.pointerLockElement)return{x:0,y:0,button:c.button};{const t=this.domElement.getBoundingClientRect();return{x:(c.clientX-t.left)/t.width*2-1,y:-(c.clientY-t.top)/t.height*2+1,button:c.button}}}function Rs(c){if(this.enabled)switch(c.pointerType){case"mouse":case"pen":this.pointerHover(this._getPointer(c));break}}function js(c){this.enabled&&(document.pointerLockElement||this.domElement.setPointerCapture(c.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.pointerHover(this._getPointer(c)),this.pointerDown(this._getPointer(c)))}function Fs(c){this.enabled&&this.pointerMove(this._getPointer(c))}function Gs(c){this.enabled&&(this.domElement.releasePointerCapture(c.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.pointerUp(this._getPointer(c)))}function se(c,t,e){const i=t.intersectObject(c,!0);for(let s=0;s<i.length;s++)if(i[s].object.visible||e)return i[s];return!1}const Dt=new bi,H=new p(0,1,0),ri=new p(0,0,0),ai=new ft,Rt=new L,Xt=new L,N=new p,li=new ft,St=new p(1,0,0),rt=new p(0,1,0),Ct=new p(0,0,1),jt=new p,vt=new p,wt=new p;class Bs extends qt{constructor(t){super(),this.isTransformControlsRoot=!0,this.controls=t,this.visible=!1}updateMatrixWorld(t){const e=this.controls;e.object!==void 0&&(e.object.updateMatrixWorld(),e.object.parent===null?console.error("TransformControls: The attached 3D object must be a part of the scene graph."):e.object.parent.matrixWorld.decompose(e._parentPosition,e._parentQuaternion,e._parentScale),e.object.matrixWorld.decompose(e.worldPosition,e.worldQuaternion,e._worldScale),e._parentQuaternionInv.copy(e._parentQuaternion).invert(),e._worldQuaternionInv.copy(e.worldQuaternion).invert()),e.camera.updateMatrixWorld(),e.camera.matrixWorld.decompose(e.cameraPosition,e.cameraQuaternion,e._cameraScale),e.camera.isOrthographicCamera?e.camera.getWorldDirection(e.eye).negate():e.eye.copy(e.cameraPosition).sub(e.worldPosition).normalize(),super.updateMatrixWorld(t)}dispose(){this.traverse(function(t){t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose()})}}class Vs extends qt{constructor(){super(),this.isTransformControlsGizmo=!0,this.type="TransformControlsGizmo";const t=new R({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),e=new lt({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),i=t.clone();i.opacity=.15;const s=e.clone();s.opacity=.5;const o=t.clone();o.color.setHex(16711680);const n=t.clone();n.color.setHex(65280);const r=t.clone();r.color.setHex(255);const l=t.clone();l.color.setHex(16711680),l.opacity=.5;const a=t.clone();a.color.setHex(65280),a.opacity=.5;const h=t.clone();h.color.setHex(255),h.opacity=.5;const d=t.clone();d.opacity=.25;const f=t.clone();f.color.setHex(16776960),f.opacity=.25;const u=t.clone();u.color.setHex(16776960);const m=t.clone();m.color.setHex(7895160),this.materialLib={xAxis:o,yAxis:n,zAxis:r,active:u,xAxisTransparent:l,yAxisTransparent:a,zAxisTransparent:h,activeTransparent:f};const _=new O(0,.04,.1,12);_.translate(0,.05,0);const g=new I(.08,.08,.08);g.translate(0,.04,0);const v=new mt;v.setAttribute("position",new Mt([0,0,0,1,0,0],3));const b=new O(.0075,.0075,.5,3);b.translate(0,.25,0);function w(F,Ht){const B=new yt(F,.0075,3,64,Ht*Math.PI*2);return B.rotateY(Math.PI/2),B.rotateX(Math.PI/2),B}function S(){const F=new mt;return F.setAttribute("position",new Mt([0,0,0,1,1,1],3)),F}const z={X:[[new y(_,o),[.5,0,0],[0,0,-Math.PI/2]],[new y(_,o),[-.5,0,0],[0,0,Math.PI/2]],[new y(b,o),[0,0,0],[0,0,-Math.PI/2]]],Y:[[new y(_,n),[0,.5,0]],[new y(_,n),[0,-.5,0],[Math.PI,0,0]],[new y(b,n)]],Z:[[new y(_,r),[0,0,.5],[Math.PI/2,0,0]],[new y(_,r),[0,0,-.5],[-Math.PI/2,0,0]],[new y(b,r),null,[Math.PI/2,0,0]]],XYZ:[[new y(new at(.1,0),d),[0,0,0]]],XY:[[new y(new I(.15,.15,.01),h),[.15,.15,0]]],YZ:[[new y(new I(.15,.15,.01),l),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new y(new I(.15,.15,.01),a),[.15,0,.15],[-Math.PI/2,0,0]]]},x={X:[[new y(new O(.2,0,.6,4),i),[.3,0,0],[0,0,-Math.PI/2]],[new y(new O(.2,0,.6,4),i),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new y(new O(.2,0,.6,4),i),[0,.3,0]],[new y(new O(.2,0,.6,4),i),[0,-.3,0],[0,0,Math.PI]]],Z:[[new y(new O(.2,0,.6,4),i),[0,0,.3],[Math.PI/2,0,0]],[new y(new O(.2,0,.6,4),i),[0,0,-.3],[-Math.PI/2,0,0]]],XYZ:[[new y(new at(.2,0),i)]],XY:[[new y(new I(.2,.2,.01),i),[.15,.15,0]]],YZ:[[new y(new I(.2,.2,.01),i),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new y(new I(.2,.2,.01),i),[.15,0,.15],[-Math.PI/2,0,0]]]},A={START:[[new y(new at(.01,2),s),null,null,null,"helper"]],END:[[new y(new at(.01,2),s),null,null,null,"helper"]],DELTA:[[new Y(S(),s),null,null,null,"helper"]],X:[[new Y(v,s),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new Y(v,s),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new Y(v,s),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]},M={XYZE:[[new y(w(.5,1),m),null,[0,Math.PI/2,0]]],X:[[new y(w(.5,.5),o)]],Y:[[new y(w(.5,.5),n),null,[0,0,-Math.PI/2]]],Z:[[new y(w(.5,.5),r),null,[0,Math.PI/2,0]]],E:[[new y(w(.75,1),f),null,[0,Math.PI/2,0]]]},E={AXIS:[[new Y(v,s),[-1e3,0,0],null,[1e6,1,1],"helper"]]},G={XYZE:[[new y(new U(.25,10,8),i)]],X:[[new y(new yt(.5,.1,4,24),i),[0,0,0],[0,-Math.PI/2,-Math.PI/2]]],Y:[[new y(new yt(.5,.1,4,24),i),[0,0,0],[Math.PI/2,0,0]]],Z:[[new y(new yt(.5,.1,4,24),i),[0,0,0],[0,0,-Math.PI/2]]],E:[[new y(new yt(.75,.1,2,24),i)]]},$t={X:[[new y(g,o),[.5,0,0],[0,0,-Math.PI/2]],[new y(b,o),[0,0,0],[0,0,-Math.PI/2]],[new y(g,o),[-.5,0,0],[0,0,Math.PI/2]]],Y:[[new y(g,n),[0,.5,0]],[new y(b,n)],[new y(g,n),[0,-.5,0],[0,0,Math.PI]]],Z:[[new y(g,r),[0,0,.5],[Math.PI/2,0,0]],[new y(b,r),[0,0,0],[Math.PI/2,0,0]],[new y(g,r),[0,0,-.5],[-Math.PI/2,0,0]]],XY:[[new y(new I(.15,.15,.01),h),[.15,.15,0]]],YZ:[[new y(new I(.15,.15,.01),l),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new y(new I(.15,.15,.01),a),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new y(new I(.1,.1,.1),d)]]},Pt={X:[[new y(new O(.2,0,.6,4),i),[.3,0,0],[0,0,-Math.PI/2]],[new y(new O(.2,0,.6,4),i),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new y(new O(.2,0,.6,4),i),[0,.3,0]],[new y(new O(.2,0,.6,4),i),[0,-.3,0],[0,0,Math.PI]]],Z:[[new y(new O(.2,0,.6,4),i),[0,0,.3],[Math.PI/2,0,0]],[new y(new O(.2,0,.6,4),i),[0,0,-.3],[-Math.PI/2,0,0]]],XY:[[new y(new I(.2,.2,.01),i),[.15,.15,0]]],YZ:[[new y(new I(.2,.2,.01),i),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new y(new I(.2,.2,.01),i),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new y(new I(.2,.2,.2),i),[0,0,0]]]},Jt={X:[[new Y(v,s),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new Y(v,s),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new Y(v,s),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]};function Q(F){const Ht=new qt;for(const B in F)for(let ct=F[B].length;ct--;){const D=F[B][ct][0].clone(),Et=F[B][ct][1],Tt=F[B][ct][2],zt=F[B][ct][3],Ii=F[B][ct][4];D.name=B,D.tag=Ii,Et&&D.position.set(Et[0],Et[1],Et[2]),Tt&&D.rotation.set(Tt[0],Tt[1],Tt[2]),zt&&D.scale.set(zt[0],zt[1],zt[2]),D.updateMatrix();const ke=D.geometry.clone();ke.applyMatrix4(D.matrix),D.geometry=ke,D.renderOrder=1/0,D.position.set(0,0,0),D.rotation.set(0,0,0),D.scale.set(1,1,1),Ht.add(D)}return Ht}this.gizmo={},this.picker={},this.helper={},this.add(this.gizmo.translate=Q(z)),this.add(this.gizmo.rotate=Q(M)),this.add(this.gizmo.scale=Q($t)),this.add(this.picker.translate=Q(x)),this.add(this.picker.rotate=Q(G)),this.add(this.picker.scale=Q(Pt)),this.add(this.helper.translate=Q(A)),this.add(this.helper.rotate=Q(E)),this.add(this.helper.scale=Q(Jt)),this.picker.translate.visible=!1,this.picker.rotate.visible=!1,this.picker.scale.visible=!1}updateMatrixWorld(t){const i=(this.mode==="scale"?"local":this.space)==="local"?this.worldQuaternion:Xt;this.gizmo.translate.visible=this.mode==="translate",this.gizmo.rotate.visible=this.mode==="rotate",this.gizmo.scale.visible=this.mode==="scale",this.helper.translate.visible=this.mode==="translate",this.helper.rotate.visible=this.mode==="rotate",this.helper.scale.visible=this.mode==="scale";let s=[];s=s.concat(this.picker[this.mode].children),s=s.concat(this.gizmo[this.mode].children),s=s.concat(this.helper[this.mode].children);for(let o=0;o<s.length;o++){const n=s[o];n.visible=!0,n.rotation.set(0,0,0),n.position.copy(this.worldPosition);let r;if(this.camera.isOrthographicCamera?r=(this.camera.top-this.camera.bottom)/this.camera.zoom:r=this.worldPosition.distanceTo(this.cameraPosition)*Math.min(1.9*Math.tan(Math.PI*this.camera.fov/360)/this.camera.zoom,7),n.scale.set(1,1,1).multiplyScalar(r*this.size/4),n.tag==="helper"){n.visible=!1,n.name==="AXIS"?(n.visible=!!this.axis,this.axis==="X"&&(T.setFromEuler(Dt.set(0,0,0)),n.quaternion.copy(i).multiply(T),Math.abs(H.copy(St).applyQuaternion(i).dot(this.eye))>.9&&(n.visible=!1)),this.axis==="Y"&&(T.setFromEuler(Dt.set(0,0,Math.PI/2)),n.quaternion.copy(i).multiply(T),Math.abs(H.copy(rt).applyQuaternion(i).dot(this.eye))>.9&&(n.visible=!1)),this.axis==="Z"&&(T.setFromEuler(Dt.set(0,Math.PI/2,0)),n.quaternion.copy(i).multiply(T),Math.abs(H.copy(Ct).applyQuaternion(i).dot(this.eye))>.9&&(n.visible=!1)),this.axis==="XYZE"&&(T.setFromEuler(Dt.set(0,Math.PI/2,0)),H.copy(this.rotationAxis),n.quaternion.setFromRotationMatrix(ai.lookAt(ri,H,rt)),n.quaternion.multiply(T),n.visible=this.dragging),this.axis==="E"&&(n.visible=!1)):n.name==="START"?(n.position.copy(this.worldPositionStart),n.visible=this.dragging):n.name==="END"?(n.position.copy(this.worldPosition),n.visible=this.dragging):n.name==="DELTA"?(n.position.copy(this.worldPositionStart),n.quaternion.copy(this.worldQuaternionStart),k.set(1e-10,1e-10,1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1),k.applyQuaternion(this.worldQuaternionStart.clone().invert()),n.scale.copy(k),n.visible=this.dragging):(n.quaternion.copy(i),this.dragging?n.position.copy(this.worldPositionStart):n.position.copy(this.worldPosition),this.axis&&(n.visible=this.axis.search(n.name)!==-1));continue}n.quaternion.copy(i),this.mode==="translate"||this.mode==="scale"?(n.name==="X"&&Math.abs(H.copy(St).applyQuaternion(i).dot(this.eye))>.99&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),n.name==="Y"&&Math.abs(H.copy(rt).applyQuaternion(i).dot(this.eye))>.99&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),n.name==="Z"&&Math.abs(H.copy(Ct).applyQuaternion(i).dot(this.eye))>.99&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),n.name==="XY"&&Math.abs(H.copy(Ct).applyQuaternion(i).dot(this.eye))<.2&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),n.name==="YZ"&&Math.abs(H.copy(St).applyQuaternion(i).dot(this.eye))<.2&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),n.name==="XZ"&&Math.abs(H.copy(rt).applyQuaternion(i).dot(this.eye))<.2&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1)):this.mode==="rotate"&&(Rt.copy(i),H.copy(this.eye).applyQuaternion(T.copy(i).invert()),n.name.search("E")!==-1&&n.quaternion.setFromRotationMatrix(ai.lookAt(this.eye,ri,rt)),n.name==="X"&&(T.setFromAxisAngle(St,Math.atan2(-H.y,H.z)),T.multiplyQuaternions(Rt,T),n.quaternion.copy(T)),n.name==="Y"&&(T.setFromAxisAngle(rt,Math.atan2(H.x,H.z)),T.multiplyQuaternions(Rt,T),n.quaternion.copy(T)),n.name==="Z"&&(T.setFromAxisAngle(Ct,Math.atan2(H.y,H.x)),T.multiplyQuaternions(Rt,T),n.quaternion.copy(T))),n.visible=n.visible&&(n.name.indexOf("X")===-1||this.showX),n.visible=n.visible&&(n.name.indexOf("Y")===-1||this.showY),n.visible=n.visible&&(n.name.indexOf("Z")===-1||this.showZ),n.visible=n.visible&&(n.name.indexOf("E")===-1||this.showX&&this.showY&&this.showZ),n.material._color=n.material._color||n.material.color.clone(),n.material._opacity=n.material._opacity||n.material.opacity,n.material.color.copy(n.material._color),n.material.opacity=n.material._opacity,this.enabled&&this.axis&&(n.name===this.axis?(n.material.color.copy(this.materialLib.active.color),n.material.opacity=1):this.axis.split("").some(function(l){return n.name===l})&&(n.material.color.copy(this.materialLib.active.color),n.material.opacity=1))}super.updateMatrixWorld(t)}}class Ws extends y{constructor(){super(new xi(1e5,1e5,2,2),new R({visible:!1,wireframe:!0,side:Qt,transparent:!0,opacity:.1,toneMapped:!1})),this.isTransformControlsPlane=!0,this.type="TransformControlsPlane"}updateMatrixWorld(t){let e=this.space;switch(this.position.copy(this.worldPosition),this.mode==="scale"&&(e="local"),jt.copy(St).applyQuaternion(e==="local"?this.worldQuaternion:Xt),vt.copy(rt).applyQuaternion(e==="local"?this.worldQuaternion:Xt),wt.copy(Ct).applyQuaternion(e==="local"?this.worldQuaternion:Xt),H.copy(vt),this.mode){case"translate":case"scale":switch(this.axis){case"X":H.copy(this.eye).cross(jt),N.copy(jt).cross(H);break;case"Y":H.copy(this.eye).cross(vt),N.copy(vt).cross(H);break;case"Z":H.copy(this.eye).cross(wt),N.copy(wt).cross(H);break;case"XY":N.copy(wt);break;case"YZ":N.copy(jt);break;case"XZ":H.copy(wt),N.copy(vt);break;case"XYZ":case"E":N.set(0,0,0);break}break;case"rotate":default:N.set(0,0,0)}N.length()===0?this.quaternion.copy(this.cameraQuaternion):(li.lookAt(k.set(0,0,0),N,H),this.quaternion.setFromRotationMatrix(li)),super.updateMatrixWorld(t)}}const oe=new C(4441855),Ft=new C(16758858),Gt=new C(14185983),Xs=new C(16731496),ci=new C(16777215);function ne(c){return new Y(new mt,new lt({color:c,depthTest:!1,depthWrite:!1,transparent:!0,toneMapped:!1}))}function re(c,t){return new y(c,new R({color:t,depthTest:!1,depthWrite:!1,transparent:!0,toneMapped:!1}))}function ae(c,t){if(c.visible=t.length>1,!c.visible)return;let e=c.geometry.getAttribute("position");(!e||e.count!==t.length)&&(e=new Mt(t.length*3,3),c.geometry.setAttribute("position",e));for(let i=0;i<t.length;i++)e.setXYZ(i,t[i].x,t[i].y,t[i].z);e.needsUpdate=!0,c.geometry.computeBoundingSphere()}class Ns extends K{constructor(t){super(),this.source=t,this.name="Constraint Helper",this.renderOrder=999,W(this,"editorHelper",!0),W(this,"editorHelperType","constraints"),this.layers.set(P),this.refreshStructure()}selected=!1;hoveredControl=null;selectedObjects=new Set;visuals=[];setSelected(t){this.selected=t}setSelectedObjects(t){this.selectedObjects=t}controlMeshes(){return this.visuals.flatMap(t=>[t.targetHit,t.poleHit].filter(e=>e.visible))}presents(t){return t===this.source?!0:this.visuals.some(e=>{const i=e.mark.getSnapshot();return t===i.target||t===i.pole})}controlFor(t){for(const e of this.visuals){const i=e.mark.getSnapshot();if((t===e.target||t===e.targetHit)&&i.target)return{kind:"target",label:i.target.name||`${e.mark.config.label} target`,object:i.target,mesh:e.target};if((t===e.pole||t===e.poleHit)&&i.pole)return{kind:"pole",label:i.pole.name||`${e.mark.config.label} pole`,object:i.pole,mesh:e.pole}}return null}setHoveredControl(t){this.hoveredControl=t}update(t){this.refreshStructure();for(const e of this.visuals)this.updateVisual(e,t)}dispose(){this.clearVisuals(),this.removeFromParent()}refreshStructure(){const t=ge(this.source);t.length===this.visuals.length&&t.every((i,s)=>{const o=i.getSnapshot(),n=o.chain.length>0?o.chain.length:o.constrained?1:0;return this.visuals[s]?.mark===i&&this.visuals[s]?.positions.length===n})||(this.clearVisuals(),this.visuals=t.map(i=>this.makeVisual(i)))}makeVisual(t){const e=t.getSnapshot(),i=e.chain.length>0?e.chain:e.constrained?[e.constrained]:[],s=ne(oe),o=ne(Ft),n=ne(Gt),r=i.map(()=>re(new U(.035,10,7),oe)),l=re(new at(.085),Ft),a=re(new ss(.075),Gt),h=new R({transparent:!0,opacity:0,depthTest:!1,depthWrite:!1,colorWrite:!1}),d=new y(new U(.16,10,7),h),f=new y(new U(.15,10,7),h.clone());for(const u of[s,o,n,...r,l,a,d,f])u.renderOrder=this.renderOrder,u.layers.set(P),this.add(u);return{mark:t,chain:s,targetLine:o,poleLine:n,joints:r,target:l,pole:a,targetHit:d,poleHit:f,positions:i.map(()=>new p),targetPosition:new p,polePosition:new p}}updateVisual(t,e){const i=t.mark.getSnapshot(),s=i.chain.length>0?i.chain:i.constrained?[i.constrained]:[];for(let f=0;f<s.length;f++)s[f].getWorldPosition(t.positions[f]);ae(t.chain,t.positions);for(let f=0;f<t.joints.length;f++){const u=t.joints[f],m=t.positions[f];u.visible=!!m,m&&(u.position.copy(m),u.scale.setScalar(this.handleScale(e,m)))}const o=t.positions.at(-1),n=i.target?.getWorldPosition(t.targetPosition)??null,r=i.pole?.getWorldPosition(t.polePosition)??null;ae(t.targetLine,o&&n?[o,n]:[]),ae(t.poleLine,t.positions[0]&&r?[t.positions[0],r]:[]),t.target.visible=n!==null,n&&(t.target.position.copy(n),t.target.scale.setScalar(this.handleScale(e,n)*(this.hoveredControl===t.target?1.22:1))),t.targetHit.visible=n!==null,n&&(t.targetHit.position.copy(n),t.targetHit.scale.copy(t.target.scale)),t.pole.visible=r!==null,r&&(t.pole.position.copy(r),t.pole.scale.setScalar(this.handleScale(e,r)*(this.hoveredControl===t.pole?1.22:1))),t.poleHit.visible=r!==null,r&&(t.poleHit.position.copy(r),t.poleHit.scale.copy(t.pole.scale));const l=i.status==="error"||i.status==="unresolved",a=this.selected?1:.52;for(const f of[t.chain,...t.joints]){const u=f.material;u.color.copy(l?Xs:oe),u.opacity=a}const h=this.hoveredControl===t.target||i.target!==null&&this.selectedObjects.has(i.target),d=this.hoveredControl===t.pole||i.pole!==null&&this.selectedObjects.has(i.pole);t.target.material.color.copy(h?ci:Ft),t.pole.material.color.copy(d?ci:Gt),t.targetLine.material.color.copy(Ft),t.poleLine.material.color.copy(Gt),t.targetLine.material.opacity=a,t.poleLine.material.opacity=a,t.target.material.opacity=h?1:a,t.pole.material.opacity=d?1:a}handleScale(t,e){return j.clamp(t.position.distanceTo(e)/8,.65,4)}clearVisuals(){for(const t of[...this.children]){t.removeFromParent();const e=t;e.geometry.dispose();const i=Array.isArray(e.material)?e.material:[e.material];for(const s of i)s.dispose()}this.visuals=[],this.hoveredControl=null}}const Ys=new C(4892927),qs=new C(7718143),Qs=new C(16758858),Zs=new C(16777215);class Us extends K{constructor(t){super(),this.source=t,this.name="Reflection Probe Helper",this.matrixAutoUpdate=!1,this.renderOrder=998,W(this,"editorHelper",!0),W(this,"editorHelperType","reflection-probes"),this.layers.set(P),this.refresh(!0)}signature="";selected=!1;setSelected(t){this.selected!==t&&(this.selected=t,this.refresh(!0))}update(){this.refresh(!1),this.source.updateWorldMatrix(!0,!1),this.matrix.copy(this.source.matrixWorld),this.matrixWorldNeedsUpdate=!0}dispose(){this.clearVisuals(),this.removeFromParent()}refresh(t){const e=Wt(this.source);if(!e)return;const i=e.config,s=JSON.stringify(i);if(!t&&s===this.signature)return;this.signature=s,this.clearVisuals();const o=this.selected?qs:Ys,n=this.selected?1:.62,r=Math.max(0,i.blendDistance);if(i.shape==="sphere"){const a=Math.max(.01,i.radius);this.addWire(new U(a,24,16),o,n),r>0&&a-r>.01&&this.addWire(new U(a-r,20,12),o,this.selected?.55:.28)}else{const[a,h,d]=i.size.map(u=>Math.max(.01,u));this.addWire(new I(a,h,d),o,n);const f=[a-r*2,h-r*2,d-r*2];r>0&&f.every(u=>u>.01)&&this.addWire(new I(f[0],f[1],f[2]),o,this.selected?.55:.28)}if(i.parallaxProjection){const[a,h,d]=i.parallaxSize.map(u=>Math.max(.01,u));this.addWire(new I(a,h,d),Qs,this.selected?.9:.45).position.fromArray(i.parallaxOffset)}this.addWire(new at(this.selected?.16:.11),Zs,this.selected?1:.72).position.fromArray(i.captureOffset),this.traverse(a=>a.layers.set(P))}addWire(t,e,i){const s=new Si(t);t.dispose();const o=new lt({color:e,depthTest:!1,transparent:!0,opacity:i,toneMapped:!1}),n=new Zt(s,o);return n.renderOrder=this.renderOrder,this.add(n),n}clearVisuals(){for(const t of[...this.children]){t.removeFromParent();const e=t;e.geometry?.dispose();const i=Array.isArray(e.material)?e.material:[e.material];for(const s of i)s?.dispose()}}}const Te=new WeakMap,Pi=new U(1,12,8);function _t(c){return new p(c[0],c[1],c[2])}function At(c){const t={color:c.color,transparent:!0,opacity:c.opacity??.68,depthTest:!1};return c.dashed?new Ci({...t,dashSize:.18,gapSize:.12}):new lt(t)}function X(c,t,e,i=!1){const s=i&&t.length>0?[...t,t[0]]:[...t],o=new Y(new mt().setFromPoints(s),e);o.renderOrder=997,o.layers.set(P),e instanceof Ci&&o.computeLineDistances(),c.add(o)}function Nt(c,t,e,i,s=64){const o=[];for(let n=0;n<s;n++){const r=n/s*Math.PI*2;o.push(c.clone().addScaledVector(e,Math.cos(r)*t).addScaledVector(i,Math.sin(r)*t))}return o}function Ks(c){const t=new K,e=_t(c.center),i=At(c);return X(t,Nt(e,c.radius,new p(1,0,0),new p(0,1,0)),i,!0),X(t,Nt(e,c.radius,new p(1,0,0),new p(0,0,1)),i,!0),X(t,Nt(e,c.radius,new p(0,1,0),new p(0,0,1)),i,!0),t}function $s(c){const t=new K;return X(t,c.points.map(_t),At(c)),t}function Js(c){const t=new K,e=_t(c.origin),i=_t(c.direction).normalize(),s=Math.abs(i.y)<.9?new p(0,1,0):new p(1,0,0),o=new p().crossVectors(s,i).normalize(),n=new p().crossVectors(i,o).normalize(),r=j.degToRad(Math.max(0,Math.min(360,c.angle))/2),l=At(c),a=[];for(let h=0;h<64;h++){const d=h/64*Math.PI*2,f=o.clone().multiplyScalar(Math.cos(d)).addScaledVector(n,Math.sin(d));a.push(e.clone().addScaledVector(i,Math.cos(r)*c.length).addScaledVector(f,Math.sin(r)*c.length))}X(t,a,l,!0);for(const h of[0,16,32,48])X(t,[e,a[h]],l);return t}function to(c,t,e){return c.applyQuaternion(new L(...e)).add(new p(...t))}function eo(c){const t=new K,e=At(c),[i,s,o]=c.halfExtents,n=[[-i,-s,-o],[i,-s,-o],[i,s,-o],[-i,s,-o],[-i,-s,o],[i,-s,o],[i,s,o],[-i,s,o]].map(([r,l,a])=>to(new p(r,l,a),c.center,c.rotation));for(const[r,l]of[[0,1],[1,2],[2,3],[3,0],[4,5],[5,6],[6,7],[7,4],[0,4],[1,5],[2,6],[3,7]])X(t,[n[r],n[l]],e);return t}function io(c){const t=new K,e=At(c),i=new L(...c.rotation),s=_t(c.center),o=r=>r.applyQuaternion(i).add(s),n=(r,l,a)=>Nt(new p(0,r,0),c.radius,l,a).map(o);X(t,n(c.halfHeight,new p(1,0,0),new p(0,0,1)),e,!0),X(t,n(-c.halfHeight,new p(1,0,0),new p(0,0,1)),e,!0);for(const[r,l]of[[c.radius,0],[-c.radius,0],[0,c.radius],[0,-c.radius]])X(t,[o(new p(r,-c.halfHeight,l)),o(new p(r,c.halfHeight,l))],e);for(const r of["x","z"]){const l=[];for(let a=0;a<=32;a++){const h=a/32*Math.PI,d=new p(0,c.halfHeight+Math.sin(h)*c.radius,0);d[r]=Math.cos(h)*c.radius,l.push(o(d))}for(let a=0;a<=32;a++){const h=Math.PI+a/32*Math.PI,d=new p(0,-c.halfHeight+Math.sin(h)*c.radius,0);d[r]=Math.cos(h)*c.radius,l.push(o(d))}X(t,l,e)}return t}function so(c){const t=c.kind==="line"?$s(c):c.kind==="sphere"?Ks(c):c.kind==="cone"?Js(c):c.kind==="box"?eo(c):io(c);return t.layers.set(P),t.traverse(e=>e.layers.set(P)),t}function oo(c,t){const e=new R({color:t.color,depthTest:!1,transparent:!0,opacity:t.writable?.92:.35}),i=new y(Pi,e);return Object.defineProperty(i,"isSpatialHandleMesh",{value:!0}),i.position.copy(_t(t.position)),i.renderOrder=998,i.layers.set(P),Te.set(i,{nodeId:c,handle:t}),i}function no(c,t){const e=[],i=[];for(const s of t){for(const o of s.guides)e.push(so(o));for(const o of s.handles){const n=oo(c,o);e.push(n),i.push(n)}}return{roots:e,handles:i}}function hi(c){return Te.get(c)??null}function le(c,t){const e=Te.get(c);c.material.color.set(t&&e?.handle.writable?"#ffffff":e?.handle.color??"#ffffff")}function di(c,t){const e=c.position.distanceTo(t.position);c.scale.setScalar(Math.max(.025,e*.012))}function ro(c,t,e){const i=c,s=i.geometry;s&&s!==Pi&&!t.has(s)&&(s.dispose(),t.add(s));const o=Array.isArray(i.material)?i.material:i.material?[i.material]:[];for(const n of o)e.has(n)||(n.dispose(),e.add(n))}function pi(c){const t=new Set,e=new Set;for(const i of c)i.removeFromParent(),i.traverse(s=>ro(s,t,e))}function ce(c,t,e,i=1.15){if(c.isEmpty())return 3;const s=e.clone().normalize(),o=Math.abs(s.dot(t.up))>.999?new p(0,0,1):t.up,n=new p().crossVectors(o,s).normalize(),r=new p().crossVectors(s,n).normalize(),l=c.getCenter(new p);let a=0,h=0,d=0;for(const _ of[c.min.x,c.max.x])for(const g of[c.min.y,c.max.y])for(const v of[c.min.z,c.max.z]){const b=new p(_,g,v).sub(l);d=Math.max(d,Math.abs(b.dot(n))),h=Math.max(h,Math.abs(b.dot(r))),a=Math.max(a,Math.abs(b.dot(s)))}const f=j.degToRad(t.fov*.5),u=Math.atan(Math.tan(f)*Math.max(t.aspect,.01)),m=Math.max(h/Math.tan(f),d/Math.tan(u));return Math.max(m*i+a,t.near*4,.01)}const ao=3,lo=.05,co=.03,ho=.6,po=.15,uo=.08,fo=3,mo=.45,Hi=.001,_o=24,go=6,yo=[[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]];function vo(c){const t=j.clamp(c*po,uo,fo);return Math.max(Math.min(t,c*mo),Hi)}function he(c){return j.clamp(c*lo,co,ho)}function wo(c,t,e=!1){const{min:i,max:s}=c,o=h=>e?Math.max(h/2,Hi):vo(h),n=o(s.x-i.x),r=o(s.y-i.y),l=o(s.z-i.z);let a=0;for(const[h,d,f]of yo){const u=h===0?i.x:s.x,m=d===0?i.y:s.y,_=f===0?i.z:s.z,g=h===0?n:-n,v=d===0?r:-r,b=f===0?l:-l;t[a++]=u,t[a++]=m,t[a++]=_,t[a++]=u+g,t[a++]=m,t[a++]=_,t[a++]=u,t[a++]=m,t[a++]=_,t[a++]=u,t[a++]=m+v,t[a++]=_,t[a++]=u,t[a++]=m,t[a++]=_,t[a++]=u,t[a++]=m,t[a++]=_+b}}class de extends ye{entityObject;_fixedSize;_edges;_objectFrame;_toObject=new ft;_point=new p;_axisX=new p;_axisY=new p;_axisZ=new p;_scale=new p;_positions=new Float32Array(_o*go);_box=new xt;_worldPos=new p;_fixedExtent=new p;_standoff=new p;_lastRootMatrix=new Float32Array(16);_requiresContinuousBounds;constructor(t,e){const i=new ve,s=new we({color:e.color,linewidth:e.lineWidth??ao,worldUnits:!1,alphaToCoverage:!0,toneMapped:!1,depthTest:!1,depthWrite:!1});super(i,s),this.entityObject=t,this._fixedSize=e.fixedSize,this._edges=e.edges===!0,this._objectFrame=e.frame==="object";let o=!1;t.traverse(n=>{const r=n;(n.isSkinnedMesh||Array.isArray(r.morphTargetInfluences)&&r.morphTargetInfluences.length>0||ks(n)!==null)&&(o=!0)}),this._requiresContinuousBounds=o,this.renderOrder=1,this.frustumCulled=!1,i.setPositions(this._positions),this.update()}setColor(t){this.material.color.setHex(t)}updateIfNeeded(){this.entityObject.updateWorldMatrix(!0,!1);const t=this.entityObject.matrixWorld.elements;let e=!1;for(let i=0;i<t.length;i++)if(t[i]!==this._lastRootMatrix[i]){e=!0;break}(e||this._requiresContinuousBounds)&&this.update()}update(){this.entityObject.updateWorldMatrix(!0,!1);const t=this._objectFrame&&this._fixedSize===void 0&&Math.abs(this.entityObject.matrixWorld.determinant())>1e-30;this.entityObject.matrixWorld.extractBasis(this._axisX,this._axisY,this._axisZ);const e=t?this._scale.set(this._axisX.length(),this._axisY.length(),this._axisZ.length()):this._scale.set(1,1,1);if(this._fixedSize!==void 0)this.entityObject.getWorldPosition(this._worldPos),this._fixedExtent.setScalar(this._fixedSize),this._box.setFromCenterAndSize(this._worldPos,this._fixedExtent);else if(t?(this._toObject.copy(this.entityObject.matrixWorld).invert(),qi(this.entityObject,this._toObject,this._box)):Vt(this.entityObject,this._box),this._box.isEmpty())return;if(this._box.getSize(this._standoff).multiply(e),this._standoff.set(he(this._standoff.x),he(this._standoff.y),he(this._standoff.z)).divide(e),this._box.expandByVector(this._standoff),wo(this._box,this._positions,this._edges),t){const s=this.entityObject.matrixWorld;for(let o=0;o<this._positions.length;o+=3)this._point.set(this._positions[o],this._positions[o+1],this._positions[o+2]).applyMatrix4(s),this._positions[o]=this._point.x,this._positions[o+1]=this._point.y,this._positions[o+2]=this._point.z}const i=this.geometry.getAttribute("instanceStart");i&&(i.data.needsUpdate=!0),this._lastRootMatrix.set(this.entityObject.matrixWorld.elements)}dispose(){this.geometry.dispose(),this.material.dispose()}}function bo({BlendFunction:c,KernelSize:t,OutlineEffect:e},i,s,o){const n=new e(i,s,{blendFunction:c.ALPHA,visibleEdgeColor:o.visible,hiddenEdgeColor:o.hidden,edgeStrength:5,pulseSpeed:0,blur:!0,kernelSize:t.MEDIUM,resolutionScale:.5,xRay:!0});n.selectionLayer=_e,s.layers.disable(_e);const r=n.getFragmentShader(),l="vec3 color=edge.x*visibleEdgeColor+edge.y*hiddenEdgeColor;",a="edge*=(edgeStrength*mask.x*pulse);";r.includes(l)&&r.includes(a)&&(n.setFragmentShader(r.replace("uniform float edgeStrength;","uniform float edgeStrength;uniform float volterCrisp;").replace(a,"edge*=(edgeStrength*(volterCrisp>0.5?1.0:mask.x)*pulse);").replace(l,`${l}if(volterCrisp>0.5){float volterSum=edge.x+edge.y;if(volterSum>0.0)color/=volterSum;edge=min(edge,vec2(1.0));}`)),n.uniforms.set("volterCrisp",{value:0}));const h=n.update.bind(n);return n.update=(d,f,u)=>{const m=n.camera,_=m.layers.isEnabled(P);m.layers.disable(P);try{h(d,f,u)}finally{_&&m.layers.enable(P)}},gt.set(n,{colors:o,roots:0}),Kt(n),n}const xe=new WeakMap;function An(c,t,e,i,s){const o=xe.get(t)?.pop();return o?(o.mainScene=e,o.mainCamera=i,i.layers.disable(_e),gt.set(o,{colors:s,roots:0}),Kt(o),o):bo(c,e,i,s)}function Pn(c,t,e){t.selection.clear(),e?.setEffects([]);const i=xe.get(c)??[];i.includes(t)||i.push(t),xe.set(c,i)}const xo=`uniform lowp sampler2D inputBuffer;uniform vec2 texelSize;uniform float volterReach;
2
+ import{kL as Oi,kS as ht,lf as De,lg as Re,lh as je,kK as ki,li as Di,lj as Fe,d6 as Ri,lk as Z,eU as Lt,du as V,Y as It,ll as te,aG as ji,fz as Fi,bp as Gi,kN as Ge,kO as Be,kP as Ve,dn as We,ak as Ot,lm as Bi,ln as Vi,lo as Xe,jP as Ne,br as Wi,_ as Xi}from"./index-V4J7xfRg.js";import{a as Ni,i as st}from"./standard-viewport-dressing-uhv_3JvQ.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{E as Ye,a as qe,f as Yi}from"./clip-planes-CnAI6DZn.js";import{b as qi,a as Vt,C as Qe,e as Qi,d as Zi}from"./content-bounds-D5pXeHJN.js";import{EDITOR_LAYER as P,isInEditorOwnedSubtree as J,EDITOR_SELECTION_LAYER as _e,isEditorOwnedObject as Ui}from"./editor-layers-CjeYrUlm.js";import{e as ge,r as Wt,f as Ze}from"./three-BQfhEwUz.js";import{g as tt,s as W}from"./user-data-CifDDvSr.js";import{d as Ki,s as $i,a as Ji}from"./model-thumbnail-chePRlH7.js";import{d as Ue,e as ts}from"./model-inspection-8o57YSZW.js";import{OrbitControls as es}from"./OrbitControls-B13MKuwC.js";import"./three.module-BLhyNg0e.js";import{a8 as is,fo as p,dp as L,e6 as nt,cW as qt,cp as R,bX as lt,aq as O,K as I,N as mt,a$ as Mt,co as y,cZ as at,bV as Y,e$ as yt,ey as U,aV as wi,cm as ft,db as xi,aI as Qt,bh as K,eV as ss,_ as C,cj as j,aO as Si,c0 as Zt,b_ as Ci,I as xt,cP as os,c8 as ns,e as rs,ap as as,A as ls,c7 as Ee,b$ as cs,da as Ke,fd as et,el as hs,d9 as ds,d5 as $e,j as ps,aE as us,eg as fs,cg as dt,fA as ms,aF as _s,de as gs,eD as ys,bk as vs,S as bs,ex as ws,a5 as xs,ej as it,eE as Je,eF as ti,em as Ss,T as Mi,c1 as Ai}from"./three.core-3arARmh6.js";import{L as ye,a as ve,b as be}from"./LineSegments2-DN9pUfWA.js";import{B as Cs}from"./three.quarks.esm-C_HmSKXo.js";import{b as Ms,e as As}from"./live-gesture-lock-DJbrjOqf.js";import{f as Ps}from"./editor-shell-store-DckLm6m8.js";import{a as Hs,e as Es}from"./entity-object-V13bGmay.js";import{e as Ts,v as kt,i as zs,d as Ls}from"./three-integration-DeWYFf1x.js";import{f as ei,v as Is,s as Os}from"./scene-framing-DzSL2Cld.js";import{a as ks}from"./live-mixers-B-bwLZ7c.js";function we(c){const t=tt(c,"triggerVolume");if(!t||typeof t!="object")return null;const{radius:e}=t;return typeof e=="number"&&Number.isFinite(e)&&e>0?{radius:e}:null}const ot=new nt,k=new p,$=new p,T=new L,ii={X:new p(1,0,0),Y:new p(0,1,0),Z:new p(0,0,1)},ee={type:"change"},si={type:"mouseDown",mode:null},oi={type:"mouseUp",mode:null},ni={type:"objectChange"};class ie extends is{constructor(t,e=null){super(void 0,e);const i=new Bs(this);this._root=i;const s=new Vs;this._gizmo=s,i.add(s);const o=new Ws;this._plane=o,i.add(o);const n=this;function r(b,S){let z=S;Object.defineProperty(n,b,{get:function(){return z!==void 0?z:S},set:function(x){z!==x&&(z=x,o[b]=x,s[b]=x,n.dispatchEvent({type:b+"-changed",value:x}),n.dispatchEvent(ee))}}),n[b]=S,o[b]=S,s[b]=S}r("camera",t),r("object",void 0),r("enabled",!0),r("axis",null),r("mode","translate"),r("translationSnap",null),r("rotationSnap",null),r("scaleSnap",null),r("space","world"),r("size",1),r("dragging",!1),r("showX",!0),r("showY",!0),r("showZ",!0),r("minX",-1/0),r("maxX",1/0),r("minY",-1/0),r("maxY",1/0),r("minZ",-1/0),r("maxZ",1/0);const l=new p,a=new p,h=new L,d=new L,f=new p,u=new L,m=new p,_=new p,g=new p,v=0,w=new p;r("worldPosition",l),r("worldPositionStart",a),r("worldQuaternion",h),r("worldQuaternionStart",d),r("cameraPosition",f),r("cameraQuaternion",u),r("pointStart",m),r("pointEnd",_),r("rotationAxis",g),r("rotationAngle",v),r("eye",w),this._offset=new p,this._startNorm=new p,this._endNorm=new p,this._cameraScale=new p,this._parentPosition=new p,this._parentQuaternion=new L,this._parentQuaternionInv=new L,this._parentScale=new p,this._worldScaleStart=new p,this._worldQuaternionInv=new L,this._worldScale=new p,this._positionStart=new p,this._quaternionStart=new L,this._scaleStart=new p,this._getPointer=Ds.bind(this),this._onPointerDown=js.bind(this),this._onPointerHover=Rs.bind(this),this._onPointerMove=Fs.bind(this),this._onPointerUp=Gs.bind(this),e!==null&&this.connect(e)}connect(t){super.connect(t),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointermove",this._onPointerHover),this.domElement.addEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerHover),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="auto"}getHelper(){return this._root}pointerHover(t){if(this.object===void 0||this.dragging===!0)return;t!==null&&ot.setFromCamera(t,this.camera);const e=se(this._gizmo.picker[this.mode],ot);e?this.axis=e.object.name:this.axis=null}pointerDown(t){if(!(this.object===void 0||this.dragging===!0||t!=null&&t.button!==0)&&this.axis!==null){t!==null&&ot.setFromCamera(t,this.camera);const e=se(this._plane,ot,!0);e&&(this.object.updateMatrixWorld(),this.object.parent.updateMatrixWorld(),this._positionStart.copy(this.object.position),this._quaternionStart.copy(this.object.quaternion),this._scaleStart.copy(this.object.scale),this.object.matrixWorld.decompose(this.worldPositionStart,this.worldQuaternionStart,this._worldScaleStart),this.pointStart.copy(e.point).sub(this.worldPositionStart)),this.dragging=!0,si.mode=this.mode,this.dispatchEvent(si)}}pointerMove(t){const e=this.axis,i=this.mode,s=this.object;let o=this.space;if(i==="scale"?o="local":(e==="E"||e==="XYZE"||e==="XYZ")&&(o="world"),s===void 0||e===null||this.dragging===!1||t!==null&&t.button!==-1)return;t!==null&&ot.setFromCamera(t,this.camera);const n=se(this._plane,ot,!0);if(n){if(this.pointEnd.copy(n.point).sub(this.worldPositionStart),i==="translate")this._offset.copy(this.pointEnd).sub(this.pointStart),o==="local"&&e!=="XYZ"&&this._offset.applyQuaternion(this._worldQuaternionInv),e.indexOf("X")===-1&&(this._offset.x=0),e.indexOf("Y")===-1&&(this._offset.y=0),e.indexOf("Z")===-1&&(this._offset.z=0),o==="local"&&e!=="XYZ"?this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale):this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale),s.position.copy(this._offset).add(this._positionStart),this.translationSnap&&(o==="local"&&(s.position.applyQuaternion(T.copy(this._quaternionStart).invert()),e.search("X")!==-1&&(s.position.x=Math.round(s.position.x/this.translationSnap)*this.translationSnap),e.search("Y")!==-1&&(s.position.y=Math.round(s.position.y/this.translationSnap)*this.translationSnap),e.search("Z")!==-1&&(s.position.z=Math.round(s.position.z/this.translationSnap)*this.translationSnap),s.position.applyQuaternion(this._quaternionStart)),o==="world"&&(s.parent&&s.position.add(k.setFromMatrixPosition(s.parent.matrixWorld)),e.search("X")!==-1&&(s.position.x=Math.round(s.position.x/this.translationSnap)*this.translationSnap),e.search("Y")!==-1&&(s.position.y=Math.round(s.position.y/this.translationSnap)*this.translationSnap),e.search("Z")!==-1&&(s.position.z=Math.round(s.position.z/this.translationSnap)*this.translationSnap),s.parent&&s.position.sub(k.setFromMatrixPosition(s.parent.matrixWorld)))),s.position.x=Math.max(this.minX,Math.min(this.maxX,s.position.x)),s.position.y=Math.max(this.minY,Math.min(this.maxY,s.position.y)),s.position.z=Math.max(this.minZ,Math.min(this.maxZ,s.position.z));else if(i==="scale"){if(e.search("XYZ")!==-1){let r=this.pointEnd.length()/this.pointStart.length();this.pointEnd.dot(this.pointStart)<0&&(r*=-1),$.set(r,r,r)}else k.copy(this.pointStart),$.copy(this.pointEnd),k.applyQuaternion(this._worldQuaternionInv),$.applyQuaternion(this._worldQuaternionInv),$.divide(k),e.search("X")===-1&&($.x=1),e.search("Y")===-1&&($.y=1),e.search("Z")===-1&&($.z=1);s.scale.copy(this._scaleStart).multiply($),this.scaleSnap&&(e.search("X")!==-1&&(s.scale.x=Math.round(s.scale.x/this.scaleSnap)*this.scaleSnap||this.scaleSnap),e.search("Y")!==-1&&(s.scale.y=Math.round(s.scale.y/this.scaleSnap)*this.scaleSnap||this.scaleSnap),e.search("Z")!==-1&&(s.scale.z=Math.round(s.scale.z/this.scaleSnap)*this.scaleSnap||this.scaleSnap))}else if(i==="rotate"){this._offset.copy(this.pointEnd).sub(this.pointStart);const r=20/this.worldPosition.distanceTo(k.setFromMatrixPosition(this.camera.matrixWorld));let l=!1;e==="XYZE"?(this.rotationAxis.copy(this._offset).cross(this.eye).normalize(),this.rotationAngle=this._offset.dot(k.copy(this.rotationAxis).cross(this.eye))*r):(e==="X"||e==="Y"||e==="Z")&&(this.rotationAxis.copy(ii[e]),k.copy(ii[e]),o==="local"&&k.applyQuaternion(this.worldQuaternion),k.cross(this.eye),k.length()===0?l=!0:this.rotationAngle=this._offset.dot(k.normalize())*r),(e==="E"||l)&&(this.rotationAxis.copy(this.eye),this.rotationAngle=this.pointEnd.angleTo(this.pointStart),this._startNorm.copy(this.pointStart).normalize(),this._endNorm.copy(this.pointEnd).normalize(),this.rotationAngle*=this._endNorm.cross(this._startNorm).dot(this.eye)<0?1:-1),this.rotationSnap&&(this.rotationAngle=Math.round(this.rotationAngle/this.rotationSnap)*this.rotationSnap),o==="local"&&e!=="E"&&e!=="XYZE"?(s.quaternion.copy(this._quaternionStart),s.quaternion.multiply(T.setFromAxisAngle(this.rotationAxis,this.rotationAngle)).normalize()):(this.rotationAxis.applyQuaternion(this._parentQuaternionInv),s.quaternion.copy(T.setFromAxisAngle(this.rotationAxis,this.rotationAngle)),s.quaternion.multiply(this._quaternionStart).normalize())}this.dispatchEvent(ee),this.dispatchEvent(ni)}}pointerUp(t){t!==null&&t.button!==0||(this.dragging&&this.axis!==null&&(oi.mode=this.mode,this.dispatchEvent(oi)),this.dragging=!1,this.axis=null)}dispose(){this.disconnect(),this._root.dispose()}attach(t){return this.object=t,this._root.visible=!0,this}detach(){return this.object=void 0,this.axis=null,this._root.visible=!1,this}reset(){this.enabled&&this.dragging&&(this.object.position.copy(this._positionStart),this.object.quaternion.copy(this._quaternionStart),this.object.scale.copy(this._scaleStart),this.dispatchEvent(ee),this.dispatchEvent(ni),this.pointStart.copy(this.pointEnd))}getRaycaster(){return ot}getMode(){return this.mode}setMode(t){this.mode=t}setTranslationSnap(t){this.translationSnap=t}setRotationSnap(t){this.rotationSnap=t}setScaleSnap(t){this.scaleSnap=t}setSize(t){this.size=t}setSpace(t){this.space=t}setColors(t,e,i,s){const o=this._gizmo.materialLib;o.xAxis.color.set(t),o.yAxis.color.set(e),o.zAxis.color.set(i),o.active.color.set(s),o.xAxisTransparent.color.set(t),o.yAxisTransparent.color.set(e),o.zAxisTransparent.color.set(i),o.activeTransparent.color.set(s),o.xAxis._color&&o.xAxis._color.set(t),o.yAxis._color&&o.yAxis._color.set(e),o.zAxis._color&&o.zAxis._color.set(i),o.active._color&&o.active._color.set(s),o.xAxisTransparent._color&&o.xAxisTransparent._color.set(t),o.yAxisTransparent._color&&o.yAxisTransparent._color.set(e),o.zAxisTransparent._color&&o.zAxisTransparent._color.set(i),o.activeTransparent._color&&o.activeTransparent._color.set(s)}}function Ds(c){if(this.domElement.ownerDocument.pointerLockElement)return{x:0,y:0,button:c.button};{const t=this.domElement.getBoundingClientRect();return{x:(c.clientX-t.left)/t.width*2-1,y:-(c.clientY-t.top)/t.height*2+1,button:c.button}}}function Rs(c){if(this.enabled)switch(c.pointerType){case"mouse":case"pen":this.pointerHover(this._getPointer(c));break}}function js(c){this.enabled&&(document.pointerLockElement||this.domElement.setPointerCapture(c.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.pointerHover(this._getPointer(c)),this.pointerDown(this._getPointer(c)))}function Fs(c){this.enabled&&this.pointerMove(this._getPointer(c))}function Gs(c){this.enabled&&(this.domElement.releasePointerCapture(c.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.pointerUp(this._getPointer(c)))}function se(c,t,e){const i=t.intersectObject(c,!0);for(let s=0;s<i.length;s++)if(i[s].object.visible||e)return i[s];return!1}const Dt=new wi,H=new p(0,1,0),ri=new p(0,0,0),ai=new ft,Rt=new L,Xt=new L,N=new p,li=new ft,St=new p(1,0,0),rt=new p(0,1,0),Ct=new p(0,0,1),jt=new p,vt=new p,bt=new p;class Bs extends qt{constructor(t){super(),this.isTransformControlsRoot=!0,this.controls=t,this.visible=!1}updateMatrixWorld(t){const e=this.controls;e.object!==void 0&&(e.object.updateMatrixWorld(),e.object.parent===null?console.error("TransformControls: The attached 3D object must be a part of the scene graph."):e.object.parent.matrixWorld.decompose(e._parentPosition,e._parentQuaternion,e._parentScale),e.object.matrixWorld.decompose(e.worldPosition,e.worldQuaternion,e._worldScale),e._parentQuaternionInv.copy(e._parentQuaternion).invert(),e._worldQuaternionInv.copy(e.worldQuaternion).invert()),e.camera.updateMatrixWorld(),e.camera.matrixWorld.decompose(e.cameraPosition,e.cameraQuaternion,e._cameraScale),e.camera.isOrthographicCamera?e.camera.getWorldDirection(e.eye).negate():e.eye.copy(e.cameraPosition).sub(e.worldPosition).normalize(),super.updateMatrixWorld(t)}dispose(){this.traverse(function(t){t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose()})}}class Vs extends qt{constructor(){super(),this.isTransformControlsGizmo=!0,this.type="TransformControlsGizmo";const t=new R({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),e=new lt({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),i=t.clone();i.opacity=.15;const s=e.clone();s.opacity=.5;const o=t.clone();o.color.setHex(16711680);const n=t.clone();n.color.setHex(65280);const r=t.clone();r.color.setHex(255);const l=t.clone();l.color.setHex(16711680),l.opacity=.5;const a=t.clone();a.color.setHex(65280),a.opacity=.5;const h=t.clone();h.color.setHex(255),h.opacity=.5;const d=t.clone();d.opacity=.25;const f=t.clone();f.color.setHex(16776960),f.opacity=.25;const u=t.clone();u.color.setHex(16776960);const m=t.clone();m.color.setHex(7895160),this.materialLib={xAxis:o,yAxis:n,zAxis:r,active:u,xAxisTransparent:l,yAxisTransparent:a,zAxisTransparent:h,activeTransparent:f};const _=new O(0,.04,.1,12);_.translate(0,.05,0);const g=new I(.08,.08,.08);g.translate(0,.04,0);const v=new mt;v.setAttribute("position",new Mt([0,0,0,1,0,0],3));const w=new O(.0075,.0075,.5,3);w.translate(0,.25,0);function b(F,Ht){const B=new yt(F,.0075,3,64,Ht*Math.PI*2);return B.rotateY(Math.PI/2),B.rotateX(Math.PI/2),B}function S(){const F=new mt;return F.setAttribute("position",new Mt([0,0,0,1,1,1],3)),F}const z={X:[[new y(_,o),[.5,0,0],[0,0,-Math.PI/2]],[new y(_,o),[-.5,0,0],[0,0,Math.PI/2]],[new y(w,o),[0,0,0],[0,0,-Math.PI/2]]],Y:[[new y(_,n),[0,.5,0]],[new y(_,n),[0,-.5,0],[Math.PI,0,0]],[new y(w,n)]],Z:[[new y(_,r),[0,0,.5],[Math.PI/2,0,0]],[new y(_,r),[0,0,-.5],[-Math.PI/2,0,0]],[new y(w,r),null,[Math.PI/2,0,0]]],XYZ:[[new y(new at(.1,0),d),[0,0,0]]],XY:[[new y(new I(.15,.15,.01),h),[.15,.15,0]]],YZ:[[new y(new I(.15,.15,.01),l),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new y(new I(.15,.15,.01),a),[.15,0,.15],[-Math.PI/2,0,0]]]},x={X:[[new y(new O(.2,0,.6,4),i),[.3,0,0],[0,0,-Math.PI/2]],[new y(new O(.2,0,.6,4),i),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new y(new O(.2,0,.6,4),i),[0,.3,0]],[new y(new O(.2,0,.6,4),i),[0,-.3,0],[0,0,Math.PI]]],Z:[[new y(new O(.2,0,.6,4),i),[0,0,.3],[Math.PI/2,0,0]],[new y(new O(.2,0,.6,4),i),[0,0,-.3],[-Math.PI/2,0,0]]],XYZ:[[new y(new at(.2,0),i)]],XY:[[new y(new I(.2,.2,.01),i),[.15,.15,0]]],YZ:[[new y(new I(.2,.2,.01),i),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new y(new I(.2,.2,.01),i),[.15,0,.15],[-Math.PI/2,0,0]]]},A={START:[[new y(new at(.01,2),s),null,null,null,"helper"]],END:[[new y(new at(.01,2),s),null,null,null,"helper"]],DELTA:[[new Y(S(),s),null,null,null,"helper"]],X:[[new Y(v,s),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new Y(v,s),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new Y(v,s),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]},M={XYZE:[[new y(b(.5,1),m),null,[0,Math.PI/2,0]]],X:[[new y(b(.5,.5),o)]],Y:[[new y(b(.5,.5),n),null,[0,0,-Math.PI/2]]],Z:[[new y(b(.5,.5),r),null,[0,Math.PI/2,0]]],E:[[new y(b(.75,1),f),null,[0,Math.PI/2,0]]]},E={AXIS:[[new Y(v,s),[-1e3,0,0],null,[1e6,1,1],"helper"]]},G={XYZE:[[new y(new U(.25,10,8),i)]],X:[[new y(new yt(.5,.1,4,24),i),[0,0,0],[0,-Math.PI/2,-Math.PI/2]]],Y:[[new y(new yt(.5,.1,4,24),i),[0,0,0],[Math.PI/2,0,0]]],Z:[[new y(new yt(.5,.1,4,24),i),[0,0,0],[0,0,-Math.PI/2]]],E:[[new y(new yt(.75,.1,2,24),i)]]},$t={X:[[new y(g,o),[.5,0,0],[0,0,-Math.PI/2]],[new y(w,o),[0,0,0],[0,0,-Math.PI/2]],[new y(g,o),[-.5,0,0],[0,0,Math.PI/2]]],Y:[[new y(g,n),[0,.5,0]],[new y(w,n)],[new y(g,n),[0,-.5,0],[0,0,Math.PI]]],Z:[[new y(g,r),[0,0,.5],[Math.PI/2,0,0]],[new y(w,r),[0,0,0],[Math.PI/2,0,0]],[new y(g,r),[0,0,-.5],[-Math.PI/2,0,0]]],XY:[[new y(new I(.15,.15,.01),h),[.15,.15,0]]],YZ:[[new y(new I(.15,.15,.01),l),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new y(new I(.15,.15,.01),a),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new y(new I(.1,.1,.1),d)]]},Pt={X:[[new y(new O(.2,0,.6,4),i),[.3,0,0],[0,0,-Math.PI/2]],[new y(new O(.2,0,.6,4),i),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new y(new O(.2,0,.6,4),i),[0,.3,0]],[new y(new O(.2,0,.6,4),i),[0,-.3,0],[0,0,Math.PI]]],Z:[[new y(new O(.2,0,.6,4),i),[0,0,.3],[Math.PI/2,0,0]],[new y(new O(.2,0,.6,4),i),[0,0,-.3],[-Math.PI/2,0,0]]],XY:[[new y(new I(.2,.2,.01),i),[.15,.15,0]]],YZ:[[new y(new I(.2,.2,.01),i),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new y(new I(.2,.2,.01),i),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new y(new I(.2,.2,.2),i),[0,0,0]]]},Jt={X:[[new Y(v,s),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new Y(v,s),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new Y(v,s),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]};function Q(F){const Ht=new qt;for(const B in F)for(let ct=F[B].length;ct--;){const D=F[B][ct][0].clone(),Et=F[B][ct][1],Tt=F[B][ct][2],zt=F[B][ct][3],Ii=F[B][ct][4];D.name=B,D.tag=Ii,Et&&D.position.set(Et[0],Et[1],Et[2]),Tt&&D.rotation.set(Tt[0],Tt[1],Tt[2]),zt&&D.scale.set(zt[0],zt[1],zt[2]),D.updateMatrix();const ke=D.geometry.clone();ke.applyMatrix4(D.matrix),D.geometry=ke,D.renderOrder=1/0,D.position.set(0,0,0),D.rotation.set(0,0,0),D.scale.set(1,1,1),Ht.add(D)}return Ht}this.gizmo={},this.picker={},this.helper={},this.add(this.gizmo.translate=Q(z)),this.add(this.gizmo.rotate=Q(M)),this.add(this.gizmo.scale=Q($t)),this.add(this.picker.translate=Q(x)),this.add(this.picker.rotate=Q(G)),this.add(this.picker.scale=Q(Pt)),this.add(this.helper.translate=Q(A)),this.add(this.helper.rotate=Q(E)),this.add(this.helper.scale=Q(Jt)),this.picker.translate.visible=!1,this.picker.rotate.visible=!1,this.picker.scale.visible=!1}updateMatrixWorld(t){const i=(this.mode==="scale"?"local":this.space)==="local"?this.worldQuaternion:Xt;this.gizmo.translate.visible=this.mode==="translate",this.gizmo.rotate.visible=this.mode==="rotate",this.gizmo.scale.visible=this.mode==="scale",this.helper.translate.visible=this.mode==="translate",this.helper.rotate.visible=this.mode==="rotate",this.helper.scale.visible=this.mode==="scale";let s=[];s=s.concat(this.picker[this.mode].children),s=s.concat(this.gizmo[this.mode].children),s=s.concat(this.helper[this.mode].children);for(let o=0;o<s.length;o++){const n=s[o];n.visible=!0,n.rotation.set(0,0,0),n.position.copy(this.worldPosition);let r;if(this.camera.isOrthographicCamera?r=(this.camera.top-this.camera.bottom)/this.camera.zoom:r=this.worldPosition.distanceTo(this.cameraPosition)*Math.min(1.9*Math.tan(Math.PI*this.camera.fov/360)/this.camera.zoom,7),n.scale.set(1,1,1).multiplyScalar(r*this.size/4),n.tag==="helper"){n.visible=!1,n.name==="AXIS"?(n.visible=!!this.axis,this.axis==="X"&&(T.setFromEuler(Dt.set(0,0,0)),n.quaternion.copy(i).multiply(T),Math.abs(H.copy(St).applyQuaternion(i).dot(this.eye))>.9&&(n.visible=!1)),this.axis==="Y"&&(T.setFromEuler(Dt.set(0,0,Math.PI/2)),n.quaternion.copy(i).multiply(T),Math.abs(H.copy(rt).applyQuaternion(i).dot(this.eye))>.9&&(n.visible=!1)),this.axis==="Z"&&(T.setFromEuler(Dt.set(0,Math.PI/2,0)),n.quaternion.copy(i).multiply(T),Math.abs(H.copy(Ct).applyQuaternion(i).dot(this.eye))>.9&&(n.visible=!1)),this.axis==="XYZE"&&(T.setFromEuler(Dt.set(0,Math.PI/2,0)),H.copy(this.rotationAxis),n.quaternion.setFromRotationMatrix(ai.lookAt(ri,H,rt)),n.quaternion.multiply(T),n.visible=this.dragging),this.axis==="E"&&(n.visible=!1)):n.name==="START"?(n.position.copy(this.worldPositionStart),n.visible=this.dragging):n.name==="END"?(n.position.copy(this.worldPosition),n.visible=this.dragging):n.name==="DELTA"?(n.position.copy(this.worldPositionStart),n.quaternion.copy(this.worldQuaternionStart),k.set(1e-10,1e-10,1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1),k.applyQuaternion(this.worldQuaternionStart.clone().invert()),n.scale.copy(k),n.visible=this.dragging):(n.quaternion.copy(i),this.dragging?n.position.copy(this.worldPositionStart):n.position.copy(this.worldPosition),this.axis&&(n.visible=this.axis.search(n.name)!==-1));continue}n.quaternion.copy(i),this.mode==="translate"||this.mode==="scale"?(n.name==="X"&&Math.abs(H.copy(St).applyQuaternion(i).dot(this.eye))>.99&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),n.name==="Y"&&Math.abs(H.copy(rt).applyQuaternion(i).dot(this.eye))>.99&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),n.name==="Z"&&Math.abs(H.copy(Ct).applyQuaternion(i).dot(this.eye))>.99&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),n.name==="XY"&&Math.abs(H.copy(Ct).applyQuaternion(i).dot(this.eye))<.2&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),n.name==="YZ"&&Math.abs(H.copy(St).applyQuaternion(i).dot(this.eye))<.2&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),n.name==="XZ"&&Math.abs(H.copy(rt).applyQuaternion(i).dot(this.eye))<.2&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1)):this.mode==="rotate"&&(Rt.copy(i),H.copy(this.eye).applyQuaternion(T.copy(i).invert()),n.name.search("E")!==-1&&n.quaternion.setFromRotationMatrix(ai.lookAt(this.eye,ri,rt)),n.name==="X"&&(T.setFromAxisAngle(St,Math.atan2(-H.y,H.z)),T.multiplyQuaternions(Rt,T),n.quaternion.copy(T)),n.name==="Y"&&(T.setFromAxisAngle(rt,Math.atan2(H.x,H.z)),T.multiplyQuaternions(Rt,T),n.quaternion.copy(T)),n.name==="Z"&&(T.setFromAxisAngle(Ct,Math.atan2(H.y,H.x)),T.multiplyQuaternions(Rt,T),n.quaternion.copy(T))),n.visible=n.visible&&(n.name.indexOf("X")===-1||this.showX),n.visible=n.visible&&(n.name.indexOf("Y")===-1||this.showY),n.visible=n.visible&&(n.name.indexOf("Z")===-1||this.showZ),n.visible=n.visible&&(n.name.indexOf("E")===-1||this.showX&&this.showY&&this.showZ),n.material._color=n.material._color||n.material.color.clone(),n.material._opacity=n.material._opacity||n.material.opacity,n.material.color.copy(n.material._color),n.material.opacity=n.material._opacity,this.enabled&&this.axis&&(n.name===this.axis?(n.material.color.copy(this.materialLib.active.color),n.material.opacity=1):this.axis.split("").some(function(l){return n.name===l})&&(n.material.color.copy(this.materialLib.active.color),n.material.opacity=1))}super.updateMatrixWorld(t)}}class Ws extends y{constructor(){super(new xi(1e5,1e5,2,2),new R({visible:!1,wireframe:!0,side:Qt,transparent:!0,opacity:.1,toneMapped:!1})),this.isTransformControlsPlane=!0,this.type="TransformControlsPlane"}updateMatrixWorld(t){let e=this.space;switch(this.position.copy(this.worldPosition),this.mode==="scale"&&(e="local"),jt.copy(St).applyQuaternion(e==="local"?this.worldQuaternion:Xt),vt.copy(rt).applyQuaternion(e==="local"?this.worldQuaternion:Xt),bt.copy(Ct).applyQuaternion(e==="local"?this.worldQuaternion:Xt),H.copy(vt),this.mode){case"translate":case"scale":switch(this.axis){case"X":H.copy(this.eye).cross(jt),N.copy(jt).cross(H);break;case"Y":H.copy(this.eye).cross(vt),N.copy(vt).cross(H);break;case"Z":H.copy(this.eye).cross(bt),N.copy(bt).cross(H);break;case"XY":N.copy(bt);break;case"YZ":N.copy(jt);break;case"XZ":H.copy(bt),N.copy(vt);break;case"XYZ":case"E":N.set(0,0,0);break}break;case"rotate":default:N.set(0,0,0)}N.length()===0?this.quaternion.copy(this.cameraQuaternion):(li.lookAt(k.set(0,0,0),N,H),this.quaternion.setFromRotationMatrix(li)),super.updateMatrixWorld(t)}}const oe=new C(4441855),Ft=new C(16758858),Gt=new C(14185983),Xs=new C(16731496),ci=new C(16777215);function ne(c){return new Y(new mt,new lt({color:c,depthTest:!1,depthWrite:!1,transparent:!0,toneMapped:!1}))}function re(c,t){return new y(c,new R({color:t,depthTest:!1,depthWrite:!1,transparent:!0,toneMapped:!1}))}function ae(c,t){if(c.visible=t.length>1,!c.visible)return;let e=c.geometry.getAttribute("position");(!e||e.count!==t.length)&&(e=new Mt(t.length*3,3),c.geometry.setAttribute("position",e));for(let i=0;i<t.length;i++)e.setXYZ(i,t[i].x,t[i].y,t[i].z);e.needsUpdate=!0,c.geometry.computeBoundingSphere()}class Ns extends K{constructor(t){super(),this.source=t,this.name="Constraint Helper",this.renderOrder=999,W(this,"editorHelper",!0),W(this,"editorHelperType","constraints"),this.layers.set(P),this.refreshStructure()}selected=!1;hoveredControl=null;selectedObjects=new Set;visuals=[];setSelected(t){this.selected=t}setSelectedObjects(t){this.selectedObjects=t}controlMeshes(){return this.visuals.flatMap(t=>[t.targetHit,t.poleHit].filter(e=>e.visible))}presents(t){return t===this.source?!0:this.visuals.some(e=>{const i=e.mark.getSnapshot();return t===i.target||t===i.pole})}controlFor(t){for(const e of this.visuals){const i=e.mark.getSnapshot();if((t===e.target||t===e.targetHit)&&i.target)return{kind:"target",label:i.target.name||`${e.mark.config.label} target`,object:i.target,mesh:e.target};if((t===e.pole||t===e.poleHit)&&i.pole)return{kind:"pole",label:i.pole.name||`${e.mark.config.label} pole`,object:i.pole,mesh:e.pole}}return null}setHoveredControl(t){this.hoveredControl=t}update(t){this.refreshStructure();for(const e of this.visuals)this.updateVisual(e,t)}dispose(){this.clearVisuals(),this.removeFromParent()}refreshStructure(){const t=ge(this.source);t.length===this.visuals.length&&t.every((i,s)=>{const o=i.getSnapshot(),n=o.chain.length>0?o.chain.length:o.constrained?1:0;return this.visuals[s]?.mark===i&&this.visuals[s]?.positions.length===n})||(this.clearVisuals(),this.visuals=t.map(i=>this.makeVisual(i)))}makeVisual(t){const e=t.getSnapshot(),i=e.chain.length>0?e.chain:e.constrained?[e.constrained]:[],s=ne(oe),o=ne(Ft),n=ne(Gt),r=i.map(()=>re(new U(.035,10,7),oe)),l=re(new at(.085),Ft),a=re(new ss(.075),Gt),h=new R({transparent:!0,opacity:0,depthTest:!1,depthWrite:!1,colorWrite:!1}),d=new y(new U(.16,10,7),h),f=new y(new U(.15,10,7),h.clone());for(const u of[s,o,n,...r,l,a,d,f])u.renderOrder=this.renderOrder,u.layers.set(P),this.add(u);return{mark:t,chain:s,targetLine:o,poleLine:n,joints:r,target:l,pole:a,targetHit:d,poleHit:f,positions:i.map(()=>new p),targetPosition:new p,polePosition:new p}}updateVisual(t,e){const i=t.mark.getSnapshot(),s=i.chain.length>0?i.chain:i.constrained?[i.constrained]:[];for(let f=0;f<s.length;f++)s[f].getWorldPosition(t.positions[f]);ae(t.chain,t.positions);for(let f=0;f<t.joints.length;f++){const u=t.joints[f],m=t.positions[f];u.visible=!!m,m&&(u.position.copy(m),u.scale.setScalar(this.handleScale(e,m)))}const o=t.positions.at(-1),n=i.target?.getWorldPosition(t.targetPosition)??null,r=i.pole?.getWorldPosition(t.polePosition)??null;ae(t.targetLine,o&&n?[o,n]:[]),ae(t.poleLine,t.positions[0]&&r?[t.positions[0],r]:[]),t.target.visible=n!==null,n&&(t.target.position.copy(n),t.target.scale.setScalar(this.handleScale(e,n)*(this.hoveredControl===t.target?1.22:1))),t.targetHit.visible=n!==null,n&&(t.targetHit.position.copy(n),t.targetHit.scale.copy(t.target.scale)),t.pole.visible=r!==null,r&&(t.pole.position.copy(r),t.pole.scale.setScalar(this.handleScale(e,r)*(this.hoveredControl===t.pole?1.22:1))),t.poleHit.visible=r!==null,r&&(t.poleHit.position.copy(r),t.poleHit.scale.copy(t.pole.scale));const l=i.status==="error"||i.status==="unresolved",a=this.selected?1:.52;for(const f of[t.chain,...t.joints]){const u=f.material;u.color.copy(l?Xs:oe),u.opacity=a}const h=this.hoveredControl===t.target||i.target!==null&&this.selectedObjects.has(i.target),d=this.hoveredControl===t.pole||i.pole!==null&&this.selectedObjects.has(i.pole);t.target.material.color.copy(h?ci:Ft),t.pole.material.color.copy(d?ci:Gt),t.targetLine.material.color.copy(Ft),t.poleLine.material.color.copy(Gt),t.targetLine.material.opacity=a,t.poleLine.material.opacity=a,t.target.material.opacity=h?1:a,t.pole.material.opacity=d?1:a}handleScale(t,e){return j.clamp(t.position.distanceTo(e)/8,.65,4)}clearVisuals(){for(const t of[...this.children]){t.removeFromParent();const e=t;e.geometry.dispose();const i=Array.isArray(e.material)?e.material:[e.material];for(const s of i)s.dispose()}this.visuals=[],this.hoveredControl=null}}const Ys=new C(4892927),qs=new C(7718143),Qs=new C(16758858),Zs=new C(16777215);class Us extends K{constructor(t){super(),this.source=t,this.name="Reflection Probe Helper",this.matrixAutoUpdate=!1,this.renderOrder=998,W(this,"editorHelper",!0),W(this,"editorHelperType","reflection-probes"),this.layers.set(P),this.refresh(!0)}signature="";selected=!1;setSelected(t){this.selected!==t&&(this.selected=t,this.refresh(!0))}update(){this.refresh(!1),this.source.updateWorldMatrix(!0,!1),this.matrix.copy(this.source.matrixWorld),this.matrixWorldNeedsUpdate=!0}dispose(){this.clearVisuals(),this.removeFromParent()}refresh(t){const e=Wt(this.source);if(!e)return;const i=e.config,s=JSON.stringify(i);if(!t&&s===this.signature)return;this.signature=s,this.clearVisuals();const o=this.selected?qs:Ys,n=this.selected?1:.62,r=Math.max(0,i.blendDistance);if(i.shape==="sphere"){const a=Math.max(.01,i.radius);this.addWire(new U(a,24,16),o,n),r>0&&a-r>.01&&this.addWire(new U(a-r,20,12),o,this.selected?.55:.28)}else{const[a,h,d]=i.size.map(u=>Math.max(.01,u));this.addWire(new I(a,h,d),o,n);const f=[a-r*2,h-r*2,d-r*2];r>0&&f.every(u=>u>.01)&&this.addWire(new I(f[0],f[1],f[2]),o,this.selected?.55:.28)}if(i.parallaxProjection){const[a,h,d]=i.parallaxSize.map(u=>Math.max(.01,u));this.addWire(new I(a,h,d),Qs,this.selected?.9:.45).position.fromArray(i.parallaxOffset)}this.addWire(new at(this.selected?.16:.11),Zs,this.selected?1:.72).position.fromArray(i.captureOffset),this.traverse(a=>a.layers.set(P))}addWire(t,e,i){const s=new Si(t);t.dispose();const o=new lt({color:e,depthTest:!1,transparent:!0,opacity:i,toneMapped:!1}),n=new Zt(s,o);return n.renderOrder=this.renderOrder,this.add(n),n}clearVisuals(){for(const t of[...this.children]){t.removeFromParent();const e=t;e.geometry?.dispose();const i=Array.isArray(e.material)?e.material:[e.material];for(const s of i)s?.dispose()}}}const Te=new WeakMap,Pi=new U(1,12,8);function _t(c){return new p(c[0],c[1],c[2])}function At(c){const t={color:c.color,transparent:!0,opacity:c.opacity??.68,depthTest:!1};return c.dashed?new Ci({...t,dashSize:.18,gapSize:.12}):new lt(t)}function X(c,t,e,i=!1){const s=i&&t.length>0?[...t,t[0]]:[...t],o=new Y(new mt().setFromPoints(s),e);o.renderOrder=997,o.layers.set(P),e instanceof Ci&&o.computeLineDistances(),c.add(o)}function Nt(c,t,e,i,s=64){const o=[];for(let n=0;n<s;n++){const r=n/s*Math.PI*2;o.push(c.clone().addScaledVector(e,Math.cos(r)*t).addScaledVector(i,Math.sin(r)*t))}return o}function Ks(c){const t=new K,e=_t(c.center),i=At(c);return X(t,Nt(e,c.radius,new p(1,0,0),new p(0,1,0)),i,!0),X(t,Nt(e,c.radius,new p(1,0,0),new p(0,0,1)),i,!0),X(t,Nt(e,c.radius,new p(0,1,0),new p(0,0,1)),i,!0),t}function $s(c){const t=new K;return X(t,c.points.map(_t),At(c)),t}function Js(c){const t=new K,e=_t(c.origin),i=_t(c.direction).normalize(),s=Math.abs(i.y)<.9?new p(0,1,0):new p(1,0,0),o=new p().crossVectors(s,i).normalize(),n=new p().crossVectors(i,o).normalize(),r=j.degToRad(Math.max(0,Math.min(360,c.angle))/2),l=At(c),a=[];for(let h=0;h<64;h++){const d=h/64*Math.PI*2,f=o.clone().multiplyScalar(Math.cos(d)).addScaledVector(n,Math.sin(d));a.push(e.clone().addScaledVector(i,Math.cos(r)*c.length).addScaledVector(f,Math.sin(r)*c.length))}X(t,a,l,!0);for(const h of[0,16,32,48])X(t,[e,a[h]],l);return t}function to(c,t,e){return c.applyQuaternion(new L(...e)).add(new p(...t))}function eo(c){const t=new K,e=At(c),[i,s,o]=c.halfExtents,n=[[-i,-s,-o],[i,-s,-o],[i,s,-o],[-i,s,-o],[-i,-s,o],[i,-s,o],[i,s,o],[-i,s,o]].map(([r,l,a])=>to(new p(r,l,a),c.center,c.rotation));for(const[r,l]of[[0,1],[1,2],[2,3],[3,0],[4,5],[5,6],[6,7],[7,4],[0,4],[1,5],[2,6],[3,7]])X(t,[n[r],n[l]],e);return t}function io(c){const t=new K,e=At(c),i=new L(...c.rotation),s=_t(c.center),o=r=>r.applyQuaternion(i).add(s),n=(r,l,a)=>Nt(new p(0,r,0),c.radius,l,a).map(o);X(t,n(c.halfHeight,new p(1,0,0),new p(0,0,1)),e,!0),X(t,n(-c.halfHeight,new p(1,0,0),new p(0,0,1)),e,!0);for(const[r,l]of[[c.radius,0],[-c.radius,0],[0,c.radius],[0,-c.radius]])X(t,[o(new p(r,-c.halfHeight,l)),o(new p(r,c.halfHeight,l))],e);for(const r of["x","z"]){const l=[];for(let a=0;a<=32;a++){const h=a/32*Math.PI,d=new p(0,c.halfHeight+Math.sin(h)*c.radius,0);d[r]=Math.cos(h)*c.radius,l.push(o(d))}for(let a=0;a<=32;a++){const h=Math.PI+a/32*Math.PI,d=new p(0,-c.halfHeight+Math.sin(h)*c.radius,0);d[r]=Math.cos(h)*c.radius,l.push(o(d))}X(t,l,e)}return t}function so(c){const t=c.kind==="line"?$s(c):c.kind==="sphere"?Ks(c):c.kind==="cone"?Js(c):c.kind==="box"?eo(c):io(c);return t.layers.set(P),t.traverse(e=>e.layers.set(P)),t}function oo(c,t){const e=new R({color:t.color,depthTest:!1,transparent:!0,opacity:t.writable?.92:.35}),i=new y(Pi,e);return Object.defineProperty(i,"isSpatialHandleMesh",{value:!0}),i.position.copy(_t(t.position)),i.renderOrder=998,i.layers.set(P),Te.set(i,{nodeId:c,handle:t}),i}function no(c,t){const e=[],i=[];for(const s of t){for(const o of s.guides)e.push(so(o));for(const o of s.handles){const n=oo(c,o);e.push(n),i.push(n)}}return{roots:e,handles:i}}function hi(c){return Te.get(c)??null}function le(c,t){const e=Te.get(c);c.material.color.set(t&&e?.handle.writable?"#ffffff":e?.handle.color??"#ffffff")}function di(c,t){const e=c.position.distanceTo(t.position);c.scale.setScalar(Math.max(.025,e*.012))}function ro(c,t,e){const i=c,s=i.geometry;s&&s!==Pi&&!t.has(s)&&(s.dispose(),t.add(s));const o=Array.isArray(i.material)?i.material:i.material?[i.material]:[];for(const n of o)e.has(n)||(n.dispose(),e.add(n))}function pi(c){const t=new Set,e=new Set;for(const i of c)i.removeFromParent(),i.traverse(s=>ro(s,t,e))}function ce(c,t,e,i=1.15){if(c.isEmpty())return 3;const s=e.clone().normalize(),o=Math.abs(s.dot(t.up))>.999?new p(0,0,1):t.up,n=new p().crossVectors(o,s).normalize(),r=new p().crossVectors(s,n).normalize(),l=c.getCenter(new p);let a=0,h=0,d=0;for(const _ of[c.min.x,c.max.x])for(const g of[c.min.y,c.max.y])for(const v of[c.min.z,c.max.z]){const w=new p(_,g,v).sub(l);d=Math.max(d,Math.abs(w.dot(n))),h=Math.max(h,Math.abs(w.dot(r))),a=Math.max(a,Math.abs(w.dot(s)))}const f=j.degToRad(t.fov*.5),u=Math.atan(Math.tan(f)*Math.max(t.aspect,.01)),m=Math.max(h/Math.tan(f),d/Math.tan(u));return Math.max(m*i+a,t.near*4,.01)}const ao=3,lo=.05,co=.03,ho=.6,po=.15,uo=.08,fo=3,mo=.45,Hi=.001,_o=24,go=6,yo=[[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]];function vo(c){const t=j.clamp(c*po,uo,fo);return Math.max(Math.min(t,c*mo),Hi)}function he(c){return j.clamp(c*lo,co,ho)}function bo(c,t,e=!1){const{min:i,max:s}=c,o=h=>e?Math.max(h/2,Hi):vo(h),n=o(s.x-i.x),r=o(s.y-i.y),l=o(s.z-i.z);let a=0;for(const[h,d,f]of yo){const u=h===0?i.x:s.x,m=d===0?i.y:s.y,_=f===0?i.z:s.z,g=h===0?n:-n,v=d===0?r:-r,w=f===0?l:-l;t[a++]=u,t[a++]=m,t[a++]=_,t[a++]=u+g,t[a++]=m,t[a++]=_,t[a++]=u,t[a++]=m,t[a++]=_,t[a++]=u,t[a++]=m+v,t[a++]=_,t[a++]=u,t[a++]=m,t[a++]=_,t[a++]=u,t[a++]=m,t[a++]=_+w}}class de extends ye{entityObject;_fixedSize;_edges;_objectFrame;_toObject=new ft;_point=new p;_axisX=new p;_axisY=new p;_axisZ=new p;_scale=new p;_positions=new Float32Array(_o*go);_box=new xt;_worldPos=new p;_fixedExtent=new p;_standoff=new p;_lastRootMatrix=new Float32Array(16);_requiresContinuousBounds;constructor(t,e){const i=new ve,s=new be({color:e.color,linewidth:e.lineWidth??ao,worldUnits:!1,alphaToCoverage:!0,toneMapped:!1,depthTest:!1,depthWrite:!1});super(i,s),this.entityObject=t,this._fixedSize=e.fixedSize,this._edges=e.edges===!0,this._objectFrame=e.frame==="object";let o=!1;t.traverse(n=>{const r=n;(n.isSkinnedMesh||Array.isArray(r.morphTargetInfluences)&&r.morphTargetInfluences.length>0||ks(n)!==null)&&(o=!0)}),this._requiresContinuousBounds=o,this.renderOrder=1,this.frustumCulled=!1,i.setPositions(this._positions),this.update()}setColor(t){this.material.color.setHex(t)}updateIfNeeded(){this.entityObject.updateWorldMatrix(!0,!1);const t=this.entityObject.matrixWorld.elements;let e=!1;for(let i=0;i<t.length;i++)if(t[i]!==this._lastRootMatrix[i]){e=!0;break}(e||this._requiresContinuousBounds)&&this.update()}update(){this.entityObject.updateWorldMatrix(!0,!1);const t=this._objectFrame&&this._fixedSize===void 0&&Math.abs(this.entityObject.matrixWorld.determinant())>1e-30;this.entityObject.matrixWorld.extractBasis(this._axisX,this._axisY,this._axisZ);const e=t?this._scale.set(this._axisX.length(),this._axisY.length(),this._axisZ.length()):this._scale.set(1,1,1);if(this._fixedSize!==void 0)this.entityObject.getWorldPosition(this._worldPos),this._fixedExtent.setScalar(this._fixedSize),this._box.setFromCenterAndSize(this._worldPos,this._fixedExtent);else if(t?(this._toObject.copy(this.entityObject.matrixWorld).invert(),qi(this.entityObject,this._toObject,this._box)):Vt(this.entityObject,this._box),this._box.isEmpty())return;if(this._box.getSize(this._standoff).multiply(e),this._standoff.set(he(this._standoff.x),he(this._standoff.y),he(this._standoff.z)).divide(e),this._box.expandByVector(this._standoff),bo(this._box,this._positions,this._edges),t){const s=this.entityObject.matrixWorld;for(let o=0;o<this._positions.length;o+=3)this._point.set(this._positions[o],this._positions[o+1],this._positions[o+2]).applyMatrix4(s),this._positions[o]=this._point.x,this._positions[o+1]=this._point.y,this._positions[o+2]=this._point.z}const i=this.geometry.getAttribute("instanceStart");i&&(i.data.needsUpdate=!0),this._lastRootMatrix.set(this.entityObject.matrixWorld.elements)}dispose(){this.geometry.dispose(),this.material.dispose()}}function wo({BlendFunction:c,KernelSize:t,OutlineEffect:e},i,s,o){const n=new e(i,s,{blendFunction:c.ALPHA,visibleEdgeColor:o.visible,hiddenEdgeColor:o.hidden,edgeStrength:5,pulseSpeed:0,blur:!0,kernelSize:t.MEDIUM,resolutionScale:.5,xRay:!0});n.selectionLayer=_e,s.layers.disable(_e);const r=n.getFragmentShader(),l="vec3 color=edge.x*visibleEdgeColor+edge.y*hiddenEdgeColor;",a="edge*=(edgeStrength*mask.x*pulse);";r.includes(l)&&r.includes(a)&&(n.setFragmentShader(r.replace("uniform float edgeStrength;","uniform float edgeStrength;uniform float volterCrisp;").replace(a,"edge*=(edgeStrength*(volterCrisp>0.5?1.0:mask.x)*pulse);").replace(l,`${l}if(volterCrisp>0.5){float volterSum=edge.x+edge.y;if(volterSum>0.0)color/=volterSum;edge=min(edge,vec2(1.0));}`)),n.uniforms.set("volterCrisp",{value:0}));const h=n.update.bind(n);return n.update=(d,f,u)=>{const m=n.camera,_=m.layers.isEnabled(P);m.layers.disable(P);try{h(d,f,u)}finally{_&&m.layers.enable(P)}},gt.set(n,{colors:o,roots:0}),Kt(n),n}const xe=new WeakMap;function An(c,t,e,i,s){const o=xe.get(t)?.pop();return o?(o.mainScene=e,o.mainCamera=i,i.layers.disable(_e),gt.set(o,{colors:s,roots:0}),Kt(o),o):wo(c,e,i,s)}function Pn(c,t,e){t.selection.clear(),e?.setEffects([]);const i=xe.get(c)??[];i.includes(t)||i.push(t),xe.set(c,i)}const xo=`uniform lowp sampler2D inputBuffer;uniform vec2 texelSize;uniform float volterReach;
3
3
  varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;
4
4
  void main(){
5
5
  vec2 uv=(vUv0+vUv1)*0.5;
@@ -14,7 +14,7 @@ void main(){
14
14
  visibility=min(min(s0.y,s1.y),min(s2.y,s3.y));
15
15
  }
16
16
  gl_FragColor.rg=(1.0-visibility>0.001)?vec2(edge,0.0):vec2(0.0,edge);
17
- }`,ui=new WeakMap,gt=new WeakMap;function Kt(c){const t=gt.get(c);if(!t)return;const e=t.roots===1&&t.colors.active?t.colors.active:t.colors;c.visibleEdgeColor.setHex(e.visible),c.hiddenEdgeColor.setHex(e.hidden);const i=t.colors.outline,s=i?.style==="crisp",o=i?.width??2;c.resolution.scale=s?1:.5,c.blurPass.enabled=!s,c.blurPass.kernelSize=2;const n=c.outlinePass.fullscreenMaterial,r=ui.get(n)??n.fragmentShader;ui.set(n,r);const l=s?xo:r;n.fragmentShader!==l&&(n.fragmentShader=l,n.needsUpdate=!0),n.uniforms.volterReach={value:Math.max(1,Math.round(o/2))},c.edgeStrength=s?8:5;const a=c.uniforms.get("volterCrisp");a&&(a.value=s?1:0),c.xRay=i?.hidden??!0}function Hn(c,t){gt.set(c,{colors:t,roots:gt.get(c)?.roots??0}),Kt(c)}function So(c){return c.isBone?!1:c.isMesh||c.isLine||c.isPoints||c.isSprite}function Ei(c){const t=[],e=new Set;for(const i of c)i.isBone||i.traverse(s=>{e.has(s)||J(s)||!So(s)||(e.add(s),t.push(s))});return t}function En(c,t){const e=[...t],i=e.filter(n=>!n.isBone).length,s=gt.get(c);s&&s.roots!==i&&(s.roots=i,Kt(c));const o=Ei(e);c.selection.size===o.length&&o.every(n=>c.selection.has(n))||c.selection.set(o)}function fi(c,t){const e=new C(c);if(!t||t.toneMapping===os)return e;const i=t.toneMappingExposure||1;if(t.toneMapping===ns)return e.multiplyScalar(1/i);if(t.toneMapping===rs)return Co(e,i);if(t.toneMapping===as)return Mo(e,i);if(t.toneMapping!==ls)return e;const s=[[.59719,.35458,.04823],[.076,.90834,.01566],[.0284,.13383,.83777]],o=[[1.60475,-.53108,-.07367],[-.10208,1.10813,-.00605],[-.00327,-.07276,1.07602]],n=d=>(d*(d+.0245786)-90537e-9)/(d*(.983729*d+.432951)+.238081),r=d=>{let f=0,u=64;for(let m=0;m<60;m++){const _=(f+u)/2;n(_)<d?f=_:u=_}return(f+u)/2},a=ut(Ut(o),[e.r,e.g,e.b]).map(d=>d<=0?0:r(Math.min(d,.999))),h=ut(Ut(s),a).map(d=>Math.max(0,d)*(.6/i));return new C().setRGB(h[0],h[1],h[2],Ee)}function Co(c,t){const e=[[.6274,.3293,.0433],[.0691,.9195,.0113],[.0164,.088,.8956]],i=[[1.6605,-.5876,-.0728],[-.1246,1.1329,-.0083],[-.0182,-.1006,1.1187]],s=[[.856627153315983,.0951212405381588,.0482516061458583],[.137318972929847,.761241990602591,.101439036467562],[.11189821299995,.0767994186031903,.811302368396859]],o=[[1.1271005818144368,-.11060664309660323,-.016493938717834573],[-.1413297634984383,1.157823702216272,-.016493938717834257],[-.14132976349843826,-.11060664309660294,1.2519364065950405]],n=-12.47393,r=4.026069,l=m=>{const _=m*m,g=_*_;return 15.5*g*_-40.14*g*m+31.96*g-6.868*_*m+.4298*_+.1191*m-.00232},a=m=>{let _=0,g=1;for(let v=0;v<60;v++){const b=(_+g)/2;l(b)<m?_=b:g=b}return(_+g)/2},h=ut(e,[c.r,c.g,c.b]),f=ut(Ut(o),h.map(m=>Math.max(0,m)**(1/2.2))).map(m=>2**(a(m)*(r-n)+n)),u=ut(i,ut(Ut(s),f)).map(m=>Math.max(0,m)/t);return new C().setRGB(u[0],u[1],u[2],Ee)}function ut(c,t){return[c[0][0]*t[0]+c[0][1]*t[1]+c[0][2]*t[2],c[1][0]*t[0]+c[1][1]*t[1]+c[1][2]*t[2],c[2][0]*t[0]+c[2][1]*t[1]+c[2][2]*t[2]]}function Ut(c){const[[t,e,i],[s,o,n],[r,l,a]]=c,h=o*a-n*l,d=-(s*a-n*r),f=s*l-o*r,u=t*h+e*d+i*f;return[[h/u,-(e*a-i*l)/u,(e*n-i*o)/u],[d/u,(t*a-i*r)/u,-(t*n-i*s)/u],[f/u,-(t*l-e*r)/u,(t*o-e*s)/u]]}function Mo(c,t){const e=n=>(n*(.88*n+.06)+.002)/(n*(.88*n+.6)+.06)-.03333333333333333,i=e(1),s=n=>e(n)/i,o=n=>{if(n<=0)return 0;let r=0,l=1;for(let a=0;a<60;a++){const h=(r+l)/2;s(h)<n?r=h:l=h}return(r+l)/2};return new C().setRGB(o(Math.min(c.r,.999))/t,o(Math.min(c.g,.999))/t,o(Math.min(c.b,.999))/t,Ee)}const Ao=new C(5231045),Po=new C(10481896),mi=64,Ho=.6;class Eo extends K{constructor(t){super(),this.source=t,this.name="Trigger Volume Helper",this.matrixAutoUpdate=!1,this.renderOrder=998,W(this,"editorHelper",!0),W(this,"editorHelperType","trigger-volumes"),this.layers.set(P),this.refresh(!0)}signature="";selected=!1;setSelected(t){this.selected!==t&&(this.selected=t,this.refresh(!0))}update(){this.refresh(!1),this.source.updateWorldMatrix(!0,!1),this.matrix.copy(this.source.matrixWorld),this.matrixWorldNeedsUpdate=!0}dispose(){this.clearVisuals(),this.removeFromParent()}refresh(t){const e=be(this.source);if(!e)return;const i=e.radius,s=String(i);if(!t&&s===this.signature)return;this.signature=s,this.clearVisuals();const o=this.selected?Po:Ao,n=this.selected?1:.62,r=[];for(let u=0;u<mi;u+=1){const m=u/mi*Math.PI*2;r.push(Math.cos(m)*i,0,Math.sin(m)*i)}const l=new mt;l.setAttribute("position",new Mt(r,3));const a=new cs(l,this.lineMaterial(o,n));a.renderOrder=this.renderOrder,this.add(a);const h=[];for(const[u,m]of[[i,0],[-i,0],[0,i],[0,-i]])h.push(u,0,m,u,Ho,m);const d=new mt;d.setAttribute("position",new Mt(h,3));const f=new Zt(d,this.lineMaterial(o,n));f.renderOrder=this.renderOrder,this.add(f),this.traverse(u=>u.layers.set(P))}lineMaterial(t,e){return new lt({color:t,depthTest:!1,transparent:!0,opacity:e,toneMapped:!1})}clearVisuals(){for(const t of[...this.children]){t.removeFromParent();const e=t;e.geometry?.dispose();const i=Array.isArray(e.material)?e.material:[e.material];for(const s of i)s?.dispose()}}}function To(c){const t=new Set(c.values()),e=[];for(const i of t){let s=i.parent,o=!1;for(;s!==null;){if(t.has(s)){o=!0;break}s=s.parent}o||e.push(i)}return e}function zo(c,t){const e=new Set;for(const i of t){const s=c.get(i);s&&e.add(s)}return[...e].filter(i=>{for(let s=i.parent;s!==null;s=s.parent)if(e.has(s))return!1;return!0})}const Bt=.5,Lo=1e3,Io=new p(0,1,0),Oo=new p(0,0,1),pe=new bs,ko=new p,_i=new p,ue=new L,gi=new p,Do=1e-8,Ro=[new p(1,0,0),new p(-1,0,0),new p(0,1,0),new p(0,-1,0),new p(0,0,1),new p(0,0,-1)],fe=[[.96,.2,.32],[.53,.84,.01],[.16,.55,.96]],yi=[[0,1],[1,1],[2,1]],jo=[[0,1],[2,1],[1,-1]],Fo=[[0,1],[2,1],[1,1]],vi=["X","Y","Z"],Se={degrees:50,axis:"vertical"};function me(c,t=Se){const e=Number.isFinite(c)&&c>.01?c:1,i=Number.isFinite(t.degrees)&&t.degrees>0&&t.degrees<180?t.degrees:Se.degrees,s=j.degToRad(i/2),n=t.axis==="horizontal"||t.axis==="larger"&&e>=1||t.axis==="smaller"&&e<1?Math.atan(Math.tan(s)/e):s;return j.radToDeg(n*2)}function Go(c){const t=Math.max(c.r,c.g,c.b),e=Math.min(c.r,c.g,c.b),i=t-e;let s=0;return i>0&&(t===c.r?s=((c.g-c.b)/i+6)%6:t===c.g?s=(c.b-c.r)/i+2:s=(c.r-c.g)/i+4,s/=6),{h:s,s:t===0?0:i/t,v:t}}function Bo(c,t,e,i){const s=Math.floor(c*6),o=c*6-s,n=e*(1-t),r=e*(1-o*t),l=e*(1-(1-o)*t),[a,h,d]=[[e,l,n],[r,e,n],[n,e,l],[n,r,e],[l,n,e],[e,n,r]][(s%6+6)%6];return i.setRGB(a,h,d)}const Vo=.356,Wo=7.5/17.5;function Xo(c,t){const i=document.createElement("canvas");i.width=32,i.height=32;const s=i.getContext("2d");s&&(s.fillStyle=`#${c.getHexString()}`,s.font=`bold ${Math.round(32*.8)}px system-ui, -apple-system, sans-serif`,s.textAlign="center",s.textBaseline="middle",s.fillText(t,32/2,32/2+1));const o=new Mi(i);return o.generateMipmaps=!1,o.minFilter=Ai,o.colorSpace=it,o}function ze(c){const e=document.createElement("canvas");e.width=32,e.height=32;const i=e.getContext("2d");i&&c(i,32,32/2-1);const s=new Mi(e);return s.colorSpace=it,s.generateMipmaps=!1,s.minFilter=Ai,s}function No(){return ze((c,t,e)=>{c.beginPath(),c.arc(t/2,t/2,e,0,Math.PI*2),c.fillStyle="#ffffff",c.fill()})}function Yo(){return ze((c,t,e)=>{const i=Me/Ce*t;c.beginPath(),c.arc(t/2,t/2,e-i/2,0,Math.PI*2),c.lineWidth=i,c.strokeStyle="#ffffff",c.stroke()})}function qo(c){return ze((t,e,i)=>{const s=Wo*(2*i),o=Math.round(s/.72);t.font=`bold ${o}px system-ui, -apple-system, sans-serif`,t.fillStyle="#ffffff",t.textAlign="center",t.textBaseline="middle",t.fillText(c,e/2,e/2+2,2*i*.86)})}const Qo=new p(1,.72,1).normalize(),q=90,Zo=32,Ce=15,Uo=2.75,Me=2,Ko=74.5,Le=73.5,Ti=8.5+Ko/2-q/2,Ie=38+Le/2-q/2,Tn=Ti+q/2,zn=Ie+q/2+Le/2,Ln=Ie+q/2+Le/2+16-14.5,zi=`
17
+ }`,ui=new WeakMap,gt=new WeakMap;function Kt(c){const t=gt.get(c);if(!t)return;const e=t.roots===1&&t.colors.active?t.colors.active:t.colors;c.visibleEdgeColor.setHex(e.visible),c.hiddenEdgeColor.setHex(e.hidden);const i=t.colors.outline,s=i?.style==="crisp",o=i?.width??2;c.resolution.scale=s?1:.5,c.blurPass.enabled=!s,c.blurPass.kernelSize=2;const n=c.outlinePass.fullscreenMaterial,r=ui.get(n)??n.fragmentShader;ui.set(n,r);const l=s?xo:r;n.fragmentShader!==l&&(n.fragmentShader=l,n.needsUpdate=!0),n.uniforms.volterReach={value:Math.max(1,Math.round(o/2))},c.edgeStrength=s?8:5;const a=c.uniforms.get("volterCrisp");a&&(a.value=s?1:0),c.xRay=i?.hidden??!0}function Hn(c,t){gt.set(c,{colors:t,roots:gt.get(c)?.roots??0}),Kt(c)}function So(c){return c.isBone?!1:c.isMesh||c.isLine||c.isPoints||c.isSprite}function Ei(c){const t=[],e=new Set;for(const i of c)i.isBone||i.traverse(s=>{e.has(s)||J(s)||!So(s)||(e.add(s),t.push(s))});return t}function En(c,t){const e=[...t],i=e.filter(n=>!n.isBone).length,s=gt.get(c);s&&s.roots!==i&&(s.roots=i,Kt(c));const o=Ei(e);c.selection.size===o.length&&o.every(n=>c.selection.has(n))||c.selection.set(o)}function fi(c,t){const e=new C(c);if(!t||t.toneMapping===os)return e;const i=t.toneMappingExposure||1;if(t.toneMapping===ns)return e.multiplyScalar(1/i);if(t.toneMapping===rs)return Co(e,i);if(t.toneMapping===as)return Mo(e,i);if(t.toneMapping!==ls)return e;const s=[[.59719,.35458,.04823],[.076,.90834,.01566],[.0284,.13383,.83777]],o=[[1.60475,-.53108,-.07367],[-.10208,1.10813,-.00605],[-.00327,-.07276,1.07602]],n=d=>(d*(d+.0245786)-90537e-9)/(d*(.983729*d+.432951)+.238081),r=d=>{let f=0,u=64;for(let m=0;m<60;m++){const _=(f+u)/2;n(_)<d?f=_:u=_}return(f+u)/2},a=ut(Ut(o),[e.r,e.g,e.b]).map(d=>d<=0?0:r(Math.min(d,.999))),h=ut(Ut(s),a).map(d=>Math.max(0,d)*(.6/i));return new C().setRGB(h[0],h[1],h[2],Ee)}function Co(c,t){const e=[[.6274,.3293,.0433],[.0691,.9195,.0113],[.0164,.088,.8956]],i=[[1.6605,-.5876,-.0728],[-.1246,1.1329,-.0083],[-.0182,-.1006,1.1187]],s=[[.856627153315983,.0951212405381588,.0482516061458583],[.137318972929847,.761241990602591,.101439036467562],[.11189821299995,.0767994186031903,.811302368396859]],o=[[1.1271005818144368,-.11060664309660323,-.016493938717834573],[-.1413297634984383,1.157823702216272,-.016493938717834257],[-.14132976349843826,-.11060664309660294,1.2519364065950405]],n=-12.47393,r=4.026069,l=m=>{const _=m*m,g=_*_;return 15.5*g*_-40.14*g*m+31.96*g-6.868*_*m+.4298*_+.1191*m-.00232},a=m=>{let _=0,g=1;for(let v=0;v<60;v++){const w=(_+g)/2;l(w)<m?_=w:g=w}return(_+g)/2},h=ut(e,[c.r,c.g,c.b]),f=ut(Ut(o),h.map(m=>Math.max(0,m)**(1/2.2))).map(m=>2**(a(m)*(r-n)+n)),u=ut(i,ut(Ut(s),f)).map(m=>Math.max(0,m)/t);return new C().setRGB(u[0],u[1],u[2],Ee)}function ut(c,t){return[c[0][0]*t[0]+c[0][1]*t[1]+c[0][2]*t[2],c[1][0]*t[0]+c[1][1]*t[1]+c[1][2]*t[2],c[2][0]*t[0]+c[2][1]*t[1]+c[2][2]*t[2]]}function Ut(c){const[[t,e,i],[s,o,n],[r,l,a]]=c,h=o*a-n*l,d=-(s*a-n*r),f=s*l-o*r,u=t*h+e*d+i*f;return[[h/u,-(e*a-i*l)/u,(e*n-i*o)/u],[d/u,(t*a-i*r)/u,-(t*n-i*s)/u],[f/u,-(t*l-e*r)/u,(t*o-e*s)/u]]}function Mo(c,t){const e=n=>(n*(.88*n+.06)+.002)/(n*(.88*n+.6)+.06)-.03333333333333333,i=e(1),s=n=>e(n)/i,o=n=>{if(n<=0)return 0;let r=0,l=1;for(let a=0;a<60;a++){const h=(r+l)/2;s(h)<n?r=h:l=h}return(r+l)/2};return new C().setRGB(o(Math.min(c.r,.999))/t,o(Math.min(c.g,.999))/t,o(Math.min(c.b,.999))/t,Ee)}const Ao=new C(5231045),Po=new C(10481896),mi=64,Ho=.6;class Eo extends K{constructor(t){super(),this.source=t,this.name="Trigger Volume Helper",this.matrixAutoUpdate=!1,this.renderOrder=998,W(this,"editorHelper",!0),W(this,"editorHelperType","trigger-volumes"),this.layers.set(P),this.refresh(!0)}signature="";selected=!1;setSelected(t){this.selected!==t&&(this.selected=t,this.refresh(!0))}update(){this.refresh(!1),this.source.updateWorldMatrix(!0,!1),this.matrix.copy(this.source.matrixWorld),this.matrixWorldNeedsUpdate=!0}dispose(){this.clearVisuals(),this.removeFromParent()}refresh(t){const e=we(this.source);if(!e)return;const i=e.radius,s=String(i);if(!t&&s===this.signature)return;this.signature=s,this.clearVisuals();const o=this.selected?Po:Ao,n=this.selected?1:.62,r=[];for(let u=0;u<mi;u+=1){const m=u/mi*Math.PI*2;r.push(Math.cos(m)*i,0,Math.sin(m)*i)}const l=new mt;l.setAttribute("position",new Mt(r,3));const a=new cs(l,this.lineMaterial(o,n));a.renderOrder=this.renderOrder,this.add(a);const h=[];for(const[u,m]of[[i,0],[-i,0],[0,i],[0,-i]])h.push(u,0,m,u,Ho,m);const d=new mt;d.setAttribute("position",new Mt(h,3));const f=new Zt(d,this.lineMaterial(o,n));f.renderOrder=this.renderOrder,this.add(f),this.traverse(u=>u.layers.set(P))}lineMaterial(t,e){return new lt({color:t,depthTest:!1,transparent:!0,opacity:e,toneMapped:!1})}clearVisuals(){for(const t of[...this.children]){t.removeFromParent();const e=t;e.geometry?.dispose();const i=Array.isArray(e.material)?e.material:[e.material];for(const s of i)s?.dispose()}}}function To(c){const t=new Set(c.values()),e=[];for(const i of t){let s=i.parent,o=!1;for(;s!==null;){if(t.has(s)){o=!0;break}s=s.parent}o||e.push(i)}return e}function zo(c,t){const e=new Set;for(const i of t){const s=c.get(i);s&&e.add(s)}return[...e].filter(i=>{for(let s=i.parent;s!==null;s=s.parent)if(e.has(s))return!1;return!0})}const Bt=.5,Lo=1e3,Io=new p(0,1,0),Oo=new p(0,0,1),pe=new ws,ko=new p,_i=new p,ue=new L,gi=new p,Do=1e-8,Ro=[new p(1,0,0),new p(-1,0,0),new p(0,1,0),new p(0,-1,0),new p(0,0,1),new p(0,0,-1)],fe=[[.96,.2,.32],[.53,.84,.01],[.16,.55,.96]],yi=[[0,1],[1,1],[2,1]],jo=[[0,1],[2,1],[1,-1]],Fo=[[0,1],[2,1],[1,1]],vi=["X","Y","Z"],Se={degrees:50,axis:"vertical"};function me(c,t=Se){const e=Number.isFinite(c)&&c>.01?c:1,i=Number.isFinite(t.degrees)&&t.degrees>0&&t.degrees<180?t.degrees:Se.degrees,s=j.degToRad(i/2),n=t.axis==="horizontal"||t.axis==="larger"&&e>=1||t.axis==="smaller"&&e<1?Math.atan(Math.tan(s)/e):s;return j.radToDeg(n*2)}function Go(c){const t=Math.max(c.r,c.g,c.b),e=Math.min(c.r,c.g,c.b),i=t-e;let s=0;return i>0&&(t===c.r?s=((c.g-c.b)/i+6)%6:t===c.g?s=(c.b-c.r)/i+2:s=(c.r-c.g)/i+4,s/=6),{h:s,s:t===0?0:i/t,v:t}}function Bo(c,t,e,i){const s=Math.floor(c*6),o=c*6-s,n=e*(1-t),r=e*(1-o*t),l=e*(1-(1-o)*t),[a,h,d]=[[e,l,n],[r,e,n],[n,e,l],[n,r,e],[l,n,e],[e,n,r]][(s%6+6)%6];return i.setRGB(a,h,d)}const Vo=.356,Wo=7.5/17.5;function Xo(c,t){const i=document.createElement("canvas");i.width=32,i.height=32;const s=i.getContext("2d");s&&(s.fillStyle=`#${c.getHexString()}`,s.font=`bold ${Math.round(32*.8)}px system-ui, -apple-system, sans-serif`,s.textAlign="center",s.textBaseline="middle",s.fillText(t,32/2,32/2+1));const o=new Mi(i);return o.generateMipmaps=!1,o.minFilter=Ai,o.colorSpace=it,o}function ze(c){const e=document.createElement("canvas");e.width=32,e.height=32;const i=e.getContext("2d");i&&c(i,32,32/2-1);const s=new Mi(e);return s.colorSpace=it,s.generateMipmaps=!1,s.minFilter=Ai,s}function No(){return ze((c,t,e)=>{c.beginPath(),c.arc(t/2,t/2,e,0,Math.PI*2),c.fillStyle="#ffffff",c.fill()})}function Yo(){return ze((c,t,e)=>{const i=Me/Ce*t;c.beginPath(),c.arc(t/2,t/2,e-i/2,0,Math.PI*2),c.lineWidth=i,c.strokeStyle="#ffffff",c.stroke()})}function qo(c){return ze((t,e,i)=>{const s=Wo*(2*i),o=Math.round(s/.72);t.font=`bold ${o}px system-ui, -apple-system, sans-serif`,t.fillStyle="#ffffff",t.textAlign="center",t.textBaseline="middle",t.fillText(c,e/2,e/2+2,2*i*.86)})}const Qo=new p(1,.72,1).normalize(),q=90,Zo=32,Ce=15,Uo=2.75,Me=2,Ko=74.5,Le=73.5,Ti=8.5+Ko/2-q/2,Ie=38+Le/2-q/2,Tn=Ti+q/2,zn=Ie+q/2+Le/2,Ln=Ie+q/2+Le/2+16-14.5,zi=`
18
18
  float volterGrazingFade(vec3 worldPosition, vec3 eye, vec3 planeNormal, float amount) {
19
19
  vec3 toEye = eye - worldPosition;
20
20
  float toEyeLength = max(length(toEye), 1e-6);
@@ -22,13 +22,13 @@ float volterGrazingFade(vec3 worldPosition, vec3 eye, vec3 planeNormal, float am
22
22
  graze *= graze;
23
23
  return mix(1.0, 1.0 - graze * graze, amount);
24
24
  }
25
- `,Oe=200,Ae=2,Pe=Oe*2/Ae;function wi(c){const t=[];for(let e=0;e<Pe;e++){const i=-Oe+e*Ae,s=i+Ae;c===0?t.push(i,.001,0,s,.001,0):c===2?t.push(0,.001,i,0,.001,s):t.push(0,i,0,0,s,0)}return t}function $o(c,t,e){c.onBeforeCompile=i=>{i.uniforms.uGrazingFade=t,i.uniforms.uPlaneNormal=e,i.vertexShader=i.vertexShader.replace("void main() {",`varying vec3 vAxisWorld;
25
+ `,Oe=200,Ae=2,Pe=Oe*2/Ae;function bi(c){const t=[];for(let e=0;e<Pe;e++){const i=-Oe+e*Ae,s=i+Ae;c===0?t.push(i,.001,0,s,.001,0):c===2?t.push(0,.001,i,0,.001,s):t.push(0,i,0,0,s,0)}return t}function $o(c,t,e){c.onBeforeCompile=i=>{i.uniforms.uGrazingFade=t,i.uniforms.uPlaneNormal=e,i.vertexShader=i.vertexShader.replace("void main() {",`varying vec3 vAxisWorld;
26
26
  void main() {`).replace("vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );",`vAxisWorld = ( modelMatrix * vec4( position.y < 0.5 ? instanceStart : instanceEnd, 1.0 ) ).xyz;
27
27
  vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );`),i.fragmentShader=i.fragmentShader.replace("void main() {",`varying vec3 vAxisWorld;
28
28
  uniform float uGrazingFade;
29
29
  uniform vec3 uPlaneNormal;
30
30
  ${zi}
31
- void main() {`).replace("gl_FragColor = vec4( diffuseColor.rgb, alpha );","gl_FragColor = vec4( diffuseColor.rgb, alpha * volterGrazingFade( vAxisWorld, cameraPosition, uPlaneNormal, uGrazingFade ) );")},c.customProgramCacheKey=()=>"volter-axis-grazing-fade"}const bt=new p,Jo=new L,pt=new p,tn=new p(0,1,0);function en(c){const t=new xi(c,c);t.rotateX(-Math.PI/2);const e=new Ss({uniforms:{uColor:{value:new C(10066329)},uMajorColor:{value:new C(10066329)},uOpacity:{value:1},uLineWidth:{value:1},uMajorWidth:{value:1},uAligned:{value:0},uMajorEvery:{value:10},uFadeStart:{value:c/2*.55},uFadeEnd:{value:c/2},uGrazingFade:{value:0},uPlaneNormal:{value:new p(0,1,0)},uUnit:{value:1},uMinorFade:{value:1},uCenter:{value:new et},uReach:{value:1}},vertexShader:`
31
+ void main() {`).replace("gl_FragColor = vec4( diffuseColor.rgb, alpha );","gl_FragColor = vec4( diffuseColor.rgb, alpha * volterGrazingFade( vAxisWorld, cameraPosition, uPlaneNormal, uGrazingFade ) );")},c.customProgramCacheKey=()=>"volter-axis-grazing-fade"}const wt=new p,Jo=new L,pt=new p,tn=new p(0,1,0);function en(c){const t=new xi(c,c);t.rotateX(-Math.PI/2);const e=new Ss({uniforms:{uColor:{value:new C(10066329)},uMajorColor:{value:new C(10066329)},uOpacity:{value:1},uLineWidth:{value:1},uMajorWidth:{value:1},uAligned:{value:0},uMajorEvery:{value:10},uFadeStart:{value:c/2*.55},uFadeEnd:{value:c/2},uGrazingFade:{value:0},uPlaneNormal:{value:new p(0,1,0)},uUnit:{value:1},uMinorFade:{value:1},uCenter:{value:new et},uReach:{value:1}},vertexShader:`
32
32
  varying vec3 vWorld;
33
33
  void main() {
34
34
  vWorld = (modelMatrix * vec4(position, 1.0)).xyz;
@@ -138,4 +138,4 @@ void main() {`).replace("gl_FragColor = vec4( diffuseColor.rgb, alpha );","gl_Fr
138
138
  gl_FragColor = vec4(mix(uColor, uMajorColor, majorShare), alpha);
139
139
  #include <colorspace_fragment>
140
140
  }
141
- `,transparent:!0,depthWrite:!1,side:Qt}),i=new y(t,e);return i.name="editor-floor-grid",i}class Li{setTransformMode(t){this._store.shell.setTransformMode(t)}camera;orthographicCamera;orbitControls;transformControls;_auxRotateControls;_auxScaleControls;_activeGizmo;raycaster=(()=>{const t=new nt;return t.layers.enableAll(),t})();grid;_boxHelpers=new Map;_selectionMarks={outline:!0,wire:!1,box:!1};_unsubscribeSelectionTheme=()=>{};_constraintHelpers=new Map;_constraintControlRaycaster=(()=>{const t=new nt;return t.layers.enableAll(),t})();_hoveredConstraintControl=null;_constraintControlPointerSession=!1;_reflectionProbeHelpers=new Map;_triggerVolumeHelpers=new Map;_cameraHelpers=new Map;_lightHelpers=new Map;_audioHelpers=new Map;_spatialHandleRoots=[];_spatialHandleMeshes=[];_spatialHandleRaycaster=(()=>{const t=new nt;return t.layers.enableAll(),t})();_activeSpatialHandle=null;_hoveredSpatialHandle=null;_spatialHandleDragPlane=new Ke;_spatialHandleDragOffset=new p;_spatialHandleDragPoint=new p;_orbitEnabledBeforeHandleDrag=!0;_transformEnabledBeforeHandleDrag=!0;_gizmoHelper;_editorAmbient;_editorDirLight;_lightRig;_scene;_contentBoundsBox=new xt;_contentBoundsAt=0;_renderer;_sparkRenderer=null;_sparkRendererLoading=!1;_sparkRendererFailed=!1;_lastSparkDiscoveryAt=Number.NEGATIVE_INFINITY;_disposed=!1;_editorObjects=[];_presentation=null;_axisLines=null;_verticalAxisLine=null;_axisLineWidth=null;_axisLineCss(t){return t===null?2:t/(this._renderer?.getPixelRatio()??1)}_axesWanted=!1;_stageAxes="floor";_lookAxisHexes=[null,null,null];_lookGridHex=null;_lookBackgroundHex=null;_lookToneMapping=null;_lookExposure=null;_lookGizmoSizePx=null;_stageAxisFrame=yi;_appliedAxisSigns=[1,1,1];_gizmoLook={axes:null,navigation:null,hover:null,drag:null,opacity:null,arrowLength:null,arrowHead:null,ringWidth:null,navigationSize:null,navigationForm:"balls",background:null,navigationCorner:"top-right",highlightSaturation:null,highlightValue:null};_stageBoxSelect=null;_transformHandles={scale:!0,viewRotate:!0,freeMove:!0};_appliedArrow={length:1.2,head:1};_appliedRingWidth=1;_store;_objectMap=new Map;_canvas;_interactionElement;_onInteractionPointerUp;_onInteractionDblClick;_authoring;_pick;_drawCamera;get _screenCamera(){return this._drawCamera?.()??this.renderCamera}_standaloneAuthoring;_publishPickContext;_onlineAssetResolver;_onProjectionChange;_pointerDownPos=new et;_skipNextSync=!1;_marqueeActive=!1;_pointerSessionActive=!1;_marqueeDiv=null;_pointerDownButton=-1;_altDragOrbit=!1;_vcScene=new hs;_vcCamera;_vcClickTargets=[];_vcBalls=[];_vcStalks=[];_vcSolids=[];_vcSize=q;_navigation="interactive";_marksLook="";_presentationGrid=!0;_vcMarginRight=Ti;_vcMarginTop=Ie;_chromeInsetPx=0;_vcDir=new p;_previewClearColor=new C;_cameraView=null;_projection="perspective";_pendingProjection=null;_viewportAspect=1;_fieldOfView=Se;_orthographicHeight=10;_cameraViewMode=null;_orbitEnabledBeforeCameraView=!0;_orbitTargetBeforeCameraView=new p;_lastGizmoObjectMap=null;_lastGizmoSig="";_lastGizmoEpoch=-1;_threejsToolContextActive=!1;_threeSurfaceShowing=!1;_vcRaycaster=new nt;_dropOverlay=null;_groundPlane=new Ke(new p(0,1,0),0);_dragStartPos=new p;_dragStartQuat=new L;_dragStartScale=new p;_attachedAuthoringId=null;_otherDragObjects=[];_allDragObjects=[];_preservedChildObjects=[];_activeTransformEditIds=[];_pivotDummy=new qt;_dummyIsPresentationAnchor=!1;_pivotPos=new p;_surfaceSnapRaycaster=new nt;_surfaceSnapIndicator;_vertexSnapTargets=[];_vertexSnapIndicator;_vertexSnapThreshold=20;batchedRenderer;_helpers=new Map;_snapAnimating=!1;_snapStartTime=0;_snapDuration=400;_snapQ1=new L;_snapQ2=new L;_snapDist=0;_flyActive=!1;_snapHold=!1;_flyKeys=new Set;_flySpeed=5;_flyEuler=new bi(0,0,0,"YXZ");_rightMouseDown=!1;constructor(t,e,i,s=t,o={}){Ts(),this._canvas=t,this._interactionElement=s,this._scene=e,this._renderer=o.renderer,this._store=i,this._authoring=o.authoring??(()=>kt().activeAuthoring(this._store.shell)),this._pick=o.pick,this._drawCamera=o.drawCamera,this._standaloneAuthoring=o.authoring!==void 0,this._publishPickContext=o.publishPickContext??!0,this._chromeInsetPx=o.chromeInsetPx??0,this._onlineAssetResolver=o.onlineAssetResolver,this._onProjectionChange=o.onProjectionChange,this.camera=new ds(me(t.clientWidth/Math.max(1,t.clientHeight)),t.clientWidth/t.clientHeight,Ye,qe),this.camera.position.copy(Qo).multiplyScalar(17.32),this.camera.lookAt(0,0,0),this.camera.layers.enableAll(),this._viewportAspect=t.clientWidth/Math.max(1,t.clientHeight),this.orthographicCamera=new $e(-5,5,5,-5,Ye,qe),this.orthographicCamera.layers.enableAll(),this._syncOrthographicFromPerspective(),this.grid=en(400),this.grid.layers.set(P),e.add(this.grid);const n=new ve;n.setPositions(wi(0)),n.setColors(new Array(Pe*2*3).fill(1)),this._axisLines=new ye(n,new we({vertexColors:!0,linewidth:2,transparent:!0,opacity:1,depthWrite:!1,toneMapped:!1})),$o(this._axisLines.material,this.grid.material.uniforms.uGrazingFade,this.grid.material.uniforms.uPlaneNormal),this._axisLines.visible=!1,this._axisLines.layers.set(P),e.add(this._axisLines),this._unsubscribeSelectionTheme=Oi(t,()=>{st();const l=JSON.stringify([ht(t),De(t),Re(t)]);l!==this._marksLook&&(this._marksLook=l,this._boxHelpers.size>0&&this._syncBoxHelpers()),this._gizmoLook=je(t),this._applyViewportLook(ki(t)),this._applyGridLines(Di(t)),this._lookGizmoSizePx=Fe(t),this._applyGizmoSize(),this._applyGizmoArrows(),this._readLookStage(t)}),this._lightRig=o?.lightRig!==!1,this._editorAmbient=new ps(16777215,.5),this._editorAmbient.layers.set(P),e.add(this._editorAmbient),this._editorDirLight=new us(16777215,1),this._editorDirLight.position.set(10,20,10),this._editorDirLight.layers.set(P),e.add(this._editorDirLight),this._editorAmbient.visible=this._lightRig,this._editorDirLight.visible=this._lightRig,this.batchedRenderer=new Cs,this.batchedRenderer.layers.set(P),e.add(this.batchedRenderer),s.addEventListener("wheel",this._onTrackpadWheel,{passive:!1}),this.orbitControls=new es(this.camera,s),this.orbitControls.enableDamping=!0,this.orbitControls.dampingFactor=.1,this.applyKeymapNavigation(),this._unsubscribeKeymap=Ri(()=>this.applyKeymapNavigation()),this._installTurntable(),this.transformControls=new ie(this.camera,t),this._auxScaleControls=new ie(this.camera,t),this._auxScaleControls.setMode("scale"),this._auxRotateControls=new ie(this.camera,t),this._auxRotateControls.setMode("rotate"),this._activeGizmo=this.transformControls;const r=l=>{const a=l.pointerDown.bind(l);l.pointerDown=h=>{l.getHelper().updateMatrixWorld(!0),a(h)},l.getRaycaster().layers.enableAll(),l.addEventListener("dragging-changed",h=>{const d=h.value;if(d?Ms():As(),this.orbitControls.enabled=!d,d){this._activeGizmo=l;for(const g of this._allGizmos())g!==l&&(g.enabled=!1);const f=l.object,u=l.mode==="translate"?"position":l.mode==="rotate"?"rotation":"scale",m=g=>this._authoring().transforms?.editability?.(g,u).writable??!0,_=this._attachedAuthoringId??(f&&this._authoringIdForObject(f))??"";if(f){if(this._dragStartPos.copy(f.position),this._dragStartQuat.copy(f.quaternion),this._dragStartScale.copy(f.scale),this._otherDragObjects=[],this._allDragObjects=[],this._pivotPos.copy(f.position),f===this._pivotDummy?null:this._authoringIdForObject(f))for(const w of this._store.shell.selectedEntityIds){if(w===_||!m(w))continue;const S=this._objectForAuthoringId(w);S&&this._otherDragObjects.push({id:w,obj:S,startPos:S.position.clone(),startQuat:S.quaternion.clone(),startScale:S.scale.clone()})}else for(const w of this._store.shell.selectedEntityIds){if(!m(w))continue;const S=this._objectForAuthoringId(w);S&&this._allDragObjects.push({id:w,obj:S,startPos:S.position.clone(),startQuat:S.quaternion.clone(),startScale:S.scale.clone()})}const v=f===this._pivotDummy?this._allDragObjects.map(({id:w})=>w):[_,...this._otherDragObjects.map(({id:w})=>w)];this._preservedChildObjects=this._preparePreservedChildren(v.filter(Boolean)),this._activeTransformEditIds=[...new Set([...v.filter(Boolean),...this._preservedChildObjects.map(({id:w})=>w)])];const b=this._authoring();for(const w of this._activeTransformEditIds)Ge(b,w)}}else this._surfaceSnapIndicator.visible=!1,this._vertexSnapIndicator.visible=!1,this.syncFromStore()}),l.addEventListener("objectChange",()=>{const h=l.object;if(!h)return;const d=l.mode,f=this._store.shell.pivotMode==="individual-origins"||this._dummyIsPresentationAnchor,m=this._allDragObjects.length>0?this._allDragObjects:this._otherDragObjects;if(m.length>0){if(d==="translate"){const _=h.position.clone().sub(this._dragStartPos);for(const{obj:g,startPos:v}of m)g.position.copy(v).add(_)}else if(d==="rotate"){const _=h.quaternion.clone().multiply(this._dragStartQuat.clone().invert());if(f)for(const{obj:g,startQuat:v}of m)g.quaternion.copy(_).multiply(v);else for(const{obj:g,startPos:v,startQuat:b}of m){const w=v.clone().sub(this._pivotPos);w.applyQuaternion(_),g.position.copy(this._pivotPos).add(w),g.quaternion.copy(_).multiply(b)}}else if(d==="scale"){const _=new p(this._dragStartScale.x!==0?h.scale.x/this._dragStartScale.x:1,this._dragStartScale.y!==0?h.scale.y/this._dragStartScale.y:1,this._dragStartScale.z!==0?h.scale.z/this._dragStartScale.z:1);if(f)for(const{obj:g,startScale:v}of m)g.scale.copy(v).multiply(_);else for(const{obj:g,startPos:v,startScale:b}of m){const w=v.clone().sub(this._pivotPos);w.multiply(_),g.position.copy(this._pivotPos).add(w),g.scale.copy(b).multiply(_)}}}d==="translate"&&this._store.vertexSnapActive&&this._vertexSnapTargets.length>0?this._applyVertexSnap(h,m):d==="translate"&&this._store.shell.snapToSurface&&this._applySurfaceSnap(h,m),this._restorePreservedChildren();for(const _ of this._boxHelpers.values())"update"in _&&_.update();this._flushGizmoToStoreLive()}),l.addEventListener("mouseUp",()=>{this._flushGizmoToStore()})};r(this.transformControls),r(this._auxRotateControls),r(this._auxScaleControls),this._gizmoHelper=this.transformControls.getHelper(),this._gizmoHelper.traverse(l=>l.layers.set(P)),e.add(this._gizmoHelper);for(const l of[this._auxRotateControls,this._auxScaleControls]){const a=l.getHelper();a.traverse(h=>h.layers.set(P)),a.visible=!1,e.add(a)}this._pivotDummy.layers.set(P),e.add(this._pivotDummy),this._surfaceSnapIndicator=new y(new fs(.08,.12,16),new R({color:65416,side:Qt,depthTest:!1})),this._surfaceSnapIndicator.rotation.x=-Math.PI/2,this._surfaceSnapIndicator.visible=!1,this._surfaceSnapIndicator.renderOrder=999,this._surfaceSnapIndicator.layers.set(P),e.add(this._surfaceSnapIndicator),this._vertexSnapIndicator=new y(new U(1,8,8),new R({color:65450,depthTest:!1})),this._vertexSnapIndicator.visible=!1,this._vertexSnapIndicator.renderOrder=999,this._vertexSnapIndicator.layers.set(P),e.add(this._vertexSnapIndicator),this._gizmoLook=je(t),this._rebuildAxisLines();for(const l of this._allGizmos())this._installGizmoHighlight(l);this._patchGizmo(this._gizmoHelper),this._patchGizmo(this._auxRotateControls.getHelper()),this._patchGizmo(this._auxScaleControls.getHelper()),this._dropNegativeAxisHandles(this._gizmoHelper,["translate","scale"]),this._dropNegativeAxisHandles(this._auxScaleControls.getHelper(),["scale"]),this._patchCombinedScaleGizmo(this._auxScaleControls.getHelper()),this._applyGizmoArrows(),this._lookGizmoSizePx=Fe(t),this._applyGizmoSize(),this._applyGizmoAxisFrame(),this._vcCamera=new $e(-1.5,1.5,1.5,-1.5,.1,10),this._initOrientationGizmo(),window.addEventListener("keydown",this._onFlyKeyDown),window.addEventListener("keyup",this._onFlyKeyUp),s.addEventListener("pointerdown",this._onFlyPointerDown),s.addEventListener("pointerup",this._onFlyPointerUp),s.addEventListener("pointermove",this._onFlyPointerMove),s.addEventListener("wheel",this._onFlyWheel,{passive:!1}),t.addEventListener("pointerdown",this._onAltOrbitStart,{capture:!0}),window.addEventListener("pointerup",this._onAltOrbitRelease,{capture:!0}),window.addEventListener("pointercancel",this._onAltOrbitRelease,{capture:!0}),window.addEventListener("keydown",this._onSnapHoldKey),window.addEventListener("keyup",this._onSnapHoldKey),t.addEventListener("pointerdown",this._onPointerDown),s.addEventListener("pointermove",this._onPointerMove),this._onInteractionPointerUp=l=>{(l.target===t||l.target===s||this._pointerSessionActive)&&this._onPointerUp(l)},s.addEventListener("pointerup",this._onInteractionPointerUp),this._onInteractionDblClick=l=>{(l.target===t||l.target===s)&&this._onDoubleClick(l)},s.addEventListener("dblclick",this._onInteractionDblClick),t.addEventListener("dragover",this._onDragOver),t.addEventListener("dragleave",this._onDragLeave),t.addEventListener("drop",this._onDrop),this._editorObjects=[this.grid,...this._axisLines?[this._axisLines]:[],this._editorAmbient,this._editorDirLight,this.batchedRenderer,this._gizmoHelper,this._auxRotateControls.getHelper(),this._auxScaleControls.getHelper(),this._pivotDummy,this._surfaceSnapIndicator,this._vertexSnapIndicator],this._publishPickContext&&this._installPickContext(this.camera)}setScene(t){if(t===this._scene)return;for(const i of this._editorObjects)i.removeFromParent(),t.add(i);for(const i of this._boxHelpers.values())i.removeFromParent(),t.add(i);for(const i of this._constraintHelpers.values())i.removeFromParent(),t.add(i);for(const i of this._reflectionProbeHelpers.values())i.removeFromParent(),t.add(i);for(const i of this._triggerVolumeHelpers.values())i.removeFromParent(),t.add(i);for(const{helper:i}of this._cameraHelpers.values())i.removeFromParent(),t.add(i);for(const i of this._spatialHandleRoots)i.removeFromParent(),t.add(i);this._scene=t,this._contentBoundsAt=0;const e=this._lightRig&&!this._store.isAdoptedSceneActive&&this._presentation===null;this._editorAmbient.visible=e,this._editorDirLight.visible=e}get currentScene(){return this._scene}get renderCamera(){return this._cameraView??this.freeCamera}get freeCamera(){return this._projection==="orthographic"?this.orthographicCamera:this.camera}get projection(){return this._projection}_installPickContext(t){this._publishPickContext&&Ze({camera:t,canvas:this._canvas,editorControls:{activate:(e,i)=>this._selectConstraintControlAt({clientX:e,clientY:i},!1),hover:(e,i)=>this._hoverConstraintControlAt({clientX:e,clientY:i}),clearHover:()=>this._clearConstraintControlHover()}})}setProjection(t){if(this._cameraView){this._pendingProjection=t;return}if(this._projection===t)return;t==="orthographic"?this._syncOrthographicFromPerspective():this._syncPerspectiveFromOrthographic(),this._projection=t;const e=this.freeCamera;this.orbitControls.object=e;for(const i of this._allGizmos())i.camera=e;this._applyGizmoSize(),this.orbitControls.update(),this._installPickContext(e),this._onProjectionChange?.(t)}_syncOrthographicFromPerspective(t=!1){const e=Math.max(.01,this.camera.position.distanceTo(this.orbitControls?.target??new p));t||(this._orthographicHeight=2*e*Math.tan(j.degToRad(this.camera.fov*.5))),this.orthographicCamera.position.copy(this.camera.position),this.orthographicCamera.quaternion.copy(this.camera.quaternion),this.orthographicCamera.up.copy(this.camera.up),this.orthographicCamera.zoom=1,this._applyOrthographicFrustum(),this.orthographicCamera.updateMatrixWorld(!0)}_syncPerspectiveFromOrthographic(){const e=this._orthographicHeight/Math.max(this.orthographicCamera.zoom,.01)/(2*Math.tan(j.degToRad(this.camera.fov*.5))),i=this.orthographicCamera.position.clone().sub(this.orbitControls.target).normalize();this.camera.position.copy(this.orbitControls.target).add(i.multiplyScalar(e)),this.camera.quaternion.copy(this.orthographicCamera.quaternion),this.camera.up.copy(this.orthographicCamera.up),this.camera.updateMatrixWorld(!0)}_applyOrthographicFrustum(){const t=this._orthographicHeight*.5,e=t*this._viewportAspect;this.orthographicCamera.left=-e,this.orthographicCamera.right=e,this.orthographicCamera.top=t,this.orthographicCamera.bottom=-t,this.orthographicCamera.updateProjectionMatrix()}setGizmoCamera(t){const e=t??this.freeCamera;if(this.transformControls.camera!==e){for(const i of this._allGizmos())i.camera=e;this._applyGizmoSize()}}applyKeymapNavigation(){const{orbit:t,turntable:e}=Z();!e&&this.camera.up.y<.9999&&Math.abs(this.camera.up.z)<.9999&&this.camera.up.set(0,1,0),this.orbitControls.mouseButtons={LEFT:this._altDragOrbit?dt.ROTATE:-1,MIDDLE:t==="middle"?dt.ROTATE:dt.PAN,RIGHT:t==="middle"?-1:dt.ROTATE}}_unsubscribeKeymap=()=>{};_installTurntable(){const t=this.orbitControls,e=t._handleMouseDownDolly.bind(this.orbitControls),i=t._handleMouseMoveDolly.bind(this.orbitControls);let s=null;t._handleMouseDownDolly=a=>{if(e(a),s=null,Z().zoom?.drag!=="dolly")return;const h=this._canvas.getBoundingClientRect().top,d=this.orbitControls.object;s={len0:Math.max(5+a.clientY-h,1),offset:d.position.clone().sub(this.orbitControls.target),zoom0:d.zoom??1}},t._handleMouseMoveDolly=a=>{if(Z().zoom?.drag!=="dolly"||!s){i(a);return}const h=this._canvas.getBoundingClientRect().top,d=Math.max(.01,2*((5+a.clientY-h)/s.len0-1)+1),f=this.orbitControls.object;f.isOrthographicCamera?(f.zoom=s.zoom0/d,f.updateProjectionMatrix(),this.orbitControls.dispatchEvent({type:"change"})):f.position.copy(this.orbitControls.target).addScaledVector(s.offset,d),this.orbitControls.update()};const o=t._handleTouchStartRotate.bind(this.orbitControls);t._handleTouchStartRotate=a=>{for(const h of[...this._rotateStartListeners])h();o(a)};const n=t._handleMouseDownRotate.bind(this.orbitControls),r=t._handleMouseMoveRotate.bind(this.orbitControls);let l=null;t._handleMouseDownRotate=a=>{n(a),l=null;for(const f of[...this._rotateStartListeners])f();if(!Z().turntable)return;const h=this.orbitControls.object,d=new p(0,1,0).applyQuaternion(h.quaternion);l={x:a.clientX,y:a.clientY,reverse:d.y<0?-1:1}},t._handleMouseMoveRotate=a=>{const h=Z().turntable;if(!h||!l){r(a);return}const d=a.clientX-l.x,f=a.clientY-l.y;l.x=a.clientX,l.y=a.clientY,this._turntableStep(d,f,l.reverse,j.degToRad(h.degreesPerPixel))}}_rotateStartListeners=new Set([()=>{if(!Z().autoPerspective||this._projection!=="orthographic")return;const t=this.camera.position.clone().sub(this.orbitControls.target),e=new p(0,1,0).applyQuaternion(this.camera.quaternion);Ue(t,e)!==null&&this.setProjection("perspective")}]);_axisViewListeners=[()=>(Z().autoPerspective&&this.setProjection("orthographic"),!0)];onAxisView(t){return this._axisViewListeners.push(t),()=>{const e=this._axisViewListeners.indexOf(t);e!==-1&&this._axisViewListeners.splice(e,1)}}onRotateStart(t){return this._rotateStartListeners.add(t),()=>this._rotateStartListeners.delete(t)}stepView(t){const e=this.orbitControls.object,i=this.orbitControls.target,s=j.degToRad(15),o=new p(0,1,0),n=new p(1,0,0).applyQuaternion(e.quaternion),r=new p(0,0,1).applyQuaternion(e.quaternion),l=new p(0,1,0).applyQuaternion(e.quaternion);this._snapAnimating=!1;const a=this.orbitControls;if(a._sphericalDelta.set(0,0,0),a._panOffset.set(0,0,0),this.orbitControls.dispatchEvent({type:"start"}),t==="opposite"&&Ue(r,l)!==null){const u=S=>S.y>.5?new p(0,0,-1):S.y<-.5?new p(0,0,1):new p(0,1,0),m=r.clone().round(),_=m.clone().negate(),g=u(m).angleTo(l)*Math.sign(u(m).cross(l).dot(m)||1),v=u(_).applyAxisAngle(_,g),b=new L().setFromRotationMatrix(new ft().lookAt(_,new p,v)),w=e.position.distanceTo(i);e.quaternion.copy(b),e.position.copy(i).addScaledVector(_,w),e.up.copy(v),this.orbitControls.update(),this.orbitControls.dispatchEvent({type:"end"});return}const h=new L;switch(t){case"orbit-left":h.setFromAxisAngle(o,-s);break;case"orbit-right":h.setFromAxisAngle(o,s);break;case"orbit-up":h.setFromAxisAngle(n,-s);break;case"orbit-down":h.setFromAxisAngle(n,s);break;case"opposite":h.setFromAxisAngle(o,Math.PI);break;case"roll-left":h.setFromAxisAngle(r,-s);break;case"roll-right":h.setFromAxisAngle(r,s);break}const d=h.multiply(e.quaternion).normalize(),f=e.position.distanceTo(i);e.quaternion.copy(d),e.position.copy(i).addScaledVector(new p(0,0,1).applyQuaternion(d),f),e.up.set(0,1,0).applyQuaternion(d),this.orbitControls.update(),this.orbitControls.dispatchEvent({type:"end"})}zoomStep(t){const e=Z().zoom?.step??1.2,i=t>0?1/e:e,s=this.orbitControls.object;if(this.orbitControls.dispatchEvent({type:"start"}),s.isOrthographicCamera)s.zoom/=i,s.updateProjectionMatrix(),this.orbitControls.dispatchEvent({type:"change"});else{const o=this.orbitControls.target;s.position.sub(o).multiplyScalar(i).add(o)}this.orbitControls.update(),this.orbitControls.dispatchEvent({type:"end"})}_turntableStep(t,e,i,s){const o=this.orbitControls.object,n=this.orbitControls.target,r=new p(0,1,0),l=new p(1,0,0).applyQuaternion(o.quaternion),a=new p(0,0,1).applyQuaternion(o.quaternion),h=new p;if(r.distanceToSquared(a)>.001){h.crossVectors(r,a),h.dot(l)<0&&h.negate();const _=(Math.abs(r.angleTo(a)/Math.PI-.5)*2)**2;h.lerp(l,_)}else h.copy(l);h.lengthSq()===0&&h.copy(l),h.normalize();const d=new L().setFromAxisAngle(h,-s*e),u=new L().setFromAxisAngle(r,-s*i*t).multiply(d).multiply(o.quaternion).normalize(),m=o.position.distanceTo(n);o.quaternion.copy(u),o.position.copy(n).addScaledVector(new p(0,0,1).applyQuaternion(u),m),o.up.set(0,1,0).applyQuaternion(u),this.orbitControls.update()}get cameraViewMode(){return this._cameraViewMode}setCameraView(t,e){if(this.clearCameraView(),this._cameraView=t,this._cameraViewMode=e,this._orbitEnabledBeforeCameraView=this.orbitControls.enabled,this._orbitTargetBeforeCameraView.copy(this.orbitControls.target),e==="pilot"){const i=t.getWorldPosition(new p),s=t.getWorldDirection(new p),o=Math.max(1,this.freeCamera.position.distanceTo(this.orbitControls.target));this.orbitControls.object=t,this.orbitControls.target.copy(i).add(s.multiplyScalar(o)),this.orbitControls.enabled=!0,this.orbitControls.update()}else this.orbitControls.enabled=!1;this._publishPickContext&&this._installPickContext(t)}clearCameraView(){if(!this._cameraView)return;this._flyActive&&this._exitFlyMode(),this.orbitControls.object=this.freeCamera,this.orbitControls.target.copy(this._orbitTargetBeforeCameraView),this.orbitControls.enabled=this._orbitEnabledBeforeCameraView,this.orbitControls.update(),this._cameraView=null,this._cameraViewMode=null;const t=this._pendingProjection;this._pendingProjection=null,t&&t!==this._projection&&this.setProjection(t),this._publishPickContext&&this._installPickContext(this.freeCamera)}get objectMap(){return this._objectMap}set objectMap(t){this._objectMap=t}attach(t){const e=this._objectForAuthoringId(t);e&&(this._attachedAuthoringId=t,this._attachGizmosTo(e))}detach(){this._attachedAuthoringId=null,this._detachGizmos()}_objectForAuthoringId(t){const e=this._authoring();return e.hierarchy.node(t)===null?null:Hs(e,this._objectMap,t)}_authoringIdForObject(t){return this._authoring().hierarchy.idForObject3D?.(t)??Es(t)??null}_hasBoundableGeometry(t){return Ei([t]).length>0}_makeDiagnosticBounds(t){if(this._hasBoundableGeometry(t))return new Qe(t,ht(this._canvas).visible);const e=new I(Bt,Bt,Bt),i=new Si(e);e.dispose();const s=new lt({color:new C(ht(this._canvas).visible),toneMapped:!1}),o=new Zt(i,s);return t.getWorldPosition(o.position),o.isBoxHelper=!0,o._entityObj=t,o}_syncBoxHelpers(){for(const e of this._boxHelpers.values())this._scene.remove(e),e.geometry.dispose(),e.material.dispose();this._boxHelpers.clear();const t=(e,i)=>{i.layers.set(P),this._scene.add(i),this._boxHelpers.set(e,i)};if(this._store.shell.showHelpers&&this._store.shell.helperVisibility.bounds)for(const e of this._objectMap.keys()){const i=this._objectForAuthoringId(e);i&&t(`bounds:${e}`,this._makeDiagnosticBounds(i))}for(const e of this._store.shell.selectedEntityIds){const i=this._objectForAuthoringId(e);if(!i)continue;const s=this._hasBoundableGeometry(i);if(s&&this._selectionMarks.wire){let o=0;i.traverse(n=>{const r=n;if(!r.isMesh||!r.geometry||J(r))return;const l=Re(this._canvas),a=new Zt(new ms(r.geometry),new lt({color:l.color??ht(this._canvas).visible,transparent:!0,opacity:l.opacity??.5,depthTest:!0}));a.matrixAutoUpdate=!1,a._wireOf=r,t(`wire:${e}:${o++}`,a)})}if(!(s&&!this._selectionMarks.box)){if(s){const o=De(this._canvas);t(`selection:${e}`,new de(i,{color:ht(this._canvas).visible,edges:o.edges,frame:o.frame,...o.lineWidth===null?{}:{lineWidth:o.lineWidth}}));continue}this._standaloneAuthoring&&i.isBone||[...this._constraintHelpers.values()].some(o=>o.presents(i))||i.userData.volterOwnOverlay||t(`selection:${e}`,new de(i,{fixedSize:Bt,color:ht(this._canvas).visible}))}}}_syncReflectionProbeHelpers(t=null){if(t===null){const e=new Map,i=new Set;for(const[s,o]of this._objectMap)!o||i.has(o)||!Wt(o)||(i.add(o),e.set(s,o));for(const[s,o]of this._reflectionProbeHelpers)e.get(s)!==o.source&&(o.dispose(),this._reflectionProbeHelpers.delete(s));for(const[s,o]of e)this._ensureReflectionProbeHelper(s,o)}else{let e=!1;for(const i of t){const s=this._objectMap.get(i),o=s&&Wt(s)?s:null,n=this._reflectionProbeHelpers.get(i);n&&n.source!==o&&(o===null&&(e=!0),n.dispose(),this._reflectionProbeHelpers.delete(i)),o&&![...this._reflectionProbeHelpers.values()].some(r=>r.source===o)&&this._ensureReflectionProbeHelper(i,o)}if(e){this._syncReflectionProbeHelpers();return}}for(const[e,i]of this._reflectionProbeHelpers)i.setSelected(this._store.shell.selectedEntityIds.has(e)),i.visible=this._threejsToolContextActive&&this._store.shell.showHelpers&&this._store.shell.helperVisibility.reflectionProbes,i.update()}_ensureReflectionProbeHelper(t,e){if(this._reflectionProbeHelpers.has(t))return;const i=new Us(e);this._reflectionProbeHelpers.set(t,i),this._scene.add(i)}_syncTriggerVolumeHelpers(t=null){if(t===null){const i=new Map,s=new Set;for(const[o,n]of this._objectMap)!n||s.has(n)||!be(n)||(s.add(n),i.set(o,n));for(const[o,n]of this._triggerVolumeHelpers)i.get(o)!==n.source&&this._disposeTriggerVolumeHelper(o,n);for(const[o,n]of i)this._ensureTriggerVolumeHelper(o,n)}else{let i=!1;for(const s of t){const o=this._objectMap.get(s),n=o&&be(o)?o:null,r=this._triggerVolumeHelpers.get(s);r&&r.source!==n&&(n===null&&(i=!0),this._disposeTriggerVolumeHelper(s,r)),n&&![...this._triggerVolumeHelpers.values()].some(l=>l.source===n)&&this._ensureTriggerVolumeHelper(s,n)}if(i){this._syncTriggerVolumeHelpers();return}}const e=this._threeSurfaceShowing&&this._store.shell.showHelpers&&this._store.shell.helperVisibility.triggerVolumes;for(const[i,s]of this._triggerVolumeHelpers)s.setSelected(this._store.shell.selectedEntityIds.has(i)),s.visible=e,s.update()}_ensureTriggerVolumeHelper(t,e){if(this._triggerVolumeHelpers.has(t))return;const i=new Eo(e);this._triggerVolumeHelpers.set(t,i),this._scene.add(i)}_disposeTriggerVolumeHelper(t,e){e.dispose(),this._triggerVolumeHelpers.delete(t)}_syncConstraintHelpers(t=null){if(t===null){const i=new Map,s=new Set;for(const[o,n]of this._objectMap)!n||s.has(n)||ge(n).length===0||(s.add(n),i.set(o,n));for(const[o,n]of this._constraintHelpers)i.get(o)!==n.source&&(this._disposeConstraintHelper(n),this._constraintHelpers.delete(o));for(const[o,n]of i)this._ensureConstraintHelper(o,n)}else{let i=!1;for(const s of t){const o=this._objectMap.get(s),n=o&&ge(o).length>0?o:null,r=this._constraintHelpers.get(s);r&&r.source!==n&&(n===null&&(i=!0),this._disposeConstraintHelper(r),this._constraintHelpers.delete(s)),n&&![...this._constraintHelpers.values()].some(l=>l.source===n)&&this._ensureConstraintHelper(s,n)}if(i){this._syncConstraintHelpers();return}}const e=new Set;for(const i of this._store.shell.selectedEntityIds){const s=this._objectForAuthoringId(i);s&&e.add(s)}for(const[i,s]of this._constraintHelpers)s.setSelected(this._store.shell.selectedEntityIds.has(i)),s.setSelectedObjects(e),s.visible=this._threejsToolContextActive&&this._store.shell.showHelpers&&this._store.shell.helperVisibility.constraints,s.update(this.camera)}_ensureConstraintHelper(t,e){if(this._constraintHelpers.has(t))return;const i=new Ns(e);this._constraintHelpers.set(t,i),this._scene.add(i)}_disposeConstraintHelper(t){this._hoveredConstraintControl?.helper===t&&(this._hoveredConstraintControl=null),t.dispose()}_raycastConstraintControl(t){const e=[];for(const n of this._constraintHelpers.values())n.visible&&e.push(...n.controlMeshes());if(e.length===0)return null;const i=this._canvas.getBoundingClientRect(),s=new et((t.clientX-i.left)/i.width*2-1,-((t.clientY-i.top)/i.height)*2+1);this._constraintControlRaycaster.setFromCamera(s,this._screenCamera);const o=this._constraintControlRaycaster.intersectObjects(e,!1)[0]?.object;if(!o)return null;for(const n of this._constraintHelpers.values()){const r=n.controlFor(o);if(r)return{helper:n,control:r}}return null}_updateConstraintControlHover(t){if(t.buttons&1)return this._constraintControlPointerSession;const e=this._hoverConstraintControlAt(t);return e?(this._hoveredSpatialHandle&&(le(this._hoveredSpatialHandle,!1),this._hoveredSpatialHandle=null),this._canvas.style.cursor=e,!0):(this._canvas.style.cursor="",!1)}_hoverConstraintControlAt(t){const e=this._raycastConstraintControl(t),i=this._hoveredConstraintControl;return e?(i?.mesh!==e.control.mesh&&(i&&i.helper.setHoveredControl(null),e.helper.setHoveredControl(e.control.mesh),this._hoveredConstraintControl={helper:e.helper,mesh:e.control.mesh}),this._authoringIdForObject(e.control.object)?"pointer":"not-allowed"):(this._clearConstraintControlHover(),null)}_clearConstraintControlHover(){this._hoveredConstraintControl?.helper.setHoveredControl(null),this._hoveredConstraintControl=null}_selectConstraintControlAt(t,e=!0){const i=this._raycastConstraintControl(t);if(!i)return!1;this._constraintControlPointerSession=e;const s=this._authoringIdForObject(i.control.object);if(s){const o=this._authoring();Lt(o,[s],{intent:"exact"})||this._store.shell.select(s),V(`${i.control.label} selected — move it with the gizmo.`)}else V(`${i.control.label} is a runtime-only constraint control.`);return!0}_syncCameraHelpers(t=null){if(t===null){const i=new Map;for(const[s,o]of this._objectMap){const n=this._nativeCamera(o);n&&i.set(s,n)}for(const[s,o]of this._cameraHelpers)i.get(s)!==o.source&&this._disposeCameraHelper(s,o);for(const[s,o]of i)this._ensureCameraHelper(s,o)}else{let i=!1;for(const s of t){const o=this._objectMap.get(s),n=o?this._nativeCamera(o):null,r=this._cameraHelpers.get(s);r&&r.source!==n&&(n===null&&(i=!0),this._disposeCameraHelper(s,r)),n&&![...this._cameraHelpers.values()].some(l=>l.source===n)&&this._ensureCameraHelper(s,n)}if(i){this._syncCameraHelpers();return}}const e=this._threeSurfaceShowing&&this._store.shell.showHelpers&&this._store.shell.helperVisibility.cameras;for(const i of this._cameraHelpers.values())i.helper.visible=e,i.helper.update()}_syncLightHelpers(t=null){if(t===null){const i=new Map;for(const[s,o]of this._objectMap){const n=this._nativeLight(o);n&&i.set(s,n)}for(const[s,o]of this._lightHelpers)i.get(s)!==o.source&&this._disposeLightHelper(s,o);for(const[s,o]of i)this._ensureLightHelper(s,o)}else{let i=!1;for(const s of t){const o=this._objectMap.get(s),n=o?this._nativeLight(o):null,r=this._lightHelpers.get(s);r&&r.source!==n&&(n===null&&(i=!0),this._disposeLightHelper(s,r)),n&&![...this._lightHelpers.values()].some(l=>l.source===n)&&this._ensureLightHelper(s,n)}if(i){this._syncLightHelpers();return}}const e=this._threeSurfaceShowing&&this._store.shell.showHelpers&&this._store.shell.helperVisibility.lights;for(const i of this._lightHelpers.values())i.helper.visible=e,i.helper.update?.()}_nativeLight(t){return t.userData.volterOwnOverlay?null:t.isLight?t:null}_disposeLightHelper(t,e){e.helper.removeFromParent(),e.helper.dispose?.(),this._lightHelpers.delete(t)}_ensureLightHelper(t,e){if(this._lightHelpers.has(t))return;const i=.5;let s=null;const o=e;try{o.isDirectionalLight?s=new _s(e,i):o.isPointLight?s=new gs(e,i):o.isSpotLight?s=new ys(e):o.isHemisphereLight&&(s=new vs(e,i))}catch{s=null}s&&(s.name=`Light helper: ${e.name||t}`,s.userData.editorOnly=!0,s.traverse(n=>n.layers.set(P)),s.layers.set(P),this._lightHelpers.set(t,{source:e,helper:s}),this._scene.add(s))}_syncAudioHelpers(t=null){if(t===null){const i=new Map;for(const[s,o]of this._objectMap){const n=this._nativeAudio(o);n&&i.set(s,n)}for(const[s,o]of this._audioHelpers)i.get(s)!==o.source&&this._disposeAudioHelper(s,o);for(const[s,o]of i)this._ensureAudioHelper(s,o)}else for(const i of t){const s=this._objectMap.get(i),o=s?this._nativeAudio(s):null,n=this._audioHelpers.get(i);n&&n.source!==o&&this._disposeAudioHelper(i,n),o&&![...this._audioHelpers.values()].some(r=>r.source===o)&&this._ensureAudioHelper(i,o)}const e=this._threeSurfaceShowing&&this._store.shell.showHelpers&&this._store.shell.helperVisibility.audio;for(const i of this._audioHelpers.values())i.helper.visible=e}_nativeAudio(t){const e=t.type;return e==="Audio"||e==="PositionalAudio"||e==="AudioListener"?t:null}_ensureAudioHelper(t,e){if(this._audioHelpers.has(t))return;const i=new K,s=e.type==="AudioListener"?8377599:16763274,o=new y(new at(.16),new R({color:s,wireframe:!0,depthTest:!1}));i.add(o),i.name=`Audio helper: ${e.name||t}`,i.userData.editorOnly=!0,i.traverse(n=>n.layers.set(P)),i.layers.set(P),e.add(i),this._audioHelpers.set(t,{source:e,helper:i})}_disposeAudioHelper(t,e){e.helper.traverse(i=>{const s=i;s.geometry?.dispose?.(),s.material?.dispose?.()}),e.helper.removeFromParent(),this._audioHelpers.delete(t)}_disposeCameraHelper(t,e){e.helper.removeFromParent(),e.helper.dispose(),this._cameraHelpers.delete(t)}_ensureCameraHelper(t,e){if(this._cameraHelpers.has(t))return;let i;try{i=new ws(e)}catch(s){this._refuseCameraOverlay(t,e,s);return}i.name=`Camera frustum: ${e.name||t}`,i.userData.editorOnly=!0,i.layers.set(P),this._cameraHelpers.set(t,{source:e,helper:i}),this._scene.add(i)}_refusedCameraOverlays=new Set;_refuseCameraOverlay(t,e,i){this._refusedCameraOverlays.has(t)||(this._refusedCameraOverlays.add(t),It.warn(`Helpers → Cameras draws no frustum for "${e.name||e.type}": ${i instanceof Error?i.message:String(i)}. This world's camera was constructed by the GAME's own copy of three, and \`THREE.CameraHelper\` is the editor's class reading fields off it that that revision does not define. Every other camera capability (framing, selection, inspection) is unaffected. It closes when the game resolves \`three\` to the host's instance — a bare, un-rewritten \`import 'three'\` in its own source.`,"authoring"))}_nativeCamera(t){if(t.userData.volterOwnOverlay)return null;if(t.isCamera)return t;const e=tt(t,"_camera");return e?.isCamera?e:null}_syncSpatialHandles(){pi(this._spatialHandleRoots),this._spatialHandleRoots=[],this._spatialHandleMeshes=[],this._hoveredSpatialHandle=null;const t=te(this._authoring());if(!t||!this._threejsToolContextActive||!this._store.shell.showHelpers)return;const e=this._store.shell.helperVisibility;for(const i of this._store.shell.selectedEntityIds){const s=t.layers(i).filter(n=>n.category in e?e[n.category]:!0),o=no(i,s);for(const n of o.handles)di(n,this._screenCamera);for(const n of o.roots)this._scene.add(n);this._spatialHandleRoots.push(...o.roots),this._spatialHandleMeshes.push(...o.handles)}}_raycastSpatialHandle(t){if(this._spatialHandleMeshes.length===0)return null;const e=this._canvas.getBoundingClientRect(),i=new et((t.clientX-e.left)/e.width*2-1,-((t.clientY-e.top)/e.height)*2+1);return this._spatialHandleRaycaster.setFromCamera(i,this._screenCamera),this._spatialHandleRaycaster.intersectObjects(this._spatialHandleMeshes,!1)[0]?.object??null}_spatialHandleWorldPoint(t){const e=this._canvas.getBoundingClientRect(),i=new et((t.clientX-e.left)/e.width*2-1,-((t.clientY-e.top)/e.height)*2+1);this._spatialHandleRaycaster.setFromCamera(i,this._screenCamera);const s=new p;return this._spatialHandleRaycaster.ray.intersectPlane(this._spatialHandleDragPlane,s)?s.add(this._spatialHandleDragOffset):null}_finishSpatialHandleDrag(t){const e=this._activeSpatialHandle;this._activeSpatialHandle=null,this.orbitControls.enabled=this._orbitEnabledBeforeHandleDrag,this.transformControls.enabled=this._transformEnabledBeforeHandleDrag,this.syncFromStore(),this._canvas.style.cursor="",t&&e&&te(this._authoring())?.commit(e.nodeId,e.handle.id,[this._spatialHandleDragPoint.x,this._spatialHandleDragPoint.y,this._spatialHandleDragPoint.z])}_updateSpatialHandleDrag(t){const e=this._activeSpatialHandle;if(!e)return!1;const i=this._spatialHandleWorldPoint(t);return i&&(this._spatialHandleDragPoint.copy(i),te(this._authoring())?.preview(e.nodeId,e.handle.id,[i.x,i.y,i.z]),this._syncSpatialHandles(),this._canvas.style.cursor="grabbing"),!0}_updateSpatialHandleHover(t){if(t.buttons&1||this._spatialHandleMeshes.length===0)return;const e=this._raycastSpatialHandle(t);if(e===this._hoveredSpatialHandle)return;if(this._hoveredSpatialHandle&&le(this._hoveredSpatialHandle,!1),this._hoveredSpatialHandle=e,!e){this._canvas.style.cursor="";return}le(e,!0);const i=hi(e);this._canvas.style.cursor=i?.handle.writable?"grab":"not-allowed"}_updateEditorHandleInteraction(t){return this._updateSpatialHandleDrag(t)||this._updateConstraintControlHover(t)}_previewInfrastructure(){return[this.grid,...this._axisLines?[this._axisLines]:[],this._gizmoHelper,this._auxRotateControls.getHelper(),this._auxScaleControls.getHelper(),...this._boxHelpers.values(),...this._constraintHelpers.values(),...this._reflectionProbeHelpers.values(),...this._triggerVolumeHelpers.values(),...[...this._cameraHelpers.values()].map(({helper:t})=>t),...this._spatialHandleRoots]}_suspendPreviewInfrastructure(){const t=this._previewInfrastructure().map(e=>[e,e.visible]);for(const[e]of t)e.visible=!1;return()=>{for(const[e,i]of t)e.visible=i}}_allGizmos(){return[this.transformControls,this._auxRotateControls,this._auxScaleControls]}_anyGizmoDragging(){return this._allGizmos().some(t=>t.dragging)}_attachGizmosTo(t){this.transformControls.attach(t),this._auxRotateControls.attach(t),this._auxScaleControls.attach(t)}_detachGizmos(){for(const t of this._allGizmos())t.detach()}syncFromStore(){this._gizmoHelper.traverse(x=>x.layers.set(P));const t=this._store.shell.transformMode,i=t==="combined"||t==="select"?"translate":t;this.transformControls.mode!==i&&this.transformControls.setMode(i),this._applySnapToGizmos();for(const x of this._allGizmos())x.setSpace(this._store.shell.transformSpace);const s=kt(),o=this._authoring(),n=s.toolOwner(o,this._store.shell.selectedEntityIds);this._threejsToolContextActive=(this._standaloneAuthoring||s.toolOwnerPainted(this._store.shell,n))&&n?.kind==="three";const r=this._standaloneAuthoring||s.threeSurfaceShowing(this._store.shell,o);this._threeSurfaceShowing=r,this.grid.visible=this._presentationGrid&&r,this._axisLines&&(this._axisLines.visible=this.grid.visible&&this._axesWanted);const l=this._store.shell.helperVisibility,a=this._standaloneAuthoring?null:s.threeViewportRootId(this._store.shell),h=a!==null&&ji(a);h&&s.applyRootHiddenVisibility(this._objectMap,a),h&&s.suppressRootEnvironment(this._scene);const d=this._store.gizmoEpoch,f=`${this._store.shell.showHelpers}|${JSON.stringify(l)}|${a??""}|${h}|${this._threejsToolContextActive}`,u=this._objectMap!==this._lastGizmoObjectMap,m=f!==this._lastGizmoSig,_=u?null:this._store.ingestObjectMapMembershipChangesSince(this._lastGizmoEpoch),g=u||m||_===null?null:_.changedIds,v=g===null||g.size>0;if(this._lastGizmoObjectMap=this._objectMap,this._lastGizmoSig=f,this._lastGizmoEpoch=d,v){s.applyRootHiddenVisibility(this._objectMap,a);const x=g===null?To(this._objectMap):zo(this._objectMap,g);for(const A of x)A.traverse(M=>{if(tt(M,"editorIcon")){M.visible=this._store.shell.showHelpers;return}if(!tt(M,"editorHelper"))return;const E=tt(M,"editorHelperType");if(E==="skeletons"){M.visible=this._store.shell.showHelpers&&(l.skeletons||!!tt(M,"skeletonEnabled"));return}E&&E in l?M.visible=this._store.shell.showHelpers&&l[E]:M.visible=this._store.shell.showHelpers});for(const[A,M]of this._helpers)M.visible=this._store.shell.showHelpers&&(!(A in l)||l[A]);this._syncCameraHelpers(g),this._syncLightHelpers(g)}this._syncAudioHelpers(g),this._syncReflectionProbeHelpers(g),this._syncTriggerVolumeHelpers(g),this._syncConstraintHelpers(g);const b=this._threejsToolContextActive&&o.capabilities.transform&&t!=="select"?this._store.shell.selectedEntityId:null,w=t==="translate"||t==="combined"?"position":t==="rotate"?"rotation":"scale",z=b?t==="combined"?(x=>["position","rotation","scale"].some(A=>o.transforms?.editability?.(x,A).writable??!0))(b):o.transforms?.editability?.(b,w).writable??!0:!1;if(b&&z){if(!this._anyGizmoDragging())if(this._store.shell.pivotMode==="median-point"&&this._store.shell.selectedEntityIds.size>1){const x=new p;let A=0;for(const M of this._store.shell.selectedEntityIds){if(!(o.transforms?.editability?.(M,w).writable??!0))continue;const E=this._objectForAuthoringId(M);E&&(x.add(E.getWorldPosition(ko)),A++)}A>0&&x.divideScalar(A),this._pivotDummy.position.copy(x),this._pivotDummy.quaternion.identity(),this._pivotDummy.scale.set(1,1,1),this._attachedAuthoringId=null,this._dummyIsPresentationAnchor=!1,this._attachGizmosTo(this._pivotDummy)}else{const x=this._objectForAuthoringId(b),A=tt(x,"pivot"),M=A&&(A[0]!==0||A[1]!==0||A[2]!==0),E=M?null:this._centreAnchorFor(x);if(E&&x)this._pivotDummy.position.copy(E),this._pivotDummy.quaternion.copy(x.getWorldQuaternion(ue)),this._pivotDummy.scale.copy(x.getWorldScale(gi)),this._attachedAuthoringId=b,this._dummyIsPresentationAnchor=!0,this._attachGizmosTo(this._pivotDummy);else if(M&&x){const G=new p(A[0],A[1],A[2]);G.applyQuaternion(x.getWorldQuaternion(ue)),this._pivotDummy.position.copy(x.getWorldPosition(_i)).add(G),this._pivotDummy.quaternion.copy(ue),this._pivotDummy.scale.copy(x.getWorldScale(gi)),this._attachedAuthoringId=b,this._dummyIsPresentationAnchor=!1,this._attachGizmosTo(this._pivotDummy)}else this._dummyIsPresentationAnchor=!1,this.attach(b)}}else this.detach();this._syncBoxHelpers(),this._syncSpatialHandles(),this._syncCombinedGizmoHalves()}_applySnapToGizmos(){const t=this._store.shell.snapEnabled||this._snapHold,e=this._store.shell.snapValues;for(const i of this._allGizmos())i.setTranslationSnap(t?e.translate:null),i.setRotationSnap(t?j.degToRad(e.rotate):null),i.setScaleSnap(t?e.scale:null)}_modifiedZoom=!1;_onAltOrbitStart=t=>{t.button===1&&(t.ctrlKey||t.metaKey)&&Z().orbit==="middle"&&(this._modifiedZoom=!0,this.orbitControls.mouseButtons.MIDDLE=dt.DOLLY),t.altKey&&t.button===0&&(this._altDragOrbit=!0,this.orbitControls.mouseButtons.LEFT=dt.ROTATE)};_onAltOrbitRelease=t=>{this._modifiedZoom&&(!t||t.type==="pointercancel"||t.button===1)&&(this._modifiedZoom=!1,this.applyKeymapNavigation()),this._altDragOrbit&&(this._altDragOrbit=!1,this.orbitControls.mouseButtons.LEFT=-1)};_onSnapHoldKey=t=>{const e=t.ctrlKey||t.metaKey;if(e!==this._snapHold&&(this._snapHold=e,this._applySnapToGizmos(),e&&this._anyGizmoDragging()&&!this._store.shell.snapEnabled)){const{translate:i,rotate:s,scale:o}=this._store.shell.snapValues;V(`Snapping while held: ${i} units · ${s}° · ×${o}`)}};_syncCombinedGizmoHalves(){if(this._anyGizmoDragging())return;const t=this._store.shell.transformMode==="combined",e=this._attachedAuthoringId,i=this._authoring().transforms?.editability,s=a=>e===null||(i?.(e,a).writable??!0),o=t&&this._auxRotateControls.object!==void 0&&s("rotation"),n=t&&this._transformHandles.scale&&this._auxScaleControls.object!==void 0&&s("scale");this._auxRotateControls.enabled=o,this._auxScaleControls.enabled=n;const r=this._auxRotateControls.getHelper(),l=this._auxScaleControls.getHelper();r.visible=o,l.visible=n;for(const a of[r,l])a.traverse(h=>h.layers.set(P));this.transformControls.enabled=!0}moveGizmosTo(t){const e=this._gizmoObjects();for(const i of e)t.add(i)}restoreGizmos(){const t=this._gizmoObjects();for(const e of t)this._scene.add(e)}_gizmoObjects(){return[this.grid,...this._axisLines?[this._axisLines]:[],this._editorAmbient,this._editorDirLight,this.batchedRenderer,this._gizmoHelper,this._auxRotateControls.getHelper(),this._auxScaleControls.getHelper(),this._pivotDummy,this._surfaceSnapIndicator,...[...this._cameraHelpers.values()].map(({helper:t})=>t),...this._spatialHandleRoots]}_contentBounds(t=!1){const e=performance.now(),i=this._contentBoundsAt===0||e-this._contentBoundsAt>Lo;if(t||i){this._contentBoundsBox.makeEmpty();for(const s of this._scene.children)J(s)||Qi(this._contentBoundsBox,s);this._contentBoundsAt=e}return this._contentBoundsBox}_measureContentBounds(){const t=[];for(const e of this._scene.children)J(e)||Zi(e,t);this._contentBoundsBox.makeEmpty();for(const e of t)this._contentBoundsBox.union(e);return this._contentBoundsAt=performance.now(),t}_updateClipPlanes(){const t=this._contentBounds();let e=0,i=0;t.isEmpty()||(t.getBoundingSphere(pe),e=this.freeCamera.position.distanceTo(pe.center),i=pe.radius);const{near:s,far:o}=Yi(e,i);s===this.camera.near&&o===this.camera.far||(this.camera.near=s,this.camera.far=o,this.camera.updateProjectionMatrix(),this.orthographicCamera.near=s,this.orthographicCamera.far=o,this.orthographicCamera.updateProjectionMatrix())}seedFromGameCamera(t){const e=ei(this._measureContentBounds()),i=Is(t,e);if(!i)return!1;const s=this.camera.position.clone(),o=this.orbitControls.target.clone();this.camera.position.copy(i.position),this.orbitControls.target.copy(i.target),this.camera.lookAt(this.orbitControls.target),this.camera.updateMatrixWorld(!0);const n=this._scene.children.filter(r=>!J(r));return Os(this.camera,n,i.position.distanceTo(i.target))?(this._updateClipPlanes(),this.orbitControls.update(),!0):(this.camera.position.copy(s),this.orbitControls.target.copy(o),this.camera.lookAt(this.orbitControls.target),this.camera.updateMatrixWorld(!0),!1)}focusOnScene(){const t=ei(this._measureContentBounds());if(t.isEmpty())return!1;const e=t.getCenter(new p),i=this.camera.position.clone().sub(this.orbitControls.target).normalize(),s=ce(t,this.camera,i);return Number.isFinite(s)?(this.camera.position.copy(e).add(i.multiplyScalar(s)),this.orbitControls.target.copy(e),this._orthographicHeight=Math.max(t.getSize(new p).y,t.getSize(new p).x/this._viewportAspect)*1.15,this._syncOrthographicFromPerspective(!0),this._updateClipPlanes(),!0):!1}focusOn(t){const e=this._contentOrProbeBounds(t),i=e.getCenter(new p),s=this.camera.position.clone().sub(this.orbitControls.target).normalize(),o=ce(e,this.camera,s);this.camera.position.copy(i).add(s.multiplyScalar(o)),this.orbitControls.target.copy(i);const n=e.getSize(new p);this._orthographicHeight=Math.max(n.y,n.x/this._viewportAspect,.01)*1.15,this._syncOrthographicFromPerspective(!0)}activateVertexSnap(){this._vertexSnapTargets=this._collectVertices(this._store.shell.selectedEntityIds)}deactivateVertexSnap(){this._vertexSnapTargets=[],this._vertexSnapIndicator.visible=!1}focusOnMultiple(t){if(t.length===0)return;if(t.length===1){this.focusOn(t[0]);return}const e=new xt;for(const r of t)e.union(this._contentOrProbeBounds(r));const i=e.getCenter(new p),s=this.camera.position.clone().sub(this.orbitControls.target).normalize(),o=ce(e,this.camera,s);this.camera.position.copy(i).add(s.multiplyScalar(o)),this.orbitControls.target.copy(i);const n=e.getSize(new p);this._orthographicHeight=Math.max(n.y,n.x/this._viewportAspect,.01)*1.15,this._syncOrthographicFromPerspective(!0)}_centreAnchorFor(t){const e=this._store.shell.gizmoAnchor;if(!t||e==="pivot"||e==="auto"&&zs(t)===0)return null;const i=Vt(t);if(i.isEmpty()||e==="auto"&&!Ls(t,i)?.worldAnchored)return null;const s=i.getCenter(new p);return t.updateWorldMatrix(!0,!1),s.distanceToSquared(t.getWorldPosition(_i))<Do?null:s}_contentOrProbeBounds(t){const e=Wt(t);if(!e)return Vt(t);const i=e.config,[s,o,n]=i.size,r=i.shape==="sphere"?new p(1,1,1).multiplyScalar(Math.max(.01,i.radius)):new p(Math.max(.01,s),Math.max(.01,o),Math.max(.01,n)).multiplyScalar(.5);return t.updateWorldMatrix(!0,!1),new xt(r.clone().negate(),r).applyMatrix4(t.matrixWorld)}setHelper(t,e){st();const i=this._helpers.get(t);if(i&&(this._scene.remove(i),this._helpers.delete(t)),!e)return;W(e,"editorHelper",!0),W(e,"editorHelperType",t);const s=this._store.shell.helperVisibility;e.visible=this._store.shell.showHelpers&&(!(t in s)||s[t]),this._scene.add(e),this._helpers.set(t,e)}visibleHelpers(){return[...this._helpers.values()].filter(t=>t.visible&&t.parent!==null)}setViewPreset(t){this._projection==="orthographic"&&this.setProjection("perspective");const e=this.orbitControls.target.clone(),i=this.camera.position.distanceTo(e),s=new p;switch(t){case"top":s.set(0,1,0);break;case"front":s.set(0,0,1);break;case"right":s.set(1,0,0);break;case"bottom":s.set(0,-1,0);break;case"back":s.set(0,0,-1);break;case"left":s.set(-1,0,0);break;case"perspective":s.set(1,1,1).normalize();break}this.camera.position.copy(e).add(s.multiplyScalar(i)),t==="top"?this.camera.up.set(0,0,-1):t==="bottom"?this.camera.up.set(0,0,1):this.camera.up.set(0,1,0),this.camera.lookAt(e),t!=="perspective"&&this.setProjection("orthographic"),this.orbitControls.update()}setFieldOfView(t){if(!Number.isFinite(t.degrees)||t.degrees<=0||t.degrees>=180||t.degrees===this._fieldOfView.degrees&&t.axis===this._fieldOfView.axis)return;const e=s=>Math.tan(j.degToRad(s*.5)),i=e(this.camera.fov);this._canvas.clientWidth>0&&this._canvas.clientHeight>0&&(this._viewportAspect=this._canvas.clientWidth/this._canvas.clientHeight,this.camera.aspect=this._viewportAspect),this._fieldOfView=t,this.camera.fov=me(this._viewportAspect,t),this.camera.updateProjectionMatrix(),this._projection==="orthographic"&&(this._orthographicHeight*=e(this.camera.fov)/i),this._applyOrthographicFrustum()}setPose(t,e,i,s){this.setProjection("perspective"),s?this.camera.up.set(s.x,s.y,s.z):this.camera.up.set(0,1,0),this.camera.position.set(t.x,t.y,t.z),this.orbitControls.target.set(e.x,e.y,e.z),this.camera.lookAt(this.orbitControls.target),i!==void 0&&(this.camera.fov=i,this.camera.updateProjectionMatrix()),this.orbitControls.update()}resize(t,e){this._viewportAspect=Math.max(1,t)/Math.max(1,e),this.camera.aspect=this._viewportAspect,this.camera.fov=me(this._viewportAspect,this._fieldOfView),this.camera.updateProjectionMatrix(),this._applyOrthographicFrustum(),this._applyGizmoSize()}resolvePresentation(){this._presentation?.rig.resolveSource({light:this._store.isAdoptedSceneActive})}update(t=0){this._ensureSparkRenderer(),this._syncLookBackground();const e=this.transformControls.object;if(e&&e!==this._pivotDummy&&!e.parent&&(this._detachGizmos(),this.syncFromStore()),this._updateFlyCamera(t),this.orbitControls.update(),this._snapAnimating){const i=performance.now()-this._snapStartTime;let s=Math.min(i/this._snapDuration,1);s=s<.5?4*s*s*s:1-(-2*s+2)**3/2;const o=new L().slerpQuaternions(this._snapQ1,this._snapQ2,s),n=new p(0,0,1).applyQuaternion(o);this.freeCamera.position.copy(this.orbitControls.target).add(n.multiplyScalar(this._snapDist)),this.freeCamera.quaternion.copy(o),this.freeCamera.up.set(0,1,0).applyQuaternion(o),s>=1&&(this._snapAnimating=!1)}this._presentation&&(this.resolvePresentation(),this._presentation.rig.update(this.camera));for(const i of this._boxHelpers.values()){const s=i._wireOf;if(s){i.matrix.copy(s.matrixWorld),i.matrixWorldNeedsUpdate=!0;continue}if(i instanceof de){i.updateIfNeeded();continue}const o=i;o._entityObj?o._entityObj.getWorldPosition(i.position):i instanceof Qe&&i.update()}for(const i of this._constraintHelpers.values())i.update(this.camera);for(const i of this._reflectionProbeHelpers.values())i.update();for(const i of this._triggerVolumeHelpers.values())i.update();for(const{helper:i}of this._cameraHelpers.values())i.update();for(const i of this._spatialHandleMeshes)di(i,this._screenCamera);this._enforceLodForcedLevels(),this.alignGridToView(this.renderCamera,this._renderer?.domElement.width??1),this._updateClipPlanes()}_enforceLodForcedLevels(){const t=new Set(this._objectMap.values());for(const[e,i]of this._store.lodForcedLevels){const s=this._objectMap.get(e),o=s?Ps(s,r=>t.has(r)):null;if(!o||o.levels.length===0)continue;o.autoUpdate=!1;const n=Math.min(Math.max(i,0),o.levels.length-1);for(let r=0;r<o.levels.length;r++)o.levels[r].object.visible=r===n}}renderWithInfrastructure(t){const e=this._sparkRenderer,i=this._cameraView?this._suspendPreviewInfrastructure():null;e&&this._scene.add(e);try{t()}finally{e?.removeFromParent(),i?.()}}renderViewCube(t){if(!this._threeSurfaceShowing||this._navigation==="hidden"||this._cameraView)return;const e=t.domElement.clientWidth,i=t.domElement.clientHeight,s=this._vcSize,o=this._vcDir.subVectors(this.freeCamera.position,this.orbitControls.target).normalize();this._vcCamera.position.copy(o.multiplyScalar(4)),this._vcCamera.up.copy(this.freeCamera.up),this._vcCamera.lookAt(0,0,0),this._syncOrientationGizmoDepth();const n=this._vcOrigin(e,i,this._chromeInsetPx),r=n.left,l=i-s-n.top,a=t.autoClear;try{t.setScissorTest(!0),t.setViewport(r,l,s,s),t.setScissor(r,l,s,s),t.clear(!1,!0,!1),t.autoClear=!1,t.render(this._vcScene,this._vcCamera)}finally{t.autoClear=a,t.setScissorTest(!1),t.setViewport(0,0,e,i)}}renderCameraPreview(t,e,i){if(!e||!i||this._cameraView)return;const s=t.domElement.clientWidth,o=t.domElement.clientHeight,n=t.domElement.getBoundingClientRect(),r=i.getBoundingClientRect(),l=Math.round(r.left-n.left),a=Math.round(n.bottom-r.bottom),h=Math.max(1,Math.round(r.width)),d=Math.max(1,Math.round(r.height));if(l>=s||a>=o||l+h<=0||a+d<=0)return;const f=this._suspendPreviewInfrastructure(),u=t.getClearColor(this._previewClearColor),m=t.getClearAlpha();try{t.setScissorTest(!0),t.setViewport(l,a,h,d),t.setScissor(l,a,h,d),t.setClearColor(1118740,1),t.clear(),t.render(this._scene,e)}finally{t.setScissorTest(!1),t.setViewport(0,0,s,o),t.setClearColor(u,m),f()}}get isFlying(){return this._flyActive}_inputDisconnected=!1;disconnectInput(){if(!this._inputDisconnected){this._inputDisconnected=!0,this._publishPickContext&&Ze(null),window.removeEventListener("keydown",this._onFlyKeyDown),window.removeEventListener("keyup",this._onFlyKeyUp),this._interactionElement.removeEventListener("pointerdown",this._onFlyPointerDown),this._canvas.removeEventListener("pointerdown",this._onAltOrbitStart,{capture:!0}),window.removeEventListener("pointerup",this._onAltOrbitRelease,{capture:!0}),window.removeEventListener("pointercancel",this._onAltOrbitRelease,{capture:!0}),window.removeEventListener("keydown",this._onSnapHoldKey),window.removeEventListener("keyup",this._onSnapHoldKey),this._interactionElement.removeEventListener("pointerup",this._onFlyPointerUp),this._interactionElement.removeEventListener("pointermove",this._onFlyPointerMove),this._interactionElement.removeEventListener("wheel",this._onFlyWheel),this._interactionElement.removeEventListener("wheel",this._onTrackpadWheel),this._canvas.removeEventListener("pointerdown",this._onPointerDown),this._interactionElement.removeEventListener("pointermove",this._onPointerMove),this._onInteractionPointerUp&&this._interactionElement.removeEventListener("pointerup",this._onInteractionPointerUp),this._onInteractionDblClick&&this._interactionElement.removeEventListener("dblclick",this._onInteractionDblClick),this._canvas.removeEventListener("dragover",this._onDragOver),this._canvas.removeEventListener("dragleave",this._onDragLeave),this._canvas.removeEventListener("drop",this._onDrop),this.orbitControls.dispose();for(const t of this._allGizmos())t.dispose()}}_applyViewportLook(t){this._lookGridHex=t.grid??10066329;const e=this.grid.material.uniforms.uGrazingFade;if(e&&(e.value=t.background!==null?1:0),this._paintLookGrid(),this._lookAxisHexes=[t.axisX,t.axisY,t.axisZ],this._axisLines&&(this._axisLines.material.linewidth=this._axisLineCss(t.axisLineWidth)),this._verticalAxisLine&&(this._verticalAxisLine.material.linewidth=this._axisLineCss(t.axisLineWidth)),this._axisLineWidth=t.axisLineWidth,this._rebuildAxisLines(),t.background!==null){const i=this._scene.background,s=i===null||i instanceof C&&[this._lookBackgroundHex,t.background].includes(i.getHex());this._lookBackgroundHex=t.background,s&&this._paintLookBackground()}else this._lookBackgroundHex=null}bindPresentation(t,e){this._presentation?.stop();const i=new Ni(this._scene),s=i.roots();this._editorObjects.push(...s),Fi(t,e);const o=()=>{const l=Wi(t);this._renderer&&i.apply(l,this._renderer,void 0,{tone:!1,sky:!1,floor:!1}),this.setStageFunction(l.world,l.interaction),this.setFieldOfView(l.camera.fov),this.setSelectionMarks(l.overlays.selection),this.setGridMajorEvery(l.overlays.grid.majorEvery),this.setAxisLines(l.overlays.axes),this.setNavigation(l.overlays.navigation),this.setGridVisible(l.overlays.grid.visible),st()},n=Gi(o),r={rig:i,stop:()=>{n(),i.dispose(),this._editorObjects=this._editorObjects.filter(a=>!s.includes(a)),this._presentation===r&&(this._presentation=null);const l=this._lightRig&&!this._store.isAdoptedSceneActive;this._editorAmbient.visible=l,this._editorDirLight.visible=l}};return this._presentation=r,this._editorAmbient.visible=!1,this._editorDirLight.visible=!1,o(),r.stop}setSelectionMarks(t){const e=this._selectionMarks;e.outline===t.outline&&e.wire===t.wire&&e.box===t.box||(this._selectionMarks={outline:t.outline,wire:t.wire,box:t.box},this._syncBoxHelpers())}alignGridToView(t,e){const i=this.grid.material.uniforms,s=i.uPlaneNormal.value;let o=-1;t.isOrthographicCamera&&(t.getWorldDirection(bt),o=[Math.abs(bt.x),Math.abs(bt.y),Math.abs(bt.z)].findIndex(d=>d>1-1e-4),o!==-1&&!ts(pt.set(0,1,0).applyQuaternion(t.getWorldQuaternion(Jo)))&&(o=-1)),s.set(o===0?1:0,o===-1||o===1?1:0,o===2?1:0),this.grid.quaternion.setFromUnitVectors(tn,s),this.grid.position.set(0,0,0),this.grid.scale.setScalar(1);const n=i.uCenter.value;if(n.set(0,0),i.uReach.value=1,this._axisLines?.position.set(0,0,0),this._axisLines?.scale.setScalar(1),o!==-1){const h=t;t.getWorldPosition(pt);const d=pt.clone().addScaledVector(s,-pt.dot(s));n.set(o===1||o===2?d.x:d.z,o===1?d.z:d.y);const f=Math.hypot(h.right-h.left,h.top-h.bottom)/(2*h.zoom),u=Math.max(1,f/(this.grid.geometry.parameters.width*.5*.55));i.uReach.value=u,this.grid.scale.setScalar(u),pt.addScaledVector(bt,h.far*.98);const m=s.clone().multiplyScalar(pt.dot(s));this.grid.position.copy(d).add(m),this._axisLines?.position.copy(m),this._axisLines?.scale.setScalar(Math.max(1,(n.length()+f)/Oe))}let r=1,l=1;if(o!==-1){const h=t,f=60*((h.right-h.left)/h.zoom)/Math.max(e,1);r=10**Math.floor(Math.log10(f)),l=1-(f-r)/(r*10-r)}i.uUnit.value=r,i.uMinorFade.value=l,i.uAligned.value=o===-1?0:1;const a=this._axisLineCss(o===-1?this._axisLineWidth:1);for(const h of[this._axisLines,this._verticalAxisLine]){const d=h?.material;d&&d.linewidth!==a&&(d.linewidth=a)}}setGridMajorEvery(t){const e=this.grid.material.uniforms.uMajorEvery;e&&Number.isFinite(t)&&t>=1&&(e.value=t)}_gridMajorContrast=1;_applyGridLines(t){const e=this.grid.material.uniforms;e.uLineWidth&&(e.uLineWidth.value=t.lineWidth),e.uMajorWidth&&(e.uMajorWidth.value=t.majorWidth),this._gridMajorContrast=t.majorContrast,this._paintLookGrid()}_paintLookGrid(){const t=this._lookGridHex;if(t===null)return;const e=this._lookBackgroundHex??4144959,i=r=>{const l=t>>r&255,a=e>>r&255;return Math.round(Math.min(255,Math.max(0,a+(l-a)*this._gridMajorContrast)))},s=i(16)<<16|i(8)<<8|i(0),o=fi(t,this._renderer),n=fi(s,this._renderer);this.grid.material.uniforms.uColor?.value?.copy(o),this.grid.material.uniforms.uMajorColor?.value?.copy(n)}_rebuildAxisLines(){const t=this._axisLines;if(!t)return;const e=this._stageAxisFrame,i=this._stageAxes,s=[0,1,2].filter(l=>{const a=e[l][0];return i==="floor"?l!==1:["x","y","z"].some((h,d)=>d===a&&i[h])});if(this._axesWanted=s.length>0,t.visible=this.grid.visible&&this._axesWanted,!this._axesWanted)return;const o=l=>{const a=[],h=[];for(const f of l){const u=e[f][0],m=this._lookAxisHexes[u],_=m==null?this._gizmoAxisColor(u):new C(m);a.push(...wi(f));for(let g=0;g<Pe*2;g++)h.push(_.r,_.g,_.b)}const d=new ve;return d.setPositions(a),d.setColors(h),d},n=s.filter(l=>l!==1),r=s.includes(1);if(t.material.visible=n.length>0,n.length>0&&(t.geometry.dispose(),t.geometry=o(n)),r&&!this._verticalAxisLine){const l=t.material;this._verticalAxisLine=new ye(o([1]),new we({vertexColors:!0,linewidth:l.linewidth,transparent:!0,opacity:1,depthWrite:!1,toneMapped:!1})),this._verticalAxisLine.layers.set(P),t.add(this._verticalAxisLine)}else r&&this._verticalAxisLine&&(this._verticalAxisLine.geometry.dispose(),this._verticalAxisLine.geometry=o([1]));this._verticalAxisLine&&(this._verticalAxisLine.visible=r)}setAxisLines(t){t===this._stageAxes||typeof t=="object"&&typeof this._stageAxes=="object"&&t.x===this._stageAxes.x&&t.y===this._stageAxes.y&&t.z===this._stageAxes.z||(this._stageAxes=typeof t=="object"?{x:t.x,y:t.y,z:t.z}:t,this._rebuildAxisLines())}_paintLookBackground(){if(this._lookBackgroundHex===null)return;const t=this._scene.background;t instanceof C&&t.getHex()===this._lookBackgroundHex||(this._scene.background=new C(this._lookBackgroundHex))}_syncLookBackground(){this._renderer&&(this._renderer.toneMapping===this._lookToneMapping&&this._renderer.toneMappingExposure===this._lookExposure||(this._paintLookGrid(),this._lookToneMapping=this._renderer.toneMapping,this._lookExposure=this._renderer.toneMappingExposure))}dispose(){this._unsubscribeKeymap(),this._disposed=!0,this._unsubscribeSelectionTheme(),this._verticalAxisLine&&(this._verticalAxisLine.geometry.dispose(),this._verticalAxisLine.material.dispose(),this._verticalAxisLine=null),this._axisLines&&(this._scene.remove(this._axisLines),this._axisLines.geometry.dispose(),this._axisLines.material.dispose(),this._axisLines=null),this.clearCameraView(),this._sparkRenderer&&(this._scene.remove(this._sparkRenderer),Ki(this._sparkRenderer),this._sparkRenderer=null),this.disconnectInput(),this._hideDropOverlay();for(const t of this._helpers.values())this._scene.remove(t);this._helpers.clear();for(const t of this._boxHelpers.values())this._scene.remove(t),t.geometry.dispose(),t.material.dispose();this._boxHelpers.clear();for(const t of this._reflectionProbeHelpers.values())t.dispose();this._reflectionProbeHelpers.clear();for(const t of this._triggerVolumeHelpers.values())t.dispose();this._triggerVolumeHelpers.clear();for(const t of this._constraintHelpers.values())t.dispose();this._constraintHelpers.clear();for(const{helper:t}of this._cameraHelpers.values())t.dispose();this._cameraHelpers.clear(),pi(this._spatialHandleRoots),this._spatialHandleRoots=[],this._spatialHandleMeshes=[]}_ensureSparkRenderer(){if(!this._renderer||this._sparkRenderer||this._sparkRendererLoading||this._sparkRendererFailed)return;const t=performance.now();$i(this._lastSparkDiscoveryAt,t)&&(this._lastSparkDiscoveryAt=t,Ji(this._scene)&&(this._sparkRendererLoading=!0,Xi(async()=>{const{SparkRenderer:e}=await import("./spark.module-Byplgb8G.js");return{SparkRenderer:e}},__vite__mapDeps([0,1,2,3])).then(({SparkRenderer:e})=>{if(this._disposed||!this._renderer)return;const i=new e({renderer:this._renderer,enableLod:!1});i.traverse(s=>W(s,"engineInternal",!0)),this._sparkRenderer=i,st()}).catch(e=>{this._sparkRendererFailed=!0,console.error("Failed to install SparkRenderer in the editor viewport.",e)}).finally(()=>{this._sparkRendererLoading=!1})))}_buildOrientationGizmo(){if(this._vcScene!==void 0){for(const t of[...this._vcScene.children]){this._vcScene.remove(t);const e=t;e.isSprite||e.geometry?.dispose();const i=e.material;i?.map?.dispose(),i?.dispose()}this._vcBalls.length=0,this._vcStalks.length=0,this._vcSolids.length=0,this._vcClickTargets.length=0,this._initOrientationGizmo()}}_initOrientationGizmo(){const t=this._gizmoLook.navigationForm;if(t!=="balls"&&t!=="godot"){this._initNavigationForm(t);return}const e=q/3,i=Ce/e,s=Zo/e,o=Me/e/2,n=[new p(1,0,0),new p(0,1,0),new p(0,0,1)],r=new U(i*.6,8,8),l=new R({visible:!1});for(let a=0;a<3;a++){const[h,d]=this._stageAxisFrame[a],f=this._gizmoLook.navigation??this._gizmoLook.axes,u=f===null?new C(...fe[h]):new C(f[h]),m=vi[h],_=n[a].clone().multiplyScalar(d);for(const g of[1,-1]){const v=_.clone().multiplyScalar(g),b=new y(new O(o,o,s,8),new R({color:u,transparent:!0,depthTest:!1,toneMapped:!1}));b.position.copy(v).multiplyScalar(s/2),b.quaternion.setFromUnitVectors(new p(0,1,0),v),this._vcScene.add(b),this._vcStalks.push({mesh:b,direction:v.clone(),positive:g>0,color:u});const w=M=>{const E=new Je(new ti({map:M,transparent:!0,depthTest:!1,toneMapped:!1}));return E.position.copy(v).multiplyScalar(s),E.scale.setScalar(i),this._vcScene.add(E),E},S=w(No()),z=w(Yo()),x=w(qo(g>0?m:`-${m}`));this._vcBalls.push({fill:S,ring:z,letter:x,direction:v.clone(),positive:g>0,axis:a,color:u});const A=new y(r,l);A.position.copy(S.position),W(A,"vcDirIdx",a*2+(d*g>0?0:1)),this._vcScene.add(A),this._vcClickTargets.push(A)}}}_initNavigationForm(t){const e=q/3,i=new p(0,1,0),s=[new p(1,0,0),new p(0,1,0),new p(0,0,1)],o=this._gizmoLook.navigation??this._gizmoLook.axes,n=(r,l,a,h)=>{const d=new Je(new ti({map:Xo(r,l),transparent:!0,depthTest:!1,toneMapped:!1}));d.position.copy(a),d.scale.setScalar(h/e),d.renderOrder=200,this._vcScene.add(d)};for(let r=0;r<3;r++){const[l,a]=this._stageAxisFrame[r],h=o===null?new C(...fe[l]):new C(o[l]),d=vi[l],f=s[r].clone().multiplyScalar(a);if(t==="triad"){const u=this._gizmoLook.navigationSize??1,m=24*u/e,_=Me*Math.sqrt(u)/e/2,g=new y(new O(_,_,m,6),new R({color:h,transparent:!0,depthTest:!1,toneMapped:!1}));g.position.copy(f).multiplyScalar(m/2),g.quaternion.setFromUnitVectors(i,f),this._vcScene.add(g),this._vcSolids.push({mesh:g,direction:f.clone()}),n(h,d,f.clone().multiplyScalar(m+7*u/e),12*u);continue}for(const u of[1,-1]){const m=f.clone().multiplyScalar(u),_=new y(new xs(6/e,15/e,20),new R({color:u>0?h:new C(14277081),transparent:!0,depthTest:!1,toneMapped:!1}));_.position.copy(m).multiplyScalar(19/e),_.quaternion.setFromUnitVectors(i,m.clone().negate()),W(_,"vcDirIdx",r*2+(a*u>0?0:1)),this._vcScene.add(_),this._vcSolids.push({mesh:_,direction:m.clone()}),this._vcClickTargets.push(_),u>0&&n(h,d.toLowerCase(),m.clone().multiplyScalar(34/e),12)}}if(t==="cones"){const r=new y(new I(11/e,11/e,11/e),new R({color:12434877,transparent:!0,depthTest:!1,toneMapped:!1}));r.renderOrder=50,this._vcScene.add(r)}}_syncOrientationGizmoDepth(){const t=q/3,e=this._vcDir.copy(this._vcCamera.position).normalize();if(this._gizmoLook.navigationForm==="godot"){this._syncGodotNavigation(e);return}const i=new C(this._gizmoLook.background??4013373),s=new C(1,1,1),o=(a,h,d,f)=>{const u=a.getRGB({r:0,g:0,b:0},it),m=h.getRGB({r:0,g:0,b:0},it);return f.setRGB(u.r+(m.r-u.r)*d,u.g+(m.g-u.g)*d,u.b+(m.b-u.b)*d,it)};let n=-1;for(const{direction:a,axis:h}of this._vcBalls)1-a.dot(e)**2<1e-6&&(n=h);const r=new C,l=new C(0,0,0);for(const{fill:a,ring:h,letter:d,direction:f,positive:u,axis:m,color:_}of this._vcBalls){const g=f.dot(e),v=(g+1)/2,b=g<=.01*(u?-1:1),w=m===n&&!b,S=m===n&&b,z=o(i,_,(g+1)*.25+.5,new C),x=a.material,A=h.material,M=d.material,E=Math.min(g+1,1);u||w?(x.color.copy(z),x.opacity=1):(x.color.copy(o(i,_,.25,r)),x.opacity=E),!u&&w?(A.color.copy(o(s,_,.5,r)),A.opacity=E):(A.color.copy(z),A.opacity=1),M.color.copy(o(l,x.color,Vo,r)),a.visible=!S,h.visible=!S,d.visible=(u||m===n)&&!S;const G=(Ce+Uo*v)/t,$t=10+Math.round(v*100)*3;for(const[Pt,Jt]of[[a,0],[h,1],[d,2]])Pt.scale.setScalar(G),Pt.renderOrder=$t+Jt}for(const{mesh:a,direction:h,positive:d,color:f}of this._vcStalks){const u=h.dot(e),m=(u+1)/2,_=a.material;o(i,f,(.75+(u+1)*.25+.5)/2,_.color),_.opacity=1,a.visible=d||n!==-1,a.renderOrder=10+Math.round(m*100)*3-1}for(const{mesh:a,direction:h}of this._vcSolids)a.renderOrder=Math.round((h.dot(e)+1)/2*100)}_syncGodotNavigation(t){const i=16/(q/3),s=o=>{const n=o.getRGB({r:0,g:0,b:0},it);return new C().setRGB(n.r*.6,n.g*.6,n.b*.6,it)};for(const{fill:o,ring:n,letter:r,direction:l,positive:a,color:h}of this._vcBalls){const d=(l.dot(t)+1)/2,f=Math.min(1,.35+d/.5*.65),u=o.material,m=n.material,_=r.material;u.color.copy(a?h:s(h)),u.opacity=f,m.color.copy(h),m.opacity=f,_.color.setRGB(0,0,0),_.opacity=f*.6,o.visible=!0,n.visible=!0,r.visible=a;const g=10+Math.round(d*100)*3;for(const[v,b]of[[o,0],[n,1],[r,2]])v.scale.setScalar(i),v.renderOrder=g+b}for(const{mesh:o,direction:n,positive:r,color:l}of this._vcStalks){const a=(n.dot(t)+1)/2,h=o.material;h.color.copy(l),h.opacity=Math.min(1,.35+a/.5*.65),o.visible=r,o.renderOrder=10+Math.round(a*100)*3-1}}_isOverViewCube(t,e){if(this._navigation!=="interactive"||this._gizmoLook.navigationForm==="triad")return!1;const i=this._canvas.getBoundingClientRect(),s=t-i.left,o=e-i.top,{left:n,top:r}=this._vcOrigin(i.width,i.height,this._chromeInsetPx);return s>=n&&s<=n+this._vcSize&&o>=r&&o<=r+this._vcSize}_vcOrigin(t,e,i){return this._gizmoLook.navigationCorner==="bottom-left"?{left:4+i,top:e-this._vcSize-48-i}:{left:t-this._vcSize-this._vcMarginRight-i,top:this._vcMarginTop+i}}setGridVisible(t){t!==this._presentationGrid&&(this._presentationGrid=t,this._applyGridVisibility())}_applyGridVisibility(){this.grid.visible=this._presentationGrid&&this._threeSurfaceShowing,this._axisLines&&(this._axisLines.visible=this.grid.visible&&this._axesWanted),st()}setNavigation(t){t!==this._navigation&&(this._navigation=t,st())}_handleViewCubeClick(t){if(!this._isOverViewCube(t.clientX,t.clientY))return!1;const e=this._canvas.getBoundingClientRect(),i=t.clientX-e.left,s=t.clientY-e.top,{left:o,top:n}=this._vcOrigin(e.width,e.height,this._chromeInsetPx),r=(i-o)/this._vcSize*2-1,l=-((s-n)/this._vcSize*2-1);this._vcRaycaster.setFromCamera(new et(r,l),this._vcCamera);const a=this._vcRaycaster.intersectObjects(this._vcClickTargets);if(a.length===0)return!0;const h=tt(a[0].object,"vcDirIdx"),d=Ro[h];for(const m of[...this._axisViewListeners].reverse())if(m())break;const f=this.orbitControls;f._sphericalDelta.set(0,0,0),f._panOffset.set(0,0,0);const u=d.y>.5?new p(0,0,-1):d.y<-.5?new p(0,0,1):new p(0,1,0);return this._snapDist=this.freeCamera.position.distanceTo(this.orbitControls.target),this._snapQ1.copy(this.freeCamera.quaternion),this._snapQ2.setFromRotationMatrix(new ft().lookAt(d,new p,u)),this._snapStartTime=performance.now(),this._snapAnimating=!0,!0}_flushGizmoToStoreLive(){this._skipNextSync=!0;const t=this._authoring(),e=(s,o)=>{s&&Be(t,s,{position:o.position.toArray(),rotation:o.quaternion.toArray(),scale:o.scale.toArray()})},i=this._activeGizmo.object;i&&i!==this._pivotDummy&&e(this._attachedAuthoringId??this._authoringIdForObject(i),i);for(const{id:s,obj:o}of this._otherDragObjects)e(s,o);for(const{id:s,obj:o}of this._allDragObjects)e(s,o);for(const{id:s,obj:o}of this._preservedChildObjects)e(s,o)}_preparePreservedChildren(t){if(!this._store.shell.preserveChildrenTransform)return[];const e=this._authoring(),i=new Set(t),s=new Map;for(const o of i){const n=this._preservedChildrenForParent(e,o,i,s);if(typeof n=="string")return V(n),[];for(const r of n)s.set(r.id,r)}return[...s.values()]}_preservedChildrenForParent(t,e,i,s){const o=[];for(const n of t.hierarchy.node(e)?.childIds??[]){if(i.has(n)||s.has(n))continue;const r=this._objectForAuthoringId(n);if(!r?.parent)continue;const l=this._unwritableTransformChannel(t,n);if(l){const a=t.hierarchy.node(n)?.label??n;return`Preserve Children Transform needs writable ${l} on ${a}. The parent will transform normally.`}r.updateWorldMatrix(!0,!1),o.push({id:n,obj:r,worldMatrix:r.matrixWorld.clone()})}return o}_unwritableTransformChannel(t,e){return["position","rotation","scale"].find(i=>!(t.transforms?.editability?.(e,i).writable??!1))}_restorePreservedChildren(){const t=new ft;for(const e of this._preservedChildObjects){const i=e.obj.parent;i&&(i.updateWorldMatrix(!0,!1),t.copy(i.matrixWorld).invert().multiply(e.worldMatrix),t.decompose(e.obj.position,e.obj.quaternion,e.obj.scale),e.obj.updateMatrix(),e.obj.updateWorldMatrix(!1,!0))}}_belongsToRoots(t,e){let i=t;for(;i;){if(e.has(i))return!0;i=i.parent}return!1}_floorSnapPosition(t,e){t.updateWorldMatrix(!0,!0);const i=Vt(t);if(i.isEmpty())return null;const s=Math.min((i.max.x-i.min.x)*.1,.05),o=Math.min((i.max.z-i.min.z)*.1,.05),n=[[(i.min.x+i.max.x)/2,(i.min.z+i.max.z)/2],[i.min.x+s,i.min.z+o],[i.max.x-s,i.min.z+o],[i.min.x+s,i.max.z-o],[i.max.x-s,i.max.z-o]],r=new nt;r.layers.enableAll();const l=i.min.y+Math.max((i.max.y-i.min.y)*.001,.001);let a=Number.NEGATIVE_INFINITY;for(const[f,u]of n){r.set(new p(f,l,u),new p(0,-1,0));const m=r.intersectObjects(this._scene.children,!0).find(_=>!this._belongsToRoots(_.object,e)&&!J(_.object)&&_.point.y<=l);m&&(a=Math.max(a,m.point.y))}if(!Number.isFinite(a))return null;const h=a-i.min.y;if(Math.abs(h)<1e-6)return null;const d=t.getWorldPosition(new p);return d.y+=h,t.parent?(t.parent.updateWorldMatrix(!0,!1),t.parent.worldToLocal(d)):d}snapSelectionToFloor(){const t=this._authoring(),e=t.transforms;if(!e){V("This document does not expose writable transforms.");return}const i=[...this._store.shell.selectedEntityIds].map(l=>({id:l,obj:this._objectForAuthoringId(l)})).filter(l=>!!l.obj&&(e.editability?.(l.id,"position").writable??!0)),s=new Set(i.map(({obj:l})=>l)),o=i.filter(({obj:l})=>{let a=l.parent;for(;a;){if(s.has(a))return!1;a=a.parent}return!0});if(o.length===0){V("Select an object with a writable position first.");return}const n=new Set(o.map(({obj:l})=>l)),r=[];for(const l of o){const a=this._floorSnapPosition(l.obj,n);a&&r.push({...l,position:a})}if(r.length===0){V("No solid scene surface was found beneath the selection.");return}for(const{id:l}of r)Ge(t,l);for(const{obj:l,position:a}of r)l.position.copy(a);this._skipNextSync=!0;for(const{id:l,obj:a}of r)Be(t,l,{position:a.position.toArray(),rotation:a.quaternion.toArray(),scale:a.scale.toArray()});for(const{id:l}of r)Ve(t,l);this.syncFromStore()}_applySurfaceSnap(t,e){const i=new Set,s=this._attachedAuthoringId??this._authoringIdForObject(t);s&&i.add(s);for(const{id:a}of e)i.add(a);const o=[];for(const[a,h]of this._objectMap)i.has(a)||o.push(h);if(o.push(this.grid),o.length===0){this._surfaceSnapIndicator.visible=!1;return}const n=t.position.clone();n.y+=50,this._surfaceSnapRaycaster.set(n,new p(0,-1,0)),this._surfaceSnapRaycaster.far=200;const l=this._surfaceSnapRaycaster.intersectObjects(o,!0).find(a=>a.object===this.grid||!J(a.object));if(l){const a=l.point,h=a.y,d=h-t.position.y;t.position.y=h;for(const{obj:u}of e)u.position.y+=d;this._surfaceSnapIndicator.position.copy(a),this._surfaceSnapIndicator.position.y+=.01;const f=l.face?.normal;if(f){const u=f.clone().transformDirection(l.object.matrixWorld);this._surfaceSnapIndicator.quaternion.setFromUnitVectors(new p(0,1,0),u)}this._surfaceSnapIndicator.visible=!0}else this._surfaceSnapIndicator.visible=!1}_collectVertices(t){const e=[];for(const[s,o]of this._objectMap)t.has(s)||o.traverse(n=>{if(J(n))return;const r=n;if(!r.isMesh||!r.geometry)return;const l=r.geometry.getAttribute("position");if(!l)return;const a=Math.min(l.count,1e3),h=r.matrixWorld;for(let d=0;d<a;d++){const f=new p(l.getX(d),l.getY(d),l.getZ(d));f.applyMatrix4(h),e.push(f)}});return e}_applyVertexSnap(t,e){const i=t.position,s=i.clone().project(this._screenCamera),o=this._canvas.getBoundingClientRect(),n=(s.x+1)/2*o.width,r=(-s.y+1)/2*o.height;let l=this._vertexSnapThreshold,a=null;for(const h of this._vertexSnapTargets){const d=h.clone().project(this._screenCamera);if(d.z>1)continue;const f=(d.x+1)/2*o.width,u=(-d.y+1)/2*o.height,m=n-f,_=r-u,g=Math.sqrt(m*m+_*_);g<l&&(l=g,a=h)}if(a){const h=a.clone().sub(i);t.position.copy(a);for(const{obj:f}of e)f.position.add(h);this._vertexSnapIndicator.position.copy(a),this._vertexSnapIndicator.visible=!0;const d=a.distanceTo(this._screenCamera.position);this._vertexSnapIndicator.scale.setScalar(d*.008)}else this._vertexSnapIndicator.visible=!1}_flushGizmoToStore(){this._flushGizmoToStoreLive();const t=this._activeTransformEditIds;this._activeTransformEditIds=[],this._otherDragObjects=[],this._allDragObjects=[],this._preservedChildObjects=[];const e=this._authoring();for(const i of t)Ve(e,i)}consumeSkipSync(){return this._skipNextSync?(this._skipNextSync=!1,!0):!1}_applyGizmoSize(){if(this.transformControls===void 0)return;const t=this._lookGizmoSizePx,e=Math.max(1,this._canvas.clientHeight),i=t===null?null:2*t,s=i===null?1:this.transformControls.camera.isOrthographicCamera?4*i/e:i/(.2375*e);for(const o of this._allGizmos())o.size=s}_dropNegativeAxisHandles(t,e){const i=t.children.find(o=>o.isTransformControlsGizmo);if(!i)return;const s={X:new p(1,0,0),Y:new p(0,1,0),Z:new p(0,0,1)};for(const o of e)for(const n of[i.gizmo[o],i.picker[o]])if(n)for(const r of[...n.children]){const l=s[r.name];if(l===void 0)continue;const a=r;if(!a.geometry)continue;a.geometry.computeBoundingBox();const h=a.geometry.boundingBox;h&&h.getCenter(new p).dot(l)<0&&n.remove(r)}}_axisColorMap(){const t=o=>this._gizmoAxisColor(this._stageAxisFrame[o][0]),e=t(0),i=t(1),s=t(2);return{X:e,Y:i,Z:s,XY:s,YZ:e,XZ:i}}_readLookStage(t){this._applyGizmoAxisFrame(),this._buildOrientationGizmo()}setStageFunction(t,e){this._stageBoxSelect=e.boxSelect;const i=e.transformHandles;(i.scale!==this._transformHandles.scale||i.viewRotate!==this._transformHandles.viewRotate||i.freeMove!==this._transformHandles.freeMove)&&(this._transformHandles={scale:i.scale,viewRotate:i.viewRotate,freeMove:i.freeMove},this._syncCombinedGizmoHalves(),st());const s=t.upAxis==="z"?t.handedness==="left"?Fo:jo:yi;s!==this._stageAxisFrame&&(this._stageAxisFrame=s,this._applyGizmoAxisFrame(),this._buildOrientationGizmo(),this._rebuildAxisLines())}_applyGizmoAxisFrame(){if(this.transformControls===void 0)return;const t=this._stageAxisFrame.map(([,r])=>r),e=[0,1,2].map(r=>t[r]===this._appliedAxisSigns[r]?1:-1),i=e.some(r=>r===-1),s=this._axisColorMap(),o={X:this._gizmoAxisColor(0),Y:this._gizmoAxisColor(1),Z:this._gizmoAxisColor(2),XY:this._gizmoAxisColor(2),YZ:this._gizmoAxisColor(0),XZ:this._gizmoAxisColor(1)},n=(r,l,a,h,d)=>{r&&r.traverse(f=>{const u=f;a&&u.geometry&&u.geometry.scale(e[0],e[1],e[2]),h&&u.material&&!Array.isArray(u.material)&&!u.userData.volterOwnMaterial&&(u.material=u.material.clone(),u.userData.volterOwnMaterial=!0);const m=u.material;if(!m||Array.isArray(m))return;a&&(m.side=Qt);const _=l[f.name];if(_&&m.color){if(d){const g=m.userData.volterBaseOpacity??=m.opacity;m.opacity=g*(this._gizmoLook.opacity??1),m._opacity=void 0}m.color.copy(_),m._color=void 0}})};for(const r of this._allGizmos()){const l=r.getHelper().children.find(a=>a.isTransformControlsGizmo);if(l)for(const a of["gizmo","picker","helper"]){const h=a==="gizmo";n(l[a]?.translate,s,i,!1,h),n(l[a]?.rotate,s,!1,!1,h),n(l[a]?.scale,o,!1,!0,h)}}i&&(this._appliedAxisSigns=t)}_gizmoAxisColor(t){const e=this._gizmoLook.axes;return e===null?new C().setRGB(...fe[t],it):new C(e[t])}_installGizmoHighlight(t){const e=t.getHelper().children.find(s=>s.isTransformControlsGizmo);if(!e)return;const i=e.updateMatrixWorld.bind(e);e.updateMatrixWorld=s=>{i(s);const o=this._store.shell.transformMode==="combined",n=e.mode==="translate"&&!this._transformHandles.freeMove?"XYZ":o&&e.mode==="rotate"&&!this._transformHandles.viewRotate?"E":null;if(n!==null)for(const h of[e.gizmo,e.picker])for(const d of h[e.mode]?.children??[])d.name===n&&(d.visible=!1);const r=this._gizmoLook,l=e.axis;if(!e.enabled||!l||r.hover===null&&r.axes===null&&r.highlightSaturation===null&&r.highlightValue===null)return;const a=e.dragging?r.drag??r.hover:r.hover;for(const h of e.gizmo[e.mode]?.children??[]){if(h.name!==l&&!l.split("").some(g=>h.name===g))continue;const d=h.material;if(!d||Array.isArray(d)||!d.color)continue;if(a!==null){d.color.setHex(a);continue}const f=(d._color??d.color).clone().convertLinearToSRGB(),u=Go(f),m=u.s*(r.highlightSaturation??1),_=r.highlightValue??u.v;Bo(u.h,m,_,d.color).convertSRGBToLinear()}}}_applyGizmoArrows(){if(this.transformControls===void 0)return;this._applyGizmoRings();const t={length:this._gizmoLook.arrowLength??1.2,head:this._gizmoLook.arrowHead??1},e=this._appliedArrow;if(t.length===e.length&&t.head===e.head)return;const i=.5,s=.1,o=f=>i*f.length-s*f.head;if(o(t)<=.05)return;const n=o(t)/o(e),r=t.head/e.head,l=t.length/e.length,a=this.transformControls.getHelper().children.find(f=>f.isTransformControlsGizmo);if(!a)return;const h={X:0,Y:1,Z:2},d=(f,u)=>[0,1,2].map(m=>m===f?u:1);for(const f of a.gizmo.translate?.children??[]){const u=h[f.name],m=f.geometry;if(u===void 0||!m)continue;if(!(m.parameters?.radiusTop===0)){m.scale(...d(u,n));continue}m.computeBoundingBox();const v=m.boundingBox,b=[v.min.x,v.min.y,v.min.z][u],w=[v.max.x,v.max.y,v.max.z][u],S=Math.abs(b)<Math.abs(w)?b:w,z=[0,0,0];z[u]=-S,m.translate(...z),m.scale(r,r,r),z[u]=S*n,m.translate(...z)}for(const f of a.picker.translate?.children??[]){const u=h[f.name],m=f.geometry;u===void 0||!m||m.scale(...d(u,l))}this._appliedArrow=t}_applyGizmoRings(){const t=this._gizmoLook.ringWidth??1;if(t<=0||t===this._appliedRingWidth)return;const e=t/this._appliedRingWidth,i=new p,s=new p,o=new p;for(const n of[this.transformControls,this._auxRotateControls]){const r=n.getHelper().children.find(l=>l.isTransformControlsGizmo);for(const l of r?.gizmo.rotate?.children??[]){const a=l.geometry;if(!["X","Y","Z"].includes(l.name)||!a||a.type!=="TorusGeometry")continue;const h=a.parameters.radius;a.computeBoundingBox(),a.boundingBox.getSize(o);const d=o.x<=o.y&&o.x<=o.z?0:o.y<=o.z?1:2,f=a.getAttribute("position");for(let u=0;u<f.count;u++)i.fromBufferAttribute(f,u),s.copy(i).setComponent(d,0),s.lengthSq()!==0&&(s.setLength(h),i.sub(s).multiplyScalar(e).add(s),f.setXYZ(u,i.x,i.y,i.z));f.needsUpdate=!0,a.computeBoundingSphere()}}this._appliedRingWidth=t}_patchGizmo(t){const e=this._axisColorMap(),i={XY:[-.075,-.075,0],YZ:[0,-.075,-.075],XZ:[-.075,0,-.075]};t.traverse(s=>{const o=s,n=e[s.name];if(n&&o.material){const l=o.material;l.color&&l.color.copy(n)}const r=i[s.name];r&&o.geometry&&o.geometry.translate(r[0],r[1],r[2])})}_patchCombinedScaleGizmo(t){const i=t.children.find(r=>r.isTransformControlsGizmo);if(!i)return;const s={X:new p(1,0,0),Y:new p(0,1,0),Z:new p(0,0,1)},o=.54+.55,n=.3;for(const[r,l]of[[i.gizmo.scale,!1],[i.picker.scale,!0]])if(r)for(const a of[...r.children]){const h=a,d=s[a.name],f=d!==void 0&&h.geometry?.type==="CylinderGeometry"&&h.geometry.parameters.radiusTop<.05;if(d===void 0||f){r.remove(a);continue}h.geometry.computeBoundingBox();const u=h.geometry.boundingBox;if(!u)continue;const m=Math.sign(u.getCenter(new p).dot(d))||1;if(l){const g=d.clone().multiplyScalar(m*o);h.geometry.dispose(),h.geometry=new I(n,n,n).translate(g.x,g.y,g.z);continue}const _=d.clone().multiplyScalar(m*.55);h.geometry.translate(_.x,_.y,_.z)}}_projectToScreen(t){const e=new p;t.getWorldPosition(e),e.project(this._screenCamera);const i=this._canvas.getBoundingClientRect();return new et((e.x+1)/2*i.width+i.left,(-e.y+1)/2*i.height+i.top)}static _FLY_KEYS=new Set(["w","a","s","d","q","e"]);_enterFlyMode(){this._flyActive||this._cameraViewMode!=="view"&&(this._flyActive=!0,this._snapAnimating=!1,this.orbitControls.enabled=!1,this._flyEuler.setFromQuaternion(this.renderCamera.quaternion,"YXZ"),this.orbitControls.dispatchEvent({type:"start"}),this._canvas.requestPointerLock?.())}_exitFlyMode(){if(!this._flyActive)return;this._flyActive=!1,this._flyKeys.clear(),this.orbitControls.enabled=this._cameraViewMode!=="view",document.exitPointerLock();const t=this.renderCamera,e=new p(0,0,-1).applyQuaternion(t.quaternion),i=t.position.distanceTo(this.orbitControls.target);this.orbitControls.target.copy(t.position).add(e.multiplyScalar(Math.max(i,5))),this.orbitControls.dispatchEvent({type:"end"})}_updateFlyCamera(t){if(!this._flyActive||this._flyKeys.size===0)return;const e=this.renderCamera,i=this._flySpeed*(this._flyKeys.has("shift")?3:1),s=new p(0,0,-1).applyQuaternion(e.quaternion),o=new p(1,0,0).applyQuaternion(e.quaternion),n=new p;this._flyKeys.has("w")&&n.add(s),this._flyKeys.has("s")&&n.sub(s),this._flyKeys.has("d")&&n.add(o),this._flyKeys.has("a")&&n.sub(o),this._flyKeys.has("e")&&(n.y+=1),this._flyKeys.has("q")&&(n.y-=1),n.lengthSq()>0&&(n.normalize().multiplyScalar(i*t),e.position.add(n),this.orbitControls.dispatchEvent({type:"change"}))}_onFlyKeyDown=t=>{if(!this._rightMouseDown||t.target instanceof HTMLInputElement||t.target instanceof HTMLTextAreaElement||t.target instanceof HTMLSelectElement)return;const e=t.key.toLowerCase();if(e==="shift"){this._flyKeys.add("shift");return}Li._FLY_KEYS.has(e)&&(t.preventDefault(),t.stopPropagation(),this._flyKeys.add(e),this._flyActive||this._enterFlyMode())};_onFlyKeyUp=t=>{const e=t.key.toLowerCase();if(e==="shift"){this._flyKeys.delete("shift");return}this._flyKeys.delete(e)};_onFlyPointerDown=t=>{t.button===2&&(this._rightMouseDown=!0)};_onFlyPointerUp=t=>{t.button===2&&(this._rightMouseDown=!1,this._flyActive&&this._exitFlyMode())};_onFlyPointerMove=t=>{if(!this._flyActive)return;const e=.002;this._flyEuler.y-=t.movementX*e,this._flyEuler.x-=t.movementY*e,this._flyEuler.x=Math.max(-Math.PI/2+.01,Math.min(Math.PI/2-.01,this._flyEuler.x)),this.renderCamera.quaternion.setFromEuler(this._flyEuler),this.orbitControls.dispatchEvent({type:"change"})};_onTrackpadWheel=t=>{if(this._flyActive||!this.orbitControls.enabled||t.ctrlKey||Math.abs(t.deltaX)<.5&&!t.shiftKey)return;t.preventDefault(),t.stopImmediatePropagation();const e=this._interactionElement.clientHeight||1,i=this.camera.position.distanceTo(this.orbitControls.target),s=2*Math.tan(this.camera.fov/2*Math.PI/180)*i/e,o=t.deltaMode===1?16:1,n=h=>Math.sign(h)*Math.min(Math.abs(h*o),30),r=new p().setFromMatrixColumn(this.camera.matrix,0),l=new p().setFromMatrixColumn(this.camera.matrix,1),a=r.multiplyScalar(n(t.deltaX)*s).add(l.multiplyScalar(-n(t.deltaY)*s));this.camera.position.add(a),this.orbitControls.target.add(a),this.orbitControls.update()};_onFlyWheel=t=>{if(!this._flyActive)return;t.preventDefault();const e=t.deltaY>0?.85:1.18;this._flySpeed=Math.max(.5,Math.min(100,this._flySpeed*e))};_onPointerDown=t=>{if(this._pointerDownPos.set(t.clientX,t.clientY),this._pointerDownButton=t.button,this._marqueeActive=!1,this._pointerSessionActive=!0,this._constraintControlPointerSession=!1,t.button===0&&!t.altKey){if(this._selectConstraintControlAt(t))return;const e=this._raycastSpatialHandle(t),i=e?hi(e):null;if(e&&i?.handle.writable){t.stopPropagation(),this._activeSpatialHandle=i,this._spatialHandleDragPoint.copy(e.position),this._orbitEnabledBeforeHandleDrag=this.orbitControls.enabled,this._transformEnabledBeforeHandleDrag=this.transformControls.enabled,this.orbitControls.enabled=!1;for(const n of this._allGizmos())n.enabled=!1;const s=this._screenCamera.getWorldDirection(new p);this._spatialHandleDragPlane.setFromNormalAndCoplanarPoint(s,e.position),this._spatialHandleDragOffset.set(0,0,0);const o=this._spatialHandleWorldPoint(t);o&&this._spatialHandleDragOffset.subVectors(e.position,o),this._canvas.style.cursor="grabbing"}}};_onPointerMove=t=>{if(this._updateEditorHandleInteraction(t)||(this._updateSpatialHandleHover(t),!this._pointerSessionActive)||!(t.buttons&1)||this._pointerDownButton!==0||this._anyGizmoDragging()||this._altDragOrbit)return;const e=t.clientX-this._pointerDownPos.x,i=t.clientY-this._pointerDownPos.y;if(!this._marqueeActive&&Math.sqrt(e*e+i*i)>5){if(this._isOverViewCube(this._pointerDownPos.x,this._pointerDownPos.y))return;this._marqueeActive=!0,this.orbitControls.enabled=!1,this._marqueeDiv||(this._marqueeDiv=document.createElement("div"),Object.assign(this._marqueeDiv.style,{position:"fixed",border:`1px solid ${Ot.accent.default}`,background:Ot.accent.muted,pointerEvents:"none",zIndex:We.sticky}),(document.getElementById("editor-chrome-root")??document.body).appendChild(this._marqueeDiv))}if(this._marqueeActive&&this._marqueeDiv){const s=Math.min(this._pointerDownPos.x,t.clientX),o=Math.min(this._pointerDownPos.y,t.clientY),n=Math.abs(t.clientX-this._pointerDownPos.x),r=Math.abs(t.clientY-this._pointerDownPos.y);Object.assign(this._marqueeDiv.style,{left:`${s}px`,top:`${o}px`,width:`${n}px`,height:`${r}px`,display:"block"})}};_onPointerUp=t=>{if(!this._pointerSessionActive)return;if(this._pointerSessionActive=!1,this._activeSpatialHandle){this._finishSpatialHandleDrag(!0);return}if(this._constraintControlPointerSession){this._constraintControlPointerSession=!1;return}if(this._marqueeActive){this._marqueeActive=!1,this.orbitControls.enabled=!0,this._marqueeDiv&&(this._marqueeDiv.style.display="none");const n=Math.min(this._pointerDownPos.x,t.clientX),r=Math.max(this._pointerDownPos.x,t.clientX),l=Math.min(this._pointerDownPos.y,t.clientY),a=Math.max(this._pointerDownPos.y,t.clientY),h=[],d=new p,f=new xt;for(const[u,m]of this._objectMap){if(!m.visible||m.isCamera===!0)continue;if(f.setFromObject(m),f.isEmpty()){const M=this._projectToScreen(m);M.x>=n&&M.x<=r&&M.y>=l&&M.y<=a&&h.push(u);continue}const _=this._stageBoxSelect==="touch",g=this._canvas.getBoundingClientRect(),v=this._screenCamera;let b=!0,w=Number.POSITIVE_INFINITY,S=Number.NEGATIVE_INFINITY,z=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;for(let M=0;M<8;M++){if(d.set(M&1?f.max.x:f.min.x,M&2?f.max.y:f.min.y,M&4?f.max.z:f.min.z),d.project(v),d.z<-1||d.z>1){if(b=!1,!_)break;continue}const E=g.left+(d.x+1)*g.width/2,G=g.top+(1-d.y)*g.height/2;(E<n||E>r||G<l||G>a)&&(b=!1),w=Math.min(w,E),S=Math.max(S,E),z=Math.min(z,G),x=Math.max(x,G)}const A=w<=S&&S>=n&&w<=r&&x>=l&&z<=a;(_?A:b)&&h.push(u)}if(t.shiftKey)for(const u of h)this._store.shell.addToSelection(u);else Lt(this._authoring(),h);return}if(t.button!==0)return;const e=t.clientX-this._pointerDownPos.x,i=t.clientY-this._pointerDownPos.y;if(Math.sqrt(e*e+i*i)>5||this._anyGizmoDragging()||this._threejsToolContextActive&&this._handleViewCubeClick(t))return;const s=t.shiftKey&&(t.metaKey||t.ctrlKey),o=Bi(this._scopeAuthoring(),()=>this._pickAt(t.clientX,t.clientY,s?"deep":"normal"));s?Lt(this._authoring(),o?[o]:[]):t.shiftKey&&o?this._store.shell.toggleSelection(o):(t.metaKey||t.ctrlKey)&&o?this._store.shell.toggleSelection(o):Lt(this._authoring(),o?[o]:[])};_scopeAuthoring(){return this._standaloneAuthoring?this._authoring():kt().panelAuthoring(this._store.shell)}_pickAt(t,e,i){return this._pick?this._pick(t,e):kt().pick(this._store.shell,t,e,i)}_onDoubleClick=t=>{if(t.button!==0||this._anyGizmoDragging()||this._marqueeActive||this._threejsToolContextActive&&this._isOverViewCube(t.clientX,t.clientY))return;const e=this._pickAt(t.clientX,t.clientY,"normal");e&&Vi(this._scopeAuthoring(),e,()=>this._pickAt(t.clientX,t.clientY,"normal"))};_raycastGroundPlane(t){const e=this._canvas.getBoundingClientRect(),i=new et((t.clientX-e.left)/e.width*2-1,-((t.clientY-e.top)/e.height)*2+1);this.raycaster.setFromCamera(i,this._screenCamera);const s=Xe("three");this._groundPlane.set(s.up==="z"?Oo:Io,-s.groundHeight);const o=new p;return this.raycaster.ray.intersectPlane(this._groundPlane,o)}_showDropOverlay(){if(this._dropOverlay)return;const t=document.createElement("div");Object.assign(t.style,{position:"fixed",inset:"0",pointerEvents:"none",border:`2px dashed ${Ot.accent.default}`,background:Ot.accent.muted,zIndex:We.base}),(document.getElementById("editor-chrome-root")??document.body).appendChild(t),this._dropOverlay=t}_hideDropOverlay(){this._dropOverlay&&(this._dropOverlay.remove(),this._dropOverlay=null)}_onDragOver=t=>{t.dataTransfer?.types.includes("application/x-editor-asset")&&(t.preventDefault(),t.dataTransfer.dropEffect="copy",this._showDropOverlay())};_onDragLeave=t=>{this._hideDropOverlay()};_onDrop=t=>{this._hideDropOverlay();const e=t.dataTransfer?.getData("application/x-editor-asset");if(!e)return;t.preventDefault();let i;try{i=JSON.parse(e)}catch{return}const s=Xe("three"),o=this._raycastGroundPlane(t),n=d=>Math.round(d*100)/100,r=s.up==="z"?[n(o?.x??0),n(o?.y??0),s.groundHeight]:[n(o?.x??0),s.groundHeight,n(o?.z??0)],l=this._authoring(),a=l.assetDrop,h=i.component??{kind:"file",name:i.name};if(!a){It.warn(`Dropped “${i.name}” was not placed: this document does not accept dropped assets.`,"editor");return}if(i.online){const d=i.online,f=this._onlineAssetResolver;if(!f){It.warn(`Dropped “${i.name}” was not placed: this viewport has no online-asset resolver installed.`,"editor");return}V(`Downloading ${d.name} from the library…`),f(d).then(u=>{u?(V(`${d.name} downloaded — placing it.`),Ne(l,"",u,{position:r})):V(`Could not download ${d.name} — see the Console.`)}).catch(()=>{V(`Could not download ${d.name} — see the Console.`),It.error(`Could not download ${d.name}.`,"asset")});return}Ne(l,"",i.path,{position:r,item:h})}}const In=c=>!Ui(c);let Yt={projection:"perspective"};const He=new Set;function On(){return Yt}function kn(c){return He.add(c),()=>He.delete(c)}function Dn(c){if(Yt.projection!==c){Yt={...Yt,projection:c};for(const t of He)t()}}export{Tn as C,Li as E,kn as a,An as b,Hn as c,En as d,zn as e,Ln as f,In as i,ce as p,Pn as r,Dn as s,On as t};
141
+ `,transparent:!0,depthWrite:!1,side:Qt}),i=new y(t,e);return i.name="editor-floor-grid",i}class Li{setTransformMode(t){this._store.shell.setTransformMode(t)}camera;orthographicCamera;orbitControls;transformControls;_auxRotateControls;_auxScaleControls;_activeGizmo;raycaster=(()=>{const t=new nt;return t.layers.enableAll(),t})();grid;_boxHelpers=new Map;_selectionMarks={outline:!0,wire:!1,box:!1};_unsubscribeSelectionTheme=()=>{};_constraintHelpers=new Map;_constraintControlRaycaster=(()=>{const t=new nt;return t.layers.enableAll(),t})();_hoveredConstraintControl=null;_constraintControlPointerSession=!1;_reflectionProbeHelpers=new Map;_triggerVolumeHelpers=new Map;_cameraHelpers=new Map;_lightHelpers=new Map;_audioHelpers=new Map;_spatialHandleRoots=[];_spatialHandleMeshes=[];_spatialHandleRaycaster=(()=>{const t=new nt;return t.layers.enableAll(),t})();_activeSpatialHandle=null;_hoveredSpatialHandle=null;_spatialHandleDragPlane=new Ke;_spatialHandleDragOffset=new p;_spatialHandleDragPoint=new p;_orbitEnabledBeforeHandleDrag=!0;_transformEnabledBeforeHandleDrag=!0;_gizmoHelper;_editorAmbient;_editorDirLight;_lightRig;_scene;_contentBoundsBox=new xt;_contentBoundsAt=0;_renderer;_sparkRenderer=null;_sparkRendererLoading=!1;_sparkRendererFailed=!1;_lastSparkDiscoveryAt=Number.NEGATIVE_INFINITY;_disposed=!1;_editorObjects=[];_presentation=null;_axisLines=null;_verticalAxisLine=null;_axisLineWidth=null;_axisLineCss(t){return t===null?2:t/(this._renderer?.getPixelRatio()??1)}_axesWanted=!1;_stageAxes="floor";_lookAxisHexes=[null,null,null];_lookGridHex=null;_lookBackgroundHex=null;_lookToneMapping=null;_lookExposure=null;_lookGizmoSizePx=null;_stageAxisFrame=yi;_appliedAxisSigns=[1,1,1];_gizmoLook={axes:null,navigation:null,hover:null,drag:null,opacity:null,arrowLength:null,arrowHead:null,ringWidth:null,navigationSize:null,navigationForm:"balls",background:null,navigationCorner:"top-right",highlightSaturation:null,highlightValue:null};_stageBoxSelect=null;_transformHandles={scale:!0,viewRotate:!0,freeMove:!0};_appliedArrow={length:1.2,head:1};_appliedRingWidth=1;_store;_objectMap=new Map;_canvas;_interactionElement;_onInteractionPointerUp;_onInteractionDblClick;_authoring;_pick;_drawCamera;get _screenCamera(){return this._drawCamera?.()??this.renderCamera}_standaloneAuthoring;_publishPickContext;_onlineAssetResolver;_onProjectionChange;_pointerDownPos=new et;_skipNextSync=!1;_marqueeActive=!1;_pointerSessionActive=!1;_marqueeDiv=null;_pointerDownButton=-1;_altDragOrbit=!1;_vcScene=new hs;_vcCamera;_vcClickTargets=[];_vcBalls=[];_vcStalks=[];_vcSolids=[];_vcSize=q;_navigation="interactive";_marksLook="";_presentationGrid=!0;_vcMarginRight=Ti;_vcMarginTop=Ie;_chromeInsetPx=0;_vcDir=new p;_previewClearColor=new C;_cameraView=null;_projection="perspective";_pendingProjection=null;_viewportAspect=1;_fieldOfView=Se;_orthographicHeight=10;_cameraViewMode=null;_orbitEnabledBeforeCameraView=!0;_orbitTargetBeforeCameraView=new p;_lastGizmoObjectMap=null;_lastGizmoSig="";_lastGizmoEpoch=-1;_threejsToolContextActive=!1;_threeSurfaceShowing=!1;_vcRaycaster=new nt;_dropOverlay=null;_groundPlane=new Ke(new p(0,1,0),0);_dragStartPos=new p;_dragStartQuat=new L;_dragStartScale=new p;_attachedAuthoringId=null;_otherDragObjects=[];_allDragObjects=[];_preservedChildObjects=[];_activeTransformEditIds=[];_pivotDummy=new qt;_dummyIsPresentationAnchor=!1;_pivotPos=new p;_surfaceSnapRaycaster=new nt;_surfaceSnapIndicator;_vertexSnapTargets=[];_vertexSnapIndicator;_vertexSnapThreshold=20;batchedRenderer;_helpers=new Map;_snapAnimating=!1;_snapStartTime=0;_snapDuration=400;_snapQ1=new L;_snapQ2=new L;_snapDist=0;_flyActive=!1;_snapHold=!1;_flyKeys=new Set;_flySpeed=5;_flyEuler=new wi(0,0,0,"YXZ");_rightMouseDown=!1;constructor(t,e,i,s=t,o={}){Ts(),this._canvas=t,this._interactionElement=s,this._scene=e,this._renderer=o.renderer,this._store=i,this._authoring=o.authoring??(()=>kt().activeAuthoring(this._store.shell)),this._pick=o.pick,this._drawCamera=o.drawCamera,this._standaloneAuthoring=o.authoring!==void 0,this._publishPickContext=o.publishPickContext??!0,this._chromeInsetPx=o.chromeInsetPx??0,this._onlineAssetResolver=o.onlineAssetResolver,this._onProjectionChange=o.onProjectionChange,this.camera=new ds(me(t.clientWidth/Math.max(1,t.clientHeight)),t.clientWidth/t.clientHeight,Ye,qe),this.camera.position.copy(Qo).multiplyScalar(17.32),this.camera.lookAt(0,0,0),this.camera.layers.enableAll(),this._viewportAspect=t.clientWidth/Math.max(1,t.clientHeight),this.orthographicCamera=new $e(-5,5,5,-5,Ye,qe),this.orthographicCamera.layers.enableAll(),this._syncOrthographicFromPerspective(),this.grid=en(400),this.grid.layers.set(P),e.add(this.grid);const n=new ve;n.setPositions(bi(0)),n.setColors(new Array(Pe*2*3).fill(1)),this._axisLines=new ye(n,new be({vertexColors:!0,linewidth:2,transparent:!0,opacity:1,depthWrite:!1,toneMapped:!1})),$o(this._axisLines.material,this.grid.material.uniforms.uGrazingFade,this.grid.material.uniforms.uPlaneNormal),this._axisLines.visible=!1,this._axisLines.layers.set(P),e.add(this._axisLines),this._unsubscribeSelectionTheme=Oi(t,()=>{st();const l=JSON.stringify([ht(t),De(t),Re(t)]);l!==this._marksLook&&(this._marksLook=l,this._boxHelpers.size>0&&this._syncBoxHelpers()),this._gizmoLook=je(t),this._applyViewportLook(ki(t)),this._applyGridLines(Di(t)),this._lookGizmoSizePx=Fe(t),this._applyGizmoSize(),this._applyGizmoArrows(),this._readLookStage(t)}),this._lightRig=o?.lightRig!==!1,this._editorAmbient=new ps(16777215,.5),this._editorAmbient.layers.set(P),e.add(this._editorAmbient),this._editorDirLight=new us(16777215,1),this._editorDirLight.position.set(10,20,10),this._editorDirLight.layers.set(P),e.add(this._editorDirLight),this._editorAmbient.visible=this._lightRig,this._editorDirLight.visible=this._lightRig,this.batchedRenderer=new Cs,this.batchedRenderer.layers.set(P),e.add(this.batchedRenderer),s.addEventListener("wheel",this._onTrackpadWheel,{passive:!1}),this.orbitControls=new es(this.camera,s),this.orbitControls.enableDamping=!0,this.orbitControls.dampingFactor=.1,this.applyKeymapNavigation(),this._unsubscribeKeymap=Ri(()=>this.applyKeymapNavigation()),this._installTurntable(),this.transformControls=new ie(this.camera,t),this._auxScaleControls=new ie(this.camera,t),this._auxScaleControls.setMode("scale"),this._auxRotateControls=new ie(this.camera,t),this._auxRotateControls.setMode("rotate"),this._activeGizmo=this.transformControls;const r=l=>{const a=l.pointerDown.bind(l);l.pointerDown=h=>{l.getHelper().updateMatrixWorld(!0),a(h)},l.getRaycaster().layers.enableAll(),l.addEventListener("dragging-changed",h=>{const d=h.value;if(d?Ms():As(),this.orbitControls.enabled=!d,d){this._activeGizmo=l;for(const g of this._allGizmos())g!==l&&(g.enabled=!1);const f=l.object,u=l.mode==="translate"?"position":l.mode==="rotate"?"rotation":"scale",m=g=>this._authoring().transforms?.editability?.(g,u).writable??!0,_=this._attachedAuthoringId??(f&&this._authoringIdForObject(f))??"";if(f){if(this._dragStartPos.copy(f.position),this._dragStartQuat.copy(f.quaternion),this._dragStartScale.copy(f.scale),this._otherDragObjects=[],this._allDragObjects=[],this._pivotPos.copy(f.position),f===this._pivotDummy?null:this._authoringIdForObject(f))for(const b of this._store.shell.selectedEntityIds){if(b===_||!m(b))continue;const S=this._objectForAuthoringId(b);S&&this._otherDragObjects.push({id:b,obj:S,startPos:S.position.clone(),startQuat:S.quaternion.clone(),startScale:S.scale.clone()})}else for(const b of this._store.shell.selectedEntityIds){if(!m(b))continue;const S=this._objectForAuthoringId(b);S&&this._allDragObjects.push({id:b,obj:S,startPos:S.position.clone(),startQuat:S.quaternion.clone(),startScale:S.scale.clone()})}const v=f===this._pivotDummy?this._allDragObjects.map(({id:b})=>b):[_,...this._otherDragObjects.map(({id:b})=>b)];this._preservedChildObjects=this._preparePreservedChildren(v.filter(Boolean)),this._activeTransformEditIds=[...new Set([...v.filter(Boolean),...this._preservedChildObjects.map(({id:b})=>b)])];const w=this._authoring();for(const b of this._activeTransformEditIds)Ge(w,b)}}else this._surfaceSnapIndicator.visible=!1,this._vertexSnapIndicator.visible=!1,this.syncFromStore()}),l.addEventListener("objectChange",()=>{const h=l.object;if(!h)return;const d=l.mode,f=this._store.shell.pivotMode==="individual-origins"||this._dummyIsPresentationAnchor,m=this._allDragObjects.length>0?this._allDragObjects:this._otherDragObjects;if(m.length>0){if(d==="translate"){const _=h.position.clone().sub(this._dragStartPos);for(const{obj:g,startPos:v}of m)g.position.copy(v).add(_)}else if(d==="rotate"){const _=h.quaternion.clone().multiply(this._dragStartQuat.clone().invert());if(f)for(const{obj:g,startQuat:v}of m)g.quaternion.copy(_).multiply(v);else for(const{obj:g,startPos:v,startQuat:w}of m){const b=v.clone().sub(this._pivotPos);b.applyQuaternion(_),g.position.copy(this._pivotPos).add(b),g.quaternion.copy(_).multiply(w)}}else if(d==="scale"){const _=new p(this._dragStartScale.x!==0?h.scale.x/this._dragStartScale.x:1,this._dragStartScale.y!==0?h.scale.y/this._dragStartScale.y:1,this._dragStartScale.z!==0?h.scale.z/this._dragStartScale.z:1);if(f)for(const{obj:g,startScale:v}of m)g.scale.copy(v).multiply(_);else for(const{obj:g,startPos:v,startScale:w}of m){const b=v.clone().sub(this._pivotPos);b.multiply(_),g.position.copy(this._pivotPos).add(b),g.scale.copy(w).multiply(_)}}}d==="translate"&&this._store.vertexSnapActive&&this._vertexSnapTargets.length>0?this._applyVertexSnap(h,m):d==="translate"&&this._store.shell.snapToSurface&&this._applySurfaceSnap(h,m),this._restorePreservedChildren();for(const _ of this._boxHelpers.values())"update"in _&&_.update();this._flushGizmoToStoreLive()}),l.addEventListener("mouseUp",()=>{this._flushGizmoToStore()})};r(this.transformControls),r(this._auxRotateControls),r(this._auxScaleControls),this._gizmoHelper=this.transformControls.getHelper(),this._gizmoHelper.traverse(l=>l.layers.set(P)),e.add(this._gizmoHelper);for(const l of[this._auxRotateControls,this._auxScaleControls]){const a=l.getHelper();a.traverse(h=>h.layers.set(P)),a.visible=!1,e.add(a)}this._pivotDummy.layers.set(P),e.add(this._pivotDummy),this._surfaceSnapIndicator=new y(new fs(.08,.12,16),new R({color:65416,side:Qt,depthTest:!1})),this._surfaceSnapIndicator.rotation.x=-Math.PI/2,this._surfaceSnapIndicator.visible=!1,this._surfaceSnapIndicator.renderOrder=999,this._surfaceSnapIndicator.layers.set(P),e.add(this._surfaceSnapIndicator),this._vertexSnapIndicator=new y(new U(1,8,8),new R({color:65450,depthTest:!1})),this._vertexSnapIndicator.visible=!1,this._vertexSnapIndicator.renderOrder=999,this._vertexSnapIndicator.layers.set(P),e.add(this._vertexSnapIndicator),this._gizmoLook=je(t),this._rebuildAxisLines();for(const l of this._allGizmos())this._installGizmoHighlight(l);this._patchGizmo(this._gizmoHelper),this._patchGizmo(this._auxRotateControls.getHelper()),this._patchGizmo(this._auxScaleControls.getHelper()),this._dropNegativeAxisHandles(this._gizmoHelper,["translate","scale"]),this._dropNegativeAxisHandles(this._auxScaleControls.getHelper(),["scale"]),this._patchCombinedScaleGizmo(this._auxScaleControls.getHelper()),this._applyGizmoArrows(),this._lookGizmoSizePx=Fe(t),this._applyGizmoSize(),this._applyGizmoAxisFrame(),this._vcCamera=new $e(-1.5,1.5,1.5,-1.5,.1,10),this._initOrientationGizmo(),window.addEventListener("keydown",this._onFlyKeyDown),window.addEventListener("keyup",this._onFlyKeyUp),s.addEventListener("pointerdown",this._onFlyPointerDown),s.addEventListener("pointerup",this._onFlyPointerUp),s.addEventListener("pointermove",this._onFlyPointerMove),s.addEventListener("wheel",this._onFlyWheel,{passive:!1}),t.addEventListener("pointerdown",this._onAltOrbitStart,{capture:!0}),window.addEventListener("pointerup",this._onAltOrbitRelease,{capture:!0}),window.addEventListener("pointercancel",this._onAltOrbitRelease,{capture:!0}),window.addEventListener("keydown",this._onSnapHoldKey),window.addEventListener("keyup",this._onSnapHoldKey),t.addEventListener("pointerdown",this._onPointerDown),s.addEventListener("pointermove",this._onPointerMove),this._onInteractionPointerUp=l=>{(l.target===t||l.target===s||this._pointerSessionActive)&&this._onPointerUp(l)},s.addEventListener("pointerup",this._onInteractionPointerUp),this._onInteractionDblClick=l=>{(l.target===t||l.target===s)&&this._onDoubleClick(l)},s.addEventListener("dblclick",this._onInteractionDblClick),t.addEventListener("dragover",this._onDragOver),t.addEventListener("dragleave",this._onDragLeave),t.addEventListener("drop",this._onDrop),this._editorObjects=[this.grid,...this._axisLines?[this._axisLines]:[],this._editorAmbient,this._editorDirLight,this.batchedRenderer,this._gizmoHelper,this._auxRotateControls.getHelper(),this._auxScaleControls.getHelper(),this._pivotDummy,this._surfaceSnapIndicator,this._vertexSnapIndicator],this._publishPickContext&&this._installPickContext(this.camera)}setScene(t){if(t===this._scene)return;for(const i of this._editorObjects)i.removeFromParent(),t.add(i);for(const i of this._boxHelpers.values())i.removeFromParent(),t.add(i);for(const i of this._constraintHelpers.values())i.removeFromParent(),t.add(i);for(const i of this._reflectionProbeHelpers.values())i.removeFromParent(),t.add(i);for(const i of this._triggerVolumeHelpers.values())i.removeFromParent(),t.add(i);for(const{helper:i}of this._cameraHelpers.values())i.removeFromParent(),t.add(i);for(const i of this._spatialHandleRoots)i.removeFromParent(),t.add(i);this._scene=t,this._contentBoundsAt=0;const e=this._lightRig&&!this._store.isAdoptedSceneActive&&this._presentation===null;this._editorAmbient.visible=e,this._editorDirLight.visible=e}get currentScene(){return this._scene}get renderCamera(){return this._cameraView??this.freeCamera}get freeCamera(){return this._projection==="orthographic"?this.orthographicCamera:this.camera}get projection(){return this._projection}_installPickContext(t){this._publishPickContext&&Ze({camera:t,canvas:this._canvas,editorControls:{activate:(e,i)=>this._selectConstraintControlAt({clientX:e,clientY:i},!1),hover:(e,i)=>this._hoverConstraintControlAt({clientX:e,clientY:i}),clearHover:()=>this._clearConstraintControlHover()}})}setProjection(t){if(this._cameraView){this._pendingProjection=t;return}if(this._projection===t)return;t==="orthographic"?this._syncOrthographicFromPerspective():this._syncPerspectiveFromOrthographic(),this._projection=t;const e=this.freeCamera;this.orbitControls.object=e;for(const i of this._allGizmos())i.camera=e;this._applyGizmoSize(),this.orbitControls.update(),this._installPickContext(e),this._onProjectionChange?.(t)}_syncOrthographicFromPerspective(t=!1){const e=Math.max(.01,this.camera.position.distanceTo(this.orbitControls?.target??new p));t||(this._orthographicHeight=2*e*Math.tan(j.degToRad(this.camera.fov*.5))),this.orthographicCamera.position.copy(this.camera.position),this.orthographicCamera.quaternion.copy(this.camera.quaternion),this.orthographicCamera.up.copy(this.camera.up),this.orthographicCamera.zoom=1,this._applyOrthographicFrustum(),this.orthographicCamera.updateMatrixWorld(!0)}_syncPerspectiveFromOrthographic(){const e=this._orthographicHeight/Math.max(this.orthographicCamera.zoom,.01)/(2*Math.tan(j.degToRad(this.camera.fov*.5))),i=this.orthographicCamera.position.clone().sub(this.orbitControls.target).normalize();this.camera.position.copy(this.orbitControls.target).add(i.multiplyScalar(e)),this.camera.quaternion.copy(this.orthographicCamera.quaternion),this.camera.up.copy(this.orthographicCamera.up),this.camera.updateMatrixWorld(!0)}_applyOrthographicFrustum(){const t=this._orthographicHeight*.5,e=t*this._viewportAspect;this.orthographicCamera.left=-e,this.orthographicCamera.right=e,this.orthographicCamera.top=t,this.orthographicCamera.bottom=-t,this.orthographicCamera.updateProjectionMatrix()}setGizmoCamera(t){const e=t??this.freeCamera;if(this.transformControls.camera!==e){for(const i of this._allGizmos())i.camera=e;this._applyGizmoSize()}}applyKeymapNavigation(){const{orbit:t,turntable:e}=Z();!e&&this.camera.up.y<.9999&&Math.abs(this.camera.up.z)<.9999&&this.camera.up.set(0,1,0),this.orbitControls.mouseButtons={LEFT:this._altDragOrbit?dt.ROTATE:-1,MIDDLE:t==="middle"?dt.ROTATE:dt.PAN,RIGHT:t==="middle"?-1:dt.ROTATE}}_unsubscribeKeymap=()=>{};_installTurntable(){const t=this.orbitControls,e=t._handleMouseDownDolly.bind(this.orbitControls),i=t._handleMouseMoveDolly.bind(this.orbitControls);let s=null;t._handleMouseDownDolly=a=>{if(e(a),s=null,Z().zoom?.drag!=="dolly")return;const h=this._canvas.getBoundingClientRect().top,d=this.orbitControls.object;s={len0:Math.max(5+a.clientY-h,1),offset:d.position.clone().sub(this.orbitControls.target),zoom0:d.zoom??1}},t._handleMouseMoveDolly=a=>{if(Z().zoom?.drag!=="dolly"||!s){i(a);return}const h=this._canvas.getBoundingClientRect().top,d=Math.max(.01,2*((5+a.clientY-h)/s.len0-1)+1),f=this.orbitControls.object;f.isOrthographicCamera?(f.zoom=s.zoom0/d,f.updateProjectionMatrix(),this.orbitControls.dispatchEvent({type:"change"})):f.position.copy(this.orbitControls.target).addScaledVector(s.offset,d),this.orbitControls.update()};const o=t._handleTouchStartRotate.bind(this.orbitControls);t._handleTouchStartRotate=a=>{for(const h of[...this._rotateStartListeners])h();o(a)};const n=t._handleMouseDownRotate.bind(this.orbitControls),r=t._handleMouseMoveRotate.bind(this.orbitControls);let l=null;t._handleMouseDownRotate=a=>{n(a),l=null;for(const f of[...this._rotateStartListeners])f();if(!Z().turntable)return;const h=this.orbitControls.object,d=new p(0,1,0).applyQuaternion(h.quaternion);l={x:a.clientX,y:a.clientY,reverse:d.y<0?-1:1}},t._handleMouseMoveRotate=a=>{const h=Z().turntable;if(!h||!l){r(a);return}const d=a.clientX-l.x,f=a.clientY-l.y;l.x=a.clientX,l.y=a.clientY,this._turntableStep(d,f,l.reverse,j.degToRad(h.degreesPerPixel))}}_rotateStartListeners=new Set([()=>{if(!Z().autoPerspective||this._projection!=="orthographic")return;const t=this.camera.position.clone().sub(this.orbitControls.target),e=new p(0,1,0).applyQuaternion(this.camera.quaternion);Ue(t,e)!==null&&this.setProjection("perspective")}]);_axisViewListeners=[()=>(Z().autoPerspective&&this.setProjection("orthographic"),!0)];onAxisView(t){return this._axisViewListeners.push(t),()=>{const e=this._axisViewListeners.indexOf(t);e!==-1&&this._axisViewListeners.splice(e,1)}}onRotateStart(t){return this._rotateStartListeners.add(t),()=>this._rotateStartListeners.delete(t)}stepView(t){const e=this.orbitControls.object,i=this.orbitControls.target,s=j.degToRad(15),o=new p(0,1,0),n=new p(1,0,0).applyQuaternion(e.quaternion),r=new p(0,0,1).applyQuaternion(e.quaternion),l=new p(0,1,0).applyQuaternion(e.quaternion);this._snapAnimating=!1;const a=this.orbitControls;if(a._sphericalDelta.set(0,0,0),a._panOffset.set(0,0,0),this.orbitControls.dispatchEvent({type:"start"}),t==="opposite"&&Ue(r,l)!==null){const u=S=>S.y>.5?new p(0,0,-1):S.y<-.5?new p(0,0,1):new p(0,1,0),m=r.clone().round(),_=m.clone().negate(),g=u(m).angleTo(l)*Math.sign(u(m).cross(l).dot(m)||1),v=u(_).applyAxisAngle(_,g),w=new L().setFromRotationMatrix(new ft().lookAt(_,new p,v)),b=e.position.distanceTo(i);e.quaternion.copy(w),e.position.copy(i).addScaledVector(_,b),e.up.copy(v),this.orbitControls.update(),this.orbitControls.dispatchEvent({type:"end"});return}const h=new L;switch(t){case"orbit-left":h.setFromAxisAngle(o,-s);break;case"orbit-right":h.setFromAxisAngle(o,s);break;case"orbit-up":h.setFromAxisAngle(n,-s);break;case"orbit-down":h.setFromAxisAngle(n,s);break;case"opposite":h.setFromAxisAngle(o,Math.PI);break;case"roll-left":h.setFromAxisAngle(r,-s);break;case"roll-right":h.setFromAxisAngle(r,s);break}const d=h.multiply(e.quaternion).normalize(),f=e.position.distanceTo(i);e.quaternion.copy(d),e.position.copy(i).addScaledVector(new p(0,0,1).applyQuaternion(d),f),e.up.set(0,1,0).applyQuaternion(d),this.orbitControls.update(),this.orbitControls.dispatchEvent({type:"end"})}zoomStep(t){const e=Z().zoom?.step??1.2,i=t>0?1/e:e,s=this.orbitControls.object;if(this.orbitControls.dispatchEvent({type:"start"}),s.isOrthographicCamera)s.zoom/=i,s.updateProjectionMatrix(),this.orbitControls.dispatchEvent({type:"change"});else{const o=this.orbitControls.target;s.position.sub(o).multiplyScalar(i).add(o)}this.orbitControls.update(),this.orbitControls.dispatchEvent({type:"end"})}_turntableStep(t,e,i,s){const o=this.orbitControls.object,n=this.orbitControls.target,r=new p(0,1,0),l=new p(1,0,0).applyQuaternion(o.quaternion),a=new p(0,0,1).applyQuaternion(o.quaternion),h=new p;if(r.distanceToSquared(a)>.001){h.crossVectors(r,a),h.dot(l)<0&&h.negate();const _=(Math.abs(r.angleTo(a)/Math.PI-.5)*2)**2;h.lerp(l,_)}else h.copy(l);h.lengthSq()===0&&h.copy(l),h.normalize();const d=new L().setFromAxisAngle(h,-s*e),u=new L().setFromAxisAngle(r,-s*i*t).multiply(d).multiply(o.quaternion).normalize(),m=o.position.distanceTo(n);o.quaternion.copy(u),o.position.copy(n).addScaledVector(new p(0,0,1).applyQuaternion(u),m),o.up.set(0,1,0).applyQuaternion(u),this.orbitControls.update()}get cameraViewMode(){return this._cameraViewMode}setCameraView(t,e){if(this.clearCameraView(),this._cameraView=t,this._cameraViewMode=e,this._orbitEnabledBeforeCameraView=this.orbitControls.enabled,this._orbitTargetBeforeCameraView.copy(this.orbitControls.target),e==="pilot"){const i=t.getWorldPosition(new p),s=t.getWorldDirection(new p),o=Math.max(1,this.freeCamera.position.distanceTo(this.orbitControls.target));this.orbitControls.object=t,this.orbitControls.target.copy(i).add(s.multiplyScalar(o)),this.orbitControls.enabled=!0,this.orbitControls.update()}else this.orbitControls.enabled=!1;this._publishPickContext&&this._installPickContext(t)}clearCameraView(){if(!this._cameraView)return;this._flyActive&&this._exitFlyMode(),this.orbitControls.object=this.freeCamera,this.orbitControls.target.copy(this._orbitTargetBeforeCameraView),this.orbitControls.enabled=this._orbitEnabledBeforeCameraView,this.orbitControls.update(),this._cameraView=null,this._cameraViewMode=null;const t=this._pendingProjection;this._pendingProjection=null,t&&t!==this._projection&&this.setProjection(t),this._publishPickContext&&this._installPickContext(this.freeCamera)}get objectMap(){return this._objectMap}set objectMap(t){this._objectMap=t}attach(t){const e=this._objectForAuthoringId(t);e&&(this._attachedAuthoringId=t,this._attachGizmosTo(e))}detach(){this._attachedAuthoringId=null,this._detachGizmos()}_objectForAuthoringId(t){const e=this._authoring();return e.hierarchy.node(t)===null?null:Hs(e,this._objectMap,t)}_authoringIdForObject(t){return this._authoring().hierarchy.idForObject3D?.(t)??Es(t)??null}_hasBoundableGeometry(t){return Ei([t]).length>0}_makeDiagnosticBounds(t){if(this._hasBoundableGeometry(t))return new Qe(t,ht(this._canvas).visible);const e=new I(Bt,Bt,Bt),i=new Si(e);e.dispose();const s=new lt({color:new C(ht(this._canvas).visible),toneMapped:!1}),o=new Zt(i,s);return t.getWorldPosition(o.position),o.isBoxHelper=!0,o._entityObj=t,o}_syncBoxHelpers(){for(const e of this._boxHelpers.values())this._scene.remove(e),e.geometry.dispose(),e.material.dispose();this._boxHelpers.clear();const t=(e,i)=>{i.layers.set(P),this._scene.add(i),this._boxHelpers.set(e,i)};if(this._store.shell.showHelpers&&this._store.shell.helperVisibility.bounds)for(const e of this._objectMap.keys()){const i=this._objectForAuthoringId(e);i&&t(`bounds:${e}`,this._makeDiagnosticBounds(i))}for(const e of this._store.shell.selectedEntityIds){const i=this._objectForAuthoringId(e);if(!i)continue;const s=this._hasBoundableGeometry(i);if(s&&this._selectionMarks.wire){let o=0;i.traverse(n=>{const r=n;if(!r.isMesh||!r.geometry||J(r))return;const l=Re(this._canvas),a=new Zt(new ms(r.geometry),new lt({color:l.color??ht(this._canvas).visible,transparent:!0,opacity:l.opacity??.5,depthTest:!0}));a.matrixAutoUpdate=!1,a._wireOf=r,t(`wire:${e}:${o++}`,a)})}if(!(s&&!this._selectionMarks.box)){if(s){const o=De(this._canvas);t(`selection:${e}`,new de(i,{color:ht(this._canvas).visible,edges:o.edges,frame:o.frame,...o.lineWidth===null?{}:{lineWidth:o.lineWidth}}));continue}this._standaloneAuthoring&&i.isBone||[...this._constraintHelpers.values()].some(o=>o.presents(i))||i.userData.volterOwnOverlay||t(`selection:${e}`,new de(i,{fixedSize:Bt,color:ht(this._canvas).visible}))}}}_syncReflectionProbeHelpers(t=null){if(t===null){const e=new Map,i=new Set;for(const[s,o]of this._objectMap)!o||i.has(o)||!Wt(o)||(i.add(o),e.set(s,o));for(const[s,o]of this._reflectionProbeHelpers)e.get(s)!==o.source&&(o.dispose(),this._reflectionProbeHelpers.delete(s));for(const[s,o]of e)this._ensureReflectionProbeHelper(s,o)}else{let e=!1;for(const i of t){const s=this._objectMap.get(i),o=s&&Wt(s)?s:null,n=this._reflectionProbeHelpers.get(i);n&&n.source!==o&&(o===null&&(e=!0),n.dispose(),this._reflectionProbeHelpers.delete(i)),o&&![...this._reflectionProbeHelpers.values()].some(r=>r.source===o)&&this._ensureReflectionProbeHelper(i,o)}if(e){this._syncReflectionProbeHelpers();return}}for(const[e,i]of this._reflectionProbeHelpers)i.setSelected(this._store.shell.selectedEntityIds.has(e)),i.visible=this._threejsToolContextActive&&this._store.shell.showHelpers&&this._store.shell.helperVisibility.reflectionProbes,i.update()}_ensureReflectionProbeHelper(t,e){if(this._reflectionProbeHelpers.has(t))return;const i=new Us(e);this._reflectionProbeHelpers.set(t,i),this._scene.add(i)}_syncTriggerVolumeHelpers(t=null){if(t===null){const i=new Map,s=new Set;for(const[o,n]of this._objectMap)!n||s.has(n)||!we(n)||(s.add(n),i.set(o,n));for(const[o,n]of this._triggerVolumeHelpers)i.get(o)!==n.source&&this._disposeTriggerVolumeHelper(o,n);for(const[o,n]of i)this._ensureTriggerVolumeHelper(o,n)}else{let i=!1;for(const s of t){const o=this._objectMap.get(s),n=o&&we(o)?o:null,r=this._triggerVolumeHelpers.get(s);r&&r.source!==n&&(n===null&&(i=!0),this._disposeTriggerVolumeHelper(s,r)),n&&![...this._triggerVolumeHelpers.values()].some(l=>l.source===n)&&this._ensureTriggerVolumeHelper(s,n)}if(i){this._syncTriggerVolumeHelpers();return}}const e=this._threeSurfaceShowing&&this._store.shell.showHelpers&&this._store.shell.helperVisibility.triggerVolumes;for(const[i,s]of this._triggerVolumeHelpers)s.setSelected(this._store.shell.selectedEntityIds.has(i)),s.visible=e,s.update()}_ensureTriggerVolumeHelper(t,e){if(this._triggerVolumeHelpers.has(t))return;const i=new Eo(e);this._triggerVolumeHelpers.set(t,i),this._scene.add(i)}_disposeTriggerVolumeHelper(t,e){e.dispose(),this._triggerVolumeHelpers.delete(t)}_syncConstraintHelpers(t=null){if(t===null){const i=new Map,s=new Set;for(const[o,n]of this._objectMap)!n||s.has(n)||ge(n).length===0||(s.add(n),i.set(o,n));for(const[o,n]of this._constraintHelpers)i.get(o)!==n.source&&(this._disposeConstraintHelper(n),this._constraintHelpers.delete(o));for(const[o,n]of i)this._ensureConstraintHelper(o,n)}else{let i=!1;for(const s of t){const o=this._objectMap.get(s),n=o&&ge(o).length>0?o:null,r=this._constraintHelpers.get(s);r&&r.source!==n&&(n===null&&(i=!0),this._disposeConstraintHelper(r),this._constraintHelpers.delete(s)),n&&![...this._constraintHelpers.values()].some(l=>l.source===n)&&this._ensureConstraintHelper(s,n)}if(i){this._syncConstraintHelpers();return}}const e=new Set;for(const i of this._store.shell.selectedEntityIds){const s=this._objectForAuthoringId(i);s&&e.add(s)}for(const[i,s]of this._constraintHelpers)s.setSelected(this._store.shell.selectedEntityIds.has(i)),s.setSelectedObjects(e),s.visible=this._threejsToolContextActive&&this._store.shell.showHelpers&&this._store.shell.helperVisibility.constraints,s.update(this.camera)}_ensureConstraintHelper(t,e){if(this._constraintHelpers.has(t))return;const i=new Ns(e);this._constraintHelpers.set(t,i),this._scene.add(i)}_disposeConstraintHelper(t){this._hoveredConstraintControl?.helper===t&&(this._hoveredConstraintControl=null),t.dispose()}_raycastConstraintControl(t){const e=[];for(const n of this._constraintHelpers.values())n.visible&&e.push(...n.controlMeshes());if(e.length===0)return null;const i=this._canvas.getBoundingClientRect(),s=new et((t.clientX-i.left)/i.width*2-1,-((t.clientY-i.top)/i.height)*2+1);this._constraintControlRaycaster.setFromCamera(s,this._screenCamera);const o=this._constraintControlRaycaster.intersectObjects(e,!1)[0]?.object;if(!o)return null;for(const n of this._constraintHelpers.values()){const r=n.controlFor(o);if(r)return{helper:n,control:r}}return null}_updateConstraintControlHover(t){if(t.buttons&1)return this._constraintControlPointerSession;const e=this._hoverConstraintControlAt(t);return e?(this._hoveredSpatialHandle&&(le(this._hoveredSpatialHandle,!1),this._hoveredSpatialHandle=null),this._canvas.style.cursor=e,!0):(this._canvas.style.cursor="",!1)}_hoverConstraintControlAt(t){const e=this._raycastConstraintControl(t),i=this._hoveredConstraintControl;return e?(i?.mesh!==e.control.mesh&&(i&&i.helper.setHoveredControl(null),e.helper.setHoveredControl(e.control.mesh),this._hoveredConstraintControl={helper:e.helper,mesh:e.control.mesh}),this._authoringIdForObject(e.control.object)?"pointer":"not-allowed"):(this._clearConstraintControlHover(),null)}_clearConstraintControlHover(){this._hoveredConstraintControl?.helper.setHoveredControl(null),this._hoveredConstraintControl=null}_selectConstraintControlAt(t,e=!0){const i=this._raycastConstraintControl(t);if(!i)return!1;this._constraintControlPointerSession=e;const s=this._authoringIdForObject(i.control.object);if(s){const o=this._authoring();Lt(o,[s],{intent:"exact"})||this._store.shell.select(s),V(`${i.control.label} selected — move it with the gizmo.`)}else V(`${i.control.label} is a runtime-only constraint control.`);return!0}_syncCameraHelpers(t=null){if(t===null){const i=new Map;for(const[s,o]of this._objectMap){const n=this._nativeCamera(o);n&&i.set(s,n)}for(const[s,o]of this._cameraHelpers)i.get(s)!==o.source&&this._disposeCameraHelper(s,o);for(const[s,o]of i)this._ensureCameraHelper(s,o)}else{let i=!1;for(const s of t){const o=this._objectMap.get(s),n=o?this._nativeCamera(o):null,r=this._cameraHelpers.get(s);r&&r.source!==n&&(n===null&&(i=!0),this._disposeCameraHelper(s,r)),n&&![...this._cameraHelpers.values()].some(l=>l.source===n)&&this._ensureCameraHelper(s,n)}if(i){this._syncCameraHelpers();return}}const e=this._threeSurfaceShowing&&this._store.shell.showHelpers&&this._store.shell.helperVisibility.cameras;for(const i of this._cameraHelpers.values())i.helper.visible=e,i.helper.update()}_syncLightHelpers(t=null){if(t===null){const i=new Map;for(const[s,o]of this._objectMap){const n=this._nativeLight(o);n&&i.set(s,n)}for(const[s,o]of this._lightHelpers)i.get(s)!==o.source&&this._disposeLightHelper(s,o);for(const[s,o]of i)this._ensureLightHelper(s,o)}else{let i=!1;for(const s of t){const o=this._objectMap.get(s),n=o?this._nativeLight(o):null,r=this._lightHelpers.get(s);r&&r.source!==n&&(n===null&&(i=!0),this._disposeLightHelper(s,r)),n&&![...this._lightHelpers.values()].some(l=>l.source===n)&&this._ensureLightHelper(s,n)}if(i){this._syncLightHelpers();return}}const e=this._threeSurfaceShowing&&this._store.shell.showHelpers&&this._store.shell.helperVisibility.lights;for(const i of this._lightHelpers.values())i.helper.visible=e,i.helper.update?.()}_nativeLight(t){return t.userData.volterOwnOverlay?null:t.isLight?t:null}_disposeLightHelper(t,e){e.helper.removeFromParent(),e.helper.dispose?.(),this._lightHelpers.delete(t)}_ensureLightHelper(t,e){if(this._lightHelpers.has(t))return;const i=.5;let s=null;const o=e;try{o.isDirectionalLight?s=new _s(e,i):o.isPointLight?s=new gs(e,i):o.isSpotLight?s=new ys(e):o.isHemisphereLight&&(s=new vs(e,i))}catch{s=null}s&&(s.name=`Light helper: ${e.name||t}`,s.userData.editorOnly=!0,s.traverse(n=>n.layers.set(P)),s.layers.set(P),this._lightHelpers.set(t,{source:e,helper:s}),this._scene.add(s))}_syncAudioHelpers(t=null){if(t===null){const i=new Map;for(const[s,o]of this._objectMap){const n=this._nativeAudio(o);n&&i.set(s,n)}for(const[s,o]of this._audioHelpers)i.get(s)!==o.source&&this._disposeAudioHelper(s,o);for(const[s,o]of i)this._ensureAudioHelper(s,o)}else for(const i of t){const s=this._objectMap.get(i),o=s?this._nativeAudio(s):null,n=this._audioHelpers.get(i);n&&n.source!==o&&this._disposeAudioHelper(i,n),o&&![...this._audioHelpers.values()].some(r=>r.source===o)&&this._ensureAudioHelper(i,o)}const e=this._threeSurfaceShowing&&this._store.shell.showHelpers&&this._store.shell.helperVisibility.audio;for(const i of this._audioHelpers.values())i.helper.visible=e}_nativeAudio(t){const e=t.type;return e==="Audio"||e==="PositionalAudio"||e==="AudioListener"?t:null}_ensureAudioHelper(t,e){if(this._audioHelpers.has(t))return;const i=new K,s=e.type==="AudioListener"?8377599:16763274,o=new y(new at(.16),new R({color:s,wireframe:!0,depthTest:!1}));i.add(o),i.name=`Audio helper: ${e.name||t}`,i.userData.editorOnly=!0,i.traverse(n=>n.layers.set(P)),i.layers.set(P),e.add(i),this._audioHelpers.set(t,{source:e,helper:i})}_disposeAudioHelper(t,e){e.helper.traverse(i=>{const s=i;s.geometry?.dispose?.(),s.material?.dispose?.()}),e.helper.removeFromParent(),this._audioHelpers.delete(t)}_disposeCameraHelper(t,e){e.helper.removeFromParent(),e.helper.dispose(),this._cameraHelpers.delete(t)}_ensureCameraHelper(t,e){if(this._cameraHelpers.has(t))return;let i;try{i=new bs(e)}catch(s){this._refuseCameraOverlay(t,e,s);return}i.name=`Camera frustum: ${e.name||t}`,i.userData.editorOnly=!0,i.layers.set(P),this._cameraHelpers.set(t,{source:e,helper:i}),this._scene.add(i)}_refusedCameraOverlays=new Set;_refuseCameraOverlay(t,e,i){this._refusedCameraOverlays.has(t)||(this._refusedCameraOverlays.add(t),It.warn(`Helpers → Cameras draws no frustum for "${e.name||e.type}": ${i instanceof Error?i.message:String(i)}. This world's camera was constructed by the GAME's own copy of three, and \`THREE.CameraHelper\` is the editor's class reading fields off it that that revision does not define. Every other camera capability (framing, selection, inspection) is unaffected. It closes when the game resolves \`three\` to the host's instance — a bare, un-rewritten \`import 'three'\` in its own source.`,"authoring"))}_nativeCamera(t){if(t.userData.volterOwnOverlay)return null;if(t.isCamera)return t;const e=tt(t,"_camera");return e?.isCamera?e:null}_syncSpatialHandles(){pi(this._spatialHandleRoots),this._spatialHandleRoots=[],this._spatialHandleMeshes=[],this._hoveredSpatialHandle=null;const t=te(this._authoring());if(!t||!this._threejsToolContextActive||!this._store.shell.showHelpers)return;const e=this._store.shell.helperVisibility;for(const i of this._store.shell.selectedEntityIds){const s=t.layers(i).filter(n=>n.category in e?e[n.category]:!0),o=no(i,s);for(const n of o.handles)di(n,this._screenCamera);for(const n of o.roots)this._scene.add(n);this._spatialHandleRoots.push(...o.roots),this._spatialHandleMeshes.push(...o.handles)}}_raycastSpatialHandle(t){if(this._spatialHandleMeshes.length===0)return null;const e=this._canvas.getBoundingClientRect(),i=new et((t.clientX-e.left)/e.width*2-1,-((t.clientY-e.top)/e.height)*2+1);return this._spatialHandleRaycaster.setFromCamera(i,this._screenCamera),this._spatialHandleRaycaster.intersectObjects(this._spatialHandleMeshes,!1)[0]?.object??null}_spatialHandleWorldPoint(t){const e=this._canvas.getBoundingClientRect(),i=new et((t.clientX-e.left)/e.width*2-1,-((t.clientY-e.top)/e.height)*2+1);this._spatialHandleRaycaster.setFromCamera(i,this._screenCamera);const s=new p;return this._spatialHandleRaycaster.ray.intersectPlane(this._spatialHandleDragPlane,s)?s.add(this._spatialHandleDragOffset):null}_finishSpatialHandleDrag(t){const e=this._activeSpatialHandle;this._activeSpatialHandle=null,this.orbitControls.enabled=this._orbitEnabledBeforeHandleDrag,this.transformControls.enabled=this._transformEnabledBeforeHandleDrag,this.syncFromStore(),this._canvas.style.cursor="",t&&e&&te(this._authoring())?.commit(e.nodeId,e.handle.id,[this._spatialHandleDragPoint.x,this._spatialHandleDragPoint.y,this._spatialHandleDragPoint.z])}_updateSpatialHandleDrag(t){const e=this._activeSpatialHandle;if(!e)return!1;const i=this._spatialHandleWorldPoint(t);return i&&(this._spatialHandleDragPoint.copy(i),te(this._authoring())?.preview(e.nodeId,e.handle.id,[i.x,i.y,i.z]),this._syncSpatialHandles(),this._canvas.style.cursor="grabbing"),!0}_updateSpatialHandleHover(t){if(t.buttons&1||this._spatialHandleMeshes.length===0)return;const e=this._raycastSpatialHandle(t);if(e===this._hoveredSpatialHandle)return;if(this._hoveredSpatialHandle&&le(this._hoveredSpatialHandle,!1),this._hoveredSpatialHandle=e,!e){this._canvas.style.cursor="";return}le(e,!0);const i=hi(e);this._canvas.style.cursor=i?.handle.writable?"grab":"not-allowed"}_updateEditorHandleInteraction(t){return this._updateSpatialHandleDrag(t)||this._updateConstraintControlHover(t)}_previewInfrastructure(){return[this.grid,...this._axisLines?[this._axisLines]:[],this._gizmoHelper,this._auxRotateControls.getHelper(),this._auxScaleControls.getHelper(),...this._boxHelpers.values(),...this._constraintHelpers.values(),...this._reflectionProbeHelpers.values(),...this._triggerVolumeHelpers.values(),...[...this._cameraHelpers.values()].map(({helper:t})=>t),...this._spatialHandleRoots]}_suspendPreviewInfrastructure(){const t=this._previewInfrastructure().map(e=>[e,e.visible]);for(const[e]of t)e.visible=!1;return()=>{for(const[e,i]of t)e.visible=i}}_allGizmos(){return[this.transformControls,this._auxRotateControls,this._auxScaleControls]}_anyGizmoDragging(){return this._allGizmos().some(t=>t.dragging)}_attachGizmosTo(t){this.transformControls.attach(t),this._auxRotateControls.attach(t),this._auxScaleControls.attach(t)}_detachGizmos(){for(const t of this._allGizmos())t.detach()}syncFromStore(){this._gizmoHelper.traverse(x=>x.layers.set(P));const t=this._store.shell.transformMode,i=t==="combined"||t==="select"?"translate":t;this.transformControls.mode!==i&&this.transformControls.setMode(i),this._applySnapToGizmos();for(const x of this._allGizmos())x.setSpace(this._store.shell.transformSpace);const s=kt(),o=this._authoring(),n=s.toolOwner(o,this._store.shell.selectedEntityIds);this._threejsToolContextActive=(this._standaloneAuthoring||s.toolOwnerPainted(this._store.shell,n))&&n?.kind==="three";const r=this._standaloneAuthoring||s.threeSurfaceShowing(this._store.shell,o);this._threeSurfaceShowing=r,this.grid.visible=this._presentationGrid&&r,this._axisLines&&(this._axisLines.visible=this.grid.visible&&this._axesWanted);const l=this._store.shell.helperVisibility,a=this._standaloneAuthoring?null:s.threeViewportRootId(this._store.shell),h=a!==null&&ji(a);h&&s.applyRootHiddenVisibility(this._objectMap,a),h&&s.suppressRootEnvironment(this._scene);const d=this._store.gizmoEpoch,f=`${this._store.shell.showHelpers}|${JSON.stringify(l)}|${a??""}|${h}|${this._threejsToolContextActive}`,u=this._objectMap!==this._lastGizmoObjectMap,m=f!==this._lastGizmoSig,_=u?null:this._store.ingestObjectMapMembershipChangesSince(this._lastGizmoEpoch),g=u||m||_===null?null:_.changedIds,v=g===null||g.size>0;if(this._lastGizmoObjectMap=this._objectMap,this._lastGizmoSig=f,this._lastGizmoEpoch=d,v){s.applyRootHiddenVisibility(this._objectMap,a);const x=g===null?To(this._objectMap):zo(this._objectMap,g);for(const A of x)A.traverse(M=>{if(tt(M,"editorIcon")){M.visible=this._store.shell.showHelpers;return}if(!tt(M,"editorHelper"))return;const E=tt(M,"editorHelperType");if(E==="skeletons"){M.visible=this._store.shell.showHelpers&&(l.skeletons||!!tt(M,"skeletonEnabled"));return}E&&E in l?M.visible=this._store.shell.showHelpers&&l[E]:M.visible=this._store.shell.showHelpers});for(const[A,M]of this._helpers)M.visible=this._store.shell.showHelpers&&(!(A in l)||l[A]);this._syncCameraHelpers(g),this._syncLightHelpers(g)}this._syncAudioHelpers(g),this._syncReflectionProbeHelpers(g),this._syncTriggerVolumeHelpers(g),this._syncConstraintHelpers(g);const w=this._threejsToolContextActive&&o.capabilities.transform&&t!=="select"?this._store.shell.selectedEntityId:null,b=t==="translate"||t==="combined"?"position":t==="rotate"?"rotation":"scale",z=w?t==="combined"?(x=>["position","rotation","scale"].some(A=>o.transforms?.editability?.(x,A).writable??!0))(w):o.transforms?.editability?.(w,b).writable??!0:!1;if(w&&z){if(!this._anyGizmoDragging())if(this._store.shell.pivotMode==="median-point"&&this._store.shell.selectedEntityIds.size>1){const x=new p;let A=0;for(const M of this._store.shell.selectedEntityIds){if(!(o.transforms?.editability?.(M,b).writable??!0))continue;const E=this._objectForAuthoringId(M);E&&(x.add(E.getWorldPosition(ko)),A++)}A>0&&x.divideScalar(A),this._pivotDummy.position.copy(x),this._pivotDummy.quaternion.identity(),this._pivotDummy.scale.set(1,1,1),this._attachedAuthoringId=null,this._dummyIsPresentationAnchor=!1,this._attachGizmosTo(this._pivotDummy)}else{const x=this._objectForAuthoringId(w),A=tt(x,"pivot"),M=A&&(A[0]!==0||A[1]!==0||A[2]!==0),E=M?null:this._centreAnchorFor(x);if(E&&x)this._pivotDummy.position.copy(E),this._pivotDummy.quaternion.copy(x.getWorldQuaternion(ue)),this._pivotDummy.scale.copy(x.getWorldScale(gi)),this._attachedAuthoringId=w,this._dummyIsPresentationAnchor=!0,this._attachGizmosTo(this._pivotDummy);else if(M&&x){const G=new p(A[0],A[1],A[2]);G.applyQuaternion(x.getWorldQuaternion(ue)),this._pivotDummy.position.copy(x.getWorldPosition(_i)).add(G),this._pivotDummy.quaternion.copy(ue),this._pivotDummy.scale.copy(x.getWorldScale(gi)),this._attachedAuthoringId=w,this._dummyIsPresentationAnchor=!1,this._attachGizmosTo(this._pivotDummy)}else this._dummyIsPresentationAnchor=!1,this.attach(w)}}else this.detach();this._syncBoxHelpers(),this._syncSpatialHandles(),this._syncCombinedGizmoHalves()}_applySnapToGizmos(){const t=this._store.shell.snapEnabled||this._snapHold,e=this._store.shell.snapValues;for(const i of this._allGizmos())i.setTranslationSnap(t?e.translate:null),i.setRotationSnap(t?j.degToRad(e.rotate):null),i.setScaleSnap(t?e.scale:null)}_modifiedZoom=!1;_onAltOrbitStart=t=>{t.button===1&&(t.ctrlKey||t.metaKey)&&Z().orbit==="middle"&&(this._modifiedZoom=!0,this.orbitControls.mouseButtons.MIDDLE=dt.DOLLY),t.altKey&&t.button===0&&(this._altDragOrbit=!0,this.orbitControls.mouseButtons.LEFT=dt.ROTATE)};_onAltOrbitRelease=t=>{this._modifiedZoom&&(!t||t.type==="pointercancel"||t.button===1)&&(this._modifiedZoom=!1,this.applyKeymapNavigation()),this._altDragOrbit&&(this._altDragOrbit=!1,this.orbitControls.mouseButtons.LEFT=-1)};_onSnapHoldKey=t=>{const e=t.ctrlKey||t.metaKey;if(e!==this._snapHold&&(this._snapHold=e,this._applySnapToGizmos(),e&&this._anyGizmoDragging()&&!this._store.shell.snapEnabled)){const{translate:i,rotate:s,scale:o}=this._store.shell.snapValues;V(`Snapping while held: ${i} units · ${s}° · ×${o}`)}};_syncCombinedGizmoHalves(){if(this._anyGizmoDragging())return;const t=this._store.shell.transformMode==="combined",e=this._attachedAuthoringId,i=this._authoring().transforms?.editability,s=a=>e===null||(i?.(e,a).writable??!0),o=t&&this._auxRotateControls.object!==void 0&&s("rotation"),n=t&&this._transformHandles.scale&&this._auxScaleControls.object!==void 0&&s("scale");this._auxRotateControls.enabled=o,this._auxScaleControls.enabled=n;const r=this._auxRotateControls.getHelper(),l=this._auxScaleControls.getHelper();r.visible=o,l.visible=n;for(const a of[r,l])a.traverse(h=>h.layers.set(P));this.transformControls.enabled=!0}moveGizmosTo(t){const e=this._gizmoObjects();for(const i of e)t.add(i)}restoreGizmos(){const t=this._gizmoObjects();for(const e of t)this._scene.add(e)}_gizmoObjects(){return[this.grid,...this._axisLines?[this._axisLines]:[],this._editorAmbient,this._editorDirLight,this.batchedRenderer,this._gizmoHelper,this._auxRotateControls.getHelper(),this._auxScaleControls.getHelper(),this._pivotDummy,this._surfaceSnapIndicator,...[...this._cameraHelpers.values()].map(({helper:t})=>t),...this._spatialHandleRoots]}_contentBounds(t=!1){const e=performance.now(),i=this._contentBoundsAt===0||e-this._contentBoundsAt>Lo;if(t||i){this._contentBoundsBox.makeEmpty();for(const s of this._scene.children)J(s)||Qi(this._contentBoundsBox,s);this._contentBoundsAt=e}return this._contentBoundsBox}_measureContentBounds(){const t=[];for(const e of this._scene.children)J(e)||Zi(e,t);this._contentBoundsBox.makeEmpty();for(const e of t)this._contentBoundsBox.union(e);return this._contentBoundsAt=performance.now(),t}_updateClipPlanes(){const t=this._contentBounds();let e=0,i=0;t.isEmpty()||(t.getBoundingSphere(pe),e=this.freeCamera.position.distanceTo(pe.center),i=pe.radius);const{near:s,far:o}=Yi(e,i);s===this.camera.near&&o===this.camera.far||(this.camera.near=s,this.camera.far=o,this.camera.updateProjectionMatrix(),this.orthographicCamera.near=s,this.orthographicCamera.far=o,this.orthographicCamera.updateProjectionMatrix())}seedFromGameCamera(t){const e=ei(this._measureContentBounds()),i=Is(t,e);if(!i)return!1;const s=this.camera.position.clone(),o=this.orbitControls.target.clone();this.camera.position.copy(i.position),this.orbitControls.target.copy(i.target),this.camera.lookAt(this.orbitControls.target),this.camera.updateMatrixWorld(!0);const n=this._scene.children.filter(r=>!J(r));return Os(this.camera,n,i.position.distanceTo(i.target))?(this._updateClipPlanes(),this.orbitControls.update(),!0):(this.camera.position.copy(s),this.orbitControls.target.copy(o),this.camera.lookAt(this.orbitControls.target),this.camera.updateMatrixWorld(!0),!1)}focusOnScene(){const t=ei(this._measureContentBounds());if(t.isEmpty())return!1;const e=t.getCenter(new p),i=this.camera.position.clone().sub(this.orbitControls.target).normalize(),s=ce(t,this.camera,i);return Number.isFinite(s)?(this.camera.position.copy(e).add(i.multiplyScalar(s)),this.orbitControls.target.copy(e),this._orthographicHeight=Math.max(t.getSize(new p).y,t.getSize(new p).x/this._viewportAspect)*1.15,this._syncOrthographicFromPerspective(!0),this._updateClipPlanes(),!0):!1}focusOn(t){const e=this._contentOrProbeBounds(t),i=e.getCenter(new p),s=this.camera.position.clone().sub(this.orbitControls.target).normalize(),o=ce(e,this.camera,s);this.camera.position.copy(i).add(s.multiplyScalar(o)),this.orbitControls.target.copy(i);const n=e.getSize(new p);this._orthographicHeight=Math.max(n.y,n.x/this._viewportAspect,.01)*1.15,this._syncOrthographicFromPerspective(!0)}activateVertexSnap(){this._vertexSnapTargets=this._collectVertices(this._store.shell.selectedEntityIds)}deactivateVertexSnap(){this._vertexSnapTargets=[],this._vertexSnapIndicator.visible=!1}focusOnMultiple(t){if(t.length===0)return;if(t.length===1){this.focusOn(t[0]);return}const e=new xt;for(const r of t)e.union(this._contentOrProbeBounds(r));const i=e.getCenter(new p),s=this.camera.position.clone().sub(this.orbitControls.target).normalize(),o=ce(e,this.camera,s);this.camera.position.copy(i).add(s.multiplyScalar(o)),this.orbitControls.target.copy(i);const n=e.getSize(new p);this._orthographicHeight=Math.max(n.y,n.x/this._viewportAspect,.01)*1.15,this._syncOrthographicFromPerspective(!0)}_centreAnchorFor(t){const e=this._store.shell.gizmoAnchor;if(!t||e==="pivot"||e==="auto"&&zs(t)===0)return null;const i=Vt(t);if(i.isEmpty()||e==="auto"&&!Ls(t,i)?.worldAnchored)return null;const s=i.getCenter(new p);return t.updateWorldMatrix(!0,!1),s.distanceToSquared(t.getWorldPosition(_i))<Do?null:s}_contentOrProbeBounds(t){const e=Wt(t);if(!e)return Vt(t);const i=e.config,[s,o,n]=i.size,r=i.shape==="sphere"?new p(1,1,1).multiplyScalar(Math.max(.01,i.radius)):new p(Math.max(.01,s),Math.max(.01,o),Math.max(.01,n)).multiplyScalar(.5);return t.updateWorldMatrix(!0,!1),new xt(r.clone().negate(),r).applyMatrix4(t.matrixWorld)}setHelper(t,e){st();const i=this._helpers.get(t);if(i&&(this._scene.remove(i),this._helpers.delete(t)),!e)return;W(e,"editorHelper",!0),W(e,"editorHelperType",t);const s=this._store.shell.helperVisibility;e.visible=this._store.shell.showHelpers&&(!(t in s)||s[t]),this._scene.add(e),this._helpers.set(t,e)}visibleHelpers(){return[...this._helpers.values()].filter(t=>t.visible&&t.parent!==null)}setViewPreset(t){this._projection==="orthographic"&&this.setProjection("perspective");const e=this.orbitControls.target.clone(),i=this.camera.position.distanceTo(e),s=new p;switch(t){case"top":s.set(0,1,0);break;case"front":s.set(0,0,1);break;case"right":s.set(1,0,0);break;case"bottom":s.set(0,-1,0);break;case"back":s.set(0,0,-1);break;case"left":s.set(-1,0,0);break;case"perspective":s.set(1,1,1).normalize();break}this.camera.position.copy(e).add(s.multiplyScalar(i)),t==="top"?this.camera.up.set(0,0,-1):t==="bottom"?this.camera.up.set(0,0,1):this.camera.up.set(0,1,0),this.camera.lookAt(e),t!=="perspective"&&this.setProjection("orthographic"),this.orbitControls.update()}setFieldOfView(t){if(!Number.isFinite(t.degrees)||t.degrees<=0||t.degrees>=180||t.degrees===this._fieldOfView.degrees&&t.axis===this._fieldOfView.axis)return;const e=s=>Math.tan(j.degToRad(s*.5)),i=e(this.camera.fov);this._canvas.clientWidth>0&&this._canvas.clientHeight>0&&(this._viewportAspect=this._canvas.clientWidth/this._canvas.clientHeight,this.camera.aspect=this._viewportAspect),this._fieldOfView=t,this.camera.fov=me(this._viewportAspect,t),this.camera.updateProjectionMatrix(),this._projection==="orthographic"&&(this._orthographicHeight*=e(this.camera.fov)/i),this._applyOrthographicFrustum()}setPose(t,e,i,s){this.setProjection("perspective"),s?this.camera.up.set(s.x,s.y,s.z):this.camera.up.set(0,1,0),this.camera.position.set(t.x,t.y,t.z),this.orbitControls.target.set(e.x,e.y,e.z),this.camera.lookAt(this.orbitControls.target),i!==void 0&&(this.camera.fov=i,this.camera.updateProjectionMatrix()),this.orbitControls.update()}resize(t,e){this._viewportAspect=Math.max(1,t)/Math.max(1,e),this.camera.aspect=this._viewportAspect,this.camera.fov=me(this._viewportAspect,this._fieldOfView),this.camera.updateProjectionMatrix(),this._applyOrthographicFrustum(),this._applyGizmoSize()}resolvePresentation(){this._presentation?.rig.resolveSource({light:this._store.isAdoptedSceneActive})}update(t=0){this._ensureSparkRenderer(),this._syncLookBackground();const e=this.transformControls.object;if(e&&e!==this._pivotDummy&&!e.parent&&(this._detachGizmos(),this.syncFromStore()),this._updateFlyCamera(t),this.orbitControls.update(),this._snapAnimating){const i=performance.now()-this._snapStartTime;let s=Math.min(i/this._snapDuration,1);s=s<.5?4*s*s*s:1-(-2*s+2)**3/2;const o=new L().slerpQuaternions(this._snapQ1,this._snapQ2,s),n=new p(0,0,1).applyQuaternion(o);this.freeCamera.position.copy(this.orbitControls.target).add(n.multiplyScalar(this._snapDist)),this.freeCamera.quaternion.copy(o),this.freeCamera.up.set(0,1,0).applyQuaternion(o),s>=1&&(this._snapAnimating=!1)}this._presentation&&(this.resolvePresentation(),this._presentation.rig.update(this.camera));for(const i of this._boxHelpers.values()){const s=i._wireOf;if(s){i.matrix.copy(s.matrixWorld),i.matrixWorldNeedsUpdate=!0;continue}if(i instanceof de){i.updateIfNeeded();continue}const o=i;o._entityObj?o._entityObj.getWorldPosition(i.position):i instanceof Qe&&i.update()}for(const i of this._constraintHelpers.values())i.update(this.camera);for(const i of this._reflectionProbeHelpers.values())i.update();for(const i of this._triggerVolumeHelpers.values())i.update();for(const{helper:i}of this._cameraHelpers.values())i.update();for(const i of this._spatialHandleMeshes)di(i,this._screenCamera);this._enforceLodForcedLevels(),this.alignGridToView(this.renderCamera,this._renderer?.domElement.width??1),this._updateClipPlanes()}_enforceLodForcedLevels(){const t=new Set(this._objectMap.values());for(const[e,i]of this._store.lodForcedLevels){const s=this._objectMap.get(e),o=s?Ps(s,r=>t.has(r)):null;if(!o||o.levels.length===0)continue;o.autoUpdate=!1;const n=Math.min(Math.max(i,0),o.levels.length-1);for(let r=0;r<o.levels.length;r++)o.levels[r].object.visible=r===n}}renderWithInfrastructure(t){const e=this._sparkRenderer,i=this._cameraView?this._suspendPreviewInfrastructure():null;e&&this._scene.add(e);try{t()}finally{e?.removeFromParent(),i?.()}}renderViewCube(t){if(!this._threeSurfaceShowing||this._navigation==="hidden"||this._cameraView)return;const e=t.domElement.clientWidth,i=t.domElement.clientHeight,s=this._vcSize,o=this._vcDir.subVectors(this.freeCamera.position,this.orbitControls.target).normalize();this._vcCamera.position.copy(o.multiplyScalar(4)),this._vcCamera.up.copy(this.freeCamera.up),this._vcCamera.lookAt(0,0,0),this._syncOrientationGizmoDepth();const n=this._vcOrigin(e,i,this._chromeInsetPx),r=n.left,l=i-s-n.top,a=t.autoClear;try{t.setScissorTest(!0),t.setViewport(r,l,s,s),t.setScissor(r,l,s,s),t.clear(!1,!0,!1),t.autoClear=!1,t.render(this._vcScene,this._vcCamera)}finally{t.autoClear=a,t.setScissorTest(!1),t.setViewport(0,0,e,i)}}renderCameraPreview(t,e,i){if(!e||!i||this._cameraView)return;const s=t.domElement.clientWidth,o=t.domElement.clientHeight,n=t.domElement.getBoundingClientRect(),r=i.getBoundingClientRect(),l=Math.round(r.left-n.left),a=Math.round(n.bottom-r.bottom),h=Math.max(1,Math.round(r.width)),d=Math.max(1,Math.round(r.height));if(l>=s||a>=o||l+h<=0||a+d<=0)return;const f=this._suspendPreviewInfrastructure(),u=t.getClearColor(this._previewClearColor),m=t.getClearAlpha();try{t.setScissorTest(!0),t.setViewport(l,a,h,d),t.setScissor(l,a,h,d),t.setClearColor(1118740,1),t.clear(),t.render(this._scene,e)}finally{t.setScissorTest(!1),t.setViewport(0,0,s,o),t.setClearColor(u,m),f()}}get isFlying(){return this._flyActive}_inputDisconnected=!1;disconnectInput(){if(!this._inputDisconnected){this._inputDisconnected=!0,this._publishPickContext&&Ze(null),window.removeEventListener("keydown",this._onFlyKeyDown),window.removeEventListener("keyup",this._onFlyKeyUp),this._interactionElement.removeEventListener("pointerdown",this._onFlyPointerDown),this._canvas.removeEventListener("pointerdown",this._onAltOrbitStart,{capture:!0}),window.removeEventListener("pointerup",this._onAltOrbitRelease,{capture:!0}),window.removeEventListener("pointercancel",this._onAltOrbitRelease,{capture:!0}),window.removeEventListener("keydown",this._onSnapHoldKey),window.removeEventListener("keyup",this._onSnapHoldKey),this._interactionElement.removeEventListener("pointerup",this._onFlyPointerUp),this._interactionElement.removeEventListener("pointermove",this._onFlyPointerMove),this._interactionElement.removeEventListener("wheel",this._onFlyWheel),this._interactionElement.removeEventListener("wheel",this._onTrackpadWheel),this._canvas.removeEventListener("pointerdown",this._onPointerDown),this._interactionElement.removeEventListener("pointermove",this._onPointerMove),this._onInteractionPointerUp&&this._interactionElement.removeEventListener("pointerup",this._onInteractionPointerUp),this._onInteractionDblClick&&this._interactionElement.removeEventListener("dblclick",this._onInteractionDblClick),this._canvas.removeEventListener("dragover",this._onDragOver),this._canvas.removeEventListener("dragleave",this._onDragLeave),this._canvas.removeEventListener("drop",this._onDrop),this.orbitControls.dispose();for(const t of this._allGizmos())t.dispose()}}_applyViewportLook(t){this._lookGridHex=t.grid??10066329;const e=this.grid.material.uniforms.uGrazingFade;if(e&&(e.value=t.background!==null?1:0),this._paintLookGrid(),this._lookAxisHexes=[t.axisX,t.axisY,t.axisZ],this._axisLines&&(this._axisLines.material.linewidth=this._axisLineCss(t.axisLineWidth)),this._verticalAxisLine&&(this._verticalAxisLine.material.linewidth=this._axisLineCss(t.axisLineWidth)),this._axisLineWidth=t.axisLineWidth,this._rebuildAxisLines(),t.background!==null){const i=this._scene.background,s=i===null||i instanceof C&&[this._lookBackgroundHex,t.background].includes(i.getHex());this._lookBackgroundHex=t.background,s&&this._paintLookBackground()}else this._lookBackgroundHex=null}bindPresentation(t,e){this._presentation?.stop();const i=new Ni(this._scene),s=i.roots();this._editorObjects.push(...s),Fi(t,e);const o=()=>{const l=Wi(t);this._renderer&&i.apply(l,this._renderer,void 0,{tone:!1,sky:!1,floor:!1}),this.setStageFunction(l.world,l.interaction),this.setFieldOfView(l.camera.fov),this.setSelectionMarks(l.overlays.selection),this.setGridMajorEvery(l.overlays.grid.majorEvery),this.setAxisLines(l.overlays.axes),this.setNavigation(l.overlays.navigation),this.setGridVisible(l.overlays.grid.visible),st()},n=Gi(o),r={rig:i,stop:()=>{n(),i.dispose(),this._editorObjects=this._editorObjects.filter(a=>!s.includes(a)),this._presentation===r&&(this._presentation=null);const l=this._lightRig&&!this._store.isAdoptedSceneActive;this._editorAmbient.visible=l,this._editorDirLight.visible=l}};return this._presentation=r,this._editorAmbient.visible=!1,this._editorDirLight.visible=!1,o(),r.stop}setSelectionMarks(t){const e=this._selectionMarks;e.outline===t.outline&&e.wire===t.wire&&e.box===t.box||(this._selectionMarks={outline:t.outline,wire:t.wire,box:t.box},this._syncBoxHelpers())}alignGridToView(t,e){const i=this.grid.material.uniforms,s=i.uPlaneNormal.value;let o=-1;t.isOrthographicCamera&&(t.getWorldDirection(wt),o=[Math.abs(wt.x),Math.abs(wt.y),Math.abs(wt.z)].findIndex(d=>d>1-1e-4),o!==-1&&!ts(pt.set(0,1,0).applyQuaternion(t.getWorldQuaternion(Jo)))&&(o=-1)),s.set(o===0?1:0,o===-1||o===1?1:0,o===2?1:0),this.grid.quaternion.setFromUnitVectors(tn,s),this.grid.position.set(0,0,0),this.grid.scale.setScalar(1);const n=i.uCenter.value;if(n.set(0,0),i.uReach.value=1,this._axisLines?.position.set(0,0,0),this._axisLines?.scale.setScalar(1),o!==-1){const h=t;t.getWorldPosition(pt);const d=pt.clone().addScaledVector(s,-pt.dot(s));n.set(o===1||o===2?d.x:d.z,o===1?d.z:d.y);const f=Math.hypot(h.right-h.left,h.top-h.bottom)/(2*h.zoom),u=Math.max(1,f/(this.grid.geometry.parameters.width*.5*.55));i.uReach.value=u,this.grid.scale.setScalar(u),pt.addScaledVector(wt,h.far*.98);const m=s.clone().multiplyScalar(pt.dot(s));this.grid.position.copy(d).add(m),this._axisLines?.position.copy(m),this._axisLines?.scale.setScalar(Math.max(1,(n.length()+f)/Oe))}let r=1,l=1;if(o!==-1){const h=t,f=60*((h.right-h.left)/h.zoom)/Math.max(e,1);r=10**Math.floor(Math.log10(f)),l=1-(f-r)/(r*10-r)}i.uUnit.value=r,i.uMinorFade.value=l,i.uAligned.value=o===-1?0:1;const a=this._axisLineCss(o===-1?this._axisLineWidth:1);for(const h of[this._axisLines,this._verticalAxisLine]){const d=h?.material;d&&d.linewidth!==a&&(d.linewidth=a)}}setGridMajorEvery(t){const e=this.grid.material.uniforms.uMajorEvery;e&&Number.isFinite(t)&&t>=1&&(e.value=t)}_gridMajorContrast=1;_applyGridLines(t){const e=this.grid.material.uniforms;e.uLineWidth&&(e.uLineWidth.value=t.lineWidth),e.uMajorWidth&&(e.uMajorWidth.value=t.majorWidth),this._gridMajorContrast=t.majorContrast,this._paintLookGrid()}_paintLookGrid(){const t=this._lookGridHex;if(t===null)return;const e=this._lookBackgroundHex??4144959,i=r=>{const l=t>>r&255,a=e>>r&255;return Math.round(Math.min(255,Math.max(0,a+(l-a)*this._gridMajorContrast)))},s=i(16)<<16|i(8)<<8|i(0),o=fi(t,this._renderer),n=fi(s,this._renderer);this.grid.material.uniforms.uColor?.value?.copy(o),this.grid.material.uniforms.uMajorColor?.value?.copy(n)}_rebuildAxisLines(){const t=this._axisLines;if(!t)return;const e=this._stageAxisFrame,i=this._stageAxes,s=[0,1,2].filter(l=>{const a=e[l][0];return i==="floor"?l!==1:["x","y","z"].some((h,d)=>d===a&&i[h])});if(this._axesWanted=s.length>0,t.visible=this.grid.visible&&this._axesWanted,!this._axesWanted)return;const o=l=>{const a=[],h=[];for(const f of l){const u=e[f][0],m=this._lookAxisHexes[u],_=m==null?this._gizmoAxisColor(u):new C(m);a.push(...bi(f));for(let g=0;g<Pe*2;g++)h.push(_.r,_.g,_.b)}const d=new ve;return d.setPositions(a),d.setColors(h),d},n=s.filter(l=>l!==1),r=s.includes(1);if(t.material.visible=n.length>0,n.length>0&&(t.geometry.dispose(),t.geometry=o(n)),r&&!this._verticalAxisLine){const l=t.material;this._verticalAxisLine=new ye(o([1]),new be({vertexColors:!0,linewidth:l.linewidth,transparent:!0,opacity:1,depthWrite:!1,toneMapped:!1})),this._verticalAxisLine.layers.set(P),t.add(this._verticalAxisLine)}else r&&this._verticalAxisLine&&(this._verticalAxisLine.geometry.dispose(),this._verticalAxisLine.geometry=o([1]));this._verticalAxisLine&&(this._verticalAxisLine.visible=r)}setAxisLines(t){t===this._stageAxes||typeof t=="object"&&typeof this._stageAxes=="object"&&t.x===this._stageAxes.x&&t.y===this._stageAxes.y&&t.z===this._stageAxes.z||(this._stageAxes=typeof t=="object"?{x:t.x,y:t.y,z:t.z}:t,this._rebuildAxisLines())}_paintLookBackground(){if(this._lookBackgroundHex===null)return;const t=this._scene.background;t instanceof C&&t.getHex()===this._lookBackgroundHex||(this._scene.background=new C(this._lookBackgroundHex))}_syncLookBackground(){this._renderer&&(this._renderer.toneMapping===this._lookToneMapping&&this._renderer.toneMappingExposure===this._lookExposure||(this._paintLookGrid(),this._lookToneMapping=this._renderer.toneMapping,this._lookExposure=this._renderer.toneMappingExposure))}dispose(){this._unsubscribeKeymap(),this._disposed=!0,this._unsubscribeSelectionTheme(),this._verticalAxisLine&&(this._verticalAxisLine.geometry.dispose(),this._verticalAxisLine.material.dispose(),this._verticalAxisLine=null),this._axisLines&&(this._scene.remove(this._axisLines),this._axisLines.geometry.dispose(),this._axisLines.material.dispose(),this._axisLines=null),this.clearCameraView(),this._sparkRenderer&&(this._scene.remove(this._sparkRenderer),Ki(this._sparkRenderer),this._sparkRenderer=null),this.disconnectInput(),this._hideDropOverlay();for(const t of this._helpers.values())this._scene.remove(t);this._helpers.clear();for(const t of this._boxHelpers.values())this._scene.remove(t),t.geometry.dispose(),t.material.dispose();this._boxHelpers.clear();for(const t of this._reflectionProbeHelpers.values())t.dispose();this._reflectionProbeHelpers.clear();for(const t of this._triggerVolumeHelpers.values())t.dispose();this._triggerVolumeHelpers.clear();for(const t of this._constraintHelpers.values())t.dispose();this._constraintHelpers.clear();for(const{helper:t}of this._cameraHelpers.values())t.dispose();this._cameraHelpers.clear(),pi(this._spatialHandleRoots),this._spatialHandleRoots=[],this._spatialHandleMeshes=[]}_ensureSparkRenderer(){if(!this._renderer||this._sparkRenderer||this._sparkRendererLoading||this._sparkRendererFailed)return;const t=performance.now();$i(this._lastSparkDiscoveryAt,t)&&(this._lastSparkDiscoveryAt=t,Ji(this._scene)&&(this._sparkRendererLoading=!0,Xi(async()=>{const{SparkRenderer:e}=await import("./spark.module-Byplgb8G.js");return{SparkRenderer:e}},__vite__mapDeps([0,1,2,3])).then(({SparkRenderer:e})=>{if(this._disposed||!this._renderer)return;const i=new e({renderer:this._renderer,enableLod:!1});i.traverse(s=>W(s,"engineInternal",!0)),this._sparkRenderer=i,st()}).catch(e=>{this._sparkRendererFailed=!0,console.error("Failed to install SparkRenderer in the editor viewport.",e)}).finally(()=>{this._sparkRendererLoading=!1})))}_buildOrientationGizmo(){if(this._vcScene!==void 0){for(const t of[...this._vcScene.children]){this._vcScene.remove(t);const e=t;e.isSprite||e.geometry?.dispose();const i=e.material;i?.map?.dispose(),i?.dispose()}this._vcBalls.length=0,this._vcStalks.length=0,this._vcSolids.length=0,this._vcClickTargets.length=0,this._initOrientationGizmo()}}_initOrientationGizmo(){const t=this._gizmoLook.navigationForm;if(t!=="balls"&&t!=="godot"){this._initNavigationForm(t);return}const e=q/3,i=Ce/e,s=Zo/e,o=Me/e/2,n=[new p(1,0,0),new p(0,1,0),new p(0,0,1)],r=new U(i*.6,8,8),l=new R({visible:!1});for(let a=0;a<3;a++){const[h,d]=this._stageAxisFrame[a],f=this._gizmoLook.navigation??this._gizmoLook.axes,u=f===null?new C(...fe[h]):new C(f[h]),m=vi[h],_=n[a].clone().multiplyScalar(d);for(const g of[1,-1]){const v=_.clone().multiplyScalar(g),w=new y(new O(o,o,s,8),new R({color:u,transparent:!0,depthTest:!1,toneMapped:!1}));w.position.copy(v).multiplyScalar(s/2),w.quaternion.setFromUnitVectors(new p(0,1,0),v),this._vcScene.add(w),this._vcStalks.push({mesh:w,direction:v.clone(),positive:g>0,color:u});const b=M=>{const E=new Je(new ti({map:M,transparent:!0,depthTest:!1,toneMapped:!1}));return E.position.copy(v).multiplyScalar(s),E.scale.setScalar(i),this._vcScene.add(E),E},S=b(No()),z=b(Yo()),x=b(qo(g>0?m:`-${m}`));this._vcBalls.push({fill:S,ring:z,letter:x,direction:v.clone(),positive:g>0,axis:a,color:u});const A=new y(r,l);A.position.copy(S.position),W(A,"vcDirIdx",a*2+(d*g>0?0:1)),this._vcScene.add(A),this._vcClickTargets.push(A)}}}_initNavigationForm(t){const e=q/3,i=new p(0,1,0),s=[new p(1,0,0),new p(0,1,0),new p(0,0,1)],o=this._gizmoLook.navigation??this._gizmoLook.axes,n=(r,l,a,h)=>{const d=new Je(new ti({map:Xo(r,l),transparent:!0,depthTest:!1,toneMapped:!1}));d.position.copy(a),d.scale.setScalar(h/e),d.renderOrder=200,this._vcScene.add(d)};for(let r=0;r<3;r++){const[l,a]=this._stageAxisFrame[r],h=o===null?new C(...fe[l]):new C(o[l]),d=vi[l],f=s[r].clone().multiplyScalar(a);if(t==="triad"){const u=this._gizmoLook.navigationSize??1,m=24*u/e,_=Me*Math.sqrt(u)/e/2,g=new y(new O(_,_,m,6),new R({color:h,transparent:!0,depthTest:!1,toneMapped:!1}));g.position.copy(f).multiplyScalar(m/2),g.quaternion.setFromUnitVectors(i,f),this._vcScene.add(g),this._vcSolids.push({mesh:g,direction:f.clone()}),n(h,d,f.clone().multiplyScalar(m+7*u/e),12*u);continue}for(const u of[1,-1]){const m=f.clone().multiplyScalar(u),_=new y(new xs(6/e,15/e,20),new R({color:u>0?h:new C(14277081),transparent:!0,depthTest:!1,toneMapped:!1}));_.position.copy(m).multiplyScalar(19/e),_.quaternion.setFromUnitVectors(i,m.clone().negate()),W(_,"vcDirIdx",r*2+(a*u>0?0:1)),this._vcScene.add(_),this._vcSolids.push({mesh:_,direction:m.clone()}),this._vcClickTargets.push(_),u>0&&n(h,d.toLowerCase(),m.clone().multiplyScalar(34/e),12)}}if(t==="cones"){const r=new y(new I(11/e,11/e,11/e),new R({color:12434877,transparent:!0,depthTest:!1,toneMapped:!1}));r.renderOrder=50,this._vcScene.add(r)}}_syncOrientationGizmoDepth(){const t=q/3,e=this._vcDir.copy(this._vcCamera.position).normalize();if(this._gizmoLook.navigationForm==="godot"){this._syncGodotNavigation(e);return}const i=new C(this._gizmoLook.background??4013373),s=new C(1,1,1),o=(a,h,d,f)=>{const u=a.getRGB({r:0,g:0,b:0},it),m=h.getRGB({r:0,g:0,b:0},it);return f.setRGB(u.r+(m.r-u.r)*d,u.g+(m.g-u.g)*d,u.b+(m.b-u.b)*d,it)};let n=-1;for(const{direction:a,axis:h}of this._vcBalls)1-a.dot(e)**2<1e-6&&(n=h);const r=new C,l=new C(0,0,0);for(const{fill:a,ring:h,letter:d,direction:f,positive:u,axis:m,color:_}of this._vcBalls){const g=f.dot(e),v=(g+1)/2,w=g<=.01*(u?-1:1),b=m===n&&!w,S=m===n&&w,z=o(i,_,(g+1)*.25+.5,new C),x=a.material,A=h.material,M=d.material,E=Math.min(g+1,1);u||b?(x.color.copy(z),x.opacity=1):(x.color.copy(o(i,_,.25,r)),x.opacity=E),!u&&b?(A.color.copy(o(s,_,.5,r)),A.opacity=E):(A.color.copy(z),A.opacity=1),M.color.copy(o(l,x.color,Vo,r)),a.visible=!S,h.visible=!S,d.visible=(u||m===n)&&!S;const G=(Ce+Uo*v)/t,$t=10+Math.round(v*100)*3;for(const[Pt,Jt]of[[a,0],[h,1],[d,2]])Pt.scale.setScalar(G),Pt.renderOrder=$t+Jt}for(const{mesh:a,direction:h,positive:d,color:f}of this._vcStalks){const u=h.dot(e),m=(u+1)/2,_=a.material;o(i,f,(.75+(u+1)*.25+.5)/2,_.color),_.opacity=1,a.visible=d||n!==-1,a.renderOrder=10+Math.round(m*100)*3-1}for(const{mesh:a,direction:h}of this._vcSolids)a.renderOrder=Math.round((h.dot(e)+1)/2*100)}_syncGodotNavigation(t){const i=16/(q/3),s=o=>{const n=o.getRGB({r:0,g:0,b:0},it);return new C().setRGB(n.r*.6,n.g*.6,n.b*.6,it)};for(const{fill:o,ring:n,letter:r,direction:l,positive:a,color:h}of this._vcBalls){const d=(l.dot(t)+1)/2,f=Math.min(1,.35+d/.5*.65),u=o.material,m=n.material,_=r.material;u.color.copy(a?h:s(h)),u.opacity=f,m.color.copy(h),m.opacity=f,_.color.setRGB(0,0,0),_.opacity=f*.6,o.visible=!0,n.visible=!0,r.visible=a;const g=10+Math.round(d*100)*3;for(const[v,w]of[[o,0],[n,1],[r,2]])v.scale.setScalar(i),v.renderOrder=g+w}for(const{mesh:o,direction:n,positive:r,color:l}of this._vcStalks){const a=(n.dot(t)+1)/2,h=o.material;h.color.copy(l),h.opacity=Math.min(1,.35+a/.5*.65),o.visible=r,o.renderOrder=10+Math.round(a*100)*3-1}}_isOverViewCube(t,e){if(this._navigation!=="interactive"||this._gizmoLook.navigationForm==="triad")return!1;const i=this._canvas.getBoundingClientRect(),s=t-i.left,o=e-i.top,{left:n,top:r}=this._vcOrigin(i.width,i.height,this._chromeInsetPx);return s>=n&&s<=n+this._vcSize&&o>=r&&o<=r+this._vcSize}_vcOrigin(t,e,i){return this._gizmoLook.navigationCorner==="bottom-left"?{left:4+i,top:e-this._vcSize-48-i}:{left:t-this._vcSize-this._vcMarginRight-i,top:this._vcMarginTop+i}}setGridVisible(t){t!==this._presentationGrid&&(this._presentationGrid=t,this._applyGridVisibility())}_applyGridVisibility(){this.grid.visible=this._presentationGrid&&this._threeSurfaceShowing,this._axisLines&&(this._axisLines.visible=this.grid.visible&&this._axesWanted),st()}setNavigation(t){t!==this._navigation&&(this._navigation=t,st())}_handleViewCubeClick(t){if(!this._isOverViewCube(t.clientX,t.clientY))return!1;const e=this._canvas.getBoundingClientRect(),i=t.clientX-e.left,s=t.clientY-e.top,{left:o,top:n}=this._vcOrigin(e.width,e.height,this._chromeInsetPx),r=(i-o)/this._vcSize*2-1,l=-((s-n)/this._vcSize*2-1);this._vcRaycaster.setFromCamera(new et(r,l),this._vcCamera);const a=this._vcRaycaster.intersectObjects(this._vcClickTargets);if(a.length===0)return!0;const h=tt(a[0].object,"vcDirIdx"),d=Ro[h];for(const m of[...this._axisViewListeners].reverse())if(m())break;const f=this.orbitControls;f._sphericalDelta.set(0,0,0),f._panOffset.set(0,0,0);const u=d.y>.5?new p(0,0,-1):d.y<-.5?new p(0,0,1):new p(0,1,0);return this._snapDist=this.freeCamera.position.distanceTo(this.orbitControls.target),this._snapQ1.copy(this.freeCamera.quaternion),this._snapQ2.setFromRotationMatrix(new ft().lookAt(d,new p,u)),this._snapStartTime=performance.now(),this._snapAnimating=!0,!0}_flushGizmoToStoreLive(){this._skipNextSync=!0;const t=this._authoring(),e=(s,o)=>{s&&Be(t,s,{position:o.position.toArray(),rotation:o.quaternion.toArray(),scale:o.scale.toArray()})},i=this._activeGizmo.object;i&&i!==this._pivotDummy&&e(this._attachedAuthoringId??this._authoringIdForObject(i),i);for(const{id:s,obj:o}of this._otherDragObjects)e(s,o);for(const{id:s,obj:o}of this._allDragObjects)e(s,o);for(const{id:s,obj:o}of this._preservedChildObjects)e(s,o)}_preparePreservedChildren(t){if(!this._store.shell.preserveChildrenTransform)return[];const e=this._authoring(),i=new Set(t),s=new Map;for(const o of i){const n=this._preservedChildrenForParent(e,o,i,s);if(typeof n=="string")return V(n),[];for(const r of n)s.set(r.id,r)}return[...s.values()]}_preservedChildrenForParent(t,e,i,s){const o=[];for(const n of t.hierarchy.node(e)?.childIds??[]){if(i.has(n)||s.has(n))continue;const r=this._objectForAuthoringId(n);if(!r?.parent)continue;const l=this._unwritableTransformChannel(t,n);if(l){const a=t.hierarchy.node(n)?.label??n;return`Preserve Children Transform needs writable ${l} on ${a}. The parent will transform normally.`}r.updateWorldMatrix(!0,!1),o.push({id:n,obj:r,worldMatrix:r.matrixWorld.clone()})}return o}_unwritableTransformChannel(t,e){return["position","rotation","scale"].find(i=>!(t.transforms?.editability?.(e,i).writable??!1))}_restorePreservedChildren(){const t=new ft;for(const e of this._preservedChildObjects){const i=e.obj.parent;i&&(i.updateWorldMatrix(!0,!1),t.copy(i.matrixWorld).invert().multiply(e.worldMatrix),t.decompose(e.obj.position,e.obj.quaternion,e.obj.scale),e.obj.updateMatrix(),e.obj.updateWorldMatrix(!1,!0))}}_belongsToRoots(t,e){let i=t;for(;i;){if(e.has(i))return!0;i=i.parent}return!1}_floorSnapPosition(t,e){t.updateWorldMatrix(!0,!0);const i=Vt(t);if(i.isEmpty())return null;const s=Math.min((i.max.x-i.min.x)*.1,.05),o=Math.min((i.max.z-i.min.z)*.1,.05),n=[[(i.min.x+i.max.x)/2,(i.min.z+i.max.z)/2],[i.min.x+s,i.min.z+o],[i.max.x-s,i.min.z+o],[i.min.x+s,i.max.z-o],[i.max.x-s,i.max.z-o]],r=new nt;r.layers.enableAll();const l=i.min.y+Math.max((i.max.y-i.min.y)*.001,.001);let a=Number.NEGATIVE_INFINITY;for(const[f,u]of n){r.set(new p(f,l,u),new p(0,-1,0));const m=r.intersectObjects(this._scene.children,!0).find(_=>!this._belongsToRoots(_.object,e)&&!J(_.object)&&_.point.y<=l);m&&(a=Math.max(a,m.point.y))}if(!Number.isFinite(a))return null;const h=a-i.min.y;if(Math.abs(h)<1e-6)return null;const d=t.getWorldPosition(new p);return d.y+=h,t.parent?(t.parent.updateWorldMatrix(!0,!1),t.parent.worldToLocal(d)):d}snapSelectionToFloor(){const t=this._authoring(),e=t.transforms;if(!e){V("This document does not expose writable transforms.");return}const i=[...this._store.shell.selectedEntityIds].map(l=>({id:l,obj:this._objectForAuthoringId(l)})).filter(l=>!!l.obj&&(e.editability?.(l.id,"position").writable??!0)),s=new Set(i.map(({obj:l})=>l)),o=i.filter(({obj:l})=>{let a=l.parent;for(;a;){if(s.has(a))return!1;a=a.parent}return!0});if(o.length===0){V("Select an object with a writable position first.");return}const n=new Set(o.map(({obj:l})=>l)),r=[];for(const l of o){const a=this._floorSnapPosition(l.obj,n);a&&r.push({...l,position:a})}if(r.length===0){V("No solid scene surface was found beneath the selection.");return}for(const{id:l}of r)Ge(t,l);for(const{obj:l,position:a}of r)l.position.copy(a);this._skipNextSync=!0;for(const{id:l,obj:a}of r)Be(t,l,{position:a.position.toArray(),rotation:a.quaternion.toArray(),scale:a.scale.toArray()});for(const{id:l}of r)Ve(t,l);this.syncFromStore()}_applySurfaceSnap(t,e){const i=new Set,s=this._attachedAuthoringId??this._authoringIdForObject(t);s&&i.add(s);for(const{id:a}of e)i.add(a);const o=[];for(const[a,h]of this._objectMap)i.has(a)||o.push(h);if(o.push(this.grid),o.length===0){this._surfaceSnapIndicator.visible=!1;return}const n=t.position.clone();n.y+=50,this._surfaceSnapRaycaster.set(n,new p(0,-1,0)),this._surfaceSnapRaycaster.far=200;const l=this._surfaceSnapRaycaster.intersectObjects(o,!0).find(a=>a.object===this.grid||!J(a.object));if(l){const a=l.point,h=a.y,d=h-t.position.y;t.position.y=h;for(const{obj:u}of e)u.position.y+=d;this._surfaceSnapIndicator.position.copy(a),this._surfaceSnapIndicator.position.y+=.01;const f=l.face?.normal;if(f){const u=f.clone().transformDirection(l.object.matrixWorld);this._surfaceSnapIndicator.quaternion.setFromUnitVectors(new p(0,1,0),u)}this._surfaceSnapIndicator.visible=!0}else this._surfaceSnapIndicator.visible=!1}_collectVertices(t){const e=[];for(const[s,o]of this._objectMap)t.has(s)||o.traverse(n=>{if(J(n))return;const r=n;if(!r.isMesh||!r.geometry)return;const l=r.geometry.getAttribute("position");if(!l)return;const a=Math.min(l.count,1e3),h=r.matrixWorld;for(let d=0;d<a;d++){const f=new p(l.getX(d),l.getY(d),l.getZ(d));f.applyMatrix4(h),e.push(f)}});return e}_applyVertexSnap(t,e){const i=t.position,s=i.clone().project(this._screenCamera),o=this._canvas.getBoundingClientRect(),n=(s.x+1)/2*o.width,r=(-s.y+1)/2*o.height;let l=this._vertexSnapThreshold,a=null;for(const h of this._vertexSnapTargets){const d=h.clone().project(this._screenCamera);if(d.z>1)continue;const f=(d.x+1)/2*o.width,u=(-d.y+1)/2*o.height,m=n-f,_=r-u,g=Math.sqrt(m*m+_*_);g<l&&(l=g,a=h)}if(a){const h=a.clone().sub(i);t.position.copy(a);for(const{obj:f}of e)f.position.add(h);this._vertexSnapIndicator.position.copy(a),this._vertexSnapIndicator.visible=!0;const d=a.distanceTo(this._screenCamera.position);this._vertexSnapIndicator.scale.setScalar(d*.008)}else this._vertexSnapIndicator.visible=!1}_flushGizmoToStore(){this._flushGizmoToStoreLive();const t=this._activeTransformEditIds;this._activeTransformEditIds=[],this._otherDragObjects=[],this._allDragObjects=[],this._preservedChildObjects=[];const e=this._authoring();for(const i of t)Ve(e,i)}consumeSkipSync(){return this._skipNextSync?(this._skipNextSync=!1,!0):!1}_applyGizmoSize(){if(this.transformControls===void 0)return;const t=this._lookGizmoSizePx,e=Math.max(1,this._canvas.clientHeight),i=t===null?null:2*t,s=i===null?1:this.transformControls.camera.isOrthographicCamera?4*i/e:i/(.2375*e);for(const o of this._allGizmos())o.size=s}_dropNegativeAxisHandles(t,e){const i=t.children.find(o=>o.isTransformControlsGizmo);if(!i)return;const s={X:new p(1,0,0),Y:new p(0,1,0),Z:new p(0,0,1)};for(const o of e)for(const n of[i.gizmo[o],i.picker[o]])if(n)for(const r of[...n.children]){const l=s[r.name];if(l===void 0)continue;const a=r;if(!a.geometry)continue;a.geometry.computeBoundingBox();const h=a.geometry.boundingBox;h&&h.getCenter(new p).dot(l)<0&&n.remove(r)}}_axisColorMap(){const t=o=>this._gizmoAxisColor(this._stageAxisFrame[o][0]),e=t(0),i=t(1),s=t(2);return{X:e,Y:i,Z:s,XY:s,YZ:e,XZ:i}}_readLookStage(t){this._applyGizmoAxisFrame(),this._buildOrientationGizmo()}setStageFunction(t,e){this._stageBoxSelect=e.boxSelect;const i=e.transformHandles;(i.scale!==this._transformHandles.scale||i.viewRotate!==this._transformHandles.viewRotate||i.freeMove!==this._transformHandles.freeMove)&&(this._transformHandles={scale:i.scale,viewRotate:i.viewRotate,freeMove:i.freeMove},this._syncCombinedGizmoHalves(),st());const s=t.upAxis==="z"?t.handedness==="left"?Fo:jo:yi;s!==this._stageAxisFrame&&(this._stageAxisFrame=s,this._applyGizmoAxisFrame(),this._buildOrientationGizmo(),this._rebuildAxisLines())}_applyGizmoAxisFrame(){if(this.transformControls===void 0)return;const t=this._stageAxisFrame.map(([,r])=>r),e=[0,1,2].map(r=>t[r]===this._appliedAxisSigns[r]?1:-1),i=e.some(r=>r===-1),s=this._axisColorMap(),o={X:this._gizmoAxisColor(0),Y:this._gizmoAxisColor(1),Z:this._gizmoAxisColor(2),XY:this._gizmoAxisColor(2),YZ:this._gizmoAxisColor(0),XZ:this._gizmoAxisColor(1)},n=(r,l,a,h,d)=>{r&&r.traverse(f=>{const u=f;a&&u.geometry&&u.geometry.scale(e[0],e[1],e[2]),h&&u.material&&!Array.isArray(u.material)&&!u.userData.volterOwnMaterial&&(u.material=u.material.clone(),u.userData.volterOwnMaterial=!0);const m=u.material;if(!m||Array.isArray(m))return;a&&(m.side=Qt);const _=l[f.name];if(_&&m.color){if(d){const g=m.userData.volterBaseOpacity??=m.opacity;m.opacity=g*(this._gizmoLook.opacity??1),m._opacity=void 0}m.color.copy(_),m._color=void 0}})};for(const r of this._allGizmos()){const l=r.getHelper().children.find(a=>a.isTransformControlsGizmo);if(l)for(const a of["gizmo","picker","helper"]){const h=a==="gizmo";n(l[a]?.translate,s,i,!1,h),n(l[a]?.rotate,s,!1,!1,h),n(l[a]?.scale,o,!1,!0,h)}}i&&(this._appliedAxisSigns=t)}_gizmoAxisColor(t){const e=this._gizmoLook.axes;return e===null?new C().setRGB(...fe[t],it):new C(e[t])}_installGizmoHighlight(t){const e=t.getHelper().children.find(s=>s.isTransformControlsGizmo);if(!e)return;const i=e.updateMatrixWorld.bind(e);e.updateMatrixWorld=s=>{i(s);const o=this._store.shell.transformMode==="combined",n=e.mode==="translate"&&!this._transformHandles.freeMove?"XYZ":o&&e.mode==="rotate"&&!this._transformHandles.viewRotate?"E":null;if(n!==null)for(const h of[e.gizmo,e.picker])for(const d of h[e.mode]?.children??[])d.name===n&&(d.visible=!1);const r=this._gizmoLook,l=e.axis;if(!e.enabled||!l||r.hover===null&&r.axes===null&&r.highlightSaturation===null&&r.highlightValue===null)return;const a=e.dragging?r.drag??r.hover:r.hover;for(const h of e.gizmo[e.mode]?.children??[]){if(h.name!==l&&!l.split("").some(g=>h.name===g))continue;const d=h.material;if(!d||Array.isArray(d)||!d.color)continue;if(a!==null){d.color.setHex(a);continue}const f=(d._color??d.color).clone().convertLinearToSRGB(),u=Go(f),m=u.s*(r.highlightSaturation??1),_=r.highlightValue??u.v;Bo(u.h,m,_,d.color).convertSRGBToLinear()}}}_applyGizmoArrows(){if(this.transformControls===void 0)return;this._applyGizmoRings();const t={length:this._gizmoLook.arrowLength??1.2,head:this._gizmoLook.arrowHead??1},e=this._appliedArrow;if(t.length===e.length&&t.head===e.head)return;const i=.5,s=.1,o=f=>i*f.length-s*f.head;if(o(t)<=.05)return;const n=o(t)/o(e),r=t.head/e.head,l=t.length/e.length,a=this.transformControls.getHelper().children.find(f=>f.isTransformControlsGizmo);if(!a)return;const h={X:0,Y:1,Z:2},d=(f,u)=>[0,1,2].map(m=>m===f?u:1);for(const f of a.gizmo.translate?.children??[]){const u=h[f.name],m=f.geometry;if(u===void 0||!m)continue;if(!(m.parameters?.radiusTop===0)){m.scale(...d(u,n));continue}m.computeBoundingBox();const v=m.boundingBox,w=[v.min.x,v.min.y,v.min.z][u],b=[v.max.x,v.max.y,v.max.z][u],S=Math.abs(w)<Math.abs(b)?w:b,z=[0,0,0];z[u]=-S,m.translate(...z),m.scale(r,r,r),z[u]=S*n,m.translate(...z)}for(const f of a.picker.translate?.children??[]){const u=h[f.name],m=f.geometry;u===void 0||!m||m.scale(...d(u,l))}this._appliedArrow=t}_applyGizmoRings(){const t=this._gizmoLook.ringWidth??1;if(t<=0||t===this._appliedRingWidth)return;const e=t/this._appliedRingWidth,i=new p,s=new p,o=new p;for(const n of[this.transformControls,this._auxRotateControls]){const r=n.getHelper().children.find(l=>l.isTransformControlsGizmo);for(const l of r?.gizmo.rotate?.children??[]){const a=l.geometry;if(!["X","Y","Z"].includes(l.name)||!a||a.type!=="TorusGeometry")continue;const h=a.parameters.radius;a.computeBoundingBox(),a.boundingBox.getSize(o);const d=o.x<=o.y&&o.x<=o.z?0:o.y<=o.z?1:2,f=a.getAttribute("position");for(let u=0;u<f.count;u++)i.fromBufferAttribute(f,u),s.copy(i).setComponent(d,0),s.lengthSq()!==0&&(s.setLength(h),i.sub(s).multiplyScalar(e).add(s),f.setXYZ(u,i.x,i.y,i.z));f.needsUpdate=!0,a.computeBoundingSphere()}}this._appliedRingWidth=t}_patchGizmo(t){const e=this._axisColorMap(),i={XY:[-.075,-.075,0],YZ:[0,-.075,-.075],XZ:[-.075,0,-.075]};t.traverse(s=>{const o=s,n=e[s.name];if(n&&o.material){const l=o.material;l.color&&l.color.copy(n)}const r=i[s.name];r&&o.geometry&&o.geometry.translate(r[0],r[1],r[2])})}_patchCombinedScaleGizmo(t){const i=t.children.find(r=>r.isTransformControlsGizmo);if(!i)return;const s={X:new p(1,0,0),Y:new p(0,1,0),Z:new p(0,0,1)},o=.54+.55,n=.3;for(const[r,l]of[[i.gizmo.scale,!1],[i.picker.scale,!0]])if(r)for(const a of[...r.children]){const h=a,d=s[a.name],f=d!==void 0&&h.geometry?.type==="CylinderGeometry"&&h.geometry.parameters.radiusTop<.05;if(d===void 0||f){r.remove(a);continue}h.geometry.computeBoundingBox();const u=h.geometry.boundingBox;if(!u)continue;const m=Math.sign(u.getCenter(new p).dot(d))||1;if(l){const g=d.clone().multiplyScalar(m*o);h.geometry.dispose(),h.geometry=new I(n,n,n).translate(g.x,g.y,g.z);continue}const _=d.clone().multiplyScalar(m*.55);h.geometry.translate(_.x,_.y,_.z)}}_projectToScreen(t){const e=new p;t.getWorldPosition(e),e.project(this._screenCamera);const i=this._canvas.getBoundingClientRect();return new et((e.x+1)/2*i.width+i.left,(-e.y+1)/2*i.height+i.top)}static _FLY_KEYS=new Set(["w","a","s","d","q","e"]);_enterFlyMode(){this._flyActive||this._cameraViewMode!=="view"&&(this._flyActive=!0,this._snapAnimating=!1,this.orbitControls.enabled=!1,this._flyEuler.setFromQuaternion(this.renderCamera.quaternion,"YXZ"),this.orbitControls.dispatchEvent({type:"start"}),this._canvas.requestPointerLock?.())}_exitFlyMode(){if(!this._flyActive)return;this._flyActive=!1,this._flyKeys.clear(),this.orbitControls.enabled=this._cameraViewMode!=="view",document.exitPointerLock();const t=this.renderCamera,e=new p(0,0,-1).applyQuaternion(t.quaternion),i=t.position.distanceTo(this.orbitControls.target);this.orbitControls.target.copy(t.position).add(e.multiplyScalar(Math.max(i,5))),this.orbitControls.dispatchEvent({type:"end"})}_updateFlyCamera(t){if(!this._flyActive||this._flyKeys.size===0)return;const e=this.renderCamera,i=this._flySpeed*(this._flyKeys.has("shift")?3:1),s=new p(0,0,-1).applyQuaternion(e.quaternion),o=new p(1,0,0).applyQuaternion(e.quaternion),n=new p;this._flyKeys.has("w")&&n.add(s),this._flyKeys.has("s")&&n.sub(s),this._flyKeys.has("d")&&n.add(o),this._flyKeys.has("a")&&n.sub(o),this._flyKeys.has("e")&&(n.y+=1),this._flyKeys.has("q")&&(n.y-=1),n.lengthSq()>0&&(n.normalize().multiplyScalar(i*t),e.position.add(n),this.orbitControls.dispatchEvent({type:"change"}))}_onFlyKeyDown=t=>{if(!this._rightMouseDown||t.target instanceof HTMLInputElement||t.target instanceof HTMLTextAreaElement||t.target instanceof HTMLSelectElement)return;const e=t.key.toLowerCase();if(e==="shift"){this._flyKeys.add("shift");return}Li._FLY_KEYS.has(e)&&(t.preventDefault(),t.stopPropagation(),this._flyKeys.add(e),this._flyActive||this._enterFlyMode())};_onFlyKeyUp=t=>{const e=t.key.toLowerCase();if(e==="shift"){this._flyKeys.delete("shift");return}this._flyKeys.delete(e)};_onFlyPointerDown=t=>{t.button===2&&(this._rightMouseDown=!0)};_onFlyPointerUp=t=>{t.button===2&&(this._rightMouseDown=!1,this._flyActive&&this._exitFlyMode())};_onFlyPointerMove=t=>{if(!this._flyActive)return;const e=.002;this._flyEuler.y-=t.movementX*e,this._flyEuler.x-=t.movementY*e,this._flyEuler.x=Math.max(-Math.PI/2+.01,Math.min(Math.PI/2-.01,this._flyEuler.x)),this.renderCamera.quaternion.setFromEuler(this._flyEuler),this.orbitControls.dispatchEvent({type:"change"})};_onTrackpadWheel=t=>{if(this._flyActive||!this.orbitControls.enabled||t.ctrlKey||Math.abs(t.deltaX)<.5&&!t.shiftKey)return;t.preventDefault(),t.stopImmediatePropagation();const e=this._interactionElement.clientHeight||1,i=this.camera.position.distanceTo(this.orbitControls.target),s=2*Math.tan(this.camera.fov/2*Math.PI/180)*i/e,o=t.deltaMode===1?16:1,n=h=>Math.sign(h)*Math.min(Math.abs(h*o),30),r=new p().setFromMatrixColumn(this.camera.matrix,0),l=new p().setFromMatrixColumn(this.camera.matrix,1),a=r.multiplyScalar(n(t.deltaX)*s).add(l.multiplyScalar(-n(t.deltaY)*s));this.camera.position.add(a),this.orbitControls.target.add(a),this.orbitControls.update()};_onFlyWheel=t=>{if(!this._flyActive)return;t.preventDefault();const e=t.deltaY>0?.85:1.18;this._flySpeed=Math.max(.5,Math.min(100,this._flySpeed*e))};_onPointerDown=t=>{if(this._pointerDownPos.set(t.clientX,t.clientY),this._pointerDownButton=t.button,this._marqueeActive=!1,this._pointerSessionActive=!0,this._constraintControlPointerSession=!1,t.button===0&&!t.altKey){if(this._selectConstraintControlAt(t))return;const e=this._raycastSpatialHandle(t),i=e?hi(e):null;if(e&&i?.handle.writable){t.stopPropagation(),this._activeSpatialHandle=i,this._spatialHandleDragPoint.copy(e.position),this._orbitEnabledBeforeHandleDrag=this.orbitControls.enabled,this._transformEnabledBeforeHandleDrag=this.transformControls.enabled,this.orbitControls.enabled=!1;for(const n of this._allGizmos())n.enabled=!1;const s=this._screenCamera.getWorldDirection(new p);this._spatialHandleDragPlane.setFromNormalAndCoplanarPoint(s,e.position),this._spatialHandleDragOffset.set(0,0,0);const o=this._spatialHandleWorldPoint(t);o&&this._spatialHandleDragOffset.subVectors(e.position,o),this._canvas.style.cursor="grabbing"}}};_onPointerMove=t=>{if(this._updateEditorHandleInteraction(t)||(this._updateSpatialHandleHover(t),!this._pointerSessionActive)||!(t.buttons&1)||this._pointerDownButton!==0||this._anyGizmoDragging()||this._altDragOrbit)return;const e=t.clientX-this._pointerDownPos.x,i=t.clientY-this._pointerDownPos.y;if(!this._marqueeActive&&Math.sqrt(e*e+i*i)>5){if(this._isOverViewCube(this._pointerDownPos.x,this._pointerDownPos.y))return;this._marqueeActive=!0,this.orbitControls.enabled=!1,this._marqueeDiv||(this._marqueeDiv=document.createElement("div"),Object.assign(this._marqueeDiv.style,{position:"fixed",border:`1px solid ${Ot.accent.default}`,background:Ot.accent.muted,pointerEvents:"none",zIndex:We.sticky}),(document.getElementById("editor-chrome-root")??document.body).appendChild(this._marqueeDiv))}if(this._marqueeActive&&this._marqueeDiv){const s=Math.min(this._pointerDownPos.x,t.clientX),o=Math.min(this._pointerDownPos.y,t.clientY),n=Math.abs(t.clientX-this._pointerDownPos.x),r=Math.abs(t.clientY-this._pointerDownPos.y);Object.assign(this._marqueeDiv.style,{left:`${s}px`,top:`${o}px`,width:`${n}px`,height:`${r}px`,display:"block"})}};_onPointerUp=t=>{if(!this._pointerSessionActive)return;if(this._pointerSessionActive=!1,this._activeSpatialHandle){this._finishSpatialHandleDrag(!0);return}if(this._constraintControlPointerSession){this._constraintControlPointerSession=!1;return}if(this._marqueeActive){this._marqueeActive=!1,this.orbitControls.enabled=!0,this._marqueeDiv&&(this._marqueeDiv.style.display="none");const n=Math.min(this._pointerDownPos.x,t.clientX),r=Math.max(this._pointerDownPos.x,t.clientX),l=Math.min(this._pointerDownPos.y,t.clientY),a=Math.max(this._pointerDownPos.y,t.clientY),h=[],d=new p,f=new xt;for(const[u,m]of this._objectMap){if(!m.visible||m.isCamera===!0)continue;if(f.setFromObject(m),f.isEmpty()){const M=this._projectToScreen(m);M.x>=n&&M.x<=r&&M.y>=l&&M.y<=a&&h.push(u);continue}const _=this._stageBoxSelect==="touch",g=this._canvas.getBoundingClientRect(),v=this._screenCamera;let w=!0,b=Number.POSITIVE_INFINITY,S=Number.NEGATIVE_INFINITY,z=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;for(let M=0;M<8;M++){if(d.set(M&1?f.max.x:f.min.x,M&2?f.max.y:f.min.y,M&4?f.max.z:f.min.z),d.project(v),d.z<-1||d.z>1){if(w=!1,!_)break;continue}const E=g.left+(d.x+1)*g.width/2,G=g.top+(1-d.y)*g.height/2;(E<n||E>r||G<l||G>a)&&(w=!1),b=Math.min(b,E),S=Math.max(S,E),z=Math.min(z,G),x=Math.max(x,G)}const A=b<=S&&S>=n&&b<=r&&x>=l&&z<=a;(_?A:w)&&h.push(u)}if(t.shiftKey)for(const u of h)this._store.shell.addToSelection(u);else Lt(this._authoring(),h);return}if(t.button!==0)return;const e=t.clientX-this._pointerDownPos.x,i=t.clientY-this._pointerDownPos.y;if(Math.sqrt(e*e+i*i)>5||this._anyGizmoDragging()||this._threejsToolContextActive&&this._handleViewCubeClick(t))return;const s=t.shiftKey&&(t.metaKey||t.ctrlKey),o=Bi(this._scopeAuthoring(),()=>this._pickAt(t.clientX,t.clientY,s?"deep":"normal"));s?Lt(this._authoring(),o?[o]:[]):t.shiftKey&&o?this._store.shell.toggleSelection(o):(t.metaKey||t.ctrlKey)&&o?this._store.shell.toggleSelection(o):Lt(this._authoring(),o?[o]:[])};_scopeAuthoring(){return this._standaloneAuthoring?this._authoring():kt().panelAuthoring(this._store.shell)}_pickAt(t,e,i){return this._pick?this._pick(t,e):kt().pick(this._store.shell,t,e,i)}_onDoubleClick=t=>{if(t.button!==0||this._anyGizmoDragging()||this._marqueeActive||this._threejsToolContextActive&&this._isOverViewCube(t.clientX,t.clientY))return;const e=this._pickAt(t.clientX,t.clientY,"normal");e&&Vi(this._scopeAuthoring(),e,()=>this._pickAt(t.clientX,t.clientY,"normal"))};_raycastGroundPlane(t){const e=this._canvas.getBoundingClientRect(),i=new et((t.clientX-e.left)/e.width*2-1,-((t.clientY-e.top)/e.height)*2+1);this.raycaster.setFromCamera(i,this._screenCamera);const s=Xe("three");this._groundPlane.set(s.up==="z"?Oo:Io,-s.groundHeight);const o=new p;return this.raycaster.ray.intersectPlane(this._groundPlane,o)}_showDropOverlay(){if(this._dropOverlay)return;const t=document.createElement("div");Object.assign(t.style,{position:"fixed",inset:"0",pointerEvents:"none",border:`2px dashed ${Ot.accent.default}`,background:Ot.accent.muted,zIndex:We.base}),(document.getElementById("editor-chrome-root")??document.body).appendChild(t),this._dropOverlay=t}_hideDropOverlay(){this._dropOverlay&&(this._dropOverlay.remove(),this._dropOverlay=null)}_onDragOver=t=>{t.dataTransfer?.types.includes("application/x-editor-asset")&&(t.preventDefault(),t.dataTransfer.dropEffect="copy",this._showDropOverlay())};_onDragLeave=t=>{this._hideDropOverlay()};_onDrop=t=>{this._hideDropOverlay();const e=t.dataTransfer?.getData("application/x-editor-asset");if(!e)return;t.preventDefault();let i;try{i=JSON.parse(e)}catch{return}const s=Xe("three"),o=this._raycastGroundPlane(t),n=d=>Math.round(d*100)/100,r=s.up==="z"?[n(o?.x??0),n(o?.y??0),s.groundHeight]:[n(o?.x??0),s.groundHeight,n(o?.z??0)],l=this._authoring(),a=l.assetDrop,h=i.component??{kind:"file",name:i.name};if(!a){It.warn(`Dropped “${i.name}” was not placed: this document does not accept dropped assets.`,"editor");return}if(i.online){const d=i.online,f=this._onlineAssetResolver;if(!f){It.warn(`Dropped “${i.name}” was not placed: this viewport has no online-asset resolver installed.`,"editor");return}V(`Downloading ${d.name} from the library…`),f(d).then(u=>{u?(V(`${d.name} downloaded — placing it.`),Ne(l,"",u,{position:r})):V(`Could not download ${d.name} — see the Console.`)}).catch(()=>{V(`Could not download ${d.name} — see the Console.`),It.error(`Could not download ${d.name}.`,"asset")});return}Ne(l,"",i.path,{position:r,item:h})}}const In=c=>!Ui(c);let Yt={projection:"perspective"};const He=new Set;function On(){return Yt}function kn(c){return He.add(c),()=>He.delete(c)}function Dn(c){if(Yt.projection!==c){Yt={...Yt,projection:c};for(const t of He)t()}}export{Tn as C,Li as E,kn as a,An as b,Hn as c,En as d,zn as e,Ln as f,In as i,ce as p,Pn as r,Dn as s,On as t};