@volter/game-editor 0.5.67 → 0.5.68
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 +20 -20
- package/catalog/entries/blender.json +1 -1
- package/catalog/entries/music.json +3 -3
- package/catalog/project-source/src/lib/music/music-player.ts +18 -12
- package/dist/.vite/manifest.json +2307 -2166
- package/dist/assets/{AssetBudgetPanel-x_FNJbfZ.js → AssetBudgetPanel-P2PeL_X5.js} +9 -9
- package/dist/assets/{AudioViewer-BDPqHDfU.js → AudioViewer-xFb5Wv7A.js} +1 -1
- package/dist/assets/CanvasBoardDocument-BFJdTVGp.js +1 -0
- package/dist/assets/CanvasSceneViewport-vqBlOz8P.js +1 -0
- package/dist/assets/{ColorInput-QUPS1pEB.js → ColorInput-CX1UZjYO.js} +1 -1
- package/dist/assets/{EntityModelDocument-CzUHsH9E.js → EntityModelDocument-Du8wIbyK.js} +1 -1
- package/dist/assets/{EnvironmentAssetDocument-ByEB7_4A.js → EnvironmentAssetDocument-_SttfMY_.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-dhG-oiqd.js → GameplaySessionTimeline-CWudWnfd.js} +1 -1
- package/dist/assets/{ImageViewer-tlVvkdM4.js → ImageViewer-shZzMd91.js} +1 -1
- package/dist/assets/InspectorObjectPreview-BMOvJaOw.js +1 -0
- package/dist/assets/{JsonAssetDocument-CPmcWFPW.js → JsonAssetDocument-D_HXneWE.js} +1 -1
- package/dist/assets/{LiveModuleDocument-DL8QHSlk.js → LiveModuleDocument-BWjOzO_6.js} +1 -1
- package/dist/assets/{LutAssetDocument-BImiug2M.js → LutAssetDocument-DIc6nsht.js} +1 -1
- package/dist/assets/ModelAssetDocument-_CqTsX_A.js +1 -0
- package/dist/assets/{NonThreeAuthoringBootstrap-B40qmGGS.js → NonThreeAuthoringBootstrap-C-V23E1e.js} +1 -1
- package/dist/assets/Object3DDocumentToolbar-BfPH9jz5.js +1 -0
- package/dist/assets/Object3DDocumentViewport-BaXWtATg.js +2 -0
- package/dist/assets/{Object3DPreview-ClYDoH2L.js → Object3DPreview-BPHEr3vI.js} +1 -1
- package/dist/assets/OnlineAssetDetail-BxibUH6K.js +1 -0
- package/dist/assets/PlayBar-DRANyO01.js +1 -0
- package/dist/assets/{QuarksAssetDocument-B-VOj-n4.js → QuarksAssetDocument-4Dne3EHx.js} +1 -1
- package/dist/assets/ReactCanvasControls-K98jOX9b.js +1 -0
- package/dist/assets/RootSelectionOverlay-BQC12Gdd.js +1 -0
- package/dist/assets/{ShaderAssetDocument-Kn8IvRGV.js → ShaderAssetDocument-W3ZjLCkt.js} +4 -4
- package/dist/assets/ShadowEditor-DP1LWynl.js +1 -0
- package/dist/assets/{SourceAssetViewer-CLQ95VSD.js → SourceAssetViewer-BGUeDAEv.js} +1 -1
- package/dist/assets/StageHost-V_0opXFt.js +2 -0
- package/dist/assets/{StoryPreviewMount-D2lg37et.js → StoryPreviewMount-Di8uMovM.js} +1 -1
- package/dist/assets/{ThreeBoardDocument-BAgHrbtu.js → ThreeBoardDocument-tgcaZDqQ.js} +2 -2
- package/dist/assets/{ThreeIsolationSceneContent-DbYIylZQ.js → ThreeIsolationSceneContent-BAKurKW5.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-WEi6C9uU.js → ToolObject3DPreview-CffvGJ1h.js} +1 -1
- package/dist/assets/Toolbar-uLgsrB2z.js +1 -0
- package/dist/assets/{TransientHint-BpDLhRLd.js → TransientHint-CgmkrmKF.js} +1 -1
- package/dist/assets/{VideoViewer-DMV8lf4P.js → VideoViewer-ClUJ6_uy.js} +1 -1
- package/dist/assets/ViewportShadingMenu-Bdkc6jcd.js +1 -0
- package/dist/assets/{active-ingest-DA426a81.js → active-ingest-CnAeQcuQ.js} +3 -3
- package/dist/assets/{animation-clock-Bm80XdqP.js → animation-clock-fLmY_3--.js} +1 -1
- package/dist/assets/{animation-mixers.service-DK64IuYq.js → animation-mixers.service-DiecMX_A.js} +1 -1
- package/dist/assets/{animation-timeline.utility-D-g0zrOl.js → animation-timeline.utility-C71vPJgs.js} +1 -1
- package/dist/assets/{asset-budget-asset.menu-CEgP0Kiw.js → asset-budget-asset.menu-BDRDWrvx.js} +1 -1
- package/dist/assets/{asset-budget.action-D4R1c3wi.js → asset-budget.action-tQmNGQHC.js} +1 -1
- package/dist/assets/{asset-budget.document-Syzjn1U1.js → asset-budget.document-BthgX37Z.js} +1 -1
- package/dist/assets/{asset-budget.menu-BbRiqXeM.js → asset-budget.menu-DfyWVH6p.js} +1 -1
- package/dist/assets/{asset-editor-persistence-BGWIqZdk.js → asset-editor-persistence-BQgjOCrm.js} +1 -1
- package/dist/assets/{asset-loaders-C0KQI5eY.js → asset-loaders-5PIUVvmH.js} +1 -1
- package/dist/assets/{asset-preview-B1tDziF1.js → asset-preview-Cv7tfD98.js} +1 -1
- package/dist/assets/{audio-unlock.service-ucMfCVBw.js → audio-unlock.service-BvHvZjzx.js} +1 -1
- package/dist/assets/{audio.utility-BmE9WMUg.js → audio.utility-D9Vk_WYS.js} +1 -1
- package/dist/assets/autoplay.service-CFJoLPLw.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-C8mFMXSr.js → babylon-authoring-adapter-Cg5ALSpr.js} +1 -1
- package/dist/assets/binding-resolver-C_9MBSMa.js +2 -0
- package/dist/assets/{blender-node-editor.document-C1YmwWls.js → blender-node-editor.document-B92MO51u.js} +1 -1
- package/dist/assets/{blender-properties-tab-B8lyjgj3.js → blender-properties-tab-CDVyDAbf.js} +1 -1
- package/dist/assets/{blender-runtime-host-CyQlImSR.js → blender-runtime-host-CuniE0sy.js} +1 -1
- package/dist/assets/{blender-runtime-skin-BK7ShZ6z.js → blender-runtime-skin-B_tOz5j5.js} +1 -1
- package/dist/assets/{blender-runtime.document-B0nVQs0P.js → blender-runtime.document-DxUwLiEW.js} +1 -1
- package/dist/assets/{blender-timeline.document-CMcdE2CK.js → blender-timeline.document-BdEEoQbK.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-CjqNo4sZ.js → blender-uv-editor.document-EMSUlRh4.js} +1 -1
- package/dist/assets/{blender-version.status-OsFoc9SA.js → blender-version.status-DtfwUahB.js} +1 -1
- package/dist/assets/{blender.command-C6NmRBo5.js → blender.command-BkBML2SY.js} +1 -1
- package/dist/assets/blender.keymap-BmOBRY7p.js +1 -0
- package/dist/assets/{board-guides-BEKPgD9M.js → board-guides-_3R1t_-2.js} +1 -1
- package/dist/assets/bridge.command-VnplZ81v.js +3 -0
- package/dist/assets/{browserAll-lF_dLQVz.js → browserAll-BCmkqg8n.js} +1 -1
- package/dist/assets/build-player.document-DV7YcJQt.js +1 -0
- package/dist/assets/build-profiles.document-CZxDuhzz.js +2 -0
- package/dist/assets/{build-progress.status-Bo1ZgJcb.js → build-progress.status-Dk5u3C67.js} +1 -1
- package/dist/assets/build-session-BGe0eGrQ.js +9 -0
- package/dist/assets/{build.action-DRX2IcYt.js → build.action-Bdj4ZEL_.js} +1 -1
- package/dist/assets/{build.command-BGvLaLG0.js → build.command-DAWiYvPa.js} +1 -1
- package/dist/assets/build.header--xqH6uTP.js +1 -0
- package/dist/assets/{build.menu-UenrjPWS.js → build.menu-BiRNC_xc.js} +1 -1
- package/dist/assets/{build.service-BIUoTY6l.js → build.service-Dw9K6VSF.js} +1 -1
- package/dist/assets/{camera-DrvaM47S.js → camera-C-qXzXFf.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-CjJALNO8.js → camera-runtime.inspector-BDrwWRlU.js} +1 -1
- package/dist/assets/canvas-design-mount-DLn49Zle.js +6 -0
- package/dist/assets/canvas-entry-runtime-DVeh71nC.js +2 -0
- package/dist/assets/{canvas-preview-frames-C0QTagA3.js → canvas-preview-frames-B5xFRjhQ.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-Dgjr-rT1.js → canvas-story-capture.service-DQ_leYyi.js} +2 -2
- package/dist/assets/{capability-coverage-DZ-onC5j.js → capability-coverage-DQgg6UJe.js} +3 -3
- package/dist/assets/{collaboration-presence-BVIQuN1l.js → collaboration-presence-BOS1t8wI.js} +1 -1
- package/dist/assets/{collider-C7SbIYKY.js → collider-Bf4Uk6LW.js} +1 -1
- package/dist/assets/{component-board.service-CWFaGMCO.js → component-board.service-CpVXGhz5.js} +2 -2
- package/dist/assets/{component-board.service-BEsFAw4_.js → component-board.service-DFSSCaCf.js} +2 -2
- package/dist/assets/{component-board.service-q_TM9BCw.js → component-board.service-DgujG90T.js} +2 -2
- package/dist/assets/{component-contracts.service-CPbfXE1h.js → component-contracts.service-Bc_2Xxh_.js} +1 -1
- package/dist/assets/{component-instance-root-B0C5oNEm.js → component-instance-root-df4ofoOR.js} +1 -1
- package/dist/assets/{component-verbs.command-oNtGgzQL.js → component-verbs.command-DGzZAV_Z.js} +1 -1
- package/dist/assets/component-verbs.service-D1rVRogp.js +1 -0
- package/dist/assets/{config-_wCzzlM_.js → config-D-EAAhqP.js} +4 -4
- package/dist/assets/{configurations-BXU4GGbV.js → configurations-_HZOWZPy.js} +1 -1
- package/dist/assets/{connection.status-Yvt0bX0r.js → connection.status-CCX-mgmr.js} +1 -1
- package/dist/assets/{constraints.inspector-4r8jWq5a.js → constraints.inspector-CwEEREsf.js} +1 -1
- package/dist/assets/{content-bounds-BeuIXKYu.js → content-bounds-DKBD7nsv.js} +1 -1
- package/dist/assets/{contract-system-adapters-Bic_7sev.js → contract-system-adapters-h6OUBRYA.js} +1 -1
- package/dist/assets/{coverage.service-DcpEoBuf.js → coverage.service-CV7b5Sqn.js} +2 -2
- package/dist/assets/create-runtime-Bg2uYMfh.js +3 -0
- package/dist/assets/{curve-DVd18iAX.js → curve-BKuiAPpj.js} +1 -1
- package/dist/assets/{data-asset-DfQ2Pjse.js → data-asset-7Nfmx-28.js} +1 -1
- package/dist/assets/{data-ref-CWnkj-HX.js → data-ref-DyFQqqX6.js} +1 -1
- package/dist/assets/debug-bridge-CESAxmlz.js +1 -0
- package/dist/assets/{debug-registry-P0_YQGWd.js → debug-registry-l7k5Hjc8.js} +1 -1
- package/dist/assets/{deferred-ingest-play-BdR4qGk6.js → deferred-ingest-play-Bej67_y9.js} +2 -2
- package/dist/assets/{design-time-canvas-mount-DPQeHSN2.js → design-time-canvas-mount-CFW9ZWuk.js} +2 -2
- package/dist/assets/{design-time-layers-ChswRUJt.js → design-time-layers-CQgnmqc8.js} +1 -1
- package/dist/assets/{design-time-mount.service-Ks-5Wkcs.js → design-time-mount.service-DJeAPUB_.js} +2 -2
- package/dist/assets/{design-time-mount.service-Ca-DZGFV.js → design-time-mount.service-_R1UDCw3.js} +2 -2
- package/dist/assets/{design-time-react-mount-C85KfXOd.js → design-time-react-mount-CFvIk_rV.js} +1 -1
- package/dist/assets/{document-preview-three-DThkjI1S.js → document-preview-three-5cbuuJMH.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-BrLU8IJ_.js → dom-authoring-adapter-CoESNvrM.js} +1 -1
- package/dist/assets/{draco3d-B2cwv46o.js → draco3d-Sk9K4AUT.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-D4ITNbsm.js → edit-mode-audio.service-CH6J-8N7.js} +1 -1
- package/dist/assets/{edit-mode-authoring-DeCxPcHM.js → edit-mode-authoring-DBjaBTxM.js} +1 -1
- package/dist/assets/{edit-mode-networking.service-BNv-FTRh.js → edit-mode-networking.service-C4o2pGHX.js} +1 -1
- package/dist/assets/editor-api-D2azVray.js +1 -0
- package/dist/assets/{editor-layers-BDJnAAzj.js → editor-layers-B4oYfpj8.js} +1 -1
- package/dist/assets/{editor-shell-store-ChLcVeNB.js → editor-shell-store-Bh1S7M54.js} +1 -1
- package/dist/assets/{entity-object-JmYMfLsx.js → entity-object-B_5Gc0Ky.js} +1 -1
- package/dist/assets/{extend-Cc-nEa_A.js → extend-DcEyE5jI.js} +1 -1
- package/dist/assets/fork-menu-CKjNh3MO.js +1 -0
- package/dist/assets/{frame-debugger-store-DaCbAYSW.js → frame-debugger-store-D5YViF_8.js} +1 -1
- package/dist/assets/{game-contract-seams-BnPFGLll.js → game-contract-seams-C0AVYwvO.js} +1 -1
- package/dist/assets/{game-css-scope-transform-D_p7cVgW.js → game-css-scope-transform-8GOvVu1s.js} +1 -1
- package/dist/assets/game-document.service-FdG_gFPU.js +1 -0
- package/dist/assets/game-eval.command-4wa9vqWE.js +2 -0
- package/dist/assets/{game-module-access-o3iXZpCA.js → game-module-access-DulnT3NH.js} +1 -1
- package/dist/assets/game-network-Bo_nlDR5.js +22 -0
- package/dist/assets/{gameplay-export-BzYzLZPi.js → gameplay-export-K5AcStVC.js} +1 -1
- package/dist/assets/{gameplay-replay-BwdxV4oF.js → gameplay-replay-CnWnlogY.js} +1 -1
- package/dist/assets/gameplay.command-DoWqBWhH.js +1 -0
- package/dist/assets/{generation-jobs-BZhOMrp-.js → generation-jobs-CiabIfR0.js} +1 -1
- package/dist/assets/generation.service-D2yeZaJu.js +1 -0
- package/dist/assets/{generations-DVDht_31.js → generations-DU9rCeQR.js} +1 -1
- package/dist/assets/{generations.status-BvzgHlyk.js → generations.status-3CrPw_n5.js} +1 -1
- package/dist/assets/{hierarchy-marks-Cc_3lxw6.js → hierarchy-marks-C25dY2fR.js} +1 -1
- package/dist/assets/{hosted-asset-materialization-BpbnhJac.js → hosted-asset-materialization-DYdcFlDf.js} +1 -1
- package/dist/assets/{index-0Lm0Nf1M.css → index-B5WjeCHm.css} +1 -1
- package/dist/assets/{index-C1c3eOmm.js → index-BcH5GC3b.js} +1 -1
- package/dist/assets/{index-cNc-iFbq.js → index-BsYc2Oyj.js} +1 -1
- package/dist/assets/{index-SS9EugVg.js → index-C20Flc1s.js} +2 -2
- package/dist/assets/{index-Ck3JFh48.js → index-C4AUQbmq.js} +1 -1
- package/dist/assets/{index-DUZeuA7g.js → index-CC1puVjo.js} +1 -1
- package/dist/assets/{index-BRJMIUK0.js → index-CaG87ZF-.js} +321 -321
- package/dist/assets/index-CwCDkEl1.js +1 -0
- package/dist/assets/{index-C3Pw-9So.js → index-Kb9_s5aP.js} +1 -1
- package/dist/assets/{index-BeK4RPgj.js → index-n3QdTv-T.js} +1 -1
- package/dist/assets/{inference-diagnostics-xecGdohW.js → inference-diagnostics-MGcIHEX6.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-DAt8WFSy.js → ingest-boot-viewport-D2okO6JI.js} +1 -1
- package/dist/assets/ingest-siblings-CkxW__go.js +1 -0
- package/dist/assets/{ingest-source-persistence-Dmdo-UBp.js → ingest-source-persistence-6peGfPAS.js} +1 -1
- package/dist/assets/{ingest.service-vbCucMz7.js → ingest.service-Cc73WMIW.js} +1 -1
- package/dist/assets/{inspect-Dr4qvDpJ.js → inspect-C8RP8G5F.js} +1 -1
- package/dist/assets/instances.command-CxKGnrNl.js +1 -0
- package/dist/assets/{json-history-resource-DwS10tqD.js → json-history-resource-CTXRV4GD.js} +1 -1
- package/dist/assets/layered-pick-B_-BRrRD.js +1 -0
- package/dist/assets/{light-DcFqVCmv.js → light-CskDQ8gF.js} +1 -1
- package/dist/assets/{live-project-verbs-C3LzprCe.js → live-project-verbs-BOAQN3ME.js} +1 -1
- package/dist/assets/{machine.document-BzZxubYQ.js → machine.document-BxOoCOo9.js} +1 -1
- package/dist/assets/{machines.finder-BR02bfVG.js → machines.finder-CqEceWzS.js} +1 -1
- package/dist/assets/{material-B_V78pTt.js → material-BwFzKPi0.js} +1 -1
- package/dist/assets/{material-factory-COz7qZhC.js → material-factory-qB9pzcQf.js} +1 -1
- package/dist/assets/{mesh-DcmO-mWI.js → mesh-5--4qA-C.js} +1 -1
- package/dist/assets/model-asset-sections.service-TZ2SaBmH.js +1 -0
- package/dist/assets/{model-inspection-CXHxrafK.js → model-inspection-MrJY0U_-.js} +1 -1
- package/dist/assets/{model-thumbnail-BEKPWg4l.js → model-thumbnail-uk-2sblh.js} +1 -1
- package/dist/assets/{models.finder-c1I0tp2M.js → models.finder-rk8dhgO8.js} +1 -1
- package/dist/assets/module-mode-B79jV5tQ.js +2 -0
- package/dist/assets/mount-canvas-ingest-root-BhaYNuhY.js +2 -0
- package/dist/assets/mount-dom-ingest-root-BQb1u0LX.js +2 -0
- package/dist/assets/mount-ingest-root-BC3-1Cw1.js +2 -0
- package/dist/assets/mount-manifest-QJOB11Kv.js +1 -0
- package/dist/assets/{mount-three-ingest-root-DVbACDUy.js → mount-three-ingest-root-DIDBfvIH.js} +1 -1
- package/dist/assets/{mounted-authoring-Clftxx0x.js → mounted-authoring-B7RL_V28.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-B4-eAYGI.js → mounted-story-viewport-source-CnYhX3vW.js} +1 -1
- package/dist/assets/{native-debug-module-2_HVupdg.js → native-debug-module-B-rWJfWE.js} +1 -1
- package/dist/assets/{navigation-CH3-zr1n.js → navigation-BVu-aVmF.js} +1 -1
- package/dist/assets/{navmesh.menu-Dfi-Pk-8.js → navmesh.menu-C3M63eR4.js} +1 -1
- package/dist/assets/{navmesh.service-Cz7QFY-M.js → navmesh.service-B0H1fUfn.js} +1 -1
- package/dist/assets/network-observer.service-CiR4Q9Q0.js +1 -0
- package/dist/assets/network.utility-CNG3eJ0E.js +1 -0
- package/dist/assets/{object3d-document-session-registry-DJDEDM0p.js → object3d-document-session-registry-OjqzJ86S.js} +2 -2
- package/dist/assets/{oid-transform-D5Kxt6ij.js → oid-transform-Bzc2ZJSH.js} +1 -1
- package/dist/assets/{particles-vRp0Lf3o.js → particles-Be7AvO4c.js} +1 -1
- package/dist/assets/pixi-authoring-adapter-B42K4md-.js +1 -0
- package/dist/assets/{pixi-live-write-target-BjDsBQbp.js → pixi-live-write-target-D56tQEe_.js} +1 -1
- package/dist/assets/play.command-CIGRq8ow.js +2 -0
- package/dist/assets/presentation-DGBuGP6i.js +1 -0
- package/dist/assets/{product-CxmUIxmr.js → product-BN31wSnB.js} +1 -1
- package/dist/assets/{profiler.action-Dzy9DuAc.js → profiler.action-D57Kj9ym.js} +1 -1
- package/dist/assets/{profiler.menu-jLDO3U6N.js → profiler.menu-Dh9Q5DDx.js} +1 -1
- package/dist/assets/{profiler.utility-Do2Bw7MY.js → profiler.utility-DLNySW3w.js} +1 -1
- package/dist/assets/{project-authoring-session-C3eusefK.js → project-authoring-session-LCJAwGrD.js} +2 -2
- package/dist/assets/{properties-bone-constraints.inspector-B_PbSMV7.js → properties-bone-constraints.inspector-CaIDq5nN.js} +1 -1
- package/dist/assets/{properties-bone.inspector-CMDEQuBd.js → properties-bone.inspector-D2fcQGMF.js} +1 -1
- package/dist/assets/{properties-collection.inspector-D7Ay8yRj.js → properties-collection.inspector-CF5AtTAd.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-DS1fZgXK.js → properties-constraints.inspector-Bj2itDrS.js} +1 -1
- package/dist/assets/{properties-data.inspector-k2pGN2Mp.js → properties-data.inspector-BfRqk0Xo.js} +1 -1
- package/dist/assets/{properties-material.inspector-Bb3yAGUx.js → properties-material.inspector-Bf8H0mvu.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-BcJfe-Wy.js → properties-modifiers.inspector-BKShc1TH.js} +1 -1
- package/dist/assets/{properties-object.inspector-CUSfXJuq.js → properties-object.inspector-YBh8ABnN.js} +1 -1
- package/dist/assets/{properties-output.inspector-BTVW2kn1.js → properties-output.inspector-CVkzfs-l.js} +1 -1
- package/dist/assets/{properties-particles.inspector-Cw0fxx3B.js → properties-particles.inspector-ChDpAq-2.js} +1 -1
- package/dist/assets/{properties-physics.inspector-C-0bD2bu.js → properties-physics.inspector-BLEM7aMj.js} +1 -1
- package/dist/assets/{properties-render.inspector-C8D5UpjX.js → properties-render.inspector-vU4D9xLL.js} +1 -1
- package/dist/assets/{properties-scene.inspector-HjK6QHGg.js → properties-scene.inspector-C-DoN-kL.js} +1 -1
- package/dist/assets/{properties-texture.inspector-CckZgUaI.js → properties-texture.inspector-DySxy1oU.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-C1ajtVSk.js → properties-view-layer.inspector-DEKxMahJ.js} +1 -1
- package/dist/assets/{properties-world.inspector-BiT_EdT-.js → properties-world.inspector-m5qL_TQV.js} +1 -1
- package/dist/assets/r3f-design-session-C0DPEChS.js +2 -0
- package/dist/assets/{r3f-physics-binding-DzrbpqjM.js → r3f-physics-binding-Bgzzd4ol.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-DbbeRcvt.js → r3f-source-authoring-adapter-C8oMjdTL.js} +2 -2
- package/dist/assets/{react-canvas-navigation-Cp3cOHJa.js → react-canvas-navigation-Jowa_lJq.js} +1 -1
- package/dist/assets/react-inspector.service-TfTdj_Qk.js +1 -0
- package/dist/assets/{react-story-board-GaXqr03H.js → react-story-board-Bx7qYytV.js} +1 -1
- package/dist/assets/{react-three-rapier.esm-U8J7g6tH.js → react-three-rapier.esm-BR2ttgLS.js} +1 -1
- package/dist/assets/{react-world-authoring-adapter-DOjv2pYm.js → react-world-authoring-adapter-C1jPW_cN.js} +1 -1
- package/dist/assets/{realm-services-CnY105XU.js → realm-services-DefTrXnY.js} +1 -1
- package/dist/assets/{reflection-probe-capture.inspector-DqSW9p1v.js → reflection-probe-capture.inspector-C-6zrzZb.js} +1 -1
- package/dist/assets/{registry-CaCdF63N.js → registry-Z28XSZHF.js} +1 -1
- package/dist/assets/{relative-import-specifier-BFKIWEWs.js → relative-import-specifier-DQzkawgj.js} +1 -1
- package/dist/assets/{render-env-BkKZ4uMA.js → render-env-BZ7LsGfk.js} +1 -1
- package/dist/assets/{render-features-rxbawsRb.js → render-features-C7QwmhCo.js} +1 -1
- package/dist/assets/{render-settings-DS5leCed.js → render-settings-BBvkacR3.js} +1 -1
- package/dist/assets/{resolve-three-CVnMRHxw.js → resolve-three-C7zDbK29.js} +9 -9
- package/dist/assets/{root-seam-contract-CxLZaRio.js → root-seam-contract-rGNbiX6q.js} +1 -1
- package/dist/assets/run-selection-BUeubtHj.js +2 -0
- package/dist/assets/{scene-capture-0a-bTjT8.js → scene-capture-BTWgUzhI.js} +1 -1
- package/dist/assets/{scene-document.service-CeDwVA7t.js → scene-document.service-DJJp-la1.js} +2 -2
- package/dist/assets/{scene-framing-BQt72ZCw.js → scene-framing-PVMqGU8h.js} +1 -1
- package/dist/assets/{seeded-random-BgCwIAAU.js → seeded-random-38To73fI.js} +1 -1
- package/dist/assets/{setup-renderer-Cwkl1Ar6.js → setup-renderer-OOw1SykJ.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-DF679Ncb.js → source-object3d-authoring-adapter-RmutT5Dt.js} +1 -1
- package/dist/assets/{source-persistence-backend-CwLYVPXj.js → source-persistence-backend-HviqjKZ2.js} +1 -1
- package/dist/assets/{stage-keyboard-B8BEW592.js → stage-keyboard-DDi7S27C.js} +1 -1
- package/dist/assets/stage-overlay-set-olkNSZmq.js +1 -0
- package/dist/assets/{stage-presence-markers-DIP7YMcO.js → stage-presence-markers-cznMN_qq.js} +1 -1
- package/dist/assets/stage-transform-tools-BDUZqRIR.js +1 -0
- package/dist/assets/{standard-viewport-dressing-BCA51Tum.js → standard-viewport-dressing-BZyuxyVl.js} +1 -1
- package/dist/assets/{state-watch.action-DnR5Zjr-.js → state-watch.action-DEdb1mNa.js} +1 -1
- package/dist/assets/{state-watch.menu-wYLCLsAw.js → state-watch.menu-jWbUM3kw.js} +1 -1
- package/dist/assets/{state-watch.utility-CFG1Tu1m.js → state-watch.utility-DDmn3G25.js} +1 -1
- package/dist/assets/{story-capture-BmnwHGDV.js → story-capture-Dj1xkeKH.js} +1 -1
- package/dist/assets/{story-documents-BTo90DiA.js → story-documents-8ehMyYHo.js} +2 -2
- package/dist/assets/{story-documents.service-yagl1wGp.js → story-documents.service-BzQCuNBu.js} +1 -1
- package/dist/assets/{story-documents.service-B6v7Z-WE.js → story-documents.service-iNP-ORNr.js} +1 -1
- package/dist/assets/{story-media-presence-BqRMu572.js → story-media-presence-zTPlU9HR.js} +1 -1
- package/dist/assets/{story-pixi-preview-Da6afqLg.js → story-pixi-preview-B7THvSl7.js} +1 -1
- package/dist/assets/{story-presentation-DMSYRWaz.js → story-presentation-BLXYPadR.js} +1 -1
- package/dist/assets/{story-three-preview-R1JvrggS.js → story-three-preview-B1nNiPwP.js} +2 -2
- package/dist/assets/{studio-environment-DRxxq_QX.js → studio-environment-yaKaHPxH.js} +1 -1
- package/dist/assets/{surface-state-1lTOi8FD.js → surface-state-D9j6qNu8.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-eiQXwMIc.js → syntactic-prop-specs-BTnsMOvH.js} +1 -1
- package/dist/assets/team-playtest.service-Ds9tkO4q.js +1 -0
- package/dist/assets/{three-authoring-adapter-htbnVej2.js → three-authoring-adapter-BrkGH4cd.js} +1 -1
- package/dist/assets/three-authoring.service-DoamZDMx.js +2 -0
- package/dist/assets/{three-ingest-runtime-B7rtg3QE.js → three-ingest-runtime-CXKjNysA.js} +1 -1
- package/dist/assets/{three-integration-BdN5Nhsg.js → three-integration-CuAnYaTW.js} +2 -2
- package/dist/assets/three-integration.service-Db-VabIm.js +1 -0
- package/dist/assets/{three-TCuY32m_.js → three-oYrcK5SQ.js} +1 -1
- package/dist/assets/{three-projection-core-CG01r5Ta.js → three-projection-core-jBJVt6O0.js} +1 -1
- package/dist/assets/{three-state-DwFE3ay2.js → three-state-wXRU3rLr.js} +1 -1
- package/dist/assets/{three-story-capture.service-CvpV3v5a.js → three-story-capture.service-DMJRcqjr.js} +2 -2
- package/dist/assets/{three-story-model-C2r2BuiA.js → three-story-model-DgiAP-oQ.js} +1 -1
- package/dist/assets/{three-viewport-presentation-B0z_cECu.js → three-viewport-presentation-CgO3eWJ-.js} +1 -1
- package/dist/assets/transform-mode-request-BnKpgRUW.js +1 -0
- package/dist/assets/transport-strip-a9yLoPsI.js +1 -0
- package/dist/assets/transport.header-CpfoppXc.js +1 -0
- package/dist/assets/{tuples-DfWSY2tr.js → tuples-CKsHOV9T.js} +1 -1
- package/dist/assets/ui-board-document-DtTR_mBr.js +2 -0
- package/dist/assets/{user-data-Bpj7diUS.js → user-data-CqOoAowZ.js} +1 -1
- package/dist/assets/{utility-view-state-CAfbFbKQ.js → utility-view-state-Db97zwDz.js} +1 -1
- package/dist/assets/{viewport-door-Bj_ZIP85.js → viewport-door-DVkMQazS.js} +1 -1
- package/dist/assets/{viewport-root-presentation-vgxsTyj4.js → viewport-root-presentation-B35t51xX.js} +1 -1
- package/dist/assets/{viewport-surface-status-cwCiBGa7.js → viewport-surface-status-D5kZtFW5.js} +1 -1
- package/dist/assets/{webworkerAll-Cm3gTjWi.js → webworkerAll-CfKEb4Ao.js} +1 -1
- package/dist/assets/{workspace-arrangement-BdAlBwvd.js → workspace-arrangement-DIMM7ska.js} +1 -1
- package/dist/assets/world-documents-C4t3iOD-.js +1 -0
- package/dist/assets/world-root-stage-binding-ydl3JN1a.js +1 -0
- package/dist/assets/{xstate-animation-binding-BGLxcZT_.js → xstate-animation-binding-aQEmNSpm.js} +1 -1
- package/dist/assets/{xstate-animation-meta-D_T441Ru.js → xstate-animation-meta-CnMX1Sc1.js} +1 -1
- package/dist-node/cli.js +29 -24
- package/dist-node/create.js +14 -9
- package/package.json +18 -16
- package/template/.agents/skills/vgai-music/SKILL.md +28 -4
- package/template/package.json +13 -11
- package/template/src/input.ts +1 -1
- package/template/src/main.ts +74 -3
- package/dist/assets/CanvasBoardDocument-mxL0oJ3N.js +0 -1
- package/dist/assets/CanvasSceneViewport-C_mapCwC.js +0 -1
- package/dist/assets/InspectorObjectPreview-W-y079DS.js +0 -1
- package/dist/assets/ModelAssetDocument-De1HKuxG.js +0 -1
- package/dist/assets/Object3DDocumentToolbar-Cks81kCS.js +0 -1
- package/dist/assets/Object3DDocumentViewport-DCwiSY3O.js +0 -2
- package/dist/assets/OnlineAssetDetail-CNuwSQRQ.js +0 -1
- package/dist/assets/PlayBar-bT8Xdrap.js +0 -1
- package/dist/assets/ReactCanvasControls-CnJrPj-B.js +0 -1
- package/dist/assets/RootSelectionOverlay-CpaGluQu.js +0 -1
- package/dist/assets/ShadowEditor-CVtMlALn.js +0 -1
- package/dist/assets/StageHost-B89HKcvd.js +0 -2
- package/dist/assets/Toolbar-DkTHnQto.js +0 -1
- package/dist/assets/ViewportShadingMenu-CXPi6fl8.js +0 -1
- package/dist/assets/adapter-runtime-bindings-4cmsRvRh.js +0 -2
- package/dist/assets/autoplay.service-CjPnv3QW.js +0 -1
- package/dist/assets/binding-resolver-dE0GnZT5.js +0 -2
- package/dist/assets/blender.keymap-_rF_vRX8.js +0 -1
- package/dist/assets/bridge.command-BF00Iefm.js +0 -3
- package/dist/assets/build-profiles.document-CqNrDdh9.js +0 -2
- package/dist/assets/build-session-GZcSAfPN.js +0 -9
- package/dist/assets/build.header-Bt1kwHWl.js +0 -1
- package/dist/assets/canvas-design-mount-BbLW_Nci.js +0 -6
- package/dist/assets/canvas-entry-runtime-UNYuSfG0.js +0 -2
- package/dist/assets/component-verbs.service-CnA11bJq.js +0 -1
- package/dist/assets/create-runtime-DBfUy0SO.js +0 -3
- package/dist/assets/debug-bridge-D3_-EgRE.js +0 -1
- package/dist/assets/editor-api-BFTIRlWa.js +0 -1
- package/dist/assets/entry-adjudication-Dc18TIqT.js +0 -1
- package/dist/assets/fork-menu-DpKqRhF5.js +0 -1
- package/dist/assets/game-document.service-Chmt4065.js +0 -1
- package/dist/assets/game-eval.command-DRSvOJ_1.js +0 -2
- package/dist/assets/game-network-Ct2FQYmu.js +0 -1
- package/dist/assets/gameplay.command-Boqv1hnc.js +0 -1
- package/dist/assets/generation.service-o9aXlsx4.js +0 -1
- package/dist/assets/index-BHoAKyAC.js +0 -1
- package/dist/assets/ingest-siblings-BtiEXLnh.js +0 -1
- package/dist/assets/instances.command-BwayrqNm.js +0 -1
- package/dist/assets/layered-pick-kiQf53t5.js +0 -1
- package/dist/assets/model-asset-sections.service-CqSclZGY.js +0 -1
- package/dist/assets/module-mode-BH2R93XP.js +0 -2
- package/dist/assets/mount-canvas-ingest-root-D1z9i5B3.js +0 -2
- package/dist/assets/mount-dom-ingest-root-BAmmNxlm.js +0 -2
- package/dist/assets/mount-ingest-root-DYR0TMIt.js +0 -2
- package/dist/assets/mount-manifest-DdkFYdVA.js +0 -1
- package/dist/assets/network-observer.service-Ce83TdsU.js +0 -1
- package/dist/assets/network.utility-DFDul2Xb.js +0 -1
- package/dist/assets/pixi-authoring-adapter-BChknIdC.js +0 -1
- package/dist/assets/play-mode-DICV4cKP.js +0 -22
- package/dist/assets/play.command-NHyi5rzF.js +0 -2
- package/dist/assets/presentation-BeNFBfKg.js +0 -1
- package/dist/assets/r3f-design-session-B5GsZI5M.js +0 -2
- package/dist/assets/react-inspector.service-Bm0OnanU.js +0 -1
- package/dist/assets/run-selection-DzEkGesJ.js +0 -2
- package/dist/assets/stage-overlay-set-BGE03mqb.js +0 -1
- package/dist/assets/stage-transform-tools-BQB7EY4l.js +0 -1
- package/dist/assets/team-playtest.service-hLfjgScx.js +0 -1
- package/dist/assets/three-authoring.service-BIQAtVdX.js +0 -2
- package/dist/assets/three-integration.service-CS8Nvbd2.js +0 -1
- package/dist/assets/transform-mode-request-DzD9aUNA.js +0 -1
- package/dist/assets/transport-strip-CUjNltnb.js +0 -1
- package/dist/assets/transport.header-Bb4FpQ8J.js +0 -1
- package/dist/assets/ui-board-document-CCiiXjX9.js +0 -2
- package/dist/assets/world-documents-DBybpBq8.js +0 -1
- package/dist/assets/world-root-stage-binding-ZVYIgr74.js +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as b}from"./jsx-runtime-DPjLkJKQ.js";import{r as d}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{
|
|
1
|
+
import{a as b}from"./jsx-runtime-DPjLkJKQ.js";import{r as d}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{ae as O}from"./index-CaG87ZF-.js";import{r as L}from"./studio-environment-yaKaHPxH.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-4ldz-EOG.js";import{O as Q}from"./StageHost-V_0opXFt.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-CqOoAowZ.js";import"./workspace-arrangement-DIMM7ska.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-wXRU3rLr.js";import"./editor-shell-store-Bh1S7M54.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./editor-layers-B4oYfpj8.js";import"./entity-object-B_5Gc0Ky.js";import"./standard-viewport-dressing-BZyuxyVl.js";import"./content-bounds-DKBD7nsv.js";import"./hierarchy-marks-C25dY2fR.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-MrJY0U_-.js";import"./three-viewport-presentation-CgO3eWJ-.js";import"./clip-planes-CnAI6DZn.js";import"./three-oYrcK5SQ.js";import"./component-instance-root-df4ofoOR.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-uk-2sblh.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three-integration-CuAnYaTW.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-B_-BRrRD.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-OjqzJ86S.js";import"./viewport-door-DVkMQazS.js";import"./asset-preview-Cv7tfD98.js";import"./bitmap-label-Ct4k6ehY.js";import"./scene-framing-PVMqGU8h.js";import"./source-object3d-authoring-adapter-RmutT5Dt.js";import"./three-projection-core-jBJVt6O0.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./transport-strip-a9yLoPsI.js";import"./viewport-surface-status-D5kZtFW5.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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{J as V,d9 as B,da as F,db as w,dc as I,cC as W,$ as R,aK as j,a0 as S,dd as H,de as T,df as A,dg as D,dh as P,cQ as N,aL as G,di as y,cR as f}from"./index-CaG87ZF-.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{s as K,g as $,a as J,b as L,c as Q,d as z,f as X,t as Y}from"./react-story-board-Bx7qYytV.js";const M={fill:null,desktop:{width:1440,height:900},tablet:{width:768,height:1024},mobile:{width:390,height:844}};function _({boardViewport:e,containerRef:r,selectViewport:n,viewportValue:d}){return t.jsxs(t.Fragment,{children:[t.jsxs(D,{"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:"vgai-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:()=>Y(r.current),children:t.jsx(S,{icon:P,size:"md"})})]})}function it({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,$),u=h.useSyncExternalStore(J,()=>L(e.current),()=>null),m=h.useCallback(a=>{const s=e.current;if(!s)return;const i=Math.min(4,Math.max(.1,a)),p=s.clientWidth/2,b=s.clientHeight/2,x=(p-o.x)/o.zoom,Z=(b-o.y)/o.zoom;w(p-x*i,b-Z*i,i)},[e,o]),c=h.useCallback(()=>{const a=e.current,s=[...d.selectedEntityIds].at(-1);if(!a||!s)return;const i=r?.adapter.rects?.rect(s);if(!i||i.width<=0||i.height<=0)return;const p=Math.max(1,a.clientWidth-96),b=Math.max(1,a.clientHeight-96),x=Math.min(4,Math.max(.1,Math.min(p/i.width,b/i.height)));w(a.clientWidth/2-(i.x+i.width/2)*x,a.clientHeight/2-(i.y+i.height/2)*x,x)},[e,r,d]),g=h.useCallback(a=>{const s=e.current;if(u){Q(s,a==="fill"?null:a);return}const i=M[a];if(!s||i===null){z(null,null),w(0,0,1);return}z(i.width,i.height);const p=Math.min(1,Math.max(.1,Math.min((s.clientWidth-96)/i.width,(s.clientHeight-96)/i.height)));w((s.clientWidth-i.width*p)/2,(s.clientHeight-i.height*p)/2,p)},[u,e]),k=h.useCallback(()=>{const a=e.current;a&&X(a)},[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(M).find(([,a])=>a===null?l.width===null:a.width===l.width&&a.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-vgai-canvas-navigation-ignore":"true",className:"vgai-react-canvas-controls",children:[!n&&t.jsx(_,{boardViewport:u,containerRef:e,selectViewport:g,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:H,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:T,size:"md"})}),!n&&t.jsx(j,{"aria-label":"Zoom to selection",title:"Zoom to selection",size:"comfortable",onClick:c,children:t.jsx(S,{icon:A,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 g=Number.parseFloat(c.currentTarget.value);Number.isFinite(g)&&g>0&&(r(g/100),l(!1))}})}),t.jsx(y,{}),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(y,{}),[.5,1,2].map(c=>t.jsx(f,{onSelect:m(()=>r(c)),children:`Zoom to ${c*100}%`},c))]})]})}export{it as R};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"./jsx-runtime-DPjLkJKQ.js";import{r as u}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{ae as et,aL as We,$ as gt,hX as pe,gh as Ve,cZ as vt,cR as se,q as Ue,c3 as Mn,jK as Ze,jL as Fn,cC as Xn,jM as Re,jN as je,jO as Pe,aK as ze,a0 as De,jP as $n,gG as Bn,jQ as Yn,jR as Hn,jS as Gn,jT as A,eX as An,J as Kn,aw as Nn,cz as _n,dF as Wn,dG as Vn,fw as Un,jU as ee,jV as Qe,fI as I,jW as ae,fJ as Ct,jX as ne,jY as jt,jZ as le,fK as Zn,fL as Qn,j_ as qn,j$ as Jn,k0 as to,k1 as eo,k2 as no,fM as Ie,k3 as oo,k4 as Oe,k5 as io,k6 as ro,k7 as so,k8 as ao,k9 as lo,ka as co,kb as uo,eT as qe,fH as Le,kc as po,kd as fo,ke as xo,kf as ho,dc as yo,kg as go,az as Je,kh as vo,ki as mo,kj as bo,kk as wo,kl as So,aA as Eo,fy as ko}from"./index-CaG87ZF-.js";import{s as Co,i as Ro,r as Te}from"./eyedropper-session-bjPXnfeX.js";import{a as jo,p as Po}from"./layered-pick-B_-BRrRD.js";import{z as zo,j as Do}from"./react-story-board-Bx7qYytV.js";import{v as fe}from"./viewport-editor-controls-BYaAZ_Ku.js";import{l as Io}from"./inspect-C8RP8G5F.js";const Me=new WeakMap;let Fe=0;function pt(e){let o=Me.get(e);return o||(o={guides:[],listeners:new Set,revision:0},Me.set(e,o)),o}function Kt(e){e.revision+=1;for(const o of e.listeners)o()}function Oo(e){return pt(e).guides}function Lo(e){return pt(e).revision}function To(e,o){const n=pt(e);return n.listeners.add(o),()=>n.listeners.delete(o)}function Zi(e,o,n){Fe+=1;const d=pt(e),r=`canvas-guide-${Fe}`;return d.guides=[...d.guides,{id:r,axis:o,value:n}],Kt(d),r}function Qi(e,o,n){const d=pt(e),r=d.guides.map(h=>h.id===o?{...h,value:n}:h);r.every((h,s)=>h===d.guides[s])||(d.guides=r,Kt(d))}function qi(e,o){const n=pt(e),d=n.guides.filter(r=>r.id!==o);d.length!==n.guides.length&&(n.guides=d,Kt(n))}function Ji(e){const o=pt(e);o.guides.length!==0&&(o.guides=[],Kt(o))}const ce=new WeakMap,de=new Set;let tn=0;function Rt(e){return ce.get(e)??null}function Mo(e,o){o?ce.set(e,o):ce.delete(e),tn+=1;for(const n of de)n()}function Fo(e){return de.add(e),()=>de.delete(e)}function Xo(){return tn}const en="canvasCreateNode";function $o(){return Ue().projectLocalState.read(en)??{favorites:[],recent:[]}}function Xe(e){Ue().projectLocalState.write(en,e)}function nn(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 Bo({state:e,onClose:o}){const[n,d]=u.useState("menu");return n==="create"?a.jsx(Go,{state:e,onClose:o}):n==="instantiate"?a.jsx(Ao,{state:e,onClose:o}):a.jsx(Yo,{state:e,onClose:o,onPick:d})}function Yo({state:e,onClose:o,onPick:n}){const d=u.useRef(null);return nn(d,o),a.jsx(pe,{children:a.jsxs(Ve,{ref:d,"aria-label":"Add node here","data-testid":"viewport-add-menu",style:{position:"fixed",left:e.x,top:e.y,minWidth:190,zIndex:vt.dropdown},children:[a.jsx(se,{"data-testid":"viewport-add-menu-item",onSelect:()=>n("create"),children:"Add 2D Node Here…"}),e.adapter.assetDrop?a.jsx(se,{"data-testid":"viewport-add-menu-item",onSelect:()=>n("instantiate"),children:"Instantiate Scene Here…"}):null]})})}function on({title:e,testId:o,onClose:n,children:d,footer:r}){const h=u.useRef(null);return nn(h,n),a.jsx(pe,{children:a.jsx("div",{style:{position:"fixed",inset:0,zIndex:vt.dropdown,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0, 0, 0, .35)"},children:a.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:et.surface.raised,color:et.content.primary,boxShadow:"0 12px 40px rgba(0, 0, 0, .5)",fontSize:12},children:[a.jsx("div",{style:{fontWeight:600},children:e}),d,a.jsx("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:r})]})})})}const G={color:et.content.muted};function ue({selected:e,onPick:o,onOpen:n,testId:d,indent:r=0,children:h}){return a.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?et.accent.muted:"transparent"},children:h})}function Ho(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 rn(e){const[o,n]=u.useState(null),[d,r]=u.useState(null);return u.useEffect(()=>{if(!e)return;let h=!0;return Mn().then(s=>{if(h){if(!s.ok){r(s.reason),n([]);return}n(s.entries.filter(g=>g.surface==="canvas"&&g.exported&&g.contentKind!=="image"))}}),()=>{h=!1}},[e]),{components:o,failure:d}}const $e=e=>`component:${e.path}#${e.name}`;function sn(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)?(Ze(e.adapter,r,o.path,d),null):`${o.name} cannot be placed here.`}function Go({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState($o),[s,g]=u.useState({builtIn:!0,custom:!0}),[S,v]=u.useState(!1),[k,z]=u.useState(null),{components:O}=rn(!!e.adapter.assetDrop),L=e.kinds.find(x=>!x.extends),M=(O??[]).map(x=>({kind:$e(x),label:x.name,...L?{extends:L.kind}:{},description:`A project component, from ${x.path}.`})),j=[...s.builtIn?e.kinds:[],...s.custom?M:[]],_=u.useMemo(()=>new Map([...e.kinds,...M].map(x=>[x.kind,x])),[e.kinds,O]),Z=j.filter(x=>x.label.toLowerCase().includes(n.trim().toLowerCase())),[st,nt]=u.useState(e.kinds[0]?.kind??null),D=st&&Z.some(x=>x.kind===st)?st:Z[0]?.kind??null,K=D?_.get(D):void 0,at=x=>{if(!x)return;const F=(O??[]).find(C=>$e(C)===x);if(F){const C=sn(e,F);if(C){z(C);return}}else e.structure.create(x,e.parentId??void 0,e.at).ack;Xe({...r,recent:[x,...r.recent.filter(C=>C!==x)].slice(0,10)}),o()},Pt=()=>{if(!D)return;const x=r.favorites.includes(D)?r.favorites.filter(C=>C!==D):[...r.favorites,D],F={...r,favorites:x};Xe(F),h(F)},zt=(x,F)=>x.map(C=>_.get(C)).filter(C=>C!==void 0).map(C=>a.jsx(ue,{testId:F,selected:C.kind===D,onPick:()=>nt(C.kind),onOpen:()=>at(C.kind),children:C.label},C.kind));return a.jsx(on,{title:`Create New ${L?.label??"Node"}`,testId:"canvas-create-node-dialog",onClose:o,footer:a.jsxs(a.Fragment,{children:[a.jsx(gt,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),a.jsx(gt,{type:"button","data-testid":"canvas-create-node-create",disabled:!D,onClick:()=>at(D),children:"Create"})]}),children:a.jsxs("div",{style:{display:"flex",gap:12,minHeight:240},children:[a.jsxs("div",{style:{width:170,display:"flex",flexDirection:"column",gap:4},children:[a.jsx("span",{style:G,children:"Favorites:"}),a.jsx("div",{"data-testid":"canvas-create-node-favorites",style:{flex:1},children:zt(r.favorites,"canvas-create-node-favorite")}),a.jsx("span",{style:G,children:"Recent:"}),a.jsx("div",{"data-testid":"canvas-create-node-recent",style:{flex:1},children:zt(r.recent,"canvas-create-node-recent-item")})]}),a.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:4},children:[a.jsx("span",{style:G,children:"Search:"}),a.jsxs("div",{style:{display:"flex",gap:4},children:[a.jsx(We,{"data-testid":"canvas-create-node-search",value:n,autoFocus:!0,onChange:x=>d(x.target.value),onKeyDown:x=>{if(x.key==="Enter"&&at(D),x.key==="ArrowDown"||x.key==="ArrowUp"){x.preventDefault();const F=Z.findIndex(Dt=>Dt.kind===D),C=Z[Math.min(Z.length-1,Math.max(0,F+(x.key==="ArrowDown"?1:-1)))];C&&nt(C.kind)}},style:{flex:1}}),a.jsx(gt,{type:"button",variant:"ghost","data-testid":"canvas-create-node-favorite-toggle","aria-pressed":D?r.favorites.includes(D):!1,title:"(Un)favorite selected item.",disabled:!D,onClick:Pt,children:D&&r.favorites.includes(D)?"★":"☆"})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsx("span",{style:G,children:"Matches:"}),a.jsx("span",{style:{flex:1}}),a.jsx(gt,{type:"button",variant:"ghost","data-testid":"canvas-create-node-filters","aria-haspopup":"menu","aria-expanded":S,onClick:()=>v(!S),children:"Filters"})]}),S?a.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,F])=>a.jsxs("label",{role:"menuitemcheckbox","aria-checked":s[x],style:{display:"flex",gap:4},children:[a.jsx("input",{type:"checkbox","data-testid":`canvas-create-node-filter-${x}`,checked:s[x],onChange:()=>g({...s,[x]:!s[x]})}),F]},x))}):null,a.jsx("div",{role:"listbox","data-testid":"canvas-create-node-matches",style:{flex:1,overflow:"auto"},children:Z.map(x=>a.jsx(ue,{testId:"canvas-create-node-match",indent:n.trim()===""?Ho(x,_):0,selected:x.kind===D,onPick:()=>nt(x.kind),onOpen:()=>at(x.kind),children:x.label},x.kind))}),a.jsx("span",{style:G,children:"Description:"}),k?a.jsx("span",{"data-testid":"canvas-create-node-failure",style:G,children:k}):null,a.jsx("div",{"data-testid":"canvas-create-node-description",style:{minHeight:36},children:K?a.jsxs(a.Fragment,{children:[a.jsxs("div",{children:[K.label,K.extends?a.jsx("span",{style:G,children:` < ${_.get(K.extends)?.label??K.extends}`}):null]}),K.description?a.jsx("div",{style:G,children:K.description}):null]}):null})]})]})})}function Ao({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState(null),{components:s,failure:g}=rn(!0),[S,v]=u.useState(null),k=S??g,z=j=>`${j.path}#${j.name}`,O=(s??[]).filter(j=>`${j.name} ${j.path}`.toLowerCase().includes(n.trim().toLowerCase())),L=O.find(j=>z(j)===r)??O[0]??null,M=j=>{if(!j)return;const _=sn(e,j);if(_){v(_);return}o()};return a.jsxs(on,{title:"Instantiate Scene",testId:"canvas-instantiate-dialog",onClose:o,footer:a.jsxs(a.Fragment,{children:[a.jsx(gt,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),a.jsx(gt,{type:"button","data-testid":"canvas-instantiate-open",disabled:!L,onClick:()=>M(L),children:"Instantiate"})]}),children:[a.jsx("span",{style:G,children:"Search:"}),a.jsx(We,{"data-testid":"canvas-instantiate-search",value:n,autoFocus:!0,onChange:j=>d(j.target.value),onKeyDown:j=>{j.key==="Enter"&&M(L)}}),a.jsxs("div",{role:"listbox","data-testid":"canvas-instantiate-matches",style:{minHeight:160,overflow:"auto"},children:[s===null?a.jsx("span",{style:G,children:"Reading the project's components…"}):null,s!==null&&O.length===0?a.jsx("span",{style:G,children:"No canvas component matches."}):null,O.map(j=>a.jsxs(ue,{testId:"canvas-instantiate-match",selected:L!==null&&z(j)===z(L),onPick:()=>h(z(j)),onOpen:()=>M(j),children:[j.name," ",a.jsx("span",{style:G,children:j.path})]},z(j)))]}),k?a.jsx("span",{"data-testid":"canvas-instantiate-failure",style:G,children:k}):null]})}function Be(e,o){for(const n of o){const d=A(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 Ko=[{op:"left",testId:"align-left",label:"Align left",icon:Re},{op:"hcenter",testId:"align-hcenter",label:"Align horizontal center",icon:je},{op:"right",testId:"align-right",label:"Align right",icon:Pe},{op:"top",testId:"align-top",label:"Align top",icon:Re,rotate:!0},{op:"vcenter",testId:"align-vcenter",label:"Align vertical center",icon:je,rotate:!0},{op:"bottom",testId:"align-bottom",label:"Align bottom",icon:Pe,rotate:!0}],No=[{axis:"horizontal",testId:"distribute-horizontal",label:"Distribute horizontally",icon:Yn},{axis:"vertical",testId:"distribute-vertical",label:"Distribute vertically",icon:Hn}];function _o(e){const d=e.y-30-8;return{left:e.x,top:d<0?e.y+e.height+8:d}}function Wo({adapter:e,entries:o}){if(o.length<2)return null;const n=Fn(o.map(s=>s.rect));if(!n)return null;const{left:d,top:r}=_o(n),h=o.length>=3;return a.jsxs(Xn,{label:"Align and distribute","data-testid":"align-toolbar",style:{position:"absolute",left:d,top:r,zIndex:vt.overlayLow,gap:2,padding:3},children:[Ko.map(({op:s,testId:g,label:S,icon:v,rotate:k})=>a.jsx(ze,{"data-testid":g,title:S,"aria-label":S,variant:"ghost",size:"compact",onClick:()=>Be(e,$n(o,s)),children:a.jsx(De,{icon:v,"aria-hidden":"true",style:k?{transform:"rotate(90deg)"}:void 0})},s)),h&&a.jsxs(a.Fragment,{children:[a.jsx(Bn,{}),No.map(({axis:s,testId:g,label:S,icon:v})=>a.jsx(ze,{"data-testid":g,title:S,"aria-label":S,variant:"ghost",size:"compact",onClick:()=>Be(e,Gn(o,s)),children:a.jsx(De,{icon:v,"aria-hidden":"true"})},s))]})]})}function Vo({rect:e,initialText:o,onCommit:n,onCancel:d}){const[r,h]=u.useState(o),s=u.useRef(null),g=u.useRef(!1);u.useEffect(()=>{const k=s.current;k&&(k.focus(),k.select())},[]);const S=()=>{g.current||(g.current=!0,n(r))},v=()=>{g.current||(g.current=!0,d())};return a.jsx(An,{ref:s,"data-testid":"world-text-editor",value:r,onChange:k=>h(k.target.value),onBlur:S,onKeyDown:k=>{k.key==="Escape"?(k.stopPropagation(),v()):k.key==="Enter"&&!k.shiftKey&&(k.preventDefault(),S())},"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:vt.overlayLow,pointerEvents:"auto",resize:"none"}})}const B=et.accent.default,Uo=vt.overlayLow,At=5;function Zo(e,o,n){return e?!1:fe()?.activate(o,n)??!1}function Qo(e,o,n,d,r,h){const s=e?null:fe()?.hover(o,n)??null;r(s),h(s?null:d(o,n))}function qo(e,o){const n=e.hierarchy.node(o);return n?`${n.label}·${n.kind}`:o}function Jo(e){return e instanceof Je?e.childAdapters().some(o=>!!o.adapter.rects):!!e.rects}function ti(e){const o=e instanceof Je?e.childAdapters():[{worldId:"",adapter:e}],n=[];for(const{worldId:d,adapter:r}of o)if(r.rects&&!(d&&Eo(d)))for(const h of ko(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 ei(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 ni(e,o,n){if(!n)return[o];const d=new Set(e);return d.has(o)?d.delete(o):d.add(o),[...d]}function oi(e,o,n,d){return o&&!!n&&(n.width>At||n.height>At)&&n?ti(e).filter(s=>ei(n,s.rect)).map(s=>s.id):d?null:[]}function ii(e,o,n,d){return e?"grabbing":o?"grab":n||d?"crosshair":"default"}function tt(e){try{e.currentTarget.setPointerCapture?.(e.pointerId)}catch{}}function oe(e){e.currentTarget.hasPointerCapture?.(e.pointerId)&&e.currentTarget.releasePointerCapture?.(e.pointerId)}function ri(e,o){if(o!==null)return!1;const n=e.currentTarget.parentElement?.parentElement??null;return Do(n,e.clientX,e.clientY)}function ie(e,o,n){return!e||o===n||o==="combined"||o==="select"}function Ye(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 si(e,o,n){if(!e)return{left:o.x+o.width/2-U/2,top:o.y-n-U/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,g=Math.hypot(h,s)||1;return{left:d+h/g*n-U/2,top:r+s/g*n-U/2}}function ai(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(${le(e)}rad)`,transformOrigin:"center",borderStyle:"solid",borderColor:B,borderWidth:o,background:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function li(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 Ht=10,re=48;function He(e,o){return{position:"absolute",left:e.x-Ht/2,top:e.y-Ht/2,width:Ht,height:Ht,background:"#fff",border:`1px solid ${B}`,boxSizing:"border-box",cursor:o,pointerEvents:"auto"}}const U=12,an=24;function ci(e){return{position:"absolute",left:e.x+e.width/2-U/2,top:e.y-an-U/2,width:U,height:U,borderRadius:"50%",background:"#fff",border:`1px solid ${B}`,boxSizing:"border-box",cursor:"grab",padding:0,pointerEvents:"auto"}}const Ge=12;function di(e){return{position:"absolute",left:e.position[0],top:e.position[1],width:Ge,height:Ge,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 ui(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 pi(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 fi="rgba(46, 204, 113, 0.25)",xi="rgba(230, 126, 34, 0.25)";function hi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:e.kind==="padding"?fi:xi,boxSizing:"border-box",cursor:e.cursor,pointerEvents:"auto"}}function yi(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 gi(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 vi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:"#ff5fa2",borderRadius:2,pointerEvents:"none"}}const xe="#ff2d92",Gt=6;function mi(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:xe,pointerEvents:"none"}}function Ae(e,o,n){return{position:"absolute",left:n?e:e-Gt/2,top:n?o-Gt/2:o,width:n?1:Gt,height:n?Gt:1,background:xe,pointerEvents:"none"}}function bi(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:xe,borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}const Ke="#f24822";function wi(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 ${Ke}`:void 0,borderTop:o?void 0:`1px dashed ${Ke}`,pointerEvents:"none"}}function Si(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-36),display:"flex",gap:4,pointerEvents:"none"}}const Ne={padding:"2px 6px",fontSize:10,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:et.content.onAccent,background:`color-mix(in srgb, ${B} 85%, transparent)`,borderRadius:3,whiteSpace:"nowrap"};function Ei(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 _e(e,o,n,d=0){return o&&n>0?Math.round((e-d)/n)*n+d:e}function ki(e,o,n,d,r,h,s=!1){const g=e.nativeHandleSpan??1,S=s?"both":e.nativeScaleAxis??"both",v=s&&e.nativeScaleAxis==="x"?o:s&&e.nativeScaleAxis==="y"?n:null;let k,z;if(S==="x")k=1+o/g,z=1;else if(S==="y")k=1,z=1+n/g;else{const O=v!==null?1+v/g:1+(o+n)/(Math.SQRT2*g);k=O,z=O}return{...S!=="y"?{scaleXFactor:k}:{},...S!=="x"?{scaleYFactor:z}:{},...d&&!r?{scaleStep:h}:{}}}function Ci(e,o,n,d,r,h,s={x:0,y:0}){const g=e.nativeOrigin;if(!g)return{};const S=d&&!0;return{...e.moveAxis!=="y"?{originX:_e(g.x+o,S,h,s.x)}:{},...e.moveAxis!=="x"?{originY:_e(g.y+n,S,h,s.y)}:{}}}function Ri(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 ji(e,o,n){return e==="x"?{dx:o,dy:0}:e==="y"?{dx:0,dy:n}:{dx:o,dy:n}}function Pi(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 zi(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 Di(e,o,n){const d=A(e,o);if(!d)return null;const r=e.inspector?.get(o,"style.position"),h=ae(e,o)==="2d";if(r!=="absolute"&&r!=="fixed"&&!h)return null;const s=I(e,o);if(!s)return null;const g=h?d.gizmoOrigin?.(o)??void 0:void 0,S=[];for(const v of n){if(v===o)continue;const k=A(e,v),z=I(e,v);if(!k||!z)continue;const O=e.inspector?.get(v,"style.position"),L=ae(e,v)==="2d";if(O!=="absolute"&&O!=="fixed"&&!L)continue;const M=L?k.gizmoOrigin?.(v)??void 0:void 0;S.push({id:v,ownerBoxEdit:k,origRect:z,...M?{nativeOrigin:M}:{}})}return{id:o,ownerBoxEdit:d,origRect:s,context:jt(e,o),...g?{nativeOrigin:g}:{},peers:S}}function Ii(e,o){if(!Qe(e,o)?.reorder)return null;const d=go(e,o);if(!d||d.length<3)return null;const r=I(e,o);if(!r)return null;const h=[];for(const s of d){if(s===o)continue;const g=I(e,s);g&&h.push({id:s,rect:g})}return h.length===0?null:{id:o,adapter:e,origRect:r,siblingRects:h}}function Oi(){return vo()}function Li(e,o){if(o.size!==1)return null;const n=[...o][0],d=A(e,n);if(!d)return null;const r=I(e,n);if(!r)return null;const h=mo(r,bo(e,n));return{id:n,rect:r,ownerBoxEdit:d,spacingBands:h}}function Ti(e,o){if(o.size<2)return null;const n=[];for(const d of o){const r=I(e,d);if(!r||!A(e,d))return null;n.push({id:d,rect:r})}return n}function Mi(e,o,n){const d=o.size===1?[...o][0]:null,r=d?I(e,d):null,h=r&&n?wo(r,n):[],s=d?So(e,d):null,g=!!(s&&(s.position||s.parentLayout)),S=d?jt(e,d)?.parent??null:null;return{selectedSingleRect:r,measureLines:h,positionBadge:s,showPositionBadge:g,parentRect:S}}function Fi({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]),a.jsx(pe,{children:a.jsx(Ve,{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:vt.dropdown},children:e.ids.map(r=>{const h=o.hierarchy.node(r);return a.jsxs(se,{"data-testid":"viewport-pick-menu-item",onSelect:()=>{qe(o,[r]),n()},style:{justifyContent:"space-between",gap:20},children:[a.jsx("span",{children:h?.label??r}),a.jsx("span",{style:{color:et.content.muted,fontSize:11},children:h?.kind??""})]},r)})})})}function tr({adapter:e,view:o,transformModeAware:n=!1,presentationId:d}={}){const r=Kn(),h=u.useSyncExternalStore(r.subscribe,r.getSnapshot),s=e??Nn(r),g=u.useCallback((t,i)=>e?e.pickable?.pick(t,i)??null:jo(r,t,i),[e,r]),S=u.useRef(null),v=u.useRef(null),k=u.useRef(null),[z,O]=u.useState(null),[L,M]=u.useState(null),[j,_]=u.useState(null),[Z,st]=u.useState(null),nt=u.useRef(null),[D,K]=u.useState(null),at=u.useRef(()=>{}),Pt=u.useCallback((t,i,c=!1)=>{const l=Po(r,t,i,{...e?{adapter:e}:{},...c?{includeLocked:c}:{}});if(l.length===0){st(null);return}st({x:t,y:i,ids:l})},[e,r]);u.useEffect(()=>{const t=c=>{const l=nt.current;!l||l.pointerId!==c.pointerId||l.moved||Math.hypot(c.clientX-l.startClientX,c.clientY-l.startClientY)>At&&(l.moved=!0)},i=c=>{const l=nt.current;!l||l.pointerId!==c.pointerId||(nt.current=null,c.type==="pointerup"&&!l.moved&&(n&&!c.altKey?at.current(c.clientX,c.clientY):Pt(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)}},[Pt,n]);const zt=u.useCallback(t=>{t.preventDefault(),t.stopPropagation()},[]),x=o??_n;u.useSyncExternalStore(Fo,Xo);const F=n?Rt(x):null,C=[...r.selectedEntityIds].sort().join("\0"),Dt=u.useRef(C);u.useEffect(()=>{Dt.current!==C&&(Dt.current=C,Rt(x)&&Mo(x,null))},[C,x]);const m=u.useSyncExternalStore(x.subscribe,x.get,x.get);u.useSyncExternalStore(u.useCallback(t=>To(x,t),[x]),u.useCallback(()=>Lo(x),[x]));const Nt=n?Oo(x):[],H=n?1/m.zoom:1,mt=n&&r.transformMode!=="combined"&&r.transformMode!=="select";u.useSyncExternalStore(Wn,Vn);const he=d?Un(d):null,ln=he?.position??!0,_t=!mt||(he?.transformation??!0),Wt=u.useRef(!1),Vt=u.useRef(null),[cn,ye]=u.useState(!1),ot=u.useRef(null),[dn,It]=u.useState(!1),T=u.useRef(null);u.useEffect(()=>()=>{const t=T.current;if(T.current=null,!!t){t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id)}},[]);const[,un]=u.useState(0),[pn,bt]=u.useState(null),[fn,lt]=u.useState([]),Ut=u.useRef(null),[xn,hn]=u.useState(null),ft=u.useCallback(t=>{Ut.current=t,hn(t)},[]),ge=u.useRef(null),[yn,gn]=u.useState(null),[Ot,wt]=u.useState(null),ct=u.useCallback(t=>{ge.current=t,gn(t)},[]),Zt=u.useRef(null),ve=u.useRef(null);u.useEffect(()=>{const t=Zt.current;if(!t)return;Zt.current=null;const i=ee(s,t.id);i&&i.get(t.id)===null&&wt({id:t.id,rect:t.rect})},[h]);const me=u.useRef("");u.useEffect(()=>{const t=[...r.selectedEntityIds].sort().join(",");t!==me.current&&(me.current=t,Ot&&wt(null))}),u.useEffect(()=>{if(!Ot)return;const t=window.setTimeout(()=>wt(null),4e3);return()=>window.clearTimeout(t)},[Ot]);const it=u.useSyncExternalStore(Co,Ro),[vn,be]=u.useState(null),W=u.useCallback(t=>{k.current=t,O(t)},[]),E=u.useCallback((t,i)=>{const c=S.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]);at.current=(t,i)=>{const c=r.selectedEntityIds,l=s.hierarchy.roots(),f=c.size===1?[...c][0]:l.length===1?l[0].id:null,p=f?Qe(s,f):s.structure??null,y=p?.creatableKinds?.(f)??[];if(!p||y.length===0){K(null);return}const w=r.snap2D,b=(yt,Ce)=>r.snapEnabled&&w.step>0?Math.round((yt-Ce)/w.step)*w.step+Ce:yt,P=E(t,i),R={x:b(P.x,w.offsetX),y:b(P.y,w.offsetY)},ut=w.pixel?{x:Math.round(R.x),y:Math.round(R.y)}:R;K({x:t,y:i,at:ut,parentId:f,structure:p,kinds:y,adapter:s})};const mn=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]),bn=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 l=E(t.clientX,t.clientY),f={position:[l.x,l.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(),Ze(s,"",c.path,f))},[s.assetDrop,o,E,n]),V=u.useCallback(()=>un(t=>t+1),[]),Lt=u.useCallback(()=>{const t=T.current;if(!t)return!1;T.current=null,t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id);return bt(null),lt([]),V(),!0},[V]),wn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const l=[...c][0],f=A(s,l),p=I(s,l);if(!f||!p)return;const y=s.inspector?.get(l,"style.position"),w=ae(s,l)==="2d",b=w?Ct(s,l):null,P=b&&ne(b)?f.gizmoOrigin?.(l)??null:null;tt(i),f.begin(l),T.current={kind:"resize",id:l,ownerBoxEdit:f,startLocal:E(i.clientX,i.clientY),origRect:p,pos:t,...b&&P?{frame:b,frameOrigin:P}:{},isPositioned:y==="absolute"||y==="fixed"||w,context:jt(s,l)}},[s,r,E]),we=u.useCallback(()=>{if(!n||r.selectedEntityIds.size<2)return null;const t=[...r.selectedEntityIds].flatMap(y=>{const w=A(s,y),b=I(s,y),P=w?.gizmoOrigin?.(y);return w&&b&&P?[{id:y,ownerBoxEdit:w,origRect:b,nativeOrigin:P}]:[]});if(t.length<2)return null;const i=Math.min(...t.map(y=>y.origRect.x)),c=Math.min(...t.map(y=>y.origRect.y)),l=Math.max(...t.map(y=>y.origRect.x+y.origRect.width)),f=Math.max(...t.map(y=>y.origRect.y+y.origRect.height)),p=Rt(x)??{x:(i+l)/2,y:(c+f)/2};return{primary:t[0],peers:t.slice(1),center:p}},[s,r,n,x]),Tt=u.useCallback((t,i)=>{const c=we();if(!c)return!1;tt(i),c.primary.ownerBoxEdit.begin(c.primary.id);for(const l of c.peers)l.ownerBoxEdit.begin(l.id);return T.current={kind:t,id:c.primary.id,ownerBoxEdit:c.primary.ownerBoxEdit,startLocal:E(i.clientX,i.clientY),origRect:c.primary.origRect,center:c.center,nativeOrigin:c.primary.nativeOrigin,movePeers:c.peers,groupCenter:c.center,...t==="native-scale"?{nativeScaleAxis:"both",nativeHandleSpan:re/m.zoom}:{}},!0},[we,E,m.zoom]),Mt=u.useCallback(t=>{if(t.stopPropagation(),t.button!==0)return;const i=r.selectedEntityIds;if(i.size>1){Tt("rotate",t);return}if(i.size!==1)return;const c=[...i][0],l=A(s,c),f=I(s,c);if(!l||!f)return;const p=n?l.gizmoOrigin?.(c):null,y=p?Ct(s,c):null;tt(t),l.begin(c),T.current={...y?{startAngleDeg:le(y)*180/Math.PI}:{},kind:"rotate",id:c,ownerBoxEdit:l,startLocal:E(t.clientX,t.clientY),origRect:f,center:(p?Rt(x):null)??p??{x:f.x+f.width/2,y:f.y+f.height/2},...p?{nativeOrigin:p}:{}}},[s,r,E,n,Tt,x]),Qt=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const l=[...c][0],f=A(s,l),p=I(s,l);if(!f||!p)return;const y=f.gizmoOrigin?.(l)??{x:p.x+p.width/2,y:p.y+p.height/2};tt(i),f.begin(l),T.current={kind:"move",id:l,ownerBoxEdit:f,startLocal:E(i.clientX,i.clientY),origRect:p,context:jt(s,l),moveAxis:t,nativeOrigin:y}},[s,r,E]),Ft=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size>1){Tt("native-scale",i);return}if(c.size!==1)return;const l=[...c][0],f=A(s,l),p=I(s,l);if(!f||!p)return;const y=f.gizmoOrigin?.(l)??{x:p.x+p.width/2,y:p.y+p.height/2};tt(i),f.begin(l),T.current={kind:"native-scale",id:l,ownerBoxEdit:f,startLocal:E(i.clientX,i.clientY),origRect:p,nativeOrigin:y,nativeScaleAxis:t,nativeHandleSpan:re/m.zoom}},[s,m.zoom,r,E,Tt]),Sn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const l=[...c][0],f=A(s,l),p=I(s,l);!f||!p||f.referencePoint?.(l)?.id!==t.id||(tt(i),f.begin(l),T.current={kind:"reference",id:l,ownerBoxEdit:f,startLocal:E(i.clientX,i.clientY),origRect:p,context:jt(s,l),pointerId:i.pointerId,referencePoint:t})},[s,r,E]),St=u.useRef(null),xt=u.useCallback((t,i,c)=>{const l=r.smartSnap;if(c||!l.enabled||!l.sides&&!l.center)return i;const f=I(s,t),p=Ct(s,t)??(f?Zn(f):null);if(!p)return i;const y=Math.max(x.get().zoom,.01);return Qn(i,p,l.sides,l.center,Ie/y)},[s,r,x]),En=u.useCallback((t,i,c,l)=>{if(l.stopPropagation(),l.button!==0||!c.writable)return;tt(l);const f=i.layers(t).some(p=>p.category==="origin"&&p.handles.some(y=>y.id===c.id));St.current={id:t,handleId:c.id,provider:i,pivot:f}},[]),kn=u.useCallback(t=>{const i=St.current;if(!i)return;const c=E(t.clientX,t.clientY),l=i.pivot?xt(i.id,c,t.altKey):c;i.provider.preview(i.id,i.handleId,[l.x,l.y,0]),V()},[V,E,xt]),qt=u.useCallback(t=>{const i=St.current;if(St.current=null,!i)return;oe(t);const c=E(t.clientX,t.clientY),l=i.pivot?xt(i.id,c,t.altKey):c;i.provider.commit(i.id,i.handleId,[l.x,l.y,0]),V()},[V,E,xt]),Cn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const l=[...c][0],f=A(s,l),p=I(s,l);!f||!p||(tt(i),f.begin(l),T.current={kind:"spacing",id:l,ownerBoxEdit:f,startLocal:E(i.clientX,i.clientY),origRect:p,side:t.side,origValue:t.value})},[s,r,E]),Xt=u.useCallback((t,i)=>{if(t.pointerId!==void 0&&i.pointerId!==t.pointerId)return;const c=E(i.clientX,i.clientY),l=c.x-t.startLocal.x,f=c.y-t.startLocal.y;let p;if(t.kind==="resize"&&t.frame&&t.frameOrigin)p=qn(t.frame,t.pos,l,f,t.frameOrigin,i.shiftKey),lt([]);else if(t.kind==="resize")p=Jn(t.pos,l,f,t.origRect,!!t.isPositioned,i.altKey,t.context),i.shiftKey&&t.isPositioned&&(p=to(p,t.origRect,t.pos)),lt(eo(t.pos,l,f,t.origRect,i.altKey,t.context));else if(t.kind==="native-scale")p=ki(t,l,f,r.scaleSnap,i.altKey,r.snap2D.scaleStep,i.shiftKey),lt([]);else if(t.kind==="move"){const{dx:y,dy:w}=ji(t.moveAxis,l,f);if(t.nativeOrigin){p=Ci(t,y,w,r.snapEnabled,!1,r.snap2D.step,r.snap2D.relative?t.nativeOrigin:{x:r.snap2D.offsetX,y:r.snap2D.offsetY});const b=no({x:p.originX??t.nativeOrigin.x,y:p.originY??t.nativeOrigin.y},t.nativeOrigin,t.origRect,t.context,t.moveAxis,!r.smartSnap.enabled,Ie/Math.max(m.zoom,.01),{x:Nt.filter(R=>R.axis==="x").map(R=>R.value),y:Nt.filter(R=>R.axis==="y").map(R=>R.value)},r.smartSnap),P=R=>r.snap2D.pixel?Math.round(R):R;p.originX!==void 0&&(p.originX=P(b.position.x)),p.originY!==void 0&&(p.originY=P(b.position.y)),lt(b.guides)}else p=oo(y,w,t.origRect,i.altKey,t.context);bt(Oe(t.origRect,y,w)),t.nativeOrigin||lt(io(y,w,t.origRect,i.altKey,t.context))}else if(t.kind==="reference"){const y=ro(c,t.origRect,i.altKey,t.context,{bounded:t.referencePoint?.bounded,snapPoints:t.referencePoint?.snapPoints});p={referenceX:y.position.x,referenceY:y.position.y},lt(y.guides)}else if(t.kind==="rotate"){const y=t.nativeOrigin&&t.startAngleDeg!==void 0&&!r.snap2D.relative;if(p=so(t.center,t.startLocal,c,t.nativeOrigin&&(y||!r.rotationSnap)||i.altKey,t.nativeOrigin?r.snap2D.rotationStep:15),y&&r.rotationSnap&&!i.altKey&&p.rotate!==void 0){const b=r.snap2D.rotationStep,P=r.snap2D.rotationOffset,R=t.startAngleDeg,ut=R+p.rotate;p={rotate:Math.round((ut-P)/b)*b+P-R}}const w=t.groupCenter??(t.nativeOrigin?Rt(x):null);if(w&&t.nativeOrigin&&p.rotate!==void 0){const b=p.rotate*Math.PI/180,P=t.nativeOrigin.x-w.x,R=t.nativeOrigin.y-w.y;p={...p,originX:w.x+P*Math.cos(b)-R*Math.sin(b),originY:w.y+P*Math.sin(b)+R*Math.cos(b)}}}else p=ao(t.side,l,f,t.origValue??0);if(t.kind==="native-scale"&&t.groupCenter&&t.nativeOrigin){const y=t.groupCenter,w=p.scaleXFactor??1,b=p.scaleYFactor??1;p={...p,originX:y.x+(t.nativeOrigin.x-y.x)*w,originY:y.y+(t.nativeOrigin.y-y.y)*b}}if(t.ownerBoxEdit.apply(t.id,p),t.groupCenter&&t.movePeers&&(t.kind==="rotate"||t.kind==="native-scale")){const y=t.groupCenter,w=(p.rotate??0)*Math.PI/180,b=p.scaleXFactor??1,P=p.scaleYFactor??1;for(const R of t.movePeers){if(!R.nativeOrigin)continue;const ut=R.nativeOrigin.x-y.x,yt=R.nativeOrigin.y-y.y;R.ownerBoxEdit.apply(R.id,t.kind==="rotate"?{rotate:p.rotate??0,originX:y.x+ut*Math.cos(w)-yt*Math.sin(w),originY:y.y+ut*Math.sin(w)+yt*Math.cos(w)}:{...p.scaleXFactor!==void 0?{scaleXFactor:b}:{},...p.scaleYFactor!==void 0?{scaleYFactor:P}:{},...p.scaleStep!==void 0?{scaleStep:p.scaleStep}:{},originX:y.x+ut*b,originY:y.y+yt*P})}}if(t.kind==="move"&&t.movePeers){const y=t.nativeOrigin?(p.originX??t.nativeOrigin.x)-t.nativeOrigin.x:(p.x??t.origRect.x)-t.origRect.x,w=t.nativeOrigin?(p.originY??t.nativeOrigin.y)-t.nativeOrigin.y:(p.y??t.origRect.y)-t.origRect.y;for(const b of t.movePeers)b.ownerBoxEdit.apply(b.id,b.nativeOrigin?{originX:b.nativeOrigin.x+y,originY:b.nativeOrigin.y+w}:{x:b.origRect.x+y,y:b.origRect.y+w})}V()},[E,V,r,Nt,m.zoom]),$t=u.useCallback((t,i)=>{const c=g(t,i);if(!c)return null;const l=lo(s,c)?.backgroundChainAt(t,i)??null;return l?Io(l):null},[s,g]);u.useEffect(()=>{if(!it)return;const t=i=>{i.key==="Escape"&&Te(null)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[it]),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 l=Vt.current,f=r.selectedEntityIds;if(!l||f.size!==1||T.current||St.current)return;const p=[...f][0],y=Le(s,p),w=y?.layers(p).find(P=>P.category==="origin")?.handles.find(P=>P.writable);if(!y||!w)return;i.preventDefault();const b=xt(p,E(l.x,l.y),!1);y.commit(p,w.id,[b.x,b.y,0]),V()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[s,r,n,E,V,xt]),u.useEffect(()=>{const t=l=>l instanceof HTMLInputElement||l instanceof HTMLTextAreaElement||l instanceof HTMLSelectElement||l instanceof HTMLElement&&l.isContentEditable,i=l=>{l.code!=="Space"||l.repeat||t(l.target)||l.target instanceof HTMLButtonElement||(l.preventDefault(),Wt.current=!0,ye(!0))},c=l=>{l.code==="Space"&&(Wt.current=!1,ye(!1),ot.current&&(ot.current=null,It(!1)))};return window.addEventListener("keydown",i),window.addEventListener("keyup",c),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",c)}},[]);const Se=u.useCallback(t=>{if(t.stopPropagation(),tt(t),Wt.current){ot.current={startClientX:t.clientX,startClientY:t.clientY,startPan:x.get()},It(!0);return}if(n&&r.selectedEntityIds.size>1&&!(t.metaKey||t.ctrlKey)&&(r.transformMode==="rotate"||r.transformMode==="scale")){r.transformMode==="rotate"?Mt(t):Ft("both",t);return}if(n&&r.selectedEntityIds.size>=1&&(t.metaKey||t.ctrlKey)){t.altKey?Ft("both",t):Mt(t);return}if(it){Te($t(t.clientX,t.clientY)),be(null);return}if(Zo(e,t.clientX,t.clientY)){v.current=null,M(null),W(null);return}const i=g(t.clientX,t.clientY);if(ri(t,i)){v.current=null,M(null),W(null);return}const l=n&&t.altKey&&r.selectedEntityIds.size===1?[...r.selectedEntityIds][0]:i!==null?zi(s,i,r.selectedEntityIds):null,f=ie(n,r.transformMode,"translate")&&l!==null?Di(s,l,r.selectedEntityIds):null,p=!f&&l!==null?Ii(s,l):null;v.current={downClientX:t.clientX,downClientY:t.clientY,downLocal:E(t.clientX,t.clientY),hitAtDown:i,moved:!1,moveCandidate:f,reorderCandidate:p},M(null),W(null)},[s,r,x,n,E,W,it,$t,g,e,Ft,Mt]),Rn=u.useCallback(t=>{if(t.button===2){nt.current={pointerId:t.pointerId,startClientX:t.clientX,startClientY:t.clientY,moved:!1};return}t.button===0&&Se(t)},[Se]),Ee=u.useCallback((t,i)=>{const c=i.clientX-t.downClientX,l=i.clientY-t.downClientY;if(!t.moved&&Math.hypot(c,l)>At&&(t.moved=!0),!!t.moved){if(t.moveCandidate){const f=Pi(t.moveCandidate,t.downLocal);T.current=f,Xt(f,i);return}if(t.reorderCandidate){const f=E(i.clientX,i.clientY),p=co(t.reorderCandidate.siblingRects,f);p&&(ft({id:t.reorderCandidate.id,adapter:t.reorderCandidate.adapter,gap:p}),bt(Oe(t.reorderCandidate.origRect,f.x-t.downLocal.x,f.y-t.downLocal.y)));return}if(t.hitAtDown===null){const f=E(i.clientX,i.clientY);W({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)})}}},[E,W,Xt,ft]),Q=u.useCallback(t=>{const i=ot.current;if(i){x.setPan(i.startPan.x+(t.clientX-i.startClientX),i.startPan.y+(t.clientY-i.startClientY));return}if(it){const f=E(t.clientX,t.clientY);be({...f,color:$t(t.clientX,t.clientY)});return}Vt.current={x:t.clientX,y:t.clientY};const c=T.current;if(c){Xt(c,t);return}if((t.buttons&1)===0){Qo(e,t.clientX,t.clientY,g,_,M);return}const l=v.current;l&&Ee(l,t)},[r,x,E,Xt,it,$t,Ee,g,e]),q=u.useCallback(t=>{if(oe(t),ot.current){ot.current=null,It(!1);return}const i=T.current;if(i?.pointerId!==void 0&&t.pointerId!==i.pointerId||Lt())return;const c=Ut.current;if(c){ft(null),bt(null),v.current=null,uo(c.adapter,c.id,c.gap.beforeSiblingId);return}const l=v.current;if(v.current=null,!l)return;const f=l.hitAtDown!==null?ni(r.selectedEntityIds,l.hitAtDown,t.shiftKey):oi(s,l.moved,k.current,t.shiftKey);f!==null&&qe(s,f),W(null)},[s,r,W,Lt,ft]),N=u.useCallback(t=>{if(oe(t),ot.current){ot.current=null,It(!1);return}const i=T.current;i?.pointerId!==void 0&&t.pointerId!==i.pointerId||Lt()||(Ut.current&&(ft(null),bt(null)),v.current=null,W(null))},[Lt,W,ft]),jn=u.useCallback(()=>{Vt.current=null,e||fe()?.clearHover(),_(null),M(null)},[e]),Pn=u.useCallback(t=>{const i=S.current?.parentElement??null;if(zo(i,t.clientX,t.clientY))return;const c=g(t.clientX,t.clientY);if(!c)return;const l=ee(s,c);if(!l)return;const f=I(s,c);if(!f)return;const p=l.get(c);if(p===null){console.warn(`[RootSelectionOverlay] text edit refused for "${c}": dynamic body or has child elements — not inline-editable.`),ct(null),wt({id:c,rect:f});return}wt(null),ct({id:c,rect:f,initialText:p})},[s,g,ct]),zn=u.useCallback(t=>{const i=ge.current;if(!i)return;const c=ee(s,i.id);c&&(Zt.current={id:i.id,rect:i.rect},c.set(i.id,t)),ct(null)},[s,ct]),Dn=u.useCallback(()=>ct(null),[ct]);if(!Jo(s)||Oi())return null;const dt=new Set([...r.selectedEntityIds].filter(t=>s.hierarchy.node(t)!==void 0)),Jt=L!==null&&!dt.has(L)?I(s,L):null,X=Li(s,dt),J=X?.rect??null,In=X?.ownerBoxEdit??null,te=n&&X?Ct(s,X.id):null,Y=te&&ne(te)?te:null,$=n&&X?X.ownerBoxEdit.gizmoOrigin?.(X.id)??{x:X.rect.x+X.rect.width/2,y:X.rect.y+X.rect.height/2}:null,Et=re/m.zoom,rt=X?X.ownerBoxEdit.referencePoint?.(X.id):null,On=X?.spacingBands??[],ht=dt.size===1?[...dt][0]:null,Bt=ht?Le(s,ht):null,Ln=ht&&Bt?Bt.layers(ht).filter(t=>n&&t.category==="origin"?ln:r.showHelpers?r.helperVisibility[t.category]??!0:!1):[],kt=n?{selectedSingleRect:null,measureLines:[],positionBadge:null,showPositionBadge:!1,parentRect:null}:Mi(s,dt,Jt),ke=n?null:Ti(s,dt),Yt=ve.current,Tn=n?[]:Yt&&Yt.adapter===s&&Yt.version===h?Yt.hints:(()=>{const t=po(s);return ve.current={adapter:s,version:h,hints:t},t})();return a.jsxs("div",{style:{position:"absolute",inset:0,zIndex:Uo,pointerEvents:"none"},children:[a.jsx("div",{ref:S,"data-testid":"world-selection-overlay-interaction",style:{position:"absolute",inset:0,pointerEvents:"auto",touchAction:"none",userSelect:"none",cursor:j??ii(dn,cn,it,!!z)},onPointerDownCapture:Rn,onPointerMove:Q,onPointerUp:q,onPointerCancel:N,onLostPointerCapture:N,onPointerLeave:jn,onDoubleClick:Pn,onContextMenu:zt,onDragOver:mn,onDrop:bn}),D?a.jsx(Bo,{state:D,onClose:()=>K(null)}):null,Z?a.jsx(Fi,{state:Z,adapter:s,onClose:()=>st(null)}):null,a.jsxs("div",{"data-testid":"world-selection-overlay-chrome",style:{position:"absolute",inset:0,pointerEvents:"none",transform:yo(m),transformOrigin:"0 0"},children:[!n&&Tn.map(t=>a.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)),Jt&&a.jsx("div",{"data-testid":"world-selection-hover",style:{...Ye(Jt,!1),...n?{borderWidth:1/m.zoom}:{}}}),[...dt].map(t=>{const i=I(s,t);if(!i)return null;const c=n?Ct(s,t):null,l=c&&ne(c)?c:null;return a.jsxs("div",{children:[a.jsx("div",{"data-testid":"world-selection-box","data-entity-id":t,"data-turned":l?"true":void 0,style:{...l?ai(l,1/m.zoom):Ye(i,!0),...n&&!l?{borderWidth:1/m.zoom,background:"transparent"}:{}}}),!n&&a.jsx("div",{"data-testid":"world-selection-label",style:li(i),children:qo(s,t)})]},t)}),z&&a.jsx("div",{"data-testid":"world-selection-marquee",style:{position:"absolute",left:z.x,top:z.y,width:z.width,height:z.height,border:`1px solid ${B}`,background:`color-mix(in srgb, ${B} 10%, transparent)`,pointerEvents:"none"}}),!n&&a.jsx(Xi,{measureLines:kt.measureLines,snapGuides:fn,positionBadge:kt.positionBadge,showPositionBadge:kt.showPositionBadge,badgeAnchorRect:kt.selectedSingleRect,parentRect:kt.parentRect,screenScale:H,screenZoom:1}),!n&&a.jsx($i,{dragGhost:pn,reorderPreview:xn}),!n&&ke&&a.jsx(Wo,{adapter:s,entries:ke}),F?a.jsx("div",{"data-testid":"world-2d-temporary-pivot","aria-label":"Temporary pivot",style:{position:"absolute",left:F.x-8,top:F.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,J&&In&&a.jsxs(a.Fragment,{children:[!n&&On.map(t=>a.jsxs("div",{children:[a.jsx("div",{"data-testid":`world-spacing-${t.kind}-${Yi(t.side)}`,style:hi(t),onPointerDown:i=>Cn(t,i),onPointerMove:Q,onPointerUp:q,onPointerCancel:N}),!t.isZero&&a.jsx("div",{style:{...yi(t),...n?{transform:`translate(-50%, -50%) scale(${H})`,transformOrigin:"center"}:{}},children:Math.round(t.value)})]},t.side)),rt&&a.jsx("div",{"aria-label":`Edit ${rt.label}`,"data-reference-kind":rt.kind,"data-testid":"world-reference-point-handle",title:`${rt.label} (${rt.bounded?"native corner/edge/center snap":"8px/alignment snap"}, Alt for free movement)`,style:{...ui(rt),...n?{transform:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:t=>Sn(rt,t),onPointerMove:Q,onPointerUp:q,onPointerCancel:N,onLostPointerCapture:N,role:"button",tabIndex:0,children:rt.kind==="anchor"?"A":"P"}),ht&&Bt&&Ln.flatMap(t=>t.handles.map(i=>a.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:{...di(i),transform:`translate(-50%, -50%) scale(${H})`},onPointerDown:c=>En(ht,Bt,i,c),onPointerMove:kn,onPointerUp:qt,onPointerCancel:qt,onLostPointerCapture:qt},`${t.id}:${i.id}`))),n&&r.transformMode==="translate"&&_t&&a.jsxs(a.Fragment,{children:[a.jsx("div",{"data-testid":"world-2d-move-axis-x",title:"Move on X axis",style:{position:"absolute",left:$.x,top:$.y-5/m.zoom,width:Et,height:10/m.zoom,borderTop:`${2/m.zoom}px solid #ef5350`,boxSizing:"border-box",cursor:"ew-resize",pointerEvents:"auto"},onPointerDown:t=>Qt("x",t),onPointerMove:Q,onPointerUp:q,onPointerCancel:N}),a.jsx("div",{"data-testid":"world-2d-move-axis-y",title:"Move on Y axis",style:{position:"absolute",left:$.x-5/m.zoom,top:$.y,width:10/m.zoom,height:Et,borderLeft:`${2/m.zoom}px solid #66bb6a`,boxSizing:"border-box",cursor:"ns-resize",pointerEvents:"auto"},onPointerDown:t=>Qt("y",t),onPointerMove:Q,onPointerUp:q,onPointerCancel:N}),a.jsx("div",{"data-testid":"world-2d-move-center",title:"Move freely",style:{position:"absolute",left:$.x-5/m.zoom,top:$.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=>Qt("both",t),onPointerMove:Q,onPointerUp:q,onPointerCancel:N})]}),ie(n,r.transformMode,"scale")&&_t&&(mt?a.jsxs(a.Fragment,{children:[a.jsx("div",{"data-testid":"world-2d-scale-axis-x",style:{position:"absolute",left:$.x,top:$.y,width:Et,borderTop:`${2/m.zoom}px solid #ef5350`,pointerEvents:"none"}}),a.jsx("div",{"data-testid":"world-2d-scale-axis-y",style:{position:"absolute",left:$.x,top:$.y,height:Et,borderLeft:`${2/m.zoom}px solid #66bb6a`,pointerEvents:"none"}}),[["x","ew-resize"],["y","ns-resize"],["both","nwse-resize"]].map(([t,i])=>{const c=Ri(t,$,Et),l=t==="x"?"e":t==="y"?"s":"se";return a.jsx("div",{"data-testid":`world-resize-handle-${l}`,style:{...He(c,i),transform:`scale(${H})`,transformOrigin:"center",background:t==="x"?"#ef5350":t==="y"?"#66bb6a":"#fff"},onPointerDown:f=>Ft(t,f),onPointerMove:Q,onPointerUp:q,onPointerCancel:N},t)})]}):a.jsxs(a.Fragment,{children:[fo.map(({pos:t,cursor:i})=>a.jsx("div",{"data-testid":`world-resize-handle-${t}`,style:{...He(Y?xo(Y,t):ho(J,t),i),...n?{transform:Y?`rotate(${le(Y)}rad) scale(${H})`:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:c=>wn(t,c),onPointerMove:Q,onPointerUp:q,onPointerCancel:N},t)),a.jsx("div",{"data-testid":"world-resize-dimension-label",style:{...pi(J),...n?{top:J.y+J.height+4*H,transform:`scale(${H})`,transformOrigin:"top left"}:{}},children:Y?`${Math.round(Math.hypot(Y.tr.x-Y.tl.x,Y.tr.y-Y.tl.y))}×${Math.round(Math.hypot(Y.bl.x-Y.tl.x,Y.bl.y-Y.tl.y))}`:`${Math.round(J.width)}×${Math.round(J.height)}`})]})),ie(n,r.transformMode,"rotate")&&_t&&a.jsxs(a.Fragment,{children:[mt&&a.jsx("div",{"data-testid":"world-2d-rotate-ring",style:{position:"absolute",left:$.x-40/m.zoom,top:$.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"}}),a.jsx("div",{"data-testid":"world-rotate-handle","aria-label":"Rotate selection",title:"Rotate selection (15° snap, Alt for free rotation)",style:{...ci(J),...n&&!mt?{...si(Y,J,an*H),transform:`scale(${H})`,transformOrigin:"center"}:{},...mt?{left:$.x-U/2,top:$.y-40/m.zoom-U/2,transform:`scale(${H})`,transformOrigin:"center",background:"#4aa3ff"}:{}},onPointerDown:Mt,onPointerMove:Q,onPointerUp:q,onPointerCancel:N,role:"button",tabIndex:0})]})]}),!n&&a.jsx(Bi,{textEdit:yn,onCommitTextEdit:zn,onCancelTextEdit:Dn,textEditRefused:Ot,eyedropperActive:it,eyedropperPreview:vn})]})]})}function Xi(e){const{measureLines:o,snapGuides:n,positionBadge:d,showPositionBadge:r,badgeAnchorRect:h,parentRect:s,screenScale:g,screenZoom:S}=e;return a.jsxs(a.Fragment,{children:[s&&a.jsx("div",{"data-testid":"world-parent-outline",style:Ei(s)}),o.map(v=>a.jsxs("div",{"data-testid":"world-measure-line",children:[a.jsx("div",{style:mi(v)}),a.jsx("div",{style:Ae(v.x1,v.y1,v.orientation==="horizontal")}),a.jsx("div",{style:Ae(v.x2,v.y2,v.orientation==="horizontal")}),a.jsx("div",{"data-testid":"world-measure-line-label",style:{...bi(v),...g!==1?{transform:`translate(-50%, -50%) scale(${g})`,transformOrigin:"center"}:{}},children:v.distance})]},v.orientation)),n.map(v=>a.jsx("div",{"data-testid":"world-snap-guide",style:wi(v)},v.orientation)),r&&h&&d&&a.jsxs("div",{"data-testid":"world-position-badge",style:{...Si(h),...g!==1?{top:h.y-36/S,transform:`scale(${g})`,transformOrigin:"top left"}:{}},children:[d.position&&a.jsx("span",{"data-testid":"world-position-badge-mode",style:Ne,children:d.position}),d.parentLayout&&a.jsx("span",{"data-testid":"world-position-badge-layout",style:Ne,children:d.parentLayout})]})]})}function $i(e){const{dragGhost:o,reorderPreview:n}=e;return a.jsxs(a.Fragment,{children:[o&&a.jsx("div",{"data-testid":"world-drag-ghost",style:gi(o)}),n&&a.jsx("div",{"data-testid":"world-reorder-preview",style:vi(n.gap.marker)})]})}function Bi(e){const{textEdit:o,onCommitTextEdit:n,onCancelTextEdit:d,textEditRefused:r,eyedropperActive:h,eyedropperPreview:s}=e;return a.jsxs(a.Fragment,{children:[o&&a.jsx("div",{style:{pointerEvents:"auto"},children:a.jsx(Vo,{rect:o.rect,initialText:o.initialText,onCommit:n,onCancel:d})}),r&&a.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 ${et.semantic.danger}`,boxSizing:"border-box",background:et.semantic.dangerMuted,pointerEvents:"none"}}),h&&s&&a.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 Yi(e){return e.endsWith("Top")?"top":e.endsWith("Right")?"right":e.endsWith("Bottom")?"bottom":"left"}export{tr as R,Fi as V,Oo as a,Mo as b,Lo as c,Zi as d,Ji as e,Qi as m,qi as r,To as s};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{
|
|
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
|
|
1
|
+
import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{dt as ne,eL as D,dv as N,dw as se,gb as ie,ae as m,b3 as T,dg as oe,cg as _,dx as G,aQ as ae}from"./index-CaG87ZF-.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{C as le}from"./ColorInput-CX1UZjYO.js";import{W as ce}from"./three.module-BLhyNg0e.js";import{s as P}from"./asset-editor-persistence-BQgjOCrm.js";import{ej as H,el as ue,d9 as de,em as fe,aI as me,co as pe,cl as he,cm as ge,_ as X,fd as W,fo as K,fp as Z,K as ve,db as ye,ey as xe,Z as be,au as Se,dw as we,cE as je}from"./three.core-3arARmh6.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";const Ee=[".vert",".vert.glsl"],$e=[".frag",".frag.glsl"];function Ce(e){return e.split(/[?#]/,1)[0].toLowerCase()}function Re(e,t=""){const r=Ce(e);return Ee.some(n=>r.endsWith(n))?"vertex":$e.some(n=>r.endsWith(n))?"fragment":/\bgl_Position\b/.test(t)?"vertex":"fragment"}function q(e){const t=e.split(/[?#]/,1)[0];return/\.vert\.glsl$/i.test(t)?t.replace(/\.vert\.glsl$/i,".frag.glsl"):/\.frag\.glsl$/i.test(t)?t.replace(/\.frag\.glsl$/i,".vert.glsl"):/\.vert$/i.test(t)?t.replace(/\.vert$/i,".frag"):/\.frag$/i.test(t)?t.replace(/\.frag$/i,".vert"):null}function Ae(e){return e.replace(/\/\*[\s\S]*?\*\//g,t=>t.replace(/[^\n]/g," ")).replace(/\/\/[^\n]*/g,"")}function O(e,t){const r=[],n=/\buniform\s+(?:(?:lowp|mediump|highp)\s+)?([A-Za-z_]\w*)\s+([A-Za-z_]\w*)\s*(?:\[\s*(\d+)\s*\])?\s*;/g;for(const s of Ae(e).matchAll(n)){const o=s[1],l=s[2];if(!o||!l)continue;const p=s[3]?Number.parseInt(s[3],10):void 0;r.push({name:l,type:o,...p?{arraySize:p}:{},stages:[t]})}return r}function Le(e,t){const r=new Map;for(const n of[...O(e,"vertex"),...O(t,"fragment")]){const s=r.get(n.name);if(!s){r.set(n.name,n);continue}r.set(n.name,{...s,stages:[...new Set([...s.stages,...n.stages])]})}return[...r.values()]}function M(e,t){const r=e.split(`
|
|
2
|
+
`).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 Te=`varying vec2 vUv;
|
|
4
4
|
|
|
5
5
|
void main() {
|
|
6
6
|
vUv = uv;
|
|
7
7
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
8
|
-
}`,
|
|
8
|
+
}`,Me=`varying vec2 vUv;
|
|
9
9
|
|
|
10
10
|
void main() {
|
|
11
11
|
gl_FragColor = vec4(vUv, 0.55, 1.0);
|
|
12
|
-
}`;function M(e,t=null){return{path:t,source:e==="vertex"?Te:Ie,available:!1}}function $(e){return e?.split("/").pop()??"Preview fallback"}function U(e){return e.type==="vec3"&&/(colou?r|tint|albedo|emissive)/i.test(e.name)}function J(e){return/^(u|i)?time$/i.test(e.name)&&/^(float|double)$/.test(e.type)?"time":/^(u|i)?resolution$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"resolution":/^(u|i)?mouse$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"mouse":null}function F(e){if(U(e))return/horizon/i.test(e.name)?"#badbe9":/zenith/i.test(e.name)?"#297aba":/sun/i.test(e.name)?"#fff0c2":"#6f8cff";if(e.type==="bool")return!1;if(/^(float|double|int|uint)$/.test(e.type))return 0;const t=e.type.match(/^(?:[biu]?vec)([234])$/);return t?Array.from({length:Number.parseInt(t[1],10)},()=>0):0}function Me(){const e=new Uint8Array([38,43,58,255,176,190,255,255,176,190,255,255,38,43,58,255]),t=new Se(e,2,2,we);return t.colorSpace=H,t.magFilter=je,t.needsUpdate=!0,t}function Q(e,t,r){if(e.arraySize){const{arraySize:s,...o}=e;return Array.from({length:s},()=>Q(o,t,r))}if(/^sampler2D/.test(e.type)){const s=Me();return r.push(s),s}if(/^sampler/.test(e.type))return null;if(e.type==="mat3")return new he;if(e.type==="mat4")return new ge;if(U(e))return new X(typeof t=="string"?t:"#6f8cff");const n=e.type.match(/^(?:[biu]?vec)([234])$/);if(n){const s=Array.isArray(t)?t:[],o=Number.parseInt(n[1],10);return o===2?new W(s[0]??0,s[1]??0):o===3?new K(s[0]??0,s[1]??0,s[2]??0):new Z(s[0]??0,s[1]??0,s[2]??0,s[3]??0)}return t}function Ue(e,t,r,n,s){const o=J(t);if(o==="time"){e.value=n;return}if(e.value instanceof X&&typeof r=="string"){e.value.set(r);return}const l=Array.isArray(r)?r:[];if(e.value instanceof W){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0);return}if(e.value instanceof K){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0);return}if(e.value instanceof Z){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0,l[3]??0);return}o!=="mouse"&&!t.arraySize&&!/^sampler|^mat/.test(t.type)&&(e.value=r)}function ze(e){return e==="box"?new ve(1.35,1.35,1.35,48,48,48):e==="plane"?new ye(2.2,2.2,96,96):new xe(.95,96,64)}function ke({vertexSource:e,fragmentSource:t,descriptors:r,valuesRef:n,geometry:s,onDiagnostics:o}){const l=h.useRef(null);return h.useEffect(()=>{const p=l.current;if(!p)return;let w=!1,u=0;const x=document.createElement("canvas");x.setAttribute("aria-label","Live shader preview"),x.style.width="100%",x.style.height="100%",x.style.display="block",p.replaceChildren(x);let d;try{d=new ce({canvas:x,antialias:!0,alpha:!1})}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}]);return}d.outputColorSpace=H,d.setClearColor(1119261,1),d.debug.checkShaderErrors=!0;const S=new ue,v=new de(38,1,.01,100);v.position.set(0,0,3.4);const C=[],g={};for(const a of r)g[a.name]={value:Q(a,n.current[a.name]??F(a),C)};const R=new fe({vertexShader:O(e),fragmentShader:O(t),uniforms:g,side:me,toneMapped:!1}),L=ze(s),c=new pe(L,R);S.add(c);const f=[];d.debug.onShaderError=(a,b,E,A)=>{const ee=b,te=E,re=A;f.push(...I(a.getProgramInfoLog(ee)??"","program"),...I(a.getShaderInfoLog(te)??"","vertex"),...I(a.getShaderInfoLog(re)??"","fragment"))};const y={width:1,height:1},j=()=>{const a=p.getBoundingClientRect();y.width=Math.max(1,Math.floor(a.width)),y.height=Math.max(1,Math.floor(a.height)),d.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),d.setSize(y.width,y.height,!1),v.aspect=y.width/y.height,v.position.z=3.4/Math.min(1,v.aspect),v.updateProjectionMatrix()};j();const z=new ResizeObserver(j);z.observe(p);const Y=new be;try{d.compile(S,v),d.render(S,v),o(f.filter((a,b,E)=>E.findIndex(A=>A.stage===a.stage&&A.line===a.line&&A.message===a.message)===b))}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}])}const k=()=>{if(w)return;const a=Y.getElapsedTime();for(const b of r){const E=g[b.name];E&&Ue(E,b,n.current[b.name]??F(b),a,y)}s!=="plane"&&(c.rotation.y=a*.18,c.rotation.x=Math.sin(a*.22)*.08),d.render(S,v),u=requestAnimationFrame(k)};return u=requestAnimationFrame(k),()=>{w=!0,cancelAnimationFrame(u),z.disconnect(),d.debug.onShaderError=null,L.dispose(),R.dispose();for(const a of C)a.dispose();d.dispose(),x.remove()}},[r,t,s,o,n,e]),i.jsx("div",{ref:l,"data-testid":"shader-preview",style:{width:"100%",height:"100%",minHeight:240,background:"#11141d"}})}function De({descriptors:e,values:t,onChange:r}){return e.length===0?i.jsx("div",{style:{color:m.content.muted},children:"No uniform declarations found."}):i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:4},children:[e.map(n=>i.jsx(Ne,{uniform:n,value:t[n.name]??F(n),onChange:s=>r(n.name,s)},n.name)),i.jsx("div",{style:{color:m.content.muted,fontSize:10,lineHeight:1.4},children:"Preview values are session-only. Author runtime defaults beside the ShaderMaterial in TS/TSX."})]})}function Ne({uniform:e,value:t,onChange:r}){const n=J(e),s=e.type.match(/^(?:[biu]?vec)([234])$/);let o;return n?o=i.jsxs("div",{style:{color:m.content.muted,fontSize:10},children:["Driven by preview ",n]}):U(e)?o=i.jsx(le,{value:typeof t=="string"?t:"#6f8cff",onChange:r}):e.type==="bool"?o=i.jsxs("label",{style:{display:"flex",alignItems:"center",gap:7,fontSize:11},children:[i.jsx(ae,{checked:!!t,onChange:l=>r(l.target.checked)}),t?"True":"False"]}):/^(float|double|int|uint)$/.test(e.type)?o=i.jsx(G,{value:typeof t=="number"?t:0,onChange:r,step:e.type==="int"||e.type==="uint"?1:.01,precision:e.type==="int"||e.type==="uint"?0:3}):s&&Array.isArray(t)?o=i.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${s[1]}, minmax(0, 1fr))`,gap:4},children:t.map((l,p)=>i.jsx(G,{value:l,label:"xyzw"[p],onChange:w=>{const u=[...t];u[p]=w,r(u)},step:.01},`${e.name}:${p}`))}):o=i.jsx("div",{style:{color:m.content.muted,fontSize:10},children:"Reflected for runtime binding; no scalar preview control."}),i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5},children:[i.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:8},children:[i.jsx("span",{style:{color:m.content.primary,fontSize:11},children:e.name}),i.jsx("span",{style:{color:m.content.muted,fontSize:10},children:e.type})]}),o]})}function B({diagnostics:e,files:t}){return e.length===0?i.jsx("div",{style:{color:m.semantic.success,fontSize:11,padding:4},children:"Shader program compiled successfully."}):i.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6,padding:4},children:e.map((r,n)=>{const s=r.stage==="program"?null:t[r.stage];return i.jsxs("div",{style:{color:r.severity==="warning"?m.semantic.warning:m.semantic.danger,fontSize:10,lineHeight:1.45},children:[s?.available?$(s.path):r.stage,r.line?`:${r.line}${r.column?`:${r.column}`:""}`:""," · ",r.message]},`${r.stage}:${r.line??0}:${r.message}:${n}`)})})}async function _e(e){const t=await _(e);if(t===null)throw new Error(`Could not read ${e}.`);const r=Re(e,t),n=q(e),s=n?await _(n):null,o={vertex:M("vertex"),fragment:M("fragment")};o[r]={path:e,source:t,available:!0};const l=r==="vertex"?"fragment":"vertex";return o[l]=s===null?M(l,n):{path:n,source:s,available:!0},o}function Ye({documentId:e,assetPath:t,active:r=!0}){const[n,s]=h.useState(null),[o,l]=h.useState(0),[p,w]=h.useState("sphere"),[u,x]=h.useState([]),[d,S]=h.useState({}),[v,C]=h.useState(null);h.useEffect(()=>{if(!r)return;const c=()=>l(j=>j+1),f=q(t),y=[P(t,c),...f?[P(f,c)]:[]];return()=>{for(const j of y)j()}},[r,t]),h.useEffect(()=>{if(!r)return;let c=!1;return s(null),C(null),_e(t).then(f=>{c||s(f)},f=>{c||C(f instanceof Error?f.message:String(f))}),()=>{c=!0}},[r,t,o]);const g=h.useMemo(()=>n?Le(n.vertex.source,n.fragment.source):[],[n]);h.useEffect(()=>{S(c=>Object.fromEntries(g.map(f=>[f.name,c[f.name]??F(f)])))},[g]);const R=h.useRef(d);R.current=d;const L=h.useMemo(()=>[{id:"shader-pair",title:"Shader Pair",icon:D,order:ne,body:{kind:"custom",render:()=>i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5,padding:4,fontSize:10},children:[i.jsxs("span",{children:["Vertex · ",n?$(n.vertex.path):"Loading…",n&&!n.vertex.available?" (preview fallback)":""]}),i.jsxs("span",{children:["Fragment · ",n?$(n.fragment.path):"Loading…",n&&!n.fragment.available?" (preview fallback)":""]}),i.jsx("span",{style:{color:m.content.muted},children:"Ordinary sibling GLSL files; runtime composition stays in TS/TSX."})]})}},{id:"shader-uniforms",title:"Uniforms",icon:se,order:N,description:`${g.length} reflected`,body:{kind:"custom",data:Object.fromEntries(g.map(c=>[c.name,d[c.name]])),render:()=>i.jsx(De,{descriptors:g,values:d,onChange:(c,f)=>S(y=>({...y,[c]:f}))})}},{id:"shader-diagnostics",title:"Diagnostics",icon:u.length>0?ie:D,order:N+100,description:u.length===0?"Compiled":`${u.length} issue${u.length===1?"":"s"}`,body:{kind:"custom",data:{diagnostics:u},render:()=>n&&i.jsx(B,{diagnostics:u,files:n})}}],[g,u,n,d]);return v?i.jsx(T,{documentId:e,active:r,type:"shader",title:$(t),status:"Shader unavailable",children:i.jsx("div",{role:"alert",style:{padding:20,color:m.semantic.danger},children:v})}):n?i.jsx(T,{documentId:e,active:r,type:"shader",title:$(t),sections:L,status:u.length===0?`GLSL · compiles · ${g.length} uniforms`:`GLSL · ${u.length} compile issues`,fill:!0,children:i.jsxs("div",{style:{width:"100%",height:"100%",minHeight:0,position:"relative",background:m.surface.panel},children:[i.jsx(ke,{vertexSource:n.vertex.source,fragmentSource:n.fragment.source,descriptors:g,valuesRef:R,geometry:p,onDiagnostics:x}),i.jsx("div",{style:{position:"absolute",left:10,top:10},children:i.jsxs(oe,{"aria-label":"Preview geometry",value:p,onChange:c=>w(c.target.value),children:[i.jsx("option",{value:"sphere",children:"Sphere"}),i.jsx("option",{value:"box",children:"Box"}),i.jsx("option",{value:"plane",children:"Plane"})]})}),u.length>0&&i.jsx("div",{style:{position:"absolute",left:12,right:12,bottom:12,maxHeight:120,overflow:"auto",padding:8,border:`1px solid ${m.semantic.danger}`,borderRadius:6,background:m.surface.overlay},children:i.jsx(B,{diagnostics:u,files:n})})]})}):i.jsx(T,{documentId:e,active:r,type:"shader",title:$(t),status:"Loading GLSL",children:i.jsx("div",{style:{padding:20,color:m.content.muted},children:"Loading shader files…"})})}export{Ye as ShaderAssetDocument};
|
|
12
|
+
}`;function I(e,t=null){return{path:t,source:e==="vertex"?Te:Me,available:!1}}function $(e){return e?.split("/").pop()??"Preview fallback"}function U(e){return e.type==="vec3"&&/(colou?r|tint|albedo|emissive)/i.test(e.name)}function Q(e){return/^(u|i)?time$/i.test(e.name)&&/^(float|double)$/.test(e.type)?"time":/^(u|i)?resolution$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"resolution":/^(u|i)?mouse$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"mouse":null}function F(e){if(U(e))return/horizon/i.test(e.name)?"#badbe9":/zenith/i.test(e.name)?"#297aba":/sun/i.test(e.name)?"#fff0c2":"#6f8cff";if(e.type==="bool")return!1;if(/^(float|double|int|uint)$/.test(e.type))return 0;const t=e.type.match(/^(?:[biu]?vec)([234])$/);return t?Array.from({length:Number.parseInt(t[1],10)},()=>0):0}function Ie(){const e=new Uint8Array([38,43,58,255,176,190,255,255,176,190,255,255,38,43,58,255]),t=new Se(e,2,2,we);return t.colorSpace=H,t.magFilter=je,t.needsUpdate=!0,t}function J(e,t,r){if(e.arraySize){const{arraySize:s,...o}=e;return Array.from({length:s},()=>J(o,t,r))}if(/^sampler2D/.test(e.type)){const s=Ie();return r.push(s),s}if(/^sampler/.test(e.type))return null;if(e.type==="mat3")return new he;if(e.type==="mat4")return new ge;if(U(e))return new X(typeof t=="string"?t:"#6f8cff");const n=e.type.match(/^(?:[biu]?vec)([234])$/);if(n){const s=Array.isArray(t)?t:[],o=Number.parseInt(n[1],10);return o===2?new W(s[0]??0,s[1]??0):o===3?new K(s[0]??0,s[1]??0,s[2]??0):new Z(s[0]??0,s[1]??0,s[2]??0,s[3]??0)}return t}function Ue(e,t,r,n,s){const o=Q(t);if(o==="time"){e.value=n;return}if(e.value instanceof X&&typeof r=="string"){e.value.set(r);return}const l=Array.isArray(r)?r:[];if(e.value instanceof W){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0);return}if(e.value instanceof K){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0);return}if(e.value instanceof Z){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0,l[3]??0);return}o!=="mouse"&&!t.arraySize&&!/^sampler|^mat/.test(t.type)&&(e.value=r)}function ze(e){return e==="box"?new ve(1.35,1.35,1.35,48,48,48):e==="plane"?new ye(2.2,2.2,96,96):new xe(.95,96,64)}function ke({vertexSource:e,fragmentSource:t,descriptors:r,valuesRef:n,geometry:s,onDiagnostics:o}){const l=h.useRef(null);return h.useEffect(()=>{const p=l.current;if(!p)return;let w=!1,u=0;const x=document.createElement("canvas");x.setAttribute("aria-label","Live shader preview"),x.style.width="100%",x.style.height="100%",x.style.display="block",p.replaceChildren(x);let d;try{d=new ce({canvas:x,antialias:!0,alpha:!1})}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}]);return}d.outputColorSpace=H,d.setClearColor(1119261,1),d.debug.checkShaderErrors=!0;const S=new ue,v=new de(38,1,.01,100);v.position.set(0,0,3.4);const C=[],g={};for(const a of r)g[a.name]={value:J(a,n.current[a.name]??F(a),C)};const R=new fe({vertexShader:V(e),fragmentShader:V(t),uniforms:g,side:me,toneMapped:!1}),L=ze(s),c=new pe(L,R);S.add(c);const f=[];d.debug.onShaderError=(a,b,E,A)=>{const ee=b,te=E,re=A;f.push(...M(a.getProgramInfoLog(ee)??"","program"),...M(a.getShaderInfoLog(te)??"","vertex"),...M(a.getShaderInfoLog(re)??"","fragment"))};const y={width:1,height:1},j=()=>{const a=p.getBoundingClientRect();y.width=Math.max(1,Math.floor(a.width)),y.height=Math.max(1,Math.floor(a.height)),d.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),d.setSize(y.width,y.height,!1),v.aspect=y.width/y.height,v.position.z=3.4/Math.min(1,v.aspect),v.updateProjectionMatrix()};j();const z=new ResizeObserver(j);z.observe(p);const Y=new be;try{d.compile(S,v),d.render(S,v),o(f.filter((a,b,E)=>E.findIndex(A=>A.stage===a.stage&&A.line===a.line&&A.message===a.message)===b))}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}])}const k=()=>{if(w)return;const a=Y.getElapsedTime();for(const b of r){const E=g[b.name];E&&Ue(E,b,n.current[b.name]??F(b),a,y)}s!=="plane"&&(c.rotation.y=a*.18,c.rotation.x=Math.sin(a*.22)*.08),d.render(S,v),u=requestAnimationFrame(k)};return u=requestAnimationFrame(k),()=>{w=!0,cancelAnimationFrame(u),z.disconnect(),d.debug.onShaderError=null,L.dispose(),R.dispose();for(const a of C)a.dispose();d.dispose(),x.remove()}},[r,t,s,o,n,e]),i.jsx("div",{ref:l,"data-testid":"shader-preview",style:{width:"100%",height:"100%",minHeight:240,background:"#11141d"}})}function De({descriptors:e,values:t,onChange:r}){return e.length===0?i.jsx("div",{style:{color:m.content.muted},children:"No uniform declarations found."}):i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:4},children:[e.map(n=>i.jsx(Ne,{uniform:n,value:t[n.name]??F(n),onChange:s=>r(n.name,s)},n.name)),i.jsx("div",{style:{color:m.content.muted,fontSize:10,lineHeight:1.4},children:"Preview values are session-only. Author runtime defaults beside the ShaderMaterial in TS/TSX."})]})}function Ne({uniform:e,value:t,onChange:r}){const n=Q(e),s=e.type.match(/^(?:[biu]?vec)([234])$/);let o;return n?o=i.jsxs("div",{style:{color:m.content.muted,fontSize:10},children:["Driven by preview ",n]}):U(e)?o=i.jsx(le,{value:typeof t=="string"?t:"#6f8cff",onChange:r}):e.type==="bool"?o=i.jsxs("label",{style:{display:"flex",alignItems:"center",gap:7,fontSize:11},children:[i.jsx(ae,{checked:!!t,onChange:l=>r(l.target.checked)}),t?"True":"False"]}):/^(float|double|int|uint)$/.test(e.type)?o=i.jsx(G,{value:typeof t=="number"?t:0,onChange:r,step:e.type==="int"||e.type==="uint"?1:.01,precision:e.type==="int"||e.type==="uint"?0:3}):s&&Array.isArray(t)?o=i.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${s[1]}, minmax(0, 1fr))`,gap:4},children:t.map((l,p)=>i.jsx(G,{value:l,label:"xyzw"[p],onChange:w=>{const u=[...t];u[p]=w,r(u)},step:.01},`${e.name}:${p}`))}):o=i.jsx("div",{style:{color:m.content.muted,fontSize:10},children:"Reflected for runtime binding; no scalar preview control."}),i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5},children:[i.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:8},children:[i.jsx("span",{style:{color:m.content.primary,fontSize:11},children:e.name}),i.jsx("span",{style:{color:m.content.muted,fontSize:10},children:e.type})]}),o]})}function B({diagnostics:e,files:t}){return e.length===0?i.jsx("div",{style:{color:m.semantic.success,fontSize:11,padding:4},children:"Shader program compiled successfully."}):i.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6,padding:4},children:e.map((r,n)=>{const s=r.stage==="program"?null:t[r.stage];return i.jsxs("div",{style:{color:r.severity==="warning"?m.semantic.warning:m.semantic.danger,fontSize:10,lineHeight:1.45},children:[s?.available?$(s.path):r.stage,r.line?`:${r.line}${r.column?`:${r.column}`:""}`:""," · ",r.message]},`${r.stage}:${r.line??0}:${r.message}:${n}`)})})}async function _e(e){const t=await _(e);if(t===null)throw new Error(`Could not read ${e}.`);const r=Re(e,t),n=q(e),s=n?await _(n):null,o={vertex:I("vertex"),fragment:I("fragment")};o[r]={path:e,source:t,available:!0};const l=r==="vertex"?"fragment":"vertex";return o[l]=s===null?I(l,n):{path:n,source:s,available:!0},o}function Ye({documentId:e,assetPath:t,active:r=!0}){const[n,s]=h.useState(null),[o,l]=h.useState(0),[p,w]=h.useState("sphere"),[u,x]=h.useState([]),[d,S]=h.useState({}),[v,C]=h.useState(null);h.useEffect(()=>{if(!r)return;const c=()=>l(j=>j+1),f=q(t),y=[P(t,c),...f?[P(f,c)]:[]];return()=>{for(const j of y)j()}},[r,t]),h.useEffect(()=>{if(!r)return;let c=!1;return s(null),C(null),_e(t).then(f=>{c||s(f)},f=>{c||C(f instanceof Error?f.message:String(f))}),()=>{c=!0}},[r,t,o]);const g=h.useMemo(()=>n?Le(n.vertex.source,n.fragment.source):[],[n]);h.useEffect(()=>{S(c=>Object.fromEntries(g.map(f=>[f.name,c[f.name]??F(f)])))},[g]);const R=h.useRef(d);R.current=d;const L=h.useMemo(()=>[{id:"shader-pair",title:"Shader Pair",icon:D,order:ne,body:{kind:"custom",render:()=>i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5,padding:4,fontSize:10},children:[i.jsxs("span",{children:["Vertex · ",n?$(n.vertex.path):"Loading…",n&&!n.vertex.available?" (preview fallback)":""]}),i.jsxs("span",{children:["Fragment · ",n?$(n.fragment.path):"Loading…",n&&!n.fragment.available?" (preview fallback)":""]}),i.jsx("span",{style:{color:m.content.muted},children:"Ordinary sibling GLSL files; runtime composition stays in TS/TSX."})]})}},{id:"shader-uniforms",title:"Uniforms",icon:se,order:N,description:`${g.length} reflected`,body:{kind:"custom",data:Object.fromEntries(g.map(c=>[c.name,d[c.name]])),render:()=>i.jsx(De,{descriptors:g,values:d,onChange:(c,f)=>S(y=>({...y,[c]:f}))})}},{id:"shader-diagnostics",title:"Diagnostics",icon:u.length>0?ie:D,order:N+100,description:u.length===0?"Compiled":`${u.length} issue${u.length===1?"":"s"}`,body:{kind:"custom",data:{diagnostics:u},render:()=>n&&i.jsx(B,{diagnostics:u,files:n})}}],[g,u,n,d]);return v?i.jsx(T,{documentId:e,active:r,type:"shader",title:$(t),status:"Shader unavailable",children:i.jsx("div",{role:"alert",style:{padding:20,color:m.semantic.danger},children:v})}):n?i.jsx(T,{documentId:e,active:r,type:"shader",title:$(t),sections:L,status:u.length===0?`GLSL · compiles · ${g.length} uniforms`:`GLSL · ${u.length} compile issues`,fill:!0,children:i.jsxs("div",{style:{width:"100%",height:"100%",minHeight:0,position:"relative",background:m.surface.panel},children:[i.jsx(ke,{vertexSource:n.vertex.source,fragmentSource:n.fragment.source,descriptors:g,valuesRef:R,geometry:p,onDiagnostics:x}),i.jsx("div",{style:{position:"absolute",left:10,top:10},children:i.jsxs(oe,{"aria-label":"Preview geometry",value:p,onChange:c=>w(c.target.value),children:[i.jsx("option",{value:"sphere",children:"Sphere"}),i.jsx("option",{value:"box",children:"Box"}),i.jsx("option",{value:"plane",children:"Plane"})]})}),u.length>0&&i.jsx("div",{style:{position:"absolute",left:12,right:12,bottom:12,maxHeight:120,overflow:"auto",padding:8,border:`1px solid ${m.semantic.danger}`,borderRadius:6,background:m.surface.overlay},children:i.jsx(B,{diagnostics:u,files:n})})]})}):i.jsx(T,{documentId:e,active:r,type:"shader",title:$(t),status:"Loading GLSL",children:i.jsx("div",{style:{padding:20,color:m.content.muted},children:"Loading shader files…"})})}export{Ye as ShaderAssetDocument};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{r as $}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{eR as v,$ as L,ho as N,cJ as wt,aL as pt,hn as B,eY as zt,dg as ut,a0 as X,iY as ft,kQ as it,eE as Bt,hY as ht,dx as Dt,aQ as Ft}from"./index-CaG87ZF-.js";const Ht={full:{anchor:{left:0,top:0,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},top:{anchor:{left:0,top:0,right:1,bottom:0},offset:{left:0,top:0,right:0,bottom:0}},bottom:{anchor:{left:0,top:1,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},left:{anchor:{left:0,top:0,right:0,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},right:{anchor:{left:1,top:0,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},center:{anchor:{left:.5,top:.5,right:.5,bottom:.5},offset:{left:-60,top:-20,right:60,bottom:20}},"top-left":{anchor:{left:0,top:0,right:0,bottom:0},offset:{left:0,top:0,right:120,bottom:40}},"top-right":{anchor:{left:1,top:0,right:1,bottom:0},offset:{left:-120,top:0,right:0,bottom:40}}},mt=["flex-start","center","flex-end"],gt=["flex-start","center","flex-end"];function At({row:t,col:e,justify:n,align:r,isActive:a,disabled:s,onSelect:c}){return o.jsx("div",{"data-testid":`alignment-grid-${t}-${e}`,onClick:()=>{s||c(n,r)},style:{width:16,height:16,display:"flex",alignItems:"center",justifyContent:"center",cursor:s?"not-allowed":"pointer",borderRadius:v.radiusSmall,background:a?v.accent:"transparent"},children:o.jsx("div",{style:{width:a?6:4,height:a?6:4,borderRadius:"50%",background:a?v.onAccent:v.textMuted}})})}function ce({value:t,onChange:e,disabled:n}){const r=mt.indexOf(t.justify),a=gt.indexOf(t.align);return o.jsx("div",{"data-testid":"alignment-grid",style:{display:"inline-grid",gridTemplateColumns:"repeat(3, 16px)",gridTemplateRows:"repeat(3, 16px)",gap:1,background:v.inputBg,borderRadius:v.radiusMedium,padding:4,opacity:n?.35:1},children:gt.map((s,c)=>mt.map((l,u)=>o.jsx(At,{row:c,col:u,justify:l,align:s,isActive:c===a&&u===r,disabled:n,onSelect:(p,h)=>e({justify:p,align:h})},`${c}-${u}`)))})}function de({onSelect:t,disabled:e}){return o.jsx("div",{"data-testid":"anchor-presets",style:{display:"flex",flexWrap:"wrap",gap:4},children:Object.entries(Ht).map(([n,r])=>o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":`anchor-preset-${n}`,disabled:e,onClick:()=>t(n,r),children:n},n))})}function nt(t){let e=t.replace("#","");e.length===3&&(e=`${e[0]??"0"}${e[0]??"0"}${e[1]??"0"}${e[1]??"0"}${e[2]??"0"}${e[2]??"0"}`);const n=Number.parseInt(e,16);return[n>>16&255,n>>8&255,n&255]}function St(t,e,n){return`#${[t,e,n].map(r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0")).join("")}`}function J(t,e,n){const r=t/255,a=e/255,s=n/255,c=Math.max(r,a,s),l=Math.min(r,a,s),u=c-l;let p=0;u!==0&&(c===r?p=((a-s)/u%6+6)%6:c===a?p=(s-r)/u+2:p=(r-a)/u+4,p/=6);const h=c===0?0:u/c;return[p,h,c]}function K(t,e,n){const r=Math.floor(t*6),a=t*6-r,s=n*(1-e),c=n*(1-a*e),l=n*(1-(1-a)*e);let u=0,p=0,h=0;switch(r%6){case 0:u=n,p=l,h=s;break;case 1:u=c,p=n,h=s;break;case 2:u=s,p=n,h=l;break;case 3:u=s,p=c,h=n;break;case 4:u=l,p=s,h=n;break;case 5:u=n,p=s,h=c;break}return[Math.round(u*255),Math.round(p*255),Math.round(h*255)]}function kt(t,e,n){let r,a,s;if(e===0)r=a=s=n;else{const c=(p,h,d)=>{let b=d;return b<0&&(b+=1),b>1&&(b-=1),b<.16666666666666666?p+(h-p)*6*b:b<.5?h:b<.6666666666666666?p+(h-p)*(.6666666666666666-b)*6:p},l=n<.5?n*(1+e):n+e-n*e,u=2*n-l;r=c(u,l,t+1/3),a=c(u,l,t),s=c(u,l,t-1/3)}return[Math.round(r*255),Math.round(a*255),Math.round(s*255)]}function Pt(t,e,n){const r=t/255,a=e/255,s=n/255,c=Math.max(r,a,s),l=Math.min(r,a,s);let u=0,p=0;const h=(c+l)/2;if(c!==l){const d=c-l;p=h>.5?d/(2-c-l):d/(c+l),c===r?u=((a-s)/d+(a<s?6:0))/6:c===a?u=((s-r)/d+2)/6:u=((r-a)/d+4)/6}return[u,p,h]}function rt(t){if(t.startsWith("#")&&(t.length===4||t.length===7))return t;if(t.startsWith("#")&&t.length===9)return t.slice(0,7);const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(e){const[,r,a,s]=e;return`#${[r??"0",a??"0",s??"0"].map(c=>Number.parseInt(c,10).toString(16).padStart(2,"0")).join("")}`}const n=t.match(/hsla?\((\d+),\s*(\d+)%?,\s*(\d+)%?/);if(n){const[r,a,s]=kt(Number.parseInt(n[1]??"0",10)/360,Number.parseInt(n[2]??"0",10)/100,Number.parseInt(n[3]??"0",10)/100);return St(r,a,s)}return"#000000"}function lt(t){const e=t.match(/rgba\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)/);if(e?.[1])return Number.parseFloat(e[1]);const n=t.match(/hsla\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)/);return n?.[1]?Number.parseFloat(n[1]):t.startsWith("#")&&t.length===9?Number.parseInt(t.slice(7,9),16)/255:1}function xt(t,e,n,r,a){if(a==="hex"){const d=St(t,e,n);return r<1?`rgba(${t}, ${e}, ${n}, ${r.toFixed(2)})`:d}if(a==="rgb")return r<1?`rgba(${t}, ${e}, ${n}, ${r.toFixed(2)})`:`rgb(${t}, ${e}, ${n})`;const[s,c,l]=Pt(t,e,n),u=Math.round(s*360),p=Math.round(c*100),h=Math.round(l*100);return r<1?`hsla(${u}, ${p}%, ${h}%, ${r.toFixed(2)})`:`hsl(${u}, ${p}%, ${h}%)`}function Mt(t){const e=t.match(/\d+/g);return!e||e.length<3?"#000000":`#${[e[0]??"0",e[1]??"0",e[2]??"0"].map(n=>Number.parseInt(n,10).toString(16).padStart(2,"0")).join("")}`}const F=200,Z=150,U=14;function Gt({value:t,onChange:e,onChangeEnd:n,onClose:r,recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l,disabled:u}){const p=rt(t),h=nt(p),[d,b]=$.useState(()=>J(...h)),[m,i]=$.useState(()=>lt(t)),[f,g]=$.useState("hex"),[k,C]=$.useState(p),z=$.useRef(null),S=$.useRef(null),w=$.useRef(null),E=$.useRef(null),T=$.useRef(null),H=$.useCallback((x=d,y=m,j=f)=>{const[M,R,I]=K(x[0],x[1],x[2]);return xt(M,R,I,y,j)},[d,m,f]);$.useEffect(()=>{C(H())},[H]),$.useEffect(()=>{const x=S.current,y=x?.getContext("2d");if(!x||!y)return;const[j,M,R]=K(d[0],1,1),I=y.createLinearGradient(0,0,F,0);I.addColorStop(0,"#ffffff"),I.addColorStop(1,`rgb(${j},${M},${R})`),y.fillStyle=I,y.fillRect(0,0,F,Z);const P=y.createLinearGradient(0,0,0,Z);P.addColorStop(0,"rgba(0,0,0,0)"),P.addColorStop(1,"rgba(0,0,0,1)"),y.fillStyle=P,y.fillRect(0,0,F,Z)},[d[0]]),$.useEffect(()=>{const x=w.current,y=x?.getContext("2d");if(!x||!y)return;const j=y.createLinearGradient(0,0,F,0);for(let M=0;M<=6;M++){const[R,I,P]=K(M/6,1,1);j.addColorStop(M/6,`rgb(${R},${I},${P})`)}y.fillStyle=j,y.fillRect(0,0,F,U)},[]),$.useEffect(()=>{const x=E.current,y=x?.getContext("2d");if(!x||!y)return;const j=4;for(let Q=0;Q<U;Q+=j)for(let q=0;q<F;q+=j)y.fillStyle=(q/j+Q/j)%2===0?"#ffffff":"#cccccc",y.fillRect(q,Q,j,j);const[M,R,I]=K(d[0],d[1],d[2]),P=y.createLinearGradient(0,0,F,0);P.addColorStop(0,`rgba(${M},${R},${I},0)`),P.addColorStop(1,`rgba(${M},${R},${I},1)`),y.fillStyle=P,y.fillRect(0,0,F,U)},[d]),$.useEffect(()=>{if(!r)return;function x(j){j.key==="Escape"&&r?.()}function y(j){z.current&&!z.current.contains(j.target)&&r?.()}return document.addEventListener("keydown",x),document.addEventListener("mousedown",y,!0),()=>{document.removeEventListener("keydown",x),document.removeEventListener("mousedown",y,!0)}},[r]);const _=$.useCallback((x,y,j,M)=>{const R=y?.getBoundingClientRect();if(R)if(x==="sat"){const I=[d[0],ct(j,R.left,R.width),_t(M,R.top,R.height)];b(I),N({onChange:e},H(I))}else if(x==="hue"){const I=[ct(j,R.left,R.width),d[1],d[2]];b(I),N({onChange:e},H(I))}else{const I=Math.round(ct(j,R.left,R.width)*100)/100;i(I),N({onChange:e},H(d,I))}},[d,H,e]);$.useEffect(()=>{function x(j){const M=T.current;if(!M)return;j.preventDefault();const R=M==="sat"?S.current:M==="hue"?w.current:E.current;_(M,R,j.clientX,j.clientY)}function y(){if(T.current){T.current=null;const j=H();B({onChange:e,onChangeEnd:n},j),s?.(j)}}return window.addEventListener("mousemove",x),window.addEventListener("mouseup",y),()=>{window.removeEventListener("mousemove",x),window.removeEventListener("mouseup",y)}},[_,H,e,n,s]);const D=(x,y)=>{u||(y.preventDefault(),T.current=x,_(x,y.currentTarget,y.clientX,y.clientY))},G=()=>{const x=k.trim(),y=Ot(x),j=y?{r:y[0],g:y[1],b:y[2],a:1}:Kt(x)??Ut(x);if(!j)return;b(J(j.r,j.g,j.b)),i(j.a);const M=y?x:xt(j.r,j.g,j.b,j.a,f);N({onChange:e},M),B({onChange:e,onChangeEnd:n},M),s?.(M)},st=()=>{g(x=>x==="hex"?"rgb":x==="rgb"?"hsl":"hex")},O=typeof globalThis.EyeDropper=="function",at=x=>{const y=rt(x);b(J(...nt(y))),i(lt(x)),N({onChange:e},x),B({onChange:e,onChangeEnd:n},x)},Ct=async()=>{if(O){try{const y=globalThis.EyeDropper,j=await new y().open();at(j.sRGBHex)}catch{}return}if(l){l(y=>{y&&at(y)});return}const x=c?.();x&&at(x)},[It,Lt,Tt]=K(d[0],d[1],d[2]),Nt=`rgba(${It},${Lt},${Tt},${m})`;return o.jsxs(wt,{ref:z,"data-testid":"inspector-color-picker",onMouseDown:x=>x.stopPropagation(),style:{padding:10,width:F+16,boxSizing:"border-box"},children:[o.jsx("canvas",{ref:S,"data-testid":"color-picker-sv",width:F,height:Z,onMouseDown:x=>D("sat",x),style:{cursor:"crosshair",borderRadius:v.radiusSmall,display:"block"}}),o.jsx("canvas",{ref:w,"data-testid":"color-picker-hue",width:F,height:U,onMouseDown:x=>D("hue",x),style:{cursor:"pointer",borderRadius:v.radiusSmall,display:"block",marginTop:6}}),o.jsx("canvas",{ref:E,"data-testid":"color-picker-alpha",width:F,height:U,onMouseDown:x=>D("alpha",x),style:{cursor:"pointer",borderRadius:v.radiusSmall,display:"block",marginTop:6}}),o.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center",marginTop:8},children:[o.jsx("div",{style:{width:22,height:22,borderRadius:v.radiusSmall,flexShrink:0,border:`1px solid ${v.border}`,background:Nt}}),o.jsx(pt,{type:"text","data-testid":"color-picker-text",value:k,onChange:x=>C(x.target.value),onKeyDown:x=>{x.key==="Enter"&&G()},onBlur:G,"data-density":"compact","data-monospace":"true",style:{flex:1}}),o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":"color-format-toggle",onClick:st,title:"Cycle color format",style:{flexShrink:0},children:f.toUpperCase()}),(O||c||l)&&o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":"color-picker-eyedropper",onClick:Ct,title:"Eyedropper",style:{flexShrink:0},children:"⌖"})]}),a&&a.length>0&&o.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:3,marginTop:8,paddingTop:6,borderTop:`1px solid ${v.border}`},children:a.map((x,y)=>o.jsx("div",{"data-testid":"color-picker-recent",onClick:()=>{const j=rt(x);b(J(...nt(j))),i(lt(x)),N({onChange:e},x),B({onChange:e,onChangeEnd:n},x)},title:x,style:{width:16,height:16,borderRadius:v.radiusSmall,cursor:"pointer",background:x,border:`1px solid ${v.border}`}},`${x}-${y}`))})]})}function V({label:t,value:e,onChange:n,onChangeEnd:r,recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l,disabled:u,testId:p}){const[h,d]=$.useState(!1),b=rt(e);return o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,position:"relative"},children:[o.jsx("div",{"data-testid":p?`${p}-swatch`:"color-swatch",onClick:()=>{u||d(m=>!m)},style:{width:20,height:20,borderRadius:v.radiusSmall,flexShrink:0,background:b,border:`1px solid ${v.border}`,cursor:u?"not-allowed":"pointer"}}),t&&o.jsx("span",{style:{fontSize:10,color:v.textMuted,flexShrink:0},children:t}),h&&!u&&o.jsx("div",{style:{position:"absolute",zIndex:"var(--vgai-z-dropdown)",top:"100%",left:0,marginTop:4},children:o.jsx(Gt,{value:e,onChange:n,onChangeEnd:r,onClose:()=>d(!1),recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l})})]})}function Et(t){return Math.max(0,Math.min(1,t))}function ct(t,e,n){return Et(n?(t-e)/n:0)}function _t(t,e,n){return Et(n?1-(t-e)/n:0)}function Ot(t){return/^#[0-9a-fA-F]{6}$/.test(t)?nt(t):null}function Kt(t){const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(!e)return null;const[,n,r,a,s]=e;return{r:Number.parseInt(n??"0",10),g:Number.parseInt(r??"0",10),b:Number.parseInt(a??"0",10),a:s?Number.parseFloat(s):1}}function Ut(t){const e=t.match(/hsla?\((\d+),\s*(\d+)%?,\s*(\d+)%?(?:,\s*([\d.]+))?\)/);if(!e)return null;const[,n,r,a,s]=e,[c,l,u]=kt(Number.parseInt(n??"0",10)/360,Number.parseInt(r??"0",10)/100,Number.parseInt(a??"0",10)/100);return{r:c,g:l,b:u,a:s?Number.parseFloat(s):1}}function A({label:t,value:e,unit:n="",step:r=1,min:a,max:s,precision:c,disabled:l,onChange:u,onChangeEnd:p,testId:h,style:d}){const b=$.useRef(null),m=c??(r<1?2:r>=100?-2:0),i=$.useMemo(()=>w=>{if(m<0){const T=10**-m;return Math.round(w/T)*T}const E=10**m;return Math.round(w*E)/E},[m]),f=w=>{let E=w;return a!==void 0&&(E=Math.max(a,E)),s!==void 0&&(E=Math.min(s,E)),i(E)},g=w=>{if(l)return;w.preventDefault(),b.current={startX:w.clientX,startValue:e,last:e},document.body.style.cursor="ew-resize";const E=D=>{if(!b.current)return;D.preventDefault();const G=D.clientX-b.current.startX,st=D.shiftKey?10:D.altKey?.1:1,O=f(b.current.startValue+G*r*st);b.current.last=O,N({onChange:u},O)},T=()=>{document.body.style.cursor="",window.removeEventListener("mousemove",E),window.removeEventListener("mouseup",H),window.removeEventListener("keydown",_)},H=()=>{if(b.current){const D=b.current.last;b.current=null,B({onChange:u,onChangeEnd:p},D)}T()},_=D=>{if(D.key==="Escape"&&b.current){const G=f(b.current.startValue);b.current=null,N({onChange:u},G),B({onChange:u,onChangeEnd:p},G),T()}};window.addEventListener("mousemove",E),window.addEventListener("mouseup",H),window.addEventListener("keydown",_)},[k,C]=$.useState(null),z=$.useRef(!1),S=w=>{const E=Number.parseFloat(w);if(Number.isNaN(E))return;const T=f(E);T!==e&&B({onChange:u,onChangeEnd:p},T)};return o.jsxs("div",{style:{...zt,...d},children:[o.jsx("span",{className:"vgai-scrub-label","data-testid":h?`${h}-label`:void 0,onMouseDown:g,"data-disabled":l||void 0,style:{fontSize:11,...l?{color:v.dynamic}:{},flexShrink:0,cursor:l?"not-allowed":"ew-resize",userSelect:"none",fontWeight:500},children:t}),o.jsx(pt,{"data-testid":h,type:"text",value:k??`${e}${n}`,readOnly:l,"data-dynamic":l||void 0,onFocus:w=>{C(`${e}${n}`),w.target.select()},onChange:w=>C(w.target.value),onBlur:w=>{z.current||S(w.target.value),z.current=!1,C(null)},onKeyDown:w=>{w.key==="Enter"&&w.target.blur(),w.key==="Escape"&&(z.current=!0,w.target.blur())},style:{flex:1,width:0}})]})}const bt=["none","solid","dashed","dotted","double"];function Wt(t){return{top:t,right:t,bottom:t,left:t}}function Xt(t){const e=r=>`${r.width}|${r.style}|${r.color}`,n=e(t.top);return e(t.right)===n&&e(t.bottom)===n&&e(t.left)===n}function pe({value:t,onChange:e,onChangeEnd:n,disabled:r,recentColors:a,onAddRecentColor:s}){const[c,l]=$.useState(!Xt(t)),u=(d,b)=>{const m={...t.top,...d},i=Wt(m);b?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)},p=(d,b,m)=>{const i={...t,[d]:{...t[d],...b}};m?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)};if(!c)return o.jsxs("div",{"data-testid":"border-editor-uniform",style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsx(V,{testId:"border-color",value:t.top.color,disabled:r,onChange:d=>u({color:d},!1),onChangeEnd:d=>u({color:d},!0),recentColors:a,onAddRecentColor:s}),o.jsx(A,{testId:"border-width",label:"W",value:t.top.width,min:0,disabled:r,onChange:d=>u({width:d},!1),onChangeEnd:d=>u({width:d},!0),style:{width:64}}),o.jsx(ut,{className:"vgai-select","data-testid":"border-style",value:t.top.style,disabled:r,"data-dynamic":r||void 0,onChange:d=>u({style:d.target.value},!0),style:{flex:1},children:bt.map(d=>o.jsx("option",{value:d,children:d},d))}),o.jsx(L,{type:"button","data-testid":"border-expand",title:"Per-side borders","aria-label":"Edit borders per side",onClick:()=>l(!0),variant:"ghost",size:"compact",children:o.jsx(X,{icon:ft})})]});const h=[{key:"top",label:"T"},{key:"right",label:"R"},{key:"bottom",label:"B"},{key:"left",label:"L"}];return o.jsxs("div",{"data-testid":"border-editor-expanded",style:{display:"flex",flexDirection:"column",gap:4},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted},children:"Per-side"}),o.jsx("div",{style:{flex:1}}),o.jsx(L,{type:"button",variant:"primary",size:"compact","data-testid":"border-collapse",title:"Uniform border","aria-label":"Use one border for all sides",onClick:()=>l(!1),children:o.jsx(X,{icon:ft})})]}),h.map(({key:d,label:b})=>o.jsxs("div",{style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted,width:10,textAlign:"center"},children:b}),o.jsx(V,{testId:`border-${d}-color`,value:t[d].color,disabled:r,onChange:m=>p(d,{color:m},!1),onChangeEnd:m=>p(d,{color:m},!0),recentColors:a,onAddRecentColor:s}),o.jsx(A,{testId:`border-${d}-width`,label:"",value:t[d].width,min:0,disabled:r,onChange:m=>p(d,{width:m},!1),onChangeEnd:m=>p(d,{width:m},!0),style:{width:48}}),o.jsx(ut,{className:"vgai-select","data-testid":`border-${d}-style`,value:t[d].style,disabled:r,"data-density":"compact","data-dynamic":r||void 0,onChange:m=>p(d,{style:m.target.value},!0),style:{flex:1},children:bt.map(m=>o.jsx("option",{value:m,children:m},m))})]},d))]})}function Yt(t){return{topLeft:t,topRight:t,bottomLeft:t,bottomRight:t}}function Vt(t){return t.topLeft===t.topRight&&t.topRight===t.bottomLeft&&t.bottomLeft===t.bottomRight}function ue({value:t,onChange:e,onChangeEnd:n,disabled:r}){const[a,s]=$.useState(!Vt(t)),c=(p,h)=>{const d=Yt(p);h?B({onChange:e,onChangeEnd:n},d):N({onChange:e},d)},l=(p,h,d)=>{const b={...t,[p]:h};d?B({onChange:e,onChangeEnd:n},b):N({onChange:e},b)};if(!a)return o.jsxs("div",{"data-testid":"border-radius-editor-uniform",style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx(A,{testId:"border-radius",label:o.jsx(X,{icon:it,label:"Radius"}),value:t.topLeft,min:0,disabled:r,onChange:p=>c(p,!1),onChangeEnd:p=>c(p,!0),style:{flex:1}}),o.jsx(L,{type:"button","data-testid":"border-radius-expand",title:"Independent corners","aria-label":"Edit radius per corner",onClick:()=>s(!0),variant:"ghost",size:"compact",children:o.jsx(X,{icon:it})})]});const u=[{key:"topLeft",label:"TL"},{key:"topRight",label:"TR"},{key:"bottomLeft",label:"BL"},{key:"bottomRight",label:"BR"}];return o.jsxs("div",{"data-testid":"border-radius-editor-expanded",children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted},children:"Corners"}),o.jsx("div",{style:{flex:1}}),o.jsx(L,{type:"button",variant:"primary",size:"compact","data-testid":"border-radius-collapse",title:"Uniform radius","aria-label":"Use one radius for all corners",onClick:()=>s(!1),children:o.jsx(X,{icon:it})})]}),o.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:3},children:u.map(({key:p,label:h})=>o.jsx(A,{testId:`border-radius-${p}`,label:h,value:t[p],min:0,disabled:r,onChange:d=>l(p,d,!1),onChangeEnd:d=>l(p,d,!0)},p))})]})}const ot=[{name:"blur",unit:"px",min:0,max:50,step:.5,default:0},{name:"brightness",unit:"%",min:0,max:300,step:1,default:100},{name:"contrast",unit:"%",min:0,max:300,step:1,default:100},{name:"saturate",unit:"%",min:0,max:300,step:1,default:100},{name:"grayscale",unit:"%",min:0,max:100,step:1,default:0},{name:"hue-rotate",unit:"deg",min:0,max:360,step:1,default:0}];function fe(t){return!t||t==="none"?ot.map(e=>({name:e.name,value:e.default})):ot.map(e=>{const n=new RegExp(`${e.name}\\(([\\d.]+)${e.unit}?\\)`),r=t.match(n);return{name:e.name,value:r?.[1]?Number.parseFloat(r[1]):e.default}})}function he(t){const e=[];for(let n=0;n<t.length;n++){const r=t[n],a=ot[n];r&&a&&r.value!==a.default&&e.push(`${r.name}(${r.value}${a.unit})`)}return e.length?e.join(" "):"none"}function me({value:t,onChange:e,onChangeEnd:n,disabled:r,label:a="Filter",testId:s="filter-editor"}){const c=(l,u,p)=>{const h=t.map((d,b)=>b===l?{...d,value:u}:d);p?B({onChange:e,onChangeEnd:n},h):N({onChange:e},h)};return o.jsxs("div",{"data-testid":s,children:[o.jsx("div",{style:{fontSize:9,color:v.textMuted,marginBottom:4},children:a}),t.map((l,u)=>{const p=ot[u];return p?o.jsx("div",{"data-testid":`filter-row-${l.name}`,style:{marginBottom:3},children:o.jsx(A,{testId:`filter-${l.name}`,label:l.name.replace("hue-rotate","hue"),value:l.value,unit:p.unit,min:p.min,max:p.max,step:p.step,disabled:r,onChange:h=>c(u,h,!1),onChangeEnd:h=>c(u,h,!0)})},l.name):null})]})}const W=28,yt=10;function ge({value:t,onChange:e,disabled:n,fonts:r,testId:a="font-picker"}){const[s,c]=$.useState(!1),[l,u]=$.useState(""),[p,h]=$.useState(0),d=$.useRef(null),b=$.useRef(null);$.useEffect(()=>{s&&b.current?.focus()},[s]),$.useEffect(()=>{if(!s)return;const S=w=>{d.current&&!d.current.contains(w.target)&&c(!1)};return document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[s]),$.useEffect(()=>{if(!s)return;const S=w=>{w.key==="Escape"&&c(!1)};return document.addEventListener("keydown",S),()=>document.removeEventListener("keydown",S)},[s]);const m=$.useMemo(()=>{if(!l)return r;const S=l.toLowerCase();return r.filter(w=>w.toLowerCase().includes(S))},[r,l]),i=m.length*W,f=Math.floor(p/W),g=Math.min(m.length,f+yt+2),k=m.slice(f,g),C=S=>{e(S),c(!1),u("")},z=t.replace(/^["']|["']$/g,"");return o.jsxs("div",{ref:d,"data-testid":a,style:{position:"relative",flex:1},children:[o.jsxs(L,{type:"button",variant:"secondary",className:"vgai-field-trigger","aria-haspopup":"listbox","aria-expanded":s,disabled:n,"data-testid":"font-picker-input",onClick:()=>{n||c(S=>!S)},children:[o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:z||"—"}),o.jsx(Bt,{direction:"down",tone:"muted",style:{marginLeft:4}})]}),s&&o.jsxs(wt,{"data-testid":"font-picker-dropdown",style:{position:"absolute",top:"100%",left:0,right:0,zIndex:"var(--vgai-z-dropdown)",marginTop:2},children:[o.jsx("div",{style:{padding:4},children:o.jsx(pt,{ref:b,type:"text","data-testid":"font-picker-search",value:l,onChange:S=>{u(S.target.value),h(0)},placeholder:"Search fonts…","data-density":"compact",style:{width:"100%",boxSizing:"border-box"}})}),o.jsx("div",{"data-testid":"font-picker-list",onScroll:S=>h(S.target.scrollTop),style:{maxHeight:yt*W,overflowY:"auto"},children:o.jsx("div",{style:{height:i,position:"relative"},children:k.map((S,w)=>{const E=f+w,T=S.toLowerCase()===z.toLowerCase();return o.jsx("div",{"data-testid":`font-picker-option-${S}`,onClick:()=>C(S),style:{position:"absolute",top:E*W,left:0,right:0,height:W,display:"flex",alignItems:"center",padding:"0 8px",cursor:"pointer",fontSize:12,background:T?v.accent:"transparent",color:T?v.onAccent:v.text},children:o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:S})},S)})})}),m.length===0&&o.jsx("div",{style:{padding:"8px 12px",color:v.textMuted,fontSize:10,textAlign:"center"},children:"No matching fonts"})]})]})}function Qt(t){const e=t.stops.map(n=>`${n.color} ${Math.round(n.position*100)}%`).join(", ");return t.type==="radial"?`radial-gradient(circle, ${e})`:`linear-gradient(${t.angle}deg, ${e})`}function qt(t){const e=t.match(/^linear-gradient\((.+)\)$/);if(e?.[1]!==void 0)return{type:"linear",inner:e[1]};const n=t.match(/^radial-gradient\((.+)\)$/);return n?.[1]!==void 0?{type:"radial",inner:n[1]}:null}function Jt(t){const e=t.match(/^(\d+)deg\s*,\s*/);if(e)return{angle:Number.parseInt(e[1]??"180",10),colorPart:t.slice(e[0].length)};if(t.startsWith("to ")){const n=t.match(/^to\s+\w+\s*,\s*/);if(n)return{angle:180,colorPart:t.slice(n[0].length)}}return{angle:180,colorPart:t}}function Zt(t){const e=t.split(/,\s*(?![^(]*\))/).map(n=>{const r=n.trim(),a=r.match(/\s+(\d+)%$/),s=a?Number.parseInt(a[1]??"0",10)/100:-1;return{color:a?r.slice(0,-a[0].length).trim():r,position:s}});for(let n=0;n<e.length;n++){const r=e[n];r&&r.position<0&&(r.position=e.length>1?n/(e.length-1):0)}return e}function xe(t){if(!t||t==="none")return null;const e=qt(t);if(!e)return null;const{angle:n,colorPart:r}=e.type==="linear"?Jt(e.inner):{angle:180,colorPart:e.inner},a=Zt(r);return a.length<2?null:{type:e.type,angle:n,stops:a}}function dt({stops:t,selected:e,onSelect:n,onMove:r,disabled:a,testIdPrefix:s}){return o.jsx("div",{style:{position:"relative",height:12,marginTop:2},children:t.map((c,l)=>o.jsx("div",{"data-testid":`${s}-${l}`,onClick:()=>n(l),onMouseDown:u=>{if(a)return;u.preventDefault(),n(l);const h=u.target.parentElement?.getBoundingClientRect(),d=i=>h?.width?Math.max(0,Math.min(1,(i-h.left)/h.width)):c.position,b=i=>r(l,d(i.clientX),!1),m=i=>{r(l,d(i.clientX),!0),window.removeEventListener("mousemove",b),window.removeEventListener("mouseup",m)};window.addEventListener("mousemove",b),window.addEventListener("mouseup",m)},style:{position:"absolute",left:`${c.position*100}%`,top:0,width:10,height:10,borderRadius:"50%",background:c.css,border:`2px solid ${l===e?v.accent:"#fff"}`,transform:"translateX(-50%)",cursor:a?"not-allowed":"pointer"}},l))})}function be({value:t,onChange:e,onChangeEnd:n,disabled:r,recentColors:a,onAddRecentColor:s,testId:c="gradient-editor"}){const[l,u]=$.useState(0),p=(f,g)=>{g?B({onChange:e,onChangeEnd:n},f):N({onChange:e},f)},h=(f,g,k)=>{const C=t.stops.map((z,S)=>S===f?{...z,...g}:z);p({...t,stops:C},k)},d=()=>{const f=t.stops[t.stops.length-1]?.position??1,g=t.stops[0]?.position??0,k=(f+g)/2,C=[...t.stops,{color:"#888888",position:k}].sort((z,S)=>z.position-S.position);u(C.length-1),p({...t,stops:C},!0)},b=f=>{if(t.stops.length<=2)return;const g=t.stops.filter((k,C)=>C!==f);u(Math.min(l,g.length-1)),p({...t,stops:g},!0)},m=t.stops[l]?.color??"#000000",i=m.startsWith("#")?m:Mt(m);return o.jsxs("div",{"data-testid":c,children:[o.jsxs("div",{style:{position:"relative",marginBottom:8},children:[o.jsx("div",{"data-testid":"gradient-preview",style:{height:20,borderRadius:v.radiusSmall,border:`1px solid ${v.border}`,background:Qt(t)}}),o.jsx(dt,{stops:t.stops.map(f=>({position:f.position,css:f.color})),selected:l,onSelect:u,onMove:(f,g,k)=>h(f,{position:g},k),disabled:r,testIdPrefix:"gradient-stop"})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:4},children:[o.jsx(V,{testId:"gradient-selected-color",value:i,disabled:r,onChange:f=>h(l,{color:f},!1),onChangeEnd:f=>h(l,{color:f},!0),recentColors:a,onAddRecentColor:s}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Stop ",l+1]}),t.stops.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove gradient stop","data-testid":"gradient-remove-stop",onClick:()=>b(l),children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":"gradient-add-stop",onClick:d,children:"+ stop"})]}),o.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsxs("div",{style:{display:"flex",gap:1,flex:1},children:[o.jsx(ht,{testId:"gradient-type-linear",label:"Linear",active:t.type==="linear",disabled:r,onClick:()=>p({...t,type:"linear"},!0)}),o.jsx(ht,{testId:"gradient-type-radial",label:"Radial",active:t.type==="radial",disabled:r,onClick:()=>p({...t,type:"radial"},!0)})]}),t.type==="linear"&&o.jsx(A,{testId:"gradient-angle",label:"°",value:t.angle,unit:"deg",disabled:r,onChange:f=>p({...t,angle:f},!1),onChangeEnd:f=>p({...t,angle:f},!0),style:{width:70}})]})]})}function jt(t){const e=n=>Math.round(Math.max(0,Math.min(1,n))*255).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}function vt(t){return{r:Number.parseInt(t.slice(1,3),16)/255,g:Number.parseInt(t.slice(3,5),16)/255,b:Number.parseInt(t.slice(5,7),16)/255}}function tt(t,e,n){if(t.length===0)return;if(e<=t[0].pos)return t[0].value;const r=t[t.length-1];if(e>=r.pos)return r.value;for(let a=0;a+1<t.length;a++){const s=t[a],c=t[a+1];if(e>=s.pos&&e<=c.pos){const l=c.pos>s.pos?(e-s.pos)/(c.pos-s.pos):0;return n(s.value,c.value,l)}}return r.value}const Y=(t,e,n)=>t+(e-t)*n,$t=(t,e,n)=>({r:Y(t.r,e.r,n),g:Y(t.g,e.g,n),b:Y(t.b,e.b,n)});function et(t,e,n){const r={...t[e],pos:n},a=[...t.filter((s,c)=>c!==e),r].sort((s,c)=>s.pos-c.pos);return{keys:a,index:a.indexOf(r)}}function ye({value:t,onChange:e,onChangeEnd:n,disabled:r,testId:a="quarks-gradient"}){const[s,c]=$.useState({track:"color",i:0}),l=(i,f)=>{f?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)},u=i=>({...t,color:{...t.color,keys:i}}),p=i=>({...t,alpha:{...t.alpha,keys:i}}),d=[...new Set([...t.color.keys.map(i=>i.pos),...t.alpha.keys.map(i=>i.pos)])].sort((i,f)=>i-f).map(i=>{const f=tt(t.color.keys,i,$t)??{r:1,g:1,b:1},g=tt(t.alpha.keys,i,Y)??1;return`rgba(${Math.round(f.r*255)},${Math.round(f.g*255)},${Math.round(f.b*255)},${Math.round(g*1e3)/1e3}) ${Math.round(i*100)}%`}).join(", "),b=t.color.keys[s.track==="color"?s.i:0],m=t.alpha.keys[s.track==="alpha"?s.i:0];return o.jsxs("div",{"data-testid":a,children:[o.jsx(dt,{stops:t.alpha.keys.map(i=>{const f=Math.round(Math.max(0,Math.min(1,i.value))*255);return{position:i.pos,css:`rgb(${f},${f},${f})`}}),selected:s.track==="alpha"?s.i:-1,onSelect:i=>c({track:"alpha",i}),onMove:(i,f,g)=>{const{keys:k,index:C}=et(t.alpha.keys,i,f);c({track:"alpha",i:C}),l(p(k),g)},disabled:r,testIdPrefix:`${a}-alpha-stop`}),o.jsx("div",{"data-testid":`${a}-preview`,style:{height:20,borderRadius:v.radiusSmall,border:`1px solid ${v.border}`,backgroundImage:`linear-gradient(90deg, ${d}), repeating-linear-gradient(45deg, #777 0 5px, #aaa 5px 10px)`}}),o.jsx(dt,{stops:t.color.keys.map(i=>({position:i.pos,css:jt(i.value)})),selected:s.track==="color"?s.i:-1,onSelect:i=>c({track:"color",i}),onMove:(i,f,g)=>{const{keys:k,index:C}=et(t.color.keys,i,f);c({track:"color",i:C}),l(u(k),g)},disabled:r,testIdPrefix:`${a}-color-stop`}),s.track==="color"&&b&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(V,{testId:`${a}-color-swatch`,value:jt(b.value),disabled:r,onChange:i=>l(u(t.color.keys.map((f,g)=>g===s.i?{...f,value:vt(i)}:f)),!1),onChangeEnd:i=>l(u(t.color.keys.map((f,g)=>g===s.i?{...f,value:vt(i)}:f)),!0)}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Color ",s.i+1,"/",t.color.keys.length]}),t.color.keys.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove color stop","data-testid":`${a}-remove-color-stop`,onClick:()=>{const i=t.color.keys.filter((f,g)=>g!==s.i);c({track:"color",i:Math.min(s.i,i.length-1)}),l(u(i),!0)},children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${a}-add-color-stop`,onClick:()=>{const f=tt(t.color.keys,.5,$t)??{r:1,g:1,b:1},{keys:g,index:k}=et([...t.color.keys,{value:f,pos:.5}],t.color.keys.length,.5);c({track:"color",i:k}),l(u(g),!0)},children:"+ stop"})]}),s.track==="alpha"&&m&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(Dt,{label:"a",step:.05,testId:`${a}-alpha-value`,value:Math.round(m.value*1e3)/1e3,onChange:i=>l(p(t.alpha.keys.map((f,g)=>g===s.i?{...f,value:Math.max(0,Math.min(1,i))}:f)),!1),onChangeEnd:i=>l(p(t.alpha.keys.map((f,g)=>g===s.i?{...f,value:Math.max(0,Math.min(1,i))}:f)),!0)}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Alpha ",s.i+1,"/",t.alpha.keys.length]}),t.alpha.keys.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove alpha stop","data-testid":`${a}-remove-alpha-stop`,onClick:()=>{const i=t.alpha.keys.filter((f,g)=>g!==s.i);c({track:"alpha",i:Math.min(s.i,i.length-1)}),l(p(i),!0)},children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${a}-add-alpha-stop`,onClick:()=>{const f=tt(t.alpha.keys,.5,Y)??1,{keys:g,index:k}=et([...t.alpha.keys,{value:f,pos:.5}],t.alpha.keys.length,.5);c({track:"alpha",i:k}),l(p(g),!0)},children:"+ stop"})]})]})}const te={x:0,y:4,blur:8,spread:0,color:"rgba(0,0,0,0.25)",inset:!1,enabled:!0},ee={x:0,y:2,blur:4,spread:0,color:"rgba(0,0,0,0.3)",inset:!1,enabled:!0};function ne(t,e){return(e?[t.inset?"inset":"",`${t.x}px`,`${t.y}px`,`${t.blur}px`,`${t.spread}px`,t.color]:[`${t.x}px`,`${t.y}px`,`${t.blur}px`,t.color]).filter(Boolean).join(" ")}function je(t,e=!0){const n=t.filter(r=>r.enabled);return n.length===0?"none":n.map(r=>ne(r,e)).join(", ")}function re(t){const e=t.match(/(rgba?\([^)]+\))/);if(e?.[1])return{color:e[1],nums:t.replace(e[1],"").trim()};const n=t.match(/(#[0-9a-fA-F]{3,8})/);return n?.[1]?{color:n[1],nums:t.replace(n[1],"").trim()}:{color:"#000000",nums:t}}function oe(t,e){if(!t||t==="none")return null;const n=t.trim(),r=e&&n.startsWith("inset"),a=r?n.slice(5).trim():n,{color:s,nums:c}=re(a),l=c.split(/\s+/).map(u=>Number.parseFloat(u)).filter(u=>!Number.isNaN(u));return e?{inset:r,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:l[3]??0,color:s}:l.length<2?null:{inset:!1,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:0,color:s}}function ve(t,e=!0){if(!t||t==="none")return[];const n=t.split(/,\s*(?![^(]*\))/),r=[];for(const a of n){const s=oe(a.trim(),e);s&&r.push({...s,enabled:!0})}return r}function Rt({value:t,onChange:e,onChangeEnd:n,disabled:r,withSpreadInset:a=!0,label:s="Shadow",testId:c="shadow-editor",recentColors:l,onAddRecentColor:u}){const p=(m,i)=>{i?B({onChange:e,onChangeEnd:n},m):N({onChange:e},m)},h=(m,i,f=!1)=>{p(t.map((g,k)=>k===m?{...g,...i}:g),f)},d=m=>{p(t.filter((i,f)=>f!==m),!0)},b=()=>{p([...t,{...a?te:ee}],!0)};return o.jsxs("div",{"data-testid":c,children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:t.length>0?4:0},children:[o.jsx("span",{style:{fontSize:9,color:v.textMuted},children:s}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${c}-add`,onClick:b,children:"+"})]}),t.map((m,i)=>{const f=m.color.startsWith("#")?m.color:Mt(m.color);return o.jsxs("div",{"data-testid":`${c}-row-${i}`,style:{marginBottom:6,padding:"4px 0",borderBottom:`1px solid ${v.border}`},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-pressed":m.enabled,"data-testid":`${c}-toggle-${i}`,onClick:()=>{r||h(i,{enabled:!m.enabled},!0)},children:m.enabled?"●":"○"}),o.jsx(V,{testId:`${c}-color-${i}`,value:f,disabled:r,onChange:g=>h(i,{color:g}),onChangeEnd:g=>h(i,{color:g},!0),recentColors:l,onAddRecentColor:u}),a&&o.jsxs("label",{style:{display:"flex",alignItems:"center",gap:2,fontSize:8,color:v.textMuted,cursor:"pointer"},children:[o.jsx(Ft,{className:"vgai-checkbox","data-testid":`${c}-inset-${i}`,checked:m.inset,disabled:r,onChange:g=>h(i,{inset:g.target.checked},!0)}),"in"]}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":`Remove ${s.toLowerCase()} ${i+1}`,"data-testid":`${c}-remove-${i}`,onClick:()=>d(i),children:"×"})]}),m.enabled&&o.jsxs("div",{style:{display:"flex",gap:4},children:[o.jsx(A,{label:"X",value:m.x,disabled:r,onChange:g=>h(i,{x:g}),onChangeEnd:g=>h(i,{x:g},!0),style:{flex:1}}),o.jsx(A,{label:"Y",value:m.y,disabled:r,onChange:g=>h(i,{y:g}),onChangeEnd:g=>h(i,{y:g},!0),style:{flex:1}}),o.jsx(A,{label:"B",value:m.blur,min:0,disabled:r,onChange:g=>h(i,{blur:Math.max(0,g)}),onChangeEnd:g=>h(i,{blur:Math.max(0,g)},!0),style:{flex:1}}),a&&o.jsx(A,{label:"S",value:m.spread,disabled:r,onChange:g=>h(i,{spread:g}),onChangeEnd:g=>h(i,{spread:g},!0),style:{flex:1}})]})]},i)})]})}function $e(t){return o.jsx(Rt,{...t,withSpreadInset:!0,testId:"box-shadow-editor",label:t.label??"Shadow"})}function we(t){return o.jsx(Rt,{...t,withSpreadInset:!1,testId:"text-shadow-editor",label:t.label??"Text Shadow"})}export{ce as A,pe as B,V as C,te as D,me as F,be as G,ye as Q,A as S,we as T,ue as a,fe as b,Qt as c,he as d,ve as e,$e as f,je as g,ge as h,Xt as i,Vt as j,de as k,Gt as l,ee as m,dt as n,Rt as o,xe as p,Yt as q,Wt as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as r}from"./jsx-runtime-DPjLkJKQ.js";import{
|
|
1
|
+
import{a as r}from"./jsx-runtime-DPjLkJKQ.js";import{b3 as m,ae as n,b4 as x,b5 as $,b6 as C,av as V}from"./index-CaG87ZF-.js";import{r as f}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{J as E,C as N,c as A}from"./JsonAssetDocument-D_HXneWE.js";import{AudioViewer as H}from"./AudioViewer-xFb5Wv7A.js";import{ImageViewer as R}from"./ImageViewer-shZzMd91.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";function k(t){const e=(t.split(/[?#]/,1)[0]??"").replace(/^\//,"");return e.startsWith("src/")&&/\.(?:[cm]?[jt]sx?)$/.test(e)}function j(t){const e=$(t);return e.editor==="model"?"model":e.editor==="image"?"image":e.editor==="audio"?"audio":e.editor==="data"?"json":e.editor==="environment"?"environment":e.format==="cube"?"lut":e.format==="glsl"||e.format==="vert"||e.format==="frag"?"shader":k(t)?"module":e.editor==="source"&&e.previewable?"text":"binary"}function b({documentId:t,assetPath:e,active:i=!0}){const[o,l]=f.useState(null),[c,u]=f.useState(null),y=e.split("/").pop()??e;return f.useEffect(()=>{let a=!1;l(null),u(null);const w=e.replace(/^\//,"");let d=0;async function h(){const g=++d;try{const s=`/__editor/source-file?path=${encodeURIComponent(w)}`,S=await fetch(s,{cache:"no-store"}).then(p=>{if(!p.ok)throw new Error(`HTTP ${p.status}`);return p.text()});!a&&g===d&&(l(S),u(null))}catch(s){!a&&g===d&&u(s instanceof Error?s.message:String(s))}}const v=C();return h(),()=>{a=!0,v()}},[e]),r.jsx(m,{documentId:t,active:i,type:"source",title:y,sections:[],status:`source · ${e}`,fill:!0,children:r.jsx("div",{style:{padding:12,height:"100%",minHeight:0,display:"flex",flexDirection:"column",gap:8},children:r.jsx("div",{style:{padding:8,flex:1,minHeight:0,display:"flex",overflow:"hidden",background:n.surface.inset,border:`1px solid ${n.boundary.default}`,borderRadius:n.shape.small},children:c!==null||o===null?r.jsx("div",{style:{fontFamily:n.typography.mono,fontSize:11,lineHeight:1.5,color:c?n.semantic.danger:n.content.muted,padding:4},children:c??"Loading…"}):r.jsx(N,{value:o,followChanges:!0,language:A(e),fontSize:11,maxHeight:"100%",ariaLabel:`Source of ${e}`})})})})}function z({documentId:t,assetPath:e,active:i}){const o=e.split("/").pop()??e;return r.jsx(m,{documentId:t,active:i,type:"source",title:o,sections:[],status:`no viewer · ${e}`,children:r.jsxs("div",{style:{padding:16,color:n.content.muted,fontSize:12},children:["No editor package in this project renders ",o,"; the file is available in the project and stays selectable and referenceable."]})})}function K({documentId:t,assetPath:e,active:i=!0}){switch(j(e)){case"model":case"environment":case"lut":case"shader":{const o=j(e);return r.jsx(x,{route:o,documentId:t,assetPath:e,displayName:e.split("/").pop()??e,active:i,whenUnregistered:r.jsx(z,{documentId:t,assetPath:e,active:i})})}case"image":return r.jsx(R,{assetPath:e});case"audio":return r.jsx(H,{assetPath:e});case"json":return r.jsx(E,{documentId:t,assetPath:e,displayName:e.split("/").pop()??e,active:i,sections:[],status:`json · ${e}`});case"module":{const o=V()?.rootPath,l=r.jsx(b,{documentId:t,assetPath:e,active:i});return o?r.jsx(x,{route:"module",documentId:t,assetPath:e,projectRoot:o,displayName:e.split("/").pop()??e,active:i,fallback:l,whenUnregistered:l}):l}case"text":return r.jsx(b,{documentId:t,assetPath:e,active:i});case"binary":return r.jsx(m,{documentId:t,active:i,type:"binary source",title:e.split("/").pop()??e,sections:[],status:`binary · ${e}`,children:r.jsxs("div",{style:{padding:16,color:n.content.muted,fontSize:12},children:[r.jsx("div",{style:{color:n.content.primary,fontWeight:600,marginBottom:6},children:e.split("/").pop()}),"This binary source is available in the project, but it has no safe in-editor renderer. Its file remains selectable and referenceable without being misidentified as another format."]})})}}export{K as SourceAssetViewer,j as sourceAssetRoute};
|