@volter/game-editor 0.5.74 → 0.5.76
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.
- package/BUNDLED_NOTICES +22 -22
- package/catalog/entries/blender.json +2 -2
- package/catalog/entries/music.json +2 -2
- package/dist/.vite/manifest.json +2125 -2125
- package/dist/assets/{AssetBudgetPanel-CsScls8k.js → AssetBudgetPanel-BjFkm62b.js} +3 -3
- package/dist/assets/{AudioViewer-C0KaLINZ.js → AudioViewer-Biiq4G_i.js} +1 -1
- package/dist/assets/{CanvasBoardDocument-BH0U2FK3.js → CanvasBoardDocument-8cse1rhp.js} +1 -1
- package/dist/assets/{CanvasSceneViewport-VALiHtss.js → CanvasSceneViewport-Dq6iUvIm.js} +1 -1
- package/dist/assets/{ColorInput-BSiPDtkN.js → ColorInput-Bp3RDfPM.js} +1 -1
- package/dist/assets/{EntityModelDocument-DBZeMkXS.js → EntityModelDocument-dwAxknxP.js} +1 -1
- package/dist/assets/{EnvironmentAssetDocument-D3gH_Q1o.js → EnvironmentAssetDocument-C0m_nD7y.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-BZENnCEM.js → GameplaySessionTimeline-i55Cf0Er.js} +1 -1
- package/dist/assets/{ImageViewer-Z077ZBuk.js → ImageViewer-D-hxhDh9.js} +1 -1
- package/dist/assets/InspectorObjectPreview-D7sPBP8Z.js +1 -0
- package/dist/assets/{JsonAssetDocument-DjtYdDni.js → JsonAssetDocument-Dp1d3BJo.js} +1 -1
- package/dist/assets/{LiveModuleDocument-BQmh8NEJ.js → LiveModuleDocument-BeXLUEGs.js} +1 -1
- package/dist/assets/{LutAssetDocument-B3e7mHdw.js → LutAssetDocument-PyDKly_a.js} +1 -1
- package/dist/assets/{ModelAssetDocument-BVIUx7AO.js → ModelAssetDocument-DnuWFSZG.js} +1 -1
- package/dist/assets/{NonThreeAuthoringBootstrap-DAjTxCUk.js → NonThreeAuthoringBootstrap-BNKBCS1x.js} +1 -1
- package/dist/assets/{Object3DDocumentToolbar-CMFUQpit.js → Object3DDocumentToolbar-nKqgkz_2.js} +1 -1
- package/dist/assets/Object3DDocumentViewport-CkpRseZm.js +2 -0
- package/dist/assets/{Object3DPreview-BeQ3dNgr.js → Object3DPreview-CJ3chhw7.js} +1 -1
- package/dist/assets/{OnlineAssetDetail-DouLFaxd.js → OnlineAssetDetail-BHQPuBUu.js} +1 -1
- package/dist/assets/{PlayBar-DlSAPez7.js → PlayBar-B5de5J5O.js} +1 -1
- package/dist/assets/{QuarksAssetDocument-Ci_5RdOh.js → QuarksAssetDocument-BF4Hv9rw.js} +1 -1
- package/dist/assets/{ReactCanvasControls-pLDTjk7f.js → ReactCanvasControls-RN0LHjKr.js} +1 -1
- package/dist/assets/{RootSelectionOverlay-C2jDNhWx.js → RootSelectionOverlay-C5bcCIxc.js} +1 -1
- package/dist/assets/{ShaderAssetDocument-D6DXBZAt.js → ShaderAssetDocument-CcKYQmv3.js} +1 -1
- package/dist/assets/{ShadowEditor-BUdib-46.js → ShadowEditor-Ce6Kl6kF.js} +1 -1
- package/dist/assets/{SourceAssetViewer-FrL5IQpU.js → SourceAssetViewer-Bs8cdFyl.js} +1 -1
- package/dist/assets/{StageHost-DiXV3rVP.js → StageHost-CV5bxQKM.js} +2 -2
- package/dist/assets/{StoryPreviewMount-uYhyt63h.js → StoryPreviewMount-DDa8sXQF.js} +1 -1
- package/dist/assets/{ThreeBoardDocument-BvnPu_Kt.js → ThreeBoardDocument-t_tDS-j-.js} +2 -2
- package/dist/assets/{ThreeIsolationSceneContent-C53huaHh.js → ThreeIsolationSceneContent-BVDqkEYw.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-wGS0d8hq.js → ToolObject3DPreview-BssDJtC2.js} +1 -1
- package/dist/assets/{Toolbar-wCXICaZA.js → Toolbar-D9hmQICZ.js} +1 -1
- package/dist/assets/{TransientHint-BRrfIPg5.js → TransientHint-DQ2Gxaf4.js} +1 -1
- package/dist/assets/{VideoViewer-CtoaUhoP.js → VideoViewer-DrfwGQxe.js} +1 -1
- package/dist/assets/{ViewportShadingMenu-DPFcOOlk.js → ViewportShadingMenu-C4OjRF1K.js} +1 -1
- package/dist/assets/{active-ingest-DCi6B_Mk.js → active-ingest-mDJkad7M.js} +2 -2
- package/dist/assets/{animation-clock-DnR5BQwQ.js → animation-clock-DwsrmSMb.js} +1 -1
- package/dist/assets/{animation-mixers.service-Bjfda5Bu.js → animation-mixers.service-D21IugKS.js} +1 -1
- package/dist/assets/{animation-timeline.utility-9mLK9gMs.js → animation-timeline.utility-gdrRRmQH.js} +1 -1
- package/dist/assets/{asset-budget-asset.menu-cZSz-LwL.js → asset-budget-asset.menu-DIkyrxiU.js} +1 -1
- package/dist/assets/{asset-budget.action-CGVMjOi0.js → asset-budget.action-B6VSstet.js} +1 -1
- package/dist/assets/{asset-budget.document-D9L-2haO.js → asset-budget.document-DK6jg3Xw.js} +1 -1
- package/dist/assets/{asset-budget.menu-CUpLs9iu.js → asset-budget.menu-W4DmiUOF.js} +1 -1
- package/dist/assets/{asset-editor-persistence-BVmO7_Y0.js → asset-editor-persistence-0u6_ZcxG.js} +1 -1
- package/dist/assets/{asset-loaders-PVkGGJJI.js → asset-loaders-BV19C60O.js} +1 -1
- package/dist/assets/{asset-preview-D9R6R903.js → asset-preview-C0yI3iVN.js} +1 -1
- package/dist/assets/{audio-unlock.service-D-GbYty7.js → audio-unlock.service-D5vphmzG.js} +1 -1
- package/dist/assets/{audio.utility-E-qzBR6D.js → audio.utility-xFa5jESm.js} +1 -1
- package/dist/assets/autoplay.service-7kddHqyX.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-C3VOiksD.js → babylon-authoring-adapter-BR-XIVWA.js} +1 -1
- package/dist/assets/{binding-resolver-CqJs8FS9.js → binding-resolver-DYyowJkn.js} +2 -2
- package/dist/assets/{blender-node-editor.document-CPNUVCnn.js → blender-node-editor.document-CHrcqrAP.js} +1 -1
- package/dist/assets/{blender-properties-tab-CiHoYK6t.js → blender-properties-tab-HcIWs40_.js} +1 -1
- package/dist/assets/{blender-runtime-host-CoT0G0_R.js → blender-runtime-host-D-b3myuC.js} +1 -1
- package/dist/assets/{blender-runtime-skin-CGNNV3xn.js → blender-runtime-skin-3ceIx59C.js} +1 -1
- package/dist/assets/{blender-runtime.document-CJEk-94B.js → blender-runtime.document-hEe-HzEh.js} +1 -1
- package/dist/assets/{blender-timeline.document-DP_MuhM4.js → blender-timeline.document-BYW3OSne.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-Cggq1dTC.js → blender-uv-editor.document-BoY-LnsG.js} +1 -1
- package/dist/assets/{blender-version.status-C_G5uv7j.js → blender-version.status-mhySAeON.js} +1 -1
- package/dist/assets/{blender.command-CzTbMFTm.js → blender.command-F4H2z-9A.js} +1 -1
- package/dist/assets/{board-guides-CFM0Dzzw.js → board-guides-DbRT0CEe.js} +1 -1
- package/dist/assets/{bridge.command-DWZKDU4z.js → bridge.command-DN82OxFy.js} +3 -3
- package/dist/assets/{browserAll-Bt1yuPoY.js → browserAll-Cqos0jz8.js} +1 -1
- package/dist/assets/{build-player.document-CSLA4B-I.js → build-player.document-Dw0pIiG7.js} +1 -1
- package/dist/assets/{build-profiles.document-vZR8N8Zc.js → build-profiles.document-BCHdqkro.js} +1 -1
- package/dist/assets/{build-progress.status-mGqJ9OWi.js → build-progress.status-C2MxELWF.js} +1 -1
- package/dist/assets/{build-session-BEJL-4uT.js → build-session-Dz6L1yYX.js} +1 -1
- package/dist/assets/{build.action-Co8P_po0.js → build.action-BeAwlnc4.js} +1 -1
- package/dist/assets/{build.command-Cqtmjck3.js → build.command-Ber5hdxC.js} +1 -1
- package/dist/assets/{build.header-PNcqwkk1.js → build.header-Db3MkFbi.js} +1 -1
- package/dist/assets/{build.menu-BNxEplbC.js → build.menu-gmrap1c5.js} +1 -1
- package/dist/assets/{build.service-CkuUEkU3.js → build.service-yMR_xJue.js} +1 -1
- package/dist/assets/{camera-KZ9xGSi8.js → camera-D8mpcjZ8.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-_IdxJC2q.js → camera-runtime.inspector-9VUNHoi7.js} +1 -1
- package/dist/assets/{canvas-design-mount-BQJAuFty.js → canvas-design-mount-D87Wp0ZF.js} +3 -3
- package/dist/assets/{canvas-entry-runtime-C4V45HMi.js → canvas-entry-runtime-CagodwVN.js} +2 -2
- package/dist/assets/{canvas-preview-frames-BwQjAyYt.js → canvas-preview-frames-BcRr18uI.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-Dj4pAbC9.js → canvas-story-capture.service-1_rOvKS7.js} +2 -2
- package/dist/assets/{capability-coverage-4xMPa566.js → capability-coverage-DgC2RhRJ.js} +1 -1
- package/dist/assets/{collaboration-presence-CiEcKLpo.js → collaboration-presence-DBHNcl_z.js} +1 -1
- package/dist/assets/{collider-DVAc7Hmk.js → collider-DZiCBf-9.js} +1 -1
- package/dist/assets/{component-board.service-CJDzogke.js → component-board.service-Bgh7n9K7.js} +2 -2
- package/dist/assets/{component-board.service-DK6MwEZa.js → component-board.service-BhoXZiYw.js} +2 -2
- package/dist/assets/{component-board.service-DLoxCk73.js → component-board.service-DjeaGp6q.js} +2 -2
- package/dist/assets/{component-contracts.service-BOe_0crY.js → component-contracts.service-gR_E-0BI.js} +1 -1
- package/dist/assets/{component-instance-root-CgmR0Q36.js → component-instance-root-UahhIVd1.js} +1 -1
- package/dist/assets/{component-verbs.command-BOAaWue3.js → component-verbs.command-DKhuFU9T.js} +1 -1
- package/dist/assets/{component-verbs.service-DAwiNhNc.js → component-verbs.service-dX5b-jB0.js} +1 -1
- package/dist/assets/{config-B64a1eb5.js → config-BJ-W1piM.js} +2 -2
- package/dist/assets/{configurations-BQSxxjbY.js → configurations-vOazo-km.js} +1 -1
- package/dist/assets/{connection.status-C4CA3tnt.js → connection.status-OSyv5xrS.js} +1 -1
- package/dist/assets/{constraints.inspector-CWxVm4K9.js → constraints.inspector-BFv1pf4i.js} +1 -1
- package/dist/assets/{content-bounds-DUlT_Bs_.js → content-bounds-CMk1llDT.js} +1 -1
- package/dist/assets/{contract-system-adapters-CEuzOynM.js → contract-system-adapters-DQkiwEeo.js} +1 -1
- package/dist/assets/{coverage.service-HqZrm5L7.js → coverage.service-BlQSjwvW.js} +1 -1
- package/dist/assets/{create-runtime-Cr_aiT6l.js → create-runtime-DginHEVG.js} +1 -1
- package/dist/assets/{curve-KeLD-yBc.js → curve-BRqZ3pkT.js} +1 -1
- package/dist/assets/{data-asset-CACLoAiF.js → data-asset-BHl-WMH5.js} +1 -1
- package/dist/assets/{data-ref-DHnlpkfW.js → data-ref-Deg6U-uB.js} +1 -1
- package/dist/assets/{debug-bridge-DAVwvCKX.js → debug-bridge-B-RNnYQh.js} +1 -1
- package/dist/assets/{debug-registry-B6pk-yrQ.js → debug-registry-Bt57rVDa.js} +1 -1
- package/dist/assets/{deferred-ingest-play-GNKwMor5.js → deferred-ingest-play-BTXd4idB.js} +2 -2
- package/dist/assets/{design-time-canvas-mount-BDyTbqGy.js → design-time-canvas-mount-B8zgbaxT.js} +2 -2
- package/dist/assets/{design-time-layers-DWdxyEke.js → design-time-layers-CS6QlGFz.js} +1 -1
- package/dist/assets/{design-time-mount.service-DH5WMBig.js → design-time-mount.service-BQnYPfl5.js} +2 -2
- package/dist/assets/{design-time-mount.service-CwYVzkTW.js → design-time-mount.service-atwTQBje.js} +2 -2
- package/dist/assets/{design-time-react-mount-D_Njd_-Z.js → design-time-react-mount-Cx9MByrM.js} +1 -1
- package/dist/assets/{document-preview-three-l_JD_wOQ.js → document-preview-three-C7iFOvGJ.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-NjpTX82H.js → dom-authoring-adapter-Bd-tH6WO.js} +1 -1
- package/dist/assets/{draco3d-uD30kmRz.js → draco3d-DOXqkx8U.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-Bc1dJyur.js → edit-mode-audio.service-Cbzqj9Jy.js} +1 -1
- package/dist/assets/{edit-mode-authoring-D4gF7ToY.js → edit-mode-authoring-DgXUzfvm.js} +1 -1
- package/dist/assets/{edit-mode-networking.service-CSJCwcxW.js → edit-mode-networking.service-BSPRDhil.js} +1 -1
- package/dist/assets/{editor-api-oWEXcLGi.js → editor-api-CqotsaJD.js} +1 -1
- package/dist/assets/{editor-layers-BGId-Uru.js → editor-layers-hAcvLPMn.js} +1 -1
- package/dist/assets/{editor-shell-store-DhM6KcjO.js → editor-shell-store-DkNOWUFp.js} +1 -1
- package/dist/assets/{entity-object-B77fPnTJ.js → entity-object-DR7d2cxz.js} +1 -1
- package/dist/assets/{extend-12Z0hbsT.js → extend-D86gXz81.js} +1 -1
- package/dist/assets/{fork-menu-BKv-e4vf.js → fork-menu-C3I645ug.js} +1 -1
- package/dist/assets/{frame-debugger-store-QZzA9Bp6.js → frame-debugger-store-VMdNVIQ5.js} +1 -1
- package/dist/assets/{game-contract-seams-Bk8NMwX4.js → game-contract-seams-DiQ1tlKC.js} +1 -1
- package/dist/assets/{game-css-scope-transform-Qi5A4od1.js → game-css-scope-transform-CG13_2aB.js} +1 -1
- package/dist/assets/{game-document.service-DwyngEP1.js → game-document.service-BRVDb71D.js} +1 -1
- package/dist/assets/{game-eval.command-D3GcSNpZ.js → game-eval.command-C2MbVIbA.js} +1 -1
- package/dist/assets/{game-module-access-DcIMKmZ-.js → game-module-access-DtJAG_Jd.js} +1 -1
- package/dist/assets/{game-network-BRvp9Eya.js → game-network-BkkoOr_U.js} +3 -3
- package/dist/assets/{gameplay-export-DjEgXlLD.js → gameplay-export-B1J_8CZs.js} +1 -1
- package/dist/assets/{gameplay-replay-DIU5Uql2.js → gameplay-replay-C7eBHV93.js} +1 -1
- package/dist/assets/{gameplay.command-Ckhbu_et.js → gameplay.command-tD6AQg5i.js} +1 -1
- package/dist/assets/{generation-jobs-BDAepEao.js → generation-jobs-Cuwdi3KY.js} +1 -1
- package/dist/assets/{generation.service-BZIxaVg0.js → generation.service-MiJpkT-M.js} +1 -1
- package/dist/assets/{generations-fYwLNwQr.js → generations-BO6t7knA.js} +1 -1
- package/dist/assets/{generations.status-DpWkrjr7.js → generations.status-Bz5FxF5L.js} +1 -1
- package/dist/assets/{hierarchy-marks-BCrDKK5y.js → hierarchy-marks--TolmVW5.js} +1 -1
- package/dist/assets/{hosted-asset-materialization-D_yDzOYA.js → hosted-asset-materialization-BlIle4kF.js} +1 -1
- package/dist/assets/{index-B0ciEDFT.js → index-B778_TTn.js} +2 -2
- package/dist/assets/{index-D7q9yQaD.js → index-BFKwWsNe.js} +1 -1
- package/dist/assets/{index-CaD5TSVW.js → index-BjdG8RNO.js} +1 -1
- package/dist/assets/{index-GlGBb8bs.js → index-C1ihMnWo.js} +1 -1
- package/dist/assets/{index-TYz8swQz.js → index-CQ6JiiuQ.js} +1 -1
- package/dist/assets/{index-Bwl4ql-8.js → index-CRHTCgov.js} +1 -1
- package/dist/assets/{index-Bn8WGRJh.js → index-CWR8N1pt.js} +7 -7
- package/dist/assets/{index-CLC0lyS8.js → index-vCEuerlf.js} +1 -1
- package/dist/assets/{index-DjHJiUGa.js → index-wmo5yZwB.js} +1 -1
- package/dist/assets/{inference-diagnostics-BPtSODNJ.js → inference-diagnostics-GP--Nnde.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-CYTzGsEC.js → ingest-boot-viewport-DaCKZ5dN.js} +1 -1
- package/dist/assets/{ingest-siblings-0jNvfYjJ.js → ingest-siblings-ZeIgNmQW.js} +1 -1
- package/dist/assets/{ingest-source-persistence-C-gTDfvH.js → ingest-source-persistence-DOhZMV-e.js} +1 -1
- package/dist/assets/{ingest.service-PL_jFRLE.js → ingest.service-DsHy_aP9.js} +1 -1
- package/dist/assets/{inspect-C1HaQduW.js → inspect-DYloFXZZ.js} +1 -1
- package/dist/assets/instances.command-NnpPzefK.js +1 -0
- package/dist/assets/{json-history-resource-DiN_PLbn.js → json-history-resource-DwQA9nJ3.js} +1 -1
- package/dist/assets/{layered-pick-Bkf0E_UR.js → layered-pick-Dntz2X63.js} +1 -1
- package/dist/assets/{light-nmEsK8JV.js → light-B6jvsaum.js} +1 -1
- package/dist/assets/{live-project-verbs-H6S9jMp9.js → live-project-verbs-CS-RzAOM.js} +1 -1
- package/dist/assets/{machine.document-DbzwF7ct.js → machine.document-Cd2TMllI.js} +1 -1
- package/dist/assets/{machines.finder-CLK23edR.js → machines.finder-CpruCp4e.js} +1 -1
- package/dist/assets/{material-BX0tqR9K.js → material-CgxQuNN9.js} +1 -1
- package/dist/assets/{material-factory-KdJxeWsR.js → material-factory-M3dPwynz.js} +1 -1
- package/dist/assets/{mesh-Dtrk7lEY.js → mesh-CWr_mbES.js} +1 -1
- package/dist/assets/{model-asset-sections.service-B6kG8uli.js → model-asset-sections.service-Ca9mHoId.js} +1 -1
- package/dist/assets/{model-inspection-Cus72-UK.js → model-inspection-tw_q6BVp.js} +1 -1
- package/dist/assets/{model-thumbnail-Dm3TXja5.js → model-thumbnail-iK5a9are.js} +1 -1
- package/dist/assets/{models.finder-BoFyTirM.js → models.finder-mQOSiUkv.js} +1 -1
- package/dist/assets/{module-mode-Dm9xepU7.js → module-mode-Dn2A9vZ8.js} +2 -2
- package/dist/assets/{mount-canvas-ingest-root-Erg3xO7k.js → mount-canvas-ingest-root-Bz8WtGxO.js} +2 -2
- package/dist/assets/{mount-dom-ingest-root-CBfy8dZF.js → mount-dom-ingest-root-BxHQUCK7.js} +2 -2
- package/dist/assets/{mount-ingest-root-COum-c-U.js → mount-ingest-root-B5RoLjsS.js} +2 -2
- package/dist/assets/{mount-manifest-DvUJ-fD8.js → mount-manifest-Br9sXxSh.js} +1 -1
- package/dist/assets/{mount-three-ingest-root-C1auHtuC.js → mount-three-ingest-root-BlesdWgf.js} +1 -1
- package/dist/assets/{mounted-authoring-Cjmi_MYm.js → mounted-authoring-DxwkC5eG.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-pTjqNWJx.js → mounted-story-viewport-source-DWO5iGCA.js} +1 -1
- package/dist/assets/{native-debug-module-C_1Fna30.js → native-debug-module-BzGNl0wd.js} +1 -1
- package/dist/assets/{navigation-Um6Fjogv.js → navigation-CVaWWV0F.js} +1 -1
- package/dist/assets/{navmesh.menu-Bx1y_DLx.js → navmesh.menu-BI3X9HFW.js} +1 -1
- package/dist/assets/{navmesh.service-B1EYycZ8.js → navmesh.service-BLjwRhos.js} +1 -1
- package/dist/assets/network-observer.service-b0aoJomO.js +1 -0
- package/dist/assets/{network.utility-DHcZnsaE.js → network.utility-CwTm122D.js} +1 -1
- package/dist/assets/{object3d-document-session-registry-DsJV3XhY.js → object3d-document-session-registry-B8HFpoFw.js} +2 -2
- package/dist/assets/{oid-transform-DEzhk73d.js → oid-transform-CdVaNpRJ.js} +1 -1
- package/dist/assets/{particles-BnGOaZUs.js → particles-DuhhAOtp.js} +1 -1
- package/dist/assets/{pixi-authoring-adapter-qsxp_Kpv.js → pixi-authoring-adapter-CV6L9eNi.js} +1 -1
- package/dist/assets/{pixi-live-write-target-Br2X6vrk.js → pixi-live-write-target-C4I8dXDl.js} +1 -1
- package/dist/assets/{play.command-Cak08ygG.js → play.command-ClzQRct1.js} +2 -2
- package/dist/assets/{presentation-Dr2MWsec.js → presentation-DlVtoHMl.js} +1 -1
- package/dist/assets/{product-DunxREWh.js → product-CraiIl1J.js} +1 -1
- package/dist/assets/{profiler.action-BIaSMoN-.js → profiler.action-CwP9qESg.js} +1 -1
- package/dist/assets/{profiler.menu-CHe06CnG.js → profiler.menu-CQlk1lY6.js} +1 -1
- package/dist/assets/{profiler.utility-CSNVq8T0.js → profiler.utility-JyGxwO9P.js} +1 -1
- package/dist/assets/{project-authoring-session-Ck0Fj3Y4.js → project-authoring-session-dtUdDaEF.js} +2 -2
- package/dist/assets/{properties-bone-constraints.inspector-kiKXCgM2.js → properties-bone-constraints.inspector-BQTx6zCz.js} +1 -1
- package/dist/assets/{properties-bone.inspector-DRJ4OpS_.js → properties-bone.inspector-OHB1Ftql.js} +1 -1
- package/dist/assets/{properties-collection.inspector-quSRs0rk.js → properties-collection.inspector-Cxa7JWnP.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-Cv0-5ePa.js → properties-constraints.inspector-han-PJPy.js} +1 -1
- package/dist/assets/{properties-data.inspector-CKX81zhT.js → properties-data.inspector-BxoOhIg0.js} +1 -1
- package/dist/assets/{properties-material.inspector-BRSPtk7G.js → properties-material.inspector-Cv96LV30.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-oiF88g6g.js → properties-modifiers.inspector-C0epFMUS.js} +1 -1
- package/dist/assets/{properties-object.inspector-DemtGtHR.js → properties-object.inspector-BUXSTujy.js} +1 -1
- package/dist/assets/{properties-output.inspector-qXRflac7.js → properties-output.inspector-GxdQIydV.js} +1 -1
- package/dist/assets/{properties-particles.inspector-DMTFYXtX.js → properties-particles.inspector-BM6WWqWy.js} +1 -1
- package/dist/assets/{properties-physics.inspector-Cbnh5FYf.js → properties-physics.inspector-2x9sbFhN.js} +1 -1
- package/dist/assets/{properties-render.inspector-Cf4fmFmw.js → properties-render.inspector-BcS8R6AN.js} +1 -1
- package/dist/assets/{properties-scene.inspector-Dlhwx1Jk.js → properties-scene.inspector-B1NjeWaL.js} +1 -1
- package/dist/assets/{properties-texture.inspector-CFPpgdvS.js → properties-texture.inspector-C22vj7XZ.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-D-3cHcyN.js → properties-view-layer.inspector-BpSr6tW3.js} +1 -1
- package/dist/assets/{properties-world.inspector-CGV5u2vS.js → properties-world.inspector-qGFtcwE6.js} +1 -1
- package/dist/assets/{r3f-design-session-BITr59zE.js → r3f-design-session-sj0vggGh.js} +2 -2
- package/dist/assets/{r3f-physics-binding-BATEkxoi.js → r3f-physics-binding-BYb1UWMK.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-eyquaeRl.js → r3f-source-authoring-adapter-C9WYtPIa.js} +1 -1
- package/dist/assets/{react-canvas-navigation-DjaqyL9B.js → react-canvas-navigation-CuDrmDyL.js} +1 -1
- package/dist/assets/{react-inspector.service-Bpta2-vk.js → react-inspector.service-BgV68KJk.js} +1 -1
- package/dist/assets/{react-story-board-C_L09deC.js → react-story-board-ClnkbDTi.js} +1 -1
- package/dist/assets/{react-three-rapier.esm-qv3CPTWM.js → react-three-rapier.esm-C-ciX4k0.js} +1 -1
- package/dist/assets/{react-world-authoring-adapter-BUU8rhRd.js → react-world-authoring-adapter-BDaxJTc0.js} +1 -1
- package/dist/assets/{realm-services-ugwrIrZB.js → realm-services-Cw3sONfz.js} +1 -1
- package/dist/assets/{reflection-probe-capture.inspector-B5kTVv5X.js → reflection-probe-capture.inspector-CNoJsSEi.js} +1 -1
- package/dist/assets/{registry-DLJHmJyM.js → registry-a1gjDpWd.js} +1 -1
- package/dist/assets/{relative-import-specifier-CbIyU_9J.js → relative-import-specifier-BndRUUAb.js} +1 -1
- package/dist/assets/{render-env-D0fWD_Cg.js → render-env-qYy53OAK.js} +1 -1
- package/dist/assets/{render-features-C1XRxw0r.js → render-features-B492w-Yf.js} +1 -1
- package/dist/assets/{render-settings-TEF5i9i9.js → render-settings-BjcdKCfd.js} +1 -1
- package/dist/assets/{resolve-three-BB2QWODF.js → resolve-three-CszFCyl-.js} +3 -3
- package/dist/assets/{root-seam-contract-AH-4qn4f.js → root-seam-contract-Bd-XAGBB.js} +1 -1
- package/dist/assets/{run-selection-D1vl12vH.js → run-selection-BpGDhn70.js} +1 -1
- package/dist/assets/{scene-capture-C29siFao.js → scene-capture-CAFYvzhb.js} +1 -1
- package/dist/assets/{scene-document.service-BWVnNGp-.js → scene-document.service-DMgXwzwD.js} +2 -2
- package/dist/assets/{scene-framing-C7Dmipw4.js → scene-framing-Cc0t4Ghk.js} +1 -1
- package/dist/assets/{seeded-random-BMbOsD5m.js → seeded-random-CaqCbq6t.js} +1 -1
- package/dist/assets/{setup-renderer-CCCYtTqV.js → setup-renderer-CJwc7fKC.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-Cbbs0YjZ.js → source-object3d-authoring-adapter-JfFg_SXG.js} +1 -1
- package/dist/assets/{source-persistence-backend-B2YaNBbK.js → source-persistence-backend-lDOQZAuY.js} +1 -1
- package/dist/assets/{stage-keyboard-DKyfSZqk.js → stage-keyboard-Cn3D4l1C.js} +1 -1
- package/dist/assets/{stage-overlay-set-BuEpVdEB.js → stage-overlay-set--uhDjwES.js} +1 -1
- package/dist/assets/{stage-presence-markers-BW_-0aHa.js → stage-presence-markers-pGfG8Ga3.js} +1 -1
- package/dist/assets/{stage-transform-tools-CUIBDpNf.js → stage-transform-tools-C0s5SeLW.js} +1 -1
- package/dist/assets/standard-viewport-dressing-XRUmVcY2.js +24 -0
- package/dist/assets/{state-watch.action-CPr8pgP6.js → state-watch.action-Df9RonGq.js} +1 -1
- package/dist/assets/{state-watch.menu-B6E9vQpQ.js → state-watch.menu-CPUcUe-D.js} +1 -1
- package/dist/assets/{state-watch.utility-ClzOeKvw.js → state-watch.utility-B8cagqBb.js} +1 -1
- package/dist/assets/{story-capture-CKMQHZc4.js → story-capture-B2BjHSLc.js} +1 -1
- package/dist/assets/{story-documents-QD7pHb4e.js → story-documents-SnoNBd2D.js} +1 -1
- package/dist/assets/{story-documents.service-3jggyYD4.js → story-documents.service-DBmRjRB0.js} +1 -1
- package/dist/assets/{story-documents.service-0heuocG2.js → story-documents.service-b-luEx4m.js} +1 -1
- package/dist/assets/{story-media-presence-BSzcVOx8.js → story-media-presence-BycZ_Z6D.js} +1 -1
- package/dist/assets/{story-pixi-preview-Bwbu5lsq.js → story-pixi-preview-B388EEvg.js} +1 -1
- package/dist/assets/{story-presentation-C3wR7htg.js → story-presentation-HlppZ46F.js} +1 -1
- package/dist/assets/{story-three-preview-BiiW5BTL.js → story-three-preview-B-jMiM2k.js} +2 -2
- package/dist/assets/{studio-environment-7oYW17Ie.js → studio-environment-C79giSrc.js} +1 -1
- package/dist/assets/{surface-state-_ZZJugmc.js → surface-state-DKi9MDjb.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-AHbdK98K.js → syntactic-prop-specs-C3mL8uum.js} +1 -1
- package/dist/assets/{team-playtest.service-BfGMrLe2.js → team-playtest.service-oLwYS-Hr.js} +1 -1
- package/dist/assets/{three-authoring-adapter-DlqC-T90.js → three-authoring-adapter-CRLQO6sr.js} +1 -1
- package/dist/assets/three-authoring.service-ZppuT2yH.js +2 -0
- package/dist/assets/{three-BiLYjlR0.js → three-fHebWwy_.js} +1 -1
- package/dist/assets/{three-ingest-runtime-BsCSoTG8.js → three-ingest-runtime-s9ENzn3K.js} +1 -1
- package/dist/assets/{three-integration-DxXySCHZ.js → three-integration-Cn9aysL2.js} +2 -2
- package/dist/assets/three-integration.service-BIdzYsdo.js +1 -0
- package/dist/assets/{three-projection-core-C0R8NXF5.js → three-projection-core-DfVT5WpU.js} +1 -1
- package/dist/assets/{three-state-28vYMAez.js → three-state-BlAc2cU5.js} +1 -1
- package/dist/assets/{three-story-capture.service-VJ7oB7Ak.js → three-story-capture.service-CTQwjZMC.js} +2 -2
- package/dist/assets/{three-story-model-yxM6xIDL.js → three-story-model-CHbWQcAh.js} +1 -1
- package/dist/assets/{three-viewport-presentation-PqEhvDqp.js → three-viewport-presentation-25xuss6W.js} +2 -2
- package/dist/assets/{transform-mode-request-gml8dpK4.js → transform-mode-request-CissAw5x.js} +1 -1
- package/dist/assets/{transport-strip-DgeWfqo0.js → transport-strip-DFf-U2y-.js} +1 -1
- package/dist/assets/transport.header-DYRNEz0o.js +1 -0
- package/dist/assets/{tuples-BbhqWWKC.js → tuples-D29lpxvy.js} +1 -1
- package/dist/assets/{ui-board-document-DcZ0WHEL.js → ui-board-document-Byhp9wy1.js} +2 -2
- package/dist/assets/{user-data-DX18I5LS.js → user-data-DjFdlyHN.js} +1 -1
- package/dist/assets/{utility-view-state-CV4sNyaf.js → utility-view-state-BfTEKwyx.js} +1 -1
- package/dist/assets/{viewport-door-C_XkG4b1.js → viewport-door-Dh7IGceC.js} +1 -1
- package/dist/assets/{viewport-root-presentation-h3E0Xsra.js → viewport-root-presentation-CQ7jhPEd.js} +1 -1
- package/dist/assets/{viewport-surface-status-OxaV9weN.js → viewport-surface-status-OCXNZYo7.js} +1 -1
- package/dist/assets/{webworkerAll-DtOnnkrI.js → webworkerAll-C7fvfaXh.js} +1 -1
- package/dist/assets/{workspace-arrangement-Dg7zIkwR.js → workspace-arrangement-Dyq55Dxr.js} +1 -1
- package/dist/assets/{world-documents-DAcA8wNx.js → world-documents-VeT5j_jT.js} +1 -1
- package/dist/assets/{world-root-stage-binding-CHamVnwM.js → world-root-stage-binding-CfA3fpQN.js} +1 -1
- package/dist/assets/{xstate-animation-binding-DQkf6q6S.js → xstate-animation-binding-D3afNlpg.js} +1 -1
- package/dist/assets/{xstate-animation-meta-DFSFf8d4.js → xstate-animation-meta-Bvk0pGex.js} +1 -1
- package/dist-node/cli.js +19 -17
- package/package.json +16 -16
- package/dist/assets/InspectorObjectPreview-uhttAefh.js +0 -1
- package/dist/assets/Object3DDocumentViewport-9yg2UH4I.js +0 -2
- package/dist/assets/autoplay.service-DFqlxmS0.js +0 -1
- package/dist/assets/instances.command-CNhLn9a9.js +0 -1
- package/dist/assets/network-observer.service-CnOV9u6I.js +0 -1
- package/dist/assets/standard-viewport-dressing-oljtBXBW.js +0 -24
- package/dist/assets/three-authoring.service-DZWsZPqx.js +0 -2
- package/dist/assets/three-integration.service-BgzJ-hPW.js +0 -1
- package/dist/assets/transport.header-eMf7tt0a.js +0 -1
|
@@ -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-Bn8WGRJh.js";import{a as Ni,i as st}from"./standard-viewport-dressing-oljtBXBW.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-DUlT_Bs_.js";import{EDITOR_LAYER as P,isInEditorOwnedSubtree as J,EDITOR_SELECTION_LAYER as _e,isEditorOwnedObject as Ui}from"./editor-layers-BGId-Uru.js";import{e as ge,r as Wt,f as Ze}from"./three-BiLYjlR0.js";import{g as tt,s as W}from"./user-data-DX18I5LS.js";import{d as Ki,s as $i,a as Ji}from"./model-thumbnail-Dm3TXja5.js";import{d as Ue,e as ts}from"./model-inspection-Cus72-UK.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-DhM6KcjO.js";import{a as Hs,e as Es}from"./entity-object-B77fPnTJ.js";import{e as Ts,v as kt,i as zs,d as Ls}from"./three-integration-DxXySCHZ.js";import{f as ei,v as Is,s as Os}from"./scene-framing-C7Dmipw4.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{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-CWR8N1pt.js";import{a as Ni,i as st}from"./standard-viewport-dressing-XRUmVcY2.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-CMk1llDT.js";import{EDITOR_LAYER as P,isInEditorOwnedSubtree as J,EDITOR_SELECTION_LAYER as _e,isEditorOwnedObject as Ui}from"./editor-layers-hAcvLPMn.js";import{e as ge,r as Wt,f as Ze}from"./three-fHebWwy_.js";import{g as tt,s as W}from"./user-data-DjFdlyHN.js";import{d as Ki,s as $i,a as Ji}from"./model-thumbnail-iK5a9are.js";import{d as Ue,e as ts}from"./model-inspection-tw_q6BVp.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-DkNOWUFp.js";import{a as Hs,e as Es}from"./entity-object-DR7d2cxz.js";import{e as Ts,v as kt,i as zs,d as Ls}from"./three-integration-Cn9aysL2.js";import{f as ei,v as Is,s as Os}from"./scene-framing-Cc0t4Ghk.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;
|
|
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;
|
|
@@ -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()}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._presentation.rig.resolveSource({light:this._store.isAdoptedSceneActive}),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 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};
|