@volter/game-editor 0.5.81 → 0.5.82
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BUNDLED_NOTICES +22 -22
- package/catalog/entries/blender.json +2 -2
- package/catalog/entries/music.json +2 -2
- package/dist/.vite/manifest.json +2138 -2137
- package/dist/assets/{AssetBudgetPanel-CfVYW4ED.js → AssetBudgetPanel-Iip49rxI.js} +3 -3
- package/dist/assets/{AudioViewer-J10BXrtm.js → AudioViewer-DmkOvskF.js} +1 -1
- package/dist/assets/{CanvasBoardDocument-BgIbuOQF.js → CanvasBoardDocument-DCS8uzQo.js} +1 -1
- package/dist/assets/CanvasSceneViewport-CfOuQiQ0.js +1 -0
- package/dist/assets/{ColorInput-fX1V5l8_.js → ColorInput-7CPpl8MI.js} +1 -1
- package/dist/assets/EntityModelDocument-CplmAib0.js +1 -0
- package/dist/assets/{EnvironmentAssetDocument-QuLkCom9.js → EnvironmentAssetDocument-DlS6KFJu.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-D0z5Mc0R.js → GameplaySessionTimeline-C3zH6edi.js} +1 -1
- package/dist/assets/{ImageViewer-DWUPPWRf.js → ImageViewer-C0lQ6YO0.js} +1 -1
- package/dist/assets/InspectorObjectPreview-Bjc1Tn-I.js +1 -0
- package/dist/assets/{JsonAssetDocument-C0Lr6RwY.js → JsonAssetDocument-DjmH9CQH.js} +1 -1
- package/dist/assets/{LiveModuleDocument-CaGmr0EA.js → LiveModuleDocument-Hiot8Q5L.js} +1 -1
- package/dist/assets/{LutAssetDocument-B6GmsOYd.js → LutAssetDocument-6bBwNMOn.js} +1 -1
- package/dist/assets/{ModelAssetDocument-BBDnXTQm.js → ModelAssetDocument-G6ajiV51.js} +1 -1
- package/dist/assets/{NonThreeAuthoringBootstrap-byKqf1kp.js → NonThreeAuthoringBootstrap-DpieYAMC.js} +1 -1
- package/dist/assets/Object3DDocumentToolbar-BtZkDxKa.js +1 -0
- package/dist/assets/Object3DDocumentViewport-BhH8afDi.js +2 -0
- package/dist/assets/{Object3DPreview-pn9i3vwZ.js → Object3DPreview-DdrYVJUZ.js} +1 -1
- package/dist/assets/{OnlineAssetDetail-PDCDAcqz.js → OnlineAssetDetail-D06eTe3y.js} +1 -1
- package/dist/assets/{PlayBar-DEnkv3v6.js → PlayBar-BbzjgLFJ.js} +1 -1
- package/dist/assets/{QuarksAssetDocument-2x66XymD.js → QuarksAssetDocument-wGHNt4ov.js} +1 -1
- package/dist/assets/{ReactCanvasControls-rFwp2CeP.js → ReactCanvasControls-BL2tOUj6.js} +1 -1
- package/dist/assets/{RootSelectionOverlay-B9rf-SSV.js → RootSelectionOverlay-C6Wu8nIs.js} +1 -1
- package/dist/assets/{ShaderAssetDocument-ImI6jbzB.js → ShaderAssetDocument-BDi8iNLA.js} +4 -4
- package/dist/assets/{ShadowEditor-DXxVxTzk.js → ShadowEditor-C3L0UWSH.js} +1 -1
- package/dist/assets/{SourceAssetViewer-CMbp_o7v.js → SourceAssetViewer-D832bARo.js} +1 -1
- package/dist/assets/StageHost-Bor1eHEO.js +2 -0
- package/dist/assets/{StoryPreviewMount-D2zLWzWy.js → StoryPreviewMount-CmOEFzZY.js} +1 -1
- package/dist/assets/{ThreeBoardDocument-nX3UiY3u.js → ThreeBoardDocument-BtBMGtiQ.js} +2 -2
- package/dist/assets/{ThreeIsolationSceneContent-CGHM0vsg.js → ThreeIsolationSceneContent-BEHNSEsi.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-BfNcqtFv.js → ToolObject3DPreview-76LMkfin.js} +1 -1
- package/dist/assets/{Toolbar-BJRJsbHG.js → Toolbar-BEBQdxRz.js} +1 -1
- package/dist/assets/{TransientHint-CDvYgnzu.js → TransientHint-CzsdY8W6.js} +1 -1
- package/dist/assets/{VideoViewer-B6Dv2zeQ.js → VideoViewer-Ckrawyuq.js} +1 -1
- package/dist/assets/{ViewportShadingMenu-CrTY7tnk.js → ViewportShadingMenu-BofQt6_4.js} +1 -1
- package/dist/assets/{active-ingest-lrfMBhf9.js → active-ingest-D_ryI_R4.js} +2 -2
- package/dist/assets/{animation-clock-DktVGV5-.js → animation-clock-QjtJDIsR.js} +1 -1
- package/dist/assets/{animation-mixers.service-fkojNtor.js → animation-mixers.service-BInUs1US.js} +1 -1
- package/dist/assets/{animation-timeline.utility-DDrUZKe8.js → animation-timeline.utility-DUrfNSwn.js} +1 -1
- package/dist/assets/{asset-budget-asset.menu-CDlgKSO9.js → asset-budget-asset.menu-DVQEksFp.js} +1 -1
- package/dist/assets/{asset-budget.action-D6n-wIR3.js → asset-budget.action-C-ENAa52.js} +1 -1
- package/dist/assets/{asset-budget.document-DFByoagB.js → asset-budget.document-Bb1PyL3H.js} +1 -1
- package/dist/assets/{asset-budget.menu-B2u_1dWR.js → asset-budget.menu-CPi2yjBA.js} +1 -1
- package/dist/assets/{asset-editor-persistence-e6bYhVnm.js → asset-editor-persistence-Duoq7o22.js} +1 -1
- package/dist/assets/{asset-loaders-Bsq-3hNt.js → asset-loaders-BftJ2m7-.js} +1 -1
- package/dist/assets/{asset-preview-B7j9QV6N.js → asset-preview-BS71mXsZ.js} +1 -1
- package/dist/assets/{audio-unlock.service-7oO4YVIj.js → audio-unlock.service-C3ygvDjU.js} +1 -1
- package/dist/assets/{audio.utility-9fcsT3YY.js → audio.utility-DF55sgHW.js} +1 -1
- package/dist/assets/autoplay.service-DaonKf7O.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-BJfYxqDM.js → babylon-authoring-adapter-CmeehOBt.js} +1 -1
- package/dist/assets/{binding-resolver-CBXePHiR.js → binding-resolver-DUz8C8Fs.js} +2 -2
- package/dist/assets/{blender-node-editor.document-xA7eGv3-.js → blender-node-editor.document-B8S2TVMM.js} +1 -1
- package/dist/assets/{blender-properties-tab-nY8UOQUL.js → blender-properties-tab-y-_BeZDx.js} +1 -1
- package/dist/assets/blender-runtime-host-CUH6peXj.js +4 -0
- package/dist/assets/{blender-runtime-skin-D3Arti9-.js → blender-runtime-skin-B1tYITn2.js} +36 -36
- package/dist/assets/blender-runtime.document-DnSl0twI.js +12 -0
- package/dist/assets/{blender-timeline.document-DXoQ7y8E.js → blender-timeline.document-CeCylyXB.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-CMOyob1N.js → blender-uv-editor.document-DEllMw3a.js} +1 -1
- package/dist/assets/{blender-version.status-16xnuezC.js → blender-version.status-CrT9NqK-.js} +1 -1
- package/dist/assets/{blender.command-Br2EUk6Q.js → blender.command-GIjMG1-m.js} +1 -1
- package/dist/assets/{board-guides-whelE-Dr.js → board-guides-B6TEPOPi.js} +1 -1
- package/dist/assets/{bridge.command-T93eURWq.js → bridge.command-D6qTcgje.js} +3 -3
- package/dist/assets/{browserAll-BfZu7-UJ.js → browserAll-k35XRFil.js} +1 -1
- package/dist/assets/build-player.document-CHxj4P8q.js +1 -0
- package/dist/assets/{build-profiles.document-DNncGOL3.js → build-profiles.document-CZCk1HYA.js} +2 -2
- package/dist/assets/{build-progress.status-DnJetNft.js → build-progress.status-BNwBxP2a.js} +1 -1
- package/dist/assets/{build-session-BaEmzCkm.js → build-session-CW2UyYFF.js} +1 -1
- package/dist/assets/{build.action-exbllMgM.js → build.action-EmCcMu47.js} +1 -1
- package/dist/assets/{build.command-Imykh8LN.js → build.command-CzEckGcR.js} +1 -1
- package/dist/assets/{build.header-9RzLy3UQ.js → build.header-CsYLpZbh.js} +1 -1
- package/dist/assets/{build.menu-CRhA3yID.js → build.menu-CaDkDQuy.js} +1 -1
- package/dist/assets/{build.service-CxIdSEPw.js → build.service-BcKtbU0-.js} +1 -1
- package/dist/assets/{camera-BiBGeQQ4.js → camera-BwWZUyKt.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-DmRFynxC.js → camera-runtime.inspector-CJyi3zmp.js} +1 -1
- package/dist/assets/{canvas-design-mount-DJ6zQJKG.js → canvas-design-mount-B_uwZkEU.js} +6 -6
- package/dist/assets/{canvas-entry-runtime-Cjga4XYp.js → canvas-entry-runtime-DskaohHK.js} +2 -2
- package/dist/assets/{canvas-preview-frames-EoYgD6W4.js → canvas-preview-frames-BzLeTumX.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-D5UntNCd.js → canvas-story-capture.service-C80CsS8r.js} +2 -2
- package/dist/assets/{capability-coverage-9qm5WVwt.js → capability-coverage-wd6bAhv3.js} +2 -2
- package/dist/assets/{collaboration-presence-Q6zcL5v0.js → collaboration-presence-DcPhahtF.js} +1 -1
- package/dist/assets/{collider-CTHtUvnl.js → collider-Dw2iWV3F.js} +1 -1
- package/dist/assets/{component-board.service-Bf-ETQF0.js → component-board.service-CH99sgj0.js} +2 -2
- package/dist/assets/component-board.service-Cd1c9oSN.js +2 -0
- package/dist/assets/{component-board.service-foqmr9Ii.js → component-board.service-XAxyLCnM.js} +2 -2
- package/dist/assets/{component-contracts.service-Do9hADdW.js → component-contracts.service-DerT0BP-.js} +1 -1
- package/dist/assets/{component-instance-root-MBgAuUpp.js → component-instance-root-Cw_-ajBX.js} +1 -1
- package/dist/assets/{component-verbs.command-DtMdPuyO.js → component-verbs.command-BHK9M2Rk.js} +1 -1
- package/dist/assets/component-verbs.service-DsxhVcvk.js +1 -0
- package/dist/assets/{config-B6tt9xy3.js → config-1rCvm02z.js} +3 -3
- package/dist/assets/configurations-CRTYw0r9.js +1 -0
- package/dist/assets/{connection.status-BNPvWdJD.js → connection.status-D4fjnH24.js} +1 -1
- package/dist/assets/{constraints.inspector-DoOn25Lk.js → constraints.inspector-BgnafOLf.js} +1 -1
- package/dist/assets/{content-bounds-BFpR_e--.js → content-bounds-D5pXeHJN.js} +1 -1
- package/dist/assets/{contract-system-adapters-BRHtWOi_.js → contract-system-adapters-rVGdworX.js} +1 -1
- package/dist/assets/{coverage.service-BB1XhwsL.js → coverage.service-BNme5Agb.js} +1 -1
- package/dist/assets/{create-runtime-B6u6x5eK.js → create-runtime-CcuQTSfy.js} +2 -2
- package/dist/assets/{curve-D11mIGoN.js → curve-DorFv33R.js} +1 -1
- package/dist/assets/{data-asset-DejEwzXj.js → data-asset-CAE35Emh.js} +1 -1
- package/dist/assets/{data-ref-DJNVzksb.js → data-ref-DXqRnZsJ.js} +1 -1
- package/dist/assets/{debug-bridge-DlGIEyTc.js → debug-bridge-DdCJSEni.js} +1 -1
- package/dist/assets/{debug-registry-Dagj3b6J.js → debug-registry-xQJcVubm.js} +1 -1
- package/dist/assets/deferred-ingest-play-CEnsC3uN.js +2 -0
- package/dist/assets/{design-time-canvas-mount-Cpb_jITI.js → design-time-canvas-mount-CPRrCPFA.js} +2 -2
- package/dist/assets/design-time-layers-hmGqBp06.js +1 -0
- package/dist/assets/{design-time-mount.service-Ck5Hjxtn.js → design-time-mount.service-CEmJjRIJ.js} +2 -2
- package/dist/assets/{design-time-mount.service-DEa-41ij.js → design-time-mount.service-CLL-1Za4.js} +2 -2
- package/dist/assets/{design-time-react-mount-DCTpYS51.js → design-time-react-mount-DmXi3GBy.js} +1 -1
- package/dist/assets/{document-preview-three-TjlxMDBR.js → document-preview-three-B4j_zNef.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-C3ZsI41l.js → dom-authoring-adapter-BklRbjZB.js} +1 -1
- package/dist/assets/{draco3d-Ddr7J1sS.js → draco3d-CFWI1XDT.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-D047aZ6I.js → edit-mode-audio.service-SUzv0nHs.js} +1 -1
- package/dist/assets/{edit-mode-authoring-DubxVdEM.js → edit-mode-authoring-CSt3zzmS.js} +1 -1
- package/dist/assets/{edit-mode-networking.service-DitjC2ZL.js → edit-mode-networking.service-D6UohrCr.js} +1 -1
- package/dist/assets/editor-api-WeHVNlEo.js +1 -0
- package/dist/assets/{editor-layers-BK3fNRb7.js → editor-layers-CjeYrUlm.js} +1 -1
- package/dist/assets/{editor-shell-store-Bro0arjr.js → editor-shell-store-DckLm6m8.js} +1 -1
- package/dist/assets/{entity-object-BFppZ54X.js → entity-object-V13bGmay.js} +1 -1
- package/dist/assets/{extend-MkXq6t1H.js → extend-BQeRA-aV.js} +1 -1
- package/dist/assets/{fork-menu-DzoCyQvA.js → fork-menu-Bthg9viY.js} +1 -1
- package/dist/assets/{frame-debugger-store-xbOH83D0.js → frame-debugger-store-DDxWlDPK.js} +1 -1
- package/dist/assets/{game-contract-seams-5IUqvr7b.js → game-contract-seams-DrYyE5PX.js} +1 -1
- package/dist/assets/{game-css-scope-transform-DDAoTvZQ.js → game-css-scope-transform-D5hQWaci.js} +1 -1
- package/dist/assets/game-document.service-cJ1yKc2V.js +1 -0
- package/dist/assets/{game-eval.command-DcFoKUe7.js → game-eval.command-CKo-W17_.js} +1 -1
- package/dist/assets/{game-module-access-ABBzTWg7.js → game-module-access-DuptGLGx.js} +1 -1
- package/dist/assets/game-network-CAH_Jsh6.js +22 -0
- package/dist/assets/gameplay-export-B-JE4uSD.js +1 -0
- package/dist/assets/gameplay-replay-WyopKGyB.js +1 -0
- package/dist/assets/{gameplay.command-qdQLKC3A.js → gameplay.command-D4cY3nOq.js} +1 -1
- package/dist/assets/generation-jobs-CcCrhKLM.js +1 -0
- package/dist/assets/{generation.service-CdwRWoIV.js → generation.service-CQwmLAOQ.js} +1 -1
- package/dist/assets/{generations-nW4LG5qG.js → generations-qfhCRH8C.js} +1 -1
- package/dist/assets/{generations.status-DgjVrgGL.js → generations.status-CcbR2OfF.js} +1 -1
- package/dist/assets/{hierarchy-marks-Pb6wnNcu.js → hierarchy-marks-B1jSqxSv.js} +1 -1
- package/dist/assets/{hosted-asset-materialization-BCnTLunr.js → hosted-asset-materialization-BZf-8JA1.js} +1 -1
- package/dist/assets/{index-Bz4YDJ7o.js → index-CHa43s2p.js} +1 -1
- package/dist/assets/{index-BYoN6-Qw.js → index-Cj_b0Ygc.js} +1 -1
- package/dist/assets/{index-Db2ixdvK.js → index-D-RMHSzb.js} +1 -1
- package/dist/assets/{index-D7q1gYjq.js → index-DXtfej3G.js} +1 -1
- package/dist/assets/{index-BlWeDGvp.js → index-D_ViOFCz.js} +2 -2
- package/dist/assets/{index-Ds9fZyOU.js → index-DrEVdQvN.js} +1 -1
- package/dist/assets/{index-CvGsVzTo.js → index-V4J7xfRg.js} +7 -7
- package/dist/assets/{index-CaZZDx3x.js → index-aREcGExk.js} +1 -1
- package/dist/assets/index-yXSK_qPW.js +1 -0
- package/dist/assets/{inference-diagnostics-BCwXk-CS.js → inference-diagnostics-DoZQ1mpg.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-BPER30gQ.js → ingest-boot-viewport-DWdOtGGE.js} +1 -1
- package/dist/assets/ingest-siblings-DyvasVDH.js +1 -0
- package/dist/assets/{ingest-source-persistence-CPlDA2D8.js → ingest-source-persistence-CQOJeGhj.js} +1 -1
- package/dist/assets/{ingest.service-BhwFGlqY.js → ingest.service-CqIcydem.js} +1 -1
- package/dist/assets/{inspect-DxfAFkho.js → inspect-DiSjB-N1.js} +1 -1
- package/dist/assets/instances.command-COw2QpbN.js +1 -0
- package/dist/assets/{json-history-resource-CckDydoO.js → json-history-resource-CH2nzMZh.js} +1 -1
- package/dist/assets/{layered-pick-BaxBYi7u.js → layered-pick-BUr1U8lU.js} +1 -1
- package/dist/assets/{light-DF4nTzTq.js → light-CxiGIJma.js} +1 -1
- package/dist/assets/live-project-verbs-CnknlUlT.js +1 -0
- package/dist/assets/{machine.document-DaPLAXaa.js → machine.document-D7jMrzXt.js} +1 -1
- package/dist/assets/{machines.finder-C9s8SFtp.js → machines.finder-Dor3O0uf.js} +1 -1
- package/dist/assets/{material-rGFsBrD0.js → material-B6cH1Oqw.js} +1 -1
- package/dist/assets/{material-factory-CCcnlv8E.js → material-factory-BN3Lax5C.js} +1 -1
- package/dist/assets/{mesh-CVBvSsCX.js → mesh-Cj-CYroI.js} +1 -1
- package/dist/assets/{model-asset-sections.service-vVRv6iOD.js → model-asset-sections.service-mC4WJFTA.js} +1 -1
- package/dist/assets/{model-inspection-Dd-hn5v2.js → model-inspection-8o57YSZW.js} +1 -1
- package/dist/assets/{model-thumbnail-BDU_QU37.js → model-thumbnail-chePRlH7.js} +1 -1
- package/dist/assets/{models.finder-CQMZz5xX.js → models.finder-CKkT5ZdU.js} +1 -1
- package/dist/assets/{module-mode-DcBz3aI7.js → module-mode-BMiMhHI3.js} +2 -2
- package/dist/assets/{mount-canvas-ingest-root-DMWeT_c3.js → mount-canvas-ingest-root-B1swVIUJ.js} +2 -2
- package/dist/assets/{mount-dom-ingest-root-Bx1TmleJ.js → mount-dom-ingest-root-B8hO5mht.js} +2 -2
- package/dist/assets/{mount-ingest-root-BDP8atUq.js → mount-ingest-root-Cbnh-mSw.js} +2 -2
- package/dist/assets/{mount-manifest-C5QVCZlS.js → mount-manifest-B7oL1Abg.js} +1 -1
- package/dist/assets/{mount-three-ingest-root-DSmhgOJn.js → mount-three-ingest-root-BdUJx6ix.js} +1 -1
- package/dist/assets/{mounted-authoring-D-tXkNKH.js → mounted-authoring-C47L5H5t.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-Snu9yn1n.js → mounted-story-viewport-source-CyEK_vaq.js} +1 -1
- package/dist/assets/{native-debug-module-XfhvyMrK.js → native-debug-module-JJOFtIVz.js} +1 -1
- package/dist/assets/{navigation-CTTcWe0R.js → navigation-ROJM2w84.js} +1 -1
- package/dist/assets/{navmesh.menu-mFjQ30B0.js → navmesh.menu-DjefqtkI.js} +1 -1
- package/dist/assets/{navmesh.service-BJPp7ZXu.js → navmesh.service-BPqjEQiq.js} +1 -1
- package/dist/assets/network-observer.service-GFzXuBMb.js +1 -0
- package/dist/assets/{network.utility-C-_7MTIV.js → network.utility-6Y5u53n8.js} +1 -1
- package/dist/assets/object3d-document-session-registry-DNCOGA3i.js +2 -0
- package/dist/assets/{oid-transform-Bgdv7kST.js → oid-transform-DQzN_Gl_.js} +1 -1
- package/dist/assets/{particles-CHXYb9Jd.js → particles-DGdUmqOr.js} +1 -1
- package/dist/assets/{pixi-authoring-adapter-lj5CidSR.js → pixi-authoring-adapter-BRktdcIz.js} +1 -1
- package/dist/assets/{pixi-live-write-target-BEL9GCCr.js → pixi-live-write-target-Dg0mdLaa.js} +1 -1
- package/dist/assets/play.command-4IDAqR5W.js +2 -0
- package/dist/assets/{presentation-CmK-bEDi.js → presentation-8m-RDKIS.js} +1 -1
- package/dist/assets/{product-gjrRHe-K.js → product-t6tauO7R.js} +1 -1
- package/dist/assets/{profiler.action-CZ6UQi9A.js → profiler.action-CXA4IkQB.js} +1 -1
- package/dist/assets/{profiler.menu-DxbnC3d6.js → profiler.menu-BgIBv4-I.js} +1 -1
- package/dist/assets/{profiler.utility-BvARl7sM.js → profiler.utility-BYoRbfIK.js} +1 -1
- package/dist/assets/{project-authoring-session-CBKXzBlD.js → project-authoring-session-DkekCxNv.js} +2 -2
- package/dist/assets/{properties-bone-constraints.inspector-Co8UpbhC.js → properties-bone-constraints.inspector-DXpiCtf9.js} +1 -1
- package/dist/assets/{properties-bone.inspector-CFXh2lQH.js → properties-bone.inspector-wIDsP4c5.js} +1 -1
- package/dist/assets/{properties-collection.inspector-Jq9X8fEq.js → properties-collection.inspector-5SRPbqfM.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-CMcKD_Jc.js → properties-constraints.inspector-DIjKz692.js} +1 -1
- package/dist/assets/{properties-data.inspector-cP3izSat.js → properties-data.inspector-DE6i8biZ.js} +1 -1
- package/dist/assets/{properties-material.inspector-CrZIovv9.js → properties-material.inspector-Cu1UCPY4.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-DqQMxoiL.js → properties-modifiers.inspector-DsQzA638.js} +1 -1
- package/dist/assets/{properties-object.inspector-DM63eANJ.js → properties-object.inspector-C57X0GJq.js} +1 -1
- package/dist/assets/{properties-output.inspector-B475IBEd.js → properties-output.inspector-DzrcFuRM.js} +1 -1
- package/dist/assets/{properties-particles.inspector-vGXQ4kWx.js → properties-particles.inspector-DGqSnelN.js} +1 -1
- package/dist/assets/{properties-physics.inspector-CfwqpVGS.js → properties-physics.inspector-DIjhtiLe.js} +1 -1
- package/dist/assets/{properties-render.inspector-BYLknsM7.js → properties-render.inspector-CX0orwn9.js} +1 -1
- package/dist/assets/{properties-scene.inspector-BcIZBfGk.js → properties-scene.inspector-DaHNL_sq.js} +1 -1
- package/dist/assets/{properties-texture.inspector-p3Owurhl.js → properties-texture.inspector-B5hmxPRy.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-CN-5jzB9.js → properties-view-layer.inspector-C7hdJgei.js} +1 -1
- package/dist/assets/{properties-world.inspector-DVp8fYWx.js → properties-world.inspector-EWTC6jNw.js} +1 -1
- package/dist/assets/r3f-design-session-CXlGV9hp.js +2 -0
- package/dist/assets/{r3f-physics-binding-BcTFD1ZS.js → r3f-physics-binding-DZSIB0d_.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-DVnhzoxp.js → r3f-source-authoring-adapter-GR97EmII.js} +1 -1
- package/dist/assets/{react-canvas-navigation-CBorZtWB.js → react-canvas-navigation-L_mOnybL.js} +1 -1
- package/dist/assets/{react-inspector.service-Dc99kogU.js → react-inspector.service-B4P3UnSY.js} +1 -1
- package/dist/assets/{react-story-board-6-BjI32N.js → react-story-board-CT1_3sk_.js} +1 -1
- package/dist/assets/{react-three-rapier.esm-BO2XPUEM.js → react-three-rapier.esm-DyMNYoA_.js} +1 -1
- package/dist/assets/{react-world-authoring-adapter-B6BiehHR.js → react-world-authoring-adapter-OR1SW2jI.js} +1 -1
- package/dist/assets/{realm-services-DCnaxwIb.js → realm-services-u0mnjXU9.js} +1 -1
- package/dist/assets/{reflection-probe-capture.inspector-CWneVfEe.js → reflection-probe-capture.inspector-CTNlSaGW.js} +1 -1
- package/dist/assets/{registry-BQ9YcFZF.js → registry-wqakYaDW.js} +1 -1
- package/dist/assets/{relative-import-specifier-BvzqkvYS.js → relative-import-specifier-DXWVQf0o.js} +1 -1
- package/dist/assets/{render-env-F320_iHT.js → render-env-CN09NtDf.js} +1 -1
- package/dist/assets/{render-features-DFwHsGxu.js → render-features-HCEupUJ6.js} +1 -1
- package/dist/assets/{render-settings-BPcHd4LA.js → render-settings-Clt6d05o.js} +1 -1
- package/dist/assets/{resolve-three-CnxafYrg.js → resolve-three-CLzKVMx2.js} +13 -13
- package/dist/assets/{root-seam-contract-CueaHgB9.js → root-seam-contract-D2uQHWF9.js} +1 -1
- package/dist/assets/{run-selection-BMQWV9Fn.js → run-selection-AyelFc9T.js} +1 -1
- package/dist/assets/{scene-capture-DcMYbX9_.js → scene-capture-WbPcLfJl.js} +1 -1
- package/dist/assets/{scene-document.service-CZpLI3b6.js → scene-document.service-4U6rDhCp.js} +2 -2
- package/dist/assets/{scene-framing-nVyYC4Y-.js → scene-framing-DzSL2Cld.js} +1 -1
- package/dist/assets/{seeded-random-D0QPgfm6.js → seeded-random-tpdJjdqy.js} +1 -1
- package/dist/assets/{setup-renderer-ji8Qt-PP.js → setup-renderer-B5vZmCyu.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-owosRx07.js → source-object3d-authoring-adapter-BQnQ3Qzg.js} +1 -1
- package/dist/assets/{source-persistence-backend-Djuk0m-7.js → source-persistence-backend-uyd6NiWD.js} +1 -1
- package/dist/assets/stage-keyboard-B2yrk2zu.js +1 -0
- package/dist/assets/stage-overlay-set-Cqtz3s06.js +1 -0
- package/dist/assets/{stage-presence-markers-CQlXR9fX.js → stage-presence-markers-BgLs0Aj5.js} +1 -1
- package/dist/assets/stage-transform-tools-BHcz53td.js +1 -0
- package/dist/assets/{standard-viewport-dressing-e4mnLmI6.js → standard-viewport-dressing-uhv_3JvQ.js} +2 -2
- package/dist/assets/{state-watch.action-Cv3W67Kr.js → state-watch.action-BJ08HgcO.js} +1 -1
- package/dist/assets/{state-watch.menu-Cuziz9RM.js → state-watch.menu-rAULwijr.js} +1 -1
- package/dist/assets/{state-watch.utility-B1zkFd_6.js → state-watch.utility-eEbQcj8t.js} +1 -1
- package/dist/assets/{story-capture-Drqhmo7i.js → story-capture-B8wfSf5s.js} +1 -1
- package/dist/assets/{story-documents-Cjoy-ydN.js → story-documents-Cm4jCkW5.js} +2 -2
- package/dist/assets/{story-documents.service-gVxcUtso.js → story-documents.service-BDvQCslK.js} +1 -1
- package/dist/assets/{story-documents.service-Csto-LsX.js → story-documents.service-Cgtg6rXn.js} +1 -1
- package/dist/assets/story-media-presence-SGlp_afL.js +1 -0
- package/dist/assets/{story-pixi-preview-uA6AevDw.js → story-pixi-preview-D62Q_vIW.js} +1 -1
- package/dist/assets/{story-presentation-DgAoj9Qt.js → story-presentation-CofUdEU7.js} +1 -1
- package/dist/assets/{story-three-preview-CQYi1rZ_.js → story-three-preview-B9O1wapP.js} +2 -2
- package/dist/assets/{studio-environment-DK0ke0m0.js → studio-environment-BIhqrtFc.js} +1 -1
- package/dist/assets/{surface-state-DlUcJe84.js → surface-state-DrM3wsrr.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-92aOVqyZ.js → syntactic-prop-specs-BGz0N7Dg.js} +1 -1
- package/dist/assets/{team-playtest.service-CGBismiY.js → team-playtest.service-CiE8UJAe.js} +1 -1
- package/dist/assets/{three-bdxPiUPb.js → three-BQfhEwUz.js} +1 -1
- package/dist/assets/{three-authoring-adapter-BuqO9MDt.js → three-authoring-adapter-COBwREQO.js} +1 -1
- package/dist/assets/three-authoring.service-C0azvoq8.js +2 -0
- package/dist/assets/{three-ingest-runtime-CwRnwvb0.js → three-ingest-runtime-BnRF_nJN.js} +1 -1
- package/dist/assets/three-integration-DeWYFf1x.js +2 -0
- package/dist/assets/three-integration.service-CoWCBTmg.js +1 -0
- package/dist/assets/{three-projection-core-BO23VKAP.js → three-projection-core-PQm-CO61.js} +1 -1
- package/dist/assets/{three-state-BhQOBgKC.js → three-state-C7khRIQE.js} +1 -1
- package/dist/assets/{three-story-capture.service-BAtrzxHq.js → three-story-capture.service-B0oiGIfp.js} +2 -2
- package/dist/assets/three-story-model-D7g2pqfJ.js +1 -0
- package/dist/assets/{three-viewport-presentation-CWanX03c.js → three-viewport-presentation-B_tBudM-.js} +5 -5
- package/dist/assets/transform-mode-request-DWM6BdRA.js +1 -0
- package/dist/assets/{transport-strip-CFLRAIQd.js → transport-strip-vgXGDgkI.js} +1 -1
- package/dist/assets/transport.header-CfVHXjrT.js +1 -0
- package/dist/assets/{tuples-BKzzn3tK.js → tuples-BnYrlQqS.js} +1 -1
- package/dist/assets/ui-board-document-B_-K9luq.js +2 -0
- package/dist/assets/{user-data-DfBtZvxw.js → user-data-CifDDvSr.js} +1 -1
- package/dist/assets/{utility-view-state-CL4NJh3n.js → utility-view-state-BPl8Asup.js} +1 -1
- package/dist/assets/{viewport-door-CuJjGYTz.js → viewport-door-BCXEYmon.js} +1 -1
- package/dist/assets/{viewport-root-presentation-CkSAEMH-.js → viewport-root-presentation-DJLpUuf0.js} +1 -1
- package/dist/assets/{viewport-surface-status-D3t-0oLs.js → viewport-surface-status-jwLhIK_M.js} +1 -1
- package/dist/assets/{webworkerAll-DCmB9rsA.js → webworkerAll-P6jePa6X.js} +1 -1
- package/dist/assets/{workspace-arrangement-C9uemwSK.js → workspace-arrangement-B_OcbQbj.js} +1 -1
- package/dist/assets/{world-documents-Dvn8e5I0.js → world-documents-Bx3j867R.js} +1 -1
- package/dist/assets/{world-root-stage-binding-BB7acZV_.js → world-root-stage-binding-LEhjWDkn.js} +1 -1
- package/dist/assets/{xstate-animation-binding-DctwT981.js → xstate-animation-binding-Dionc_fC.js} +1 -1
- package/dist/assets/{xstate-animation-meta-s4Vc8Wu3.js → xstate-animation-meta-XEmD_qc_.js} +1 -1
- package/dist-node/cli.js +16 -16
- package/package.json +16 -16
- package/dist/assets/CanvasSceneViewport-Z8OReqpB.js +0 -1
- package/dist/assets/EntityModelDocument-BltE1A7W.js +0 -1
- package/dist/assets/InspectorObjectPreview-BpttBw3o.js +0 -1
- package/dist/assets/Object3DDocumentToolbar-BHuuMZnS.js +0 -1
- package/dist/assets/Object3DDocumentViewport-ByDDwGJD.js +0 -2
- package/dist/assets/StageHost-D1Sz5aud.js +0 -2
- package/dist/assets/autoplay.service-DncOrn-K.js +0 -1
- package/dist/assets/blender-runtime-host-CcqXT39s.js +0 -4
- package/dist/assets/blender-runtime.document-DDW5jIJe.js +0 -12
- package/dist/assets/build-player.document-DJQLP4xM.js +0 -1
- package/dist/assets/component-board.service-yIS2UB-T.js +0 -2
- package/dist/assets/component-verbs.service-CJYq28Zw.js +0 -1
- package/dist/assets/configurations-BcYOQ7i-.js +0 -1
- package/dist/assets/deferred-ingest-play-DZiOEH9a.js +0 -2
- package/dist/assets/design-time-layers-DT4X-pJp.js +0 -1
- package/dist/assets/editor-api-CPh65aBN.js +0 -1
- package/dist/assets/game-document.service-CxfiFnxt.js +0 -1
- package/dist/assets/game-network-BPTyOFqA.js +0 -22
- package/dist/assets/gameplay-export-CRnHCUBb.js +0 -1
- package/dist/assets/gameplay-replay-yPaMxi2o.js +0 -1
- package/dist/assets/generation-jobs-Cy1oE-Ff.js +0 -1
- package/dist/assets/index-BPuw4yre.js +0 -1
- package/dist/assets/ingest-siblings-2QHhcCgA.js +0 -1
- package/dist/assets/instances.command-BJ-I9vtW.js +0 -1
- package/dist/assets/live-project-verbs-B7S-wGjC.js +0 -1
- package/dist/assets/network-observer.service-CjeDB1Id.js +0 -1
- package/dist/assets/object3d-document-session-registry-CWaOPDYg.js +0 -2
- package/dist/assets/play.command-C9QyYFgv.js +0 -2
- package/dist/assets/r3f-design-session-Cyy1sDGH.js +0 -2
- package/dist/assets/stage-keyboard-G6HMStmP.js +0 -1
- package/dist/assets/stage-overlay-set-ChHqsFiR.js +0 -1
- package/dist/assets/stage-transform-tools-BM9u9Awe.js +0 -1
- package/dist/assets/story-media-presence-CYc2fP4y.js +0 -1
- package/dist/assets/three-authoring.service-CMym8IbB.js +0 -2
- package/dist/assets/three-integration-BHoulbny.js +0 -2
- package/dist/assets/three-integration.service-BlgF9hV3.js +0 -1
- package/dist/assets/three-story-model-D_bo7Gl-.js +0 -1
- package/dist/assets/transform-mode-request-Bg6T_rOC.js +0 -1
- package/dist/assets/transport.header-B3dK1KaC.js +0 -1
- package/dist/assets/ui-board-document-DMxgQ-9n.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{
|
|
1
|
+
import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{cu as L,ca as U,cf as R,cv as W,du as M,ak as a,a6 as b,fu as w,b5 as N,aT as P,bG as G,a5 as J,bC as V,fv as _}from"./index-V4J7xfRg.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{d as K}from"./asset-editor-persistence-Duoq7o22.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";const S=new Map,q=new Set;function I(){for(const e of q)e()}function Q(e,l){const n=S.get(e);if(n?.status==="running")return n;const f={id:e,label:l,stage:"fetch",loaded:0,total:0,status:"running",controller:new AbortController};return S.set(e,f),I(),f}function v(e,l){const n=S.get(e);n&&(Object.assign(n,l),I())}const X={width:"100%"};function Y(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function ce({online:e,mode:l="full",showPreview:n=!1,onResolved:f}){const[h,z]=r.useState([]),[o,A]=r.useState(null),[$,y]=r.useState(!0),[B,D]=r.useState(null),[m,F]=r.useState(null),[O,p]=r.useState(!1),[T,x]=r.useState(!1),[j,E]=r.useState(!1),[c,g]=r.useState("idle");r.useEffect(()=>{if(l==="preview"){y(!1);return}let s=!1;return y(!0),D(null),L(e.source,e.id).then(i=>{s||(z(i),i.length>0&&A(i[0]))}).catch(i=>{s||(z([]),D(i instanceof U?R(i.code):i instanceof Error?i.message:"Asset delivery metadata is unavailable while offline."))}).finally(()=>{s||y(!1)}),()=>{s=!0}},[l,e.source,e.id]);const k=e.source==="local"&&(e.type==="model"||e.type==="animation"||e.type==="source");r.useEffect(()=>{if(l==="inspector"&&!n){p(!1);return}let s=!1;if(F(null),x(!1),E(!1),!k){p(!1);return}return p(!0),W(e.source,e.id).then(i=>{s||(F(i),x(!i))}).catch(()=>{s||x(!0)}).finally(()=>{s||p(!1)}),()=>{s=!0}},[l,e.id,e.source,n,k]);const H=r.useCallback(async()=>{if(!o)return;const s=`single:${e.source}:${e.id}`,i=Q(s,e.name);v(s,{stage:"fetch",loaded:0,total:o.sizeBytes??0,status:"running"}),g("downloading");try{const d={source:e.source,id:e.id,name:e.name,url:o.url,format:o.format,jobId:s,signal:i.controller.signal};o.includes&&(d.includes=o.includes);const u=await K(d);u.ok&&u.path?(v(s,{stage:"commit",loaded:o.sizeBytes??1,total:o.sizeBytes??1,status:u.alreadyExists?"skipped":"imported",message:u.path}),g("done"),M(`${e.name} added to Content — drag it from there into the viewport to place it.`),f?.(`/${u.path}`)):(v(s,{status:"failed",message:u.error??"The import was rejected."}),g("error"))}catch(d){v(s,{status:i.controller.signal.aborted?"cancelled":"failed",message:d instanceof Error?d.message:String(d)}),g("error")}},[e,o,f]),C=t.jsx("img",{src:j?"/__editor/asset-library/local-placeholder.svg":e.thumbnailUrl,alt:j?`${e.name} preview unavailable`:e.name,onError:()=>E(!0),style:{maxWidth:"100%",maxHeight:"100%",objectFit:"contain"}});return t.jsxs("div",{style:{padding:8,display:"flex",flexDirection:"column",gap:8},children:[l!=="preview"&&t.jsx("div",{style:{fontWeight:600,fontSize:12,color:a.content.primary,wordBreak:"break-all"},children:e.name}),(l!=="inspector"||n)&&t.jsxs(t.Fragment,{children:[t.jsx("div",{style:{width:"100%",height:"100%",minHeight:l==="inspector"?160:240,background:a.surface.shell,borderRadius:a.shape.small,overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center"},children:O?t.jsxs("div",{style:{color:a.content.muted,fontSize:11},children:[t.jsx(b,{icon:w,spin:!0,style:{marginRight:5}}),"Loading Asset Editor preview…"]}):m?t.jsx(r.Suspense,{fallback:t.jsx("span",{style:{color:a.content.muted},children:"Loading preview…"}),children:t.jsx(N,{route:"model-preview",documentId:"",assetPath:m.path,...m.materialPath?{materialPath:m.materialPath}:{},displayName:e.name,active:!0,whenUnregistered:C})}):C}),j&&t.jsx("div",{role:"status",style:{color:a.content.dim,fontSize:10},children:"The catalog preview could not be loaded; showing the typed fallback."}),T&&t.jsx("div",{style:{color:a.content.dim,fontSize:10},children:"Interactive preview is unavailable for this variant; showing its catalog thumbnail."})]}),l!=="preview"&&t.jsxs(t.Fragment,{children:[t.jsx(P,{label:"Info",children:t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:a.content.dim,marginBottom:2},children:"Source"}),t.jsx("div",{style:{fontSize:11,color:a.content.primary},children:e.source==="polyhaven"?"Poly Haven":e.source==="ambientcg"?"ambientCG":"Full Catalog"})]}),t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:a.content.dim,marginBottom:2},children:"Type"}),t.jsx("div",{style:{fontSize:11,color:a.content.primary},children:e.type})]}),e.tags.length>0&&t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:a.content.dim,marginBottom:2},children:"Tags"}),t.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:3},children:e.tags.slice(0,12).map(s=>t.jsx("span",{style:{fontSize:10,padding:"1px 5px",background:a.surface.raised,borderRadius:a.shape.small,color:a.content.muted},children:s},s))})]}),e.author&&t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:a.content.dim,marginBottom:2},children:"Author"}),t.jsx("div",{style:{fontSize:11,color:a.content.primary},children:e.author})]})]})}),t.jsx(P,{label:"Add to Project",children:t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:$?t.jsxs("div",{style:{fontSize:11,color:a.content.dim},children:[t.jsx(b,{icon:w,spin:!0,style:{marginRight:4}}),"Loading options..."]}):B?t.jsxs("div",{role:"alert",style:{fontSize:11,color:a.content.muted},children:["Delivery unavailable: ",B]}):h.length>0?t.jsxs(t.Fragment,{children:[t.jsx(G,{"aria-label":"Asset delivery",value:o?h.indexOf(o):0,onChange:s=>A(h[Number(s.target.value)]??null),style:X,children:h.map((s,i)=>t.jsxs("option",{value:i,children:[s.label,s.sizeBytes?` (${Y(s.sizeBytes)})`:""]},i))}),t.jsxs(J,{type:"button",variant:c==="done"?"success":"primary",size:"comfortable",onClick:H,disabled:c==="downloading",style:{width:"100%"},children:[t.jsx(b,{icon:c==="done"?V:c==="downloading"?w:_,spin:c==="downloading",style:{fontSize:10}}),c==="done"?"Downloaded":c==="downloading"?"Downloading...":c==="error"?"Retry":"Add to Project"]})]}):t.jsx("div",{role:"status",style:{fontSize:11,color:a.content.dim},children:e.source==="local"?"No healthy SSD or cloud delivery is available for this asset.":"This provider has no compatible remote delivery for the selected asset."})})}),t.jsxs("div",{style:{fontSize:10,color:a.content.dim,padding:"4px 0"},children:["License: ",e.license??"CC0 (Public Domain)"]})]})]})}export{ce as OnlineAssetDetail};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{l as
|
|
1
|
+
import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{l as T}from"./configurations-CRTYw0r9.js";import{c as O,P as G,b as _,d as L,s as B,a as $}from"./run-selection-AyelFc9T.js";import{a5 as M,a6 as g,gE as V,aK as v,eF as Y,bz as S,bA as R,gF as q,gG as H,r as P,de as w,a7 as p,gH as I,gI as D,aL as N}from"./index-V4J7xfRg.js";import{r as l}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{i as K,g as U,d as W}from"./active-ingest-D_ryI_R4.js";import"./client-DNXj_opT.js";import"./ingest-source-persistence-CQOJeGhj.js";import"./capability-coverage-wd6bAhv3.js";import{w as X,x as C,s as J,y as Q,z as k,f as Z,j as E,e as ee,l as se,p as te}from"./game-network-CAH_Jsh6.js";const z="play-control",F=4;function ae(s){return Math.min(F,Math.max(1,Math.floor(s)))-1}function ne(s){return s+1}function A(s){return s===1?"1 instance":`${s} instances`}function re(){const s=l.useSyncExternalStore(X,C,C),[n,a]=l.useState(!1),r=l.useRef(null),o=ne(s);return e.jsxs("div",{className:"volter-playbar-popover-anchor",children:[e.jsxs(M,{ref:r,variant:"ghost",size:"comfortable","aria-haspopup":"menu","aria-expanded":n,"aria-controls":n?"volter-player-count-menu":void 0,onClick:()=>a(i=>!i),title:`${A(o)} — choose how many runtimes Play mounts side by side`,children:[e.jsx(g,{icon:V,size:"md"}),e.jsx(v,{children:"Instances"}),e.jsx(v,{variant:"code",children:o}),e.jsx(Y,{direction:"down"})]}),n&&e.jsx(S,{id:"volter-player-count-menu",anchorRef:r,gap:4,onDismiss:()=>a(!1),children:Array.from({length:F},(i,c)=>c+1).map(i=>e.jsx(R,{role:"menuitemradio","aria-checked":i===o,onSelect:()=>{J(ae(i)),a(!1)},children:A(i)},i))})]})}function oe({regime:s}){if(!s)return null;const n="Play edits are temporary unless explicitly committed to source.";return e.jsx("span",{role:"img","aria-label":n,className:"volter-play-edit-regime","data-testid":"play-edit-regime","data-regime":s,title:n,children:e.jsx(g,{icon:p.status.warning,size:"sm"})})}function m({label:s,icon:n,onClick:a,title:r=s,disabled:o=!1,pressed:i,variant:c="ghost",testId:t}){return e.jsx(N,{"aria-label":s,"aria-pressed":i,"data-testid":t,disabled:o,size:"comfortable",variant:c,onClick:u=>{u.currentTarget.blur(),a()},title:r,children:e.jsx(g,{icon:n,size:"md"})})}function ie({state:s,exporting:n=!1,restartReason:a=null,playEditRegime:r=null,onPlay:o,onPause:i,onStep:c,onRestart:t,onStop:u,instances:b=null,picker:h=null,options:x=null,placement:d="launcher"}){const f=s!=="stopped",j=s==="paused";return d==="runtime"&&!f?null:e.jsxs(w,{role:"toolbar","aria-label":"Game transport",className:"volter-playbar",gap:2,align:"center",children:[d==="launcher"&&e.jsxs(e.Fragment,{children:[h,x,b!==null&&e.jsx(re,{}),e.jsx(m,{label:"Play",title:f?"Exit Play mode":"Play (run game)",icon:p.transport.play,pressed:f,testId:z,onClick:o})]}),d==="runtime"&&e.jsxs(e.Fragment,{children:[e.jsx(m,{label:"Pause",title:j?"Resume":"Pause",icon:p.transport.pause,disabled:!f||n,pressed:j,onClick:i}),e.jsx(m,{label:"Step one frame",icon:p.transport.step,disabled:!j||n,onClick:c}),e.jsx(I,{}),e.jsx(m,{label:"Restart Game",icon:p.transport.restart,disabled:!f||n,variant:a?"primary":"ghost",testId:"restart-game",onClick:t,title:a??"Restart game (dispose and remount every root without reloading the editor)"}),e.jsx(m,{label:"Stop",icon:p.transport.stop,disabled:!f,onClick:u}),f&&e.jsxs(e.Fragment,{children:[e.jsx(I,{}),e.jsx(oe,{regime:r})]})]})]})}function Pe({placement:s="launcher"}){const n=l.useSyncExternalStore(q,H),{session:a}=P();l.useSyncExternalStore(a.subscribe,a.version,a.version);const r=a.playState(),o=l.useSyncExternalStore(Q,k,k),[,i]=l.useState(0),c=ce(),t=K()?U():null;if(t)return e.jsxs(w,{role:"toolbar","aria-label":"Game transport",className:"volter-playbar",gap:2,align:"center",children:[e.jsx(m,{label:s==="runtime"?t.playing?"Pause ingested game":"Resume ingested game":"Run ingested game",title:t.playing?"Pause ingested game":"Run ingested game",icon:t.playing?p.transport.pause:p.transport.play,pressed:t.playing,testId:z,onClick:()=>{t.playing?t.pause():t.play(),i(d=>d+1)}}),s==="runtime"&&W()&&e.jsx(m,{label:"Stop",title:"Stop the game and return to the scene",icon:p.transport.stop,onClick:()=>E()}),s==="runtime"&&t.canStep&&e.jsx(m,{label:"Step ingested game",title:"Advance the ingested game one frame",icon:p.transport.step,onClick:()=>{t.step(),i(d=>d+1)}})]});const u=c.configurations.find(d=>d.id===c.selectedId)??null,b=u?.kind==="compound"?u.instances??null:null,h=async()=>{const d=await $();if(!d.ok){P().notify({tone:"error",title:d.title,detail:d.detail});return}d.started&&c.refresh(),await ee()},x=()=>{E(),B().then(()=>c.refresh())};return e.jsx(ie,{placement:s,exporting:n,state:r,restartReason:o,playEditRegime:a.playEditRegime(),instances:b,options:e.jsx(le,{}),picker:c.configurations.length>1?e.jsx(de,{run:c,disabled:r!=="stopped"}):null,onPlay:()=>{r!=="stopped"?x():h()},onPause:()=>{r==="paused"?se():te()},onStep:()=>Z(),onRestart:()=>void h(),onStop:()=>x()})}function le(){const{settings:s}=P(),n=l.useSyncExternalStore(s.subscribe,()=>s.get("volter.play.keepPanelsVisible")===!0),[a,r]=l.useState(!1),o=l.useRef(null);return e.jsxs(e.Fragment,{children:[e.jsx(N,{ref:o,"aria-label":"Play options",title:"Play options","aria-expanded":a,"aria-haspopup":"menu",onClick:()=>r(!a),children:e.jsx(g,{icon:D})}),a&&e.jsx(S,{anchorRef:o,onDismiss:()=>r(!1),children:e.jsx(R,{role:"menuitemcheckbox","aria-checked":n,onSelect:()=>{s.set("volter.play.keepPanelsVisible",!n),r(!1)},children:"Keep panels visible during Play"})})]})}const y=G;function ce(){const[s,n]=l.useState([]),[a,r]=l.useState(O),o=l.useCallback(async()=>{const u=await T().catch(()=>[]);n(u)},[]);l.useEffect(()=>{o()},[o]);const i=l.useMemo(()=>[{id:y,kind:y,role:"run",describe:"Mount every root in the host",status:"stopped"},...s.filter(u=>u.role==="run")],[s]),c=_(s,a),t=l.useCallback(u=>{r(u),L(u)},[]);return{configurations:i,selectedId:c,select:t,refresh:o}}function de({run:s,disabled:n}){const a=l.useRef(null),[r,o]=l.useState(!1),i=s.configurations.find(t=>t.id===s.selectedId),c=i?.id===y?"Play":i?.id??"Play";return e.jsxs("div",{className:"volter-playbar-popover-anchor",children:[e.jsxs(M,{ref:a,variant:"ghost",size:"compact","aria-haspopup":"menu","aria-expanded":r,"aria-controls":r?"volter-run-configuration-menu":void 0,"data-testid":"run-configuration-picker",disabled:n,onClick:()=>o(t=>!t),title:"Which configuration Play starts (the manifest's run-role configurations)",children:[e.jsx(v,{variant:"code",children:c}),e.jsx(g,{icon:D,size:"sm"})]}),r&&e.jsx(S,{id:"volter-run-configuration-menu",anchorRef:a,align:"start",gap:4,onDismiss:()=>o(!1),children:s.configurations.map(t=>e.jsxs(R,{role:"menuitemradio","aria-checked":t.id===s.selectedId,"data-testid":`run-configuration-${t.id}`,title:t.describe??void 0,onSelect:()=>{s.select(t.id),o(!1)},children:[t.id===y?"Play":`${t.id} · ${t.kind}`,t.status==="running"?" ●":""]},t.id))})]})}export{Pe as P};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as b}from"./jsx-runtime-DPjLkJKQ.js";import{r as d}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{
|
|
1
|
+
import{a as b}from"./jsx-runtime-DPjLkJKQ.js";import{r as d}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{ak as O}from"./index-V4J7xfRg.js";import{r as L}from"./studio-environment-BIhqrtFc.js";import{Q as x,V as y,d as C,m as j}from"./three.quarks.esm-C_HmSKXo.js";import{p as z}from"./project-provenance-BGnJXJwa.js";import{O as Q}from"./StageHost-Bor1eHEO.js";import{a as M}from"./three-contract-Dkt6PmWY.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-CifDDvSr.js";import"./workspace-arrangement-B_OcbQbj.js";import"./KTX2Loader-CaqVE6nY.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./three-state-C7khRIQE.js";import"./editor-shell-store-DckLm6m8.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./editor-layers-CjeYrUlm.js";import"./entity-object-V13bGmay.js";import"./standard-viewport-dressing-uhv_3JvQ.js";import"./content-bounds-D5pXeHJN.js";import"./hierarchy-marks-B1jSqxSv.js";import"./preview-renderer-BrYNFV1p.js";import"./renderer-ownership-BovSEcLv.js";import"./live-mixers-B-bwLZ7c.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-8o57YSZW.js";import"./three-viewport-presentation-B_tBudM-.js";import"./clip-planes-CnAI6DZn.js";import"./three-BQfhEwUz.js";import"./component-instance-root-Cw_-ajBX.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-chePRlH7.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three-integration-DeWYFf1x.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-BUr1U8lU.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-DNCOGA3i.js";import"./viewport-door-BCXEYmon.js";import"./asset-preview-BS71mXsZ.js";import"./bitmap-label-Ct4k6ehY.js";import"./scene-framing-DzSL2Cld.js";import"./source-object3d-authoring-adapter-BQnQ3Qzg.js";import"./three-projection-core-PQm-CO61.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-vgXGDgkI.js";import"./viewport-surface-status-jwLhIK_M.js";function $(r){const t=[],e=new Set;return r.traverse(o=>{if(o.type!=="ParticleEmitter")return;const i=o.system;!i||typeof i.getRendererSettings!="function"||e.has(i)||(e.add(i),t.push(i))}),t}const S=new WeakMap;function h(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function E(r){return h(r)?r:null}function w(r,t){t(r);for(const e of r.children??[])w(e,t)}function V(r){if(!h(r))return!1;const t=E(r.object);if(!t)return!1;let e=!1;return w(t,o=>{o.type==="ParticleEmitter"&&h(o.ps)&&o.ps.version!==void 0&&(e=!0)}),e}function B(r){const t=new Map,e=E(r.object);return e&&w(e,o=>{typeof o.uuid=="string"&&t.set(o.uuid,o)}),t}function F(r){const t=new x().parse(r.json),e=B(r.json),o=$(t),i=new Map(o.map(n=>[n.emitter,n])),p=new Map;if(t.traverse(n=>{const f=i.get(n);if(!f)return;const s=e.get(n.uuid);if(!s?.ps)throw new Error(`Native Quarks emitter ${n.name||n.uuid} has no matching JSON node.`);p.set(n,{system:f,json:s})}),p.size===0)throw new Error("The Quarks document contains no loadable emitter.");const m={root:t,originalText:r.text,json:r.json,emitters:p,dirty:!1};return S.set(t,m),m}function J(r){const t=S.get(r);if(!t)throw new Error("Object3D is not a native three.quarks JSON document.");return t}function q(r){for(const t of r.emitters.values())t.system.dispose();S.delete(r.root)}function G(r){const t=J(r);return t.dirty?`${JSON.stringify(t.json,null,2)}
|
|
2
2
|
`:t.originalText}const U=new Set(["particles.duration","particles.looping","particles.prewarm","particles.worldSpace","particles.startLife","particles.startSpeed","particles.startRotation","particles.startSize","particles.startColor","particles.emissionOverTime","particles.emissionOverDistance"]);function W(){return[{path:"particles.duration",label:"Duration",type:"number",group:"Emission"},{path:"particles.looping",label:"Looping",type:"boolean",group:"Emission"},{path:"particles.prewarm",label:"Prewarm",type:"boolean",group:"Emission"},{path:"particles.emissionOverTime",label:"Rate over time",type:"json",group:"Emission"},{path:"particles.emissionOverDistance",label:"Rate over distance",type:"json",group:"Emission"},{path:"particles.startLife",label:"Lifetime",type:"json",group:"Start"},{path:"particles.startSpeed",label:"Speed",type:"json",group:"Start"},{path:"particles.startRotation",label:"Rotation",type:"json",group:"Start"},{path:"particles.startSize",label:"Size",type:"json",group:"Start"},{path:"particles.startColor",label:"Color",type:"json",group:"Start"},{path:"particles.worldSpace",label:"World space",type:"boolean",group:"Simulation"},{path:"particles.shape",label:"Shape",type:"string",readonly:!0,group:"Shape"},{path:"particles.behaviors",label:"Modules",type:"json",readonly:!0,group:"Behavior"},{path:"particles.renderMode",label:"Native render mode",type:"number",readonly:!0,group:"Renderer"}]}function u(r,t){if(!h(r)||typeof r.type!="string")throw new Error(`${t} must be a native quarks function JSON object with a type.`);return r}function k(r,t){const{system:e}=r;switch(t){case"particles.duration":return e.duration;case"particles.looping":return e.looping;case"particles.prewarm":return e.prewarm;case"particles.worldSpace":return e.worldSpace;case"particles.startLife":return e.startLife.toJSON();case"particles.startSpeed":return e.startSpeed.toJSON();case"particles.startRotation":return e.startRotation.toJSON();case"particles.startSize":return e.startSize.toJSON();case"particles.startColor":return e.startColor.toJSON();case"particles.emissionOverTime":return e.emissionOverTime.toJSON();case"particles.emissionOverDistance":return e.emissionOverDistance.toJSON();case"particles.shape":return e.emitterShape.type;case"particles.behaviors":return e.behaviors.map(o=>o.type);case"particles.renderMode":return e.renderMode;default:return}}function g(r){return r.slice(10)}function N(r,t,e){const{system:o}=r;switch(t){case"particles.duration":{const i=Number(e);if(!Number.isFinite(i)||i<=0)throw new Error("Particle duration must be a positive finite number.");o.duration=i;break}case"particles.looping":o.looping=!!e;break;case"particles.prewarm":o.prewarm=!!e;break;case"particles.worldSpace":o.worldSpace=!!e;break;case"particles.startLife":o.startLife=y(u(e,"Lifetime"));break;case"particles.startSpeed":o.startSpeed=y(u(e,"Speed"));break;case"particles.startRotation":o.startRotation=j(u(e,"Rotation"));break;case"particles.startSize":o.startSize=j(u(e,"Size"));break;case"particles.startColor":o.startColor=C(u(e,"Color"));break;case"particles.emissionOverTime":o.emissionOverTime=y(u(e,"Rate over time"));break;case"particles.emissionOverDistance":o.emissionOverDistance=y(u(e,"Rate over distance"));break;default:throw new Error(`Particle field ${t} is read-only.`)}r.json.ps[g(t)]=e,o.restart()}function H(r,t,e,o){N(r,t,e),r.json.ps[g(t)]=o}function I(r){return r===void 0?void 0:JSON.parse(JSON.stringify(r))}const _=({root:r,defaultAdapter:t,commit:e})=>{const o=J(r),i=new Set,p=()=>{for(const s of i)s()},m=s=>{const a=M(t.hierarchy,s);return a?o.emitters.get(a)??null:null},n={properties:s=>[...t.inspector?.properties(s)??[],...m(s)?W():[]],get:(s,a)=>{const c=m(s);return c&&a.startsWith("particles.")?k(c,a):t.inspector?.get(s,a)},set:async(s,a,c)=>{const l=m(s);if(!l||!U.has(a)){await t.inspector?.set(s,a,c);return}const v=k(l,a),T=g(a),R=I(l.json.ps?.[T]),P=o.dirty;try{N(l,a,c),o.dirty=!0,p(),await e(`Edit ${l.system.emitter.name||"Particle Emitter"}`)}catch(D){throw H(l,a,v,R),o.dirty=P,p(),D}}};return{adapter:{capabilities:{...t.capabilities,inspectorFields:!0,persist:!0},provenance:{source:"document",label:"three.quarks JSON",detail:"The hierarchy and emitter fields are the native three.quarks Object3D JSON document."},hierarchy:t.hierarchy,...t.selection?{selection:t.selection}:{},...t.transforms?{transforms:t.transforms}:{},inspector:n,subscribe:s=>{i.add(s);const a=t.subscribe?.(s)??(()=>{});return()=>{i.delete(s),a()}}},dispose:()=>i.clear()}};async function er(r,t){const e=await fetch(L(r),{cache:"no-store",...t?{signal:t}:{}});if(!e.ok)throw new Error(`Could not load ${r}: HTTP ${e.status}.`);const o=await e.text();let i;try{i=JSON.parse(o)}catch{return null}return V(i)?{text:o,json:i,projectPath:z(r)}:null}function or({documentId:r,assetPath:t,displayName:e,active:o,source:i}){const[p,m]=d.useState(null),[n,f]=d.useState(null);d.useEffect(()=>{if(!o){m(null);return}let c=null;try{c=F(i),m(c),f(null)}catch(l){f(l instanceof Error?l.message:String(l))}return()=>{c&&q(c)}},[o,i]);const s=d.useCallback(()=>{if(!p)throw new Error(`Particle asset ${t} is not loaded.`);return{root:p.root,dispose(){}}},[p,t]),a=d.useMemo(()=>({label:`Edit ${e}`,resources:[{path:i.projectPath,contentType:"application/json",serialize:({root:c})=>G(c)}]}),[e,i.projectPath]);return n?b.jsx("div",{role:"alert",style:{padding:20,color:O.semantic.danger},children:n}):p?b.jsx(Q,{documentId:r,sourcePath:t,displayName:e,build:s,active:o,assetType:"particles",persistence:a,authoring:_,dressing:{grid:!0}}):b.jsxs("div",{style:{padding:20,color:O.content.muted},children:["Loading ",e,"…"]})}export{or as QuarksAssetDocument,V as isNativeQuarksJson,er as loadNativeQuarksJsonSource};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{
|
|
1
|
+
import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{T as B,dA as V,dB as F,dC as w,dD as I,d8 as A,a5 as C,aL as j,a6 as S,dE as T,dF as W,bw as D,bG as H,dG as P,bz as G,aM as N,bB as z,bA as f}from"./index-V4J7xfRg.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{s as K,g as L,a as X,b as Y,c as _,d as M,f as $,t as q}from"./react-story-board-CT1_3sk_.js";const y={fill:null,desktop:{width:1440,height:900},tablet:{width:768,height:1024},mobile:{width:390,height:844}};function J({boardViewport:e,containerRef:r,selectViewport:n,viewportValue:d}){return t.jsxs(t.Fragment,{children:[t.jsxs(H,{"aria-label":"Responsive viewport",title:e?.locked?"Viewport is locked by this story’s globals.viewport":"Responsive viewport",value:d,disabled:e?.locked===!0,onChange:o=>n(o.target.value),className:"volter-react-viewport-select",children:[t.jsx("option",{value:"fill",children:"Responsive"}),e?e.choices.map(o=>t.jsxs("option",{value:o.id,children:[o.label," · ",o.width,"×",o.height]},o.id)):t.jsxs(t.Fragment,{children:[t.jsx("option",{value:"desktop",children:"Desktop · 1440×900"}),t.jsx("option",{value:"tablet",children:"Tablet · 768×1024"}),t.jsx("option",{value:"mobile",children:"Mobile · 390×844"})]})]}),e&&t.jsx(j,{"aria-label":"Rotate viewport",title:e.locked?"Viewport is locked by this story’s globals.viewport":"Rotate viewport",size:"comfortable",disabled:e.locked,onClick:()=>q(r.current),children:t.jsx(S,{icon:P,size:"md"})})]})}function at({containerRef:e,context:r,boardOnly:n=!1}){const d=B();h.useSyncExternalStore(d.subscribe,d.getSnapshot);const o=h.useSyncExternalStore(V,F),l=h.useSyncExternalStore(K,L),u=h.useSyncExternalStore(X,()=>Y(e.current),()=>null),m=h.useCallback(i=>{const s=e.current;if(!s)return;const a=Math.min(4,Math.max(.1,i)),p=s.clientWidth/2,v=s.clientHeight/2,g=(p-o.x)/o.zoom,Z=(v-o.y)/o.zoom;w(p-g*a,v-Z*a,a)},[e,o]),c=h.useCallback(()=>{const i=e.current,s=[...d.selectedEntityIds].at(-1);if(!i||!s)return;const a=r?.adapter.rects?.rect(s);if(!a||a.width<=0||a.height<=0)return;const p=Math.max(1,i.clientWidth-96),v=Math.max(1,i.clientHeight-96),g=Math.min(4,Math.max(.1,Math.min(p/a.width,v/a.height)));w(i.clientWidth/2-(a.x+a.width/2)*g,i.clientHeight/2-(a.y+a.height/2)*g,g)},[e,r,d]),x=h.useCallback(i=>{const s=e.current;if(u){_(s,i==="fill"?null:i);return}const a=y[i];if(!s||a===null){M(null,null),w(0,0,1);return}M(a.width,a.height);const p=Math.min(1,Math.max(.1,Math.min((s.clientWidth-96)/a.width,(s.clientHeight-96)/a.height)));w((s.clientWidth-a.width*p)/2,(s.clientHeight-a.height*p)/2,p)},[u,e]),k=h.useCallback(()=>{const i=e.current;i&&$(i)},[e]),b=u!==null,R=r?.kind==="dom"&&!!r.adapter.rects;if(n?!b:!R)return null;const E=u?u.selectedViewportId??"fill":Object.entries(y).find(([,i])=>i===null?l.width===null:i.width===l.width&&i.height===l.height)?.[0]??"fill";return t.jsxs(t.Fragment,{children:[!b&&l.width!==null&&l.height!==null&&t.jsx("div",{"data-testid":"react-canvas-device-frame",style:{position:"absolute",left:0,top:0,zIndex:0,width:l.width,height:l.height,transform:I(o),transformOrigin:"0 0",pointerEvents:"none",background:"#fff",boxShadow:"0 0 0 1px #ffffff40, 0 8px 30px #0009"}}),t.jsxs(A,{label:n?"2D component board view":"React canvas view","data-testid":n?"canvas-board-zoom-controls":"react-canvas-zoom-controls",...n?{"data-board-zoom":""}:{},"data-volter-canvas-navigation-ignore":"true",className:"volter-react-canvas-controls",children:[!n&&t.jsx(J,{boardViewport:u,containerRef:e,selectViewport:x,viewportValue:E}),b&&t.jsx(C,{variant:"ghost","aria-label":"Fit story board",title:"Fit all stories",size:"comfortable",onClick:k,children:"Fit board"}),t.jsx(j,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>m(o.zoom/1.2),children:t.jsx(S,{icon:T,size:"md"})}),t.jsx(Q,{zoom:o.zoom,zoomTo:m,...b?{fit:k}:{},...!n&&d.selectedEntityIds.size>0?{toSelection:c}:{}}),t.jsx(j,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>m(o.zoom*1.2),children:t.jsx(S,{icon:W,size:"md"})}),!n&&t.jsx(j,{"aria-label":"Zoom to selection",title:"Zoom to selection",size:"comfortable",onClick:c,children:t.jsx(S,{icon:D,size:"md"})})]})]})}function Q({zoom:e,zoomTo:r,fit:n,toSelection:d}){const[o,l]=h.useState(!1),u=h.useRef(null),m=c=>()=>{c(),l(!1)};return t.jsxs(t.Fragment,{children:[t.jsxs(C,{ref:u,variant:"ghost","aria-label":"Zoom","aria-haspopup":"menu","aria-expanded":o,title:"Zoom",size:"comfortable",onClick:()=>l(!o),children:[Math.round(e*100),"%"]}),o&&t.jsxs(G,{anchorRef:u,align:"end",clamp:!0,"aria-label":"Zoom",onDismiss:()=>l(!1),children:[t.jsx("div",{style:{padding:"4px 8px"},children:t.jsx(N,{"aria-label":"Zoom percentage",defaultValue:String(Math.round(e*100)),onKeyDown:c=>{if(c.key!=="Enter")return;const x=Number.parseFloat(c.currentTarget.value);Number.isFinite(x)&&x>0&&(r(x/100),l(!1))}})}),t.jsx(z,{}),t.jsx(f,{onSelect:m(()=>r(e*1.2)),children:"Zoom in"}),t.jsx(f,{onSelect:m(()=>r(e/1.2)),children:"Zoom out"}),n?t.jsx(f,{onSelect:m(n),children:"Zoom to fit"}):null,d?t.jsx(f,{onSelect:m(d),children:"Zoom to selection"}):null,t.jsx(z,{}),[.5,1,2].map(c=>t.jsx(f,{onSelect:m(()=>r(c)),children:`Zoom to ${c*100}%`},c))]})]})}export{at as R};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as l}from"./jsx-runtime-DPjLkJKQ.js";import{r as u}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{af as st,aM as Ze,a0 as St,hX as he,gi as Qe,c_ as Et,cS as de,r as qe,c4 as $n,jL as Je,jM as Bn,cD as Yn,jN as ze,jO as De,jP as Ie,aL as Oe,a1 as Le,jQ as Hn,gH as Gn,jR as An,jS as Kn,jT as Nn,jU as K,eY as _n,K as Wn,ax as Vn,cA as Un,dG as Zn,dH as Qn,fx as qn,jV as re,jW as tn,fJ as T,jX as ue,fM as xt,jY as se,jZ as Dt,j_ as zt,fK as Jn,fL as Me,fN as to,j$ as eo,k0 as no,k1 as oo,k2 as io,k3 as ro,k4 as so,k5 as Te,k6 as ao,k7 as lo,k8 as co,k9 as uo,ka as po,kb as fo,kc as xo,eU as en,fI as Fe,kd as ho,ke as yo,kf as go,kg as vo,dd as mo,kh as bo,aA as nn,ki as wo,kj as So,kk as Eo,kl as ko,km as Co,aB as jo,fz as Ro}from"./index-CvGsVzTo.js";import{s as Po,i as zo,r as Xe}from"./eyedropper-session-bjPXnfeX.js";import{a as Do,p as Io}from"./layered-pick-BaxBYi7u.js";import{z as Oo,j as Lo}from"./react-story-board-6-BjI32N.js";import{v as ye}from"./viewport-editor-controls-BYaAZ_Ku.js";import{l as Mo}from"./inspect-DxfAFkho.js";const $e=new WeakMap;let Be=0;function yt(e){let o=$e.get(e);return o||(o={guides:[],listeners:new Set,revision:0},$e.set(e,o)),o}function Vt(e){e.revision+=1;for(const o of e.listeners)o()}function To(e){return yt(e).guides}function Fo(e){return yt(e).revision}function Xo(e,o){const n=yt(e);return n.listeners.add(o),()=>n.listeners.delete(o)}function qi(e,o,n){Be+=1;const d=yt(e),r=`canvas-guide-${Be}`;return d.guides=[...d.guides,{id:r,axis:o,value:n}],Vt(d),r}function Ji(e,o,n){const d=yt(e),r=d.guides.map(h=>h.id===o?{...h,value:n}:h);r.every((h,s)=>h===d.guides[s])||(d.guides=r,Vt(d))}function tr(e,o){const n=yt(e),d=n.guides.filter(r=>r.id!==o);d.length!==n.guides.length&&(n.guides=d,Vt(n))}function er(e){const o=yt(e);o.guides.length!==0&&(o.guides=[],Vt(o))}const pe=new WeakMap,fe=new Set;let on=0;function ht(e){return pe.get(e)??null}function $o(e,o){o?pe.set(e,o):pe.delete(e),on+=1;for(const n of fe)n()}function Bo(e){return fe.add(e),()=>fe.delete(e)}function Yo(){return on}const rn="canvasCreateNode";function Ho(){return qe().projectLocalState.read(rn)??{favorites:[],recent:[]}}function Ye(e){qe().projectLocalState.write(rn,e)}function sn(e,o){u.useEffect(()=>{const n=r=>{e.current?.contains(r.target)||o()},d=r=>{r.key==="Escape"&&o()};return document.addEventListener("pointerdown",n),document.addEventListener("keydown",d),()=>{document.removeEventListener("pointerdown",n),document.removeEventListener("keydown",d)}},[e,o])}function Go({state:e,onClose:o}){const[n,d]=u.useState("menu");return n==="create"?l.jsx(No,{state:e,onClose:o}):n==="instantiate"?l.jsx(_o,{state:e,onClose:o}):l.jsx(Ao,{state:e,onClose:o,onPick:d})}function Ao({state:e,onClose:o,onPick:n}){const d=u.useRef(null);return sn(d,o),l.jsx(he,{children:l.jsxs(Qe,{ref:d,"aria-label":"Add node here","data-testid":"viewport-add-menu",style:{position:"fixed",left:e.x,top:e.y,minWidth:190,zIndex:Et.dropdown},children:[l.jsx(de,{"data-testid":"viewport-add-menu-item",disabled:e.kinds.length===0,title:e.kinds.length===0?"Nothing can be added under the selected node.":void 0,onSelect:()=>n("create"),children:"Add 2D Node Here…"}),e.adapter.assetDrop?l.jsx(de,{"data-testid":"viewport-add-menu-item",disabled:e.kinds.length===0,title:e.kinds.length===0?"Nothing can be added under the selected node.":void 0,onSelect:()=>n("instantiate"),children:"Instantiate Scene Here…"}):null]})})}function an({title:e,testId:o,onClose:n,children:d,footer:r}){const h=u.useRef(null);return sn(h,n),l.jsx(he,{children:l.jsx("div",{style:{position:"fixed",inset:0,zIndex:Et.dropdown,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0, 0, 0, .35)"},children:l.jsxs("div",{ref:h,role:"dialog","aria-label":e,"data-testid":o,style:{width:640,maxWidth:"90vw",maxHeight:"80vh",display:"flex",flexDirection:"column",gap:8,padding:12,borderRadius:6,background:st.surface.raised,color:st.content.primary,boxShadow:"0 12px 40px rgba(0, 0, 0, .5)",fontSize:12},children:[l.jsx("div",{style:{fontWeight:600},children:e}),d,l.jsx("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:r})]})})})}const N={color:st.content.muted};function xe({selected:e,onPick:o,onOpen:n,testId:d,indent:r=0,children:h}){return l.jsx("div",{role:"option","aria-selected":e,"data-testid":d,onClick:o,onDoubleClick:n,style:{padding:`2px 6px 2px ${6+r*14}px`,borderRadius:3,cursor:"default",background:e?st.accent.muted:"transparent"},children:h})}function Ko(e,o){let n=0,d=e.extends?o.get(e.extends):void 0;for(;d&&n<16;)n+=1,d=d.extends?o.get(d.extends):void 0;return n}function ln(e){const[o,n]=u.useState(null),[d,r]=u.useState(null);return u.useEffect(()=>{if(!e)return;let h=!0;return $n().then(s=>{if(h){if(!s.ok){r(s.reason),n([]);return}n(s.entries.filter(y=>y.surface==="canvas"&&y.exported&&y.contentKind!=="image"))}}),()=>{h=!1}},[e]),{components:o,failure:d}}const He=e=>`component:${e.path}#${e.name}`;function cn(e,o){const n=e.adapter.assetDrop;if(!n)return"This surface places no components.";const d={position:[e.at.x,e.at.y,0],item:{kind:"component",name:o.name,sourcePath:o.path,exportKind:o.defaultExport?"default":"named",surface:o.surface}},r=e.parentId??"";return n.accepts(r,o.path,d)?(Je(e.adapter,r,o.path,d),null):`${o.name} cannot be placed here.`}function No({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState(Ho),[s,y]=u.useState({builtIn:!0,custom:!0}),[w,v]=u.useState(!1),[b,j]=u.useState(null),{components:P}=ln(!!e.adapter.assetDrop),I=e.kinds.find(x=>!x.extends),O=(P??[]).map(x=>({kind:He(x),label:x.name,...I?{extends:I.kind}:{},description:`A project component, from ${x.path}.`})),k=[...s.builtIn?e.kinds:[],...s.custom?O:[]],A=u.useMemo(()=>new Map([...e.kinds,...O].map(x=>[x.kind,x])),[e.kinds,P]),V=k.filter(x=>x.label.toLowerCase().includes(n.trim().toLowerCase())),[nt,U]=u.useState(e.kinds[0]?.kind??null),L=nt&&V.some(x=>x.kind===nt)?nt:V[0]?.kind??null,Z=L?A.get(L):void 0,ut=x=>{if(!x)return;const X=(P??[]).find(R=>He(R)===x);if(X){const R=cn(e,X);if(R){j(R);return}}else e.structure.create(x,e.parentId??void 0,e.at).ack;Ye({...r,recent:[x,...r.recent.filter(R=>R!==x)].slice(0,10)}),o()},It=()=>{if(!L)return;const x=r.favorites.includes(L)?r.favorites.filter(R=>R!==L):[...r.favorites,L],X={...r,favorites:x};Ye(X),h(X)},Ot=(x,X)=>x.map(R=>A.get(R)).filter(R=>R!==void 0).map(R=>l.jsx(xe,{testId:X,selected:R.kind===L,onPick:()=>U(R.kind),onOpen:()=>ut(R.kind),children:R.label},R.kind));return l.jsx(an,{title:`Create New ${I?.label??"Node"}`,testId:"canvas-create-node-dialog",onClose:o,footer:l.jsxs(l.Fragment,{children:[l.jsx(St,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),l.jsx(St,{type:"button","data-testid":"canvas-create-node-create",disabled:!L,onClick:()=>ut(L),children:"Create"})]}),children:l.jsxs("div",{style:{display:"flex",gap:12,minHeight:240},children:[l.jsxs("div",{style:{width:170,display:"flex",flexDirection:"column",gap:4},children:[l.jsx("span",{style:N,children:"Favorites:"}),l.jsx("div",{"data-testid":"canvas-create-node-favorites",style:{flex:1},children:Ot(r.favorites,"canvas-create-node-favorite")}),l.jsx("span",{style:N,children:"Recent:"}),l.jsx("div",{"data-testid":"canvas-create-node-recent",style:{flex:1},children:Ot(r.recent,"canvas-create-node-recent-item")})]}),l.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:4},children:[l.jsx("span",{style:N,children:"Search:"}),l.jsxs("div",{style:{display:"flex",gap:4},children:[l.jsx(Ze,{"data-testid":"canvas-create-node-search",value:n,autoFocus:!0,onChange:x=>d(x.target.value),onKeyDown:x=>{if(x.key==="Enter"&&ut(L),x.key==="ArrowDown"||x.key==="ArrowUp"){x.preventDefault();const X=V.findIndex(Lt=>Lt.kind===L),R=V[Math.min(V.length-1,Math.max(0,X+(x.key==="ArrowDown"?1:-1)))];R&&U(R.kind)}},style:{flex:1}}),l.jsx(St,{type:"button",variant:"ghost","data-testid":"canvas-create-node-favorite-toggle","aria-pressed":L?r.favorites.includes(L):!1,title:"(Un)favorite selected item.",disabled:!L,onClick:It,children:L&&r.favorites.includes(L)?"★":"☆"})]}),l.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[l.jsx("span",{style:N,children:"Matches:"}),l.jsx("span",{style:{flex:1}}),l.jsx(St,{type:"button",variant:"ghost","data-testid":"canvas-create-node-filters","aria-haspopup":"menu","aria-expanded":w,onClick:()=>v(!w),children:"Filters"})]}),w?l.jsx("div",{role:"menu","data-testid":"canvas-create-node-filter-menu",style:{display:"flex",gap:12},children:[["builtIn","Show Built-in"],["custom","Show Custom"]].map(([x,X])=>l.jsxs("label",{role:"menuitemcheckbox","aria-checked":s[x],style:{display:"flex",gap:4},children:[l.jsx("input",{type:"checkbox","data-testid":`canvas-create-node-filter-${x}`,checked:s[x],onChange:()=>y({...s,[x]:!s[x]})}),X]},x))}):null,l.jsx("div",{role:"listbox","data-testid":"canvas-create-node-matches",style:{flex:1,overflow:"auto"},children:V.map(x=>l.jsx(xe,{testId:"canvas-create-node-match",indent:n.trim()===""?Ko(x,A):0,selected:x.kind===L,onPick:()=>U(x.kind),onOpen:()=>ut(x.kind),children:x.label},x.kind))}),l.jsx("span",{style:N,children:"Description:"}),b?l.jsx("span",{"data-testid":"canvas-create-node-failure",style:N,children:b}):null,l.jsx("div",{"data-testid":"canvas-create-node-description",style:{minHeight:36},children:Z?l.jsxs(l.Fragment,{children:[l.jsxs("div",{children:[Z.label,Z.extends?l.jsx("span",{style:N,children:` < ${A.get(Z.extends)?.label??Z.extends}`}):null]}),Z.description?l.jsx("div",{style:N,children:Z.description}):null]}):null})]})]})})}function _o({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState(null),{components:s,failure:y}=ln(!0),[w,v]=u.useState(null),b=w??y,j=k=>`${k.path}#${k.name}`,P=(s??[]).filter(k=>`${k.name} ${k.path}`.toLowerCase().includes(n.trim().toLowerCase())),I=P.find(k=>j(k)===r)??P[0]??null,O=k=>{if(!k)return;const A=cn(e,k);if(A){v(A);return}o()};return l.jsxs(an,{title:"Instantiate Scene",testId:"canvas-instantiate-dialog",onClose:o,footer:l.jsxs(l.Fragment,{children:[l.jsx(St,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),l.jsx(St,{type:"button","data-testid":"canvas-instantiate-open",disabled:!I,onClick:()=>O(I),children:"Instantiate"})]}),children:[l.jsx("span",{style:N,children:"Search:"}),l.jsx(Ze,{"data-testid":"canvas-instantiate-search",value:n,autoFocus:!0,onChange:k=>d(k.target.value),onKeyDown:k=>{k.key==="Enter"&&O(I)}}),l.jsxs("div",{role:"listbox","data-testid":"canvas-instantiate-matches",style:{minHeight:160,overflow:"auto"},children:[s===null?l.jsx("span",{style:N,children:"Reading the project's components…"}):null,s!==null&&P.length===0?l.jsx("span",{style:N,children:"No canvas component matches."}):null,P.map(k=>l.jsxs(xe,{testId:"canvas-instantiate-match",selected:I!==null&&j(k)===j(I),onPick:()=>h(j(k)),onOpen:()=>O(k),children:[k.name," ",l.jsx("span",{style:N,children:k.path})]},j(k)))]}),b?l.jsx("span",{"data-testid":"canvas-instantiate-failure",style:N,children:b}):null]})}function Ge(e,o){for(const n of o){const d=K(e,n.id);if(!d)continue;const r={};n.x!==void 0&&(r.x=n.x),n.y!==void 0&&(r.y=n.y),Object.keys(r).length!==0&&(d.begin(n.id),d.apply(n.id,r),d.end(n.id))}}const Wo=[{op:"left",testId:"align-left",label:"Align left",icon:ze},{op:"hcenter",testId:"align-hcenter",label:"Align horizontal center",icon:De},{op:"right",testId:"align-right",label:"Align right",icon:Ie},{op:"top",testId:"align-top",label:"Align top",icon:ze,rotate:!0},{op:"vcenter",testId:"align-vcenter",label:"Align vertical center",icon:De,rotate:!0},{op:"bottom",testId:"align-bottom",label:"Align bottom",icon:Ie,rotate:!0}],Vo=[{axis:"horizontal",testId:"distribute-horizontal",label:"Distribute horizontally",icon:An},{axis:"vertical",testId:"distribute-vertical",label:"Distribute vertically",icon:Kn}];function Uo(e){const d=e.y-30-8;return{left:e.x,top:d<0?e.y+e.height+8:d}}function Zo({adapter:e,entries:o}){if(o.length<2)return null;const n=Bn(o.map(s=>s.rect));if(!n)return null;const{left:d,top:r}=Uo(n),h=o.length>=3;return l.jsxs(Yn,{label:"Align and distribute","data-testid":"align-toolbar",style:{position:"absolute",left:d,top:r,zIndex:Et.overlayLow,gap:2,padding:3},children:[Wo.map(({op:s,testId:y,label:w,icon:v,rotate:b})=>l.jsx(Oe,{"data-testid":y,title:w,"aria-label":w,variant:"ghost",size:"compact",onClick:()=>Ge(e,Hn(o,s)),children:l.jsx(Le,{icon:v,"aria-hidden":"true",style:b?{transform:"rotate(90deg)"}:void 0})},s)),h&&l.jsxs(l.Fragment,{children:[l.jsx(Gn,{}),Vo.map(({axis:s,testId:y,label:w,icon:v})=>l.jsx(Oe,{"data-testid":y,title:w,"aria-label":w,variant:"ghost",size:"compact",onClick:()=>Ge(e,Nn(o,s)),children:l.jsx(Le,{icon:v,"aria-hidden":"true"})},s))]})]})}function Qo({rect:e,initialText:o,onCommit:n,onCancel:d}){const[r,h]=u.useState(o),s=u.useRef(null),y=u.useRef(!1);u.useEffect(()=>{const b=s.current;b&&(b.focus(),b.select())},[]);const w=()=>{y.current||(y.current=!0,n(r))},v=()=>{y.current||(y.current=!0,d())};return l.jsx(_n,{ref:s,"data-testid":"world-text-editor",value:r,onChange:b=>h(b.target.value),onBlur:w,onKeyDown:b=>{b.key==="Escape"?(b.stopPropagation(),v()):b.key==="Enter"&&!b.shiftKey&&(b.preventDefault(),w())},"data-variant":"inline-editor",style:{position:"absolute",left:e.x,top:e.y,width:Math.max(e.width,40),height:Math.max(e.height,20),boxSizing:"border-box",zIndex:Et.overlayLow,pointerEvents:"auto",resize:"none"}})}const Y=st.accent.default,qo=Et.overlayLow,Wt=5;function Jo(e,o,n){return e?!1:ye()?.activate(o,n)??!1}function ti(e,o,n,d,r,h){const s=e?null:ye()?.hover(o,n)??null;r(s),h(s?null:d(o,n))}function ei(e,o){const n=e.hierarchy.node(o);return n?`${n.label}·${n.kind}`:o}function ni(e){return e instanceof nn?e.childAdapters().some(o=>!!o.adapter.rects):!!e.rects}function oi(e){const o=e instanceof nn?e.childAdapters():[{worldId:"",adapter:e}],n=[];for(const{worldId:d,adapter:r}of o)if(r.rects&&!(d&&jo(d)))for(const h of Ro(r)){if(r.inspector?.get(h,"locked")===!0)continue;const s=r.rects.rect(h);s&&n.push({id:h,rect:s})}return n}function ii(e,o){return e.x<o.x+o.width&&e.x+e.width>o.x&&e.y<o.y+o.height&&e.y+e.height>o.y}function ri(e,o,n){if(!n)return[o];const d=new Set(e);return d.has(o)?d.delete(o):d.add(o),[...d]}function si(e,o,n,d){return o&&!!n&&(n.width>Wt||n.height>Wt)&&n?oi(e).filter(s=>ii(n,s.rect)).map(s=>s.id):d?null:[]}function ai(e,o,n,d){return e?"grabbing":o?"grab":n||d?"crosshair":"default"}function rt(e){try{e.currentTarget.setPointerCapture?.(e.pointerId)}catch{}}function ae(e){e.currentTarget.hasPointerCapture?.(e.pointerId)&&e.currentTarget.releasePointerCapture?.(e.pointerId)}function li(e,o){if(o!==null)return!1;const n=e.currentTarget.parentElement?.parentElement??null;return Lo(n,e.clientX,e.clientY)}function Kt(e,o,n){return!e||o===n||o==="combined"||o==="select"}function Ae(e,o){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,borderStyle:"solid",borderColor:Y,borderWidth:o?2:1,background:o?`color-mix(in srgb, ${Y} 6%, transparent)`:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function ci(e,o,n){if(!e)return{left:o.x+o.width/2-et/2,top:o.y-n-et/2};const d=(e.tl.x+e.tr.x)/2,r=(e.tl.y+e.tr.y)/2,h=e.tl.x-e.bl.x,s=e.tl.y-e.bl.y,y=Math.hypot(h,s)||1;return{left:d+h/y*n-et/2,top:r+s/y*n-et/2}}function di(e,o){const n=Math.hypot(e.tr.x-e.tl.x,e.tr.y-e.tl.y),d=Math.hypot(e.bl.x-e.tl.x,e.bl.y-e.tl.y),r=(e.tl.x+e.br.x)/2,h=(e.tl.y+e.br.y)/2;return{position:"absolute",left:r-n/2,top:h-d/2,width:n,height:d,transform:`rotate(${zt(e)}rad)`,transformOrigin:"center",borderStyle:"solid",borderColor:Y,borderWidth:o,background:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function ui(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-18),padding:"2px 6px",fontSize:11,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:"#fff",background:Y,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const Nt=10,le=48;function ce(e,o){return{position:"absolute",left:e.x-Nt/2,top:e.y-Nt/2,width:Nt,height:Nt,background:"#fff",border:`1px solid ${Y}`,boxSizing:"border-box",cursor:o,pointerEvents:"auto"}}const et=12,dn=24;function pi(e){return{position:"absolute",left:e.x+e.width/2-et/2,top:e.y-dn-et/2,width:et,height:et,borderRadius:"50%",background:"#fff",border:`1px solid ${Y}`,boxSizing:"border-box",cursor:"grab",padding:0,pointerEvents:"auto"}}const Ke=12;function fi(e){return{position:"absolute",left:e.position[0],top:e.position[1],width:Ke,height:Ke,borderRadius:"50%",background:e.writable?e.color:"transparent",border:`2px solid ${e.color}`,boxSizing:"border-box",cursor:e.writable?"grab":"not-allowed",padding:0,pointerEvents:e.writable?"auto":"none",touchAction:"none"}}function xi(e){return{position:"absolute",left:e.x-8,top:e.y-8,width:16,height:16,display:"grid",placeItems:"center",borderRadius:e.kind==="anchor"?"50%":2,background:"#fff",border:`1px solid ${Y}`,boxSizing:"border-box",color:Y,cursor:"crosshair",fontSize:9,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:700,lineHeight:1,padding:0,pointerEvents:"auto",touchAction:"none"}}function hi(e){return{position:"absolute",left:e.x,top:e.y+e.height+4,padding:"2px 6px",fontSize:11,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:"#fff",background:Y,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const yi="rgba(46, 204, 113, 0.25)",gi="rgba(230, 126, 34, 0.25)";function vi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:e.kind==="padding"?yi:gi,boxSizing:"border-box",cursor:e.cursor,pointerEvents:"auto"}}function mi(e){return{position:"absolute",left:e.labelX,top:e.labelY,transform:"translate(-50%, -50%)",fontSize:10,fontFamily:"monospace",color:e.kind==="padding"?"#1b7a3d":"#a35a12",background:"rgba(255,255,255,0.85)",padding:"0 2px",borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}function bi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`2px dashed ${Y}`,background:`color-mix(in srgb, ${Y} 15%, transparent)`,boxSizing:"border-box",pointerEvents:"none",opacity:.7}}function wi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:"#ff5fa2",borderRadius:2,pointerEvents:"none"}}const ge="#ff2d92",_t=6;function Si(e){const o=e.orientation==="horizontal";return{position:"absolute",left:Math.min(e.x1,e.x2),top:Math.min(e.y1,e.y2),width:o?Math.abs(e.x2-e.x1):1,height:o?1:Math.abs(e.y2-e.y1),background:ge,pointerEvents:"none"}}function Ne(e,o,n){return{position:"absolute",left:n?e:e-_t/2,top:n?o-_t/2:o,width:n?1:_t,height:n?_t:1,background:ge,pointerEvents:"none"}}function Ei(e){return{position:"absolute",left:e.labelX,top:e.labelY,transform:"translate(-50%, -50%)",padding:"1px 4px",fontSize:10,fontFamily:"monospace",fontWeight:600,color:"#fff",background:ge,borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}const _e="#f24822";function ki(e){const o=e.orientation==="vertical";return{position:"absolute",left:o?e.at:e.start,top:o?e.start:e.at,width:o?1:e.end-e.start,height:o?e.end-e.start:1,borderLeft:o?`1px dashed ${_e}`:void 0,borderTop:o?void 0:`1px dashed ${_e}`,pointerEvents:"none"}}function Ci(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-36),display:"flex",gap:4,pointerEvents:"none"}}const We={padding:"2px 6px",fontSize:10,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:st.content.onAccent,background:`color-mix(in srgb, ${Y} 85%, transparent)`,borderRadius:3,whiteSpace:"nowrap"};function ji(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`1px dashed color-mix(in srgb, ${Y} 45%, transparent)`,boxSizing:"border-box",pointerEvents:"none"}}function Ve(e,o,n,d=0){return o&&n>0?Math.round((e-d)/n)*n+d:e}function Ri(e,o,n,d,r,h,s=!1){const y=e.nativeHandleSpan??1,w=s?"both":e.nativeScaleAxis??"both",v=s&&e.nativeScaleAxis==="x"?o:s&&e.nativeScaleAxis==="y"?n:null;let b,j;if(w==="x")b=1+o/y,j=1;else if(w==="y")b=1,j=1+n/y;else if(v!==null)b=1+v/y,j=b;else if(e.center){const P=(e.startAngleDeg??0)*Math.PI/180,I=e.startLocal.x-e.center.x,O=e.startLocal.y-e.center.y,k=I*Math.cos(P)+O*Math.sin(P),A=-I*Math.sin(P)+O*Math.cos(P),V=(I+o)*Math.cos(P)+(O+n)*Math.sin(P),nt=-(I+o)*Math.sin(P)+(O+n)*Math.cos(P);if(b=Math.abs(k)>1e-6?V/k:1,j=Math.abs(A)>1e-6?nt/A:1,s){const U=(b+j)/2;b=U,j=U}}else{const P=1+(o+n)/(Math.SQRT2*y);b=P,j=P}return{...w!=="y"?{scaleXFactor:b}:{},...w!=="x"?{scaleYFactor:j}:{},...d&&!r?{scaleStep:h}:{}}}function Pi(e,o,n,d,r,h,s={x:0,y:0}){const y=e.nativeOrigin;if(!y)return{};const w=d&&!0;return{...e.moveAxis!=="y"?{originX:Ve(y.x+o,w,h,s.x)}:{},...e.moveAxis!=="x"?{originY:Ve(y.y+n,w,h,s.y)}:{}}}function Ue(e,o,n){return e==="x"?{x:o.x+n,y:o.y}:e==="y"?{x:o.x,y:o.y+n}:{x:o.x+n/Math.SQRT2,y:o.y+n/Math.SQRT2}}function zi(e,o,n){return e==="x"?{dx:o,dy:0}:e==="y"?{dx:0,dy:n}:{dx:o,dy:n}}function Di(e,o){e.ownerBoxEdit.begin(e.id);for(const n of e.peers)n.ownerBoxEdit.begin(n.id);return{kind:"move",id:e.id,ownerBoxEdit:e.ownerBoxEdit,startLocal:o,origRect:e.origRect,context:e.context,...e.nativeOrigin?{nativeOrigin:e.nativeOrigin}:{},movePeers:e.peers}}function Ii(e,o,n){let d=o;for(let r=0;d!==null&&r<256;r++){if(n.has(d))return d;d=e.hierarchy.node(d)?.parentId??null}return null}function Oi(e,o,n){const d=K(e,o);if(!d)return null;const r=e.inspector?.get(o,"style.position"),h=ue(e,o)==="2d";if(r!=="absolute"&&r!=="fixed"&&!h)return null;const s=T(e,o);if(!s)return null;const y=h?d.gizmoOrigin?.(o)??void 0:void 0,w=[];for(const v of n){if(v===o)continue;const b=K(e,v),j=T(e,v);if(!b||!j)continue;const P=e.inspector?.get(v,"style.position"),I=ue(e,v)==="2d";if(P!=="absolute"&&P!=="fixed"&&!I)continue;const O=I?b.gizmoOrigin?.(v)??void 0:void 0;w.push({id:v,ownerBoxEdit:b,origRect:j,...O?{nativeOrigin:O}:{}})}return{id:o,ownerBoxEdit:d,origRect:s,context:Dt(e,o),...y?{nativeOrigin:y}:{},peers:w}}function Li(e,o){if(!tn(e,o)?.reorder)return null;const d=bo(e,o);if(!d||d.length<3)return null;const r=T(e,o);if(!r)return null;const h=[];for(const s of d){if(s===o)continue;const y=T(e,s);y&&h.push({id:s,rect:y})}return h.length===0?null:{id:o,adapter:e,origRect:r,siblingRects:h}}function Mi(){return wo()}function Ti(e,o){if(o.size!==1)return null;const n=[...o][0],d=K(e,n);if(!d)return null;const r=T(e,n);if(!r)return null;const h=So(r,Eo(e,n));return{id:n,rect:r,ownerBoxEdit:d,spacingBands:h}}function Fi(e,o){if(o.size<2)return null;const n=[];for(const d of o){const r=T(e,d);if(!r||!K(e,d))return null;n.push({id:d,rect:r})}return n}function Xi(e,o,n){const d=o.size===1?[...o][0]:null,r=d?T(e,d):null,h=r&&n?ko(r,n):[],s=d?Co(e,d):null,y=!!(s&&(s.position||s.parentLayout)),w=d?Dt(e,d)?.parent??null:null;return{selectedSingleRect:r,measureLines:h,positionBadge:s,showPositionBadge:y,parentRect:w}}function $i({state:e,adapter:o,onClose:n}){const d=u.useRef(null);return u.useEffect(()=>{const r=s=>{d.current?.contains(s.target)||n()},h=s=>{s.key==="Escape"&&n()};return document.addEventListener("pointerdown",r),document.addEventListener("keydown",h),()=>{document.removeEventListener("pointerdown",r),document.removeEventListener("keydown",h)}},[n]),l.jsx(he,{children:l.jsx(Qe,{ref:d,"aria-label":"Pick object under pointer","data-testid":"viewport-pick-menu",style:{position:"fixed",left:e.x,top:e.y,minWidth:190,maxWidth:320,zIndex:Et.dropdown},children:e.ids.map(r=>{const h=o.hierarchy.node(r);return l.jsxs(de,{"data-testid":"viewport-pick-menu-item",onSelect:()=>{en(o,[r]),n()},style:{justifyContent:"space-between",gap:20},children:[l.jsx("span",{children:h?.label??r}),l.jsx("span",{style:{color:st.content.muted,fontSize:11},children:h?.kind??""})]},r)})})})}function nr({adapter:e,view:o,transformModeAware:n=!1,presentationId:d}={}){const r=Wn(),h=u.useSyncExternalStore(r.subscribe,r.getSnapshot),s=e??Vn(r),y=u.useCallback((t,i)=>e?e.pickable?.pick(t,i)??null:Do(r,t,i),[e,r]),w=u.useRef(null),v=u.useRef(null),b=u.useRef(null),[j,P]=u.useState(null),[I,O]=u.useState(null),[k,A]=u.useState(null),[V,nt]=u.useState(null),U=u.useRef(null),[L,Z]=u.useState(null),ut=u.useRef(()=>{}),It=u.useCallback((t,i,c=!1)=>{const a=Io(r,t,i,{...e?{adapter:e}:{},...c?{includeLocked:c}:{}});if(a.length===0){nt(null);return}nt({x:t,y:i,ids:a})},[e,r]);u.useEffect(()=>{const t=c=>{const a=U.current;!a||a.pointerId!==c.pointerId||a.moved||Math.hypot(c.clientX-a.startClientX,c.clientY-a.startClientY)>Wt&&(a.moved=!0)},i=c=>{const a=U.current;!a||a.pointerId!==c.pointerId||(U.current=null,c.type==="pointerup"&&!a.moved&&(n&&!c.altKey?ut.current(c.clientX,c.clientY):It(c.clientX,c.clientY,n)))};return window.addEventListener("pointermove",t),window.addEventListener("pointerup",i),window.addEventListener("pointercancel",i),()=>{window.removeEventListener("pointermove",t),window.removeEventListener("pointerup",i),window.removeEventListener("pointercancel",i)}},[It,n]);const Ot=u.useCallback(t=>{t.preventDefault(),t.stopPropagation()},[]),x=o??Un;u.useSyncExternalStore(Bo,Yo);const X=n?ht(x):null,R=[...r.selectedEntityIds].sort().join("\0"),Lt=u.useRef(R);u.useEffect(()=>{Lt.current!==R&&(Lt.current=R,ht(x)&&$o(x,null))},[R,x]);const m=u.useSyncExternalStore(x.subscribe,x.get,x.get);u.useSyncExternalStore(u.useCallback(t=>Xo(x,t),[x]),u.useCallback(()=>Fo(x),[x]));const Ut=n?To(x):[],H=n?1/m.zoom:1,gt=n&&r.transformMode!=="combined"&&r.transformMode!=="select";u.useSyncExternalStore(Zn,Qn);const ve=d?qn(d):null,un=ve?.position??!0,Mt=!gt||(ve?.transformation??!0),Zt=u.useRef(!1),Qt=u.useRef(null),[pn,me]=u.useState(!1),at=u.useRef(null),[fn,Tt]=u.useState(!1),F=u.useRef(null);u.useEffect(()=>()=>{const t=F.current;if(F.current=null,!!t){t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id)}},[]);const[,xn]=u.useState(0),[hn,kt]=u.useState(null),[yn,pt]=u.useState([]),qt=u.useRef(null),[gn,vn]=u.useState(null),vt=u.useCallback(t=>{qt.current=t,vn(t)},[]),be=u.useRef(null),[mn,bn]=u.useState(null),[Ft,Ct]=u.useState(null),ft=u.useCallback(t=>{be.current=t,bn(t)},[]),Jt=u.useRef(null),we=u.useRef(null);u.useEffect(()=>{const t=Jt.current;if(!t)return;Jt.current=null;const i=re(s,t.id);i&&i.get(t.id)===null&&Ct({id:t.id,rect:t.rect})},[h]);const Se=u.useRef("");u.useEffect(()=>{const t=[...r.selectedEntityIds].sort().join(",");t!==Se.current&&(Se.current=t,Ft&&Ct(null))}),u.useEffect(()=>{if(!Ft)return;const t=window.setTimeout(()=>Ct(null),4e3);return()=>window.clearTimeout(t)},[Ft]);const lt=u.useSyncExternalStore(Po,zo),[wn,Ee]=u.useState(null),Q=u.useCallback(t=>{b.current=t,P(t)},[]),S=u.useCallback((t,i)=>{const c=w.current?.getBoundingClientRect();return{x:(t-(c?.left??0)-m.x)/m.zoom,y:(i-(c?.top??0)-m.y)/m.zoom}},[m.x,m.y,m.zoom]);ut.current=(t,i)=>{const c=r.selectedEntityIds,a=s.hierarchy.roots(),f=c.size===1?[...c][0]:a.length===1?a[0].id:null,p=f?tn(s,f):s.structure??null,D=p?.creatableKinds?.(f)??[];if(!p){Z(null);return}const g=r.snap2D,C=(W,dt)=>r.snapEnabled&&g.step>0?Math.round((W-dt)/g.step)*g.step+dt:W,E=S(t,i),M={x:C(E.x,g.offsetX),y:C(E.y,g.offsetY)},z=g.pixel?{x:Math.round(M.x),y:Math.round(M.y)}:M;Z({x:t,y:i,at:z,parentId:f,structure:p,kinds:D,adapter:s})};const Sn=u.useCallback(t=>{!o||!n||!s.assetDrop||!t.dataTransfer.types.includes("application/x-editor-asset")||(t.preventDefault(),t.dataTransfer.dropEffect="copy")},[s.assetDrop,o,n]),En=u.useCallback(t=>{if(!o||!n||!s.assetDrop)return;const i=t.dataTransfer.getData("application/x-editor-asset");if(!i)return;let c;try{c=JSON.parse(i)}catch{return}const a=S(t.clientX,t.clientY),f={position:[a.x,a.y,0],item:c.component??{kind:"file",name:c.name??c.path.split("/").pop()??c.path}};s.assetDrop.accepts("",c.path,f)&&(t.preventDefault(),t.stopPropagation(),Je(s,"",c.path,f))},[s.assetDrop,o,S,n]),q=u.useCallback(()=>xn(t=>t+1),[]),Xt=u.useCallback(()=>{const t=F.current;if(!t)return!1;F.current=null,t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id);return kt(null),pt([]),q(),!0},[q]),kn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=s.inspector?.get(a,"style.position"),g=ue(s,a)==="2d",C=g?xt(s,a):null,E=C&&se(C)?f.gizmoOrigin?.(a)??null:null;rt(i),f.begin(a),F.current={kind:"resize",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,pos:t,...C&&E?{frame:C,frameOrigin:E}:{},isPositioned:D==="absolute"||D==="fixed"||g,context:Dt(s,a)}},[s,r,S]),ke=u.useCallback(()=>{if(!n||r.selectedEntityIds.size<2)return null;const t=[...r.selectedEntityIds].flatMap(c=>{const a=K(s,c),f=T(s,c),p=a?.gizmoOrigin?.(c);return a&&f&&p?[{id:c,ownerBoxEdit:a,origRect:f,nativeOrigin:p}]:[]});if(t.length<2)return null;const i=ht(x);return{primary:t[0],peers:t.slice(1),center:i??t[0].nativeOrigin,pivot:i}},[s,r,n,x]),$t=u.useCallback((t,i,c="both")=>{const a=ke();if(!a)return!1;const f=xt(s,a.primary.id);rt(i),a.primary.ownerBoxEdit.begin(a.primary.id);for(const p of a.peers)p.ownerBoxEdit.begin(p.id);return F.current={kind:t,id:a.primary.id,ownerBoxEdit:a.primary.ownerBoxEdit,startLocal:S(i.clientX,i.clientY),origRect:a.primary.origRect,center:a.center,nativeOrigin:a.primary.nativeOrigin,movePeers:a.peers,...a.pivot?{groupCenter:a.pivot}:{},...f?{startAngleDeg:zt(f)*180/Math.PI}:{},...t==="native-scale"?{nativeScaleAxis:c,nativeHandleSpan:le/m.zoom}:{}},!0},[s,ke,S,m.zoom]),Bt=u.useCallback(t=>{if(t.stopPropagation(),t.button!==0)return;const i=r.selectedEntityIds;if(i.size>1){$t("rotate",t);return}if(i.size!==1)return;const c=[...i][0],a=K(s,c),f=T(s,c);if(!a||!f)return;const p=n?a.gizmoOrigin?.(c):null,D=p?xt(s,c):null;rt(t),a.begin(c),F.current={...D?{startAngleDeg:zt(D)*180/Math.PI}:{},kind:"rotate",id:c,ownerBoxEdit:a,startLocal:S(t.clientX,t.clientY),origRect:f,center:(p?ht(x):null)??p??{x:f.x+f.width/2,y:f.y+f.height/2},...p?{nativeOrigin:p}:{}}},[s,r,S,n,$t,x]),te=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=f.gizmoOrigin?.(a)??{x:p.x+p.width/2,y:p.y+p.height/2};rt(i),f.begin(a),F.current={kind:"move",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,context:Dt(s,a),moveAxis:t,nativeOrigin:D}},[s,r,S]),jt=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size>1){$t("native-scale",i,t);return}if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=f.gizmoOrigin?.(a)??{x:p.x+p.width/2,y:p.y+p.height/2},g=xt(s,a);rt(i),f.begin(a),F.current={...g?{startAngleDeg:zt(g)*180/Math.PI}:{},kind:"native-scale",center:ht(x)??D,id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,nativeOrigin:D,nativeScaleAxis:t,nativeHandleSpan:le/m.zoom}},[s,m.zoom,r,S,$t,x]),Cn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);!f||!p||f.referencePoint?.(a)?.id!==t.id||(rt(i),f.begin(a),F.current={kind:"reference",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,context:Dt(s,a),pointerId:i.pointerId,referencePoint:t})},[s,r,S]),Rt=u.useRef(null),mt=u.useCallback((t,i,c)=>{const a=T(s,t);return Jn(i,xt(s,t)??(a?to(a):null),{invert:c,smart:r.smartSnap,gridOn:r.snapEnabled,grid:r.snap2D,threshold:Me/Math.max(x.get().zoom,.01)})},[s,r,x]),jn=u.useCallback((t,i,c,a)=>{if(a.stopPropagation(),a.button!==0||!c.writable)return;rt(a);const f=i.layers(t).some(p=>p.category==="origin"&&p.handles.some(D=>D.id===c.id));Rt.current={id:t,handleId:c.id,provider:i,pivot:f}},[]),Rn=u.useCallback(t=>{const i=Rt.current;if(!i)return;const c=S(t.clientX,t.clientY),a=i.pivot?mt(i.id,c,t.metaKey||t.ctrlKey):c;i.provider.preview(i.id,i.handleId,[a.x,a.y,0]),q()},[q,S,mt]),ee=u.useCallback(t=>{const i=Rt.current;if(Rt.current=null,!i)return;ae(t);const c=S(t.clientX,t.clientY),a=i.pivot?mt(i.id,c,t.metaKey||t.ctrlKey):c;i.provider.commit(i.id,i.handleId,[a.x,a.y,0]),q()},[q,S,mt]),Pn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);!f||!p||(rt(i),f.begin(a),F.current={kind:"spacing",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,side:t.side,origValue:t.value})},[s,r,S]),Yt=u.useCallback((t,i)=>{if(t.pointerId!==void 0&&i.pointerId!==t.pointerId)return;const c=S(i.clientX,i.clientY),a=c.x-t.startLocal.x,f=c.y-t.startLocal.y;let p;if(t.kind==="resize"&&t.frame&&t.frameOrigin)p=eo(t.frame,t.pos,a,f,t.frameOrigin,i.shiftKey),pt([]);else if(t.kind==="resize")p=no(t.pos,a,f,t.origRect,!!t.isPositioned,i.altKey,t.context),i.shiftKey&&t.isPositioned&&(p=oo(p,t.origRect,t.pos)),pt(io(t.pos,a,f,t.origRect,i.altKey,t.context));else if(t.kind==="native-scale")p=Ri(t,a,f,r.scaleSnap,i.altKey,r.snap2D.scaleStep,i.shiftKey),pt([]);else if(t.kind==="move"){const{dx:g,dy:C}=zi(t.moveAxis,a,f);if(t.nativeOrigin){p=Pi(t,g,C,r.snapEnabled,!1,r.snap2D.step,r.snap2D.relative?t.nativeOrigin:{x:r.snap2D.offsetX,y:r.snap2D.offsetY});const E=ro({x:p.originX??t.nativeOrigin.x,y:p.originY??t.nativeOrigin.y},t.nativeOrigin,t.origRect,t.context,t.moveAxis,r.smartSnap.enabled===(i.metaKey||i.ctrlKey),Me/Math.max(m.zoom,.01),{x:Ut.filter(z=>z.axis==="x").map(z=>z.value),y:Ut.filter(z=>z.axis==="y").map(z=>z.value)},r.smartSnap),M=z=>r.snap2D.pixel?Math.round(z):z;p.originX!==void 0&&(p.originX=M(E.position.x)),p.originY!==void 0&&(p.originY=M(E.position.y)),pt(E.guides)}else p=so(g,C,t.origRect,i.altKey,t.context);kt(Te(t.origRect,g,C)),t.nativeOrigin||pt(ao(g,C,t.origRect,i.altKey,t.context))}else if(t.kind==="reference"){const g=lo(c,t.origRect,i.altKey,t.context,{bounded:t.referencePoint?.bounded,snapPoints:t.referencePoint?.snapPoints});p={referenceX:g.position.x,referenceY:g.position.y},pt(g.guides)}else if(t.kind==="rotate"){const g=t.nativeOrigin&&t.startAngleDeg!==void 0&&!r.snap2D.relative,C=(r.smartSnap.enabled||r.rotationSnap)!==(i.metaKey||i.ctrlKey);if(p=co(t.center,t.startLocal,c,t.nativeOrigin?g||!C:i.altKey,t.nativeOrigin?r.snap2D.rotationStep:15),g&&C&&p.rotate!==void 0){const M=r.snap2D.rotationStep,z=r.snap2D.rotationOffset,W=t.startAngleDeg,dt=W+p.rotate;p={rotate:Math.round((dt-z)/M)*M+z-W,rotationStep:M,rotationOffset:z}}const E=t.groupCenter??(t.nativeOrigin?ht(x):null);if(E&&t.nativeOrigin&&p.rotate!==void 0){const M=p.rotate*Math.PI/180,z=t.nativeOrigin.x-E.x,W=t.nativeOrigin.y-E.y;p={...p,originX:E.x+z*Math.cos(M)-W*Math.sin(M),originY:E.y+z*Math.sin(M)+W*Math.cos(M)}}}else p=uo(t.side,a,f,t.origValue??0);if(t.kind==="native-scale"&&t.groupCenter&&t.nativeOrigin){const g=t.groupCenter,C=p.scaleXFactor??1,E=p.scaleYFactor??1;p={...p,originX:g.x+(t.nativeOrigin.x-g.x)*C,originY:g.y+(t.nativeOrigin.y-g.y)*E}}const D=t.kind==="native-scale"&&!t.groupCenter&&t.nativeOrigin?ht(x):null;if(D&&t.nativeOrigin&&(p={...p,originX:D.x+(t.nativeOrigin.x-D.x)*(p.scaleXFactor??1),originY:D.y+(t.nativeOrigin.y-D.y)*(p.scaleYFactor??1)}),t.ownerBoxEdit.apply(t.id,p),t.movePeers&&(t.kind==="rotate"||t.kind==="native-scale")){const g=t.groupCenter,C=(p.rotate??0)*Math.PI/180,E=p.scaleXFactor??1,M=p.scaleYFactor??1;for(const z of t.movePeers){if(!z.nativeOrigin)continue;const W=g?z.nativeOrigin.x-g.x:0,dt=g?z.nativeOrigin.y-g.y:0;z.ownerBoxEdit.apply(z.id,t.kind==="rotate"?{rotate:p.rotate??0,...p.rotationStep!==void 0?{rotationStep:p.rotationStep,rotationOffset:p.rotationOffset??0}:{},...g?{originX:g.x+W*Math.cos(C)-dt*Math.sin(C),originY:g.y+W*Math.sin(C)+dt*Math.cos(C)}:{}}:{...p.scaleXFactor!==void 0?{scaleXFactor:E}:{},...p.scaleYFactor!==void 0?{scaleYFactor:M}:{},...p.scaleStep!==void 0?{scaleStep:p.scaleStep}:{},...g?{originX:g.x+W*E,originY:g.y+dt*M}:{}})}}if(t.kind==="move"&&t.movePeers){const g=t.nativeOrigin?(p.originX??t.nativeOrigin.x)-t.nativeOrigin.x:(p.x??t.origRect.x)-t.origRect.x,C=t.nativeOrigin?(p.originY??t.nativeOrigin.y)-t.nativeOrigin.y:(p.y??t.origRect.y)-t.origRect.y;for(const E of t.movePeers)E.ownerBoxEdit.apply(E.id,E.nativeOrigin?{originX:E.nativeOrigin.x+g,originY:E.nativeOrigin.y+C}:{x:E.origRect.x+g,y:E.origRect.y+C})}q()},[S,q,r,Ut,m.zoom]),Ht=u.useCallback((t,i)=>{const c=y(t,i);if(!c)return null;const a=po(s,c)?.backgroundChainAt(t,i)??null;return a?Mo(a):null},[s,y]);u.useEffect(()=>{if(!lt)return;const t=i=>{i.key==="Escape"&&Xe(null)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[lt]),u.useEffect(()=>{if(!n)return;const t=i=>{if(i.key.toLowerCase()!=="v"||i.repeat||i.metaKey||i.ctrlKey||i.altKey)return;const c=i.target;if(c instanceof HTMLInputElement||c instanceof HTMLTextAreaElement||c instanceof HTMLSelectElement||c instanceof HTMLElement&&c.isContentEditable)return;const a=Qt.current,f=r.selectedEntityIds;if(!a||f.size!==1||F.current||Rt.current)return;const p=[...f][0],D=Fe(s,p),g=D?.layers(p).find(E=>E.category==="origin")?.handles.find(E=>E.writable);if(!D||!g)return;i.preventDefault();const C=mt(p,S(a.x,a.y),!1);D.commit(p,g.id,[C.x,C.y,0]),q()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[s,r,n,S,q,mt]),u.useEffect(()=>{const t=a=>a instanceof HTMLInputElement||a instanceof HTMLTextAreaElement||a instanceof HTMLSelectElement||a instanceof HTMLElement&&a.isContentEditable,i=a=>{a.code!=="Space"||a.repeat||t(a.target)||a.target instanceof HTMLButtonElement||(a.preventDefault(),Zt.current=!0,me(!0))},c=a=>{a.code==="Space"&&(Zt.current=!1,me(!1),at.current&&(at.current=null,Tt(!1)))};return window.addEventListener("keydown",i),window.addEventListener("keyup",c),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",c)}},[]);const Ce=u.useCallback(t=>{if(t.stopPropagation(),rt(t),Zt.current){at.current={startClientX:t.clientX,startClientY:t.clientY,startPan:x.get()},Tt(!0);return}if(n&&r.selectedEntityIds.size>1&&!(t.metaKey||t.ctrlKey)&&(r.transformMode==="rotate"||r.transformMode==="scale")){r.transformMode==="rotate"?Bt(t):jt("both",t);return}if(n&&r.selectedEntityIds.size>=1&&(t.metaKey||t.ctrlKey)){t.altKey?jt("both",t):Bt(t);return}if(lt){Xe(Ht(t.clientX,t.clientY)),Ee(null);return}if(Jo(e,t.clientX,t.clientY)){v.current=null,O(null),Q(null);return}const i=y(t.clientX,t.clientY);if(li(t,i)){v.current=null,O(null),Q(null);return}const a=n&&t.altKey&&r.selectedEntityIds.size===1?[...r.selectedEntityIds][0]:i!==null?Ii(s,i,r.selectedEntityIds):null,f=Kt(n,r.transformMode,"translate")&&a!==null?Oi(s,a,r.selectedEntityIds):null,p=!f&&a!==null?Li(s,a):null;v.current={downClientX:t.clientX,downClientY:t.clientY,downLocal:S(t.clientX,t.clientY),hitAtDown:i,moved:!1,moveCandidate:f,reorderCandidate:p},O(null),Q(null)},[s,r,x,n,S,Q,lt,Ht,y,e,jt,Bt]),zn=u.useCallback(t=>{if(t.button===2){U.current={pointerId:t.pointerId,startClientX:t.clientX,startClientY:t.clientY,moved:!1};return}t.button===0&&Ce(t)},[Ce]),je=u.useCallback((t,i)=>{const c=i.clientX-t.downClientX,a=i.clientY-t.downClientY;if(!t.moved&&Math.hypot(c,a)>Wt&&(t.moved=!0),!!t.moved){if(t.moveCandidate){const f=Di(t.moveCandidate,t.downLocal);F.current=f,Yt(f,i);return}if(t.reorderCandidate){const f=S(i.clientX,i.clientY),p=fo(t.reorderCandidate.siblingRects,f);p&&(vt({id:t.reorderCandidate.id,adapter:t.reorderCandidate.adapter,gap:p}),kt(Te(t.reorderCandidate.origRect,f.x-t.downLocal.x,f.y-t.downLocal.y)));return}if(t.hitAtDown===null){const f=S(i.clientX,i.clientY);Q({x:Math.min(t.downLocal.x,f.x),y:Math.min(t.downLocal.y,f.y),width:Math.abs(f.x-t.downLocal.x),height:Math.abs(f.y-t.downLocal.y)})}}},[S,Q,Yt,vt]),J=u.useCallback(t=>{const i=at.current;if(i){x.setPan(i.startPan.x+(t.clientX-i.startClientX),i.startPan.y+(t.clientY-i.startClientY));return}if(lt){const f=S(t.clientX,t.clientY);Ee({...f,color:Ht(t.clientX,t.clientY)});return}Qt.current={x:t.clientX,y:t.clientY};const c=F.current;if(c){Yt(c,t);return}if((t.buttons&1)===0){ti(e,t.clientX,t.clientY,y,A,O);return}const a=v.current;a&&je(a,t)},[r,x,S,Yt,lt,Ht,je,y,e]),tt=u.useCallback(t=>{if(ae(t),at.current){at.current=null,Tt(!1);return}const i=F.current;if(i?.pointerId!==void 0&&t.pointerId!==i.pointerId||Xt())return;const c=qt.current;if(c){vt(null),kt(null),v.current=null,xo(c.adapter,c.id,c.gap.beforeSiblingId);return}const a=v.current;if(v.current=null,!a)return;const f=a.hitAtDown!==null?ri(r.selectedEntityIds,a.hitAtDown,t.shiftKey):si(s,a.moved,b.current,t.shiftKey);f!==null&&en(s,f),Q(null)},[s,r,Q,Xt,vt]),_=u.useCallback(t=>{if(ae(t),at.current){at.current=null,Tt(!1);return}const i=F.current;i?.pointerId!==void 0&&t.pointerId!==i.pointerId||Xt()||(qt.current&&(vt(null),kt(null)),v.current=null,Q(null))},[Xt,Q,vt]),Dn=u.useCallback(()=>{Qt.current=null,e||ye()?.clearHover(),A(null),O(null)},[e]),In=u.useCallback(t=>{const i=w.current?.parentElement??null;if(Oo(i,t.clientX,t.clientY))return;const c=y(t.clientX,t.clientY);if(!c)return;const a=re(s,c);if(!a)return;const f=T(s,c);if(!f)return;const p=a.get(c);if(p===null){console.warn(`[RootSelectionOverlay] text edit refused for "${c}": dynamic body or has child elements — not inline-editable.`),ft(null),Ct({id:c,rect:f});return}Ct(null),ft({id:c,rect:f,initialText:p})},[s,y,ft]),On=u.useCallback(t=>{const i=be.current;if(!i)return;const c=re(s,i.id);c&&(Jt.current={id:i.id,rect:i.rect},c.set(i.id,t)),ft(null)},[s,ft]),Ln=u.useCallback(()=>ft(null),[ft]);if(!ni(s)||Mi())return null;const ot=new Set([...r.selectedEntityIds].filter(t=>s.hierarchy.node(t)!==void 0)),ne=I!==null&&!ot.has(I)?T(s,I):null,$=Ti(s,ot),it=$?.rect??null,Mn=$?.ownerBoxEdit??null,oe=n&&$?xt(s,$.id):null,G=oe&&se(oe)?oe:null,B=n&&$?$.ownerBoxEdit.gizmoOrigin?.($.id)??{x:$.rect.x+$.rect.width/2,y:$.rect.y+$.rect.height/2}:null,bt=le/m.zoom,ie=n&&ot.size>1?[...ot][0]:null,Re=ie?K(s,ie)?.gizmoOrigin?.(ie)??null:null,ct=$?$.ownerBoxEdit.referencePoint?.($.id):null,Tn=$?.spacingBands??[],wt=ot.size===1?[...ot][0]:null,Gt=wt?Fe(s,wt):null,Fn=wt&&Gt?Gt.layers(wt).filter(t=>n&&t.category==="origin"?un:r.showHelpers?r.helperVisibility[t.category]??!0:!1):[],Pt=n?{selectedSingleRect:null,measureLines:[],positionBadge:null,showPositionBadge:!1,parentRect:null}:Xi(s,ot,ne),Pe=n?null:Fi(s,ot),At=we.current,Xn=n?[]:At&&At.adapter===s&&At.version===h?At.hints:(()=>{const t=ho(s);return we.current={adapter:s,version:h,hints:t},t})();return l.jsxs("div",{style:{position:"absolute",inset:0,zIndex:qo,pointerEvents:"none"},children:[l.jsx("div",{ref:w,"data-testid":"world-selection-overlay-interaction",style:{position:"absolute",inset:0,pointerEvents:"auto",touchAction:"none",userSelect:"none",cursor:k??ai(fn,pn,lt,!!j)},onPointerDownCapture:zn,onPointerMove:J,onPointerUp:tt,onPointerCancel:_,onLostPointerCapture:_,onPointerLeave:Dn,onDoubleClick:In,onContextMenu:Ot,onDragOver:Sn,onDrop:En}),L?l.jsx(Go,{state:L,onClose:()=>Z(null)}):null,V?l.jsx($i,{state:V,adapter:s,onClose:()=>nt(null)}):null,l.jsxs("div",{"data-testid":"world-selection-overlay-chrome",style:{position:"absolute",inset:0,pointerEvents:"none",transform:mo(m),transformOrigin:"0 0"},children:[!n&&Xn.map(t=>l.jsx("div",{"data-testid":"world-empty-container-hint","data-entity-id":t.id,title:t.displayName,style:{position:"absolute",left:t.rect.x,top:t.rect.y,width:t.rect.width,height:t.rect.height,borderStyle:"dashed",borderColor:"rgba(154, 160, 166, 0.7)",borderWidth:n?1/m.zoom:1,boxSizing:"border-box",pointerEvents:"none"}},t.id)),ne&&l.jsx("div",{"data-testid":"world-selection-hover",style:{...Ae(ne,!1),...n?{borderWidth:1/m.zoom}:{}}}),[...ot].map(t=>{const i=T(s,t);if(!i)return null;const c=n?xt(s,t):null,a=c&&se(c)?c:null;return l.jsxs("div",{children:[l.jsx("div",{"data-testid":"world-selection-box","data-entity-id":t,"data-turned":a?"true":void 0,style:{...a?di(a,1/m.zoom):Ae(i,!0),...n&&!a?{borderWidth:1/m.zoom,background:"transparent"}:{}}}),!n&&l.jsx("div",{"data-testid":"world-selection-label",style:ui(i),children:ei(s,t)})]},t)}),j&&l.jsx("div",{"data-testid":"world-selection-marquee",style:{position:"absolute",left:j.x,top:j.y,width:j.width,height:j.height,border:`1px solid ${Y}`,background:`color-mix(in srgb, ${Y} 10%, transparent)`,pointerEvents:"none"}}),!n&&l.jsx(Bi,{measureLines:Pt.measureLines,snapGuides:yn,positionBadge:Pt.positionBadge,showPositionBadge:Pt.showPositionBadge,badgeAnchorRect:Pt.selectedSingleRect,parentRect:Pt.parentRect,screenScale:H,screenZoom:1}),!n&&l.jsx(Yi,{dragGhost:hn,reorderPreview:gn}),!n&&Pe&&l.jsx(Zo,{adapter:s,entries:Pe}),X?l.jsx("div",{"data-testid":"world-2d-temporary-pivot","aria-label":"Temporary pivot",style:{position:"absolute",left:X.x-8,top:X.y-8,width:16,height:16,transform:`scale(${H})`,transformOrigin:"center",pointerEvents:"none",background:"linear-gradient(#ffb020, #ffb020) center / 16px 2px no-repeat, linear-gradient(#ffb020, #ffb020) center / 2px 16px no-repeat"}}):null,Re&&Kt(n,r.transformMode,"scale")&&Mt&>&&["x","y"].map(t=>l.jsx("div",{"data-testid":`world-2d-group-scale-${t}`,title:t==="x"?"Scale the selection on X":"Scale the selection on Y",style:{...ce(Ue(t,Re,bt),t==="x"?"ew-resize":"ns-resize"),transform:`scale(${H})`,transformOrigin:"center",background:t==="x"?"#ef5350":"#66bb6a"},onPointerDown:i=>jt(t,i),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)),it&&Mn&&l.jsxs(l.Fragment,{children:[!n&&Tn.map(t=>l.jsxs("div",{children:[l.jsx("div",{"data-testid":`world-spacing-${t.kind}-${Gi(t.side)}`,style:vi(t),onPointerDown:i=>Pn(t,i),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),!t.isZero&&l.jsx("div",{style:{...mi(t),...n?{transform:`translate(-50%, -50%) scale(${H})`,transformOrigin:"center"}:{}},children:Math.round(t.value)})]},t.side)),ct&&l.jsx("div",{"aria-label":`Edit ${ct.label}`,"data-reference-kind":ct.kind,"data-testid":"world-reference-point-handle",title:`${ct.label} (${ct.bounded?"native corner/edge/center snap":"8px/alignment snap"}, Alt for free movement)`,style:{...xi(ct),...n?{transform:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:t=>Cn(ct,t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_,onLostPointerCapture:_,role:"button",tabIndex:0,children:ct.kind==="anchor"?"A":"P"}),wt&&Gt&&Fn.flatMap(t=>t.handles.map(i=>l.jsx("div",{"aria-label":i.label,"data-testid":"world-spatial-handle","data-handle-id":i.id,"data-writable":i.writable,role:"button",tabIndex:0,title:i.writable?i.label:`${i.label} — ${i.reason}`,style:{...fi(i),transform:`translate(-50%, -50%) scale(${H})`},onPointerDown:c=>jn(wt,Gt,i,c),onPointerMove:Rn,onPointerUp:ee,onPointerCancel:ee,onLostPointerCapture:ee},`${t.id}:${i.id}`))),n&&r.transformMode==="translate"&&Mt&&l.jsxs(l.Fragment,{children:[l.jsx("div",{"data-testid":"world-2d-move-axis-x",title:"Move on X axis",style:{position:"absolute",left:B.x,top:B.y-5/m.zoom,width:bt,height:10/m.zoom,borderTop:`${2/m.zoom}px solid #ef5350`,boxSizing:"border-box",cursor:"ew-resize",pointerEvents:"auto"},onPointerDown:t=>te("x",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),l.jsx("div",{"data-testid":"world-2d-move-axis-y",title:"Move on Y axis",style:{position:"absolute",left:B.x-5/m.zoom,top:B.y,width:10/m.zoom,height:bt,borderLeft:`${2/m.zoom}px solid #66bb6a`,boxSizing:"border-box",cursor:"ns-resize",pointerEvents:"auto"},onPointerDown:t=>te("y",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),l.jsx("div",{"data-testid":"world-2d-move-center",title:"Move freely",style:{position:"absolute",left:B.x-5/m.zoom,top:B.y-5/m.zoom,width:10/m.zoom,height:10/m.zoom,border:"1px solid rgba(255,255,255,.9)",background:"#4aa3ff",boxSizing:"border-box",cursor:"move",pointerEvents:"auto"},onPointerDown:t=>te("both",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_})]}),Kt(n,r.transformMode,"scale")&&Mt&&(gt?l.jsxs(l.Fragment,{children:[l.jsx("div",{"data-testid":"world-2d-scale-axis-x",style:{position:"absolute",left:B.x,top:B.y,width:bt,borderTop:`${2/m.zoom}px solid #ef5350`,pointerEvents:"none"}}),l.jsx("div",{"data-testid":"world-2d-scale-axis-y",style:{position:"absolute",left:B.x,top:B.y,height:bt,borderLeft:`${2/m.zoom}px solid #66bb6a`,pointerEvents:"none"}}),[["x","ew-resize"],["y","ns-resize"],["both","nwse-resize"]].map(([t,i])=>{const c=Ue(t,B,bt),a=t==="x"?"e":t==="y"?"s":"se";return l.jsx("div",{"data-testid":`world-resize-handle-${a}`,style:{...ce(c,i),transform:`scale(${H})`,transformOrigin:"center",background:t==="x"?"#ef5350":t==="y"?"#66bb6a":"#fff"},onPointerDown:f=>jt(t,f),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)})]}):l.jsxs(l.Fragment,{children:[yo.map(({pos:t,cursor:i})=>l.jsx("div",{"data-testid":`world-resize-handle-${t}`,style:{...ce(G?go(G,t):vo(it,t),i),...n?{transform:G?`rotate(${zt(G)}rad) scale(${H})`:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:c=>kn(t,c),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)),l.jsx("div",{"data-testid":"world-resize-dimension-label",style:{...hi(it),...n?{top:it.y+it.height+4*H,transform:`scale(${H})`,transformOrigin:"top left"}:{}},children:G?`${Math.round(Math.hypot(G.tr.x-G.tl.x,G.tr.y-G.tl.y))}×${Math.round(Math.hypot(G.bl.x-G.tl.x,G.bl.y-G.tl.y))}`:`${Math.round(it.width)}×${Math.round(it.height)}`})]})),Kt(n,r.transformMode,"rotate")&&Mt&&l.jsxs(l.Fragment,{children:[gt&&l.jsx("div",{"data-testid":"world-2d-rotate-ring",style:{position:"absolute",left:B.x-40/m.zoom,top:B.y-40/m.zoom,width:80/m.zoom,height:80/m.zoom,border:`${1/m.zoom}px solid #4aa3ff`,borderRadius:"50%",boxSizing:"border-box",pointerEvents:"none"}}),l.jsx("div",{"data-testid":"world-rotate-handle","aria-label":"Rotate selection",title:n?"Rotate selection (snaps under Smart Snap or Use Rotation Snap; Cmd inverts)":"Rotate selection (15° snap, Alt for free rotation)",style:{...pi(it),...n&&!gt?{...ci(G,it,dn*H),transform:`scale(${H})`,transformOrigin:"center"}:{},...gt?{left:B.x-et/2,top:B.y-40/m.zoom-et/2,transform:`scale(${H})`,transformOrigin:"center",background:"#4aa3ff"}:{}},onPointerDown:Bt,onPointerMove:J,onPointerUp:tt,onPointerCancel:_,role:"button",tabIndex:0})]})]}),!n&&l.jsx(Hi,{textEdit:mn,onCommitTextEdit:On,onCancelTextEdit:Ln,textEditRefused:Ft,eyedropperActive:lt,eyedropperPreview:wn})]})]})}function Bi(e){const{measureLines:o,snapGuides:n,positionBadge:d,showPositionBadge:r,badgeAnchorRect:h,parentRect:s,screenScale:y,screenZoom:w}=e;return l.jsxs(l.Fragment,{children:[s&&l.jsx("div",{"data-testid":"world-parent-outline",style:ji(s)}),o.map(v=>l.jsxs("div",{"data-testid":"world-measure-line",children:[l.jsx("div",{style:Si(v)}),l.jsx("div",{style:Ne(v.x1,v.y1,v.orientation==="horizontal")}),l.jsx("div",{style:Ne(v.x2,v.y2,v.orientation==="horizontal")}),l.jsx("div",{"data-testid":"world-measure-line-label",style:{...Ei(v),...y!==1?{transform:`translate(-50%, -50%) scale(${y})`,transformOrigin:"center"}:{}},children:v.distance})]},v.orientation)),n.map(v=>l.jsx("div",{"data-testid":"world-snap-guide",style:ki(v)},v.orientation)),r&&h&&d&&l.jsxs("div",{"data-testid":"world-position-badge",style:{...Ci(h),...y!==1?{top:h.y-36/w,transform:`scale(${y})`,transformOrigin:"top left"}:{}},children:[d.position&&l.jsx("span",{"data-testid":"world-position-badge-mode",style:We,children:d.position}),d.parentLayout&&l.jsx("span",{"data-testid":"world-position-badge-layout",style:We,children:d.parentLayout})]})]})}function Yi(e){const{dragGhost:o,reorderPreview:n}=e;return l.jsxs(l.Fragment,{children:[o&&l.jsx("div",{"data-testid":"world-drag-ghost",style:bi(o)}),n&&l.jsx("div",{"data-testid":"world-reorder-preview",style:wi(n.gap.marker)})]})}function Hi(e){const{textEdit:o,onCommitTextEdit:n,onCancelTextEdit:d,textEditRefused:r,eyedropperActive:h,eyedropperPreview:s}=e;return l.jsxs(l.Fragment,{children:[o&&l.jsx("div",{style:{pointerEvents:"auto"},children:l.jsx(Qo,{rect:o.rect,initialText:o.initialText,onCommit:n,onCancel:d})}),r&&l.jsx("div",{"data-testid":"world-text-edit-refused",title:"dynamic body — not inline-editable",style:{position:"absolute",left:r.rect.x,top:r.rect.y,width:Math.max(r.rect.width,40),height:Math.max(r.rect.height,20),border:`2px dashed ${st.semantic.danger}`,boxSizing:"border-box",background:st.semantic.dangerMuted,pointerEvents:"none"}}),h&&s&&l.jsx("div",{"data-testid":"world-eyedropper-swatch","data-color-state":s.color?"resolved":"unknown",style:{position:"absolute",left:s.x+12,top:s.y+12,width:24,height:24,borderRadius:4,border:"2px solid #fff",boxShadow:"0 1px 4px rgba(0,0,0,0.5)",background:s.color??"repeating-linear-gradient(45deg, #999, #999 4px, #ccc 4px, #ccc 8px)",pointerEvents:"none"}})]})}function Gi(e){return e.endsWith("Top")?"top":e.endsWith("Right")?"right":e.endsWith("Bottom")?"bottom":"left"}export{nr as R,$i as V,To as a,$o as b,Fo as c,qi as d,er as e,Ji as m,tr as r,Xo as s};
|
|
1
|
+
import{a as l}from"./jsx-runtime-DPjLkJKQ.js";import{r as u}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{ak as st,aM as Ze,a5 as St,hX as he,fw as Qe,dn as Et,bA as de,r as qe,cB as $n,jP as Je,jQ as Bn,d8 as Yn,jR as ze,jS as De,jT as Ie,aL as Oe,a6 as Le,jU as Hn,gH as Gn,jV as An,jW as Kn,jX as Nn,jY as K,eY as _n,T as Wn,aC as Vn,d5 as Un,bp as Zn,bq as Qn,fA as qn,jZ as re,j_ as tn,fM as T,j$ as ue,fP as xt,k0 as se,k1 as Dt,k2 as zt,fN as Jn,fO as Me,fQ as to,k3 as eo,k4 as no,k5 as oo,k6 as io,k7 as ro,k8 as so,k9 as Te,ka as ao,kb as lo,kc as co,kd as uo,ke as po,kf as fo,kg as xo,eU as en,fL as Fe,kh as ho,ki as yo,kj as go,kk as vo,dD as mo,kl as bo,aF as nn,km as wo,kn as So,ko as Eo,kp as ko,kq as Co,aG as Ro,fC as jo}from"./index-V4J7xfRg.js";import{s as Po,i as zo,r as Xe}from"./eyedropper-session-bjPXnfeX.js";import{a as Do,p as Io}from"./layered-pick-BUr1U8lU.js";import{z as Oo,j as Lo}from"./react-story-board-CT1_3sk_.js";import{v as ye}from"./viewport-editor-controls-BYaAZ_Ku.js";import{l as Mo}from"./inspect-DiSjB-N1.js";const $e=new WeakMap;let Be=0;function yt(e){let o=$e.get(e);return o||(o={guides:[],listeners:new Set,revision:0},$e.set(e,o)),o}function Vt(e){e.revision+=1;for(const o of e.listeners)o()}function To(e){return yt(e).guides}function Fo(e){return yt(e).revision}function Xo(e,o){const n=yt(e);return n.listeners.add(o),()=>n.listeners.delete(o)}function qi(e,o,n){Be+=1;const d=yt(e),r=`canvas-guide-${Be}`;return d.guides=[...d.guides,{id:r,axis:o,value:n}],Vt(d),r}function Ji(e,o,n){const d=yt(e),r=d.guides.map(h=>h.id===o?{...h,value:n}:h);r.every((h,s)=>h===d.guides[s])||(d.guides=r,Vt(d))}function tr(e,o){const n=yt(e),d=n.guides.filter(r=>r.id!==o);d.length!==n.guides.length&&(n.guides=d,Vt(n))}function er(e){const o=yt(e);o.guides.length!==0&&(o.guides=[],Vt(o))}const pe=new WeakMap,fe=new Set;let on=0;function ht(e){return pe.get(e)??null}function $o(e,o){o?pe.set(e,o):pe.delete(e),on+=1;for(const n of fe)n()}function Bo(e){return fe.add(e),()=>fe.delete(e)}function Yo(){return on}const rn="canvasCreateNode";function Ho(){return qe().projectLocalState.read(rn)??{favorites:[],recent:[]}}function Ye(e){qe().projectLocalState.write(rn,e)}function sn(e,o){u.useEffect(()=>{const n=r=>{e.current?.contains(r.target)||o()},d=r=>{r.key==="Escape"&&o()};return document.addEventListener("pointerdown",n),document.addEventListener("keydown",d),()=>{document.removeEventListener("pointerdown",n),document.removeEventListener("keydown",d)}},[e,o])}function Go({state:e,onClose:o}){const[n,d]=u.useState("menu");return n==="create"?l.jsx(No,{state:e,onClose:o}):n==="instantiate"?l.jsx(_o,{state:e,onClose:o}):l.jsx(Ao,{state:e,onClose:o,onPick:d})}function Ao({state:e,onClose:o,onPick:n}){const d=u.useRef(null);return sn(d,o),l.jsx(he,{children:l.jsxs(Qe,{ref:d,"aria-label":"Add node here","data-testid":"viewport-add-menu",style:{position:"fixed",left:e.x,top:e.y,minWidth:190,zIndex:Et.dropdown},children:[l.jsx(de,{"data-testid":"viewport-add-menu-item",disabled:e.kinds.length===0,title:e.kinds.length===0?"Nothing can be added under the selected node.":void 0,onSelect:()=>n("create"),children:"Add 2D Node Here…"}),e.adapter.assetDrop?l.jsx(de,{"data-testid":"viewport-add-menu-item",disabled:e.kinds.length===0,title:e.kinds.length===0?"Nothing can be added under the selected node.":void 0,onSelect:()=>n("instantiate"),children:"Instantiate Scene Here…"}):null]})})}function an({title:e,testId:o,onClose:n,children:d,footer:r}){const h=u.useRef(null);return sn(h,n),l.jsx(he,{children:l.jsx("div",{style:{position:"fixed",inset:0,zIndex:Et.dropdown,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0, 0, 0, .35)"},children:l.jsxs("div",{ref:h,role:"dialog","aria-label":e,"data-testid":o,style:{width:640,maxWidth:"90vw",maxHeight:"80vh",display:"flex",flexDirection:"column",gap:8,padding:12,borderRadius:6,background:st.surface.raised,color:st.content.primary,boxShadow:"0 12px 40px rgba(0, 0, 0, .5)",fontSize:12},children:[l.jsx("div",{style:{fontWeight:600},children:e}),d,l.jsx("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:r})]})})})}const N={color:st.content.muted};function xe({selected:e,onPick:o,onOpen:n,testId:d,indent:r=0,children:h}){return l.jsx("div",{role:"option","aria-selected":e,"data-testid":d,onClick:o,onDoubleClick:n,style:{padding:`2px 6px 2px ${6+r*14}px`,borderRadius:3,cursor:"default",background:e?st.accent.muted:"transparent"},children:h})}function Ko(e,o){let n=0,d=e.extends?o.get(e.extends):void 0;for(;d&&n<16;)n+=1,d=d.extends?o.get(d.extends):void 0;return n}function ln(e){const[o,n]=u.useState(null),[d,r]=u.useState(null);return u.useEffect(()=>{if(!e)return;let h=!0;return $n().then(s=>{if(h){if(!s.ok){r(s.reason),n([]);return}n(s.entries.filter(y=>y.surface==="canvas"&&y.exported&&y.contentKind!=="image"))}}),()=>{h=!1}},[e]),{components:o,failure:d}}const He=e=>`component:${e.path}#${e.name}`;function cn(e,o){const n=e.adapter.assetDrop;if(!n)return"This surface places no components.";const d={position:[e.at.x,e.at.y,0],item:{kind:"component",name:o.name,sourcePath:o.path,exportKind:o.defaultExport?"default":"named",surface:o.surface}},r=e.parentId??"";return n.accepts(r,o.path,d)?(Je(e.adapter,r,o.path,d),null):`${o.name} cannot be placed here.`}function No({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState(Ho),[s,y]=u.useState({builtIn:!0,custom:!0}),[w,v]=u.useState(!1),[b,R]=u.useState(null),{components:P}=ln(!!e.adapter.assetDrop),I=e.kinds.find(x=>!x.extends),O=(P??[]).map(x=>({kind:He(x),label:x.name,...I?{extends:I.kind}:{},description:`A project component, from ${x.path}.`})),k=[...s.builtIn?e.kinds:[],...s.custom?O:[]],A=u.useMemo(()=>new Map([...e.kinds,...O].map(x=>[x.kind,x])),[e.kinds,P]),V=k.filter(x=>x.label.toLowerCase().includes(n.trim().toLowerCase())),[nt,U]=u.useState(e.kinds[0]?.kind??null),L=nt&&V.some(x=>x.kind===nt)?nt:V[0]?.kind??null,Z=L?A.get(L):void 0,ut=x=>{if(!x)return;const X=(P??[]).find(j=>He(j)===x);if(X){const j=cn(e,X);if(j){R(j);return}}else e.structure.create(x,e.parentId??void 0,e.at).ack;Ye({...r,recent:[x,...r.recent.filter(j=>j!==x)].slice(0,10)}),o()},It=()=>{if(!L)return;const x=r.favorites.includes(L)?r.favorites.filter(j=>j!==L):[...r.favorites,L],X={...r,favorites:x};Ye(X),h(X)},Ot=(x,X)=>x.map(j=>A.get(j)).filter(j=>j!==void 0).map(j=>l.jsx(xe,{testId:X,selected:j.kind===L,onPick:()=>U(j.kind),onOpen:()=>ut(j.kind),children:j.label},j.kind));return l.jsx(an,{title:`Create New ${I?.label??"Node"}`,testId:"canvas-create-node-dialog",onClose:o,footer:l.jsxs(l.Fragment,{children:[l.jsx(St,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),l.jsx(St,{type:"button","data-testid":"canvas-create-node-create",disabled:!L,onClick:()=>ut(L),children:"Create"})]}),children:l.jsxs("div",{style:{display:"flex",gap:12,minHeight:240},children:[l.jsxs("div",{style:{width:170,display:"flex",flexDirection:"column",gap:4},children:[l.jsx("span",{style:N,children:"Favorites:"}),l.jsx("div",{"data-testid":"canvas-create-node-favorites",style:{flex:1},children:Ot(r.favorites,"canvas-create-node-favorite")}),l.jsx("span",{style:N,children:"Recent:"}),l.jsx("div",{"data-testid":"canvas-create-node-recent",style:{flex:1},children:Ot(r.recent,"canvas-create-node-recent-item")})]}),l.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:4},children:[l.jsx("span",{style:N,children:"Search:"}),l.jsxs("div",{style:{display:"flex",gap:4},children:[l.jsx(Ze,{"data-testid":"canvas-create-node-search",value:n,autoFocus:!0,onChange:x=>d(x.target.value),onKeyDown:x=>{if(x.key==="Enter"&&ut(L),x.key==="ArrowDown"||x.key==="ArrowUp"){x.preventDefault();const X=V.findIndex(Lt=>Lt.kind===L),j=V[Math.min(V.length-1,Math.max(0,X+(x.key==="ArrowDown"?1:-1)))];j&&U(j.kind)}},style:{flex:1}}),l.jsx(St,{type:"button",variant:"ghost","data-testid":"canvas-create-node-favorite-toggle","aria-pressed":L?r.favorites.includes(L):!1,title:"(Un)favorite selected item.",disabled:!L,onClick:It,children:L&&r.favorites.includes(L)?"★":"☆"})]}),l.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[l.jsx("span",{style:N,children:"Matches:"}),l.jsx("span",{style:{flex:1}}),l.jsx(St,{type:"button",variant:"ghost","data-testid":"canvas-create-node-filters","aria-haspopup":"menu","aria-expanded":w,onClick:()=>v(!w),children:"Filters"})]}),w?l.jsx("div",{role:"menu","data-testid":"canvas-create-node-filter-menu",style:{display:"flex",gap:12},children:[["builtIn","Show Built-in"],["custom","Show Custom"]].map(([x,X])=>l.jsxs("label",{role:"menuitemcheckbox","aria-checked":s[x],style:{display:"flex",gap:4},children:[l.jsx("input",{type:"checkbox","data-testid":`canvas-create-node-filter-${x}`,checked:s[x],onChange:()=>y({...s,[x]:!s[x]})}),X]},x))}):null,l.jsx("div",{role:"listbox","data-testid":"canvas-create-node-matches",style:{flex:1,overflow:"auto"},children:V.map(x=>l.jsx(xe,{testId:"canvas-create-node-match",indent:n.trim()===""?Ko(x,A):0,selected:x.kind===L,onPick:()=>U(x.kind),onOpen:()=>ut(x.kind),children:x.label},x.kind))}),l.jsx("span",{style:N,children:"Description:"}),b?l.jsx("span",{"data-testid":"canvas-create-node-failure",style:N,children:b}):null,l.jsx("div",{"data-testid":"canvas-create-node-description",style:{minHeight:36},children:Z?l.jsxs(l.Fragment,{children:[l.jsxs("div",{children:[Z.label,Z.extends?l.jsx("span",{style:N,children:` < ${A.get(Z.extends)?.label??Z.extends}`}):null]}),Z.description?l.jsx("div",{style:N,children:Z.description}):null]}):null})]})]})})}function _o({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState(null),{components:s,failure:y}=ln(!0),[w,v]=u.useState(null),b=w??y,R=k=>`${k.path}#${k.name}`,P=(s??[]).filter(k=>`${k.name} ${k.path}`.toLowerCase().includes(n.trim().toLowerCase())),I=P.find(k=>R(k)===r)??P[0]??null,O=k=>{if(!k)return;const A=cn(e,k);if(A){v(A);return}o()};return l.jsxs(an,{title:"Instantiate Scene",testId:"canvas-instantiate-dialog",onClose:o,footer:l.jsxs(l.Fragment,{children:[l.jsx(St,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),l.jsx(St,{type:"button","data-testid":"canvas-instantiate-open",disabled:!I,onClick:()=>O(I),children:"Instantiate"})]}),children:[l.jsx("span",{style:N,children:"Search:"}),l.jsx(Ze,{"data-testid":"canvas-instantiate-search",value:n,autoFocus:!0,onChange:k=>d(k.target.value),onKeyDown:k=>{k.key==="Enter"&&O(I)}}),l.jsxs("div",{role:"listbox","data-testid":"canvas-instantiate-matches",style:{minHeight:160,overflow:"auto"},children:[s===null?l.jsx("span",{style:N,children:"Reading the project's components…"}):null,s!==null&&P.length===0?l.jsx("span",{style:N,children:"No canvas component matches."}):null,P.map(k=>l.jsxs(xe,{testId:"canvas-instantiate-match",selected:I!==null&&R(k)===R(I),onPick:()=>h(R(k)),onOpen:()=>O(k),children:[k.name," ",l.jsx("span",{style:N,children:k.path})]},R(k)))]}),b?l.jsx("span",{"data-testid":"canvas-instantiate-failure",style:N,children:b}):null]})}function Ge(e,o){for(const n of o){const d=K(e,n.id);if(!d)continue;const r={};n.x!==void 0&&(r.x=n.x),n.y!==void 0&&(r.y=n.y),Object.keys(r).length!==0&&(d.begin(n.id),d.apply(n.id,r),d.end(n.id))}}const Wo=[{op:"left",testId:"align-left",label:"Align left",icon:ze},{op:"hcenter",testId:"align-hcenter",label:"Align horizontal center",icon:De},{op:"right",testId:"align-right",label:"Align right",icon:Ie},{op:"top",testId:"align-top",label:"Align top",icon:ze,rotate:!0},{op:"vcenter",testId:"align-vcenter",label:"Align vertical center",icon:De,rotate:!0},{op:"bottom",testId:"align-bottom",label:"Align bottom",icon:Ie,rotate:!0}],Vo=[{axis:"horizontal",testId:"distribute-horizontal",label:"Distribute horizontally",icon:An},{axis:"vertical",testId:"distribute-vertical",label:"Distribute vertically",icon:Kn}];function Uo(e){const d=e.y-30-8;return{left:e.x,top:d<0?e.y+e.height+8:d}}function Zo({adapter:e,entries:o}){if(o.length<2)return null;const n=Bn(o.map(s=>s.rect));if(!n)return null;const{left:d,top:r}=Uo(n),h=o.length>=3;return l.jsxs(Yn,{label:"Align and distribute","data-testid":"align-toolbar",style:{position:"absolute",left:d,top:r,zIndex:Et.overlayLow,gap:2,padding:3},children:[Wo.map(({op:s,testId:y,label:w,icon:v,rotate:b})=>l.jsx(Oe,{"data-testid":y,title:w,"aria-label":w,variant:"ghost",size:"compact",onClick:()=>Ge(e,Hn(o,s)),children:l.jsx(Le,{icon:v,"aria-hidden":"true",style:b?{transform:"rotate(90deg)"}:void 0})},s)),h&&l.jsxs(l.Fragment,{children:[l.jsx(Gn,{}),Vo.map(({axis:s,testId:y,label:w,icon:v})=>l.jsx(Oe,{"data-testid":y,title:w,"aria-label":w,variant:"ghost",size:"compact",onClick:()=>Ge(e,Nn(o,s)),children:l.jsx(Le,{icon:v,"aria-hidden":"true"})},s))]})]})}function Qo({rect:e,initialText:o,onCommit:n,onCancel:d}){const[r,h]=u.useState(o),s=u.useRef(null),y=u.useRef(!1);u.useEffect(()=>{const b=s.current;b&&(b.focus(),b.select())},[]);const w=()=>{y.current||(y.current=!0,n(r))},v=()=>{y.current||(y.current=!0,d())};return l.jsx(_n,{ref:s,"data-testid":"world-text-editor",value:r,onChange:b=>h(b.target.value),onBlur:w,onKeyDown:b=>{b.key==="Escape"?(b.stopPropagation(),v()):b.key==="Enter"&&!b.shiftKey&&(b.preventDefault(),w())},"data-variant":"inline-editor",style:{position:"absolute",left:e.x,top:e.y,width:Math.max(e.width,40),height:Math.max(e.height,20),boxSizing:"border-box",zIndex:Et.overlayLow,pointerEvents:"auto",resize:"none"}})}const Y=st.accent.default,qo=Et.overlayLow,Wt=5;function Jo(e,o,n){return e?!1:ye()?.activate(o,n)??!1}function ti(e,o,n,d,r,h){const s=e?null:ye()?.hover(o,n)??null;r(s),h(s?null:d(o,n))}function ei(e,o){const n=e.hierarchy.node(o);return n?`${n.label}·${n.kind}`:o}function ni(e){return e instanceof nn?e.childAdapters().some(o=>!!o.adapter.rects):!!e.rects}function oi(e){const o=e instanceof nn?e.childAdapters():[{worldId:"",adapter:e}],n=[];for(const{worldId:d,adapter:r}of o)if(r.rects&&!(d&&Ro(d)))for(const h of jo(r)){if(r.inspector?.get(h,"locked")===!0)continue;const s=r.rects.rect(h);s&&n.push({id:h,rect:s})}return n}function ii(e,o){return e.x<o.x+o.width&&e.x+e.width>o.x&&e.y<o.y+o.height&&e.y+e.height>o.y}function ri(e,o,n){if(!n)return[o];const d=new Set(e);return d.has(o)?d.delete(o):d.add(o),[...d]}function si(e,o,n,d){return o&&!!n&&(n.width>Wt||n.height>Wt)&&n?oi(e).filter(s=>ii(n,s.rect)).map(s=>s.id):d?null:[]}function ai(e,o,n,d){return e?"grabbing":o?"grab":n||d?"crosshair":"default"}function rt(e){try{e.currentTarget.setPointerCapture?.(e.pointerId)}catch{}}function ae(e){e.currentTarget.hasPointerCapture?.(e.pointerId)&&e.currentTarget.releasePointerCapture?.(e.pointerId)}function li(e,o){if(o!==null)return!1;const n=e.currentTarget.parentElement?.parentElement??null;return Lo(n,e.clientX,e.clientY)}function Kt(e,o,n){return!e||o===n||o==="combined"||o==="select"}function Ae(e,o){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,borderStyle:"solid",borderColor:Y,borderWidth:o?2:1,background:o?`color-mix(in srgb, ${Y} 6%, transparent)`:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function ci(e,o,n){if(!e)return{left:o.x+o.width/2-et/2,top:o.y-n-et/2};const d=(e.tl.x+e.tr.x)/2,r=(e.tl.y+e.tr.y)/2,h=e.tl.x-e.bl.x,s=e.tl.y-e.bl.y,y=Math.hypot(h,s)||1;return{left:d+h/y*n-et/2,top:r+s/y*n-et/2}}function di(e,o){const n=Math.hypot(e.tr.x-e.tl.x,e.tr.y-e.tl.y),d=Math.hypot(e.bl.x-e.tl.x,e.bl.y-e.tl.y),r=(e.tl.x+e.br.x)/2,h=(e.tl.y+e.br.y)/2;return{position:"absolute",left:r-n/2,top:h-d/2,width:n,height:d,transform:`rotate(${zt(e)}rad)`,transformOrigin:"center",borderStyle:"solid",borderColor:Y,borderWidth:o,background:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function ui(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-18),padding:"2px 6px",fontSize:11,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:"#fff",background:Y,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const Nt=10,le=48;function ce(e,o){return{position:"absolute",left:e.x-Nt/2,top:e.y-Nt/2,width:Nt,height:Nt,background:"#fff",border:`1px solid ${Y}`,boxSizing:"border-box",cursor:o,pointerEvents:"auto"}}const et=12,dn=24;function pi(e){return{position:"absolute",left:e.x+e.width/2-et/2,top:e.y-dn-et/2,width:et,height:et,borderRadius:"50%",background:"#fff",border:`1px solid ${Y}`,boxSizing:"border-box",cursor:"grab",padding:0,pointerEvents:"auto"}}const Ke=12;function fi(e){return{position:"absolute",left:e.position[0],top:e.position[1],width:Ke,height:Ke,borderRadius:"50%",background:e.writable?e.color:"transparent",border:`2px solid ${e.color}`,boxSizing:"border-box",cursor:e.writable?"grab":"not-allowed",padding:0,pointerEvents:e.writable?"auto":"none",touchAction:"none"}}function xi(e){return{position:"absolute",left:e.x-8,top:e.y-8,width:16,height:16,display:"grid",placeItems:"center",borderRadius:e.kind==="anchor"?"50%":2,background:"#fff",border:`1px solid ${Y}`,boxSizing:"border-box",color:Y,cursor:"crosshair",fontSize:9,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:700,lineHeight:1,padding:0,pointerEvents:"auto",touchAction:"none"}}function hi(e){return{position:"absolute",left:e.x,top:e.y+e.height+4,padding:"2px 6px",fontSize:11,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:"#fff",background:Y,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const yi="rgba(46, 204, 113, 0.25)",gi="rgba(230, 126, 34, 0.25)";function vi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:e.kind==="padding"?yi:gi,boxSizing:"border-box",cursor:e.cursor,pointerEvents:"auto"}}function mi(e){return{position:"absolute",left:e.labelX,top:e.labelY,transform:"translate(-50%, -50%)",fontSize:10,fontFamily:"monospace",color:e.kind==="padding"?"#1b7a3d":"#a35a12",background:"rgba(255,255,255,0.85)",padding:"0 2px",borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}function bi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`2px dashed ${Y}`,background:`color-mix(in srgb, ${Y} 15%, transparent)`,boxSizing:"border-box",pointerEvents:"none",opacity:.7}}function wi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:"#ff5fa2",borderRadius:2,pointerEvents:"none"}}const ge="#ff2d92",_t=6;function Si(e){const o=e.orientation==="horizontal";return{position:"absolute",left:Math.min(e.x1,e.x2),top:Math.min(e.y1,e.y2),width:o?Math.abs(e.x2-e.x1):1,height:o?1:Math.abs(e.y2-e.y1),background:ge,pointerEvents:"none"}}function Ne(e,o,n){return{position:"absolute",left:n?e:e-_t/2,top:n?o-_t/2:o,width:n?1:_t,height:n?_t:1,background:ge,pointerEvents:"none"}}function Ei(e){return{position:"absolute",left:e.labelX,top:e.labelY,transform:"translate(-50%, -50%)",padding:"1px 4px",fontSize:10,fontFamily:"monospace",fontWeight:600,color:"#fff",background:ge,borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}const _e="#f24822";function ki(e){const o=e.orientation==="vertical";return{position:"absolute",left:o?e.at:e.start,top:o?e.start:e.at,width:o?1:e.end-e.start,height:o?e.end-e.start:1,borderLeft:o?`1px dashed ${_e}`:void 0,borderTop:o?void 0:`1px dashed ${_e}`,pointerEvents:"none"}}function Ci(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-36),display:"flex",gap:4,pointerEvents:"none"}}const We={padding:"2px 6px",fontSize:10,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:st.content.onAccent,background:`color-mix(in srgb, ${Y} 85%, transparent)`,borderRadius:3,whiteSpace:"nowrap"};function Ri(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`1px dashed color-mix(in srgb, ${Y} 45%, transparent)`,boxSizing:"border-box",pointerEvents:"none"}}function Ve(e,o,n,d=0){return o&&n>0?Math.round((e-d)/n)*n+d:e}function ji(e,o,n,d,r,h,s=!1){const y=e.nativeHandleSpan??1,w=s?"both":e.nativeScaleAxis??"both",v=s&&e.nativeScaleAxis==="x"?o:s&&e.nativeScaleAxis==="y"?n:null;let b,R;if(w==="x")b=1+o/y,R=1;else if(w==="y")b=1,R=1+n/y;else if(v!==null)b=1+v/y,R=b;else if(e.center){const P=(e.startAngleDeg??0)*Math.PI/180,I=e.startLocal.x-e.center.x,O=e.startLocal.y-e.center.y,k=I*Math.cos(P)+O*Math.sin(P),A=-I*Math.sin(P)+O*Math.cos(P),V=(I+o)*Math.cos(P)+(O+n)*Math.sin(P),nt=-(I+o)*Math.sin(P)+(O+n)*Math.cos(P);if(b=Math.abs(k)>1e-6?V/k:1,R=Math.abs(A)>1e-6?nt/A:1,s){const U=(b+R)/2;b=U,R=U}}else{const P=1+(o+n)/(Math.SQRT2*y);b=P,R=P}return{...w!=="y"?{scaleXFactor:b}:{},...w!=="x"?{scaleYFactor:R}:{},...d&&!r?{scaleStep:h}:{}}}function Pi(e,o,n,d,r,h,s={x:0,y:0}){const y=e.nativeOrigin;if(!y)return{};const w=d&&!0;return{...e.moveAxis!=="y"?{originX:Ve(y.x+o,w,h,s.x)}:{},...e.moveAxis!=="x"?{originY:Ve(y.y+n,w,h,s.y)}:{}}}function Ue(e,o,n){return e==="x"?{x:o.x+n,y:o.y}:e==="y"?{x:o.x,y:o.y+n}:{x:o.x+n/Math.SQRT2,y:o.y+n/Math.SQRT2}}function zi(e,o,n){return e==="x"?{dx:o,dy:0}:e==="y"?{dx:0,dy:n}:{dx:o,dy:n}}function Di(e,o){e.ownerBoxEdit.begin(e.id);for(const n of e.peers)n.ownerBoxEdit.begin(n.id);return{kind:"move",id:e.id,ownerBoxEdit:e.ownerBoxEdit,startLocal:o,origRect:e.origRect,context:e.context,...e.nativeOrigin?{nativeOrigin:e.nativeOrigin}:{},movePeers:e.peers}}function Ii(e,o,n){let d=o;for(let r=0;d!==null&&r<256;r++){if(n.has(d))return d;d=e.hierarchy.node(d)?.parentId??null}return null}function Oi(e,o,n){const d=K(e,o);if(!d)return null;const r=e.inspector?.get(o,"style.position"),h=ue(e,o)==="2d";if(r!=="absolute"&&r!=="fixed"&&!h)return null;const s=T(e,o);if(!s)return null;const y=h?d.gizmoOrigin?.(o)??void 0:void 0,w=[];for(const v of n){if(v===o)continue;const b=K(e,v),R=T(e,v);if(!b||!R)continue;const P=e.inspector?.get(v,"style.position"),I=ue(e,v)==="2d";if(P!=="absolute"&&P!=="fixed"&&!I)continue;const O=I?b.gizmoOrigin?.(v)??void 0:void 0;w.push({id:v,ownerBoxEdit:b,origRect:R,...O?{nativeOrigin:O}:{}})}return{id:o,ownerBoxEdit:d,origRect:s,context:Dt(e,o),...y?{nativeOrigin:y}:{},peers:w}}function Li(e,o){if(!tn(e,o)?.reorder)return null;const d=bo(e,o);if(!d||d.length<3)return null;const r=T(e,o);if(!r)return null;const h=[];for(const s of d){if(s===o)continue;const y=T(e,s);y&&h.push({id:s,rect:y})}return h.length===0?null:{id:o,adapter:e,origRect:r,siblingRects:h}}function Mi(){return wo()}function Ti(e,o){if(o.size!==1)return null;const n=[...o][0],d=K(e,n);if(!d)return null;const r=T(e,n);if(!r)return null;const h=So(r,Eo(e,n));return{id:n,rect:r,ownerBoxEdit:d,spacingBands:h}}function Fi(e,o){if(o.size<2)return null;const n=[];for(const d of o){const r=T(e,d);if(!r||!K(e,d))return null;n.push({id:d,rect:r})}return n}function Xi(e,o,n){const d=o.size===1?[...o][0]:null,r=d?T(e,d):null,h=r&&n?ko(r,n):[],s=d?Co(e,d):null,y=!!(s&&(s.position||s.parentLayout)),w=d?Dt(e,d)?.parent??null:null;return{selectedSingleRect:r,measureLines:h,positionBadge:s,showPositionBadge:y,parentRect:w}}function $i({state:e,adapter:o,onClose:n}){const d=u.useRef(null);return u.useEffect(()=>{const r=s=>{d.current?.contains(s.target)||n()},h=s=>{s.key==="Escape"&&n()};return document.addEventListener("pointerdown",r),document.addEventListener("keydown",h),()=>{document.removeEventListener("pointerdown",r),document.removeEventListener("keydown",h)}},[n]),l.jsx(he,{children:l.jsx(Qe,{ref:d,"aria-label":"Pick object under pointer","data-testid":"viewport-pick-menu",style:{position:"fixed",left:e.x,top:e.y,minWidth:190,maxWidth:320,zIndex:Et.dropdown},children:e.ids.map(r=>{const h=o.hierarchy.node(r);return l.jsxs(de,{"data-testid":"viewport-pick-menu-item",onSelect:()=>{en(o,[r]),n()},style:{justifyContent:"space-between",gap:20},children:[l.jsx("span",{children:h?.label??r}),l.jsx("span",{style:{color:st.content.muted,fontSize:11},children:h?.kind??""})]},r)})})})}function nr({adapter:e,view:o,transformModeAware:n=!1,presentationId:d}={}){const r=Wn(),h=u.useSyncExternalStore(r.subscribe,r.getSnapshot),s=e??Vn(r),y=u.useCallback((t,i)=>e?e.pickable?.pick(t,i)??null:Do(r,t,i),[e,r]),w=u.useRef(null),v=u.useRef(null),b=u.useRef(null),[R,P]=u.useState(null),[I,O]=u.useState(null),[k,A]=u.useState(null),[V,nt]=u.useState(null),U=u.useRef(null),[L,Z]=u.useState(null),ut=u.useRef(()=>{}),It=u.useCallback((t,i,c=!1)=>{const a=Io(r,t,i,{...e?{adapter:e}:{},...c?{includeLocked:c}:{}});if(a.length===0){nt(null);return}nt({x:t,y:i,ids:a})},[e,r]);u.useEffect(()=>{const t=c=>{const a=U.current;!a||a.pointerId!==c.pointerId||a.moved||Math.hypot(c.clientX-a.startClientX,c.clientY-a.startClientY)>Wt&&(a.moved=!0)},i=c=>{const a=U.current;!a||a.pointerId!==c.pointerId||(U.current=null,c.type==="pointerup"&&!a.moved&&(n&&!c.altKey?ut.current(c.clientX,c.clientY):It(c.clientX,c.clientY,n)))};return window.addEventListener("pointermove",t),window.addEventListener("pointerup",i),window.addEventListener("pointercancel",i),()=>{window.removeEventListener("pointermove",t),window.removeEventListener("pointerup",i),window.removeEventListener("pointercancel",i)}},[It,n]);const Ot=u.useCallback(t=>{t.preventDefault(),t.stopPropagation()},[]),x=o??Un;u.useSyncExternalStore(Bo,Yo);const X=n?ht(x):null,j=[...r.selectedEntityIds].sort().join("\0"),Lt=u.useRef(j);u.useEffect(()=>{Lt.current!==j&&(Lt.current=j,ht(x)&&$o(x,null))},[j,x]);const m=u.useSyncExternalStore(x.subscribe,x.get,x.get);u.useSyncExternalStore(u.useCallback(t=>Xo(x,t),[x]),u.useCallback(()=>Fo(x),[x]));const Ut=n?To(x):[],H=n?1/m.zoom:1,gt=n&&r.transformMode!=="combined"&&r.transformMode!=="select";u.useSyncExternalStore(Zn,Qn);const ve=d?qn(d):null,un=ve?.position??!0,Mt=!gt||(ve?.transformation??!0),Zt=u.useRef(!1),Qt=u.useRef(null),[pn,me]=u.useState(!1),at=u.useRef(null),[fn,Tt]=u.useState(!1),F=u.useRef(null);u.useEffect(()=>()=>{const t=F.current;if(F.current=null,!!t){t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id)}},[]);const[,xn]=u.useState(0),[hn,kt]=u.useState(null),[yn,pt]=u.useState([]),qt=u.useRef(null),[gn,vn]=u.useState(null),vt=u.useCallback(t=>{qt.current=t,vn(t)},[]),be=u.useRef(null),[mn,bn]=u.useState(null),[Ft,Ct]=u.useState(null),ft=u.useCallback(t=>{be.current=t,bn(t)},[]),Jt=u.useRef(null),we=u.useRef(null);u.useEffect(()=>{const t=Jt.current;if(!t)return;Jt.current=null;const i=re(s,t.id);i&&i.get(t.id)===null&&Ct({id:t.id,rect:t.rect})},[h]);const Se=u.useRef("");u.useEffect(()=>{const t=[...r.selectedEntityIds].sort().join(",");t!==Se.current&&(Se.current=t,Ft&&Ct(null))}),u.useEffect(()=>{if(!Ft)return;const t=window.setTimeout(()=>Ct(null),4e3);return()=>window.clearTimeout(t)},[Ft]);const lt=u.useSyncExternalStore(Po,zo),[wn,Ee]=u.useState(null),Q=u.useCallback(t=>{b.current=t,P(t)},[]),S=u.useCallback((t,i)=>{const c=w.current?.getBoundingClientRect();return{x:(t-(c?.left??0)-m.x)/m.zoom,y:(i-(c?.top??0)-m.y)/m.zoom}},[m.x,m.y,m.zoom]);ut.current=(t,i)=>{const c=r.selectedEntityIds,a=s.hierarchy.roots(),f=c.size===1?[...c][0]:a.length===1?a[0].id:null,p=f?tn(s,f):s.structure??null,D=p?.creatableKinds?.(f)??[];if(!p){Z(null);return}const g=r.snap2D,C=(W,dt)=>r.snapEnabled&&g.step>0?Math.round((W-dt)/g.step)*g.step+dt:W,E=S(t,i),M={x:C(E.x,g.offsetX),y:C(E.y,g.offsetY)},z=g.pixel?{x:Math.round(M.x),y:Math.round(M.y)}:M;Z({x:t,y:i,at:z,parentId:f,structure:p,kinds:D,adapter:s})};const Sn=u.useCallback(t=>{!o||!n||!s.assetDrop||!t.dataTransfer.types.includes("application/x-editor-asset")||(t.preventDefault(),t.dataTransfer.dropEffect="copy")},[s.assetDrop,o,n]),En=u.useCallback(t=>{if(!o||!n||!s.assetDrop)return;const i=t.dataTransfer.getData("application/x-editor-asset");if(!i)return;let c;try{c=JSON.parse(i)}catch{return}const a=S(t.clientX,t.clientY),f={position:[a.x,a.y,0],item:c.component??{kind:"file",name:c.name??c.path.split("/").pop()??c.path}};s.assetDrop.accepts("",c.path,f)&&(t.preventDefault(),t.stopPropagation(),Je(s,"",c.path,f))},[s.assetDrop,o,S,n]),q=u.useCallback(()=>xn(t=>t+1),[]),Xt=u.useCallback(()=>{const t=F.current;if(!t)return!1;F.current=null,t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id);return kt(null),pt([]),q(),!0},[q]),kn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=s.inspector?.get(a,"style.position"),g=ue(s,a)==="2d",C=g?xt(s,a):null,E=C&&se(C)?f.gizmoOrigin?.(a)??null:null;rt(i),f.begin(a),F.current={kind:"resize",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,pos:t,...C&&E?{frame:C,frameOrigin:E}:{},isPositioned:D==="absolute"||D==="fixed"||g,context:Dt(s,a)}},[s,r,S]),ke=u.useCallback(()=>{if(!n||r.selectedEntityIds.size<2)return null;const t=[...r.selectedEntityIds].flatMap(c=>{const a=K(s,c),f=T(s,c),p=a?.gizmoOrigin?.(c);return a&&f&&p?[{id:c,ownerBoxEdit:a,origRect:f,nativeOrigin:p}]:[]});if(t.length<2)return null;const i=ht(x);return{primary:t[0],peers:t.slice(1),center:i??t[0].nativeOrigin,pivot:i}},[s,r,n,x]),$t=u.useCallback((t,i,c="both")=>{const a=ke();if(!a)return!1;const f=xt(s,a.primary.id);rt(i),a.primary.ownerBoxEdit.begin(a.primary.id);for(const p of a.peers)p.ownerBoxEdit.begin(p.id);return F.current={kind:t,id:a.primary.id,ownerBoxEdit:a.primary.ownerBoxEdit,startLocal:S(i.clientX,i.clientY),origRect:a.primary.origRect,center:a.center,nativeOrigin:a.primary.nativeOrigin,movePeers:a.peers,...a.pivot?{groupCenter:a.pivot}:{},...f?{startAngleDeg:zt(f)*180/Math.PI}:{},...t==="native-scale"?{nativeScaleAxis:c,nativeHandleSpan:le/m.zoom}:{}},!0},[s,ke,S,m.zoom]),Bt=u.useCallback(t=>{if(t.stopPropagation(),t.button!==0)return;const i=r.selectedEntityIds;if(i.size>1){$t("rotate",t);return}if(i.size!==1)return;const c=[...i][0],a=K(s,c),f=T(s,c);if(!a||!f)return;const p=n?a.gizmoOrigin?.(c):null,D=p?xt(s,c):null;rt(t),a.begin(c),F.current={...D?{startAngleDeg:zt(D)*180/Math.PI}:{},kind:"rotate",id:c,ownerBoxEdit:a,startLocal:S(t.clientX,t.clientY),origRect:f,center:(p?ht(x):null)??p??{x:f.x+f.width/2,y:f.y+f.height/2},...p?{nativeOrigin:p}:{}}},[s,r,S,n,$t,x]),te=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=f.gizmoOrigin?.(a)??{x:p.x+p.width/2,y:p.y+p.height/2};rt(i),f.begin(a),F.current={kind:"move",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,context:Dt(s,a),moveAxis:t,nativeOrigin:D}},[s,r,S]),Rt=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size>1){$t("native-scale",i,t);return}if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=f.gizmoOrigin?.(a)??{x:p.x+p.width/2,y:p.y+p.height/2},g=xt(s,a);rt(i),f.begin(a),F.current={...g?{startAngleDeg:zt(g)*180/Math.PI}:{},kind:"native-scale",center:ht(x)??D,id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,nativeOrigin:D,nativeScaleAxis:t,nativeHandleSpan:le/m.zoom}},[s,m.zoom,r,S,$t,x]),Cn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);!f||!p||f.referencePoint?.(a)?.id!==t.id||(rt(i),f.begin(a),F.current={kind:"reference",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,context:Dt(s,a),pointerId:i.pointerId,referencePoint:t})},[s,r,S]),jt=u.useRef(null),mt=u.useCallback((t,i,c)=>{const a=T(s,t);return Jn(i,xt(s,t)??(a?to(a):null),{invert:c,smart:r.smartSnap,gridOn:r.snapEnabled,grid:r.snap2D,threshold:Me/Math.max(x.get().zoom,.01)})},[s,r,x]),Rn=u.useCallback((t,i,c,a)=>{if(a.stopPropagation(),a.button!==0||!c.writable)return;rt(a);const f=i.layers(t).some(p=>p.category==="origin"&&p.handles.some(D=>D.id===c.id));jt.current={id:t,handleId:c.id,provider:i,pivot:f}},[]),jn=u.useCallback(t=>{const i=jt.current;if(!i)return;const c=S(t.clientX,t.clientY),a=i.pivot?mt(i.id,c,t.metaKey||t.ctrlKey):c;i.provider.preview(i.id,i.handleId,[a.x,a.y,0]),q()},[q,S,mt]),ee=u.useCallback(t=>{const i=jt.current;if(jt.current=null,!i)return;ae(t);const c=S(t.clientX,t.clientY),a=i.pivot?mt(i.id,c,t.metaKey||t.ctrlKey):c;i.provider.commit(i.id,i.handleId,[a.x,a.y,0]),q()},[q,S,mt]),Pn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);!f||!p||(rt(i),f.begin(a),F.current={kind:"spacing",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,side:t.side,origValue:t.value})},[s,r,S]),Yt=u.useCallback((t,i)=>{if(t.pointerId!==void 0&&i.pointerId!==t.pointerId)return;const c=S(i.clientX,i.clientY),a=c.x-t.startLocal.x,f=c.y-t.startLocal.y;let p;if(t.kind==="resize"&&t.frame&&t.frameOrigin)p=eo(t.frame,t.pos,a,f,t.frameOrigin,i.shiftKey),pt([]);else if(t.kind==="resize")p=no(t.pos,a,f,t.origRect,!!t.isPositioned,i.altKey,t.context),i.shiftKey&&t.isPositioned&&(p=oo(p,t.origRect,t.pos)),pt(io(t.pos,a,f,t.origRect,i.altKey,t.context));else if(t.kind==="native-scale")p=ji(t,a,f,r.scaleSnap,i.altKey,r.snap2D.scaleStep,i.shiftKey),pt([]);else if(t.kind==="move"){const{dx:g,dy:C}=zi(t.moveAxis,a,f);if(t.nativeOrigin){p=Pi(t,g,C,r.snapEnabled,!1,r.snap2D.step,r.snap2D.relative?t.nativeOrigin:{x:r.snap2D.offsetX,y:r.snap2D.offsetY});const E=ro({x:p.originX??t.nativeOrigin.x,y:p.originY??t.nativeOrigin.y},t.nativeOrigin,t.origRect,t.context,t.moveAxis,r.smartSnap.enabled===(i.metaKey||i.ctrlKey),Me/Math.max(m.zoom,.01),{x:Ut.filter(z=>z.axis==="x").map(z=>z.value),y:Ut.filter(z=>z.axis==="y").map(z=>z.value)},r.smartSnap),M=z=>r.snap2D.pixel?Math.round(z):z;p.originX!==void 0&&(p.originX=M(E.position.x)),p.originY!==void 0&&(p.originY=M(E.position.y)),pt(E.guides)}else p=so(g,C,t.origRect,i.altKey,t.context);kt(Te(t.origRect,g,C)),t.nativeOrigin||pt(ao(g,C,t.origRect,i.altKey,t.context))}else if(t.kind==="reference"){const g=lo(c,t.origRect,i.altKey,t.context,{bounded:t.referencePoint?.bounded,snapPoints:t.referencePoint?.snapPoints});p={referenceX:g.position.x,referenceY:g.position.y},pt(g.guides)}else if(t.kind==="rotate"){const g=t.nativeOrigin&&t.startAngleDeg!==void 0&&!r.snap2D.relative,C=(r.smartSnap.enabled||r.rotationSnap)!==(i.metaKey||i.ctrlKey);if(p=co(t.center,t.startLocal,c,t.nativeOrigin?g||!C:i.altKey,t.nativeOrigin?r.snap2D.rotationStep:15),g&&C&&p.rotate!==void 0){const M=r.snap2D.rotationStep,z=r.snap2D.rotationOffset,W=t.startAngleDeg,dt=W+p.rotate;p={rotate:Math.round((dt-z)/M)*M+z-W,rotationStep:M,rotationOffset:z}}const E=t.groupCenter??(t.nativeOrigin?ht(x):null);if(E&&t.nativeOrigin&&p.rotate!==void 0){const M=p.rotate*Math.PI/180,z=t.nativeOrigin.x-E.x,W=t.nativeOrigin.y-E.y;p={...p,originX:E.x+z*Math.cos(M)-W*Math.sin(M),originY:E.y+z*Math.sin(M)+W*Math.cos(M)}}}else p=uo(t.side,a,f,t.origValue??0);if(t.kind==="native-scale"&&t.groupCenter&&t.nativeOrigin){const g=t.groupCenter,C=p.scaleXFactor??1,E=p.scaleYFactor??1;p={...p,originX:g.x+(t.nativeOrigin.x-g.x)*C,originY:g.y+(t.nativeOrigin.y-g.y)*E}}const D=t.kind==="native-scale"&&!t.groupCenter&&t.nativeOrigin?ht(x):null;if(D&&t.nativeOrigin&&(p={...p,originX:D.x+(t.nativeOrigin.x-D.x)*(p.scaleXFactor??1),originY:D.y+(t.nativeOrigin.y-D.y)*(p.scaleYFactor??1)}),t.ownerBoxEdit.apply(t.id,p),t.movePeers&&(t.kind==="rotate"||t.kind==="native-scale")){const g=t.groupCenter,C=(p.rotate??0)*Math.PI/180,E=p.scaleXFactor??1,M=p.scaleYFactor??1;for(const z of t.movePeers){if(!z.nativeOrigin)continue;const W=g?z.nativeOrigin.x-g.x:0,dt=g?z.nativeOrigin.y-g.y:0;z.ownerBoxEdit.apply(z.id,t.kind==="rotate"?{rotate:p.rotate??0,...p.rotationStep!==void 0?{rotationStep:p.rotationStep,rotationOffset:p.rotationOffset??0}:{},...g?{originX:g.x+W*Math.cos(C)-dt*Math.sin(C),originY:g.y+W*Math.sin(C)+dt*Math.cos(C)}:{}}:{...p.scaleXFactor!==void 0?{scaleXFactor:E}:{},...p.scaleYFactor!==void 0?{scaleYFactor:M}:{},...p.scaleStep!==void 0?{scaleStep:p.scaleStep}:{},...g?{originX:g.x+W*E,originY:g.y+dt*M}:{}})}}if(t.kind==="move"&&t.movePeers){const g=t.nativeOrigin?(p.originX??t.nativeOrigin.x)-t.nativeOrigin.x:(p.x??t.origRect.x)-t.origRect.x,C=t.nativeOrigin?(p.originY??t.nativeOrigin.y)-t.nativeOrigin.y:(p.y??t.origRect.y)-t.origRect.y;for(const E of t.movePeers)E.ownerBoxEdit.apply(E.id,E.nativeOrigin?{originX:E.nativeOrigin.x+g,originY:E.nativeOrigin.y+C}:{x:E.origRect.x+g,y:E.origRect.y+C})}q()},[S,q,r,Ut,m.zoom]),Ht=u.useCallback((t,i)=>{const c=y(t,i);if(!c)return null;const a=po(s,c)?.backgroundChainAt(t,i)??null;return a?Mo(a):null},[s,y]);u.useEffect(()=>{if(!lt)return;const t=i=>{i.key==="Escape"&&Xe(null)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[lt]),u.useEffect(()=>{if(!n)return;const t=i=>{if(i.key.toLowerCase()!=="v"||i.repeat||i.metaKey||i.ctrlKey||i.altKey)return;const c=i.target;if(c instanceof HTMLInputElement||c instanceof HTMLTextAreaElement||c instanceof HTMLSelectElement||c instanceof HTMLElement&&c.isContentEditable)return;const a=Qt.current,f=r.selectedEntityIds;if(!a||f.size!==1||F.current||jt.current)return;const p=[...f][0],D=Fe(s,p),g=D?.layers(p).find(E=>E.category==="origin")?.handles.find(E=>E.writable);if(!D||!g)return;i.preventDefault();const C=mt(p,S(a.x,a.y),!1);D.commit(p,g.id,[C.x,C.y,0]),q()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[s,r,n,S,q,mt]),u.useEffect(()=>{const t=a=>a instanceof HTMLInputElement||a instanceof HTMLTextAreaElement||a instanceof HTMLSelectElement||a instanceof HTMLElement&&a.isContentEditable,i=a=>{a.code!=="Space"||a.repeat||t(a.target)||a.target instanceof HTMLButtonElement||(a.preventDefault(),Zt.current=!0,me(!0))},c=a=>{a.code==="Space"&&(Zt.current=!1,me(!1),at.current&&(at.current=null,Tt(!1)))};return window.addEventListener("keydown",i),window.addEventListener("keyup",c),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",c)}},[]);const Ce=u.useCallback(t=>{if(t.stopPropagation(),rt(t),Zt.current){at.current={startClientX:t.clientX,startClientY:t.clientY,startPan:x.get()},Tt(!0);return}if(n&&r.selectedEntityIds.size>1&&!(t.metaKey||t.ctrlKey)&&(r.transformMode==="rotate"||r.transformMode==="scale")){r.transformMode==="rotate"?Bt(t):Rt("both",t);return}if(n&&r.selectedEntityIds.size>=1&&(t.metaKey||t.ctrlKey)){t.altKey?Rt("both",t):Bt(t);return}if(lt){Xe(Ht(t.clientX,t.clientY)),Ee(null);return}if(Jo(e,t.clientX,t.clientY)){v.current=null,O(null),Q(null);return}const i=y(t.clientX,t.clientY);if(li(t,i)){v.current=null,O(null),Q(null);return}const a=n&&t.altKey&&r.selectedEntityIds.size===1?[...r.selectedEntityIds][0]:i!==null?Ii(s,i,r.selectedEntityIds):null,f=Kt(n,r.transformMode,"translate")&&a!==null?Oi(s,a,r.selectedEntityIds):null,p=!f&&a!==null?Li(s,a):null;v.current={downClientX:t.clientX,downClientY:t.clientY,downLocal:S(t.clientX,t.clientY),hitAtDown:i,moved:!1,moveCandidate:f,reorderCandidate:p},O(null),Q(null)},[s,r,x,n,S,Q,lt,Ht,y,e,Rt,Bt]),zn=u.useCallback(t=>{if(t.button===2){U.current={pointerId:t.pointerId,startClientX:t.clientX,startClientY:t.clientY,moved:!1};return}t.button===0&&Ce(t)},[Ce]),Re=u.useCallback((t,i)=>{const c=i.clientX-t.downClientX,a=i.clientY-t.downClientY;if(!t.moved&&Math.hypot(c,a)>Wt&&(t.moved=!0),!!t.moved){if(t.moveCandidate){const f=Di(t.moveCandidate,t.downLocal);F.current=f,Yt(f,i);return}if(t.reorderCandidate){const f=S(i.clientX,i.clientY),p=fo(t.reorderCandidate.siblingRects,f);p&&(vt({id:t.reorderCandidate.id,adapter:t.reorderCandidate.adapter,gap:p}),kt(Te(t.reorderCandidate.origRect,f.x-t.downLocal.x,f.y-t.downLocal.y)));return}if(t.hitAtDown===null){const f=S(i.clientX,i.clientY);Q({x:Math.min(t.downLocal.x,f.x),y:Math.min(t.downLocal.y,f.y),width:Math.abs(f.x-t.downLocal.x),height:Math.abs(f.y-t.downLocal.y)})}}},[S,Q,Yt,vt]),J=u.useCallback(t=>{const i=at.current;if(i){x.setPan(i.startPan.x+(t.clientX-i.startClientX),i.startPan.y+(t.clientY-i.startClientY));return}if(lt){const f=S(t.clientX,t.clientY);Ee({...f,color:Ht(t.clientX,t.clientY)});return}Qt.current={x:t.clientX,y:t.clientY};const c=F.current;if(c){Yt(c,t);return}if((t.buttons&1)===0){ti(e,t.clientX,t.clientY,y,A,O);return}const a=v.current;a&&Re(a,t)},[r,x,S,Yt,lt,Ht,Re,y,e]),tt=u.useCallback(t=>{if(ae(t),at.current){at.current=null,Tt(!1);return}const i=F.current;if(i?.pointerId!==void 0&&t.pointerId!==i.pointerId||Xt())return;const c=qt.current;if(c){vt(null),kt(null),v.current=null,xo(c.adapter,c.id,c.gap.beforeSiblingId);return}const a=v.current;if(v.current=null,!a)return;const f=a.hitAtDown!==null?ri(r.selectedEntityIds,a.hitAtDown,t.shiftKey):si(s,a.moved,b.current,t.shiftKey);f!==null&&en(s,f),Q(null)},[s,r,Q,Xt,vt]),_=u.useCallback(t=>{if(ae(t),at.current){at.current=null,Tt(!1);return}const i=F.current;i?.pointerId!==void 0&&t.pointerId!==i.pointerId||Xt()||(qt.current&&(vt(null),kt(null)),v.current=null,Q(null))},[Xt,Q,vt]),Dn=u.useCallback(()=>{Qt.current=null,e||ye()?.clearHover(),A(null),O(null)},[e]),In=u.useCallback(t=>{const i=w.current?.parentElement??null;if(Oo(i,t.clientX,t.clientY))return;const c=y(t.clientX,t.clientY);if(!c)return;const a=re(s,c);if(!a)return;const f=T(s,c);if(!f)return;const p=a.get(c);if(p===null){console.warn(`[RootSelectionOverlay] text edit refused for "${c}": dynamic body or has child elements — not inline-editable.`),ft(null),Ct({id:c,rect:f});return}Ct(null),ft({id:c,rect:f,initialText:p})},[s,y,ft]),On=u.useCallback(t=>{const i=be.current;if(!i)return;const c=re(s,i.id);c&&(Jt.current={id:i.id,rect:i.rect},c.set(i.id,t)),ft(null)},[s,ft]),Ln=u.useCallback(()=>ft(null),[ft]);if(!ni(s)||Mi())return null;const ot=new Set([...r.selectedEntityIds].filter(t=>s.hierarchy.node(t)!==void 0)),ne=I!==null&&!ot.has(I)?T(s,I):null,$=Ti(s,ot),it=$?.rect??null,Mn=$?.ownerBoxEdit??null,oe=n&&$?xt(s,$.id):null,G=oe&&se(oe)?oe:null,B=n&&$?$.ownerBoxEdit.gizmoOrigin?.($.id)??{x:$.rect.x+$.rect.width/2,y:$.rect.y+$.rect.height/2}:null,bt=le/m.zoom,ie=n&&ot.size>1?[...ot][0]:null,je=ie?K(s,ie)?.gizmoOrigin?.(ie)??null:null,ct=$?$.ownerBoxEdit.referencePoint?.($.id):null,Tn=$?.spacingBands??[],wt=ot.size===1?[...ot][0]:null,Gt=wt?Fe(s,wt):null,Fn=wt&&Gt?Gt.layers(wt).filter(t=>n&&t.category==="origin"?un:r.showHelpers?r.helperVisibility[t.category]??!0:!1):[],Pt=n?{selectedSingleRect:null,measureLines:[],positionBadge:null,showPositionBadge:!1,parentRect:null}:Xi(s,ot,ne),Pe=n?null:Fi(s,ot),At=we.current,Xn=n?[]:At&&At.adapter===s&&At.version===h?At.hints:(()=>{const t=ho(s);return we.current={adapter:s,version:h,hints:t},t})();return l.jsxs("div",{style:{position:"absolute",inset:0,zIndex:qo,pointerEvents:"none"},children:[l.jsx("div",{ref:w,"data-testid":"world-selection-overlay-interaction",style:{position:"absolute",inset:0,pointerEvents:"auto",touchAction:"none",userSelect:"none",cursor:k??ai(fn,pn,lt,!!R)},onPointerDownCapture:zn,onPointerMove:J,onPointerUp:tt,onPointerCancel:_,onLostPointerCapture:_,onPointerLeave:Dn,onDoubleClick:In,onContextMenu:Ot,onDragOver:Sn,onDrop:En}),L?l.jsx(Go,{state:L,onClose:()=>Z(null)}):null,V?l.jsx($i,{state:V,adapter:s,onClose:()=>nt(null)}):null,l.jsxs("div",{"data-testid":"world-selection-overlay-chrome",style:{position:"absolute",inset:0,pointerEvents:"none",transform:mo(m),transformOrigin:"0 0"},children:[!n&&Xn.map(t=>l.jsx("div",{"data-testid":"world-empty-container-hint","data-entity-id":t.id,title:t.displayName,style:{position:"absolute",left:t.rect.x,top:t.rect.y,width:t.rect.width,height:t.rect.height,borderStyle:"dashed",borderColor:"rgba(154, 160, 166, 0.7)",borderWidth:n?1/m.zoom:1,boxSizing:"border-box",pointerEvents:"none"}},t.id)),ne&&l.jsx("div",{"data-testid":"world-selection-hover",style:{...Ae(ne,!1),...n?{borderWidth:1/m.zoom}:{}}}),[...ot].map(t=>{const i=T(s,t);if(!i)return null;const c=n?xt(s,t):null,a=c&&se(c)?c:null;return l.jsxs("div",{children:[l.jsx("div",{"data-testid":"world-selection-box","data-entity-id":t,"data-turned":a?"true":void 0,style:{...a?di(a,1/m.zoom):Ae(i,!0),...n&&!a?{borderWidth:1/m.zoom,background:"transparent"}:{}}}),!n&&l.jsx("div",{"data-testid":"world-selection-label",style:ui(i),children:ei(s,t)})]},t)}),R&&l.jsx("div",{"data-testid":"world-selection-marquee",style:{position:"absolute",left:R.x,top:R.y,width:R.width,height:R.height,border:`1px solid ${Y}`,background:`color-mix(in srgb, ${Y} 10%, transparent)`,pointerEvents:"none"}}),!n&&l.jsx(Bi,{measureLines:Pt.measureLines,snapGuides:yn,positionBadge:Pt.positionBadge,showPositionBadge:Pt.showPositionBadge,badgeAnchorRect:Pt.selectedSingleRect,parentRect:Pt.parentRect,screenScale:H,screenZoom:1}),!n&&l.jsx(Yi,{dragGhost:hn,reorderPreview:gn}),!n&&Pe&&l.jsx(Zo,{adapter:s,entries:Pe}),X?l.jsx("div",{"data-testid":"world-2d-temporary-pivot","aria-label":"Temporary pivot",style:{position:"absolute",left:X.x-8,top:X.y-8,width:16,height:16,transform:`scale(${H})`,transformOrigin:"center",pointerEvents:"none",background:"linear-gradient(#ffb020, #ffb020) center / 16px 2px no-repeat, linear-gradient(#ffb020, #ffb020) center / 2px 16px no-repeat"}}):null,je&&Kt(n,r.transformMode,"scale")&&Mt&>&&["x","y"].map(t=>l.jsx("div",{"data-testid":`world-2d-group-scale-${t}`,title:t==="x"?"Scale the selection on X":"Scale the selection on Y",style:{...ce(Ue(t,je,bt),t==="x"?"ew-resize":"ns-resize"),transform:`scale(${H})`,transformOrigin:"center",background:t==="x"?"#ef5350":"#66bb6a"},onPointerDown:i=>Rt(t,i),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)),it&&Mn&&l.jsxs(l.Fragment,{children:[!n&&Tn.map(t=>l.jsxs("div",{children:[l.jsx("div",{"data-testid":`world-spacing-${t.kind}-${Gi(t.side)}`,style:vi(t),onPointerDown:i=>Pn(t,i),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),!t.isZero&&l.jsx("div",{style:{...mi(t),...n?{transform:`translate(-50%, -50%) scale(${H})`,transformOrigin:"center"}:{}},children:Math.round(t.value)})]},t.side)),ct&&l.jsx("div",{"aria-label":`Edit ${ct.label}`,"data-reference-kind":ct.kind,"data-testid":"world-reference-point-handle",title:`${ct.label} (${ct.bounded?"native corner/edge/center snap":"8px/alignment snap"}, Alt for free movement)`,style:{...xi(ct),...n?{transform:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:t=>Cn(ct,t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_,onLostPointerCapture:_,role:"button",tabIndex:0,children:ct.kind==="anchor"?"A":"P"}),wt&&Gt&&Fn.flatMap(t=>t.handles.map(i=>l.jsx("div",{"aria-label":i.label,"data-testid":"world-spatial-handle","data-handle-id":i.id,"data-writable":i.writable,role:"button",tabIndex:0,title:i.writable?i.label:`${i.label} — ${i.reason}`,style:{...fi(i),transform:`translate(-50%, -50%) scale(${H})`},onPointerDown:c=>Rn(wt,Gt,i,c),onPointerMove:jn,onPointerUp:ee,onPointerCancel:ee,onLostPointerCapture:ee},`${t.id}:${i.id}`))),n&&r.transformMode==="translate"&&Mt&&l.jsxs(l.Fragment,{children:[l.jsx("div",{"data-testid":"world-2d-move-axis-x",title:"Move on X axis",style:{position:"absolute",left:B.x,top:B.y-5/m.zoom,width:bt,height:10/m.zoom,borderTop:`${2/m.zoom}px solid #ef5350`,boxSizing:"border-box",cursor:"ew-resize",pointerEvents:"auto"},onPointerDown:t=>te("x",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),l.jsx("div",{"data-testid":"world-2d-move-axis-y",title:"Move on Y axis",style:{position:"absolute",left:B.x-5/m.zoom,top:B.y,width:10/m.zoom,height:bt,borderLeft:`${2/m.zoom}px solid #66bb6a`,boxSizing:"border-box",cursor:"ns-resize",pointerEvents:"auto"},onPointerDown:t=>te("y",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),l.jsx("div",{"data-testid":"world-2d-move-center",title:"Move freely",style:{position:"absolute",left:B.x-5/m.zoom,top:B.y-5/m.zoom,width:10/m.zoom,height:10/m.zoom,border:"1px solid rgba(255,255,255,.9)",background:"#4aa3ff",boxSizing:"border-box",cursor:"move",pointerEvents:"auto"},onPointerDown:t=>te("both",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_})]}),Kt(n,r.transformMode,"scale")&&Mt&&(gt?l.jsxs(l.Fragment,{children:[l.jsx("div",{"data-testid":"world-2d-scale-axis-x",style:{position:"absolute",left:B.x,top:B.y,width:bt,borderTop:`${2/m.zoom}px solid #ef5350`,pointerEvents:"none"}}),l.jsx("div",{"data-testid":"world-2d-scale-axis-y",style:{position:"absolute",left:B.x,top:B.y,height:bt,borderLeft:`${2/m.zoom}px solid #66bb6a`,pointerEvents:"none"}}),[["x","ew-resize"],["y","ns-resize"],["both","nwse-resize"]].map(([t,i])=>{const c=Ue(t,B,bt),a=t==="x"?"e":t==="y"?"s":"se";return l.jsx("div",{"data-testid":`world-resize-handle-${a}`,style:{...ce(c,i),transform:`scale(${H})`,transformOrigin:"center",background:t==="x"?"#ef5350":t==="y"?"#66bb6a":"#fff"},onPointerDown:f=>Rt(t,f),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)})]}):l.jsxs(l.Fragment,{children:[yo.map(({pos:t,cursor:i})=>l.jsx("div",{"data-testid":`world-resize-handle-${t}`,style:{...ce(G?go(G,t):vo(it,t),i),...n?{transform:G?`rotate(${zt(G)}rad) scale(${H})`:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:c=>kn(t,c),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)),l.jsx("div",{"data-testid":"world-resize-dimension-label",style:{...hi(it),...n?{top:it.y+it.height+4*H,transform:`scale(${H})`,transformOrigin:"top left"}:{}},children:G?`${Math.round(Math.hypot(G.tr.x-G.tl.x,G.tr.y-G.tl.y))}×${Math.round(Math.hypot(G.bl.x-G.tl.x,G.bl.y-G.tl.y))}`:`${Math.round(it.width)}×${Math.round(it.height)}`})]})),Kt(n,r.transformMode,"rotate")&&Mt&&l.jsxs(l.Fragment,{children:[gt&&l.jsx("div",{"data-testid":"world-2d-rotate-ring",style:{position:"absolute",left:B.x-40/m.zoom,top:B.y-40/m.zoom,width:80/m.zoom,height:80/m.zoom,border:`${1/m.zoom}px solid #4aa3ff`,borderRadius:"50%",boxSizing:"border-box",pointerEvents:"none"}}),l.jsx("div",{"data-testid":"world-rotate-handle","aria-label":"Rotate selection",title:n?"Rotate selection (snaps under Smart Snap or Use Rotation Snap; Cmd inverts)":"Rotate selection (15° snap, Alt for free rotation)",style:{...pi(it),...n&&!gt?{...ci(G,it,dn*H),transform:`scale(${H})`,transformOrigin:"center"}:{},...gt?{left:B.x-et/2,top:B.y-40/m.zoom-et/2,transform:`scale(${H})`,transformOrigin:"center",background:"#4aa3ff"}:{}},onPointerDown:Bt,onPointerMove:J,onPointerUp:tt,onPointerCancel:_,role:"button",tabIndex:0})]})]}),!n&&l.jsx(Hi,{textEdit:mn,onCommitTextEdit:On,onCancelTextEdit:Ln,textEditRefused:Ft,eyedropperActive:lt,eyedropperPreview:wn})]})]})}function Bi(e){const{measureLines:o,snapGuides:n,positionBadge:d,showPositionBadge:r,badgeAnchorRect:h,parentRect:s,screenScale:y,screenZoom:w}=e;return l.jsxs(l.Fragment,{children:[s&&l.jsx("div",{"data-testid":"world-parent-outline",style:Ri(s)}),o.map(v=>l.jsxs("div",{"data-testid":"world-measure-line",children:[l.jsx("div",{style:Si(v)}),l.jsx("div",{style:Ne(v.x1,v.y1,v.orientation==="horizontal")}),l.jsx("div",{style:Ne(v.x2,v.y2,v.orientation==="horizontal")}),l.jsx("div",{"data-testid":"world-measure-line-label",style:{...Ei(v),...y!==1?{transform:`translate(-50%, -50%) scale(${y})`,transformOrigin:"center"}:{}},children:v.distance})]},v.orientation)),n.map(v=>l.jsx("div",{"data-testid":"world-snap-guide",style:ki(v)},v.orientation)),r&&h&&d&&l.jsxs("div",{"data-testid":"world-position-badge",style:{...Ci(h),...y!==1?{top:h.y-36/w,transform:`scale(${y})`,transformOrigin:"top left"}:{}},children:[d.position&&l.jsx("span",{"data-testid":"world-position-badge-mode",style:We,children:d.position}),d.parentLayout&&l.jsx("span",{"data-testid":"world-position-badge-layout",style:We,children:d.parentLayout})]})]})}function Yi(e){const{dragGhost:o,reorderPreview:n}=e;return l.jsxs(l.Fragment,{children:[o&&l.jsx("div",{"data-testid":"world-drag-ghost",style:bi(o)}),n&&l.jsx("div",{"data-testid":"world-reorder-preview",style:wi(n.gap.marker)})]})}function Hi(e){const{textEdit:o,onCommitTextEdit:n,onCancelTextEdit:d,textEditRefused:r,eyedropperActive:h,eyedropperPreview:s}=e;return l.jsxs(l.Fragment,{children:[o&&l.jsx("div",{style:{pointerEvents:"auto"},children:l.jsx(Qo,{rect:o.rect,initialText:o.initialText,onCommit:n,onCancel:d})}),r&&l.jsx("div",{"data-testid":"world-text-edit-refused",title:"dynamic body — not inline-editable",style:{position:"absolute",left:r.rect.x,top:r.rect.y,width:Math.max(r.rect.width,40),height:Math.max(r.rect.height,20),border:`2px dashed ${st.semantic.danger}`,boxSizing:"border-box",background:st.semantic.dangerMuted,pointerEvents:"none"}}),h&&s&&l.jsx("div",{"data-testid":"world-eyedropper-swatch","data-color-state":s.color?"resolved":"unknown",style:{position:"absolute",left:s.x+12,top:s.y+12,width:24,height:24,borderRadius:4,border:"2px solid #fff",boxShadow:"0 1px 4px rgba(0,0,0,0.5)",background:s.color??"repeating-linear-gradient(45deg, #999, #999 4px, #ccc 4px, #ccc 8px)",pointerEvents:"none"}})]})}function Gi(e){return e.endsWith("Top")?"top":e.endsWith("Right")?"right":e.endsWith("Bottom")?"bottom":"left"}export{nr as R,$i as V,To as a,$o as b,Fo as c,qi as d,er as e,Ji as m,tr as r,Xo as s};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{
|
|
1
|
+
import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{dQ as ne,eM as D,dS as N,dT as se,gf as ie,ak as m,b4 as T,bG as oe,cO as G,dU as _,aR as ae}from"./index-V4J7xfRg.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{C as le}from"./ColorInput-7CPpl8MI.js";import{W as ce}from"./three.module-BLhyNg0e.js";import{s as P}from"./asset-editor-persistence-Duoq7o22.js";import{ej as H,el as ue,d9 as de,em as fe,aI as me,co as pe,cl as he,cm as ge,_ as X,fd as W,fo as K,fp as Z,K as ve,db as ye,ey as xe,Z as be,au as Se,dw as we,cE as je}from"./three.core-3arARmh6.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";const Ee=[".vert",".vert.glsl"],$e=[".frag",".frag.glsl"];function Ce(e){return e.split(/[?#]/,1)[0].toLowerCase()}function Re(e,t=""){const r=Ce(e);return Ee.some(n=>r.endsWith(n))?"vertex":$e.some(n=>r.endsWith(n))?"fragment":/\bgl_Position\b/.test(t)?"vertex":"fragment"}function q(e){const t=e.split(/[?#]/,1)[0];return/\.vert\.glsl$/i.test(t)?t.replace(/\.vert\.glsl$/i,".frag.glsl"):/\.frag\.glsl$/i.test(t)?t.replace(/\.frag\.glsl$/i,".vert.glsl"):/\.vert$/i.test(t)?t.replace(/\.vert$/i,".frag"):/\.frag$/i.test(t)?t.replace(/\.frag$/i,".vert"):null}function Ae(e){return e.replace(/\/\*[\s\S]*?\*\//g,t=>t.replace(/[^\n]/g," ")).replace(/\/\/[^\n]*/g,"")}function O(e,t){const r=[],n=/\buniform\s+(?:(?:lowp|mediump|highp)\s+)?([A-Za-z_]\w*)\s+([A-Za-z_]\w*)\s*(?:\[\s*(\d+)\s*\])?\s*;/g;for(const s of Ae(e).matchAll(n)){const o=s[1],l=s[2];if(!o||!l)continue;const p=s[3]?Number.parseInt(s[3],10):void 0;r.push({name:l,type:o,...p?{arraySize:p}:{},stages:[t]})}return r}function Le(e,t){const r=new Map;for(const n of[...O(e,"vertex"),...O(t,"fragment")]){const s=r.get(n.name);if(!s){r.set(n.name,n);continue}r.set(n.name,{...s,stages:[...new Set([...s.stages,...n.stages])]})}return[...r.values()]}function M(e,t){const r=e.split(`
|
|
2
2
|
`).map(n=>Fe(n.trim(),t)).filter(n=>n!==null);return r.length===0&&e.trim()&&r.push({stage:t,severity:"error",message:e.trim()}),r}function Fe(e,t){if(!e)return null;const r=e.match(/^(ERROR|WARNING):\s*\d+:(\d+)(?::|\((\d+)\):)\s*(.*)$/i);if(r)return{stage:t,severity:r[1].toLowerCase()==="warning"?"warning":"error",line:Number.parseInt(r[2],10),...r[3]?{column:Number.parseInt(r[3],10)}:{},message:r[4]||e};const n=e.match(/^\d+:(\d+)\((\d+)\):\s*(?:(error|warning)\s*:?)?\s*(.*)$/i);return n?{stage:t,severity:n[3]?.toLowerCase()==="warning"?"warning":"error",line:Number.parseInt(n[1],10),column:Number.parseInt(n[2],10),message:n[4]||e}:null}function V(e){return`#line 1
|
|
3
|
-
${e}`}const
|
|
3
|
+
${e}`}const Te=`varying vec2 vUv;
|
|
4
4
|
|
|
5
5
|
void main() {
|
|
6
6
|
vUv = uv;
|
|
7
7
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
8
|
-
}`,
|
|
8
|
+
}`,Me=`varying vec2 vUv;
|
|
9
9
|
|
|
10
10
|
void main() {
|
|
11
11
|
gl_FragColor = vec4(vUv, 0.55, 1.0);
|
|
12
|
-
}`;function I(e,t=null){return{path:t,source:e==="vertex"?Me:Te,available:!1}}function $(e){return e?.split("/").pop()??"Preview fallback"}function U(e){return e.type==="vec3"&&/(colou?r|tint|albedo|emissive)/i.test(e.name)}function J(e){return/^(u|i)?time$/i.test(e.name)&&/^(float|double)$/.test(e.type)?"time":/^(u|i)?resolution$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"resolution":/^(u|i)?mouse$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"mouse":null}function F(e){if(U(e))return/horizon/i.test(e.name)?"#badbe9":/zenith/i.test(e.name)?"#297aba":/sun/i.test(e.name)?"#fff0c2":"#6f8cff";if(e.type==="bool")return!1;if(/^(float|double|int|uint)$/.test(e.type))return 0;const t=e.type.match(/^(?:[biu]?vec)([234])$/);return t?Array.from({length:Number.parseInt(t[1],10)},()=>0):0}function Ie(){const e=new Uint8Array([38,43,58,255,176,190,255,255,176,190,255,255,38,43,58,255]),t=new Se(e,2,2,we);return t.colorSpace=H,t.magFilter=je,t.needsUpdate=!0,t}function Q(e,t,r){if(e.arraySize){const{arraySize:s,...o}=e;return Array.from({length:s},()=>Q(o,t,r))}if(/^sampler2D/.test(e.type)){const s=Ie();return r.push(s),s}if(/^sampler/.test(e.type))return null;if(e.type==="mat3")return new he;if(e.type==="mat4")return new ge;if(U(e))return new X(typeof t=="string"?t:"#6f8cff");const n=e.type.match(/^(?:[biu]?vec)([234])$/);if(n){const s=Array.isArray(t)?t:[],o=Number.parseInt(n[1],10);return o===2?new W(s[0]??0,s[1]??0):o===3?new K(s[0]??0,s[1]??0,s[2]??0):new Z(s[0]??0,s[1]??0,s[2]??0,s[3]??0)}return t}function Ue(e,t,r,n,s){const o=J(t);if(o==="time"){e.value=n;return}if(e.value instanceof X&&typeof r=="string"){e.value.set(r);return}const l=Array.isArray(r)?r:[];if(e.value instanceof W){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0);return}if(e.value instanceof K){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0);return}if(e.value instanceof Z){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0,l[3]??0);return}o!=="mouse"&&!t.arraySize&&!/^sampler|^mat/.test(t.type)&&(e.value=r)}function ze(e){return e==="box"?new ye(1.35,1.35,1.35,48,48,48):e==="plane"?new ve(2.2,2.2,96,96):new xe(.95,96,64)}function ke({vertexSource:e,fragmentSource:t,descriptors:r,valuesRef:n,geometry:s,onDiagnostics:o}){const l=h.useRef(null);return h.useEffect(()=>{const p=l.current;if(!p)return;let w=!1,u=0;const x=document.createElement("canvas");x.setAttribute("aria-label","Live shader preview"),x.style.width="100%",x.style.height="100%",x.style.display="block",p.replaceChildren(x);let d;try{d=new ce({canvas:x,antialias:!0,alpha:!1})}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}]);return}d.outputColorSpace=H,d.setClearColor(1119261,1),d.debug.checkShaderErrors=!0;const S=new ue,y=new de(38,1,.01,100);y.position.set(0,0,3.4);const C=[],g={};for(const a of r)g[a.name]={value:Q(a,n.current[a.name]??F(a),C)};const R=new fe({vertexShader:V(e),fragmentShader:V(t),uniforms:g,side:me,toneMapped:!1}),L=ze(s),c=new pe(L,R);S.add(c);const f=[];d.debug.onShaderError=(a,b,E,A)=>{const ee=b,te=E,re=A;f.push(...T(a.getProgramInfoLog(ee)??"","program"),...T(a.getShaderInfoLog(te)??"","vertex"),...T(a.getShaderInfoLog(re)??"","fragment"))};const v={width:1,height:1},j=()=>{const a=p.getBoundingClientRect();v.width=Math.max(1,Math.floor(a.width)),v.height=Math.max(1,Math.floor(a.height)),d.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),d.setSize(v.width,v.height,!1),y.aspect=v.width/v.height,y.position.z=3.4/Math.min(1,y.aspect),y.updateProjectionMatrix()};j();const z=new ResizeObserver(j);z.observe(p);const Y=new be;try{d.compile(S,y),d.render(S,y),o(f.filter((a,b,E)=>E.findIndex(A=>A.stage===a.stage&&A.line===a.line&&A.message===a.message)===b))}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}])}const k=()=>{if(w)return;const a=Y.getElapsedTime();for(const b of r){const E=g[b.name];E&&Ue(E,b,n.current[b.name]??F(b),a,v)}s!=="plane"&&(c.rotation.y=a*.18,c.rotation.x=Math.sin(a*.22)*.08),d.render(S,y),u=requestAnimationFrame(k)};return u=requestAnimationFrame(k),()=>{w=!0,cancelAnimationFrame(u),z.disconnect(),d.debug.onShaderError=null,L.dispose(),R.dispose();for(const a of C)a.dispose();d.dispose(),x.remove()}},[r,t,s,o,n,e]),i.jsx("div",{ref:l,"data-testid":"shader-preview",style:{width:"100%",height:"100%",minHeight:240,background:"#11141d"}})}function De({descriptors:e,values:t,onChange:r}){return e.length===0?i.jsx("div",{style:{color:m.content.muted},children:"No uniform declarations found."}):i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:4},children:[e.map(n=>i.jsx(Ne,{uniform:n,value:t[n.name]??F(n),onChange:s=>r(n.name,s)},n.name)),i.jsx("div",{style:{color:m.content.muted,fontSize:10,lineHeight:1.4},children:"Preview values are session-only. Author runtime defaults beside the ShaderMaterial in TS/TSX."})]})}function Ne({uniform:e,value:t,onChange:r}){const n=J(e),s=e.type.match(/^(?:[biu]?vec)([234])$/);let o;return n?o=i.jsxs("div",{style:{color:m.content.muted,fontSize:10},children:["Driven by preview ",n]}):U(e)?o=i.jsx(le,{value:typeof t=="string"?t:"#6f8cff",onChange:r}):e.type==="bool"?o=i.jsxs("label",{style:{display:"flex",alignItems:"center",gap:7,fontSize:11},children:[i.jsx(ae,{checked:!!t,onChange:l=>r(l.target.checked)}),t?"True":"False"]}):/^(float|double|int|uint)$/.test(e.type)?o=i.jsx(G,{value:typeof t=="number"?t:0,onChange:r,step:e.type==="int"||e.type==="uint"?1:.01,precision:e.type==="int"||e.type==="uint"?0:3}):s&&Array.isArray(t)?o=i.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${s[1]}, minmax(0, 1fr))`,gap:4},children:t.map((l,p)=>i.jsx(G,{value:l,label:"xyzw"[p],onChange:w=>{const u=[...t];u[p]=w,r(u)},step:.01},`${e.name}:${p}`))}):o=i.jsx("div",{style:{color:m.content.muted,fontSize:10},children:"Reflected for runtime binding; no scalar preview control."}),i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5},children:[i.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:8},children:[i.jsx("span",{style:{color:m.content.primary,fontSize:11},children:e.name}),i.jsx("span",{style:{color:m.content.muted,fontSize:10},children:e.type})]}),o]})}function B({diagnostics:e,files:t}){return e.length===0?i.jsx("div",{style:{color:m.semantic.success,fontSize:11,padding:4},children:"Shader program compiled successfully."}):i.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6,padding:4},children:e.map((r,n)=>{const s=r.stage==="program"?null:t[r.stage];return i.jsxs("div",{style:{color:r.severity==="warning"?m.semantic.warning:m.semantic.danger,fontSize:10,lineHeight:1.45},children:[s?.available?$(s.path):r.stage,r.line?`:${r.line}${r.column?`:${r.column}`:""}`:""," · ",r.message]},`${r.stage}:${r.line??0}:${r.message}:${n}`)})})}async function _e(e){const t=await _(e);if(t===null)throw new Error(`Could not read ${e}.`);const r=Re(e,t),n=q(e),s=n?await _(n):null,o={vertex:I("vertex"),fragment:I("fragment")};o[r]={path:e,source:t,available:!0};const l=r==="vertex"?"fragment":"vertex";return o[l]=s===null?I(l,n):{path:n,source:s,available:!0},o}function Ye({documentId:e,assetPath:t,active:r=!0}){const[n,s]=h.useState(null),[o,l]=h.useState(0),[p,w]=h.useState("sphere"),[u,x]=h.useState([]),[d,S]=h.useState({}),[y,C]=h.useState(null);h.useEffect(()=>{if(!r)return;const c=()=>l(j=>j+1),f=q(t),v=[P(t,c),...f?[P(f,c)]:[]];return()=>{for(const j of v)j()}},[r,t]),h.useEffect(()=>{if(!r)return;let c=!1;return s(null),C(null),_e(t).then(f=>{c||s(f)},f=>{c||C(f instanceof Error?f.message:String(f))}),()=>{c=!0}},[r,t,o]);const g=h.useMemo(()=>n?Le(n.vertex.source,n.fragment.source):[],[n]);h.useEffect(()=>{S(c=>Object.fromEntries(g.map(f=>[f.name,c[f.name]??F(f)])))},[g]);const R=h.useRef(d);R.current=d;const L=h.useMemo(()=>[{id:"shader-pair",title:"Shader Pair",icon:D,order:ne,body:{kind:"custom",render:()=>i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5,padding:4,fontSize:10},children:[i.jsxs("span",{children:["Vertex · ",n?$(n.vertex.path):"Loading…",n&&!n.vertex.available?" (preview fallback)":""]}),i.jsxs("span",{children:["Fragment · ",n?$(n.fragment.path):"Loading…",n&&!n.fragment.available?" (preview fallback)":""]}),i.jsx("span",{style:{color:m.content.muted},children:"Ordinary sibling GLSL files; runtime composition stays in TS/TSX."})]})}},{id:"shader-uniforms",title:"Uniforms",icon:se,order:N,description:`${g.length} reflected`,body:{kind:"custom",data:Object.fromEntries(g.map(c=>[c.name,d[c.name]])),render:()=>i.jsx(De,{descriptors:g,values:d,onChange:(c,f)=>S(v=>({...v,[c]:f}))})}},{id:"shader-diagnostics",title:"Diagnostics",icon:u.length>0?ie:D,order:N+100,description:u.length===0?"Compiled":`${u.length} issue${u.length===1?"":"s"}`,body:{kind:"custom",data:{diagnostics:u},render:()=>n&&i.jsx(B,{diagnostics:u,files:n})}}],[g,u,n,d]);return y?i.jsx(M,{documentId:e,active:r,type:"shader",title:$(t),status:"Shader unavailable",children:i.jsx("div",{role:"alert",style:{padding:20,color:m.semantic.danger},children:y})}):n?i.jsx(M,{documentId:e,active:r,type:"shader",title:$(t),sections:L,status:u.length===0?`GLSL · compiles · ${g.length} uniforms`:`GLSL · ${u.length} compile issues`,fill:!0,children:i.jsxs("div",{style:{width:"100%",height:"100%",minHeight:0,position:"relative",background:m.surface.panel},children:[i.jsx(ke,{vertexSource:n.vertex.source,fragmentSource:n.fragment.source,descriptors:g,valuesRef:R,geometry:p,onDiagnostics:x}),i.jsx("div",{style:{position:"absolute",left:10,top:10},children:i.jsxs(oe,{"aria-label":"Preview geometry",value:p,onChange:c=>w(c.target.value),children:[i.jsx("option",{value:"sphere",children:"Sphere"}),i.jsx("option",{value:"box",children:"Box"}),i.jsx("option",{value:"plane",children:"Plane"})]})}),u.length>0&&i.jsx("div",{style:{position:"absolute",left:12,right:12,bottom:12,maxHeight:120,overflow:"auto",padding:8,border:`1px solid ${m.semantic.danger}`,borderRadius:6,background:m.surface.overlay},children:i.jsx(B,{diagnostics:u,files:n})})]})}):i.jsx(M,{documentId:e,active:r,type:"shader",title:$(t),status:"Loading GLSL",children:i.jsx("div",{style:{padding:20,color:m.content.muted},children:"Loading shader files…"})})}export{Ye as ShaderAssetDocument};
|
|
12
|
+
}`;function I(e,t=null){return{path:t,source:e==="vertex"?Te:Me,available:!1}}function $(e){return e?.split("/").pop()??"Preview fallback"}function U(e){return e.type==="vec3"&&/(colou?r|tint|albedo|emissive)/i.test(e.name)}function Q(e){return/^(u|i)?time$/i.test(e.name)&&/^(float|double)$/.test(e.type)?"time":/^(u|i)?resolution$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"resolution":/^(u|i)?mouse$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"mouse":null}function F(e){if(U(e))return/horizon/i.test(e.name)?"#badbe9":/zenith/i.test(e.name)?"#297aba":/sun/i.test(e.name)?"#fff0c2":"#6f8cff";if(e.type==="bool")return!1;if(/^(float|double|int|uint)$/.test(e.type))return 0;const t=e.type.match(/^(?:[biu]?vec)([234])$/);return t?Array.from({length:Number.parseInt(t[1],10)},()=>0):0}function Ie(){const e=new Uint8Array([38,43,58,255,176,190,255,255,176,190,255,255,38,43,58,255]),t=new Se(e,2,2,we);return t.colorSpace=H,t.magFilter=je,t.needsUpdate=!0,t}function J(e,t,r){if(e.arraySize){const{arraySize:s,...o}=e;return Array.from({length:s},()=>J(o,t,r))}if(/^sampler2D/.test(e.type)){const s=Ie();return r.push(s),s}if(/^sampler/.test(e.type))return null;if(e.type==="mat3")return new he;if(e.type==="mat4")return new ge;if(U(e))return new X(typeof t=="string"?t:"#6f8cff");const n=e.type.match(/^(?:[biu]?vec)([234])$/);if(n){const s=Array.isArray(t)?t:[],o=Number.parseInt(n[1],10);return o===2?new W(s[0]??0,s[1]??0):o===3?new K(s[0]??0,s[1]??0,s[2]??0):new Z(s[0]??0,s[1]??0,s[2]??0,s[3]??0)}return t}function Ue(e,t,r,n,s){const o=Q(t);if(o==="time"){e.value=n;return}if(e.value instanceof X&&typeof r=="string"){e.value.set(r);return}const l=Array.isArray(r)?r:[];if(e.value instanceof W){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0);return}if(e.value instanceof K){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0);return}if(e.value instanceof Z){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0,l[3]??0);return}o!=="mouse"&&!t.arraySize&&!/^sampler|^mat/.test(t.type)&&(e.value=r)}function ke(e){return e==="box"?new ve(1.35,1.35,1.35,48,48,48):e==="plane"?new ye(2.2,2.2,96,96):new xe(.95,96,64)}function ze({vertexSource:e,fragmentSource:t,descriptors:r,valuesRef:n,geometry:s,onDiagnostics:o}){const l=h.useRef(null);return h.useEffect(()=>{const p=l.current;if(!p)return;let w=!1,u=0;const x=document.createElement("canvas");x.setAttribute("aria-label","Live shader preview"),x.style.width="100%",x.style.height="100%",x.style.display="block",p.replaceChildren(x);let d;try{d=new ce({canvas:x,antialias:!0,alpha:!1})}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}]);return}d.outputColorSpace=H,d.setClearColor(1119261,1),d.debug.checkShaderErrors=!0;const S=new ue,v=new de(38,1,.01,100);v.position.set(0,0,3.4);const C=[],g={};for(const a of r)g[a.name]={value:J(a,n.current[a.name]??F(a),C)};const R=new fe({vertexShader:V(e),fragmentShader:V(t),uniforms:g,side:me,toneMapped:!1}),L=ke(s),c=new pe(L,R);S.add(c);const f=[];d.debug.onShaderError=(a,b,E,A)=>{const ee=b,te=E,re=A;f.push(...M(a.getProgramInfoLog(ee)??"","program"),...M(a.getShaderInfoLog(te)??"","vertex"),...M(a.getShaderInfoLog(re)??"","fragment"))};const y={width:1,height:1},j=()=>{const a=p.getBoundingClientRect();y.width=Math.max(1,Math.floor(a.width)),y.height=Math.max(1,Math.floor(a.height)),d.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),d.setSize(y.width,y.height,!1),v.aspect=y.width/y.height,v.position.z=3.4/Math.min(1,v.aspect),v.updateProjectionMatrix()};j();const k=new ResizeObserver(j);k.observe(p);const Y=new be;try{d.compile(S,v),d.render(S,v),o(f.filter((a,b,E)=>E.findIndex(A=>A.stage===a.stage&&A.line===a.line&&A.message===a.message)===b))}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}])}const z=()=>{if(w)return;const a=Y.getElapsedTime();for(const b of r){const E=g[b.name];E&&Ue(E,b,n.current[b.name]??F(b),a,y)}s!=="plane"&&(c.rotation.y=a*.18,c.rotation.x=Math.sin(a*.22)*.08),d.render(S,v),u=requestAnimationFrame(z)};return u=requestAnimationFrame(z),()=>{w=!0,cancelAnimationFrame(u),k.disconnect(),d.debug.onShaderError=null,L.dispose(),R.dispose();for(const a of C)a.dispose();d.dispose(),x.remove()}},[r,t,s,o,n,e]),i.jsx("div",{ref:l,"data-testid":"shader-preview",style:{width:"100%",height:"100%",minHeight:240,background:"#11141d"}})}function De({descriptors:e,values:t,onChange:r}){return e.length===0?i.jsx("div",{style:{color:m.content.muted},children:"No uniform declarations found."}):i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:4},children:[e.map(n=>i.jsx(Ne,{uniform:n,value:t[n.name]??F(n),onChange:s=>r(n.name,s)},n.name)),i.jsx("div",{style:{color:m.content.muted,fontSize:10,lineHeight:1.4},children:"Preview values are session-only. Author runtime defaults beside the ShaderMaterial in TS/TSX."})]})}function Ne({uniform:e,value:t,onChange:r}){const n=Q(e),s=e.type.match(/^(?:[biu]?vec)([234])$/);let o;return n?o=i.jsxs("div",{style:{color:m.content.muted,fontSize:10},children:["Driven by preview ",n]}):U(e)?o=i.jsx(le,{value:typeof t=="string"?t:"#6f8cff",onChange:r}):e.type==="bool"?o=i.jsxs("label",{style:{display:"flex",alignItems:"center",gap:7,fontSize:11},children:[i.jsx(ae,{checked:!!t,onChange:l=>r(l.target.checked)}),t?"True":"False"]}):/^(float|double|int|uint)$/.test(e.type)?o=i.jsx(_,{value:typeof t=="number"?t:0,onChange:r,step:e.type==="int"||e.type==="uint"?1:.01,precision:e.type==="int"||e.type==="uint"?0:3}):s&&Array.isArray(t)?o=i.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${s[1]}, minmax(0, 1fr))`,gap:4},children:t.map((l,p)=>i.jsx(_,{value:l,label:"xyzw"[p],onChange:w=>{const u=[...t];u[p]=w,r(u)},step:.01},`${e.name}:${p}`))}):o=i.jsx("div",{style:{color:m.content.muted,fontSize:10},children:"Reflected for runtime binding; no scalar preview control."}),i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5},children:[i.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:8},children:[i.jsx("span",{style:{color:m.content.primary,fontSize:11},children:e.name}),i.jsx("span",{style:{color:m.content.muted,fontSize:10},children:e.type})]}),o]})}function B({diagnostics:e,files:t}){return e.length===0?i.jsx("div",{style:{color:m.semantic.success,fontSize:11,padding:4},children:"Shader program compiled successfully."}):i.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6,padding:4},children:e.map((r,n)=>{const s=r.stage==="program"?null:t[r.stage];return i.jsxs("div",{style:{color:r.severity==="warning"?m.semantic.warning:m.semantic.danger,fontSize:10,lineHeight:1.45},children:[s?.available?$(s.path):r.stage,r.line?`:${r.line}${r.column?`:${r.column}`:""}`:""," · ",r.message]},`${r.stage}:${r.line??0}:${r.message}:${n}`)})})}async function Ge(e){const t=await G(e);if(t===null)throw new Error(`Could not read ${e}.`);const r=Re(e,t),n=q(e),s=n?await G(n):null,o={vertex:I("vertex"),fragment:I("fragment")};o[r]={path:e,source:t,available:!0};const l=r==="vertex"?"fragment":"vertex";return o[l]=s===null?I(l,n):{path:n,source:s,available:!0},o}function Ye({documentId:e,assetPath:t,active:r=!0}){const[n,s]=h.useState(null),[o,l]=h.useState(0),[p,w]=h.useState("sphere"),[u,x]=h.useState([]),[d,S]=h.useState({}),[v,C]=h.useState(null);h.useEffect(()=>{if(!r)return;const c=()=>l(j=>j+1),f=q(t),y=[P(t,c),...f?[P(f,c)]:[]];return()=>{for(const j of y)j()}},[r,t]),h.useEffect(()=>{if(!r)return;let c=!1;return s(null),C(null),Ge(t).then(f=>{c||s(f)},f=>{c||C(f instanceof Error?f.message:String(f))}),()=>{c=!0}},[r,t,o]);const g=h.useMemo(()=>n?Le(n.vertex.source,n.fragment.source):[],[n]);h.useEffect(()=>{S(c=>Object.fromEntries(g.map(f=>[f.name,c[f.name]??F(f)])))},[g]);const R=h.useRef(d);R.current=d;const L=h.useMemo(()=>[{id:"shader-pair",title:"Shader Pair",icon:D,order:ne,body:{kind:"custom",render:()=>i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5,padding:4,fontSize:10},children:[i.jsxs("span",{children:["Vertex · ",n?$(n.vertex.path):"Loading…",n&&!n.vertex.available?" (preview fallback)":""]}),i.jsxs("span",{children:["Fragment · ",n?$(n.fragment.path):"Loading…",n&&!n.fragment.available?" (preview fallback)":""]}),i.jsx("span",{style:{color:m.content.muted},children:"Ordinary sibling GLSL files; runtime composition stays in TS/TSX."})]})}},{id:"shader-uniforms",title:"Uniforms",icon:se,order:N,description:`${g.length} reflected`,body:{kind:"custom",data:Object.fromEntries(g.map(c=>[c.name,d[c.name]])),render:()=>i.jsx(De,{descriptors:g,values:d,onChange:(c,f)=>S(y=>({...y,[c]:f}))})}},{id:"shader-diagnostics",title:"Diagnostics",icon:u.length>0?ie:D,order:N+100,description:u.length===0?"Compiled":`${u.length} issue${u.length===1?"":"s"}`,body:{kind:"custom",data:{diagnostics:u},render:()=>n&&i.jsx(B,{diagnostics:u,files:n})}}],[g,u,n,d]);return v?i.jsx(T,{documentId:e,active:r,type:"shader",title:$(t),status:"Shader unavailable",children:i.jsx("div",{role:"alert",style:{padding:20,color:m.semantic.danger},children:v})}):n?i.jsx(T,{documentId:e,active:r,type:"shader",title:$(t),sections:L,status:u.length===0?`GLSL · compiles · ${g.length} uniforms`:`GLSL · ${u.length} compile issues`,fill:!0,children:i.jsxs("div",{style:{width:"100%",height:"100%",minHeight:0,position:"relative",background:m.surface.panel},children:[i.jsx(ze,{vertexSource:n.vertex.source,fragmentSource:n.fragment.source,descriptors:g,valuesRef:R,geometry:p,onDiagnostics:x}),i.jsx("div",{style:{position:"absolute",left:10,top:10},children:i.jsxs(oe,{"aria-label":"Preview geometry",value:p,onChange:c=>w(c.target.value),children:[i.jsx("option",{value:"sphere",children:"Sphere"}),i.jsx("option",{value:"box",children:"Box"}),i.jsx("option",{value:"plane",children:"Plane"})]})}),u.length>0&&i.jsx("div",{style:{position:"absolute",left:12,right:12,bottom:12,maxHeight:120,overflow:"auto",padding:8,border:`1px solid ${m.semantic.danger}`,borderRadius:6,background:m.surface.overlay},children:i.jsx(B,{diagnostics:u,files:n})})]})}):i.jsx(T,{documentId:e,active:r,type:"shader",title:$(t),status:"Loading GLSL",children:i.jsx("div",{style:{padding:20,color:m.content.muted},children:"Loading shader files…"})})}export{Ye as ShaderAssetDocument};
|