@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as c}from"./jsx-runtime-DPjLkJKQ.js";import{d9 as L,da as X,eR as j,fk as H,aD as C,fT as $,fU as K,cw as A,fV as q,cx as M,eA as N,dl as Q,w as Z,fW as J,aO as ee,fX as te,fY as oe,fZ as ne,f_ as re,f$ as se,g0 as ae,fQ as ie,cz as ce,g1 as le,aw as de,g2 as P,g3 as ue,dj as pe}from"./index-CaG87ZF-.js";import{r as p}from"./index-nmcBqr7Y.js";import{d as fe,m as me}from"./design-time-layers-CQgnmqc8.js";import{I as be,B as xe}from"./edit-mode-authoring-DBjaBTxM.js";import{b as he,i as ge}from"./react-canvas-navigation-Jowa_lJq.js";import{R as _,i as ve}from"./react-story-board-Bx7qYytV.js";import{s as we,c as ye,a as Se,b as ke}from"./component-board-registry-DrIa2csL.js";import{e as Re,S as Ee}from"./surface-state-D9j6qNu8.js";import"./index-CtzuWnCS.js";import{c as Ie,d as Ce,r as F,e as G,f as Ae,m as O,b as De,a as je,s as Be}from"./board-guides-_3R1t_-2.js";import{C as V,a as $e,b as Me}from"./CanvasSceneViewport-vqBlOz8P.js";import{R as ze}from"./ReactCanvasControls-K98jOX9b.js";import{R as _e}from"./RootSelectionOverlay-BQC12Gdd.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./root-stacking-BEd9ZvxC.js";import"./design-time-mount-registry-DUpXCg1U.js";import"./Toolbar-uLgsrB2z.js";import"./transform-mode-request-BnKpgRUW.js";import"./TransientHint-CgmkrmKF.js";import"./layered-pick-B_-BRrRD.js";import"./eyedropper-session-bjPXnfeX.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./inspect-C8RP8G5F.js";import"./inference-diagnostics-MGcIHEX6.js";const w=16,z="rgba(255, 82, 82, 0.9)",U="rgba(18, 22, 26, 0.92)",D="rgba(255, 255, 255, 0.28)";function Te(s){return[10,25,50,100,250,500,1e3,2500,5e3].find(n=>n*s>=60)??1e4}function W(s){return Math.abs(s)>=1e3?`${s/1e3}k`:String(s)}function Ne({docId:s,containerRef:l}){const n=p.useSyncExternalStore(L,X),x=p.useSyncExternalStore(Ie,()=>Ce(s)),[r,d]=p.useState(null),v=p.useRef(null);p.useEffect(()=>{const t=l.current;if(!t)return;const o=t.getBoundingClientRect();return F(s,{originX:o.left,originY:o.top,panX:n.x,panY:n.y,zoom:n.zoom}),()=>F(s,null)},[s,l,n.x,n.y,n.zoom]);const f=(t,o)=>Math.round((t-(o==="x"?n.x:n.y))/n.zoom),u=(t,o)=>(o==="x"?n.x:n.y)+t*n.zoom,m=t=>{const o=l.current?.getBoundingClientRect();return o?{x:t.clientX-o.left,y:t.clientY-o.top}:{x:0,y:0}},k=t=>o=>{o.preventDefault(),o.currentTarget.setPointerCapture(o.pointerId);const e=m(o);d({kind:"place",axis:t,id:null,at:t==="x"?e.x:e.y})},S=t=>o=>{o.preventDefault(),o.stopPropagation(),o.currentTarget.setPointerCapture(o.pointerId);const e=m(o);d({kind:"move",axis:t.axis,id:t.id,at:t.axis==="x"?e.x:e.y})},R=t=>{if(!r)return;const o=m(t),e=r.axis==="x"?o.x:o.y;d({...r,at:e}),r.kind==="move"&&r.id&&O(s,r.id,f(e,r.axis))},E=t=>{if(!r)return;const o=m(t),e=r.axis==="x"?o.x:o.y,i=e<=w;r.kind==="place"?i||Ae(s,r.axis,f(e,r.axis)):r.id&&(i?G(s,r.id):O(s,r.id,f(e,r.axis))),d(null)},a=t=>{const o=l.current,e=o?t==="x"?o.clientWidth:o.clientHeight:0,i=Te(n.zoom),g=Math.ceil(f(w,t)/i)*i,y=f(e,t),b=[];for(let I=g;I<=y&&b.length<200;I+=i)b.push(I);return b},h={position:"absolute",background:U,zIndex:61,userSelect:"none",touchAction:"none",overflow:"hidden"};return c.jsxs("div",{ref:v,"data-testid":"board-rulers",style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:60},onPointerMove:R,onPointerUp:E,children:[x.map(t=>{const o=u(t.value,t.axis),e=t.axis==="x";return c.jsx("div",{"data-testid":`board-guide-${t.axis}-${t.value}`,title:`${t.axis} = ${t.value} — drag to move, drop on the ruler or double-click to remove`,onPointerDown:S(t),onPointerMove:R,onPointerUp:E,onDoubleClick:()=>G(s,t.id),style:{position:"absolute",pointerEvents:"auto",cursor:e?"col-resize":"row-resize",zIndex:60,...e?{left:o-2,top:0,bottom:0,width:5}:{top:o-2,left:0,right:0,height:5}},children:c.jsx("div",{style:{position:"absolute",background:z,...e?{left:2,top:0,bottom:0,width:1}:{top:2,left:0,right:0,height:1}}})},t.id)}),r&&c.jsx("div",{style:{position:"absolute",background:z,zIndex:62,...r.axis==="x"?{left:r.at,top:0,bottom:0,width:1}:{top:r.at,left:0,right:0,height:1}},children:c.jsx("span",{style:{position:"absolute",...r.axis==="x"?{top:w+4,left:4}:{left:w+4,top:4},fontSize:9,fontFamily:"ui-monospace, monospace",color:z,background:U,padding:"1px 3px",borderRadius:3,whiteSpace:"nowrap"},children:f(r.at,r.axis)})}),c.jsx("div",{"data-testid":"board-ruler-top",onPointerDown:k("y"),style:{...h,top:0,left:w,right:0,height:w,cursor:"row-resize",pointerEvents:"auto"},children:a("x").map(t=>c.jsx("span",{style:{position:"absolute",left:u(t,"x"),bottom:0,borderLeft:`1px solid ${D}`,height:5},children:c.jsx("span",{style:{position:"absolute",left:2,bottom:3,fontSize:8,color:D,fontFamily:"ui-monospace, monospace"},children:W(t)})},t))}),c.jsx("div",{"data-testid":"board-ruler-left",onPointerDown:k("x"),style:{...h,top:w,left:0,bottom:0,width:w,cursor:"col-resize",pointerEvents:"auto"},children:a("y").map(t=>c.jsx("span",{style:{position:"absolute",top:u(t,"y"),right:0,borderTop:`1px solid ${D}`,width:5},children:c.jsx("span",{style:{position:"absolute",top:1,right:3,fontSize:8,color:D,fontFamily:"ui-monospace, monospace",writingMode:"vertical-rl"},children:W(t)})},t))}),c.jsx(Pe,{}),c.jsx("div",{style:{...h,top:0,left:0,width:w,height:w,borderRight:`1px solid ${j.border}`,borderBottom:`1px solid ${j.border}`}})]})}function Pe(){const s=p.useSyncExternalStore(De,je);return s?c.jsxs("button",{type:"button","data-testid":"board-breakpoint-pill",title:"Style edits are scoped to this breakpoint — click to return to Base",onClick:()=>Be(null),style:{position:"absolute",top:w+8,right:12,zIndex:62,pointerEvents:"auto",background:"rgba(18, 22, 26, 0.92)",color:j.accent,border:`1px solid ${j.accent}`,borderRadius:999,fontSize:10,padding:"3px 10px",cursor:"pointer"},children:["@ ",s," · editing this breakpoint — click to clear"]}):null}const Fe="Scene";function Ge({active:s,composite:l,descriptor:n,documentId:x,store:r}){const d=p.useRef(null),v=p.useRef(null),[f]=p.useState(oe),u=n.kind==="canvas",m=u?f:ce;p.useSyncExternalStore(r.subscribe,r.getSnapshot);const k=p.useSyncExternalStore(ne,re),S=p.useSyncExternalStore(se,ae),[R,E]=p.useState(null),a=l.childAdapters().find(b=>b.worldId===n.worldId)?.adapter??R??void 0,h=u&&a?.provenance?.label==="babylon",t=a?.hierarchy.roots()??[],o=new Set(a?.rects?.emptyContainers?.().map(b=>b.id)??[]),e=t.some(b=>!o.has(b.id)),i=Re({surface:u?"Scene":n.kind==="dom"?"UI":"World",rootIds:[n.worldId],playSuspended:r.playState!=="stopped"&&(!a||a.provenance?.source==="boundary"),phase:!a||a.provenance?.source==="boundary"?"loading":"ready",content:!a||a.provenance?.source==="boundary"?"unknown":e?"present":"empty",readiness:k,failures:S,disclosure:a instanceof xe?a.disclosure:null});p.useEffect(()=>{if(a)return ie(x,()=>({adapter:a,nodeId:[...r.selectedEntityIds].find(b=>a.hierarchy.node(b))??null}))},[l,a,x,r]),p.useEffect(()=>{const b=d.current;if(b&&!h)return u?he(b,m):ge(b,m)},[m,h,u]),p.useEffect(()=>{if(!s)return;if(!!!v.current&&d.current){v.current=me(d.current,l,r,[n],(Ve,Y)=>E(Y),u?{canvasSceneView:f}:void 0,x);return}let I=0,B=0;const T=()=>{if(I+=1,I<2){B=requestAnimationFrame(T);return}pe(x)};return B=requestAnimationFrame(T),()=>cancelAnimationFrame(B)},[s,f,l,n,x,u,r]),p.useEffect(()=>()=>{v.current?.(),v.current=null},[]);const g=le(de(r),r.selectedEntityIds),y=g?.worldId===n.worldId?g:a?.rects?{worldId:n.worldId,kind:"dom",adapter:a}:null;return c.jsxs("div",{ref:d,"data-testid":`world-document:${n.worldId}`,"data-vgai-backdrop-color":s?h?"#111827":u?V:_:void 0,"data-vgai-backdrop-policy":s?"dark-frost":void 0,onPointerDown:()=>ue("viewport"),style:{position:"absolute",inset:0,overflow:"hidden",pointerEvents:"auto",backgroundColor:h?"#111827":u?V:_,touchAction:"none"},children:[h?null:u?c.jsx($e,{view:f,documentId:x}):c.jsx(Oe,{}),c.jsx(_e,{...a?{adapter:a}:{},...u&&!h?{view:f,transformModeAware:!0,presentationId:x}:{}},`selection:${P(a)}`),c.jsx(Ee,{explanation:i,testId:`world-surface-status:${n.worldId}`,style:{zIndex:20}}),h?null:u?c.jsx(Me,{active:s,...a?{adapter:a}:{},containerRef:d,view:f,documentId:x},`controls:${P(a)}`):c.jsxs(c.Fragment,{children:[c.jsx(Ne,{docId:n.worldId,containerRef:d}),c.jsx(ze,{containerRef:d,context:y})]})]})}function Oe(){const s=p.useSyncExternalStore(L,X),l=Math.max(8,24*s.zoom),n=Math.max(.7,Math.min(1.4,s.zoom));return c.jsx("div",{"data-testid":"react-design-canvas-backdrop","aria-hidden":"true",style:{position:"absolute",inset:0,pointerEvents:"none",backgroundColor:_,backgroundImage:`radial-gradient(circle, ${ve} ${n}px, transparent ${n}px)`,backgroundPosition:`${s.x}px ${s.y}px`,backgroundSize:`${l}px ${l}px`}})}function gt(s,l){const n=Z(),x=l.childAdapters().some(e=>e.role==="world"&&e.kind==="three"),r=l.childAdapters().some(e=>e.kind===be);!x&&!r&&H(C,{discardDirty:!0});const d=new Set,v=[];let f=!1;for(const e of l.childAdapters())e.role==="world"&&e.kind==="three"&&v.push($(e.worldId,C));const u=fe(l),m=u.find(e=>e.kind==="canvas");m&&v.push($(m.worldId,A));const k=new Set([...l.childAdapters().filter(e=>e.role==="world"&&e.kind==="three"),...m?[m]:[]].map(e=>e.worldId)),S=new Map;function R(){for(const e of u){if(k.has(e.worldId)||S.has(e.worldId))continue;const i=Se(e.kind);if(!i)continue;const g=$(e.worldId,i.documentId),y=J(e.worldId,()=>i.presence()==="absent"?`Root "${e.worldId}" has no document of its own: its design surface is the project's ${i.title} board (${i.documentId}). ${i.absentReason()}`:null);S.set(e.worldId,()=>{y(),g()})}}v.push(K(e=>{const i=ee();if(i.some(y=>y.descriptor.id===e))return null;const g=ke(e);return g?g.presence()==="absent"?g.absentReason():null:`No workspace document is named "${e}". Open in this session: ${i.map(y=>y.descriptor.id).join(", ")||"(none)"}. A component board is present only when the package that owns its medium says this project has one, so a board id can be absent for this project and present for another.`}));function E(e){const i=g=>c.jsx(Ge,{...g,composite:l,descriptor:e,store:s});Q({id:A,title:Fe,kind:"world",workspaceRole:"authored-subject",provenance:{rootId:e.worldId,...e.path?{sourcePath:e.path}:{}},Content:i,presentation:()=>({kind:"world",id:e.worldId})},{category:"scene",default:!x,rootId:e.worldId})}function a(e){d.add(e.documentId);const i=()=>{d.delete(e.documentId)};try{Promise.resolve(e.install({store:s,composite:l})).catch(i)}catch{i()}}function h(){if(!f){R();for(const e of ye()){const i=e.presence();if(i===null)continue;const g=d.has(e.documentId);i==="present"!==g&&(i==="present"?a(e):(N(e.documentId),d.delete(e.documentId)))}}}m&&(E(m),d.add(A)),h();const t=we(h),o=m?A:[...d][0];return te()||(!x&&o!==void 0&&(n===null||n===C||n===q)?M(o):n?M(n):x&&M(C)),()=>{f=!0,t();for(const e of v)e();for(const e of S.values())e();S.clear();for(const e of d)N(e)}}export{Ge as RootDocumentContent,gt as installRootDocuments};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{EDITOR_LAYER as Xe}from"./editor-layers-B4oYfpj8.js";import{cL as Oe,a0 as V,dS as Ke,aJ as te,cD as G,aK as Q,kz as Ye,dR as Ze,cJ as et,$,gZ as tt,hF as rt,jR as at,kA as nt,M as j,z as st,bL as it,kB as Se,b_ as ot,kC as ct,kD as lt,kE as ut,kF as Ce,kG as xe,aw as x,cl as dt,kH as mt,bT as pt,bY as ft,kI as Pe,kJ as Ee,kK as je,kL as ht,ae as gt,kM as bt,kN as ke,dj as vt,kO as wt,kP as yt,hc as St,iU as Ct,iV as xt,gI as Pt,gJ as Et,j0 as jt,fZ as kt,f_ as Tt,f$ as At,g0 as Rt}from"./index-CaG87ZF-.js";import{s as Mt,o as Vt}from"./object3d-document-session-registry-OjqzJ86S.js";import{R as Ot}from"./RootSelectionOverlay-BQC12Gdd.js";import{e as Lt,S as Ft}from"./surface-state-D9j6qNu8.js";import{r as f}from"./index-nmcBqr7Y.js";import{t as It}from"./surface-content-Dg9Kkazf.js";import"./index-CtzuWnCS.js";import{s as zt,d as Te,c as B,t as Wt,p as Le,v as Ae,b as _t,e as Dt,l as Nt,i as $t}from"./camera-authoring-DYjhU5Zp.js";import{c as Gt}from"./performance-profiler-OwnXQX0M.js";import{m as Qt}from"./renderer-ownership-BovSEcLv.js";import{applyWorldRendererConfig as Bt}from"./renderer-config-CaPR4dB_.js";import{getUserData as Fe}from"./user-data-dHvLdpwM.js";import{detectKtx2Support as Ht}from"./loader-BTUKnX5Q.js";import{resolveRenderSettings as Ut}from"./render-settings-BBvkacR3.js";import{createSoftParticleDepthPass as qt}from"./soft-particle-depth-DNGwWJ8c.js";import{ViewportShadingRenderer as Jt}from"./viewport-shading-D9BMDb1N.js";import{applyRendererSettings as Xt,applySceneRenderPipeline as Kt}from"./setup-renderer-OOw1SykJ.js";import{EffectComposer as Yt,EffectPass as Zt,BlendFunction as er,KernelSize as tr,OutlineEffect as rr}from"./index-DHhMOs_s.js";import{W as ar,T as nr}from"./three.module-BLhyNg0e.js";import{d as sr}from"./design-time-mount-registry-DUpXCg1U.js";import{a as ir}from"./project-authoring-session-LCJAwGrD.js";import"./three-integration-CuAnYaTW.js";import{registerPresentedCanvasFrame as or}from"./canvas-preview-frames-B5xFRjhQ.js";import{i as cr}from"./editor-presentation-activity-C7SNSmTd.js";import{E as lr,s as ur,a as dr,t as mr,b as pr,c as fr,d as hr,r as gr,i as br}from"./three-viewport-presentation-CgO3eWJ-.js";import{a as Z}from"./entity-object-B_5Gc0Ky.js";import{w as vr}from"./editor-shell-store-Bh1S7M54.js";import{p as wr}from"./viewport-root-presentation-B35t51xX.js";import{d as yr}from"./asset-editor-persistence-BQgjOCrm.js";import{bindStagePresenceMarkers as Sr}from"./stage-presence-markers-cznMN_qq.js";import{el as Cr,_ as ee,fo as N,d7 as xr,dp as Re}from"./three.core-3arARmh6.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./workspace-arrangement-DIMM7ska.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./eyedropper-session-bjPXnfeX.js";import"./layered-pick-B_-BRrRD.js";import"./root-stacking-BEd9ZvxC.js";import"./react-story-board-Bx7qYytV.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./inspect-C8RP8G5F.js";import"./inference-diagnostics-MGcIHEX6.js";import"./object-marks-DwvIEBOK.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./render-features-C7QwmhCo.js";import"./matcap-texture-Dm2c-VQa.js";import"./defaults-DKiBJCPN.js";import"./edit-mode-authoring-DBjaBTxM.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./preview-renderer-BrYNFV1p.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./user-data-CqOoAowZ.js";import"./model-thumbnail-uk-2sblh.js";import"./studio-environment-yaKaHPxH.js";import"./three-state-wXRU3rLr.js";import"./hierarchy-marks-C25dY2fR.js";import"./component-instance-root-df4ofoOR.js";import"./three-contract-Dkt6PmWY.js";import"./viewport-door-DVkMQazS.js";import"./content-bounds-DKBD7nsv.js";import"./asset-preview-Cv7tfD98.js";import"./bitmap-label-Ct4k6ehY.js";import"./index-C20Flc1s.js";import"./standard-viewport-dressing-BZyuxyVl.js";import"./clip-planes-CnAI6DZn.js";import"./three-oYrcK5SQ.js";import"./model-inspection-MrJY0U_-.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./live-gesture-lock-DJbrjOqf.js";import"./scene-framing-PVMqGU8h.js";import"./live-mixers-B-bwLZ7c.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./mounted-authoring-B7RL_V28.js";import"./collaboration-presence-BOS1t8wI.js";function Pr({previewRef:r}){const{preview:e,previewPinned:s}=B(),[n,c]=f.useState(!1),i=f.useRef(null);if(f.useEffect(()=>{if(!n)return;const u=E=>{i.current?.contains(E.target)||c(!1)};return document.addEventListener("pointerdown",u),()=>document.removeEventListener("pointerdown",u)},[n]),!e)return null;const m=e.camera.isPerspectiveCamera&&Number.isFinite(e.camera.aspect)?e.camera.aspect:16/9;return o.jsxs("div",{className:"vgai-camera-preview","data-testid":"camera-preview",children:[o.jsxs(Oe,{className:"vgai-camera-preview-header",gap:4,align:"center",children:[o.jsx(V,{icon:Ke,size:"sm"}),o.jsx(te,{variant:"label",truncate:!0,className:"vgai-camera-preview-title",title:`${e.name} · ${e.lens}`,children:e.name}),o.jsx(G,{text:s?"Unpin camera preview":"Pin camera preview",children:o.jsx(Q,{"aria-label":s?"Unpin camera preview":"Pin camera preview","aria-pressed":s,size:"compact",onClick:Wt,children:o.jsx(V,{icon:Ye,size:"sm"})})}),o.jsxs("div",{ref:i,className:"vgai-camera-preview-menu-anchor",children:[o.jsx(G,{text:"Camera actions",children:o.jsx(Q,{"aria-label":"Camera actions","aria-expanded":n,size:"compact",onClick:()=>c(u=>!u),children:o.jsx(V,{icon:Ze,size:"sm"})})}),n?o.jsxs(et,{className:"vgai-camera-preview-menu",children:[o.jsx($,{variant:"ghost",size:"compact",disabled:!e.canAuthorPose,title:e.poseRefusal,onClick:()=>{c(!1),Le(e)},children:"Pilot Camera"}),o.jsx($,{variant:"ghost",size:"compact",onClick:()=>{c(!1),Ae(e)},children:"View Through Camera"}),o.jsx($,{variant:"ghost",size:"compact",disabled:!e.canAuthorPose,title:e.poseRefusal,onClick:()=>{c(!1),_t(e)},children:"Align Camera to Current View"})]}):null]})]}),o.jsx("div",{ref:r,className:"vgai-camera-preview-image",style:{aspectRatio:String(Math.max(.5,Math.min(3,m)))},role:"img","aria-label":`Live view through ${e.name}`,onDoubleClick:()=>Ae(e)})]})}function Er(){return o.jsxs("div",{className:"vgai-camera-guides","aria-hidden":"true",children:[o.jsx("div",{className:"vgai-camera-guide vgai-camera-guide-v1"}),o.jsx("div",{className:"vgai-camera-guide vgai-camera-guide-v2"}),o.jsx("div",{className:"vgai-camera-guide vgai-camera-guide-h1"}),o.jsx("div",{className:"vgai-camera-guide vgai-camera-guide-h2"}),o.jsx("div",{className:"vgai-camera-safe-frame"}),o.jsx("div",{className:"vgai-camera-center-mark"})]})}function jr(){const{view:r,guidesVisible:e}=B();if(!r)return null;const s=r.mode==="pilot";return o.jsxs(o.Fragment,{children:[e?o.jsx(Er,{}):null,o.jsx(tt,{variant:"overlay",border:!0,className:"vgai-camera-view-banner vgai-chrome-island vgai-glass-island","data-testid":"camera-view-banner",children:o.jsxs(Oe,{gap:6,align:"center",children:[o.jsx(rt,{children:s?"PILOTING":"CAMERA VIEW"}),o.jsx(te,{variant:"label",children:r.subject.name}),o.jsx(te,{variant:"caption",tone:"muted",children:"Exact camera view"}),o.jsx(G,{text:e?"Hide composition guides":"Show composition guides",children:o.jsx(Q,{"aria-label":e?"Hide composition guides":"Show composition guides","aria-pressed":e,size:"compact",onClick:Dt,children:o.jsx(V,{icon:at,size:"sm"})})}),s?null:o.jsx($,{size:"compact",variant:"primary",disabled:!r.subject.canAuthorPose,title:r.subject.poseRefusal,onClick:()=>Le(r.subject),children:"Pilot"}),o.jsx(G,{text:"Exit camera view",children:o.jsx(Q,{"aria-label":"Exit camera view",size:"compact",onClick:Nt,children:o.jsx(V,{icon:nt,size:"sm"})})})]})})]})}function kr({previewRef:r}){return f.useSyncExternalStore(zt,Te,Te),o.jsxs(o.Fragment,{children:[o.jsx(Pr,{previewRef:r}),o.jsx(jr,{})]})}function Tr(r){const e=r,s=e.getExtension("EXT_disjoint_timer_query_webgl2"),n=s!==null&&typeof e.createQuery=="function",c=[];let i=null,m=null;return{begin(){!n||i||(i=e.createQuery(),i&&e.beginQuery(s.TIME_ELAPSED_EXT,i))},end(){!n||!i||(e.endQuery(s.TIME_ELAPSED_EXT),c.push(i),i=null)},poll(){if(!n)return null;if(e.getParameter(s.GPU_DISJOINT_EXT)){for(const u of c.splice(0))e.deleteQuery(u);return null}for(;c.length>0;){const u=c[0];if(!e.getQueryParameter(u,e.QUERY_RESULT_AVAILABLE))break;c.shift(),m=e.getQueryParameter(u,e.QUERY_RESULT)/1e6,e.deleteQuery(u)}return m},dispose(){i&&(e.endQuery(s.TIME_ELAPSED_EXT),e.deleteQuery(i),i=null);for(const u of c.splice(0))e.deleteQuery(u)}}}const Ar=2e4,Rr=250,Mr=5e3;class Vr{#e=0;#t=0;#r=0;#a;constructor(e){this.#a=e}get pending(){return this.#e>0||this.#t>0}begin(e,s){this.#e=e+Ar,this.#t=s?e+Mr:0,this.#r=0,this.tick(e)}tick(e){if(!(!this.pending||e<this.#r)){if(this.#r=e+Rr,this.#t>0&&this.#a.seedFromGameCamera()){this.cancel();return}this.#e>0&&this.#a.frameContent()&&(this.#e=0),e>=this.#e&&(this.#e=0),e>=this.#t&&(this.#t=0)}}cancel(){this.#e=0,this.#t=0}}const Me=new WeakMap;function Or(r,e){if(!r)return e(),!0;if(Me.has(r))return!1;try{return e(),!0}catch(s){const n=s instanceof Error?s.message:String(s);return Me.set(r,n),j.warn(`The Scene view cannot draw this world with the editor's own renderer, and has stopped trying: ${n}. This world was built by a copy of three the editor did not make (a vendored bundle pins its own revision), and the editor draws it with ITS three — across a wide enough revision gap the two disagree about the renderer/material contract. The game itself is unaffected and still drawing: its own canvas is what the Game tab and ${st("screenshot")} show, and hierarchy, selection and inspection all still read the live world. It closes when the game resolves \`three\` to the host's instance — a bare, un-rewritten \`import 'three'\` in its own source.`,"ingest"),!1}}function Lr(){const r=it();r.addEventListener("server-log",s=>{try{Se(JSON.parse(s.data))}catch{}});let e=!1;return(async()=>{try{const s=await ot();if(e)return;for(const n of s)Se(n)}catch{}})(),()=>{e=!0,r.close()}}const Ie="viewportPose";function Fr(){const r=ct(Ie);return r&&Array.isArray(r.position)&&r.position.length===3&&r.position.every(Number.isFinite)&&Array.isArray(r.target)&&r.target.length===3&&r.target.every(Number.isFinite)?r:null}function Ir(r,e){lt(Ie,{position:[r.position.x,r.position.y,r.position.z],target:[e.x,e.y,e.z]})}const Ve={id:"world",title:"World",lights:[{color:"#ffffff",intensity:1,direction:[-10,-20,-10],space:"world"}],ambient:{color:"#ffffff",intensity:.5},environmentIntensity:0};yt(Ve),St("world",{all:{lighting:{source:"studio",studioPreset:Ve.id,auto:{takeover:["light"],overridable:!0}}}});function zr(r,e,s){const n=document.createElement("canvas");n.setAttribute("aria-label",`${s} authoring viewport`),n.setAttribute("data-testid","editor-canvas"),n.setAttribute("aria-hidden","true"),n.tabIndex=-1,n.style.width="100%",n.style.height="100%",n.style.display="block",n.style.pointerEvents="auto",r.appendChild(n);const c=Math.max(1,e.clientWidth),i=Math.max(1,e.clientHeight),m=Math.min(window.devicePixelRatio||1,2);n.width=Math.ceil(c*m),n.height=Math.ceil(i*m);const u=Qt(new ar({canvas:n,antialias:!!Ut(void 0).antialias,powerPreference:"high-performance"}));return Xt(u,void 0,m),u.setSize(c,i),u.shadowMap.type=xr,u.info.autoReset=!1,Ht(u),{canvas:n,renderer:u,lease:null}}async function Wr(r){const e=pt(r.source,r.id);if(e)return e;let s=r.url,n=r.format??"gltf",c=r.includes;if(!s){const u=(await ft(r.source,r.id))[0];if(!u)return j.error(`No downloadable files for ${r.name}.`,"asset"),null;s=u.url,n=u.format,c=u.includes}const i={source:r.source,id:r.id,name:r.name,url:s,format:n};c&&(i.includes=c);const m=await yr(i);return m.ok&&m.path?`/${m.path}`:(j.error(`Could not download ${r.name}.`,"asset"),null)}function _r(r){if(r.isCamera)return r;const e=Fe(r,"_camera");return e?.isCamera?e:null}function Dr(r){const e=r;if(e.isPerspectiveCamera)return`${e.fov.toFixed(0)}° perspective`;const s=r;return s.isOrthographicCamera?`Orthographic · ${s.zoom.toFixed(2)}×`:r.type}function Nr(r,e){const s=r.transforms;if(!s)return{canAuthorPose:!1,poseRefusal:"This camera has no transform authoring path."};const n=s.editability?.(e,"position")??{writable:!0},c=s.editability?.(e,"rotation")??{writable:!0};return n.writable&&c.writable?{canAuthorPose:!0}:{canAuthorPose:!1,poseRefusal:n.reason??c.reason??"This camera pose is read-only."}}function $r(r,e,s){const n=e.get(s)??null;if(!n)return null;const c=_r(n);return c?{id:s,name:n.name||c.name||"Camera",camera:c,lens:Dr(c),...Nr(r,s)}:null}function Gr(r){const e=new Map;for(const[s,n]of r.objectMap){const c=Fe(n,"tags");Array.isArray(c)&&c.length>0&&e.set(s,c)}return e}function Qr(r){const{store:e,documentId:s,container:n,canvas:c,renderer:i,stats:m}=r,u=new Yt(i),E=qt(),O=new Jt,g=Gt(),L=Tr(i.getContext()),ze=t=>{g.enabled&&L.begin();try{t()}finally{L.end()}},We=()=>g.enabled?L.poll():null,_e=ut({id:s,label:"Scene viewport",kind:"scene",profiler:g}),b=new Cr,re=11184810;let H=Ce(c).background??re;b.background=new ee(H);const De=xe(c,()=>{const t=Ce(c).background??re,l=b.background;l instanceof ee&&l.getHex()===H&&(b.background=new ee(t)),H=t});e.bindScene(b,i);const a=new lr(c,b,e,n,{renderer:i,onlineAssetResolver:Wr,onProjectionChange:ur}),Ne=a.bindPresentation(s,"world");e.bindScene(b,i,a.batchedRenderer,a.camera),e.setOrbitTarget(a.orbitControls.target);const U=new N,F=new N,ae=new N,ne=()=>{const t=a.renderCamera;t.getWorldPosition(U),a.cameraViewMode==="pilot"?F.copy(a.orbitControls.target):a.cameraViewMode?(t.getWorldDirection(ae),F.copy(U).add(ae.multiplyScalar(10))):F.copy(a.orbitControls.target);const l=t.fov;return{position:U,target:F,fov:typeof l=="number"?l:0}},k=Sr({scene:b,store:e,documentId:s,container:n,canvas:c,viewport:a,readVisibleCameraPose:ne});let se="",q=null,h=null,S=null,I=null;const ie=()=>{h&&fr(h,ke(i.domElement))},$e=xe(i.domElement,ie),oe=()=>{if(!h)return;const t=x(e.shell),l=[...e.shell.selectedEntityIds].filter(d=>t.hierarchy.node(d)!==null).map(d=>Z(t,e.objectMap,d)).filter(d=>d!==null);hr(h,l);const p=h.selection.size>0;S&&(S.enabled=p,S.renderToScreen=p),I&&(I.renderToScreen=!p)};function T(){bt(e.shell),q?.(),q=null,h&&gr(i,h,S),h=null,S=null,I=null,Kt(u,i,e.scene??b,a.renderCamera,void 0,{basePixelRatio:Math.min(window.devicePixelRatio||1,2),objectMap:e.objectMap,entityTags:Gr(e)}),h=pr({BlendFunction:er,KernelSize:tr,OutlineEffect:rr},i,e.scene??b,a.renderCamera,ke(i.domElement)),ie(),I=u.passes.at(-1)??null,S=new Zt(a.renderCamera,h),S.enabled=!1,u.addPass(S),oe();const t=e.adoptedImageConfig;t&&(q=Bt(nr,i,t))}const ce=()=>{a.setProjection(mr().projection),e.setViewportCamera(a.freeCamera),T()},Ge=dr(ce);ce();const J=t=>$r(x(e.shell),e.objectMap,t);let v=null;const A=()=>{v&&(je(x(e.shell),v),v=null)},le=()=>{const t=B().view;t?.mode!=="pilot"||!t.subject.canAuthorPose||(v=t.subject.id,Pe(x(e.shell),v))},ue=()=>{if(!v||a.cameraViewMode!=="pilot")return;const t=J(v),l=x(e.shell),p=l.transforms;if(!t||!p)return;let d;try{d=p.get(v)}catch(w){j.error(w instanceof Error?w.message:String(w),"camera-authoring"),A();return}Ee(l,v,{position:t.camera.position.toArray(),rotation:t.camera.quaternion.toArray(),scale:d.scale}),e.shell.notifyIngestEdit()};a.orbitControls.addEventListener("start",le),a.orbitControls.addEventListener("change",ue),a.orbitControls.addEventListener("end",A);const Qe=$t({active:()=>e.shell.playState==="stopped"&&e.shell.activeViewportTab==="edit",selected:()=>{const t=e.shell.selectedEntityId;return t?J(t):null},resolve:J,showView:(t,l)=>{A(),a.setCameraView(t.camera,l),T(),k.reportCamera()},leaveView:()=>{A(),a.clearCameraView(),T(),k.reportCamera()},alignToViewport:t=>{const l=x(e.shell),p=l.transforms;if(!p||!t.canAuthorPose)return;const d=e.objectMap.get(t.id)??null;if(!d)return;const w=a.camera.getWorldPosition(new N),C=a.camera.getWorldQuaternion(new Re),y=w.clone(),R=C.clone();if(d.parent){d.parent.updateWorldMatrix(!0,!1),d.parent.worldToLocal(y);const M=d.parent.getWorldQuaternion(new Re);R.premultiply(M.invert())}let ye;try{ye=p.get(t.id)}catch(M){j.error(M instanceof Error?M.message:String(M),"camera-authoring");return}Pe(l,t.id),Ee(l,t.id,{position:y.toArray(),rotation:R.toArray(),scale:ye.scale}),e.shell.notifyIngestEdit(),je(l,t.id)},subscribe:e.shell.subscribe});let de=null;const me=()=>{const t=ht(e.shell);t!==de&&(de=t,c.style.opacity=t?"1":"0",n.style.backgroundColor=t?"":gt.surface.raised,n.style.backgroundImage=t?"":"linear-gradient(45deg, #444649 25%, transparent 25%, transparent 75%, #444649 75%), linear-gradient(45deg, #444649 25%, transparent 25%, transparent 75%, #444649 75%)",n.style.backgroundPosition=t?"":"0 0, 8px 8px",n.style.backgroundSize=t?"":"16px 16px")};me();let pe=e.composerVersion;const Be=e.shell.subscribe(()=>{me();const t=e.scene;t&&t!==a.currentScene&&a.setScene(t),a.objectMap=e.objectMap,a.syncFromStore(),e.composerVersion!==pe?(pe=e.composerVersion,T()):oe()});let z=null;const X=new Vr({seedFromGameCamera:()=>{const t=z?.()??null;return!!t&&a.seedFromGameCamera(t)},frameContent:()=>a.focusOnScene()}),fe=()=>{X.cancel(),z=null};a.orbitControls.addEventListener("start",fe);const he=()=>Ir(a.camera,a.orbitControls.target);a.orbitControls.addEventListener("end",he);const He=e.shell.onViewportAction(t=>{switch(t.type){case"focus-entity":{const l=Z(x(e.shell),e.objectMap,t.id);l&&a.focusOn(l);break}case"focus-scene":{{const l=Fr();if(l){a.camera.position.set(...l.position),a.orbitControls.target.set(...l.target),a.orbitControls.update();break}}z=e.sceneCameraLookup,X.begin(performance.now(),z!==null);break}case"focus-selection":{const l=x(e.shell),p=[...e.shell.selectedEntityIds].map(d=>Z(l,e.objectMap,d)).filter(d=>d!==null);a.focusOnMultiple(p);break}case"snap-selection-to-floor":a.snapSelectionToFloor();break;case"set-view-preset":a.setViewPreset(t.preset);break;case"step-view":a.stepView(t.step);break;case"frame-all":a.focusOnScene();break;case"zoom-view":a.zoomStep(t.direction);break;case"set-camera-pose":a.setPose(t.position,t.target,t.fov);break}});Lr();const ge=new ResizeObserver(()=>{const t=Math.max(1,n.clientWidth),l=Math.max(1,n.clientHeight);i.setSize(t,l),u.setSize(t,l),a.resize(t,l)});ge.observe(n);let W=performance.now(),_=!0,P=!1,be=!1;function ve(t){return Or(a.currentScene,()=>{E.render(i,a.currentScene,a.renderCamera),a.renderWithInfrastructure(()=>{vr(a.currentScene,()=>O.render(a.currentScene,e.shadingMode,()=>u.render(t),br)),a.renderViewCube(i),a.renderCameraPreview(i,B().preview?.camera??null,r.cameraPreview())})})}const Ue=or(c,async()=>{if(P||!cr()||!n.checkVisibility({visibilityProperty:!0,checkVisibilityCSS:!0})||!ve(0))return null;const t=document.createElement("canvas");return t.width=c.width,t.height=c.height,t.getContext("2d").drawImage(c,0,0),t}),K=()=>wt(e.shell)===e.shell;function qe(t,l){if(P)return;if(l&&(W=t),!n.checkVisibility({visibilityProperty:!0,checkVisibilityCSS:!0})){W=t,_=!0;return}g.beginFrame();const p=t-W,d=p/1e3;K()&&(m.frameTime=p,m.fps=1e3/p),W=t,k.syncMarkers(d),X.tick(t),g.beginPhase(),a.update(d),r.runFrame(d),a.batchedRenderer.update(d),g.endPhase("editor"),g.beginPhase(),i.info.reset(),ze(()=>{ve(d)}),g.reportRender({gpuMs:We(),drawCalls:i.info.render.calls,triangles:i.info.render.triangles,geometries:i.info.memory.geometries,textures:i.info.memory.textures}),g.endPhase("render"),K()&&(m.drawCalls=i.info.render.calls,m.triangles=i.info.render.triangles),_&&be&&(_=!1,vt(s)),g.endFrame();const w=ne(),C=w.position,y=w.target;K()&&(m.cameraPosition.x=C.x,m.cameraPosition.y=C.y,m.cameraPosition.z=C.z,m.cameraTarget.x=y.x,m.cameraTarget.y=y.y,m.cameraTarget.z=y.z);const R=`${C.x},${C.y},${C.z},${y.x},${y.y},${y.z},${w.fov}`;R!==se&&(se=R,k.reportCamera())}a.objectMap=e.objectMap,a.syncFromStore(),T();let Y,D;async function Je(t){if(P)return;r.onMountStatus("mounting"),D?.(),D=void 0,Y=t,r.onRootIds(t.childAdapters().filter(d=>d.role==="world"&&d.kind==="three").map(d=>d.worldId));const l=sr("three");if(P||Y!==t)return;const p=l?await l.mountWorldRootSession({store:e,composite:t,renderer:i}):()=>{};if(P||Y!==t){p();return}D=p,P||r.onMountStatus("ready")}const we=ir(e.shell,Je);return we.ready.then(()=>dt(mt(e.shell))).catch(t=>{j.error(`Editor boot failed: ${t instanceof Error?t.message:String(t)}`,"scene"),r.onMountStatus("ready")}).finally(()=>{be=!0,_=!0}),{scene:b,viewport:a,frame:qe,present:t=>wr(e,t),setHelper:(t,l)=>a.setHelper(t,l),dispose:()=>{P=!0,_e(),Ue(),ge.disconnect(),Be(),He(),Qe(),a.orbitControls.removeEventListener("start",le),a.orbitControls.removeEventListener("change",ue),a.orbitControls.removeEventListener("end",A),a.orbitControls.removeEventListener("start",fe),a.orbitControls.removeEventListener("end",he),we.dispose(),D?.(),k.dispose(),O.dispose(),L.dispose(),Ge(),$e(),De(),Ne(),h?.selection.clear(),E.dispose(),u.dispose()}}}function Br({store:r,rootIds:e,mountStatus:s}){f.useSyncExternalStore(r.shell.subscribe,r.shell.getSnapshot);const n=f.useSyncExternalStore(kt,Tt),c=f.useSyncExternalStore(At,Rt),i=r.scene?.background,m=i!==null&&!(i?.isColor===!0&&i.getHex()===11184810),u=f.useMemo(()=>!!(r.scene&&It(r.scene,{includeBackground:!1,ignoredLayer:Xe})),[r.scene,r.shell.contentVersion]),E=!!(r.scene&&(m||u)),O=Lt({surface:"Scene",rootIds:e,phase:s==="mounting"?"loading":"ready",content:E?"present":s==="mounting"?"unknown":"empty",readiness:n,failures:c});return o.jsx(Ft,{explanation:O,testId:"scene-viewport-status"})}function Hr({store:r,documentId:e,cameraPreviewRef:s,mountStatus:n,rootIds:c}){f.useSyncExternalStore(r.shell.subscribe,r.shell.getShellSnapshot??r.shell.getSnapshot),f.useSyncExternalStore(Ct,xt),f.useSyncExternalStore(Mt,Vt),f.useSyncExternalStore(Pt,Et);const i=jt(r.shell,e,"document");return o.jsxs(o.Fragment,{children:[i.surface!==null?o.jsx(Ot,{}):null,i.surface==="three"?o.jsx(kr,{previewRef:s}):null,o.jsx(Br,{store:r,rootIds:c,mountStatus:n})]})}const jn={mountWorldRootSurface:zr,installWorldRootStage:Qr,Overlays:Hr};export{jn as worldRootStageBinding};
|
package/dist/assets/{xstate-animation-binding-BGLxcZT_.js → xstate-animation-binding-aQEmNSpm.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{collectMachineAnimationMeta as V,clipNamesOf as L,isBlendTreeAnimationMeta as S,asBlendTreeDef as z}from"./xstate-animation-meta-
|
|
1
|
+
import{collectMachineAnimationMeta as V,clipNamesOf as L,isBlendTreeAnimationMeta as S,asBlendTreeDef as z}from"./xstate-animation-meta-CnMX1Sc1.js";import{cW as J,p as Z,c as _,cQ as ee,l as te,dk as ne,cf as ie,cd as oe}from"./three.core-3arARmh6.js";import"./index-CaG87ZF-.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";class M extends Error{constructor(i,c){super(i),this.stateId=c,this.name="AnimationBindingError"}}function ae(n){const i=n.logic;if(i?.root)return i;const c=n.getSnapshot();if(c?.machine?.root)return c.machine;throw new M("[bindXStateAnimation] the actor exposes no state machine — only a state-machine actor carries the `meta.animation` this binder reads")}const W=n=>n.layer??"base",B=n=>n.weight??1,I=n=>n.blendMode??"override";function T(n){try{return ne.parseTrackName(n.name).nodeName??""}catch{const i=n.name.indexOf(".");return i<0?n.name:n.name.slice(0,i)}}function C(n,i,c){const o=new Set,l=[];for(const f of i){let u=!1;n.traverse(m=>{m.name===f&&(u=!0,m.traverse(d=>{d.name&&o.add(d.name)}))}),c.has(f)&&(u=!0,o.add(f)),u||l.push(f)}return{names:o,missing:l}}function se(n,i,c,o){const l=new Set(n.tracks.map(T)),f=i.include?C(c,i.include,l):void 0,u=i.exclude?C(c,i.exclude,l):void 0,m=[...f?.missing??[],...u?.missing??[]];if(m.length)throw new M(`[bindXStateAnimation] state "${o}" boneMask names unknown bones/objects: ${m.join(", ")}`,o);const d=n.tracks.filter(p=>{const w=T(p);return(!f||f.names.has(w))&&!u?.names.has(w)});if(d.length===0)throw new M(`[bindXStateAnimation] state "${o}" boneMask removes every track from clip "${n.name}"`,o);return new te(n.name,n.duration,d.map(p=>p.clone()))}function re(n){return n.reduce((i,c)=>c.weight>i.weight?c:i,n[0])}function Se(n,i,c,o={}){const l=i.getRoot(),f=o.root??(l instanceof J?l:void 0);if(!f)throw new M("[bindXStateAnimation] a THREE.Object3D `root` option is required when the mixer uses AnimationObjectGroup");const u=ae(n).root,m=V(u),d=new Map(m.map(t=>[t.stateId,t.meta]));for(const t of m)for(const e of L(t.meta))if(!c.has(e))throw new M(`[bindXStateAnimation] state "${t.stateId}" references clip "${e}", which is not present in the supplied clips map. Known clips: ${[...c.keys()].join(", ")||"(none)"}`,t.stateId);const p=new Map;function w(t,e,s){return W(e)!=="base"||!!e.boneMask||I(e)==="additive"?`${t}\0${s}`:s}for(const{stateId:t,meta:e}of m)for(const s of L(e)){const a=w(t,e,s);if(p.has(a))continue;const r=c.get(s);let h=e.boneMask?se(r,e.boneMask,f,t):r;(h!==r||a!==s)&&(h===r&&(h=r.clone()),h.name=`${r.name}@${W(e)}:${t}`),I(e)==="additive"?(Z.makeClipAdditive(h),h.blendMode=_):h.blendMode=ee,p.set(a,h)}const g=new Map;function K(t,e,s,a){let r=g.get(t);if(!r){const h=p.get(t);if(!h)throw new M(`[bindXStateAnimation] prepared clip "${t}" not found`);const v=i.clipAction(h);v.setEffectiveWeight(0),v.play(),r={action:v,clip:h},g.set(t,r)}return r.action.setLoop(e?ie:oe,1/0),r.action.clampWhenFinished=!e,r.action.timeScale=s,r.action.weight=a,r.action}function N(t){const e=o.selectParameters?o.selectParameters(t):t;return new Map(Object.entries(e??{}))}function D(t,e,s){return(S(e)?ce(z(e.blendTree),N(s)):[{clip:e.clip,weight:1}]).map(({clip:r,weight:h})=>({clip:r,weight:h,actionKey:w(t,e,r)}))}const y=new Map;let O=!1;function R(t,e,s){for(const a of t){if(a.actionKey===e)continue;const r=g.get(a.actionKey)?.action;r&&(s>0?r.fadeOut(s):r.setEffectiveWeight(0))}}function k(t,e){if(!S(t.meta))return;t.natural=D(t.stateId,t.meta,e);const s=B(t.meta);for(const a of t.natural)g.get(a.actionKey)?.action.setEffectiveWeight(a.weight*s)}function P(t,e,s){const a=W(e),r=y.get(a)??null,h=D(t,e,s),v=re(h),H=S(e)?!0:e.loop,Q=S(e)?1:e.speed,x=B(e);for(const b of h)K(b.actionKey,H,Q,x);const $=g.get(v.actionKey).action;$.reset().setEffectiveWeight(x);for(const b of h)b.actionKey!==v.actionKey&&g.get(b.actionKey).action.reset().setEffectiveWeight(0);const A=e.crossfade?.duration??0,U=e.crossfade?.warp??!1;if(!r)A>0&&$.fadeIn(A);else{R(r.natural,r.dominantActionKey,A);const b=g.get(r.dominantActionKey)?.action;b&&A>0?b.crossFadeTo($,A,U):(b?.setEffectiveWeight(0),$.setEffectiveWeight(x))}const j={layer:a,stateId:t,meta:e,natural:h,dominantActionKey:v.actionKey,crossfadeRemaining:A};y.set(a,j),S(e)&&A<=0&&k(j,s)}function q(t){return Object.keys(t.getMeta()).filter(e=>d.has(e))}function X(t){const e=new Map;for(const s of q(t)){const a=d.get(s),r=W(a),h=e.get(r);if(h)throw new M(`[bindXStateAnimation] animated states "${h}" and "${s}" are both active on layer "${r}". Give parallel regions distinct meta.animation.layer names.`,s);e.set(r,s)}for(const[s,a]of y)e.has(s)||(R(a.natural,void 0,0),y.delete(s));for(const[s,a]of e)y.get(s)?.stateId!==a&&P(a,d.get(a),t.context)}const F=n.getSnapshot();X(F);const G=n.subscribe(t=>{O||X(t)});function E(t){if(O)return;const e=t,s=n.getSnapshot().context;for(const a of y.values())a.crossfadeRemaining>0?(a.crossfadeRemaining=Math.max(0,a.crossfadeRemaining-e),a.crossfadeRemaining<=0&&k(a,s)):k(a,s);i.update(e)}const Y={tick:E,actor:n,getParameters:()=>N(n.getSnapshot().context),getActiveLayers:()=>[...y.values()].map(t=>({layer:t.layer,stateId:t.stateId,clips:t.natural.map(e=>e.clip),clipWeights:t.natural.map(e=>({clip:e.clip,weight:g.get(e.actionKey)?.action.getEffectiveWeight()??0})),weight:B(t.meta),blendMode:I(t.meta),...t.meta.boneMask?{boneMask:t.meta.boneMask}:{}})),dispose(){if(!O){O=!0,o.systems?.remove("animation",E),G.unsubscribe();for(const{action:t,clip:e}of g.values())t.stop(),i.uncacheAction(e,t.getRoot());g.clear(),y.clear()}}};return o.systems?.add("animation",E),Y}function ce(n,i){switch(n.type){case"1D":return le(n,i);case"2D":return fe(n,i);case"direct":return de(n);default:return n.children.map(c=>({clip:c.clip,weight:1/n.children.length}))}}function le(n,i){const c=Number(i.get(n.parameter)??0),o=[...n.children].sort((f,u)=>f.threshold-u.threshold),l=o.map(f=>({clip:f.clip,weight:0}));if(o.length===0)return l;if(o.length===1||c<=o[0].threshold)return l[0].weight=1,l;if(c>=o[o.length-1].threshold)return l[l.length-1].weight=1,l;for(let f=0;f<o.length-1;f++){const u=o[f],m=o[f+1];if(c>=u.threshold&&c<=m.threshold){const d=m.threshold-u.threshold,p=d>0?(c-u.threshold)/d:0;return l[f].weight=1-p,l[f+1].weight=p,l}}return l}function fe(n,i){const c=Number(i.get(n.parameter)??0),o=Number(i.get(n.parameterY??"")??0),l=n.children,f=l.map(d=>({clip:d.clip,weight:0}));let u=0;const m=[];for(const d of l){const p=c-d.threshold,w=o-(d.thresholdY??0),g=Math.sqrt(p*p+w*w),K=g<.001?1e3:1/g;m.push(K),u+=K}if(u>0)for(let d=0;d<f.length;d++)f[d].weight=m[d]/u;return f}function de(n){const i=n.children.map(o=>({clip:o.clip,weight:o.weight??0})),c=i.reduce((o,l)=>o+l.weight,0);if(c>0)for(const o of i)o.weight/=c;return i}export{M as AnimationBindingError,Se as bindXStateAnimation,ce as evaluateBlendTree,ae as machineOfXStateActor};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{dX as b,dY as u,r as o,t as l,u as n,v as c,bz as r,by as m,bx as f}from"./index-CaG87ZF-.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const d=o({clip:n().min(1).describe("Animation clip name this child plays"),threshold:r().describe("1D/2D blend position on the primary parameter axis"),thresholdY:r().optional().describe("2D blend position on the secondary parameter axis (2D blend trees only)"),weight:r().min(0).optional().describe('Explicit weight for "direct" blend trees (ignored by 1D/2D)')}).strict(),y=o({type:c("1D").describe("Interpolates linearly between sorted children by threshold"),parameter:n().min(1).describe("Context/selector value driving the blend"),children:l(d).min(2,"1D blend tree needs at least 2 children to interpolate between")}).strict(),v=o({type:c("2D").describe("Inverse-distance-weights children by (parameter, parameterY) position"),parameter:n().min(1).describe("Primary axis context/selector value"),parameterY:n().min(1).describe("Secondary axis context/selector value"),children:l(d.extend({thresholdY:r()})).min(1,"2D blend tree needs at least 1 child")}).strict(),g=o({type:c("direct").describe("Each child has an explicit weight, normalized to sum to 1"),parameter:n().default(""),children:l(d.extend({weight:r().min(0)})).min(1,"direct blend tree needs at least 1 child")}).strict(),A=b("type",[y,v,g]);function P(e){return e}const p=o({duration:r().min(0).default(0).describe("Seconds to blend from the previously active clip into this state on entry, applied via native `AnimationAction.crossFadeTo`/`fadeIn` (E2). 0 = instant activation, no fade."),warp:m().default(!1).describe("Passed through to AnimationAction.crossFadeTo's `warp` param — linearly warps timeScale across the two clips during the blend so differing clip lengths line up. Default false.")}).strict().describe("Blend-in/out/crossfade timing for entering this state"),x=o({include:l(n().min(1)).min(1).optional().describe("Bone/object names whose complete descendant subtrees are retained"),exclude:l(n().min(1)).min(1).optional().describe("Bone/object names whose complete descendant subtrees are removed")}).strict().refine(e=>!!(e.include?.length||e.exclude?.length),{message:"boneMask needs at least one include or exclude bone name"}).describe("Filters animation tracks by named Object3D/Bone subtrees"),h={layer:n().min(1).optional().describe("Composition layer name; omitted means the single base layer"),weight:r().min(0).max(1).optional().describe("Layer weight multiplier from 0 to 1; defaults to 1"),blendMode:f(["override","additive"]).optional().describe("Native Three normal/override or additive action blending; defaults to override"),boneMask:x.optional().describe("Optional include/exclude filter applied to every clip track in this state")},w=o({clip:n().min(1).describe("Single clip to play while this XState state is active"),loop:m().default(!0).describe("Loop the clip (THREE.LoopRepeat) vs play once (THREE.LoopOnce, clamped on last frame)"),speed:r().positive().default(1).describe("Playback speed multiplier (AnimationAction.timeScale)"),crossfade:p.optional(),...h}).strict(),S=o({blendTree:A.describe("Multiple clips blended by a live context/selector-driven parameter"),crossfade:p.optional(),...h}).strict(),D=u([w,S]);function M(e){return"clip"in e}function $(e){return"blendTree"in e}class T extends Error{constructor(a,i,t){super(a),this.stateId=i,this.issues=t,this.name="AnimationMetaValidationError"}}function B(e,a){const i=D.safeParse(a);if(!i.success){const t=i.error.issues.map(s=>`${s.path.length?s.path.join("."):"(root)"}: ${s.message}`).join("; ");throw new T(`[xstate-animation] invalid meta.animation for state "${e}": ${t}`,e,i.error.issues)}return i.data}function R(e){const a=[],i=t=>{t.meta&&"animation"in t.meta&&t.meta.animation!==void 0&&a.push({stateId:t.id,meta:B(t.id,t.meta.animation)});for(const s of Object.values(t.states??{}))i(s)};return i(e),a}function z(e){return M(e)?[e.clip]:e.blendTree.children.map(a=>a.clip)}export{A as AnimationBlendTreeSchema,T as AnimationMetaValidationError,D as StateAnimationMetaSchema,P as asBlendTreeDef,z as clipNamesOf,R as collectMachineAnimationMeta,$ as isBlendTreeAnimationMeta,M as isClipAnimationMeta,B as parseStateAnimationMeta};
|
package/dist-node/cli.js
CHANGED
|
@@ -2310,7 +2310,7 @@ import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
|
2310
2310
|
var package_default = {
|
|
2311
2311
|
name: "@volter/game-editor",
|
|
2312
2312
|
author: "Volter AI, Inc.",
|
|
2313
|
-
version: "0.5.
|
|
2313
|
+
version: "0.5.68",
|
|
2314
2314
|
publishConfig: {
|
|
2315
2315
|
access: "public"
|
|
2316
2316
|
},
|
|
@@ -2358,22 +2358,22 @@ var package_default = {
|
|
|
2358
2358
|
}
|
|
2359
2359
|
},
|
|
2360
2360
|
dependencies: {
|
|
2361
|
-
"@volter/editor-core": "0.5.
|
|
2362
|
-
"@volter/editor-game": "0.5.
|
|
2363
|
-
"@volter/editor-react": "0.5.
|
|
2364
|
-
"@volter/editor-threejs": "0.5.
|
|
2365
|
-
"@volter/editor-xstate": "0.5.
|
|
2366
|
-
"@volter/editor-blender": "0.1.
|
|
2367
|
-
"@volter/dawproject": "0.5.
|
|
2368
|
-
"@volter/editor-dawproject": "0.5.
|
|
2361
|
+
"@volter/editor-core": "0.5.68",
|
|
2362
|
+
"@volter/editor-game": "0.5.68",
|
|
2363
|
+
"@volter/editor-react": "0.5.68",
|
|
2364
|
+
"@volter/editor-threejs": "0.5.68",
|
|
2365
|
+
"@volter/editor-xstate": "0.5.68",
|
|
2366
|
+
"@volter/editor-blender": "0.1.11",
|
|
2367
|
+
"@volter/dawproject": "0.5.68",
|
|
2368
|
+
"@volter/editor-dawproject": "0.5.68",
|
|
2369
2369
|
"@volter/blender-engine": "0.1.9",
|
|
2370
|
-
"@volter/editor-project": "0.5.
|
|
2371
|
-
"@volter/editor-sdk": "0.5.
|
|
2372
|
-
"@volter/editor-live": "0.5.
|
|
2373
|
-
"@volter/game-live": "0.5.
|
|
2370
|
+
"@volter/editor-project": "0.5.68",
|
|
2371
|
+
"@volter/editor-sdk": "0.5.68",
|
|
2372
|
+
"@volter/editor-live": "0.5.68",
|
|
2373
|
+
"@volter/game-live": "0.5.68",
|
|
2374
2374
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
2375
|
-
"@volter/game-runtime": "0.5.
|
|
2376
|
-
"@volter/threejs-runtime": "0.5.
|
|
2375
|
+
"@volter/game-runtime": "0.5.68",
|
|
2376
|
+
"@volter/threejs-runtime": "0.5.68",
|
|
2377
2377
|
undici: "7.29.1",
|
|
2378
2378
|
typescript: "5.9.3",
|
|
2379
2379
|
"@colyseus/schema": "^4.0.14",
|
|
@@ -5615,6 +5615,17 @@ function writeEditorPackages(targetDir, wanted) {
|
|
|
5615
5615
|
);
|
|
5616
5616
|
writeJson(pkgPath, pkg);
|
|
5617
5617
|
}
|
|
5618
|
+
function writeNetworkedInput(targetDir) {
|
|
5619
|
+
const inputPath = join4(targetDir, "src", "input.ts");
|
|
5620
|
+
let input = readFileSync3(inputPath, "utf-8");
|
|
5621
|
+
for (const [line, replacement] of NETWORKED_INPUT_LINES) {
|
|
5622
|
+
if (!input.includes(line)) {
|
|
5623
|
+
throw new Error(`The template input store no longer declares its actions as expected: ${line}`);
|
|
5624
|
+
}
|
|
5625
|
+
input = input.replace(line, replacement);
|
|
5626
|
+
}
|
|
5627
|
+
writeFileSync3(inputPath, input, "utf-8");
|
|
5628
|
+
}
|
|
5618
5629
|
function rewriteTemplateVariantFiles(targetDir, composition, additions, starterDir) {
|
|
5619
5630
|
if (!additions.has("three") || !additions.has("studio")) {
|
|
5620
5631
|
for (const relative7 of STUDIO_OWNED_PATHS) {
|
|
@@ -5623,15 +5634,7 @@ function rewriteTemplateVariantFiles(targetDir, composition, additions, starterD
|
|
|
5623
5634
|
}
|
|
5624
5635
|
writeEditorPackages(targetDir, composition.editorPackages);
|
|
5625
5636
|
if (additions.has("server") && additions.has("three")) {
|
|
5626
|
-
|
|
5627
|
-
let input = readFileSync3(inputPath, "utf-8");
|
|
5628
|
-
for (const [line, replacement] of NETWORKED_INPUT_LINES) {
|
|
5629
|
-
if (!input.includes(line)) {
|
|
5630
|
-
throw new Error(`The template input store no longer declares its actions as expected: ${line}`);
|
|
5631
|
-
}
|
|
5632
|
-
input = input.replace(line, replacement);
|
|
5633
|
-
}
|
|
5634
|
-
writeFileSync3(inputPath, input, "utf-8");
|
|
5637
|
+
writeNetworkedInput(targetDir);
|
|
5635
5638
|
} else {
|
|
5636
5639
|
for (const relative7 of SERVER_CLIENT_PATHS) {
|
|
5637
5640
|
rmSync2(join4(targetDir, relative7), { recursive: true, force: true });
|
|
@@ -5821,6 +5824,8 @@ function scaffoldProject(opts) {
|
|
|
5821
5824
|
withAgentsContract(readFileSync3(agentsPath, "utf-8"), additions),
|
|
5822
5825
|
"utf-8"
|
|
5823
5826
|
);
|
|
5827
|
+
} else if (exampleId === void 0 && existsSync3(join4(targetDir, "src", "net"))) {
|
|
5828
|
+
writeNetworkedInput(targetDir);
|
|
5824
5829
|
}
|
|
5825
5830
|
rewriteTsconfig(targetDir, engineRelPath, editorRelPath);
|
|
5826
5831
|
rewriteViteConfig(targetDir);
|
package/dist-node/create.js
CHANGED
|
@@ -2983,6 +2983,17 @@ function writeEditorPackages(targetDir, wanted) {
|
|
|
2983
2983
|
);
|
|
2984
2984
|
writeJson(pkgPath, pkg);
|
|
2985
2985
|
}
|
|
2986
|
+
function writeNetworkedInput(targetDir) {
|
|
2987
|
+
const inputPath = join4(targetDir, "src", "input.ts");
|
|
2988
|
+
let input = readFileSync3(inputPath, "utf-8");
|
|
2989
|
+
for (const [line, replacement] of NETWORKED_INPUT_LINES) {
|
|
2990
|
+
if (!input.includes(line)) {
|
|
2991
|
+
throw new Error(`The template input store no longer declares its actions as expected: ${line}`);
|
|
2992
|
+
}
|
|
2993
|
+
input = input.replace(line, replacement);
|
|
2994
|
+
}
|
|
2995
|
+
writeFileSync3(inputPath, input, "utf-8");
|
|
2996
|
+
}
|
|
2986
2997
|
function rewriteTemplateVariantFiles(targetDir, composition, additions, starterDir) {
|
|
2987
2998
|
if (!additions.has("three") || !additions.has("studio")) {
|
|
2988
2999
|
for (const relative4 of STUDIO_OWNED_PATHS) {
|
|
@@ -2991,15 +3002,7 @@ function rewriteTemplateVariantFiles(targetDir, composition, additions, starterD
|
|
|
2991
3002
|
}
|
|
2992
3003
|
writeEditorPackages(targetDir, composition.editorPackages);
|
|
2993
3004
|
if (additions.has("server") && additions.has("three")) {
|
|
2994
|
-
|
|
2995
|
-
let input = readFileSync3(inputPath, "utf-8");
|
|
2996
|
-
for (const [line, replacement] of NETWORKED_INPUT_LINES) {
|
|
2997
|
-
if (!input.includes(line)) {
|
|
2998
|
-
throw new Error(`The template input store no longer declares its actions as expected: ${line}`);
|
|
2999
|
-
}
|
|
3000
|
-
input = input.replace(line, replacement);
|
|
3001
|
-
}
|
|
3002
|
-
writeFileSync3(inputPath, input, "utf-8");
|
|
3005
|
+
writeNetworkedInput(targetDir);
|
|
3003
3006
|
} else {
|
|
3004
3007
|
for (const relative4 of SERVER_CLIENT_PATHS) {
|
|
3005
3008
|
rmSync2(join4(targetDir, relative4), { recursive: true, force: true });
|
|
@@ -3189,6 +3192,8 @@ function scaffoldProject(opts) {
|
|
|
3189
3192
|
withAgentsContract(readFileSync3(agentsPath, "utf-8"), additions),
|
|
3190
3193
|
"utf-8"
|
|
3191
3194
|
);
|
|
3195
|
+
} else if (exampleId === void 0 && existsSync3(join4(targetDir, "src", "net"))) {
|
|
3196
|
+
writeNetworkedInput(targetDir);
|
|
3192
3197
|
}
|
|
3193
3198
|
rewriteTsconfig(targetDir, engineRelPath, editorRelPath);
|
|
3194
3199
|
rewriteViteConfig(targetDir);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volter/game-editor",
|
|
3
3
|
"author": "Volter AI, Inc.",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.68",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -49,22 +49,22 @@
|
|
|
49
49
|
}
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@volter/editor-core": "0.5.
|
|
53
|
-
"@volter/editor-game": "0.5.
|
|
54
|
-
"@volter/editor-react": "0.5.
|
|
55
|
-
"@volter/editor-threejs": "0.5.
|
|
56
|
-
"@volter/editor-xstate": "0.5.
|
|
57
|
-
"@volter/editor-blender": "0.1.
|
|
58
|
-
"@volter/dawproject": "0.5.
|
|
59
|
-
"@volter/editor-dawproject": "0.5.
|
|
52
|
+
"@volter/editor-core": "0.5.68",
|
|
53
|
+
"@volter/editor-game": "0.5.68",
|
|
54
|
+
"@volter/editor-react": "0.5.68",
|
|
55
|
+
"@volter/editor-threejs": "0.5.68",
|
|
56
|
+
"@volter/editor-xstate": "0.5.68",
|
|
57
|
+
"@volter/editor-blender": "0.1.11",
|
|
58
|
+
"@volter/dawproject": "0.5.68",
|
|
59
|
+
"@volter/editor-dawproject": "0.5.68",
|
|
60
60
|
"@volter/blender-engine": "0.1.9",
|
|
61
|
-
"@volter/editor-project": "0.5.
|
|
62
|
-
"@volter/editor-sdk": "0.5.
|
|
63
|
-
"@volter/editor-live": "0.5.
|
|
64
|
-
"@volter/game-live": "0.5.
|
|
61
|
+
"@volter/editor-project": "0.5.68",
|
|
62
|
+
"@volter/editor-sdk": "0.5.68",
|
|
63
|
+
"@volter/editor-live": "0.5.68",
|
|
64
|
+
"@volter/game-live": "0.5.68",
|
|
65
65
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
66
|
-
"@volter/game-runtime": "0.5.
|
|
67
|
-
"@volter/threejs-runtime": "0.5.
|
|
66
|
+
"@volter/game-runtime": "0.5.68",
|
|
67
|
+
"@volter/threejs-runtime": "0.5.68",
|
|
68
68
|
"undici": "7.29.1",
|
|
69
69
|
"typescript": "5.9.3",
|
|
70
70
|
"@colyseus/schema": "^4.0.14",
|
|
@@ -88,7 +88,9 @@
|
|
|
88
88
|
"vite": "^6.4.3",
|
|
89
89
|
"ztrack": "^1.5.5",
|
|
90
90
|
"three-bvh-csg": "^0.0.18",
|
|
91
|
-
"three-mesh-bvh": "^0.9.12"
|
|
91
|
+
"three-mesh-bvh": "^0.9.12",
|
|
92
|
+
"@pixi/react": "8.0.5",
|
|
93
|
+
"pixi.js": "^8.6.0"
|
|
92
94
|
},
|
|
93
95
|
"bin": {
|
|
94
96
|
"volter-game-editor": "./dist-node/cli.js"
|
|
@@ -71,7 +71,29 @@ export default function Theme() {
|
|
|
71
71
|
stage; `role="submix"` makes a GROUP: the `<Track>`s written inside that `<Track>` sum into its
|
|
72
72
|
strip (its devices, sends, fader, pan) instead of the master, and a solo on it solos them all. Devices on any channel, in order: `equalizer` (`bands: [{ type, freq, gain, q }]`,
|
|
73
73
|
types `highPass lowPass lowShelf highShelf bell`), `compressor` (`threshold ratio attack
|
|
74
|
-
release knee makeup
|
|
74
|
+
release knee makeup`, and `sidechain: "<track>"` to compress on another track's signal, as a pad
|
|
75
|
+
ducks under the melody), `limiter` (`ceiling release`), `convolution` (`ir predelay wet`).
|
|
76
|
+
- Movement: `<Lfo target="volume" shape="sine" period="w" depth={3} />` in a `<Channel>` swings
|
|
77
|
+
its volume ±3 dB once a bar (`target` `volume`, `pan` or `send:<bus>`; `shape` `sine triangle
|
|
78
|
+
square saw`; `period` a note value or beats, so it follows the tempo; `phase` 0–1), adding to
|
|
79
|
+
the written value or to the track's lane for that target. The DAWproject export writes it out
|
|
80
|
+
as automation points.
|
|
81
|
+
- Scenes: `<Scene name="Combat">` (a `<Project>` child, after the tracks) holds a
|
|
82
|
+
`<ClipSlot track="Bass"><Clip bars={1}>…</Clip></ClipSlot>` per track that plays in it. A slot's
|
|
83
|
+
clip has no `at`; its notes count from its own start as bar 1 (`at="1:2.5"`), and it loops. A
|
|
84
|
+
scene is one state of the game's music (explore, combat, calm): launched, each of its tracks
|
|
85
|
+
loops its clip from the next bar and every other track stops. The piece still needs its
|
|
86
|
+
arrangement; the scenes render beside it.
|
|
87
|
+
- A recording: a clip holding `<Audio file="audio/take.wav" offset={0.5} gain={-6} />` instead of
|
|
88
|
+
notes plays that WAV (a path from the project folder) from `offset` seconds into it, at `gain`
|
|
89
|
+
dB, for the clip's `bars`; its track needs no instrument device. `check-piece` names a file
|
|
90
|
+
that is not there, and the DAWproject export embeds each recording.
|
|
91
|
+
- A clip may hold several recordings of one part: `<Audio file take="1" />`, `<Audio file
|
|
92
|
+
take="2" />`, … (a looped audio recording writes one per pass); the newest plays, and
|
|
93
|
+
`<Comp take="1" at="5:3" />` plays take 1 from 5:3 on. Leave a person's comp as they set it.
|
|
94
|
+
- A take a person records (Rec in the transport) arrives as notes at their played timing,
|
|
95
|
+
480 ticks a beat (`at="3:2.097917"`, `dur="0.8375"`), in the clip that holds it or a new
|
|
96
|
+
`<Clip name="take">`; quantize it only if they ask.
|
|
75
97
|
- Code that generates notes spells them with `formatAt(beats, beatsPerBar)` and
|
|
76
98
|
`formatPitch(midi)` from `@volter/dawproject`.
|
|
77
99
|
|
|
@@ -159,7 +181,8 @@ Literal `<Note>`s are WRITTEN: the person drags, adds, deletes and reshapes them
|
|
|
159
181
|
Use code for material that follows a rule (a pad over the chord table), literals for what a
|
|
160
182
|
person will shape (melodies, bass lines). When they want to shape generated material, the clip
|
|
161
183
|
editor's Freeze writes it out, or run
|
|
162
|
-
`npx tsx node_modules/@volter/editor-dawproject/scripts/freeze-clip.ts src/music/<piece>.tsx --track <name> --clip <n
|
|
184
|
+
`npx tsx node_modules/@volter/editor-dawproject/scripts/freeze-clip.ts src/music/<piece>.tsx --track <name> --clip <n>`
|
|
185
|
+
(`--scene <name>` instead of `--clip` for that track's launcher slot in a scene).
|
|
163
186
|
|
|
164
187
|
Before rewriting a section, read what the person changed (`git diff`, `git log -p`): change
|
|
165
188
|
only what you were asked to, and leave their edits where they put them.
|
|
@@ -215,7 +238,8 @@ renders the same files outside `public/`, unrecorded.
|
|
|
215
238
|
|
|
216
239
|
- The folder gets the whole piece as a seamless loop (`theme.ogg`; `theme.wav` carries a
|
|
217
240
|
`smpl` loop), `sections/<marker>.ogg` with `--sections` (each section its own seamless loop,
|
|
218
|
-
at the whole mix's level), `
|
|
241
|
+
at the whole mix's level), `scenes/<scene>.ogg` for every `<Scene>` (its loop as long as its
|
|
242
|
+
clips take to come round together, at the same level), `stems/<track>.ogg`, and `report.json`. Every `.ogg` has an `.m4a`
|
|
219
243
|
(AAC) beside it for browsers that cannot decode Vorbis; `loadMusic` falls back to it.
|
|
220
244
|
- The same piece renders to the same bytes every time, so an unchanged piece re-rendered leaves
|
|
221
245
|
`.vgai/provenance.json` unchanged.
|
|
@@ -234,7 +258,7 @@ import { createMusicPlayer, loadMusic } from './lib/music/music-player';
|
|
|
234
258
|
const render = await (await fetch('/music/theme/report.json')).json();
|
|
235
259
|
const buffers = await loadMusic(context, '/music/theme/', render);
|
|
236
260
|
const music = createMusicPlayer({ context, destination: musicBus, render, buffers });
|
|
237
|
-
music.play('Explore'); // a section's loop, by its marker
|
|
261
|
+
music.play('Explore'); // a section's loop, by its marker, or a scene's, by its name
|
|
238
262
|
music.queue('Battle'); // switch on the next bar line; the old loop fades out
|
|
239
263
|
music.stinger(victory, 'bar'); // a one-shot (rendered with --one-shot) on the next bar line
|
|
240
264
|
```
|
package/template/package.json
CHANGED
|
@@ -24,13 +24,15 @@
|
|
|
24
24
|
"@colyseus/sdk": "^0.17.34",
|
|
25
25
|
"@react-three/drei": "^10.7.7",
|
|
26
26
|
"@react-three/fiber": "^9.6.1",
|
|
27
|
-
"@volter/editor-project": "^0.5.
|
|
28
|
-
"@volter/game-runtime": "^0.5.
|
|
29
|
-
"@volter/threejs-runtime": "^0.5.
|
|
27
|
+
"@volter/editor-project": "^0.5.68",
|
|
28
|
+
"@volter/game-runtime": "^0.5.68",
|
|
29
|
+
"@volter/threejs-runtime": "^0.5.68",
|
|
30
30
|
"react": "~19.2.4",
|
|
31
31
|
"react-dom": "~19.2.4",
|
|
32
32
|
"three": "^0.180.0",
|
|
33
|
-
"zod": "^4.3.6"
|
|
33
|
+
"zod": "^4.3.6",
|
|
34
|
+
"@pixi/react": "8.0.5",
|
|
35
|
+
"pixi.js": "^8.6.0"
|
|
34
36
|
},
|
|
35
37
|
"devDependencies": {
|
|
36
38
|
"@colyseus/ws-transport": "^0.17.9",
|
|
@@ -40,13 +42,13 @@
|
|
|
40
42
|
"@types/react-dom": "^19.2.3",
|
|
41
43
|
"@types/three": "^0.180.0",
|
|
42
44
|
"@vitejs/plugin-react": "^5.1.4",
|
|
43
|
-
"@volter/editor-core": "^0.5.
|
|
44
|
-
"@volter/editor-game": "^0.5.
|
|
45
|
-
"@volter/editor-live": "^0.5.
|
|
46
|
-
"@volter/editor-sdk": "^0.5.
|
|
47
|
-
"@volter/editor-threejs": "^0.5.
|
|
48
|
-
"@volter/game-editor": "^0.5.
|
|
49
|
-
"@volter/game-live": "^0.5.
|
|
45
|
+
"@volter/editor-core": "^0.5.68",
|
|
46
|
+
"@volter/editor-game": "^0.5.68",
|
|
47
|
+
"@volter/editor-live": "^0.5.68",
|
|
48
|
+
"@volter/editor-sdk": "^0.5.68",
|
|
49
|
+
"@volter/editor-threejs": "^0.5.68",
|
|
50
|
+
"@volter/game-editor": "^0.5.68",
|
|
51
|
+
"@volter/game-live": "^0.5.68",
|
|
50
52
|
"colyseus": "^0.17.8",
|
|
51
53
|
"storybook": "10.6.0",
|
|
52
54
|
"tsx": "^4.23.0",
|
package/template/src/input.ts
CHANGED
|
@@ -33,7 +33,7 @@ function requireAction(action: string): GameAction {
|
|
|
33
33
|
if (!isGameAction(action)) {
|
|
34
34
|
throw new Error(
|
|
35
35
|
`Unknown input action "${action}" — this game declares ${
|
|
36
|
-
gameActions.length === 0 ? 'none yet (add yours in src/input.ts)' : gameActions.join(', ')
|
|
36
|
+
(gameActions as readonly string[]).length === 0 ? 'none yet (add yours in src/input.ts)' : gameActions.join(', ')
|
|
37
37
|
}.`,
|
|
38
38
|
);
|
|
39
39
|
}
|
package/template/src/main.ts
CHANGED
|
@@ -6,8 +6,11 @@
|
|
|
6
6
|
* Fiber component and renders inside `<Canvas>`; a `dom` root's entry
|
|
7
7
|
* default-exports a React component and renders with react-dom, in a layer
|
|
8
8
|
* that lets pointer events fall through to the world except where its own
|
|
9
|
-
* elements claim them (`pointer-events: auto`)
|
|
10
|
-
*
|
|
9
|
+
* elements claim them (`pointer-events: auto`); a `canvas` root's entry default-exports a
|
|
10
|
+
* `@pixi/react` component and renders inside `<Application>`, with every `pixi.js` class
|
|
11
|
+
* registered first, as the editor's own canvas mount registers them (so a node the editor created,
|
|
12
|
+
* a TilingSprite or a BitmapText, mounts here too). The editor mounts the same entries itself;
|
|
13
|
+
* nothing here runs inside it.
|
|
11
14
|
*
|
|
12
15
|
* `manifestEntryModules` is generated from the manifest's `entry` paths
|
|
13
16
|
* (`manifest-entry-modules-plugin.ts`), so the manifest stays the one list of
|
|
@@ -43,17 +46,85 @@ const container = document.getElementById('game-canvas') as HTMLElement;
|
|
|
43
46
|
const roots = [...(manifest.roots as readonly DeclaredRoot[])].sort(
|
|
44
47
|
(a, b) => (a.zOrder ?? 0) - (b.zOrder ?? 0),
|
|
45
48
|
);
|
|
49
|
+
// The bottom world (the lowest `three` or `canvas` root) takes pointer input and clears opaque;
|
|
50
|
+
// a world stacked above it lets input fall through and clears transparent, as the editor stacks them.
|
|
51
|
+
const bottomWorld = roots.find((root) => root.adapter === 'three' || root.adapter === 'canvas');
|
|
52
|
+
|
|
53
|
+
// A `canvas` world above the bottom one claims the points where Pixi finds an interactive object (a
|
|
54
|
+
// HUD's button), as the editor's input router does: the press goes to that world alone, and every
|
|
55
|
+
// other point falls through to the world beneath. Topmost first.
|
|
56
|
+
const claims: { readonly zOrder: number; readonly canvas: HTMLCanvasElement; readonly hit: (x: number, y: number) => boolean }[] = [];
|
|
57
|
+
const forwarded = new WeakSet<Event>();
|
|
58
|
+
for (const type of ['pointerdown', 'pointerup', 'pointermove', 'click', 'wheel'] as const) {
|
|
59
|
+
container.addEventListener(
|
|
60
|
+
type,
|
|
61
|
+
(event) => {
|
|
62
|
+
if (forwarded.has(event) || claims.length === 0) return;
|
|
63
|
+
const box = container.getBoundingClientRect();
|
|
64
|
+
const { clientX, clientY } = event as MouseEvent;
|
|
65
|
+
const claim = claims.find((entry) => entry.hit(clientX - box.left, clientY - box.top));
|
|
66
|
+
if (!claim) return;
|
|
67
|
+
event.stopPropagation();
|
|
68
|
+
// A copy that bubbles: Pixi hears pointermove on the document and pointerup on the window.
|
|
69
|
+
const copy = new (event.constructor as typeof PointerEvent)(event.type, event as PointerEventInit);
|
|
70
|
+
forwarded.add(copy);
|
|
71
|
+
claim.canvas.dispatchEvent(copy);
|
|
72
|
+
},
|
|
73
|
+
true,
|
|
74
|
+
);
|
|
75
|
+
}
|
|
46
76
|
for (const root of roots) {
|
|
47
77
|
const layer = document.createElement('div');
|
|
48
78
|
layer.style.cssText = 'position:absolute;inset:0;width:100%;height:100%';
|
|
49
79
|
layer.style.zIndex = String(root.zOrder ?? 0);
|
|
80
|
+
if (root.adapter !== 'dom' && root !== bottomWorld) layer.style.pointerEvents = 'none';
|
|
50
81
|
container.appendChild(layer);
|
|
51
82
|
const Entry = entryComponent(root);
|
|
52
83
|
if (root.adapter === 'three') {
|
|
53
|
-
|
|
84
|
+
// R3F's wrapper sets its own `pointer-events: auto`, so a world above the bottom one says `none`
|
|
85
|
+
// itself; `alpha` clears the bottom world opaque, as the editor's renderer does.
|
|
86
|
+
const bottom = root === bottomWorld;
|
|
87
|
+
createRoot(layer).render(
|
|
88
|
+
createElement(
|
|
89
|
+
Canvas,
|
|
90
|
+
{ gl: { alpha: !bottom }, style: bottom ? undefined : { pointerEvents: 'none' } },
|
|
91
|
+
createElement(Entry),
|
|
92
|
+
),
|
|
93
|
+
);
|
|
54
94
|
} else if (root.adapter === 'dom') {
|
|
55
95
|
layer.style.pointerEvents = 'none';
|
|
56
96
|
createRoot(layer).render(createElement(Entry));
|
|
97
|
+
} else if (root.adapter === 'canvas') {
|
|
98
|
+
const [{ Application, extend }, PIXI] = await Promise.all([import('@pixi/react'), import('pixi.js')]);
|
|
99
|
+
extend(PIXI as unknown as Parameters<typeof extend>[0]);
|
|
100
|
+
createRoot(layer).render(
|
|
101
|
+
createElement(
|
|
102
|
+
Application,
|
|
103
|
+
{
|
|
104
|
+
resizeTo: layer,
|
|
105
|
+
antialias: true,
|
|
106
|
+
resolution: globalThis.devicePixelRatio ?? 1,
|
|
107
|
+
autoDensity: true,
|
|
108
|
+
backgroundAlpha: root === bottomWorld ? 1 : 0,
|
|
109
|
+
onInit: (app) => {
|
|
110
|
+
if (root === bottomWorld) return;
|
|
111
|
+
claims.push({
|
|
112
|
+
zOrder: root.zOrder ?? 0,
|
|
113
|
+
canvas: app.canvas,
|
|
114
|
+
// Pixi points its boundary at the last rendered scene inside its own pointer handlers.
|
|
115
|
+
hit: (x, y) => {
|
|
116
|
+
const rendered = app.renderer.lastObjectRendered;
|
|
117
|
+
if (!rendered) return false;
|
|
118
|
+
app.renderer.events.rootBoundary.rootTarget = rendered;
|
|
119
|
+
return app.renderer.events.rootBoundary.hitTest(x, y) !== null;
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
claims.sort((a, b) => b.zOrder - a.zOrder);
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
createElement(Entry),
|
|
126
|
+
),
|
|
127
|
+
);
|
|
57
128
|
} else {
|
|
58
129
|
throw new Error(
|
|
59
130
|
`main.ts: root "${root.id}" declares adapter ${JSON.stringify(root.adapter)}, which this boot does not mount.`,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as h}from"./jsx-runtime-DPjLkJKQ.js";import{i as j}from"./react-canvas-navigation-Cp3cOHJa.js";import{R as E,h as O,i as D}from"./react-story-board-GaXqr03H.js";import{am as z,ao as B,bf as F,fG as L,fH as I,an as X,dy as G,eP as k,ak as K,al as V,c2 as Y,M as H,fI as q,fJ as U,ad as x,fK as W,dp as $,dq as N,ds as Z}from"./index-BRJMIUK0.js";import{registerPresentedPixiApps as J}from"./canvas-preview-frames-C0QTagA3.js";import{R as Q}from"./ReactCanvasControls-CnJrPj-B.js";import{r as m}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{s as tt}from"./story-presentation-DMSYRWaz.js";import{m as et}from"./pixi-story-model-DNkfnWUV.js";import{withPixiStoryMountTurn as T}from"./story-pixi-preview-Da6afqLg.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-SS9EugVg.js";import"./crash-null-boundary-v3a0uEgw.js";import"./story-mount-turn-DFRTj5hi.js";const nt="No story yet",ot={width:160,height:160},A={width:240,height:180},R=96;function st(e){return{stories:e.length,modules:new Set(e.map(n=>n.modulePath)).size}}function rt(e){const n=e.layout;return n==="fullscreen"||n==="padded"||n==="centered"?n:"padded"}function at(e,n,r){if(!r.componentName)return!0;const a=I(e,r.componentName,n);return!a||a.modulePath===n&&a.name===r.name}function it(e){const n=[],r=new Map,a=X();for(const t of e)if(t.ok)for(const o of t.stories){const c=z({modulePath:t.modulePath,regions:a});if(c.medium!=="canvas"){c.via==="undeclared"&&B(t.modulePath,c.reason);continue}if(!at(e,t.modulePath,o))continue;const y=F({modulePath:t.modulePath,...o.title===void 0?{}:{title:o.title}}),g=L(y),u=`${g}/${y.leaf}`;r.set(u,(r.get(u)??0)+1),n.push({identity:{id:`${t.modulePath}#${o.name}`,storyName:o.name,modulePath:t.modulePath,district:g},leafKey:u,leaf:y.leaf,storyLabel:o.label,Component:o.Component,layout:rt(o.parameters)})}return n.map(({identity:t,leafKey:o,leaf:c,storyLabel:y,Component:g,layout:u})=>({identity:{...t,label:(r.get(o)??0)>1?`${c} · ${y}`:c},Component:g,layout:u}))}function ct(e,n){const r=new Set,a=[];for(const t of n){if(t.surface!=="canvas"||t.contentKind==="image")continue;const o=`${t.path}#${t.name}`;r.has(o)||(r.add(o),!I(e,t.name,t.path)&&a.push({key:o,name:t.name,path:t.path,line:t.line}))}return a}function lt(e,n){const r=n==="fullscreen"?e.app.screen:e.stage.getBounds(),a=n==="fullscreen"?0:8,t={x:Math.floor(r.x-a),y:Math.floor(r.y-a),width:Math.ceil(r.width+a*2),height:Math.ceil(r.height+a*2)};if(!Number.isFinite(t.width)||!Number.isFinite(t.height)||t.width<1||t.height<1)return{frameSize:{...A},crop:{x:0,y:0,...A}};if(n!=="fullscreen"){const o=Math.max(R,t.width),c=Math.max(R,t.height);t.x-=(o-t.width)/2,t.y-=(c-t.height)/2,t.width=o,t.height=c}return{frameSize:{width:t.width,height:t.height},crop:t}}function dt(e){return e instanceof Error?e.message:String(e)}async function ut(e,n,r){const a=[],t=[];for(const{identity:o,Component:c,layout:y}of e){if(n?.aborted)break;const g=u=>{t.push({id:o.id,modulePath:o.modulePath,storyName:o.storyName,reason:u})};try{const u=await r(c);if(!et(u.stage)){u.dispose(),g("The story mounted no Pixi content.");continue}a.push({...o,mounted:u,...lt(u,y)})}catch(u){g(dt(u))}}return{exhibits:a,skipped:t}}function pt(e,n=[],r){return T(async a=>{const{exhibits:t,skipped:o}=await ut(it(e),r,a),c={exhibits:t,ghosts:ct(e,n),skipped:o};if(r?.aborted)throw _(c),new Error("The 2D board build was superseded by a newer one.");return c})}function M(e){return T(async()=>{_(e)})}function _(e){for(const n of e.exhibits)try{n.mounted.dispose()}catch(r){console.error("[canvas-board] a story mount failed to dispose.",r)}}const mt="2D",ft=4;function ht(e){return[...e.exhibits.map(n=>({id:n.id,label:n.label,modulePath:n.modulePath,...n.district?{title:n.district}:{},frameSize:n.frameSize})),...e.ghosts.map(n=>({id:n.key,label:n.name,modulePath:n.path,title:nt,frameSize:ot}))]}function yt(e,n,r){const a=ht(n),t=a[0];if(!t)return null;const o=document.createElement("div");o.dataset.testid="canvas-board-layer",o.style.position="absolute",o.style.left="0",o.style.top="0",o.style.transformOrigin="0 0",e.appendChild(o);let c=null,y=t.id;c=O(o,a,t.id,(i,f)=>{y=i,c?.activate(i,f==="zoom"),r?.()},tt(a));const g=[];for(const i of n.exhibits){const f=c.frames.get(i.id);if(!f)continue;const p=i.mounted.host;p.setAttribute("style",`position:absolute;left:${-i.crop.x}px;top:${-i.crop.y}px;width:${i.mounted.app.screen.width}px;height:${i.mounted.app.screen.height}px;overflow:visible;contain:layout paint;`);const P=i.mounted.app.canvas;P.style.display="block",P.style.width=`${i.mounted.app.screen.width}px`,P.style.height=`${i.mounted.app.screen.height}px`,f.content.appendChild(p),g.push(P)}for(const i of n.ghosts){const f=c.frames.get(i.key);if(!f)continue;f.element.style.border=`1px dashed ${x.boundary.strong}`;const p=document.createElement("div");p.dataset.testid="canvas-board-ghost",p.textContent="No story yet",p.style.position="absolute",p.style.inset="0",p.style.display="flex",p.style.alignItems="center",p.style.justifyContent="center",p.style.color=x.content.dim,p.style.font=`11px ${x.typography.sans}`,p.style.pointerEvents="none",f.content.appendChild(p)}const u=J(n.exhibits.map(i=>i.mounted.app)),b=()=>{const i=N();o.style.transform=Z(i)??"";const f=i.zoom>=1?"pixelated":"auto";for(const p of g)p.style.imageRendering=f},w=$(b);b();const v=requestAnimationFrame(()=>c?.fitAll());let S=!1,s=0,l=0,d=0;const C=i=>{s=requestAnimationFrame(C),d+=l===0?16:Math.min(100,i-l),l=i;for(const f of n.exhibits)try{f.mounted.ticker.update(d)}catch(p){console.error("[canvas-board] an exhibit failed to tick.",p)}};return{selectAt(i,f){return c?.selectAtClientPoint(i,f)??!1},activeStoryId(){return y},zoomAt(i,f){return c?.zoomAtClientPoint(i,f)??!1},setPlaying(i){i!==S&&(S=i,i?(l=0,s=requestAnimationFrame(C)):(cancelAnimationFrame(s),s=0))},dispose(){cancelAnimationFrame(s),cancelAnimationFrame(v),w(),u();for(const i of n.exhibits)i.mounted.host.remove();c?.dispose(),c=null,o.remove()}}}function gt({active:e}){const n=m.useSyncExternalStore(K,V),r=m.useRef(null),a=m.useRef(null),t=m.useRef(null),o=m.useRef(null),[c,y]=m.useState({status:"idle"}),[g,u]=m.useState(e);m.useEffect(()=>{e&&u(!0)},[e]),m.useEffect(()=>{const s=r.current;if(s)return j(s)},[]),m.useEffect(()=>{if(!g)return;const s=new AbortController;let l=null;return y({status:"building"}),Y().then(d=>(d.ok||H.warn(`Component index unavailable, so this board shows no ghost frames: ${d.reason}`,"canvas-board"),pt(n,d.ok?d.entries:[],s.signal))).then(d=>{if(s.signal.aborted){M(d);return}l=d,y({status:"ready",board:d})},d=>{s.signal.aborted||y({status:"error",message:d instanceof Error?d.message:String(d)})}),()=>{s.abort(),l&&M(l)}},[n,g]);const b=c.status==="ready"?c.board:null,[w,v]=m.useState(null);m.useEffect(()=>{const s=r.current;if(!s||!b)return;const l=yt(s,b,()=>{v(a.current?.activeStoryId()??null)});return a.current=l,v(l?.activeStoryId()??null),()=>{a.current=null,l?.dispose()}},[b]);const S=b?.exhibits.find(s=>s.id===w)??null;return m.useEffect(()=>{if(e)return q(k,()=>({adapter:null,nodeId:null}))},[e]),m.useEffect(()=>{if(!(!e||!S))return U(k,()=>({id:S.id,title:S.label,kindLabel:"Canvas story",note:{text:`${S.storyName} · ${S.modulePath}`,testId:"canvas-board-subject-note"},sections:[]}))},[e,S]),m.useEffect(()=>(a.current?.setPlaying(e),()=>a.current?.setPlaying(!1)),[e,b]),h.jsxs("div",{"data-testid":"canvas-board","data-vgai-backdrop-color":e?E:void 0,"data-vgai-backdrop-policy":e?"dark-frost":void 0,style:{position:"absolute",inset:0,overflow:"hidden",pointerEvents:"auto",touchAction:"none",userSelect:"none",WebkitUserSelect:"none",backgroundColor:E},ref:r,onPointerDown:s=>{t.current={x:s.clientX,y:s.clientY},o.current={x:s.clientX,y:s.clientY},s.currentTarget.setPointerCapture(s.pointerId)},onPointerMove:s=>{const l=o.current;if(!l)return;const d=s.clientX-l.x,C=s.clientY-l.y;d===0&&C===0||(o.current={x:s.clientX,y:s.clientY},W(d,C))},onPointerUp:s=>{const l=t.current;t.current=null,o.current=null,s.currentTarget.hasPointerCapture(s.pointerId)&&s.currentTarget.releasePointerCapture(s.pointerId),!(!l||Math.hypot(s.clientX-l.x,s.clientY-l.y)>ft)&&a.current?.selectAt(s.clientX,s.clientY)},onPointerCancel:()=>{t.current=null,o.current=null},onDoubleClick:s=>{a.current?.zoomAt(s.clientX,s.clientY)},children:[h.jsx(bt,{}),b?h.jsx(xt,{board:b}):h.jsxs("div",{"data-testid":"canvas-board-status",style:{padding:16,fontSize:12,color:x.content.muted},children:[c.status==="error"&&c.message,c.status==="building"&&"Mounting every canvas story off-screen…",c.status==="idle"&&"Open this tab to lay out every canvas story at 1× texels."]}),h.jsx(Q,{containerRef:r,context:null,boardOnly:!0})]})}function bt(){const e=m.useSyncExternalStore($,N),n=Math.max(8,24*e.zoom),r=Math.max(.7,Math.min(1.4,e.zoom));return h.jsx("div",{"data-testid":"react-design-canvas-backdrop","aria-hidden":"true",style:{position:"absolute",inset:0,pointerEvents:"none",backgroundColor:E,backgroundImage:`radial-gradient(circle, ${D} ${r}px, transparent ${r}px)`,backgroundPosition:`${e.x}px ${e.y}px`,backgroundSize:`${n}px ${n}px`}})}function xt({board:e}){const[n,r]=m.useState(!1),a=st(e.skipped);return h.jsxs("div",{"data-testid":"canvas-board-status",style:{position:"absolute",left:8,bottom:8,maxWidth:420,padding:"4px 8px",borderRadius:x.shape.small,background:x.surface.raised,border:`1px solid ${x.boundary.default}`,fontSize:10,color:x.content.muted,pointerEvents:"auto"},children:[e.exhibits.length," exhibit",e.exhibits.length===1?"":"s",e.ghosts.length>0&&h.jsxs(h.Fragment,{children:[" · ",e.ghosts.length," component",e.ghosts.length===1?"":"s"," without stories"]}),e.skipped.length>0&&h.jsxs(h.Fragment,{children:[" · ",h.jsxs("span",{role:"button",tabIndex:0,"aria-expanded":n,onClick:()=>r(t=>!t),onKeyDown:t=>{(t.key===" "||t.key==="Enter")&&(t.preventDefault(),r(o=>!o))},style:{cursor:"pointer",color:x.accent.default},children:[a.stories," ",a.stories===1?"story":"stories"," in ",a.modules," ",a.modules===1?"module":"modules"," not on this board"]})]}),n&&h.jsx("div",{style:{marginTop:4,maxHeight:160,overflow:"auto"},children:e.skipped.map(t=>h.jsxs("div",{style:{padding:"1px 0"},children:[h.jsxs("code",{style:{color:x.content.dim},children:[t.modulePath,"#",t.storyName]})," ","— ",t.reason]},t.id))})]})}function Bt(){return G({id:k,title:mt,kind:"content-browser",workspaceRole:"workspace-reference",Content:gt,closeable:!1,readOnly:!0,presentation:()=>({kind:"workspace",id:k})},{category:"canvas"})}export{k as CANVAS_COMPONENTS_DOCUMENT_ID,Bt as installCanvasBoardDocument};
|