@volter/game-editor 0.5.79 → 0.5.80
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 +2123 -2123
- package/dist/assets/{AssetBudgetPanel-oKdjrwih.js → AssetBudgetPanel-C-RNso12.js} +3 -3
- package/dist/assets/{AudioViewer-B1k9_wIO.js → AudioViewer-BQ4yQJmw.js} +1 -1
- package/dist/assets/{CanvasBoardDocument-CidIZfJc.js → CanvasBoardDocument-D1_2Ahx7.js} +1 -1
- package/dist/assets/{CanvasSceneViewport-D-a2OjoE.js → CanvasSceneViewport-BdHcsAyR.js} +1 -1
- package/dist/assets/{ColorInput-CsU6nBCb.js → ColorInput-B-GRGKwB.js} +1 -1
- package/dist/assets/{EntityModelDocument-BGtt8kn8.js → EntityModelDocument-BkRbfE7C.js} +1 -1
- package/dist/assets/{EnvironmentAssetDocument-Cv_9BvF0.js → EnvironmentAssetDocument-BbWPrmTc.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-c77A4RAA.js → GameplaySessionTimeline-Bi_Z_lDm.js} +1 -1
- package/dist/assets/{ImageViewer-BpjPWpIS.js → ImageViewer-CVYDgTSj.js} +1 -1
- package/dist/assets/InspectorObjectPreview-BooanIbq.js +1 -0
- package/dist/assets/{JsonAssetDocument-BPN3E7Ai.js → JsonAssetDocument-O-o1eVJB.js} +1 -1
- package/dist/assets/{LiveModuleDocument-CqN29siR.js → LiveModuleDocument-CCpe63vw.js} +1 -1
- package/dist/assets/{LutAssetDocument-BV6N2-qQ.js → LutAssetDocument-C_QGvjj7.js} +1 -1
- package/dist/assets/{ModelAssetDocument-Bf5JZ8TF.js → ModelAssetDocument-DKyxph4r.js} +1 -1
- package/dist/assets/{NonThreeAuthoringBootstrap-CZvbouNB.js → NonThreeAuthoringBootstrap-DkfIBzMs.js} +1 -1
- package/dist/assets/{Object3DDocumentToolbar-Cm4ma8tv.js → Object3DDocumentToolbar-BGkgzg_Y.js} +1 -1
- package/dist/assets/Object3DDocumentViewport-C81c8PFJ.js +2 -0
- package/dist/assets/{Object3DPreview-BlzCte35.js → Object3DPreview-DI7aoPKe.js} +1 -1
- package/dist/assets/{OnlineAssetDetail-DaIvao3s.js → OnlineAssetDetail-BIRXvQsJ.js} +1 -1
- package/dist/assets/{PlayBar-DJ1LfrgS.js → PlayBar-BYVJHvd5.js} +1 -1
- package/dist/assets/{QuarksAssetDocument-DcjHKYru.js → QuarksAssetDocument-DEcSmewA.js} +1 -1
- package/dist/assets/{ReactCanvasControls-DSwW_3qn.js → ReactCanvasControls-DplBODky.js} +1 -1
- package/dist/assets/{RootSelectionOverlay-QJRz70Z_.js → RootSelectionOverlay-BzEZwAaO.js} +1 -1
- package/dist/assets/{ShaderAssetDocument-BCAyVHUs.js → ShaderAssetDocument-ysUJR4Np.js} +1 -1
- package/dist/assets/{ShadowEditor-ChBlM7up.js → ShadowEditor-BKz_sq1R.js} +1 -1
- package/dist/assets/{SourceAssetViewer-t8M_wt4P.js → SourceAssetViewer-DhoQonvP.js} +1 -1
- package/dist/assets/{StageHost-BToQY05P.js → StageHost-CSw286Im.js} +2 -2
- package/dist/assets/{StoryPreviewMount-DQQUiOyt.js → StoryPreviewMount-BF6vqmhx.js} +1 -1
- package/dist/assets/{ThreeBoardDocument-B0E8STg7.js → ThreeBoardDocument-vedTeiN9.js} +2 -2
- package/dist/assets/{ThreeIsolationSceneContent-C5fELwmY.js → ThreeIsolationSceneContent-TT4T-ehp.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-COEdg5Yk.js → ToolObject3DPreview-C52QCJAO.js} +1 -1
- package/dist/assets/{Toolbar-Dc2590c_.js → Toolbar-Bo-l61Lo.js} +1 -1
- package/dist/assets/{TransientHint-Ck6-tCTl.js → TransientHint-DFAcEEFI.js} +1 -1
- package/dist/assets/{VideoViewer-Ceo0o85u.js → VideoViewer-BM_9gSgl.js} +1 -1
- package/dist/assets/{ViewportShadingMenu-pE6Hv73N.js → ViewportShadingMenu-CWutLX1G.js} +1 -1
- package/dist/assets/{active-ingest-DIgBJBWV.js → active-ingest-BuNeO4Mb.js} +2 -2
- package/dist/assets/{animation-clock-BsTiJqzv.js → animation-clock-B-fl-HTL.js} +1 -1
- package/dist/assets/{animation-mixers.service-DZMXEUKZ.js → animation-mixers.service-DgxB7R_k.js} +1 -1
- package/dist/assets/{animation-timeline.utility-C1kYhS_b.js → animation-timeline.utility-RWwRwQvM.js} +1 -1
- package/dist/assets/{asset-budget-asset.menu-CgLl0jxU.js → asset-budget-asset.menu-D2Tdwqxf.js} +1 -1
- package/dist/assets/{asset-budget.action-BM9nPYFm.js → asset-budget.action-WMiFAlTi.js} +1 -1
- package/dist/assets/{asset-budget.document-CIBwqW8O.js → asset-budget.document-CckPEzno.js} +1 -1
- package/dist/assets/{asset-budget.menu-CIYQlzVL.js → asset-budget.menu-DPMPOTSo.js} +1 -1
- package/dist/assets/{asset-editor-persistence-FoI6VqbB.js → asset-editor-persistence-DttxUta0.js} +1 -1
- package/dist/assets/{asset-loaders-DIhOedSj.js → asset-loaders-9M6lxMew.js} +1 -1
- package/dist/assets/{asset-preview-J56EM7ai.js → asset-preview-C36PaXvM.js} +1 -1
- package/dist/assets/{audio-unlock.service-CQhkc6fU.js → audio-unlock.service-BeHFOKOB.js} +1 -1
- package/dist/assets/{audio.utility-ZTVc6wlz.js → audio.utility-HRjVG-Co.js} +1 -1
- package/dist/assets/autoplay.service-EjNkSGFD.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-qU-GP8QL.js → babylon-authoring-adapter-BHQY7yIy.js} +1 -1
- package/dist/assets/{binding-resolver-iMKdp_Dm.js → binding-resolver-TD7-fKuX.js} +2 -2
- package/dist/assets/{blender-node-editor.document-BktVlaBT.js → blender-node-editor.document-Bw2QbNTV.js} +1 -1
- package/dist/assets/{blender-properties-tab-Bi7EkqZ4.js → blender-properties-tab-BnIbJN4f.js} +1 -1
- package/dist/assets/blender-runtime-host-W_QVh8pY.js +4 -0
- package/dist/assets/{blender-runtime-skin-DGPSGVTB.js → blender-runtime-skin-CwXXiusi.js} +1 -1
- package/dist/assets/blender-runtime.document-CxTCG8RI.js +12 -0
- package/dist/assets/{blender-timeline.document-BdKv86rL.js → blender-timeline.document-CESN0FrA.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-B8KDPYF0.js → blender-uv-editor.document-BdIUMC5X.js} +1 -1
- package/dist/assets/{blender-version.status-Tujyesw9.js → blender-version.status-CBKgGtQ0.js} +1 -1
- package/dist/assets/{blender.command-0Er75bJF.js → blender.command-ChUV_DJE.js} +1 -1
- package/dist/assets/{board-guides-BvzDdD2y.js → board-guides-ClHJXXuu.js} +1 -1
- package/dist/assets/{bridge.command-CRyms6ax.js → bridge.command-DK8zE8yt.js} +3 -3
- package/dist/assets/{browserAll-DUlxC8yY.js → browserAll-Be-P25YM.js} +1 -1
- package/dist/assets/{build-player.document-BuFNx_-Q.js → build-player.document-Clkf52m6.js} +1 -1
- package/dist/assets/{build-profiles.document-xu8oCc9h.js → build-profiles.document-CNZvcPor.js} +1 -1
- package/dist/assets/{build-progress.status-BPDoYt8o.js → build-progress.status-BMfffkUW.js} +1 -1
- package/dist/assets/{build-session-BrAG7tBV.js → build-session-BHUOWzok.js} +1 -1
- package/dist/assets/{build.action-CCppyLBx.js → build.action-BGriOSGD.js} +1 -1
- package/dist/assets/{build.command-Inptj7R-.js → build.command-BU7Wcsn5.js} +1 -1
- package/dist/assets/{build.header-DXGyFt56.js → build.header-B6KRt0O_.js} +1 -1
- package/dist/assets/{build.menu-8VNdh6Kh.js → build.menu-CpxN2aww.js} +1 -1
- package/dist/assets/{build.service-B98j6yu1.js → build.service-LRCZ0vL7.js} +1 -1
- package/dist/assets/{camera-PuR5cfKw.js → camera-D8fxcMUB.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-DuLoTNGH.js → camera-runtime.inspector-5RS6wvw2.js} +1 -1
- package/dist/assets/{canvas-design-mount-DFvmQJTh.js → canvas-design-mount-CoKGVZii.js} +3 -3
- package/dist/assets/{canvas-entry-runtime-BVnhMBaW.js → canvas-entry-runtime-Do5zL9dN.js} +2 -2
- package/dist/assets/{canvas-preview-frames-C-dFTVWu.js → canvas-preview-frames-Jsd4Gi5S.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-Bg4fphDj.js → canvas-story-capture.service-0SYz8LrL.js} +2 -2
- package/dist/assets/{capability-coverage-B0oT2N3Z.js → capability-coverage-BqCZSu0R.js} +1 -1
- package/dist/assets/{collaboration-presence-CP5gEnxY.js → collaboration-presence-WWC9ZQsq.js} +1 -1
- package/dist/assets/{collider-DrfGXvUO.js → collider-DsdfCyWG.js} +1 -1
- package/dist/assets/{component-board.service-mzEFwa--.js → component-board.service-6JDsY08Z.js} +2 -2
- package/dist/assets/{component-board.service-MhNc_Ru3.js → component-board.service-DZWOfhbB.js} +2 -2
- package/dist/assets/{component-board.service-CvEW_Te9.js → component-board.service-Dj_INzxs.js} +2 -2
- package/dist/assets/{component-contracts.service-zrpqDXgQ.js → component-contracts.service-DXfwve-4.js} +1 -1
- package/dist/assets/{component-instance-root-BpMFxtbQ.js → component-instance-root-pq7uyyej.js} +1 -1
- package/dist/assets/{component-verbs.command-8Kl0HNWX.js → component-verbs.command-Cd_-gQ-Z.js} +1 -1
- package/dist/assets/{component-verbs.service-CxZFYomt.js → component-verbs.service-Do8eBA--.js} +1 -1
- package/dist/assets/{config-BKyBW2FV.js → config-CnqnR-iz.js} +2 -2
- package/dist/assets/{configurations-B391DE84.js → configurations-DFYaoXBK.js} +1 -1
- package/dist/assets/{connection.status-CDK2Dxmh.js → connection.status-BkhMFG12.js} +1 -1
- package/dist/assets/{constraints.inspector-BvDktIDy.js → constraints.inspector-CPWFDlY8.js} +1 -1
- package/dist/assets/{content-bounds-BM2BJV41.js → content-bounds-Ax7CFkXJ.js} +1 -1
- package/dist/assets/{contract-system-adapters-Dv5mUMr_.js → contract-system-adapters-0Odxcy6d.js} +1 -1
- package/dist/assets/{coverage.service-BLbBH9i2.js → coverage.service-CcKdk7iJ.js} +1 -1
- package/dist/assets/{create-runtime-BvzMRqkg.js → create-runtime-BhdSylT1.js} +1 -1
- package/dist/assets/{curve-BbX4M8ka.js → curve-DiuqWf0-.js} +1 -1
- package/dist/assets/{data-asset-DEfrCU5L.js → data-asset-BiqUYQnI.js} +1 -1
- package/dist/assets/{data-ref-CwypqVYb.js → data-ref-mo1ecq_T.js} +1 -1
- package/dist/assets/{debug-bridge-B3ag_ARb.js → debug-bridge-BN4INYe7.js} +1 -1
- package/dist/assets/{debug-registry-DlrL6r1z.js → debug-registry-BW5cue8V.js} +1 -1
- package/dist/assets/{deferred-ingest-play-tx7qVcg3.js → deferred-ingest-play-C6qytzjB.js} +2 -2
- package/dist/assets/{design-time-canvas-mount-L1S8lY0u.js → design-time-canvas-mount-mhxQlHHP.js} +2 -2
- package/dist/assets/{design-time-layers-DxZgHWM2.js → design-time-layers-CCEX-9ul.js} +1 -1
- package/dist/assets/{design-time-mount.service-Bo9K8hZb.js → design-time-mount.service-Cs_mT_-d.js} +2 -2
- package/dist/assets/{design-time-mount.service-DVYJJr4l.js → design-time-mount.service-DPEpO4ny.js} +2 -2
- package/dist/assets/{design-time-react-mount-Cw_YU4iA.js → design-time-react-mount-RdZmD9Dp.js} +1 -1
- package/dist/assets/{document-preview-three-BS7op9Kh.js → document-preview-three-D4M5qFH3.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-DeVD6HLk.js → dom-authoring-adapter-B97hwEwz.js} +1 -1
- package/dist/assets/{draco3d-_8eRv2Qk.js → draco3d-B_PtVdzj.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-BO6CbCXN.js → edit-mode-audio.service-BZxbnyf-.js} +1 -1
- package/dist/assets/{edit-mode-authoring-RAf4S6PI.js → edit-mode-authoring-CVKwIPOy.js} +1 -1
- package/dist/assets/{edit-mode-networking.service-QiUNWbxh.js → edit-mode-networking.service-2aXyBwkO.js} +1 -1
- package/dist/assets/{editor-api-B_UrHHhL.js → editor-api-B0aNu3G5.js} +1 -1
- package/dist/assets/{editor-layers-C47WUNtv.js → editor-layers-DI1Wkr8F.js} +1 -1
- package/dist/assets/{editor-shell-store-B-64vpgA.js → editor-shell-store-DlGykD-E.js} +1 -1
- package/dist/assets/{entity-object-DBXB7ABG.js → entity-object-C374JqRs.js} +1 -1
- package/dist/assets/{extend-hLINO4Zy.js → extend-BOaYynPp.js} +1 -1
- package/dist/assets/{fork-menu-BWis777M.js → fork-menu-DGjsgL8L.js} +1 -1
- package/dist/assets/{frame-debugger-store-CiuSELDU.js → frame-debugger-store-Czy2FTqO.js} +1 -1
- package/dist/assets/{game-contract-seams-D4x_QFfy.js → game-contract-seams-GoIZaA0s.js} +1 -1
- package/dist/assets/{game-css-scope-transform-BFCy45PO.js → game-css-scope-transform-9t97Smqk.js} +1 -1
- package/dist/assets/{game-document.service-LgRTA5er.js → game-document.service-DBSsz8Ne.js} +1 -1
- package/dist/assets/{game-eval.command-i4tbTEzA.js → game-eval.command-BYEEWjUv.js} +1 -1
- package/dist/assets/{game-module-access-CmfN4vfG.js → game-module-access-BqevF7uR.js} +1 -1
- package/dist/assets/{game-network-Bs_aLrfo.js → game-network-DtzKFtge.js} +3 -3
- package/dist/assets/{gameplay-export-DMycxmRI.js → gameplay-export-BNVUERuW.js} +1 -1
- package/dist/assets/{gameplay-replay-CQwJHBcQ.js → gameplay-replay-DEKg9ROx.js} +1 -1
- package/dist/assets/{gameplay.command-DwbIk4qS.js → gameplay.command-BrleMyQK.js} +1 -1
- package/dist/assets/{generation-jobs-DHR06-Ow.js → generation-jobs-Bmm6k_GH.js} +1 -1
- package/dist/assets/{generation.service-C3sjmS56.js → generation.service-nVpgwKEB.js} +1 -1
- package/dist/assets/{generations-QDWWr3sT.js → generations-AU4LkWAl.js} +1 -1
- package/dist/assets/{generations.status-8UpzzSN6.js → generations.status-CSeb5inI.js} +1 -1
- package/dist/assets/{hierarchy-marks-DDRF3quV.js → hierarchy-marks-EEQa08In.js} +1 -1
- package/dist/assets/{hosted-asset-materialization-DFetjs7r.js → hosted-asset-materialization-DZlaRGkJ.js} +1 -1
- package/dist/assets/{index-DL3yQMTk.js → index-BHccVo52.js} +2 -2
- package/dist/assets/{index-CUyoEnie.js → index-BpXj_ZfC.js} +1 -1
- package/dist/assets/{index-DZg4GXi0.js → index-CUBra63E.js} +1 -1
- package/dist/assets/{index-DxV6Akny.js → index-DlFjiZgV.js} +1 -1
- package/dist/assets/{index-DGgVCKlK.js → index-N4BP9b5x.js} +1 -1
- package/dist/assets/{index-CkpBXMDJ.js → index-OlF4eBxk.js} +1 -1
- package/dist/assets/{index-BlOoiZ_I.js → index-PKSmixoy.js} +1 -1
- package/dist/assets/{index-JjEYIC4G.js → index-flxMlfV4.js} +7 -7
- package/dist/assets/{index-Cdjg29qG.js → index-ynpEqujB.js} +1 -1
- package/dist/assets/{inference-diagnostics-kHRsQw1P.js → inference-diagnostics-MWqnRUsN.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-BO7yl504.js → ingest-boot-viewport-CT1eaWqO.js} +1 -1
- package/dist/assets/{ingest-siblings-C-RhYsUb.js → ingest-siblings-BJ66Uen_.js} +1 -1
- package/dist/assets/{ingest-source-persistence-B52PvpPx.js → ingest-source-persistence-CJGE5-AU.js} +1 -1
- package/dist/assets/{ingest.service-CXx-aW-5.js → ingest.service-2TRoiqQ8.js} +1 -1
- package/dist/assets/{inspect-KwcXV5-u.js → inspect-Dl5bH02T.js} +1 -1
- package/dist/assets/instances.command-2QbcHvH-.js +1 -0
- package/dist/assets/{json-history-resource-B0kkSep8.js → json-history-resource-DTUpacfx.js} +1 -1
- package/dist/assets/{layered-pick-ClYksj6v.js → layered-pick-DKNj5L29.js} +1 -1
- package/dist/assets/{light-C33qOzVd.js → light-CX-83nBK.js} +1 -1
- package/dist/assets/{live-project-verbs-CIlCfET4.js → live-project-verbs-nmQ1saHI.js} +1 -1
- package/dist/assets/{machine.document-KKGimt_o.js → machine.document-DE8aRbOi.js} +1 -1
- package/dist/assets/{machines.finder-DA-qVsE-.js → machines.finder-CZ3P0odZ.js} +1 -1
- package/dist/assets/{material-BPlHfj-y.js → material-f1KOKE_r.js} +1 -1
- package/dist/assets/{material-factory-DIU9do_v.js → material-factory-DkCPSCLt.js} +1 -1
- package/dist/assets/{mesh-D3gE3KD_.js → mesh-DM3TH9xS.js} +1 -1
- package/dist/assets/{model-asset-sections.service-HoRKwaP6.js → model-asset-sections.service-CL4Rlwvc.js} +1 -1
- package/dist/assets/{model-inspection-BMy0MuzJ.js → model-inspection-BS3uYvYU.js} +1 -1
- package/dist/assets/{model-thumbnail-ICdHSiW1.js → model-thumbnail-WJb6B3qQ.js} +1 -1
- package/dist/assets/{models.finder-DvULfruZ.js → models.finder-BXJhCiw9.js} +1 -1
- package/dist/assets/{module-mode-BTXto0oj.js → module-mode-CtoVZDhp.js} +2 -2
- package/dist/assets/{mount-canvas-ingest-root-BFQfgTuE.js → mount-canvas-ingest-root-DI8iSEV4.js} +2 -2
- package/dist/assets/{mount-dom-ingest-root-C4Deoodh.js → mount-dom-ingest-root-n4tbYw-j.js} +2 -2
- package/dist/assets/{mount-ingest-root-BnX5FYpQ.js → mount-ingest-root-pyV6jEkB.js} +2 -2
- package/dist/assets/{mount-manifest-CK1RiS8E.js → mount-manifest-DsGMOkm4.js} +1 -1
- package/dist/assets/{mount-three-ingest-root-C6pYTH-h.js → mount-three-ingest-root-CeH_uOP0.js} +1 -1
- package/dist/assets/{mounted-authoring-BRmJcses.js → mounted-authoring-BHpx-z2Y.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-DghPnLY9.js → mounted-story-viewport-source-D8kOfa96.js} +1 -1
- package/dist/assets/{native-debug-module-ojTkP52T.js → native-debug-module-lR1oG4Vd.js} +1 -1
- package/dist/assets/{navigation-CTZYysxE.js → navigation-DvTw5hJ4.js} +1 -1
- package/dist/assets/{navmesh.menu-COJ77FTK.js → navmesh.menu-BaBNScgJ.js} +1 -1
- package/dist/assets/{navmesh.service-tVf8xf8f.js → navmesh.service-BK6BlOz3.js} +1 -1
- package/dist/assets/network-observer.service-CskzAy97.js +1 -0
- package/dist/assets/{network.utility-DNmrBkHK.js → network.utility-BJ3bZOCQ.js} +1 -1
- package/dist/assets/{object3d-document-session-registry-CIdYrDwO.js → object3d-document-session-registry-DI9WfJDy.js} +2 -2
- package/dist/assets/{oid-transform-BMGB2u8Z.js → oid-transform-RlofQ4tU.js} +1 -1
- package/dist/assets/{particles-CmcHZZqz.js → particles-CjR9Po6N.js} +1 -1
- package/dist/assets/{pixi-authoring-adapter-BLptyAwL.js → pixi-authoring-adapter-B_mXxWkJ.js} +1 -1
- package/dist/assets/{pixi-live-write-target-DMGlsQdL.js → pixi-live-write-target-tm5yHKss.js} +1 -1
- package/dist/assets/{play.command-D0aUzhnI.js → play.command-BmsyGtu0.js} +2 -2
- package/dist/assets/{presentation-BOKcaCle.js → presentation-gTgwItzD.js} +1 -1
- package/dist/assets/{product-DBhE7XzM.js → product-Cmel9X9k.js} +1 -1
- package/dist/assets/{profiler.action-DFPR0GaW.js → profiler.action-DSM2uSYR.js} +1 -1
- package/dist/assets/{profiler.menu-Cjq4IMjK.js → profiler.menu-CcYyqUfU.js} +1 -1
- package/dist/assets/{profiler.utility-O_BbyzQ6.js → profiler.utility-CQtqdQgC.js} +1 -1
- package/dist/assets/{project-authoring-session-Fg6BVKiU.js → project-authoring-session-BqZuntp2.js} +2 -2
- package/dist/assets/{properties-bone-constraints.inspector-Df8r9rGo.js → properties-bone-constraints.inspector-D3XrqptB.js} +1 -1
- package/dist/assets/{properties-bone.inspector-BHOmG-w_.js → properties-bone.inspector-CmVamAC6.js} +1 -1
- package/dist/assets/{properties-collection.inspector-COUpmMSs.js → properties-collection.inspector-BGi5eXmI.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-DSDh4Uba.js → properties-constraints.inspector-C62EOuWg.js} +1 -1
- package/dist/assets/{properties-data.inspector-DjjFOVxW.js → properties-data.inspector-qDFtLdw8.js} +1 -1
- package/dist/assets/{properties-material.inspector-DPKY8b2v.js → properties-material.inspector-B--PD0se.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-BtNVTrKN.js → properties-modifiers.inspector-1tdk1EKp.js} +1 -1
- package/dist/assets/{properties-object.inspector-DYNpha7x.js → properties-object.inspector-CYH5w2un.js} +1 -1
- package/dist/assets/{properties-output.inspector-CBzwfSQQ.js → properties-output.inspector-C78QuVlY.js} +1 -1
- package/dist/assets/{properties-particles.inspector-5DlYLg0u.js → properties-particles.inspector-DyDiMjmC.js} +1 -1
- package/dist/assets/{properties-physics.inspector-D__Z169g.js → properties-physics.inspector-DG5GOyLE.js} +1 -1
- package/dist/assets/{properties-render.inspector-Dvnehd8j.js → properties-render.inspector-D8ldGTdq.js} +1 -1
- package/dist/assets/{properties-scene.inspector-DxGBiL_G.js → properties-scene.inspector-Cf_KBWbv.js} +1 -1
- package/dist/assets/{properties-texture.inspector-5qsUhAvc.js → properties-texture.inspector-BznU5kNc.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-BHv0B73V.js → properties-view-layer.inspector-pnRv91FS.js} +1 -1
- package/dist/assets/{properties-world.inspector-D53Cc2Fs.js → properties-world.inspector-CzUtvYuC.js} +1 -1
- package/dist/assets/{r3f-design-session-BhddL1e6.js → r3f-design-session-Dwqxg13i.js} +2 -2
- package/dist/assets/{r3f-physics-binding-D41qQnHD.js → r3f-physics-binding-D6DKTgwF.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-ZnrWHj5Z.js → r3f-source-authoring-adapter-nqn_PR3m.js} +1 -1
- package/dist/assets/{react-canvas-navigation-DFspvY8K.js → react-canvas-navigation-WxI8Mxyc.js} +1 -1
- package/dist/assets/{react-inspector.service-Co5AHjHR.js → react-inspector.service-C1Prvq6u.js} +1 -1
- package/dist/assets/{react-story-board--jvx8x-C.js → react-story-board-BRUE9hN1.js} +1 -1
- package/dist/assets/{react-three-rapier.esm-BS-6eWKp.js → react-three-rapier.esm-CA7vFsM3.js} +1 -1
- package/dist/assets/{react-world-authoring-adapter-CKQ-MAMv.js → react-world-authoring-adapter-DVNps-az.js} +1 -1
- package/dist/assets/{realm-services-DUEIrJNn.js → realm-services-CL4ih5gp.js} +1 -1
- package/dist/assets/{reflection-probe-capture.inspector-gO0DwTZj.js → reflection-probe-capture.inspector-C9mzBLI7.js} +1 -1
- package/dist/assets/{registry-ofLrf5fa.js → registry-N8Uqh2X-.js} +1 -1
- package/dist/assets/{relative-import-specifier-B_Awfdrr.js → relative-import-specifier-cRtWQWmH.js} +1 -1
- package/dist/assets/{render-env-a1pPDP-U.js → render-env-xu-q_sLG.js} +1 -1
- package/dist/assets/{render-features-CY3KFNVc.js → render-features-BMOBYkLQ.js} +1 -1
- package/dist/assets/{render-settings-DgCYPHgH.js → render-settings-Cnd69vhe.js} +1 -1
- package/dist/assets/{resolve-three-fhgJb0Jd.js → resolve-three-C9OlnFHx.js} +3 -3
- package/dist/assets/{root-seam-contract-D3r4vEIL.js → root-seam-contract-BoD0NaOZ.js} +1 -1
- package/dist/assets/{run-selection-DVvs9B9T.js → run-selection-DL0vJV6z.js} +1 -1
- package/dist/assets/{scene-capture-CCy--ncb.js → scene-capture-CoTN4qOO.js} +1 -1
- package/dist/assets/{scene-document.service-BCliVABQ.js → scene-document.service-kgtsh1r2.js} +2 -2
- package/dist/assets/{scene-framing-B1butaCp.js → scene-framing-CljHc6tN.js} +1 -1
- package/dist/assets/{seeded-random-J_tZuhc3.js → seeded-random-BlGWBUER.js} +1 -1
- package/dist/assets/{setup-renderer-DroW21zu.js → setup-renderer-jOQdnmo7.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-Bansi23s.js → source-object3d-authoring-adapter-qg_NN2PX.js} +1 -1
- package/dist/assets/{source-persistence-backend-B7_XGPrd.js → source-persistence-backend-DoNJeJa8.js} +1 -1
- package/dist/assets/{stage-keyboard-Cj5wm_J_.js → stage-keyboard-jfRYkBwZ.js} +1 -1
- package/dist/assets/{stage-overlay-set-CddoR5WV.js → stage-overlay-set-Bo-JC6N0.js} +1 -1
- package/dist/assets/{stage-presence-markers-B7ikfK7I.js → stage-presence-markers-Bu9mH0m_.js} +1 -1
- package/dist/assets/{stage-transform-tools-C9-7W51Q.js → stage-transform-tools-CSnDpsY3.js} +1 -1
- package/dist/assets/{standard-viewport-dressing-BYqJ1RDj.js → standard-viewport-dressing-B8VpmbHt.js} +1 -1
- package/dist/assets/{state-watch.action-Ckl-KiOu.js → state-watch.action-Dhb9xQb9.js} +1 -1
- package/dist/assets/{state-watch.menu-Bua5sNDD.js → state-watch.menu-xf7oO-4l.js} +1 -1
- package/dist/assets/{state-watch.utility-LIkpnIYo.js → state-watch.utility-DnGO08TW.js} +1 -1
- package/dist/assets/{story-capture-DRezN8hO.js → story-capture-CyeAHem-.js} +1 -1
- package/dist/assets/{story-documents-QsOjjFN1.js → story-documents-DUm0LUTp.js} +1 -1
- package/dist/assets/{story-documents.service-BBcpnJqG.js → story-documents.service-BWBSUjBO.js} +1 -1
- package/dist/assets/{story-documents.service-s45WvtSH.js → story-documents.service-DOvAnwES.js} +1 -1
- package/dist/assets/{story-media-presence-D3jBkjoV.js → story-media-presence-7Tbl7-hO.js} +1 -1
- package/dist/assets/{story-pixi-preview-DR9Z3mjx.js → story-pixi-preview-DHtzdru2.js} +1 -1
- package/dist/assets/{story-presentation-BanrEcxs.js → story-presentation-BpfNrI6t.js} +1 -1
- package/dist/assets/{story-three-preview-Cc12jMw-.js → story-three-preview-pzhR44fH.js} +2 -2
- package/dist/assets/{studio-environment-D3HaysRE.js → studio-environment-Dw2FBct5.js} +1 -1
- package/dist/assets/{surface-state-DgY1sYF4.js → surface-state-NwiDDkWI.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-CBGAFjrQ.js → syntactic-prop-specs-_Yk2QtpW.js} +1 -1
- package/dist/assets/{team-playtest.service-z2r_7CUE.js → team-playtest.service-DdUlOcrk.js} +1 -1
- package/dist/assets/{three-CqcAlmZt.js → three-2yjp9YMj.js} +1 -1
- package/dist/assets/{three-authoring-adapter-D-dP-DRa.js → three-authoring-adapter-B5h6dxvp.js} +1 -1
- package/dist/assets/three-authoring.service-CIVEDuMV.js +2 -0
- package/dist/assets/{three-ingest-runtime-BOYUnvJa.js → three-ingest-runtime-B9surImB.js} +1 -1
- package/dist/assets/{three-integration-BKGFte0g.js → three-integration-K2zwKa-Z.js} +2 -2
- package/dist/assets/three-integration.service-kjZ0g0er.js +1 -0
- package/dist/assets/{three-projection-core-CMYaSPZP.js → three-projection-core-xgnaC08N.js} +1 -1
- package/dist/assets/{three-state-Bs6NttX2.js → three-state-DVnNjIbQ.js} +1 -1
- package/dist/assets/{three-story-capture.service-CV7CaGFK.js → three-story-capture.service-DgVUrOW6.js} +2 -2
- package/dist/assets/{three-story-model-DMsHWVLi.js → three-story-model-B0qnMa7M.js} +1 -1
- package/dist/assets/{three-viewport-presentation-D8F-c141.js → three-viewport-presentation-C5wGhMgD.js} +1 -1
- package/dist/assets/{transform-mode-request-nAOkjL7J.js → transform-mode-request-COfeHSRX.js} +1 -1
- package/dist/assets/{transport-strip-Do5Y5zz_.js → transport-strip-Dvkyjqwq.js} +1 -1
- package/dist/assets/transport.header-CFTM9Q_n.js +1 -0
- package/dist/assets/{tuples-T3njUS_v.js → tuples-tlEYpiUU.js} +1 -1
- package/dist/assets/{ui-board-document-Dix9rYE-.js → ui-board-document-BlKR5Cyh.js} +2 -2
- package/dist/assets/{user-data-DcUoY-0j.js → user-data-C8dmlLGA.js} +1 -1
- package/dist/assets/{utility-view-state-BUR2tvAo.js → utility-view-state-8ikycS0_.js} +1 -1
- package/dist/assets/{viewport-door-Ct3Jwvkd.js → viewport-door-Brt6-rPp.js} +1 -1
- package/dist/assets/{viewport-root-presentation-CM-p4xLg.js → viewport-root-presentation-DEm3C1-i.js} +1 -1
- package/dist/assets/{viewport-surface-status-BlPwrnIq.js → viewport-surface-status-Dbc5Yxun.js} +1 -1
- package/dist/assets/{webworkerAll-BbcMGhdJ.js → webworkerAll-qWuefF-u.js} +1 -1
- package/dist/assets/{workspace-arrangement-D7VBwv9F.js → workspace-arrangement-BnGzBm57.js} +1 -1
- package/dist/assets/{world-documents-g6lvzHMh.js → world-documents-DH7drgx-.js} +1 -1
- package/dist/assets/{world-root-stage-binding-DugyiNfT.js → world-root-stage-binding-DIigD-mK.js} +1 -1
- package/dist/assets/{xstate-animation-binding-Qdxeavj_.js → xstate-animation-binding-BpYb4mXT.js} +1 -1
- package/dist/assets/{xstate-animation-meta-CtUROKFq.js → xstate-animation-meta-0RXvMgDk.js} +1 -1
- package/dist-node/cli.js +16 -16
- package/package.json +16 -16
- package/dist/assets/InspectorObjectPreview-DA4bXZQD.js +0 -1
- package/dist/assets/Object3DDocumentViewport-BydKspxr.js +0 -2
- package/dist/assets/autoplay.service-CFbSU6Np.js +0 -1
- package/dist/assets/blender-runtime-host-Bw37aE1K.js +0 -4
- package/dist/assets/blender-runtime.document-DwlgMMor.js +0 -12
- package/dist/assets/instances.command--PqjYvLl.js +0 -1
- package/dist/assets/network-observer.service-DZtz0Y5F.js +0 -1
- package/dist/assets/three-authoring.service-BPzGC8dd.js +0 -2
- package/dist/assets/three-integration.service-InYYMues.js +0 -1
- package/dist/assets/transport.header-BhBKpJ9P.js +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StageHost-CSw286Im.js","assets/index-flxMlfV4.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css","assets/three-state-DVnNjIbQ.js","assets/editor-shell-store-DlGykD-E.js","assets/output-pass-HurwNl0G.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/Pass-D1MRT672.js","assets/editor-layers-DI1Wkr8F.js","assets/workspace-arrangement-BnGzBm57.js","assets/user-data-C8dmlLGA.js","assets/entity-object-C374JqRs.js","assets/three-contract-Dkt6PmWY.js","assets/standard-viewport-dressing-B8VpmbHt.js","assets/content-bounds-Ax7CFkXJ.js","assets/hierarchy-marks-EEQa08In.js","assets/environment-Dg-YaLsA.js","assets/RoomEnvironment-BkknvS_I.js","assets/EXRLoader-CITMBvGd.js","assets/HDRLoader-BTGuGhVo.js","assets/preview-renderer-BrYNFV1p.js","assets/renderer-ownership-BovSEcLv.js","assets/live-mixers-B-bwLZ7c.js","assets/live-gesture-lock-DJbrjOqf.js","assets/model-inspection-BS3uYvYU.js","assets/three-viewport-presentation-C5wGhMgD.js","assets/clip-planes-CnAI6DZn.js","assets/three-2yjp9YMj.js","assets/component-instance-root-pq7uyyej.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/model-thumbnail-WJb6B3qQ.js","assets/studio-environment-Dw2FBct5.js","assets/KTX2Loader-CaqVE6nY.js","assets/GLTFLoader-KeoruJgS.js","assets/BufferGeometryUtils-B22h7jo4.js","assets/OrbitControls-B13MKuwC.js","assets/LineSegments2-DN9pUfWA.js","assets/three.quarks.esm-C_HmSKXo.js","assets/three-integration-K2zwKa-Z.js","assets/host-hierarchy-objects-BV3WqU2w.js","assets/layered-pick-DKNj5L29.js","assets/root-stacking-BEd9ZvxC.js","assets/object3d-document-session-registry-DI9WfJDy.js","assets/viewport-door-Brt6-rPp.js","assets/asset-preview-C36PaXvM.js","assets/bitmap-label-Ct4k6ehY.js","assets/scene-framing-CljHc6tN.js","assets/source-object3d-authoring-adapter-qg_NN2PX.js","assets/three-projection-core-xgnaC08N.js","assets/editor-presentation-activity-CqJH4G9t.js","assets/transport-strip-Dvkyjqwq.js","assets/viewport-surface-status-Dbc5Yxun.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{ae as r,_ as a}from"./index-flxMlfV4.js";import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{r as n}from"./index-nmcBqr7Y.js";import{V as c,O as u}from"./viewport-surface-status-Dbc5Yxun.js";const s=n.lazy(async()=>({default:(await a(()=>import("./StageHost-CSw286Im.js").then(e=>e.S),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60]))).Object3DDocumentViewport}));function l(t){return i(t.documentId,t.chromeless),o.jsx(n.Suspense,{fallback:o.jsx(c,{testId:"object3d-document-loading",children:u}),children:o.jsx(s,{...t})})}function i(t,e=!1){n.useEffect(()=>{if(!e)return r(t)},[t,e])}export{l as O};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/spark.module-Byplgb8G.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/Pass-D1MRT672.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{ga as te,af as A,_ as re}from"./index-
|
|
2
|
+
import{ga as te,af as A,_ as re}from"./index-flxMlfV4.js";import{a as E}from"./jsx-runtime-DPjLkJKQ.js";import{r as C}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{W as ie}from"./three.module-BLhyNg0e.js";import{OrbitControls as oe}from"./OrbitControls-B13MKuwC.js";import{g as ne,h as se,d as J,m as ae,i as le}from"./asset-preview-C36PaXvM.js";import{s as ce,i as F}from"./editor-presentation-activity-CqJH4G9t.js";import{m as me,l as pe,c as de,d as ue}from"./model-thumbnail-WJb6B3qQ.js";import{h as fe}from"./user-data-C8dmlLGA.js";import{el as we,d9 as ge,ej as he,A as be,bj as ve,aE as xe,bg as ye,Z as Ae,eu as Ee,fo as Ce,n as Me}from"./three.core-3arARmh6.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./editor-layers-DI1Wkr8F.js";import"./workspace-arrangement-BnGzBm57.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-EEQa08In.js";import"./studio-environment-Dw2FBct5.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";const v={webglContext:0,animationFrame:0,resizeObserver:0,objectUrl:0},K={...v};function _(r){v[r]++,K[r]=Math.max(K[r],v[r]);let s=!1;return()=>{s||(s=!0,v[r]=Math.max(0,v[r]-1))}}function je(r){const s=r.animations[0];if(!s)return null;const d=new Me(r),g=d.clipAction(s).play();return g.paused=!0,d.update(0),d}let Se=0;function ot({assetPath:r,materialPath:s,displayName:d="Object3D preview",active:g=!0,sourceFactory:M,showSkeleton:D=!1,background:z,cameraDirection:j,showGrid:H=!0,useDefaultLighting:L=!0,exposure:T=1,setupPreview:k}){const W=C.useRef(null),[S,q]=C.useState(null),[$,R]=C.useState(!0);return C.useEffect(()=>{if(!g)return;const n=W.current;if(!n)return;const x=new AbortController,N=te({id:`preview-card:${++Se}`,label:`${d} (preview card)`,contentClock:()=>0}),t=new ie({antialias:!0,alpha:!0}),Q=_("webglContext"),X=_("animationFrame"),Y=_("resizeObserver"),a=new we,u=new ge(35,1,.01,1e3),f=new oe(u,t.domElement),I=new Ae;let U=null,w=null,y=null,c,l=null,h=null;const O=[];let m=0,p=!1;if(q(null),R(!0),t.outputColorSpace=he,t.toneMapping=be,t.toneMappingExposure=T,t.shadowMap.enabled=!0,t.setClearColor(z??2106410,1),t.setPixelRatio(Math.min(window.devicePixelRatio,2)),t.domElement.style.width="100%",t.domElement.style.height="100%",t.domElement.style.display="block",n.appendChild(t.domElement),f.enableDamping=!0,f.dampingFactor=.1,L){a.add(new ve(16777215,3489874,1.8));const e=new xe(16777215,2.2);e.position.set(3,5,4),a.add(e)}if(H){const e=new ye(10,20,5333103,3423044);a.add(e),O.push(e)}const V=(e,i)=>{if(!h)return;const o=j?new Ce(...j):void 0,b=le(h,Math.max(e,1)/Math.max(i,1),o);u.copy(b,!1),f.target.copy(h.center),f.update()},G=async e=>{if(p)return;a.add(e);let i=!1;if(e.traverse(o=>{fe(o,"gaussianSplat")&&(i=!0)}),i){const{SparkRenderer:o}=await re(async()=>{const{SparkRenderer:b}=await import("./spark.module-Byplgb8G.js");return{SparkRenderer:b}},__vite__mapDeps([0,1,2,3]));if(p)return;l=new o({renderer:t,enableLod:!1})}if(h=ae(e,"perspective"),V(n.clientWidth,n.clientHeight),U=je(e),D){const o=new Ee(e);o.name="__compact_preview_skeleton",a.add(o),O.push(o)}c=k?.({scene:a,camera:u,renderer:t,model:e}),c?.resize?.(Math.max(n.clientWidth,1),Math.max(n.clientHeight,1),t.getPixelRatio()),R(!1)};(async()=>{try{if(M){y=ne(M),await G(y.root);return}if(!r)throw new Error("Compact Object3D preview has no source.");const e=me(r);if(!e)throw new Error(`No native Three.js loader supports ${r}.`);const i=e==="glb"||e==="gltf"||e==="spz"?await se(r,x.signal):await pe({url:r,format:e,...s?{materialUrl:s}:{}});if(w=de(i),x.signal.aborted||p){J(w),w=null;return}await G(w)}catch(e){!x.signal.aborted&&!p&&(q(e instanceof Error?e.message:String(e)),R(!1))}})();const B=()=>{const e=Math.max(n.clientWidth,1),i=Math.max(n.clientHeight,1);t.setSize(e,i,!1),h&&!c?V(e,i):(u.aspect=e/i,u.updateProjectionMatrix()),c?.resize?.(e,i,t.getPixelRatio())},Z=new ResizeObserver(B);Z.observe(n),B();const P=()=>{if(m=0,p||!F())return;const e=Math.min(I.getDelta(),.1);f.update(),l&&a.add(l);try{c?.render?c.render(e):t.render(a,u)}finally{l?.removeFromParent()}m=requestAnimationFrame(P)},ee=ce(()=>{F()?!p&&m===0&&(I.getDelta(),P()):(cancelAnimationFrame(m),m=0)});return F()&&(m=requestAnimationFrame(P)),()=>{p=!0,ee(),N(),x.abort(new Error("Compact Object3D preview closed.")),cancelAnimationFrame(m),Z.disconnect(),U?.stopAllAction(),c?.dispose(),f.dispose(),l&&(l.removeFromParent(),ue(l),l=null),t.dispose(),t.forceContextLoss();for(const e of O){const i=e;i.geometry?.dispose();const o=i.material;if(Array.isArray(o))for(const b of o)b.dispose();else o?.dispose()}y&&y.dispose(),w&&J(w),n.contains(t.domElement)&&n.removeChild(t.domElement),Y(),X(),Q()}},[g,r,z,j,T,s,k,H,D,M,L]),E.jsxs("div",{ref:W,"data-testid":"object3d-compact-preview",role:"region","aria-label":`Interactive 3D preview: ${d}`,"aria-busy":$,style:{width:"100%",height:"100%",minHeight:220,overflow:"hidden",position:"relative",background:A.surface.inset},children:[$&&!S?E.jsx("span",{style:{position:"absolute",padding:10,color:A.content.muted},children:"Loading…"}):null,g?null:E.jsx("span",{style:{position:"absolute",padding:10,color:A.content.muted},children:"Preview suspended while inactive."}),S?E.jsx("div",{role:"alert",style:{position:"absolute",padding:10,color:A.semantic.danger},children:S}):null]})}export{ot as Object3DPreview};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{bZ as L,bF as U,bK as R,b_ as W,d4 as M,af as i,a1 as b,fu as w,b5 as N,aT as C,dh as _,a0 as J,cT as K,fv as V}from"./index-
|
|
1
|
+
import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{bZ as L,bF as U,bK as R,b_ as W,d4 as M,af as i,a1 as b,fu as w,b5 as N,aT as C,dh as _,a0 as J,cT as K,fv as V}from"./index-flxMlfV4.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{d as G}from"./asset-editor-persistence-DttxUta0.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,Z=new Set;function I(){for(const e of Z)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 y(e,l){const n=S.get(e);n&&(Object.assign(n,l),I())}const Q={width:"100%"};function X(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),[T,v]=r.useState(!0),[B,F]=r.useState(null),[m,D]=r.useState(null),[$,p]=r.useState(!1),[O,x]=r.useState(!1),[j,E]=r.useState(!1),[c,g]=r.useState("idle");r.useEffect(()=>{if(l==="preview"){v(!1);return}let s=!1;return v(!0),F(null),L(e.source,e.id).then(a=>{s||(z(a),a.length>0&&A(a[0]))}).catch(a=>{s||(z([]),F(a instanceof U?R(a.code):a instanceof Error?a.message:"Asset delivery metadata is unavailable while offline."))}).finally(()=>{s||v(!1)}),()=>{s=!0}},[l,e.source,e.id]);const P=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(D(null),x(!1),E(!1),!P){p(!1);return}return p(!0),W(e.source,e.id).then(a=>{s||(D(a),x(!a))}).catch(()=>{s||x(!0)}).finally(()=>{s||p(!1)}),()=>{s=!0}},[l,e.id,e.source,n,P]);const H=r.useCallback(async()=>{if(!o)return;const s=`single:${e.source}:${e.id}`,a=q(s,e.name);y(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:a.controller.signal};o.includes&&(d.includes=o.includes);const u=await G(d);u.ok&&u.path?(y(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}`)):(y(s,{status:"failed",message:u.error??"The import was rejected."}),g("error"))}catch(d){y(s,{status:a.controller.signal.aborted?"cancelled":"failed",message:d instanceof Error?d.message:String(d)}),g("error")}},[e,o,f]),k=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:i.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:i.surface.shell,borderRadius:i.shape.small,overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center"},children:$?t.jsxs("div",{style:{color:i.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:i.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:k})}):k}),j&&t.jsx("div",{role:"status",style:{color:i.content.dim,fontSize:10},children:"The catalog preview could not be loaded; showing the typed fallback."}),O&&t.jsx("div",{style:{color:i.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(C,{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:i.content.dim,marginBottom:2},children:"Source"}),t.jsx("div",{style:{fontSize:11,color:i.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:i.content.dim,marginBottom:2},children:"Type"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.type})]}),e.tags.length>0&&t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.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:i.surface.raised,borderRadius:i.shape.small,color:i.content.muted},children:s},s))})]}),e.author&&t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Author"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.author})]})]})}),t.jsx(C,{label:"Add to Project",children:t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:T?t.jsxs("div",{style:{fontSize:11,color:i.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:i.content.muted},children:["Delivery unavailable: ",B]}):h.length>0?t.jsxs(t.Fragment,{children:[t.jsx(_,{"aria-label":"Asset delivery",value:o?h.indexOf(o):0,onChange:s=>A(h[Number(s.target.value)]??null),style:Q,children:h.map((s,a)=>t.jsxs("option",{value:a,children:[s.label,s.sizeBytes?` (${X(s.sizeBytes)})`:""]},a))}),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"?K:c==="downloading"?w:V,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:i.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:i.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 z}from"./configurations-
|
|
1
|
+
import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{l as z}from"./configurations-DFYaoXBK.js";import{c as O,P as G,b as _,d as L,s as B,a as $}from"./run-selection-DL0vJV6z.js";import{a0 as A,a1 as g,gE as V,aK as v,eF as Y,cR as S,cS as R,gF as q,gG as H,r as P,cM as w,a2 as p,gH as I,gI as D,aL as N}from"./index-flxMlfV4.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-BuNeO4Mb.js";import"./client-DNXj_opT.js";import"./ingest-source-persistence-CJGE5-AU.js";import"./capability-coverage-BqCZSu0R.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-DtzKFtge.js";const F="play-control",T=4;function ae(s){return Math.min(T,Math.max(1,Math.floor(s)))-1}function ne(s){return s+1}function M(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(A,{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:`${M(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:T},(i,c)=>c+1).map(i=>e.jsx(R,{role:"menuitemradio","aria-checked":i===o,onSelect:()=>{J(ae(i)),a(!1)},children:M(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:F,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:F,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 z().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(A,{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{af as O}from"./index-
|
|
1
|
+
import{a as b}from"./jsx-runtime-DPjLkJKQ.js";import{r as d}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{af as O}from"./index-flxMlfV4.js";import{r as L}from"./studio-environment-Dw2FBct5.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-CSw286Im.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-C8dmlLGA.js";import"./workspace-arrangement-BnGzBm57.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-DVnNjIbQ.js";import"./editor-shell-store-DlGykD-E.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./editor-layers-DI1Wkr8F.js";import"./entity-object-C374JqRs.js";import"./standard-viewport-dressing-B8VpmbHt.js";import"./content-bounds-Ax7CFkXJ.js";import"./hierarchy-marks-EEQa08In.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-BS3uYvYU.js";import"./three-viewport-presentation-C5wGhMgD.js";import"./clip-planes-CnAI6DZn.js";import"./three-2yjp9YMj.js";import"./component-instance-root-pq7uyyej.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-WJb6B3qQ.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three-integration-K2zwKa-Z.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-DKNj5L29.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-DI9WfJDy.js";import"./viewport-door-Brt6-rPp.js";import"./asset-preview-C36PaXvM.js";import"./bitmap-label-Ct4k6ehY.js";import"./scene-framing-CljHc6tN.js";import"./source-object3d-authoring-adapter-qg_NN2PX.js";import"./three-projection-core-xgnaC08N.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-Dvkyjqwq.js";import"./viewport-surface-status-Dbc5Yxun.js";function $(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{K as V,da as B,db as F,dc as w,dd as I,cD as W,a0 as R,aL as j,a1 as S,de as D,df as H,dg as T,dh as A,di as P,cR as N,aM as G,dj as M,cS as f}from"./index-
|
|
1
|
+
import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{K as V,da as B,db as F,dc as w,dd as I,cD as W,a0 as R,aL as j,a1 as S,de as D,df as H,dg as T,dh as A,di as P,cR as N,aM as G,dj as M,cS as f}from"./index-flxMlfV4.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 y,f as $,t as q}from"./react-story-board-BRUE9hN1.js";const z={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(A,{"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=V();h.useSyncExternalStore(d.subscribe,d.getSnapshot);const o=h.useSyncExternalStore(B,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,b=s.clientHeight/2,g=(p-o.x)/o.zoom,Z=(b-o.y)/o.zoom;w(p-g*a,b-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),b=Math.max(1,i.clientHeight-96),g=Math.min(4,Math.max(.1,Math.min(p/a.width,b/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=z[i];if(!s||a===null){y(null,null),w(0,0,1);return}y(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]),v=u!==null,C=r?.kind==="dom"&&!!r.adapter.rects;if(n?!v:!C)return null;const E=u?u.selectedViewportId??"fill":Object.entries(z).find(([,i])=>i===null?l.width===null:i.width===l.width&&i.height===l.height)?.[0]??"fill";return t.jsxs(t.Fragment,{children:[!v&&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(W,{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}),v&&t.jsx(R,{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:D,size:"md"})}),t.jsx(Q,{zoom:o.zoom,zoomTo:m,...v?{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:H,size:"md"})}),!n&&t.jsx(j,{"aria-label":"Zoom to selection",title:"Zoom to selection",size:"comfortable",onClick:c,children:t.jsx(S,{icon:T,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(R,{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(N,{anchorRef:u,align:"end",clamp:!0,"aria-label":"Zoom",onDismiss:()=>l(!1),children:[t.jsx("div",{style:{padding:"4px 8px"},children:t.jsx(G,{"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(M,{}),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(M,{}),[.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,hY as he,gi as Qe,c_ as Et,cS as de,r as qe,c4 as Xn,jL as Je,jM as Yn,cD as Bn,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-JjEYIC4G.js";import{s as Po,i as zo,r as $e}from"./eyedropper-session-bjPXnfeX.js";import{a as Do,p as Io}from"./layered-pick-ClYksj6v.js";import{z as Oo,j as Lo}from"./react-story-board--jvx8x-C.js";import{v as ye}from"./viewport-editor-controls-BYaAZ_Ku.js";import{l as Mo}from"./inspect-KwcXV5-u.js";const Xe=new WeakMap;let Ye=0;function yt(e){let o=Xe.get(e);return o||(o={guides:[],listeners:new Set,revision:0},Xe.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 $o(e,o){const n=yt(e);return n.listeners.add(o),()=>n.listeners.delete(o)}function qi(e,o,n){Ye+=1;const d=yt(e),r=`canvas-guide-${Ye}`;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 Xo(e,o){o?pe.set(e,o):pe.delete(e),on+=1;for(const n of fe)n()}function Yo(e){return fe.add(e),()=>fe.delete(e)}function Bo(){return on}const rn="canvasCreateNode";function Ho(){return qe().projectLocalState.read(rn)??{favorites:[],recent:[]}}function Be(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 Xn().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 $=(P??[]).find(R=>He(R)===x);if($){const R=cn(e,$);if(R){j(R);return}}else e.structure.create(x,e.parentId??void 0,e.at).ack;Be({...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],$={...r,favorites:x};Be($),h($)},Ot=(x,$)=>x.map(R=>A.get(R)).filter(R=>R!==void 0).map(R=>l.jsx(xe,{testId:$,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 $=V.findIndex(Lt=>Lt.kind===L),R=V[Math.min(V.length-1,Math.max(0,$+(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,$])=>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))}):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=Yn(o.map(s=>s.rect));if(!n)return null;const{left:d,top:r}=Uo(n),h=o.length>=3;return l.jsxs(Bn,{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 B=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:B,borderWidth:o?2:1,background:o?`color-mix(in srgb, ${B} 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:B,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:B,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 ${B}`,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 ${B}`,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 ${B}`,boxSizing:"border-box",color:B,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:B,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 ${B}`,background:`color-mix(in srgb, ${B} 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, ${B} 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, ${B} 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 $i(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 Xi({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(Yo,Bo);const $=n?ht(x):null,R=[...r.selectedEntityIds].sort().join("\0"),Lt=u.useRef(R);u.useEffect(()=>{Lt.current!==R&&(Lt.current=R,ht(x)&&Xo(x,null))},[R,x]);const m=u.useSyncExternalStore(x.subscribe,x.get,x.get);u.useSyncExternalStore(u.useCallback(t=>$o(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),[]),$t=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]),Xt=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]),Yt=u.useCallback(t=>{if(t.stopPropagation(),t.button!==0)return;const i=r.selectedEntityIds;if(i.size>1){Xt("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,Xt,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){Xt("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,Xt,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]),Bt=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"&&$e(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"?Yt(t):jt("both",t);return}if(n&&r.selectedEntityIds.size>=1&&(t.metaKey||t.ctrlKey)){t.altKey?jt("both",t):Yt(t);return}if(lt){$e(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,Yt]),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,Bt(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,Bt,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){Bt(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,Bt,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||$t())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,$t,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||$t()||(qt.current&&(vt(null),kt(null)),v.current=null,Q(null))},[$t,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,X=Ti(s,ot),it=X?.rect??null,Mn=X?.ownerBoxEdit??null,oe=n&&X?xt(s,X.id):null,G=oe&&se(oe)?oe:null,Y=n&&X?X.ownerBoxEdit.gizmoOrigin?.(X.id)??{x:X.rect.x+X.rect.width/2,y:X.rect.y+X.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=X?X.ownerBoxEdit.referencePoint?.(X.id):null,Tn=X?.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}:$i(s,ot,ne),Pe=n?null:Fi(s,ot),At=we.current,$n=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(Xi,{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&&$n.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 ${B}`,background:`color-mix(in srgb, ${B} 10%, transparent)`,pointerEvents:"none"}}),!n&&l.jsx(Yi,{measureLines:Pt.measureLines,snapGuides:yn,positionBadge:Pt.positionBadge,showPositionBadge:Pt.showPositionBadge,badgeAnchorRect:Pt.selectedSingleRect,parentRect:Pt.parentRect,screenScale:H,screenZoom:1}),!n&&l.jsx(Bi,{dragGhost:hn,reorderPreview:gn}),!n&&Pe&&l.jsx(Zo,{adapter:s,entries:Pe}),$?l.jsx("div",{"data-testid":"world-2d-temporary-pivot","aria-label":"Temporary pivot",style:{position:"absolute",left:$.x-8,top:$.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:Y.x,top:Y.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:Y.x-5/m.zoom,top:Y.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:Y.x-5/m.zoom,top:Y.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:Y.x,top:Y.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:Y.x,top:Y.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,Y,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:Y.x-40/m.zoom,top:Y.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:Y.x-et/2,top:Y.y-40/m.zoom-et/2,transform:`scale(${H})`,transformOrigin:"center",background:"#4aa3ff"}:{}},onPointerDown:Yt,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 Yi(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 Bi(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,Xi as V,To as a,Xo as b,Fo as c,qi as d,er as e,Ji as m,tr as r,$o 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{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-flxMlfV4.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-DKNj5L29.js";import{z as Oo,j as Lo}from"./react-story-board-BRUE9hN1.js";import{v as ye}from"./viewport-editor-controls-BYaAZ_Ku.js";import{l as Mo}from"./inspect-Dl5bH02T.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,4 +1,4 @@
|
|
|
1
|
-
import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{du as ne,eM as D,dw as N,dx as se,gc as ie,af as m,b4 as M,dh as oe,ch as _,dy as G,aR as ae}from"./index-
|
|
1
|
+
import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{du as ne,eM as D,dw as N,dx as se,gc as ie,af as m,b4 as M,dh as oe,ch as _,dy as G,aR as ae}from"./index-flxMlfV4.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{C as le}from"./ColorInput-B-GRGKwB.js";import{W as ce}from"./three.module-BLhyNg0e.js";import{s as P}from"./asset-editor-persistence-DttxUta0.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 ye,db as ve,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 T(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
3
|
${e}`}const Me=`varying vec2 vUv;
|
|
4
4
|
|