@volter/game-editor 0.5.68 → 0.5.69
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 +10954 -5077
- package/LICENSE +1 -1
- package/LICENSE-BLENDER +2 -2
- package/NOTICE +2 -2
- package/additions/canvas/package.json +8 -0
- package/additions/canvas/src/canvas-mount.ts +46 -0
- package/additions/canvas/src/scene2d.tsx +18 -0
- package/catalog/entries/bake.json +1 -1
- package/catalog/entries/blender.json +3 -3
- package/catalog/entries/music.json +5 -5
- package/catalog/project-source/LICENSE +1 -1
- package/catalog/project-source/src/contributions/bake.kind.ts +2 -2
- package/catalog/project-source/src/contributions/builder-document.tsx +1 -1
- package/catalog/project-source/src/contributions/builder-ui.tsx +3 -3
- package/catalog/project-source/src/contributions/module-source.ts +4 -4
- package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +59 -59
- package/catalog/project-source/src/lib/static-batch/Frozen.tsx +1 -1
- package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +1 -1
- package/catalog/project-source/src/tools/bake-preview.tool.ts +9 -9
- package/dist/.vite/manifest.json +3999 -3999
- package/dist/assets/{AssetBudgetPanel-P2PeL_X5.js → AssetBudgetPanel-BMR3AQhc.js} +4 -4
- package/dist/assets/AudioViewer-DESxi7pU.js +1 -0
- package/dist/assets/{CanvasBoardDocument-BFJdTVGp.js → CanvasBoardDocument-Q_nrYFlB.js} +1 -1
- package/dist/assets/CanvasSceneViewport-WZMoKy_F.js +1 -0
- package/dist/assets/ColorInput-C2EK-OnD.js +1 -0
- package/dist/assets/{EntityModelDocument-Du8wIbyK.js → EntityModelDocument-B_4ENTCq.js} +1 -1
- package/dist/assets/{EnvironmentAssetDocument-_SttfMY_.js → EnvironmentAssetDocument-BZBp6OFJ.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-CWudWnfd.js → GameplaySessionTimeline-1ivaucpv.js} +1 -1
- package/dist/assets/ImageViewer-D16OExYu.js +1 -0
- package/dist/assets/{InspectorCanvasPreview-CEr_Kxna.js → InspectorCanvasPreview-BrFjhoiD.js} +1 -1
- package/dist/assets/InspectorObjectPreview-CY5xVsPR.js +1 -0
- package/dist/assets/JsonAssetDocument-CvjTlcdr.js +2 -0
- package/dist/assets/{LiveModuleDocument-BWjOzO_6.js → LiveModuleDocument-ne1o9giX.js} +1 -1
- package/dist/assets/{LutAssetDocument-DIc6nsht.js → LutAssetDocument-Cp0v-O7q.js} +1 -1
- package/dist/assets/{ModelAssetDocument-_CqTsX_A.js → ModelAssetDocument-Ceu7OIN9.js} +1 -1
- package/dist/assets/{NonThreeAuthoringBootstrap-C-V23E1e.js → NonThreeAuthoringBootstrap-DiElZf-e.js} +1 -1
- package/dist/assets/Object3DDocumentToolbar-BLNamqii.js +1 -0
- package/dist/assets/Object3DDocumentViewport-D6QoHfa_.js +2 -0
- package/dist/assets/{Object3DPreview-BPHEr3vI.js → Object3DPreview-ZVokr044.js} +1 -1
- package/dist/assets/OnlineAssetDetail-Dnckd7zB.js +1 -0
- package/dist/assets/PlayBar-DsMitSgy.js +1 -0
- package/dist/assets/{QuarksAssetDocument-4Dne3EHx.js → QuarksAssetDocument-B5J8uHFM.js} +1 -1
- package/dist/assets/ReactCanvasControls-CmfvxJYY.js +1 -0
- package/dist/assets/RootSelectionOverlay-BWsNiSuM.js +1 -0
- package/dist/assets/{ShaderAssetDocument-W3ZjLCkt.js → ShaderAssetDocument-CT7XzsZq.js} +4 -4
- package/dist/assets/ShadowEditor-YO5KEfnz.js +1 -0
- package/dist/assets/{SourceAssetViewer-BGUeDAEv.js → SourceAssetViewer-FSLup2km.js} +1 -1
- package/dist/assets/StageHost-DYfGYwvq.js +2 -0
- package/dist/assets/{StoryPreviewMount-Di8uMovM.js → StoryPreviewMount-BhvT5QlB.js} +1 -1
- package/dist/assets/ThreeBoardDocument-B-z2nwnH.js +2 -0
- package/dist/assets/{ThreeIsolationSceneContent-BAKurKW5.js → ThreeIsolationSceneContent-B5pU4Y6k.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-CffvGJ1h.js → ToolObject3DPreview-VtraiQ4Q.js} +1 -1
- package/dist/assets/Toolbar-M62Gob9T.js +1 -0
- package/dist/assets/{TransientHint-CgmkrmKF.js → TransientHint-Cc40mHWE.js} +1 -1
- package/dist/assets/VideoViewer-BxcUwXQm.js +1 -0
- package/dist/assets/ViewportShadingMenu-BoMPnTVh.js +1 -0
- package/dist/assets/active-ingest-0QjJWb7i.js +3 -0
- package/dist/assets/{animation-clock-fLmY_3--.js → animation-clock-BXEwUJtz.js} +1 -1
- package/dist/assets/animation-mixers.service-C-Ko4KzM.js +1 -0
- package/dist/assets/animation-timeline.utility-Bl15-rYb.js +1 -0
- package/dist/assets/{asset-budget-asset.menu-BDRDWrvx.js → asset-budget-asset.menu-BUa3g0Wy.js} +1 -1
- package/dist/assets/{asset-budget.action-tQmNGQHC.js → asset-budget.action-Dl5eVPIo.js} +1 -1
- package/dist/assets/{asset-budget.document-BthgX37Z.js → asset-budget.document-DJylQ-0h.js} +1 -1
- package/dist/assets/{asset-budget.menu-DfyWVH6p.js → asset-budget.menu-BJtvNMLj.js} +1 -1
- package/dist/assets/asset-editor-persistence-BIbf5u0Q.js +1 -0
- package/dist/assets/asset-loaders-DoNflsHL.js +2 -0
- package/dist/assets/{asset-preview-Cv7tfD98.js → asset-preview-DxlSdRZn.js} +1 -1
- package/dist/assets/{audio-unlock.service-BvHvZjzx.js → audio-unlock.service-CTaiyXF9.js} +1 -1
- package/dist/assets/audio.utility-CEmNc68t.js +1 -0
- package/dist/assets/autoplay.service-BZLSUyL8.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-Cg5ALSpr.js → babylon-authoring-adapter-BZvV2bz_.js} +1 -1
- package/dist/assets/binding-resolver-DGbk9_XR.js +2 -0
- package/dist/assets/blender-emscripten-engine-B7lfg-RX.js +2 -0
- package/dist/assets/{blender-node-editor.document-B92MO51u.js → blender-node-editor.document-wXJobGNH.js} +1 -1
- package/dist/assets/{blender-properties-tab-CDVyDAbf.js → blender-properties-tab-7GFf80ev.js} +1 -1
- package/dist/assets/{blender-runtime-host-CuniE0sy.js → blender-runtime-host-CILxrx5T.js} +2 -2
- package/dist/assets/{blender-runtime-skin-B_tOz5j5.js → blender-runtime-skin-Cd5lQYsC.js} +7 -7
- package/dist/assets/{blender-runtime.document-DxUwLiEW.js → blender-runtime.document-C0r_R49S.js} +7 -7
- package/dist/assets/{blender-timeline.document-BdEEoQbK.js → blender-timeline.document-BaISZMBc.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-EMSUlRh4.js → blender-uv-editor.document-CT_fsyyA.js} +1 -1
- package/dist/assets/blender-version.status-DzEx7u7k.js +1 -0
- package/dist/assets/blender-wali-engine-DOiQCBXH.js +2 -0
- package/dist/assets/{blender.command-BkBML2SY.js → blender.command-DdiKd8mZ.js} +1 -1
- package/dist/assets/blender.status-BMETIbb2.js +1 -0
- package/dist/assets/board-guides-CjHQ9Ynm.js +1 -0
- package/dist/assets/body-marks-C1LxJtQb.js +1 -0
- package/dist/assets/{bridge.command-VnplZ81v.js → bridge.command-DXUeavn5.js} +3 -3
- package/dist/assets/{browserAll-BCmkqg8n.js → browserAll-Dg46xT22.js} +1 -1
- package/dist/assets/{build-player.document-DV7YcJQt.js → build-player.document-BHwVV3K0.js} +1 -1
- package/dist/assets/build-profiles.document-HkpS-Kxa.js +2 -0
- package/dist/assets/build-progress.status-u1J0Rm1D.js +1 -0
- package/dist/assets/{build-session-BGe0eGrQ.js → build-session-BLboUUbw.js} +2 -2
- package/dist/assets/{build.action-Bdj4ZEL_.js → build.action-C00DL83N.js} +1 -1
- package/dist/assets/{build.command-DAWiYvPa.js → build.command-Cjk_NY75.js} +1 -1
- package/dist/assets/build.header-BWNmNWFT.js +1 -0
- package/dist/assets/{build.menu-BiRNC_xc.js → build.menu-BBYtqCIq.js} +1 -1
- package/dist/assets/{build.service-Dw9K6VSF.js → build.service-DOU15tKN.js} +1 -1
- package/dist/assets/{camera-C-qXzXFf.js → camera-7DGyYW7Y.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-BDrwWRlU.js → camera-runtime.inspector-n-jiOR-3.js} +1 -1
- package/dist/assets/{canvas-design-mount-DLn49Zle.js → canvas-design-mount-CSRHU-ag.js} +4 -4
- package/dist/assets/canvas-entry-runtime-BST8yRuK.js +2 -0
- package/dist/assets/{canvas-preview-frames-B5xFRjhQ.js → canvas-preview-frames-Cja32aW2.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-DQ_leYyi.js → canvas-story-capture.service-D5R5HJ8n.js} +2 -2
- package/dist/assets/capability-coverage-ByWftxk4.js +7 -0
- package/dist/assets/{collaboration-presence-BOS1t8wI.js → collaboration-presence-D6MC9xJN.js} +1 -1
- package/dist/assets/{collider-Bf4Uk6LW.js → collider-B78EcUc9.js} +1 -1
- package/dist/assets/{component-board.service-DFSSCaCf.js → component-board.service-BaQI5Oas.js} +2 -2
- package/dist/assets/component-board.service-CkjrsD8x.js +2 -0
- package/dist/assets/{component-board.service-CpVXGhz5.js → component-board.service-Dvjz_g-x.js} +2 -2
- package/dist/assets/component-contracts.service-C3-AXQp7.js +1 -0
- package/dist/assets/component-instance-root-DLI40MiB.js +1 -0
- package/dist/assets/{component-verbs.command-DGzZAV_Z.js → component-verbs.command-Brr_WcaR.js} +1 -1
- package/dist/assets/{component-verbs.service-D1rVRogp.js → component-verbs.service-DC2sC3j3.js} +1 -1
- package/dist/assets/{config-D-EAAhqP.js → config-BI_7osdR.js} +4 -4
- package/dist/assets/{configurations-_HZOWZPy.js → configurations-XP9YLkrt.js} +1 -1
- package/dist/assets/connection.status-BhRwcFx0.js +1 -0
- package/dist/assets/{constraint-5KLYpGm7.js → constraint-Bp1l8hY-.js} +1 -1
- package/dist/assets/constraints.inspector-Dm1cycK3.js +1 -0
- package/dist/assets/{content-bounds-DKBD7nsv.js → content-bounds-DROIchTa.js} +1 -1
- package/dist/assets/{contract-system-adapters-h6OUBRYA.js → contract-system-adapters-Cn7OW_ay.js} +1 -1
- package/dist/assets/coverage.service-l42ty7lr.js +3 -0
- package/dist/assets/{create-runtime-Bg2uYMfh.js → create-runtime-B_uTwsmi.js} +2 -2
- package/dist/assets/curve-THOUsg-j.js +1 -0
- package/dist/assets/{data-asset-7Nfmx-28.js → data-asset-DAANayR6.js} +1 -1
- package/dist/assets/data-check-core-CHqar_E8.js +1 -0
- package/dist/assets/data-ref-CN34UeVw.js +1 -0
- package/dist/assets/debug-bridge-BD1XVAIB.js +1 -0
- package/dist/assets/debug-registry-ggQWxtu-.js +1 -0
- package/dist/assets/{deferred-ingest-play-Bej67_y9.js → deferred-ingest-play-B2JUlwlT.js} +2 -2
- package/dist/assets/{design-time-canvas-mount-CFW9ZWuk.js → design-time-canvas-mount-as9cN9I6.js} +2 -2
- package/dist/assets/design-time-layers-BRseeSmV.js +1 -0
- package/dist/assets/{design-time-mount.service-DJeAPUB_.js → design-time-mount.service-BTVu3yKo.js} +2 -2
- package/dist/assets/{design-time-mount.service-_R1UDCw3.js → design-time-mount.service-DKvc7lVK.js} +2 -2
- package/dist/assets/design-time-react-mount-C7rB56QD.js +1 -0
- package/dist/assets/{document-preview-three-5cbuuJMH.js → document-preview-three-CxmRhCcV.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-CoESNvrM.js → dom-authoring-adapter-L8OzXfmE.js} +1 -1
- package/dist/assets/{draco3d-Sk9K4AUT.js → draco3d-BjNuXv66.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-CH6J-8N7.js → edit-mode-audio.service-BwI5u845.js} +1 -1
- package/dist/assets/edit-mode-authoring-D5f7aHHl.js +1 -0
- package/dist/assets/{edit-mode-networking.service-C4o2pGHX.js → edit-mode-networking.service-DqP_4lbI.js} +1 -1
- package/dist/assets/editor-api-BM7H_F4G.js +1 -0
- package/dist/assets/{editor-layers-B4oYfpj8.js → editor-layers-D-CTUqco.js} +1 -1
- package/dist/assets/editor-presentation-activity-CqJH4G9t.js +1 -0
- package/dist/assets/{editor-shell-store-Bh1S7M54.js → editor-shell-store-DHVWS8cE.js} +1 -1
- package/dist/assets/{entity-object-B_5Gc0Ky.js → entity-object-MKYemTFM.js} +1 -1
- package/dist/assets/{extend-DcEyE5jI.js → extend-BrgqZiMY.js} +1 -1
- package/dist/assets/{fork-menu-CKjNh3MO.js → fork-menu-DE2MK3Nq.js} +1 -1
- package/dist/assets/{frame-debugger-store-D5YViF_8.js → frame-debugger-store-BXoLKTdZ.js} +1 -1
- package/dist/assets/game-audio-BeCyd0Ha.js +1 -0
- package/dist/assets/{game-contract-seams-C0AVYwvO.js → game-contract-seams-tyKDsfaP.js} +1 -1
- package/dist/assets/{game-css-scope-transform-8GOvVu1s.js → game-css-scope-transform-DcjrwtVc.js} +2 -2
- package/dist/assets/game-document.service-CTb2itHQ.js +1 -0
- package/dist/assets/{game-eval.command-4wa9vqWE.js → game-eval.command-CpDKXOQU.js} +2 -2
- package/dist/assets/game-module-access-BTInp2NG.js +1 -0
- package/dist/assets/game-network-DW5ARz4R.js +22 -0
- package/dist/assets/{gameplay-export-K5AcStVC.js → gameplay-export-cHk3v9y-.js} +1 -1
- package/dist/assets/gameplay-replay-HRenPTtU.js +1 -0
- package/dist/assets/{gameplay.command-DoWqBWhH.js → gameplay.command-DcY2lKKX.js} +1 -1
- package/dist/assets/generation-CdOATubd.css +1 -0
- package/dist/assets/{generation-jobs-CiabIfR0.js → generation-jobs-CJBehuUp.js} +1 -1
- package/dist/assets/generation.service-BMOc-C9i.js +1 -0
- package/dist/assets/{generations-DU9rCeQR.js → generations-ssgVOe_6.js} +1 -1
- package/dist/assets/generations.status-B_SmPReI.js +1 -0
- package/dist/assets/hierarchy-marks-BuCO8Ke-.js +1 -0
- package/dist/assets/hierarchy-marks-CsTaTkc7.js +1 -0
- package/dist/assets/hosted-asset-materialization-CiXZI85V.js +2 -0
- package/dist/assets/{ibl-override-material-CiKkaOTW.js → ibl-override-material-CMo_a49U.js} +1 -1
- package/dist/assets/index-B0S4fQQV.js +1 -0
- package/dist/assets/{index-Kb9_s5aP.js → index-B9bd4k-t.js} +1 -1
- package/dist/assets/index-BMxv2MNV.js +1 -0
- package/dist/assets/{index-CC1puVjo.js → index-Bm4_DmRO.js} +1 -1
- package/dist/assets/{index-BsYc2Oyj.js → index-BvBlIRwM.js} +1 -1
- package/dist/assets/{index-C4AUQbmq.js → index-BweKDdi_.js} +1 -1
- package/dist/assets/{index-CaG87ZF-.js → index-C5ZAyrKq.js} +271 -270
- package/dist/assets/index-CPiRKiDC.css +1 -0
- package/dist/assets/index-CfpGZrbC.js +1 -0
- package/dist/assets/index-Czvj6whv.js +1 -0
- package/dist/assets/{index-C20Flc1s.js → index-DgPDGGSV.js} +2 -2
- package/dist/assets/{inference-diagnostics-MGcIHEX6.js → inference-diagnostics-DLt9ql9I.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-D2okO6JI.js → ingest-boot-viewport-BXVXjYpG.js} +1 -1
- package/dist/assets/ingest-siblings-DWJ7OGB_.js +1 -0
- package/dist/assets/ingest-source-persistence-6ShMoSCa.js +1 -0
- package/dist/assets/ingest.service-BBbX8ibg.js +1 -0
- package/dist/assets/{inspect-C8RP8G5F.js → inspect-Cz3Zyx_1.js} +1 -1
- package/dist/assets/inspection-D8fZOHCM.js +1 -0
- package/dist/assets/instances.command-BrdlngrL.js +1 -0
- package/dist/assets/{json-history-resource-CTXRV4GD.js → json-history-resource-Uqrihfc8.js} +1 -1
- package/dist/assets/{layered-pick-B_-BRrRD.js → layered-pick-CAVQMPI7.js} +1 -1
- package/dist/assets/{light-CskDQ8gF.js → light-CqzsCWeJ.js} +1 -1
- package/dist/assets/{live-project-verbs-BOAQN3ME.js → live-project-verbs-CdFmLYOo.js} +1 -1
- package/dist/assets/{machine.document-BxOoCOo9.js → machine.document-DRIFOVaa.js} +1 -1
- package/dist/assets/{machines.finder-CqEceWzS.js → machines.finder-DPCT6few.js} +1 -1
- package/dist/assets/material-BVApn1V_.js +1 -0
- package/dist/assets/{material-factory-qB9pzcQf.js → material-factory-B_75xxFD.js} +1 -1
- package/dist/assets/{mesh-5--4qA-C.js → mesh-DdA3mExo.js} +1 -1
- package/dist/assets/model-asset-sections-D1uxOu2v.css +1 -0
- package/dist/assets/model-asset-sections.service-CJnSIckZ.js +1 -0
- package/dist/assets/{model-inspection-MrJY0U_-.js → model-inspection-DvspbmJl.js} +1 -1
- package/dist/assets/{model-thumbnail-uk-2sblh.js → model-thumbnail-BmQs-h6t.js} +1 -1
- package/dist/assets/{models.finder-rk8dhgO8.js → models.finder-Qv_Hsccy.js} +1 -1
- package/dist/assets/module-mode-MJ4Gbsry.js +2 -0
- package/dist/assets/mount-canvas-ingest-root-BxtM8OaB.js +2 -0
- package/dist/assets/mount-dom-ingest-root-pGatqO46.js +2 -0
- package/dist/assets/{mount-ingest-root-BC3-1Cw1.js → mount-ingest-root-C7jb-mCl.js} +2 -2
- package/dist/assets/{mount-manifest-QJOB11Kv.js → mount-manifest-BfoHBuzn.js} +1 -1
- package/dist/assets/mount-readiness-DyAd17pe.js +4 -0
- package/dist/assets/mount-three-ingest-root-Boa5mcaF.js +1 -0
- package/dist/assets/{mounted-authoring-B7RL_V28.js → mounted-authoring-DxMISwvR.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-CnYhX3vW.js → mounted-story-viewport-source-DfnLxI1f.js} +1 -1
- package/dist/assets/{native-debug-module-B-rWJfWE.js → native-debug-module-BlrALjM3.js} +1 -1
- package/dist/assets/{navigation-BVu-aVmF.js → navigation-CqG5o5AR.js} +1 -1
- package/dist/assets/{navmesh.menu-C3M63eR4.js → navmesh.menu-D4TdVDhe.js} +1 -1
- package/dist/assets/{navmesh.service-B0H1fUfn.js → navmesh.service-DWKT5ruQ.js} +1 -1
- package/dist/assets/network-observer.service-ZRAquNq4.js +1 -0
- package/dist/assets/network.utility-DjeOEvAY.js +1 -0
- package/dist/assets/object-marks-BnvSuCTt.js +1 -0
- package/dist/assets/{object3d-authoring-subject-BDrxd1GA.js → object3d-authoring-subject-XccsO0xG.js} +1 -1
- package/dist/assets/{object3d-document-session-registry-OjqzJ86S.js → object3d-document-session-registry-CMRJdFp6.js} +2 -2
- package/dist/assets/{oid-transform-Bzc2ZJSH.js → oid-transform-DaA6yW6o.js} +1 -1
- package/dist/assets/{particles-Be7AvO4c.js → particles-DsQRcDBY.js} +1 -1
- package/dist/assets/{performance-profiler-OwnXQX0M.js → performance-profiler-CMbwGBuk.js} +1 -1
- package/dist/assets/pixi-authoring-adapter-BoBt8bB5.js +1 -0
- package/dist/assets/pixi-live-write-target-CYZgvC6U.js +1 -0
- package/dist/assets/{play.command-CIGRq8ow.js → play.command-D9JGJP-e.js} +2 -2
- package/dist/assets/pose-guard-CLabLSzf.js +1 -0
- package/dist/assets/presentation-COhHQdmR.js +1 -0
- package/dist/assets/{product-BN31wSnB.js → product-CaRGoiIH.js} +1 -1
- package/dist/assets/{profiler.action-D57Kj9ym.js → profiler.action-Cz7HYWjh.js} +1 -1
- package/dist/assets/{profiler.menu-Dh9Q5DDx.js → profiler.menu-D5aR_FBy.js} +1 -1
- package/dist/assets/profiler.utility-KwxlIPKb.js +1 -0
- package/dist/assets/{project-authoring-session-LCJAwGrD.js → project-authoring-session-DKXHVwxO.js} +2 -2
- package/dist/assets/project-provenance-BGnJXJwa.js +1 -0
- package/dist/assets/{properties-bone-constraints.inspector-CaIDq5nN.js → properties-bone-constraints.inspector-Bo-sU8eR.js} +1 -1
- package/dist/assets/{properties-bone.inspector-D2fcQGMF.js → properties-bone.inspector-BQiWplQv.js} +1 -1
- package/dist/assets/{properties-collection.inspector-CF5AtTAd.js → properties-collection.inspector-C5BnR-GE.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-Bj2itDrS.js → properties-constraints.inspector-CyheU12R.js} +1 -1
- package/dist/assets/{properties-data.inspector-BfRqk0Xo.js → properties-data.inspector-CkycARja.js} +1 -1
- package/dist/assets/{properties-material.inspector-Bf8H0mvu.js → properties-material.inspector-Bl_PUmY-.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-BKShc1TH.js → properties-modifiers.inspector-j7SnOxQq.js} +1 -1
- package/dist/assets/{properties-object.inspector-YBh8ABnN.js → properties-object.inspector-DcR3MGLK.js} +1 -1
- package/dist/assets/{properties-output.inspector-CVkzfs-l.js → properties-output.inspector-BLjw6K4b.js} +1 -1
- package/dist/assets/{properties-particles.inspector-ChDpAq-2.js → properties-particles.inspector-BUIm2-Jf.js} +1 -1
- package/dist/assets/{properties-physics.inspector-BLEM7aMj.js → properties-physics.inspector-DNvRcxb6.js} +1 -1
- package/dist/assets/{properties-render.inspector-vU4D9xLL.js → properties-render.inspector-8FMZ-qoZ.js} +1 -1
- package/dist/assets/{properties-scene.inspector-C-DoN-kL.js → properties-scene.inspector-Dx7_z75k.js} +1 -1
- package/dist/assets/{properties-texture.inspector-DySxy1oU.js → properties-texture.inspector-WT15951-.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-DEKxMahJ.js → properties-view-layer.inspector-P7VNTdqr.js} +1 -1
- package/dist/assets/{properties-world.inspector-m5qL_TQV.js → properties-world.inspector-B3t1q8TF.js} +1 -1
- package/dist/assets/r3f-design-session-lsbFnoWH.js +2 -0
- package/dist/assets/{r3f-physics-binding-Bgzzd4ol.js → r3f-physics-binding-Cx8yhuwt.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-C8oMjdTL.js → r3f-source-authoring-adapter-jH3G0TeH.js} +1 -1
- package/dist/assets/react-canvas-navigation-B_gOe3CI.js +1 -0
- package/dist/assets/react-inspector.service-CZf1vfdX.js +1 -0
- package/dist/assets/react-story-board-CCm2Opwn.js +1 -0
- package/dist/assets/{react-three-rapier.esm-BR2ttgLS.js → react-three-rapier.esm-CHXGG51p.js} +1 -1
- package/dist/assets/react-world-authoring-adapter-CnzxMtYz.js +1 -0
- package/dist/assets/{realm-services-DefTrXnY.js → realm-services-Do9J6nsb.js} +1 -1
- package/dist/assets/reflection-probe-capture.inspector-BAjjIybz.js +1 -0
- package/dist/assets/{reflection-probe-BHNGwVyz.js → reflection-probe-sIto9mh0.js} +1 -1
- package/dist/assets/registry-Xnduk02T.js +1 -0
- package/dist/assets/{relative-import-specifier-DQzkawgj.js → relative-import-specifier-CPFTrxi4.js} +1 -1
- package/dist/assets/{render-env-BZ7LsGfk.js → render-env-YJlI8K0i.js} +1 -1
- package/dist/assets/{render-features-C7QwmhCo.js → render-features-DMSV2qKJ.js} +1 -1
- package/dist/assets/{render-settings-BBvkacR3.js → render-settings-CRyDhHyz.js} +1 -1
- package/dist/assets/resolve-three-D27rMc37.js +702 -0
- package/dist/assets/root-seam-contract-gjWUd5uu.js +1 -0
- package/dist/assets/{run-selection-BUeubtHj.js → run-selection-B0jOdyYt.js} +1 -1
- package/dist/assets/scene-capture-Di9cM1p4.js +1 -0
- package/dist/assets/scene-document.service-XxGs4HHE.js +2 -0
- package/dist/assets/{scene-framing-PVMqGU8h.js → scene-framing-DkZKDwH3.js} +1 -1
- package/dist/assets/{scene-index--lRWLEmW.js → scene-index-DHeKmalD.js} +1 -1
- package/dist/assets/{scene-query-s1y04OVB.js → scene-query-ByZtXA2m.js} +1 -1
- package/dist/assets/seeded-random-BJthDRMu.js +1 -0
- package/dist/assets/{session-CTXsU1lK.js → session-x8E_NJk2.js} +34 -34
- package/dist/assets/{setup-renderer-OOw1SykJ.js → setup-renderer-F9mG7t6r.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-RmutT5Dt.js → source-object3d-authoring-adapter-CvmFpSUj.js} +1 -1
- package/dist/assets/{source-persistence-backend-HviqjKZ2.js → source-persistence-backend-au3WtEn6.js} +1 -1
- package/dist/assets/{spark-renderer-lifecycle-DfYpvEJa.js → spark-renderer-lifecycle-B6Axb6jm.js} +1 -1
- package/dist/assets/{stage-keyboard-DDi7S27C.js → stage-keyboard-BQkndG_D.js} +1 -1
- package/dist/assets/stage-overlay-set-g6eWhuRv.js +1 -0
- package/dist/assets/stage-presence-markers-0CDfO5f4.js +1 -0
- package/dist/assets/stage-transform-tools-BzPl7OIo.js +1 -0
- package/dist/assets/standard-viewport-dressing-BW-dM_1h.js +24 -0
- package/dist/assets/{state-watch.action-DEdb1mNa.js → state-watch.action-Z1nQ5awu.js} +1 -1
- package/dist/assets/{state-watch.menu-jWbUM3kw.js → state-watch.menu-CQHGUF3W.js} +1 -1
- package/dist/assets/state-watch.utility-DCIg2i79.js +1 -0
- package/dist/assets/{story-capture-Dj1xkeKH.js → story-capture-BIrjDKeY.js} +1 -1
- package/dist/assets/story-documents-BvG2xeaR.js +3 -0
- package/dist/assets/{story-documents.service-iNP-ORNr.js → story-documents.service-DOSEa3ja.js} +1 -1
- package/dist/assets/{story-documents.service-BzQCuNBu.js → story-documents.service-y1m7XGMJ.js} +1 -1
- package/dist/assets/{story-media-presence-zTPlU9HR.js → story-media-presence-HLV-KaMj.js} +1 -1
- package/dist/assets/{story-pixi-preview-B7THvSl7.js → story-pixi-preview-CMhho2gG.js} +1 -1
- package/dist/assets/{story-presentation-BLXYPadR.js → story-presentation-CYhVv8Ku.js} +1 -1
- package/dist/assets/story-three-preview-CgcLF5lE.js +2 -0
- package/dist/assets/{structural-ids-Br2zjINh.js → structural-ids-BOo2BRoY.js} +1 -1
- package/dist/assets/studio-environment-R9qXUUcC.js +2 -0
- package/dist/assets/{surface-state-D9j6qNu8.js → surface-state-D8Qnowo6.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-BTnsMOvH.js → syntactic-prop-specs-8gkBuc5j.js} +1 -1
- package/dist/assets/team-playtest.service-BBMZ2iyk.js +1 -0
- package/dist/assets/{three-oYrcK5SQ.js → three-DiL6vMXq.js} +1 -1
- package/dist/assets/three-authoring-adapter-CkLR2zGf.js +1 -0
- package/dist/assets/three-authoring.service-CovhlCGx.js +2 -0
- package/dist/assets/{three-ingest-runtime-CXKjNysA.js → three-ingest-runtime-CwTqAHgX.js} +1 -1
- package/dist/assets/{three-integration-CuAnYaTW.js → three-integration-DXOFI88n.js} +2 -2
- package/dist/assets/three-integration.service-rCAqpqSp.js +1 -0
- package/dist/assets/three-projection-core-B7Lf8tOp.js +1 -0
- package/dist/assets/{three-state-wXRU3rLr.js → three-state-BCACvUtm.js} +1 -1
- package/dist/assets/{three-story-capture.service-DMJRcqjr.js → three-story-capture.service-rTFKNtHA.js} +2 -2
- package/dist/assets/{three-story-model-DgiAP-oQ.js → three-story-model-BjKr7OMn.js} +1 -1
- package/dist/assets/three-viewport-presentation-CBzvc2v2.js +141 -0
- package/dist/assets/tools-DfctM216.js +1 -0
- package/dist/assets/transform-mode-request-DlEApNrA.js +1 -0
- package/dist/assets/transport-strip-xCg94CuI.js +1 -0
- package/dist/assets/transport.header-BRtdky0x.js +1 -0
- package/dist/assets/{trigger-volume-DP0G1VBe.js → trigger-volume-BLkHmfm9.js} +1 -1
- package/dist/assets/tuples-BDz3wbQL.js +1 -0
- package/dist/assets/ui-board-document-DvbK_HVN.js +2 -0
- package/dist/assets/{user-data-CqOoAowZ.js → user-data-C84W0V47.js} +1 -1
- package/dist/assets/user-data-CODoGZqA.js +1 -0
- package/dist/assets/{utility-view-state-Db97zwDz.js → utility-view-state-CDRxZSo-.js} +1 -1
- package/dist/assets/viewport-door-BARIpMu-.js +1 -0
- package/dist/assets/{viewport-root-presentation-B35t51xX.js → viewport-root-presentation-hRLF0BeO.js} +1 -1
- package/dist/assets/{viewport-surface-status-D5kZtFW5.js → viewport-surface-status-TUfhXKR9.js} +1 -1
- package/dist/assets/{webworkerAll-CfKEb4Ao.js → webworkerAll-PJtcQ1FD.js} +1 -1
- package/dist/assets/worker-BtXrsgFy.js +2 -0
- package/dist/assets/workspace-arrangement-DqG5sUns.js +1 -0
- package/dist/assets/world-documents-D69XaqUX.js +1 -0
- package/dist/assets/world-root-stage-binding-BgZWZEuD.js +1 -0
- package/dist/assets/{xstate-animation-binding-aQEmNSpm.js → xstate-animation-binding-CIyLzGHs.js} +1 -1
- package/dist/assets/{xstate-animation-meta-CnMX1Sc1.js → xstate-animation-meta-CbYWup3R.js} +1 -1
- package/dist/volter-shared-react.json +10 -0
- package/dist/volter-shared-three.json +3 -0
- package/dist-node/cli.js +239 -201
- package/dist-node/create.js +89 -73
- package/package.json +20 -19
- package/src/contributions.d.ts +1 -1
- package/src/index.ts +10 -10
- package/starter/cube.py +1 -1
- package/template/.agents/references/project-manual.md +17 -17
- package/template/.agents/skills/editor/SKILL.md +6 -6
- package/template/.agents/skills/editor/agents/openai.yaml +3 -3
- package/template/.agents/skills/editor/references/editor-control.md +62 -62
- package/template/.agents/skills/{vgai-3d-models → volter-3d-models}/SKILL.md +3 -3
- package/template/.agents/skills/{vgai-ingest-existing-game → volter-ingest-existing-game}/SKILL.md +2 -2
- package/template/.agents/skills/{vgai-music → volter-music}/SKILL.md +7 -7
- package/template/{.github/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/SKILL.md +9 -9
- package/template/.agents/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
- package/template/{.claude/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
- package/template/.claude/skills/editor/SKILL.md +6 -6
- package/template/.claude/skills/editor/agents/openai.yaml +3 -3
- package/template/.claude/skills/editor/references/editor-control.md +62 -62
- package/template/{.github/skills/vgai-3d-models → .claude/skills/volter-3d-models}/SKILL.md +3 -3
- package/template/{.github/skills/vgai-ingest-existing-game → .claude/skills/volter-ingest-existing-game}/SKILL.md +2 -2
- package/template/.claude/skills/{vgai-threejs-authoring → volter-threejs-authoring}/SKILL.md +9 -9
- package/template/.claude/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
- package/template/{.agents/skills/vgai-threejs-authoring → .claude/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
- package/template/.github/copilot-instructions.md +1 -1
- package/template/.github/skills/editor/SKILL.md +6 -6
- package/template/.github/skills/editor/agents/openai.yaml +3 -3
- package/template/.github/skills/editor/references/editor-control.md +62 -62
- package/template/{.claude/skills/vgai-3d-models → .github/skills/volter-3d-models}/SKILL.md +3 -3
- package/template/{.claude/skills/vgai-ingest-existing-game → .github/skills/volter-ingest-existing-game}/SKILL.md +2 -2
- package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/SKILL.md +9 -9
- package/template/.github/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.github/skills/{vgai-threejs-authoring → volter-threejs-authoring}/references/helper-catalog.md +1 -1
- package/template/.mcp.json +3 -3
- package/template/AGENTS.md +24 -23
- package/template/DEVLOG.md +1 -1
- package/template/IDIOMS.md +3 -3
- package/template/LICENSE +3 -3
- package/template/README.md +12 -12
- package/template/check-idioms.ts +51 -51
- package/template/manifest-entry-modules-plugin.ts +17 -4
- package/template/package.json +13 -15
- package/template/server/loopback.ts +1 -1
- package/template/server/main.ts +4 -4
- package/template/server/rooms/arena-room.ts +8 -8
- package/template/server/rooms/game-room.ts +8 -8
- package/template/server/rooms.ts +2 -2
- package/template/src/bot/QaTester.tsx +1 -1
- package/template/src/bot/bot-station.ts +2 -2
- package/template/src/bot/tester-station.ts +1 -1
- package/template/src/contributions/README.md +1 -1
- package/template/src/contributions/analytics.analytics.tsx +1 -1
- package/template/src/contributions/data.document.tsx +2 -2
- package/template/src/contributions/pages.finder.ts +1 -1
- package/template/src/contributions/tester.inspector.tsx +2 -2
- package/template/src/contributions/use-game-modules.ts +1 -1
- package/template/src/input.ts +1 -1
- package/template/src/lib/reflections/volume-reflection-material.ts +59 -59
- package/template/src/lib/static-batch/Frozen.tsx +1 -1
- package/template/src/lib/static-batch/mutation-watch.ts +1 -1
- package/template/src/main.ts +19 -38
- package/template/src/manifest-entry-modules.d.ts +12 -1
- package/template/src/prefabs/HeroBox.stories.tsx +1 -1
- package/template/src/world.tsx +1 -1
- package/template/tsconfig.json +1 -1
- package/template/validate-manifest.ts +3 -3
- package/template/vite.config.ts +11 -11
- package/template/{vgai.adapter.ts → volter.adapter.ts} +1 -1
- package/template/{vgai.project.json → volter.project.json} +2 -2
- package/template-dotfiles/gitignore +27 -27
- package/workbench/src/media/game-cover.css +11 -11
- package/workbench/src/product.contribution.ts +28 -28
- package/workbench/src/{vgaiGameSkew.ts → volterGameSkew.ts} +16 -16
- package/dist/assets/AudioViewer-xFb5Wv7A.js +0 -1
- package/dist/assets/CanvasSceneViewport-vqBlOz8P.js +0 -1
- package/dist/assets/ColorInput-CX1UZjYO.js +0 -1
- package/dist/assets/ImageViewer-shZzMd91.js +0 -1
- package/dist/assets/InspectorObjectPreview-BMOvJaOw.js +0 -1
- package/dist/assets/JsonAssetDocument-D_HXneWE.js +0 -2
- package/dist/assets/Object3DDocumentToolbar-BfPH9jz5.js +0 -1
- package/dist/assets/Object3DDocumentViewport-BaXWtATg.js +0 -2
- package/dist/assets/OnlineAssetDetail-BxibUH6K.js +0 -1
- package/dist/assets/PlayBar-DRANyO01.js +0 -1
- package/dist/assets/ReactCanvasControls-K98jOX9b.js +0 -1
- package/dist/assets/RootSelectionOverlay-BQC12Gdd.js +0 -1
- package/dist/assets/ShadowEditor-DP1LWynl.js +0 -1
- package/dist/assets/StageHost-V_0opXFt.js +0 -2
- package/dist/assets/ThreeBoardDocument-tgcaZDqQ.js +0 -2
- package/dist/assets/Toolbar-uLgsrB2z.js +0 -1
- package/dist/assets/VideoViewer-ClUJ6_uy.js +0 -1
- package/dist/assets/ViewportShadingMenu-Bdkc6jcd.js +0 -1
- package/dist/assets/active-ingest-CnAeQcuQ.js +0 -3
- package/dist/assets/animation-mixers.service-DiecMX_A.js +0 -1
- package/dist/assets/animation-timeline.utility-C71vPJgs.js +0 -1
- package/dist/assets/asset-editor-persistence-BQgjOCrm.js +0 -1
- package/dist/assets/asset-loaders-5PIUVvmH.js +0 -2
- package/dist/assets/audio.utility-D9Vk_WYS.js +0 -1
- package/dist/assets/autoplay.service-CFJoLPLw.js +0 -1
- package/dist/assets/binding-resolver-C_9MBSMa.js +0 -2
- package/dist/assets/blender-emscripten-engine-BeWFjMn-.js +0 -2
- package/dist/assets/blender-version.status-DtfwUahB.js +0 -1
- package/dist/assets/blender-wali-engine-da698rDf.js +0 -2
- package/dist/assets/blender.status-ujwGU6dU.js +0 -1
- package/dist/assets/board-guides-_3R1t_-2.js +0 -1
- package/dist/assets/body-marks-RKb_LTwL.js +0 -1
- package/dist/assets/build-profiles.document-CZxDuhzz.js +0 -2
- package/dist/assets/build-progress.status-Dk5u3C67.js +0 -1
- package/dist/assets/build.header--xqH6uTP.js +0 -1
- package/dist/assets/canvas-entry-runtime-DVeh71nC.js +0 -2
- package/dist/assets/capability-coverage-DQgg6UJe.js +0 -7
- package/dist/assets/component-board.service-DgujG90T.js +0 -2
- package/dist/assets/component-contracts.service-Bc_2Xxh_.js +0 -1
- package/dist/assets/component-instance-root-df4ofoOR.js +0 -1
- package/dist/assets/connection.status-CCX-mgmr.js +0 -1
- package/dist/assets/constraints.inspector-CwEEREsf.js +0 -1
- package/dist/assets/coverage.service-CV7b5Sqn.js +0 -3
- package/dist/assets/curve-BKuiAPpj.js +0 -1
- package/dist/assets/data-check-core-CQEjuFyt.js +0 -1
- package/dist/assets/data-ref-DyFQqqX6.js +0 -1
- package/dist/assets/debug-bridge-CESAxmlz.js +0 -1
- package/dist/assets/debug-registry-l7k5Hjc8.js +0 -1
- package/dist/assets/design-time-layers-CQgnmqc8.js +0 -1
- package/dist/assets/design-time-react-mount-CFvIk_rV.js +0 -1
- package/dist/assets/edit-mode-authoring-DBjaBTxM.js +0 -1
- package/dist/assets/editor-api-D2azVray.js +0 -1
- package/dist/assets/editor-presentation-activity-C7SNSmTd.js +0 -1
- package/dist/assets/game-audio-CaGKzia4.js +0 -1
- package/dist/assets/game-document.service-FdG_gFPU.js +0 -1
- package/dist/assets/game-module-access-DulnT3NH.js +0 -1
- package/dist/assets/game-network-Bo_nlDR5.js +0 -22
- package/dist/assets/gameplay-replay-CnWnlogY.js +0 -1
- package/dist/assets/generation-DhwCUHPf.css +0 -1
- package/dist/assets/generation.service-D2yeZaJu.js +0 -1
- package/dist/assets/generations.status-3CrPw_n5.js +0 -1
- package/dist/assets/hierarchy-marks-BLPfSIym.js +0 -1
- package/dist/assets/hierarchy-marks-C25dY2fR.js +0 -1
- package/dist/assets/hosted-asset-materialization-DYdcFlDf.js +0 -2
- package/dist/assets/index-B5WjeCHm.css +0 -1
- package/dist/assets/index-BcH5GC3b.js +0 -1
- package/dist/assets/index-CwCDkEl1.js +0 -1
- package/dist/assets/index-n3QdTv-T.js +0 -1
- package/dist/assets/index.module-Ycad3DJq.js +0 -1
- package/dist/assets/ingest-siblings-CkxW__go.js +0 -1
- package/dist/assets/ingest-source-persistence-6peGfPAS.js +0 -1
- package/dist/assets/ingest.service-Cc73WMIW.js +0 -1
- package/dist/assets/inspection-CObLhnrs.js +0 -1
- package/dist/assets/instances.command-CxKGnrNl.js +0 -1
- package/dist/assets/material-BwFzKPi0.js +0 -1
- package/dist/assets/model-asset-sections-CFvvihfx.css +0 -1
- package/dist/assets/model-asset-sections.service-TZ2SaBmH.js +0 -1
- package/dist/assets/module-mode-B79jV5tQ.js +0 -2
- package/dist/assets/mount-canvas-ingest-root-BhaYNuhY.js +0 -2
- package/dist/assets/mount-dom-ingest-root-BQb1u0LX.js +0 -2
- package/dist/assets/mount-readiness-Ds0HvvLH.js +0 -4
- package/dist/assets/mount-three-ingest-root-DIDBfvIH.js +0 -1
- package/dist/assets/network-observer.service-CiR4Q9Q0.js +0 -1
- package/dist/assets/network.utility-CNG3eJ0E.js +0 -1
- package/dist/assets/object-marks-DwvIEBOK.js +0 -1
- package/dist/assets/pixi-authoring-adapter-B42K4md-.js +0 -1
- package/dist/assets/pixi-live-write-target-D56tQEe_.js +0 -1
- package/dist/assets/pose-guard-DILO6gGq.js +0 -1
- package/dist/assets/presentation-DGBuGP6i.js +0 -1
- package/dist/assets/profiler.utility-DLNySW3w.js +0 -1
- package/dist/assets/project-provenance-4ldz-EOG.js +0 -1
- package/dist/assets/r3f-design-session-C0DPEChS.js +0 -2
- package/dist/assets/react-canvas-navigation-Jowa_lJq.js +0 -1
- package/dist/assets/react-inspector.service-TfTdj_Qk.js +0 -1
- package/dist/assets/react-story-board-Bx7qYytV.js +0 -1
- package/dist/assets/react-world-authoring-adapter-C1jPW_cN.js +0 -1
- package/dist/assets/reflection-probe-capture.inspector-C-6zrzZb.js +0 -1
- package/dist/assets/registry-Z28XSZHF.js +0 -1
- package/dist/assets/resolve-three-C7zDbK29.js +0 -702
- package/dist/assets/root-seam-contract-rGNbiX6q.js +0 -1
- package/dist/assets/scene-capture-BTWgUzhI.js +0 -1
- package/dist/assets/scene-document.service-DJJp-la1.js +0 -2
- package/dist/assets/seeded-random-38To73fI.js +0 -1
- package/dist/assets/stage-overlay-set-olkNSZmq.js +0 -1
- package/dist/assets/stage-presence-markers-cznMN_qq.js +0 -1
- package/dist/assets/stage-transform-tools-BDUZqRIR.js +0 -1
- package/dist/assets/standard-viewport-dressing-BZyuxyVl.js +0 -24
- package/dist/assets/state-watch.utility-DDmn3G25.js +0 -1
- package/dist/assets/story-documents-8ehMyYHo.js +0 -3
- package/dist/assets/story-three-preview-B1nNiPwP.js +0 -2
- package/dist/assets/studio-environment-yaKaHPxH.js +0 -2
- package/dist/assets/team-playtest.service-Ds9tkO4q.js +0 -1
- package/dist/assets/three-authoring-adapter-BrkGH4cd.js +0 -1
- package/dist/assets/three-authoring.service-DoamZDMx.js +0 -2
- package/dist/assets/three-integration.service-Db-VabIm.js +0 -1
- package/dist/assets/three-projection-core-jBJVt6O0.js +0 -1
- package/dist/assets/three-viewport-presentation-CgO3eWJ-.js +0 -141
- package/dist/assets/tools-B_NJsk05.js +0 -1
- package/dist/assets/transform-mode-request-BnKpgRUW.js +0 -1
- package/dist/assets/transport-strip-a9yLoPsI.js +0 -1
- package/dist/assets/transport.header-CpfoppXc.js +0 -1
- package/dist/assets/tuples-CKsHOV9T.js +0 -1
- package/dist/assets/ui-board-document-DtTR_mBr.js +0 -2
- package/dist/assets/user-data-dHvLdpwM.js +0 -1
- package/dist/assets/viewport-door-DVkMQazS.js +0 -1
- package/dist/assets/worker-CC9Ug5Ei.js +0 -2
- package/dist/assets/workspace-arrangement-DIMM7ska.js +0 -1
- package/dist/assets/world-documents-C4t3iOD-.js +0 -1
- package/dist/assets/world-root-stage-binding-ydl3JN1a.js +0 -1
- package/dist/vgai-shared-react.json +0 -10
- package/dist/vgai-shared-three.json +0 -3
- package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
- package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
- package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
- /package/dist/assets/{vgai-shared-fontawesome-CU65D4Ij.js → volter-shared-fontawesome-CU65D4Ij.js} +0 -0
- /package/dist/assets/{vgai-shared-jsx-dev-runtime-DFDKL7fx.js → volter-shared-jsx-dev-runtime-DFDKL7fx.js} +0 -0
- /package/dist/assets/{vgai-shared-jsx-runtime-DIqBpTut.js → volter-shared-jsx-runtime-DIqBpTut.js} +0 -0
- /package/dist/assets/{vgai-shared-react-BT7rMc2H.js → volter-shared-react-BT7rMc2H.js} +0 -0
- /package/dist/assets/{vgai-shared-react-dom-DFajMqMT.js → volter-shared-react-dom-DFajMqMT.js} +0 -0
- /package/dist/assets/{vgai-shared-react-dom-client-S0ozfl6_.js → volter-shared-react-dom-client-S0ozfl6_.js} +0 -0
- /package/dist/assets/{vgai-shared-three-DH4yxKwt.js → volter-shared-three-DH4yxKwt.js} +0 -0
- /package/template/{.vgai → .volter}/assets.json +0 -0
- /package/template/{.vgai → .volter}/provenance.json +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{p as C}from"./utility-view-state-Db97zwDz.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a2 as N,q as D,ae as s,$ as x,eo as m,em as o,hF as Y,dU as q,hH as A,hG as U,jH as K,jI as Q}from"./index-CaG87ZF-.js";import{s as Z,f as E,a as ee,d as H,c as te,b as ne,g as se,l as ae,i as re,e as oe,h as ie,j as le,u as de,t as ce,k as pe,m as me,n as T,o as k,p as ue}from"./frame-debugger-store-D5YViF_8.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const j={fontFamily:s.typography.mono,fontSize:11};function fe({draw:t,selected:n,onSelect:a}){return e.jsxs(x,{type:"button",variant:"ghost","data-testid":"frame-draw-row","data-draw-index":t.index,"data-selected":n||void 0,className:"vgai-frame-draw-row",onClick:a,children:[e.jsxs("span",{style:{...j,color:s.content.dim,width:34,display:"inline-block"},children:["#",t.index]}),e.jsx("span",{style:{...j,color:s.content.primary},children:t.mode}),e.jsxs("span",{style:{...j,color:s.content.muted},children:[" ",t.count]}),t.instanceCount!==null&&e.jsxs("span",{style:{...j,color:s.content.muted},children:[" ×",t.instanceCount]}),e.jsxs("span",{style:{...j,color:t.annotation?s.content.primary:s.content.dim,fontStyle:t.annotation?"normal":"italic"},children:[" ",t.annotation?t.annotation.object.name||t.annotation.object.type:"unattributed"]})]})}function b({label:t,value:n}){return e.jsxs("div",{style:{display:"flex",gap:8,padding:"1px 0"},children:[e.jsx("span",{style:{fontSize:10,color:s.content.muted,width:92,flexShrink:0},children:t}),e.jsx("span",{style:{...j,color:s.content.primary},children:n})]})}const M=t=>t?"on":"off";function he(t){if(t.kind==="canvas")return"canvas (default framebuffer)";const n=t.width!==null&&t.height!==null?`${t.width}×${t.height}`:"(size not queryable)";return`${t.label??"framebuffer"} ${n}`}function xe(t){return`blend ${M(t.blend)} · depth test ${M(t.depthTest)} · depth write ${M(t.depthWrite)} · cull ${t.cull} · scissor ${M(t.scissor)}`}function ge(t){const n=t.instanceCount!==null?` · ${t.instanceCount} instances`:" · not instanced";return`${t.mode} · ${t.count}${n}`}function ye({draw:t}){return e.jsxs("div",{"data-testid":"frame-draw-detail",style:{padding:8},children:[e.jsx(b,{label:"entry point",value:t.entryPoint}),e.jsx(b,{label:"mode / count",value:ge(t)}),e.jsx(b,{label:"program",value:t.programLabel??"none bound"}),e.jsx(b,{label:"target",value:he(t.target)}),e.jsx(b,{label:"viewport",value:`[${t.viewport.join(", ")}]`}),e.jsx(b,{label:"state",value:xe(t.state)}),t.annotation?e.jsxs(e.Fragment,{children:[e.jsx(b,{label:"object",value:`${t.annotation.object.name||"(unnamed)"} · ${t.annotation.object.type}`}),e.jsx(b,{label:"geometry",value:`${t.annotation.geometry.name||t.annotation.geometry.type}${t.annotation.geometry.indexed?" · indexed":""}`}),e.jsx(b,{label:"attributes",value:t.annotation.geometry.attributes.join(", ")||"—"}),e.jsx(b,{label:"material",value:`${t.annotation.material.name||"(unnamed)"} · ${t.annotation.material.type}`})]}):e.jsx("div",{"data-testid":"frame-draw-unattributed",style:{marginTop:6,fontSize:11,fontStyle:"italic",color:s.content.muted},children:"Not attributable (shadow / post-processing pass — the instrument attributes only main-pass draws through each object's onBeforeRender, and reports the gap honestly rather than guessing)."})]})}function be({capture:t,drawIndex:n,setDrawIndex:a}){const r=t.drawCalls.length,i=Math.min(n,Math.max(0,r-1)),l=t.drawCalls[i]??null,d=le(t);return e.jsxs("div",{style:{flex:1,minHeight:0,display:"flex"},children:[e.jsxs("div",{style:{flex:1,minWidth:0,overflow:"auto",borderRight:`1px solid ${s.boundary.default}`},children:[e.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center",padding:4,borderBottom:`1px solid ${s.boundary.default}`},children:[e.jsx(x,{type:"button",size:"compact",variant:"ghost","data-testid":"frame-draw-prev",disabled:i<=0,onClick:()=>a(Math.max(0,i-1)),children:"◀ Prev"}),e.jsx(x,{type:"button",size:"compact",variant:"ghost","data-testid":"frame-draw-next",disabled:i>=r-1,onClick:()=>a(Math.min(r-1,i+1)),children:"Next ▶"}),e.jsxs("span",{style:{fontSize:10,color:s.content.muted},children:[r===0?"0":i+1,"/",r]})]}),d.map(p=>e.jsxs("div",{"data-testid":"frame-target-group","data-target":p.target,children:[e.jsxs("div",{style:{...j,padding:"2px 8px",color:s.content.muted,borderTop:`1px solid ${s.boundary.default}`,borderBottom:`1px solid ${s.boundary.default}`},children:[p.target," · ",p.draws.length," draws"]}),p.draws.map(u=>e.jsx(fe,{draw:u,selected:u.index===i,onSelect:()=>a(u.index)},u.index))]},p.target))]}),e.jsxs("div",{style:{flex:1,minWidth:0,overflow:"auto"},children:[l?e.jsx(ye,{draw:l}):e.jsx("div",{style:{padding:12,color:s.content.muted,fontSize:12},children:"This capture recorded no draws."}),t.notes.length>0&&e.jsx("div",{style:{padding:"4px 8px",fontSize:10,color:s.content.dim},"data-testid":"frame-capture-notes",children:t.notes.join(" ")})]})]})}function je({captures:t,selectedId:n}){return e.jsx("div",{"data-testid":"frame-capture-history",style:{display:"flex",gap:6,flexWrap:"wrap",padding:"4px 8px",borderBottom:`1px solid ${s.boundary.default}`},children:t.map(a=>{const r=oe(a);return e.jsxs(x,{type:"button",size:"compact",variant:"ghost","data-testid":"frame-capture-item","data-capture-id":a.id,"data-selected":a.id===n||void 0,onClick:()=>ie(a.id),children:["#",a.id," · ",r.drawCalls," draws",r.unattributed>0?` · ${r.unattributed} unattr`:"",r.truncated>0?` · +${r.truncated} capped`:""]},a.id)})})}function ve(){h.useSyncExternalStore(Z,E,E);const[t,n]=h.useState(0),a=N(()=>D().systems.inspected().renderDebug??null);h.useEffect(()=>{ee(a)},[a]);const r=H(a),i=se(),l=i.selected;if(h.useEffect(()=>{n(0)},[l?.id]),!a||!r)return e.jsxs("div",{"data-testid":"frame-debugger-empty",style:{padding:16,color:s.content.muted,fontSize:12,lineHeight:"18px"},children:[e.jsx("div",{style:{color:s.content.primary,marginBottom:4},children:"No render-debug adapter — no game session is running."}),"Frame capture exists only while a game session runs. Press Play: first-party worlds register a ",e.jsx("code",{style:j,children:"RenderDebugAdapter"})," automatically when they hold a real WebGL2 context; a custom world exposes its own via"," ",e.jsx("code",{style:j,children:"ctx.registerSystemAdapter?.('renderDebug', adapter)"}),". A headless mount registers none — there is nothing to capture."]});const d=ae(),p=re();return e.jsxs("div",{"data-testid":"frame-debugger",className:"vgai-content-frost",style:{flex:1,minHeight:0,display:"flex",flexDirection:"column",fontSize:12},children:[e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:10,alignItems:"center",padding:"4px 8px",borderBottom:`1px solid ${s.boundary.default}`},children:[e.jsx(x,{type:"button",size:"compact","data-testid":"frame-capture-button",disabled:p,onClick:()=>void te(a),children:p?"Capturing…":"Capture frame"}),e.jsx("span",{style:{fontSize:10,color:s.content.dim},children:"Single-frame draw-call list with per-draw state — not a GPU replayer."}),i.all.length>0&&e.jsx(x,{type:"button",size:"compact",variant:"ghost","data-testid":"frame-capture-clear",onClick:()=>ne(),children:"Clear"})]}),d&&e.jsxs("div",{"data-testid":"frame-capture-error",style:{padding:"4px 8px",fontSize:11,color:s.semantic.danger,borderBottom:`1px solid ${s.boundary.default}`},children:["Capture failed: ",d]}),i.all.length>0&&e.jsx(je,{captures:i.all,selectedId:l?.id??null}),l?e.jsx(be,{capture:l,drawIndex:t,setDrawIndex:n},l.id):e.jsxs("div",{"data-testid":"frame-debugger-no-capture",style:{padding:12,color:s.content.muted,fontSize:12},children:["No frame captured yet. Press ",e.jsx("strong",{children:"Capture frame"})," while the game renders."]})]})}const S=1,w=1,Se=1e3;function $(t){return Math.round(t*Se)}function we(t,n){const a=[];a.push({name:"process_name",cat:"__metadata",ph:"M",ts:0,dur:0,pid:S,tid:w,args:{name:n.processName}}),a.push({name:"thread_name",cat:"__metadata",ph:"M",ts:0,dur:0,pid:S,tid:w,args:{name:n.threadName}});for(const r of t){const i=r.timestamp-r.cpuMs,l=$(i);a.push({name:`frame ${r.id}`,cat:"frame",ph:"X",ts:l,dur:$(r.cpuMs),pid:S,tid:w,args:{id:r.id,drawCalls:r.render.drawCalls,triangles:r.render.triangles}});for(const d of r.phases)a.push({name:d.name,cat:"phase",ph:"X",ts:$(i+(d.startMs??0)),dur:$(d.ms),pid:S,tid:w});for(const d of r.systems)a.push({name:d.name,cat:"system",ph:"X",ts:$(i+d.startMs),dur:$(d.ms),pid:S,tid:w,args:{phase:d.phase}});a.push({name:"render",cat:"counter",ph:"C",ts:l,dur:0,pid:S,tid:w,args:{drawCalls:r.render.drawCalls,triangles:r.render.triangles}})}return{traceEvents:a,displayTimeUnit:"ms",otherData:{version:2,processName:n.processName,threadName:n.threadName,frameCount:t.length}}}function $e(t){if(t.length<4)return 0;let n=Number.POSITIVE_INFINITY;for(const r of t)n=Math.min(n,r);let a=0;for(const r of t)a+=Math.max(0,r-n);return a}const R=1200;function Ce(){const t=[];let n=null,a=0;const r=()=>{const i=performance.now();t.push({t:i,gapMs:i-a}),t.length>R&&t.splice(0,t.length-R),a=i,n=setTimeout(r,0)};return{start(){n===null&&(t.length=0,a=performance.now(),n=setTimeout(r,0))},stop(){n!==null&&(clearTimeout(n),n=null)},busySince(i){const l=[];for(const d of t)d.t>=i&&l.push(d.gapMs);return{busyMs:$e(l),sampleCount:l.length}}}}const B={enabled:!1,recording:!1,fps:0,cpuMs:0,p95Ms:0,p99Ms:0,frames:[],phases:[],systems:[],components:[],render:{gpuMs:null,drawCalls:0,triangles:0,geometries:0,textures:0,renderPasses:null}},Te=500;function Me(t){const n=URL.createObjectURL(new Blob([t.exportJSON()],{type:"application/json"})),a=document.createElement("a");a.href=n,a.download=`vgai-performance-${new Date().toISOString().replaceAll(":","-")}.json`,a.click(),URL.revokeObjectURL(n)}function ze(t,n){const a=we(t.getSnapshot().frames,{processName:n,threadName:"main"}),r=URL.createObjectURL(new Blob([JSON.stringify(a)],{type:"application/json"})),i=document.createElement("a");i.href=r,i.download=`vgai-trace-${new Date().toISOString().replaceAll(":","-")}.json`,i.click(),URL.revokeObjectURL(r)}const z=720,P=18,I=40,L=[s.accent.default,s.semantic.success,s.semantic.warning,s.content.muted];function Pe({snapshot:t}){const n=t.frames,[a,r]=h.useState(null),i=a!==null&&a<n.length?a:n.length-1,l=n[i],d=pe(n,z,I),p=l?me(l,z):[],u=p.reduce((c,g)=>Math.max(c,g.depth),0);return n.length===0?e.jsxs("div",{"data-testid":"flamegraph-empty",style:{padding:o[6],color:s.content.muted},children:["No frames recorded yet. Frames accumulate while the profiler is enabled; use"," ",e.jsx("strong",{children:"Record capture"})," to also collect per-component spans."]}):e.jsxs("div",{"data-testid":"flamegraph-view",style:{padding:o[4]},children:[e.jsxs("div",{style:{marginBottom:o[4],color:s.content.muted},children:["Frame ",e.jsx("span",{style:{color:s.content.primary},children:l?l.id:"—"})," ·"," ",l?`${l.cpuMs.toFixed(2)} ms CPU`:""," · GPU"," ",e.jsx("span",{style:{color:s.content.primary},children:l&&l.render.gpuMs!==null?`${l.render.gpuMs.toFixed(2)} ms`:"n/a"})]}),e.jsx("div",{"data-testid":"flame-frame-strip",style:{position:"relative",width:z,height:I,boxShadow:`inset 0 0 0 1px ${s.boundary.default}`,marginBottom:o[5]},children:d.map(c=>e.jsx("div",{role:"button",tabIndex:0,"data-testid":"flame-frame-bar","data-frame-index":c.index,"data-selected":c.index===i||void 0,title:`frame ${c.frameId} · ${c.cpuMs.toFixed(2)} ms`,onClick:()=>r(c.index),onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&r(c.index)},style:{position:"absolute",left:c.x,bottom:0,width:Math.max(1,c.w-1),height:Math.max(1,c.h),cursor:"pointer",background:c.index===i?s.semantic.warning:s.accent.default}},c.frameId))}),e.jsx("div",{"data-testid":"flamegraph-rows",style:{position:"relative",width:z,height:(u+1)*P},children:p.map((c,g)=>e.jsx("div",{"data-testid":"flame-rect","data-depth":c.depth,"data-name":c.label,title:`${c.label} · ${c.ms.toFixed(3)} ms`,style:{position:"absolute",left:c.x,top:c.depth*P,width:Math.max(1,c.w),height:P-1,overflow:"hidden",whiteSpace:"nowrap",fontSize:m.sm,lineHeight:`${P-1}px`,paddingLeft:3,color:s.content.onAccent,background:L[Math.min(c.depth,L.length-1)],borderRight:`1px solid ${s.surface.inset}`},children:c.label},`${c.depth}-${g}-${c.label}`))}),e.jsxs("div",{style:{marginTop:o[3],fontSize:m.sm,color:s.content.dim},children:["Rows: frame · phase · system",t.recording?" · component (recording)":"",". Only measured CPU spans are drawn — GPU time is a whole-frame aggregate, never a fabricated lane."]})]})}function O({title:t,entries:n,estimated:a,testId:r}){return e.jsxs("div",{"data-testid":r,style:{marginTop:o[5],border:`1px solid ${s.boundary.default}`},children:[e.jsxs("div",{style:{padding:`${o[3]} ${o[5]}`,borderBottom:`1px solid ${s.boundary.default}`,color:s.content.muted},children:[t,a&&e.jsx("span",{style:{marginLeft:o[3],fontSize:m.xs,color:s.content.dim},children:"ESTIMATED"})]}),n.length===0?e.jsx("div",{style:{padding:`${o[2]} ${o[5]}`,color:s.content.dim,fontSize:m.base},children:"none"}):n.map(i=>e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:o[8],padding:"3px 10px"},children:[e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:i.name}),e.jsx("span",{style:{fontVariantNumeric:"tabular-nums"},children:T(i.bytes)})]},i.name))]})}function Fe(){const t=N(()=>D().systems.inspected().renderDebug??null),n=H(t),[a,r]=h.useState(null);h.useEffect(()=>{if(!t?.memorySnapshot){r(null);return}const l=()=>r(t.memorySnapshot?.()??null);l();const d=setInterval(l,1e3);return()=>clearInterval(d)},[t]);const i=K();return e.jsxs("div",{style:{padding:o[4]},children:[e.jsxs("div",{"data-testid":"memory-heap",style:{border:`1px solid ${s.boundary.default}`,padding:o[5],marginBottom:o[5]},children:[e.jsx("div",{style:{color:s.content.dim,textTransform:"uppercase",fontSize:m.sm},children:"JS heap (performance.memory)"}),Q(i)?e.jsxs("div",{style:{fontSize:m.xl,color:s.content.primary,marginTop:3},children:[T(i.usedBytes)," ",e.jsxs("span",{style:{fontSize:m.base,color:s.content.muted},children:["used / ",T(i.totalBytes)," total"]})]}):e.jsx("div",{"data-testid":"memory-heap-unavailable",style:{fontSize:m.base,color:s.content.muted,marginTop:3,fontStyle:"italic"},children:i.unavailable})]}),n?.memory?a===null?e.jsx("div",{style:{padding:o[4],color:s.content.muted,fontSize:m.base},children:"Waiting for the first render-memory sample…"}):e.jsxs("div",{"data-testid":"memory-section",children:[e.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, minmax(80px, 1fr))",gap:o[4]},children:[["Geometries",String(a.counts.geometries)],["Textures",String(a.counts.textures)],["Programs",a.counts.programs===null?"n/a until first render":String(a.counts.programs)]].map(([l,d])=>e.jsxs("div",{style:{border:`1px solid ${s.boundary.default}`,padding:o[5]},children:[e.jsx("div",{style:{color:s.content.dim,textTransform:"uppercase",fontSize:m.sm},children:l}),e.jsx("div",{style:{fontSize:m["2xl"],color:s.content.primary,marginTop:3},children:d})]},l))}),e.jsxs("div",{"data-testid":"memory-vram-totals",style:{display:"flex",gap:18,marginTop:o[5],fontSize:m.base,color:s.content.muted},children:[e.jsxs("span",{children:["geometry buffers"," ",e.jsx("span",{style:{color:s.content.primary},children:T(a.estimatedGeometryBytes)})," ",e.jsx("span",{style:{fontSize:m.xs,color:s.content.dim},children:"EXACT"})]}),e.jsxs("span",{children:["texture VRAM"," ",e.jsx("span",{style:{color:s.content.primary},children:T(a.estimatedTextureBytes)})," ",e.jsx("span",{style:{fontSize:m.xs,color:s.content.dim},children:"ESTIMATED"})]})]}),e.jsx(O,{title:"Top geometries",entries:a.topGeometries,estimated:!1,testId:"memory-top-geometries"}),e.jsx(O,{title:"Top textures",entries:a.topTextures,estimated:!0,testId:"memory-top-textures"}),a.unestimated.length>0&&e.jsxs("div",{"data-testid":"memory-unestimated",style:{marginTop:o[5],border:`1px solid ${s.boundary.default}`},children:[e.jsxs("div",{style:{padding:`${o[3]} ${o[5]}`,borderBottom:`1px solid ${s.boundary.default}`,color:s.content.muted},children:["Unmeasured textures (",a.unestimated.length,") — excluded from the total, not zeroed"]}),a.unestimated.map(l=>e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:o[8],padding:"3px 10px",fontSize:m.base},children:[e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:l.name}),e.jsx("span",{style:{color:s.content.dim},children:l.reason})]},l.name))]})]}):e.jsxs("div",{"data-testid":"memory-absent",style:{padding:o[4],color:s.content.muted,fontSize:m.base,fontStyle:"italic"},children:["Render-memory introspection is not provided by this world's adapter — a headless mount has no ",e.jsx("code",{children:"renderer.info"}),", and a canvas (PixiJS) world's renderer publishes no managed geometry collection to measure at all. Enter Play with a first-party three world to inspect geometry/texture footprints."]})]})}function De(t){const n=h.useRef([]),a=typeof PerformanceObserver<"u"&&(PerformanceObserver.supportedEntryTypes??[]).includes("long-animation-frame");return h.useEffect(()=>{if(!t||!a)return;n.current=[];const r=new PerformanceObserver(i=>{const l=n.current;for(const d of i.getEntries())l.push(d);l.length>40&&l.splice(0,l.length-40)});return r.observe({type:"long-animation-frame"}),()=>r.disconnect()},[t,a]),{entries:n.current,supported:a}}function Ee(t,n,a){const r=h.useRef(null);r.current===null&&(r.current=Ce()),h.useEffect(()=>{const l=r.current;if(!(!t||!l))return l.start(),()=>l.stop()},[t]);const i=performance.now()-1e3;return ce(n.frames,i,r.current.busySince(i),a)}function ke({row:t,rootMs:n}){const a=t.ms!==null&&n>0?Math.min(1,t.ms/n):0,r=t.depth===0;return e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"260px 1fr 70px",gap:o[5],padding:`${o[2]} ${o[5]}`,paddingLeft:10+t.depth*16},children:[e.jsxs("span",{style:{color:r||t.depth===1?s.content.primary:s.content.muted,fontStyle:t.parallel?"italic":void 0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:t.note?`${t.label} — ${t.note}`:t.label,children:[t.label,t.note&&e.jsx("span",{style:{marginLeft:o[3],fontSize:m.sm,color:s.content.dim},children:t.note})]}),e.jsx("div",{style:{background:s.surface.raised,height:6,marginTop:5,opacity:t.parallel?.45:1},children:e.jsx("div",{style:{width:`${a*100}%`,height:"100%",background:!r&&t.ms!==null&&t.ms>8?s.semantic.warning:s.accent.default}})}),e.jsx("span",{style:{textAlign:"right",fontVariantNumeric:"tabular-nums",color:r?s.content.primary:void 0},children:t.ms===null?"—":`${t.ms.toFixed(1)} ms`})]})}function Re({snapshot:t,timeSpent:n,entries:a,loafSupported:r}){const i=n?.budget??null,l=i?k(i.frameMs,i.loopMs):k(t.p95Ms,t.cpuMs),d=1e4,p=ue(a.filter(u=>(u.startTime??0)>=performance.now()-d));return n===null&&!l.dominated&&p.longFrameCount===0?null:e.jsxs("div",{"data-testid":"time-spent-section",style:{marginTop:o[6],border:`1px solid ${s.boundary.default}`},children:[e.jsx("div",{style:{padding:"7px 10px",borderBottom:`1px solid ${s.boundary.default}`,color:s.content.muted},children:"Where the frame goes"}),n!==null&&e.jsx("div",{"data-testid":"time-spent-tree",style:{paddingBottom:o[1]},children:n.rows.map(u=>e.jsx(ke,{row:u,rootMs:n.budget.frameMs},`${u.depth}:${u.label}`))}),l.dominated&&e.jsxs("div",{style:{padding:`${o[3]} ${o[5]}`,color:s.content.muted,borderTop:`1px solid ${s.boundary.default}`},children:["The measured loop explains less than half of the frame time — the bottleneck is"," ",p.scripts.length>0?"partly the main-thread work below, and the rest":"not on the main thread: look at the display pipeline"," ","(GPU/compositor: post-effects, glass chrome, pixel ratio) or browser throttling."]}),p.scripts.length>0&&e.jsx("div",{style:{padding:"5px 10px 2px",borderTop:`1px solid ${s.boundary.default}`,fontSize:m.sm,color:s.content.dim},children:"Named main-thread offenders — longer memory than the tree (last 10s of long frames)"}),p.scripts.map(u=>e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:o[8],padding:`${o[2]} ${o[5]}`},children:[e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:u.key}),e.jsxs("span",{style:{fontVariantNumeric:"tabular-nums"},children:[u.totalMs," ms ×",u.count]})]},u.key)),p.longFrameCount>0&&e.jsxs("div",{style:{padding:`${o[2]} ${o[5]}`,fontSize:m.sm,color:s.content.dim},children:[p.longFrameCount," long main-thread frame",p.longFrameCount===1?"":"s"," (",p.totalLongMs," ms total, ",p.unattributedMs," ms unattributed style/layout/GC) — browser long-animation-frame report, last 10s."]}),!r&&e.jsx("div",{style:{padding:`${o[2]} ${o[5]}`,fontSize:m.sm,color:s.content.dim},children:"Main-thread attribution unavailable — this browser does not support long-animation-frame timing."})]})}function Be(){const t=de(),n=t?.profiler??null,[a,r]=h.useState(B),[i,l]=h.useState(!1),[d,p]=h.useState(!1),[u,c]=h.useState("overview"),g=h.useRef(!1),F=De(n),_=Ee(n,a,F.entries),V=()=>{const f=!g.current;g.current=f,l(f),!f&&n&&r(n.getSnapshot())},W=()=>{if(!n)return;const f=!n.enabled;f&&p(!1),n.enabled=f,r(n.getSnapshot())};return h.useEffect(()=>{if(!n){r(B);return}g.current=!1,l(!1),p(!1);const f=n.enabled;n.enabled=!0,r(n.getSnapshot());let y=null,v=performance.now();const G=()=>{y=null,!g.current&&(v=performance.now(),r(n.getSnapshot()))},J=n.subscribe(()=>{if(g.current||y!==null)return;const X=Math.max(0,Te-(performance.now()-v));y=setTimeout(G,X)});return()=>{J(),y!==null&&clearTimeout(y),!f&&!n.recording&&(n.enabled=!1)}},[n]),n?e.jsxs("div",{className:"vgai-content-frost",style:{height:"100%",overflow:"auto",padding:o[6],color:s.content.primary,fontSize:m.md},children:[e.jsxs("div",{style:{marginBottom:o[5],color:s.content.muted},children:["Profiling ",e.jsx("span",{style:{color:s.content.primary},children:t?.label}),a.enabled&&d&&e.jsx(Y,{style:{marginLeft:o[4]},children:"Profiling active"})]}),a.enabled&&!d&&e.jsxs(q,{tone:"warning",style:{marginBottom:o[5]},actions:e.jsx(x,{size:"compact",variant:"ghost",onClick:()=>p(!0),children:"Dismiss"}),children:["Live profiling is active and adds measurement overhead. Displayed timings include that cost",a.recording?"; capture recording adds detailed timing marks":"","."]}),e.jsxs("div",{style:{display:"flex",gap:o[4],alignItems:"center",marginBottom:o[6]},children:[e.jsx(x,{size:"compact",onClick:V,children:i?"Resume view":"Freeze view"}),e.jsxs(x,{size:"compact",onClick:W,children:[a.enabled?"Disable":"Enable"," profiler"]}),e.jsx(x,{size:"compact",onClick:()=>a.recording?n.stopRecording():n.startRecording(),children:a.recording?"Stop capture":"Record capture"}),e.jsx(x,{size:"compact",onClick:()=>n.clear(),children:"Clear"}),e.jsx(x,{size:"compact",onClick:()=>Me(n),children:"Export JSON"}),e.jsx(x,{size:"compact","data-testid":"profiler-export-trace",onClick:()=>ze(n,t?.label??"vgai"),children:"Export Chrome trace"})]}),e.jsx(A,{"aria-label":"Profiler views",style:{marginBottom:o[6]},children:[["overview","Overview"],["flamegraph","Flamegraph"],["memory","Memory"]].map(([f,y])=>e.jsx(U,{selected:u===f,"data-testid":`profiler-view-${f}`,onClick:()=>c(f),children:y},f))}),u==="flamegraph"&&e.jsx(Pe,{snapshot:a}),u==="memory"&&e.jsx(Fe,{}),u==="overview"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(80px, 1fr))",gap:o[4]},children:[["FPS",a.fps.toFixed(0)],["CPU",`${a.cpuMs.toFixed(2)} ms`],["p95 frame",`${a.p95Ms.toFixed(2)} ms`],["p99 frame",`${a.p99Ms.toFixed(2)} ms`],["GPU",a.render.gpuMs===null?"n/a":`${a.render.gpuMs.toFixed(2)} ms`],["Draw calls",String(a.render.drawCalls)],["Triangles",a.render.triangles.toLocaleString()]].map(([f,y])=>e.jsxs("div",{style:{border:`1px solid ${s.boundary.default}`,padding:o[5]},children:[e.jsx("div",{style:{color:s.content.dim,textTransform:"uppercase",fontSize:m.sm},children:f}),e.jsx("div",{style:{fontSize:18,color:s.content.primary,marginTop:3},children:y})]},f))}),e.jsx(Re,{snapshot:a,timeSpent:_,entries:F.entries,loafSupported:F.supported}),[["Components (recording)",a.components]].map(([f,y])=>e.jsxs("div",{style:{marginTop:o[6],border:`1px solid ${s.boundary.default}`},children:[e.jsx("div",{style:{padding:"7px 10px",borderBottom:`1px solid ${s.boundary.default}`,color:s.content.muted},children:f}),y.slice(0,12).map(v=>e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:o[8],padding:`${o[2]} ${o[5]}`},children:[e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:v.name}),e.jsxs("span",{style:{fontVariantNumeric:"tabular-nums"},children:[v.ms.toFixed(2)," ms"]})]},v.name))]},f))]})]}):e.jsx("div",{style:{padding:o[6],fontSize:m.md,color:s.content.muted,maxWidth:480},children:e.jsx("p",{style:{margin:0},children:D().documents.active()?"The active document has no live render loop to profile.":"Open a rendered document to profile it."})})}const Ie=[{id:"profiler",label:"Profiler"},{id:"frame",label:"Frame"}];function Le(){h.useSyncExternalStore(C.subscribe,C.version,C.version);const t=C.active();return e.jsxs("div",{"data-testid":"profiler-panel",style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},children:[e.jsx(A,{"aria-label":"Profiler views",children:Ie.map(n=>e.jsx(U,{selected:t===n.id,"data-testid":`profiler-tab-${n.id}`,onClick:()=>C.select(n.id),children:n.label},n.id))}),e.jsxs("div",{role:"tabpanel",style:{flex:1,minHeight:0,display:"flex"},children:[t==="profiler"&&e.jsx(Be,{}),t==="frame"&&e.jsx(ve,{})]})]})}const Ye="workspace.utility",qe="Profiler",Ke=20;function Qe(){return e.jsx(Le,{})}export{Qe as default,Ke as order,Ye as point,qe as title};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const y=".vgai/provenance.json";function l(t){const r=t.split(/[?#]/,1)[0].replace(/^\/+/,"");return r.startsWith("public/")?r:`public/${r}`}async function d(){const t=await fetch(`/__editor/vgai-file?${new URLSearchParams({path:y})}`);return t.ok?JSON.parse(await t.text()):null}function c(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function h(t,r){const e=c(t);if(e?.path!==r||typeof e.bytes!="number"||typeof e.sha256!="string")return null;const n=e.mediaType,o=e.role;return{path:r,bytes:e.bytes,sha256:e.sha256,...typeof n=="string"?{mediaType:n}:{},...typeof o=="string"?{role:o}:{}}}function A(t,r,e){const n=c(r),o=c(n?.operation),a=n?.outputs,s=n?.createdAt,i=o?.name;if(!n||!o||typeof s!="string"||typeof i!="string"||!Array.isArray(a))return[];const p=o.source;return a.flatMap(f=>{const u=h(f,e);return u?[{operationId:t,createdAt:s,operationName:i,...typeof p=="string"?{operationSource:p}:{},...n.input!==void 0?{input:n.input}:{},output:u}]:[]})}async function m(t){const r=c(await d()),e=c(r?.operations);if(!e)return null;const n=l(t);return Object.entries(e).flatMap(([a,s])=>A(a,s,n)).sort((a,s)=>s.createdAt.localeCompare(a.createdAt))[0]??null}export{m as a,l as p};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/r3f-source-authoring-adapter-C8oMjdTL.js","assets/component-instance-root-df4ofoOR.js","assets/user-data-CqOoAowZ.js","assets/workspace-arrangement-DIMM7ska.js","assets/index-CaG87ZF-.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-B5WjeCHm.css","assets/live-gesture-lock-DJbrjOqf.js","assets/relative-import-specifier-DQzkawgj.js","assets/three-projection-core-jBJVt6O0.js","assets/editor-layers-B4oYfpj8.js","assets/three-oYrcK5SQ.js","assets/entity-object-B_5Gc0Ky.js","assets/three-contract-Dkt6PmWY.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/three.core-3arARmh6.js","assets/inference-diagnostics-MGcIHEX6.js","assets/instance-fork-actions-D3sRzS3K.js","assets/oid-transform-Bzc2ZJSH.js","assets/writer-tw6EcuVO.js","assets/r3f-physics-binding-Bgzzd4ol.js","assets/object3d-authoring-subject-BDrxd1GA.js","assets/user-data-dHvLdpwM.js","assets/object-marks-DwvIEBOK.js","assets/three.module-BLhyNg0e.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{gl as $e,a9 as Ae,gU as Ce,_ as Ee,g7 as Pe,M as T,p as ce,dr as pe,jw as xe,d6 as de,jx as Fe,jy as Ie,bp as je,jz as De,jA as Be,jB as He,bo as Le,av as Ve,bt as ue,d4 as Ge,hb as Oe}from"./index-CaG87ZF-.js";import{p as _e,B as fe,q as ye}from"./edit-mode-authoring-DBjaBTxM.js";import{F as ze,G as We,H as Ue}from"./game-network-Bo_nlDR5.js";import{a as qe}from"./binding-resolver-C_9MBSMa.js";import{a as Ne}from"./realm-services-DefTrXnY.js";import{p as Qe}from"./scene-framing-PVMqGU8h.js";import{i as Je,b as Ke,n as Xe,a as Ze}from"./native-debug-module-B-rWJfWE.js";import{createAssetCache as Ye}from"./assets-BcrMQHRv.js";import{d as ke,a as et,b as tt}from"./create-runtime-Bg2uYMfh.js";import{T as ot}from"./three.module-BLhyNg0e.js";import{_ as me,fp as ee,el as st}from"./three.core-3arARmh6.js";import{w as rt,l as nt}from"./live-gesture-lock-DJbrjOqf.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";import"./index-OZVqp6xS.js";import"./index-Da9JhEvW.js";import"./seeded-random-38To73fI.js";import"./debug-registry-l7k5Hjc8.js";import"./game-audio-CaGKzia4.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./index-bQE2NA0D.js";import"./live-project-verbs-BOAQN3ME.js";import"./capability-coverage-DQgg6UJe.js";import"./game-contract-seams-C0AVYwvO.js";import"./json-history-resource-CTXRV4GD.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./active-ingest-CnAeQcuQ.js";import"./ingest-source-persistence-6peGfPAS.js";import"./contract-system-adapters-h6OUBRYA.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-B35t51xX.js";import"./mounted-authoring-B7RL_V28.js";import"./entity-object-B_5Gc0Ky.js";import"./user-data-CqOoAowZ.js";import"./workspace-arrangement-DIMM7ska.js";import"./three-contract-Dkt6PmWY.js";import"./three-oYrcK5SQ.js";import"./editor-layers-B4oYfpj8.js";import"./component-instance-root-df4ofoOR.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./adapter-surface-Y37Nzcyw.js";import"./three-authoring-adapter-BrkGH4cd.js";import"./source-persistence-backend-HviqjKZ2.js";import"./three-projection-core-jBJVt6O0.js";import"./body-marks-RKb_LTwL.js";import"./user-data-dHvLdpwM.js";import"./object-marks-DwvIEBOK.js";import"./structural-ids-Br2zjINh.js";import"./object3d-authoring-subject-BDrxd1GA.js";import"./r3f-physics-binding-Bgzzd4ol.js";import"./deferred-ingest-play-Bej67_y9.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-C1jPW_cN.js";import"./board-guides-_3R1t_-2.js";import"./relative-import-specifier-DQzkawgj.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-C8RP8G5F.js";import"./inference-diagnostics-MGcIHEX6.js";import"./writer-tw6EcuVO.js";import"./three-state-wXRU3rLr.js";import"./editor-shell-store-Bh1S7M54.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./viewport-door-DVkMQazS.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./relative-path-guard-GiM7Lsz8.js";import"./react-root-BHA-cdrW.js";import"./canvas-entry-runtime-DVeh71nC.js";import"./three-ingest-runtime-CXKjNysA.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./CSS3DRenderer-BsAqfavI.js";import"./native-entry-surface-BE8LJNdu.js";import"./loader-BTUKnX5Q.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./binding-Bmxqznjk.js";import"./root-stacking-BEd9ZvxC.js";import"./setup-renderer-OOw1SykJ.js";import"./index-DHhMOs_s.js";import"./defaults-DKiBJCPN.js";import"./render-settings-BBvkacR3.js";import"./render-features-C7QwmhCo.js";import"./loop-gate-report-N52EWFGD.js";import"./system-slot-E2mEdiih.js";import"./performance-profiler-OwnXQX0M.js";function it(t,e){const i=()=>{},a=new Set(["dispose","forceContextLoss","forceContextRestore","setAnimationLoop","setSize","setPixelRatio","setDrawingBufferSize"]),u=new Map,S={...e.shadowMap};let R=e.xr.enabled;const b=e.getClearColor(new me);let C=e.getClearAlpha(),$=null,V=0,G=0;const d=e.getViewport(new ee),h=e.getScissor(new ee);let P=e.getScissorTest(),y=!1,x=!1,F=!1;const O=(c,o,s,n,w)=>{typeof o=="number"?c.set(o,s,n,w):c.copy(o)},B=new Proxy(e.xr,{get(c,o){if(o==="enabled")return R;if(o==="setAnimationLoop"||o==="addEventListener"||o==="removeEventListener")return i;const s=Reflect.get(c,o,c);return typeof s=="function"?s.bind(c):s},set(c,o,s){return o==="enabled"?(R=s,!0):Reflect.set(c,o,s,c)}}),U=new Proxy(e.renderLists,{get(c,o){if(o==="dispose")return i;const s=Reflect.get(c,o,c);return typeof s=="function"?s.bind(c):s}});function _(c,o){const s=new Map,n={...e.shadowMap},w=e.xr.enabled,M=e.getClearColor(new me),I=e.getClearAlpha(),J=e.getRenderTarget(),K=e.getActiveCubeFace(),W=e.getActiveMipmapLevel(),q=e.getViewport(new ee),te=e.getScissor(new ee),X=e.getScissorTest();try{for(const[j,N]of u)s.set(j,Reflect.get(e,j)),Reflect.set(e,j,N);return Object.assign(e.shadowMap,S),e.xr.enabled=R,e.setClearColor(b,C),e.setViewport(d),e.setScissor(h),e.setScissorTest(P),e.setRenderTarget($,V,G),y&&e.setViewport(d),x&&e.setScissor(h),F&&e.setScissorTest(P),c.apply(e,o)}finally{for(const[j,N]of s)Reflect.set(e,j,N);Object.assign(e.shadowMap,n),e.xr.enabled=w,e.setClearColor(M,I),e.setViewport(q),e.setScissor(te),e.setScissorTest(X),e.setRenderTarget(J,K,W)}}const z=new Map;return new Proxy(e,{get(c,o){if(o==="domElement")return t;if(o==="shadowMap")return S;if(o==="xr")return B;if(o==="renderLists")return U;if(a.has(o))return i;if(o==="getRenderTarget")return()=>$;if(o==="getActiveCubeFace")return()=>V;if(o==="getActiveMipmapLevel")return()=>G;if(o==="setRenderTarget")return(n,w=0,M=0)=>{$=n,V=w,G=M,y=x=F=!1};if(o==="getViewport")return n=>n.copy(d);if(o==="getCurrentViewport")return n=>$&&!y?n.copy($.viewport):(n.copy(d).multiplyScalar(e.getPixelRatio()),y?n.round():n.floor());if(o==="getScissor")return n=>n.copy(h);if(o==="getScissorTest")return()=>P;if(o==="setViewport")return(n,w,M,I)=>{O(d,n,w,M,I),y=!0};if(o==="setScissor")return(n,w,M,I)=>{O(h,n,w,M,I),x=!0};if(o==="setScissorTest")return n=>{P=n,F=!0};if(o==="getClearColor")return n=>n.copy(b);if(o==="getClearAlpha")return()=>C;if(o==="setClearColor")return(n,w=C)=>{b.set(n),C=w};if(o==="setClearAlpha")return n=>{C=n};if(u.has(o))return u.get(o);const s=Reflect.get(c,o,c);if(typeof s!="function")return s;if(!z.has(o)){const n=/^(render|compile|clear|copy|init|readRenderTarget)/.test(String(o));z.set(o,n?(...w)=>{if(!((o==="render"||String(o).startsWith("clear"))&&!$))return _(s,w)}:s.bind(c))}return z.get(o)},set(c,o,s){return o!=="domElement"&&u.set(o,s),!0}})}class at{pending=new WeakMap;remember(e,i){const a=[...i];a.length===0?this.pending.delete(e):this.pending.set(e,a)}take(e,i){const a=[...i],u=this.pending.get(e)??[];return this.pending.delete(e),a.length>0?a:u}}function he(t){return decodeURIComponent(t.split("?")[0]).replace(/^\/@fs\/(?=[A-Za-z]:\/)/,"").replace(/^\/@fs/,"")}class lt{sources=new Map;applied=new Map;expected=new Map;missingRevision=!1;source(e){this.sources.set(e.file,e)}complete(e){for(const[i,a]of this.sources){const u=e.filter(R=>a.timestamp===R.timestamp);(a.boundaries?a.boundaries.every(R=>u.some(b=>b.acceptedPath===R)):u.some(R=>he(R.acceptedPath)===i))&&(this.applied.set(a.path,a.sha),this.sources.delete(i))}}matches(e){const i=he(e.acceptedPath);return[...this.sources.values()].some(a=>a.timestamp===e.timestamp&&(a.boundaries?a.boundaries.includes(e.acceptedPath):a.file===i))}revision(e){for(const i of e)this.expected.set(i.path,i.sha),i.sha===null&&this.applied.delete(i.path)}needsRemount(){if(this.missingRevision)return!0;for(const[e,i]of this.expected)if(i===null||this.applied.get(e)!==i)return!0;return!1}missing(){this.missingRevision=!0}mounted(){this.expected.clear(),this.applied.clear(),this.sources.clear(),this.missingRevision=!1}}function ct(t){return t instanceof st||t!==null&&typeof t=="object"&&t.isScene===!0}function pt(t){return t.find(e=>e.surface==="three")?.id??null}const ge=new at;function dt(t,e,i){return new Error(`three root "${t}" failed to mount: ${e} did not export a RootAdapter or a default React component (exports: ${i.join(", ")||"(nothing)"}).`)}function ut(t,e){const i=je(e);T.error(`[r3f-design] world "${t}" failed to mount: ${i}`,"authoring");const a=De(i);return a&&Be(a).then(u=>T.error(`[r3f-design] world "${t}": ${He(u)}`,"authoring")),Le({worldId:t,kind:"three",identity:"default-three",message:i}),i}async function ft(t,e,i,a){const u=await t.loadEntryModule(i,e,"three"),S=a===i?u:await t.loadEntryModule(a,e,"three");return{designModule:u,rootModule:S}}function mt(t,e,i,a,u,S){ke(t,e,i,{id:a}),Je(t,u?[u]:[]),Ke(t,We(t,S?[S]:[]))}function ht(t){const e=document.createElement("canvas"),i=it(e,t),a=Ye(),u=et({loop:tt({update:()=>{}}),assets:a});return{game:u,host:{three:ot,surface:{canvas:e,width:1280,height:720},renderer:i,assets:a,headless:!1,game:u},dispose:()=>u.dispose()}}function we(t){return{id:t.id,kind:t.surface,adapter:t.adapter,entryOrScenePath:t.entry??t.scene,zOrder:t.zOrder??0,pausable:t.pausable??!0}}function ne(t){let e=!1,i=!1;const a=()=>{e||i||t.shell.playState!=="stopped"||(i=!0,ye())},u=t.shell.subscribe(a);return a(),()=>{e=!0,u()}}async function as(t,e,i){const a=Ve();if(!a)return()=>{};const u=await $e();if(t.shell.playState!=="stopped")return ne(t);const S=_e(u);if(!S)return()=>{};const R=pt(Ae(S)),b=R?Ce(S,R):void 0;if(!b)return()=>{};const C=b.world?.entry??b.entry,$=b.world?.export;if(!C||!/\.(tsx|jsx)$/.test(C))return()=>{};const V=Ee(()=>import("./r3f-source-authoring-adapter-C8oMjdTL.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31])),G=Pe();let d=!1,h=!1,P=null,y=null,x=!1,F=null,O=!1,B=!1,U,_,z,c=null,o=null;const s=b.id,n=C,w=()=>{o||!c||d||h||t.shell.playState!=="stopped"||(o=c.systemAdapters,ue(o))},M=()=>{o&&(o=null,ue(null))},I=async()=>{const r=await Ne(a.rootPath,Ge()),{designModule:p,rootModule:f}=await ft(r,s,n,b.entry??n),l=Xe(s,f),m=Ze(s,f,"three"),g=await qe(p,s,{...$===void 0?{}:{namedExport:$},entryPath:n});if(!g)throw dt(s,n,Object.keys(p));return $!==void 0?{adapter:g,entryDebug:l,entrySystems:m}:{adapter:g,entryDebug:l,entrySystems:m,components:p.components??p.behaviors}},J=async(r,p,f)=>{const{host:l,game:m,dispose:g}=ht(i);let v;try{v=await r.mount(l)}catch(Y){throw g(),Y}if(v.kind!=="three"||!ct(v.scene))throw v.dispose(),g(),new Error(`entry adapter for world "${s}" did not mount a three scene`);return mt(m,r,v,s,p,f),{root:v,game:m,disposeHost:g}},K=r=>{P=r.root,c=r.game,_?.();const p=r.game;_=p.subscribeSystemAdapters?.(()=>{if(c!==p)return;const f=p.systemAdapters;o&&(o=f,Oe(f)),t.shell.notifyIngestEdit()}),U=r.disposeHost},W=()=>{M(),_?.(),_=void 0,c=null;try{P?.dispose()}catch(r){T.error(`[r3f-design] dispose failed: ${r}`,"authoring")}P=null;try{U?.()}catch(r){T.error(`[r3f-design] design host dispose failed: ${r}`,"authoring")}U=void 0},q=()=>{if(!x)return;x=!1;const r=F;F=null,r?t.releaseAdoptedScene(r):t.exitPlayScene()},te=()=>{h=!0,q(),W(),e.replaceChild(s,new fe(t.shell,we(b),"R3F design session suspended by play mode — Stop restores it.")),t.shell.notifyIngestEdit()},X=r=>{const p=ut(s,r);e.replaceChild(s,new fe(t.shell,we(b),p)),t.shell.notifyIngestEdit()},j=setTimeout(()=>{T.warn(`[r3f-design] world "${s}" is still importing after 20s (${n}). The in-browser compiler or a module download may be stalled on a slow connection — it keeps trying; reload the tab if nothing appears.`,"authoring")},2e4);try{const[r,{R3fSourceAuthoringAdapter:p},f]=await Promise.all([I(),V,G]);if(clearTimeout(j),!r)return T.warn(`[r3f-design] world "${s}" produced no design entry (${n}) — the scene stays empty. This is a bug worth reporting; reload the tab to retry.`,"authoring"),()=>{};if(d)return()=>{};if(t.shell.playState!=="stopped")return ne(t);const l=await J(r.adapter,r.entryDebug,r.entrySystems);if(K(l),d||t.shell.playState!=="stopped")return W(),d?()=>{}:ne(t);y=new p(t,l.root.scene,{worldId:s,entryPath:n,writeBackend:f,physics:()=>ce(c?.systemAdapters.physics)}),e.replaceChild(s,y),ze(l.root.scene).then(v=>{v&&!d&&t.shell.notifyIngestEdit()});const m=ge.take(t,t.shell.selectedEntityIds);t.enterPlayScene(l.root.scene,l.root.rendererConfig),x=!0,F=l.root.scene,t.focusOnScene(()=>Qe(null,l.root.scene));const g=m.filter(v=>e.hierarchy.node(v)!==null);g.length>0&&t.shell.selectMultiple(g),pe(s),w(),t.shell.notifyIngestEdit(),T.log(`[r3f-design] world "${s}" mounted for design-time authoring (${n})`,"authoring")}catch(r){clearTimeout(j),X(r)}const N=(r,p,f,l,m)=>{const g=performance.now()-p;g<400||console.info(`[r3f-design] world "${r}" remounted in ${g.toFixed(0)}ms (import ${(f-p).toFixed(0)}ms, mount ${(l-f).toFixed(0)}ms, settle ${(m-l).toFixed(0)}ms, adopt ${(performance.now()-m).toFixed(0)}ms)`)},be=async()=>{if(d||h)return;const r=[...t.shell.selectedEntityIds],p=H,f=t.shell.projectHistory?.getSnapshot().busy===!0;let l="importing";const m=setTimeout(()=>{T.warn(`[r3f-design] world "${s}" remount is still ${l} after 20s (${n}) — it keeps trying; reload the tab if nothing appears.`,"authoring")},2e4),g=performance.now();let v=g,Y=g,ae=g;try{const D=await I();if(v=performance.now(),!D||d||h){console.info(`[r3f-design] world "${s}" remount abandoned after import (${D?d?"torn down":"suspended":"no entry"})`);return}l="mounting";const A=await J(D.adapter,D.entryDebug,D.entrySystems);Y=performance.now();for(let E=0;E<50&&(await rt(),await ve(),!(!nt()&&t.shell.projectHistory?.getSnapshot().busy!==!0));E+=1);if(ae=performance.now(),!d&&!h&&H!==p){A.root.dispose(),A.disposeHost(),L();return}if(d||h){console.info(`[r3f-design] world "${s}" remount abandoned after mount (${d?"torn down":"suspended"})`),A.root.dispose(),A.disposeHost();return}const k=new Set(t.shell.selectedEntityIds);if(q(),W(),K(A),y)y.adoptScene(A.root.scene),e.childAdapters().find(re=>re.worldId===s)?.adapter!==y&&(e.replaceChild(s,y),T.log(`[r3f-design] world "${s}" recovered and remounted for design-time authoring (${n})`,"authoring"));else{const[{R3fSourceAuthoringAdapter:E},re]=await Promise.all([V,G]);y=new E(t,A.root.scene,{worldId:s,entryPath:n,writeBackend:re,physics:()=>ce(c?.systemAdapters.physics)}),e.replaceChild(s,y),T.log(`[r3f-design] world "${s}" recovered and mounted for design-time authoring (${n})`,"authoring")}const Me=k.size>0&&(k.size!==r.length||r.some(E=>!k.has(E)));t.enterPlayScene(A.root.scene,A.root.rendererConfig),x=!0,F=A.root.scene;const le=(Me?[...k]:r).filter(E=>y?.hierarchy.node(E)!==null);le.length>0&&t.shell.selectMultiple(le),pe(s),w(),t.shell.notifyIngestEdit(),N(s,g,v,Y,ae),Q.mounted(),clearTimeout(Z),B=!1}catch(D){X(D),!B&&!d&&!h?(B=!0,setTimeout(()=>{!d&&!h&&L()},400)):!d&&!h&&(H===p&&!f?Se(D):(B=!1,L()))}finally{clearTimeout(m),!d&&!h&&H!==p&&L()}},ve=async()=>{const r=t.shell.projectHistory;if(!r)return;const p=Date.now()+1e4;for(;r.getSnapshot().busy&&Date.now()<p;)await new Promise(f=>{const l=setTimeout(f,250),m=r.subscribe(()=>{clearTimeout(l),m(),f()})})},Se=async r=>{const p=r instanceof Error?r.message:String(r);if(!p.includes("fiber crashed"))return;if(/Could not load |Failed to fetch|Unexpected token '<'|not valid JSON/.test(p)){T.error(`World "${s}" failed to load a project asset (${p}). The edit is kept; the world remounts once the asset can be served.`,"authoring");return}const f=t.shell.projectHistory;if(!f)return;const l=f.getSnapshot(),m=l.canUndo?l.transactions[l.cursor-1]:void 0;if(!m||Date.now()-m.timestamp>15e3){console.info(`[r3f-design] world "${s}" crash auto-undo skipped (${m?"last edit too old":l.canUndo?"no entry":`cannot undo: busy=${l.busy} blocked=${l.blocked}`})`);return}if(!await f.undo().catch(()=>!1)){console.info(`[r3f-design] world "${s}" crash auto-undo refused by history`);return}B=!1,T.error(`Undid “${m.label}”: that edit crashed world "${s}" (${r instanceof Error?r.message:String(r)}). The previous source is restored.`,"authoring"),L()};let H=0;const Q=new lt;let Z;const L=()=>{if(d||h){console.info(`[r3f-design] world "${s}" remount skipped: ${d?"session torn down":"suspended for play"}`);return}O||(O=!0,setTimeout(()=>{O=!1,be()},80))},Re=xe(r=>{Ue(r).then(()=>{H+=1,L()})});let oe=de()?.revision??0;const Te=Fe(r=>{H+=1;const f=de()?.revisions.filter(m=>m.revision>oe)??[];f.length!==r-oe&&Q.missing(),oe=r;const l=f.flatMap(m=>m.resources);Q.revision(l),!(l.length&&!Q.needsRemount())&&(clearTimeout(Z),Z=setTimeout(()=>{l.length&&!Q.needsRemount()||(H+=1,L())},2e3))});let ie=!1,se=!1;return z=t.shell.subscribe(()=>{if(!d){if(t.shell.playState==="stopped"?w():M(),!h&&!se&&t.shell.playState!=="stopped"){se=!0,Ie(()=>{se=!1,!(d||h||t.shell.playState==="stopped")&&te()});return}h&&!ie&&t.shell.playState==="stopped"&&(ie=!0,ye())}}),()=>{d=!0,console.info(`[r3f-design] world "${s}" design session torn down`),M(),Re(),Te(),clearTimeout(Z),z?.(),!h&&t.shell.playState==="stopped"&&t.shell.selectedEntityIds.size>0&&ge.remember(t,t.shell.selectedEntityIds),q(),W()}}export{ft as loadR3FDesignEntryModules,as as mountR3FDesignSession,mt as registerR3FDesignRoot,ut as reportDesignMountFailure,dt as unresolvedDesignEntryError};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{cz as L}from"./index-CaG87ZF-.js";const Y=.1,w=4,x=.02,X=32,b=.002,P=4;function g(t,o,i){return o===1?t*16:o===2?t*i:t}function D(t,o){let i=g(o.deltaX,o.deltaMode,o.bounds.width),s=g(o.deltaY,o.deltaMode,o.bounds.height);if(o.ctrlKey||o.metaKey){const n=Math.min(w,Math.max(Y,t.zoom*Math.exp(-s*b))),a=o.clientX-o.bounds.left,d=o.clientY-o.bounds.top,c=(a-t.x)/t.zoom,u=(d-t.y)/t.zoom;return{x:a-c*n,y:d-u*n,zoom:n}}return o.shiftKey&&i===0&&(i=s,s=0),{x:t.x-i,y:t.y-s,zoom:t.zoom}}function I(t,o){const i=g(o.deltaY,o.deltaMode,o.bounds.height),s=Math.min(X,Math.max(x,t.zoom*Math.exp(-i*b))),n=o.clientX-o.bounds.left,a=o.clientY-o.bounds.top,d=(n-t.x)/t.zoom,c=(a-t.y)/t.zoom;return{x:n-d*s,y:a-c*s,zoom:s}}function p(t){return t instanceof Element&&t.closest('[data-vgai-canvas-navigation-ignore="true"]')!==null}function C(t,o,i,s={}){let n=null,a=!1,d="";const c=()=>t.querySelector('[data-testid="world-selection-overlay-interaction"]'),u=e=>{t.dataset.canvasPanning=e?"true":"false",t.style.cursor=e?"grabbing":"";const r=c();r&&(e?(d=r.style.cursor,r.style.cursor="grabbing"):r.style.cursor=d)},m=e=>{if(!n||e.pointerId!==n.pointerId)return;const r=n.button===1?4:2;if((e.buttons&r)===0){l(e);return}const f=e.clientX-n.startClientX,v=e.clientY-n.startClientY;if(!n.moved){if(Math.hypot(f,v)<=P)return;n.moved=!0,u(!0)}o.setPan(n.startPan.x+f,n.startPan.y+v)},l=e=>{if(!n||e.pointerId!==n.pointerId)return;const r=n.pointerId;n.button===2&&n.moved&&(a=!0),n=null,u(!1),t.hasPointerCapture?.(r)&&t.releasePointerCapture(r),window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",l),window.removeEventListener("pointercancel",l)},h=e=>{const r=e.button===1,f=s.rightDragPans===!0&&e.button===2;!r&&!f||p(e.target)||(f&&(a=!1),e.preventDefault(),r&&e.stopPropagation(),n={pointerId:e.pointerId,button:e.button,startClientX:e.clientX,startClientY:e.clientY,startPan:o.get(),moved:r},t.setPointerCapture?.(e.pointerId),u(r),window.addEventListener("pointermove",m),window.addEventListener("pointerup",l),window.addEventListener("pointercancel",l))},E=e=>{e.button===1&&!p(e.target)&&e.preventDefault()},M=e=>{s.rightDragPans!==!0||!(n?.button===2&&n.moved)&&!a||(a=!1,e.preventDefault(),e.stopPropagation())},y=e=>{if(p(e.target))return;e.preventDefault(),e.stopPropagation();const r=i(o.get(),{clientX:e.clientX,clientY:e.clientY,deltaX:e.deltaX,deltaY:e.deltaY,deltaMode:e.deltaMode,ctrlKey:e.ctrlKey,metaKey:e.metaKey,shiftKey:e.shiftKey,bounds:t.getBoundingClientRect()});o.setView(r.x,r.y,r.zoom)};return t.addEventListener("pointerdown",h,!0),t.addEventListener("lostpointercapture",l,!0),t.addEventListener("mousedown",E,!0),t.addEventListener("contextmenu",M,!0),t.addEventListener("wheel",y,{capture:!0,passive:!1}),()=>{n=null,u(!1),t.removeEventListener("pointerdown",h,!0),t.removeEventListener("lostpointercapture",l,!0),t.removeEventListener("mousedown",E,!0),t.removeEventListener("contextmenu",M,!0),t.removeEventListener("wheel",y,!0),window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",l),window.removeEventListener("pointercancel",l)}}function O(t,o=L){return C(t,o,D)}function N(t,o){return C(t,o,I,{rightDragPans:!0})}export{X as S,x as a,N as b,O as i};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as n}from"./jsx-runtime-DPjLkJKQ.js";import{eH as ye,eI as ne,eJ as xe,eK as be,eL as je,eM as Se,dt as ve,eN as Ce,eO as Re,eP as ke,eQ as we,az as Ee,eR as m,em as u,eo as j,$ as k,eS as O,eT as $e,eU as H,dg as K,J as B,es as Te,aL as J,eV as se,eW as Ie,eX as Ne,aQ as Me,aq as ie,eY as Oe,eZ as Ae}from"./index-CaG87ZF-.js";import{r as v}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{p as re,G as ae,c as M,B as Be,A as Fe,S as A,a as Le,b as De,F as _e,d as Y,e as ze,f as Pe,T as We,g as X,h as Ge,C as He,i as Ue,j as Ke}from"./ShadowEditor-DP1LWynl.js";import{s as oe,a as U,b as Ve}from"./board-guides-_3R1t_-2.js";import{b as Je}from"./eyedropper-session-bjPXnfeX.js";import{k as Ye,l as Xe}from"./inspect-C8RP8G5F.js";import{D as Qe}from"./dom-authoring-adapter-CoESNvrM.js";import{R as D,c as qe}from"./react-world-authoring-adapter-C1jPW_cN.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"./inference-diagnostics-MGcIHEX6.js";import"./json-history-resource-CTXRV4GD.js";import"./relative-import-specifier-DQzkawgj.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./writer-tw6EcuVO.js";function le(e,t){if(!e)return null;const s=(()=>{if(!(t instanceof Ee))return t;const i=t.ownerOf(e.id);return i===null?null:t.childAdapters().find(a=>a.worldId===i)?.adapter??null})();return s instanceof D||s instanceof Qe?s:null}const Ze=(e,t)=>le(e,t)!==null,et="element",tt=1500,nt="story",st=1600;function T(e){const t=e.indexOf(".");return t===-1?e:e.slice(t+1)}function it(e){const t=T(e.path);return e.type==="color"?"color":/^fontFamily$/i.test(t)?"font":t==="background"||t==="backgroundImage"?"gradient":t==="boxShadow"?"shadow":t==="textShadow"?"text-shadow":t==="filter"?"filter":t==="backdropFilter"?"backdrop-filter":t==="borderRadius"?"radius":e.type==="string"&&t==="transform"?"transform":e.type==="boolean"?"checkbox":e.type==="enum"?"select":e.type==="json"?"json":e.type==="number"?"scrub":"text"}function rt(e,t,s,i){if(!(e.path==="style.borderWidth"||e.path==="style.borderStyle"||e.path==="style.borderColor"))return!1;const o=t.get("style.borderWidth"),c=t.get("style.borderStyle"),r=t.get("style.borderColor");return!o||!c||!r?!1:(i.push({kind:"border",width:o,style:c,color:r}),s.add(o.path),s.add(c.path),s.add(r.path),!0)}function at(e,t,s,i){if(!(e.path==="style.justifyContent"||e.path==="style.alignItems"))return!1;const o=t.get("style.justifyContent"),c=t.get("style.alignItems");return!o||!c?!1:(i.push({kind:"align",justify:o,align:c}),s.add(o.path),s.add(c.path),!0)}function ce(e){const t=new Map(e.map(a=>[a.path,a])),s=new Set,i=[];for(const a of e)s.has(a.path)||rt(a,t,s,i)||at(a,t,s,i)||i.push({kind:"single",prop:a});return i}function _(e){return typeof e=="number"&&Number.isFinite(e)?e:0}function F(e){return`react-prop-${e.replace(/\./g,"-")}`}const de={type:"linear",angle:180,stops:[{color:"#ffffff",position:0},{color:"#000000",position:1}]};function w({label:e,testId:t,children:s}){return n.jsxs("div",{"data-testid":t?`${t}-row`:void 0,style:{...Oe,padding:`${u[2]} ${u[4]}`},children:[n.jsx("span",{style:{width:Ae,flexShrink:0,fontSize:j.base,color:m.textMuted},children:e}),n.jsx("div",{style:{flex:1,minWidth:0},children:s})]})}function ot({prop:e,raw:t,disabled:s,testId:i,commit:a}){return n.jsx(w,{label:e.label,testId:i,children:n.jsx(He,{testId:i,value:String(t??"#ffffff"),disabled:s,onChange:o=>a(e.path,o),onChangeEnd:o=>a(e.path,o),eyedropperFallback:()=>Xe([String(t??"")]),onEyedropperPick:o=>Je(o)})})}function lt({prop:e,raw:t,disabled:s,fonts:i,testId:a,commit:o}){return n.jsx(w,{label:e.label,testId:a,children:n.jsx(Ge,{testId:a,value:String(t??""),fonts:i,disabled:s,onChange:c=>o(e.path,c)})})}function ct({prop:e,raw:t,disabled:s,testId:i,commit:a}){const o=re(String(t??"none"));return o?n.jsx(w,{label:e.label,testId:i,children:n.jsx(ae,{testId:i,value:o,disabled:s,onChange:c=>a(e.path,M(c)),onChangeEnd:c=>a(e.path,M(c))})}):n.jsx(w,{label:e.label,testId:i,children:n.jsx(k,{type:"button",variant:"secondary",className:"vgai-field-trigger","data-testid":i,disabled:s,onClick:()=>a(e.path,M(de)),children:"No gradient — click to add"})})}function Q({prop:e,raw:t,disabled:s,testId:i,commit:a,withSpreadInset:o}){const c=ze(String(t??"none"),o),r=o?Pe:We;return n.jsx(w,{label:e.label,testId:i,children:n.jsx(r,{value:c,disabled:s,onChange:l=>a(e.path,X(l,o)),onChangeEnd:l=>a(e.path,X(l,o))})})}function q({prop:e,raw:t,disabled:s,testId:i,commit:a,label:o}){const c=De(String(t??"none"));return n.jsx(w,{label:e.label,testId:i,children:n.jsx(_e,{testId:i,label:o,value:c,disabled:s,onChange:r=>a(e.path,Y(r)),onChangeEnd:r=>a(e.path,Y(r))})})}const G=[{key:"topLeft",suffix:"TopLeft"},{key:"topRight",suffix:"TopRight"},{key:"bottomLeft",suffix:"BottomLeft"},{key:"bottomRight",suffix:"BottomRight"}];function dt({adapter:e,id:t,prop:s,raw:i,disabled:a,testId:o,commit:c,removeStyle:r}){const l=_(i),d=G.reduce((g,{key:f,suffix:S})=>{const x=e.inspector?.get(t,`style.border${S}Radius`);return g[f]=ie(x)??l,g},{}),y=g=>{if(Ke(g)){c(s.path,g.topLeft);for(const{suffix:f}of G)r(`style.border${f}Radius`);return}for(const{key:f,suffix:S}of G)c(`style.border${S}Radius`,g[f])};return n.jsx(w,{label:s.label,testId:o,children:n.jsx(Le,{value:d,disabled:a,onChange:y,onChangeEnd:y})})}function ut({prop:e,raw:t,disabled:s,testId:i,commit:a}){const o=se.has(T(e.path))?"":"px";return n.jsx(A,{testId:i,label:e.label,value:_(t),unit:o,disabled:s,onChange:c=>a(e.path,c),onChangeEnd:c=>a(e.path,c),style:{padding:`${u[2]} ${u[4]}`}})}function pt({prop:e,raw:t,disabled:s,testId:i,commit:a}){return n.jsx(w,{label:e.label,testId:i,children:n.jsx(K,{"data-testid":i,value:String(t??""),disabled:s,"data-dynamic":s||void 0,onChange:o=>a(e.path,o.target.value),style:{width:"100%"},children:(e.options??[]).map(o=>n.jsx("option",{value:String(o),children:String(o)},String(o)))})})}function gt({prop:e,raw:t,disabled:s,testId:i,commit:a}){return n.jsxs("label",{style:{display:"flex",gap:u[3],alignItems:"center",padding:`${u[3]} ${u[4]}`,fontSize:j.md},children:[n.jsx(Me,{className:"vgai-checkbox","data-testid":i,checked:t!==!1,disabled:s,onChange:o=>a(e.path,o.target.checked)}),e.label]})}function ht({prop:e,raw:t,disabled:s,testId:i,commit:a}){return n.jsx(w,{label:e.label,testId:i,children:n.jsx(Ne,{"data-testid":i,defaultValue:JSON.stringify(t??null),disabled:s,"data-dynamic":s||void 0,"data-variant":"code",style:{width:"100%",minHeight:40},onBlur:o=>{try{a(e.path,JSON.parse(o.target.value))}catch{}}})})}function ue({prop:e,raw:t,disabled:s,testId:i,commit:a}){return n.jsx(w,{label:e.label,testId:i,children:n.jsx(Ie,{type:"text","data-testid":i,readOnly:s,"data-dynamic":s||void 0,value:String(t??""),onCommit:o=>a(e.path,o),style:{width:"100%"}})})}const ft=/^rotate\(\s*(-?[\d.]+)deg\s*\)\s*scale\(\s*(-?[\d.]+)\s*\)$/i,mt=/^scale\(\s*(-?[\d.]+)\s*\)\s*rotate\(\s*(-?[\d.]+)deg\s*\)$/i,yt=/^rotate\(\s*(-?[\d.]+)deg\s*\)$/i,xt=/^scale\(\s*(-?[\d.]+)\s*\)$/i,bt=/^matrix\(\s*(-?[\d.eE+-]+)\s*,\s*(-?[\d.eE+-]+)\s*,\s*(-?[\d.eE+-]+)\s*,\s*(-?[\d.eE+-]+)\s*,\s*(-?[\d.eE+-]+)\s*,\s*(-?[\d.eE+-]+)\s*\)$/,L=1e-4;function jt(e){const t=e.trim();if(t===""||t==="none")return{rotateDeg:0,scale:1};const s=ft.exec(t);if(s)return{rotateDeg:Number(s[1]),scale:Number(s[2])};const i=mt.exec(t);if(i)return{rotateDeg:Number(i[2]),scale:Number(i[1])};const a=yt.exec(t);if(a)return{rotateDeg:Number(a[1]),scale:1};const o=xt.exec(t);if(o)return{rotateDeg:0,scale:Number(o[1])};const c=bt.exec(t);if(!c)return null;const[r,l,d,y,g,f]=c.slice(1,7).map(Number);if(Math.abs(g)>L||Math.abs(f)>L||Math.abs(d+l)>L||Math.abs(y-r)>L)return null;const S=Math.hypot(r,l);if(S<L)return null;const x=Math.atan2(l,r)*180/Math.PI;return{rotateDeg:Math.round(x*100)/100,scale:Math.round(S*1e3)/1e3}}function St(e){return`rotate(${e.rotateDeg}deg) scale(${e.scale})`}function vt(e){const{prop:t,raw:s,disabled:i,testId:a,commit:o}=e,c=jt(String(s??"none"));if(!c)return n.jsx(ue,{...e});const r=l=>o(t.path,St(l));return n.jsx(w,{label:t.label,testId:a,children:n.jsxs("div",{style:{display:"flex",gap:u[3]},children:[n.jsx(A,{testId:`${a}-rotate`,label:"Rotate",value:c.rotateDeg,unit:"deg",disabled:i,onChange:l=>r({...c,rotateDeg:l}),onChangeEnd:l=>r({...c,rotateDeg:l}),style:{flex:1}}),n.jsx(A,{testId:`${a}-scale`,label:"Scale",value:c.scale,unit:"x",step:.1,disabled:i,onChange:l=>r({...c,scale:l}),onChangeEnd:l=>r({...c,scale:l}),style:{flex:1}})]})})}function $({adapter:e,id:t,prop:s,fonts:i}){const a=B(),o=(l,d)=>{e.inspector?.set(t,l,d),a.notifyIngestEdit()},c=l=>{e.inspector?.remove?.(t,l),a.notifyIngestEdit()},r={prop:s,raw:e.inspector?.get(t,s.path),disabled:s.readonly,testId:F(s.path),commit:o,fonts:i};switch(it(s)){case"color":return n.jsx(ot,{...r});case"font":return n.jsx(lt,{...r});case"gradient":return n.jsx(ct,{...r});case"shadow":return n.jsx(Q,{...r,withSpreadInset:!0});case"text-shadow":return n.jsx(Q,{...r,withSpreadInset:!1});case"filter":return n.jsx(q,{...r,label:"Filter"});case"backdrop-filter":return n.jsx(q,{...r,label:"Backdrop Filter"});case"radius":return n.jsx(dt,{...r,adapter:e,id:t,removeStyle:c});case"transform":return n.jsx(vt,{...r});case"scrub":return n.jsx(ut,{...r});case"select":return n.jsx(pt,{...r});case"checkbox":return n.jsx(gt,{...r});case"json":return n.jsx(ht,{...r});default:return n.jsx(ue,{...r})}}function pe({adapter:e,id:t,row:s}){const i=B(),a=(r,l)=>{e.inspector?.set(t,r,l),i.notifyIngestEdit()},o=r=>{e.inspector?.remove?.(t,r),i.notifyIngestEdit()};if(s.kind==="border"){const r={width:_(e.inspector?.get(t,s.width.path)),style:String(e.inspector?.get(t,s.style.path)??"solid"),color:String(e.inspector?.get(t,s.color.path)??"#000000")},l=f=>{const S=ie(e.inspector?.get(t,`style.border${f}Width`)),x=e.inspector?.get(t,`style.border${f}Style`),C=e.inspector?.get(t,`style.border${f}Color`),p=typeof C=="string"?qe(C):void 0;return{width:S??r.width,style:typeof x=="string"&&x?x:r.style,color:p??r.color}},d={top:l("Top"),right:l("Right"),bottom:l("Bottom"),left:l("Left")},y=["Top","Right","Bottom","Left"],g=f=>{if(Ue(f)){a(s.width.path,f.top.width),a(s.style.path,f.top.style),a(s.color.path,f.top.color);for(const x of y)o(`style.border${x}Width`),o(`style.border${x}Style`),o(`style.border${x}Color`);return}const S=y.map(x=>({suffix:x,side:f[x.toLowerCase()]}));for(const{suffix:x,side:C}of S)a(`style.border${x}Width`,C.width),a(`style.border${x}Style`,C.style),a(`style.border${x}Color`,C.color)};return n.jsx(w,{label:"Border",testId:"react-prop-border",children:n.jsx(Be,{value:d,onChange:g,onChangeEnd:g})})}const c={justify:e.inspector?.get(t,s.justify.path)??"flex-start",align:e.inspector?.get(t,s.align.path)??"flex-start"};return n.jsx(w,{label:"Align",testId:"react-prop-align",children:n.jsx(Fe,{value:c,onChange:r=>{a(s.justify.path,r.justify),a(s.align.path,r.align)}})})}function z(e){return e.kind==="single"?e.prop.path:e.kind==="border"?`border:${e.width.path}`:`align:${e.justify.path}`}function E(e,t,s,i,a){if(!s)return null;const o=se.has(T(s.path))?"":"px",c=F(s.path);return n.jsx(A,{testId:c,label:i,value:_(e.inspector?.get(t,s.path)),unit:o,disabled:s.readonly,onChange:r=>a(s.path,r),onChangeEnd:r=>a(s.path,r),style:{flex:1,minWidth:0}},s.path)}function Ct({adapter:e,id:t,props:s,fonts:i,showConstraints:a,onToggleConstraints:o}){const c=B(),r=new Map(s.map(p=>[T(p.path),p])),l=(p,P)=>{e.inspector?.set(t,p,P),c.notifyIngestEdit()},d=String(e.inspector?.get(t,r.get("display")?.path??"style.display")??""),y=d==="flex"||d==="inline-flex",g=d==="grid"||d==="inline-grid",f=r.get("display"),S=r.get("gap"),x=ce(s.filter(p=>["justifyContent","alignItems"].includes(T(p.path)))),C=["flexDirection","flexWrap","overflow"].map(p=>r.get(p)).filter(p=>!!p);return n.jsxs("div",{style:{padding:"2px 8px 7px"},children:[n.jsxs("div",{style:{display:"flex",gap:u[3]},children:[E(e,t,r.get("width"),"W",l),E(e,t,r.get("height"),"H",l)]}),a&&n.jsxs("div",{"data-testid":"react-layout-constraints",style:{marginTop:5},children:[n.jsxs("div",{style:{display:"flex",gap:u[3]},children:[E(e,t,r.get("minWidth"),"Min W",l),E(e,t,r.get("minHeight"),"Min H",l)]}),n.jsxs("div",{style:{display:"flex",gap:u[3],marginTop:u[2]},children:[E(e,t,r.get("maxWidth"),"Max W",l),E(e,t,r.get("maxHeight"),"Max H",l)]})]}),n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-layout-toggle-constraints",onClick:o,style:{display:"flex",margin:"2px auto 5px"},children:a?"− constraints":"··· constraints"}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"minmax(0, 1.35fr) minmax(0, 1fr)",gap:u[3]},children:[f&&n.jsx(K,{"data-testid":F(f.path),value:d,disabled:f.readonly,"data-dynamic":f.readonly||void 0,onChange:p=>l(f.path,p.target.value),style:{width:"100%"},children:(f.options??[]).map(p=>n.jsx("option",{value:String(p),children:String(p)},String(p)))}),E(e,t,S,"Gap",l)]}),y&&n.jsxs("div",{"data-testid":"react-layout-flex-controls",style:{marginTop:5},children:[C.filter(p=>T(p.path)!=="overflow").map(p=>n.jsx($,{adapter:e,id:t,prop:p,fonts:i},p.path)),x.map(p=>p.kind==="single"?n.jsx($,{adapter:e,id:t,prop:p.prop,fonts:i},z(p)):n.jsx(pe,{adapter:e,id:t,row:p},z(p)))]}),g&&n.jsxs("div",{"data-testid":"react-layout-grid-controls",style:{marginTop:5},children:[n.jsxs("div",{style:{display:"flex",gap:u[3]},children:[Z(e,t,r.get("gridTemplateColumns"),"Cols",l),Z(e,t,r.get("gridTemplateRows"),"Rows",l)]}),[r.get("gridTemplateColumns"),r.get("gridTemplateRows")].filter(p=>!!p).map(p=>n.jsx($,{adapter:e,id:t,prop:p,fonts:i},p.path)),n.jsxs("div",{style:{display:"flex",gap:u[3],marginTop:u[1]},children:[E(e,t,r.get("rowGap"),"Row Gap",l),E(e,t,r.get("columnGap"),"Col Gap",l)]}),r.get("gridAutoFlow")&&n.jsx($,{adapter:e,id:t,prop:r.get("gridAutoFlow"),fonts:i})]}),C.filter(p=>T(p.path)==="overflow").map(p=>n.jsx($,{adapter:e,id:t,prop:p,fonts:i},p.path)),n.jsx(Rt,{adapter:e,id:t,byName:r,fonts:i})]})}function ge(e){const t=e.trim();if(!t||t==="none")return 0;const s=[];let i=0,a=0;for(let c=0;c<t.length;c++){const r=t[c];r==="("||r==="["?i++:r===")"||r==="]"?i--:r===" "&&i===0&&(c>a&&s.push(t.slice(a,c)),a=c+1)}a<t.length&&s.push(t.slice(a));let o=0;for(const c of s){const r=/^repeat\(\s*(\d+)\s*,([\s\S]*)\)$/.exec(c);o+=r?.[1]&&r[2]!==void 0?Number(r[1])*ge(r[2]):1}return o}function Z(e,t,s,i,a){if(!s)return null;let o=null;const c=r=>{const d=`repeat(${Math.max(1,Math.round(r))}, 1fr)`;d!==o&&(o=d,a(s.path,d))};return n.jsx(A,{testId:`${F(s.path)}-count`,label:i,value:ge(String(e.inspector?.get(t,s.path)??"")),min:1,disabled:s.readonly,onChange:c,onChangeEnd:c,style:{flex:1,minWidth:0}},`${s.path}-count`)}function Rt({adapter:e,id:t,byName:s,fonts:i}){const[a,o]=v.useState(!1),c=["gridColumn","gridRow","justifySelf"].map(r=>s.get(r)).filter(r=>!!r);return c.length===0?null:n.jsxs(n.Fragment,{children:[n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-layout-toggle-grid-item",onClick:()=>o(r=>!r),style:{display:"flex",margin:"2px auto 0"},children:a?"− grid item":"··· grid item"}),a&&n.jsx("div",{"data-testid":"react-layout-grid-item",children:c.map(r=>n.jsx($,{adapter:e,id:t,prop:r,fonts:i},r.path))})]})}function kt(e){const t=e.trim();if(!t||t==="none")return[];const s=[];let i=0,a=0;for(let o=0;o<t.length;o++){const c=t[o];c==="("?i++:c===")"?i--:c===","&&i===0&&(s.push(t.slice(a,o).trim()),a=o+1)}return s.push(t.slice(a).trim()),s.filter(Boolean)}function ee(e){return/^url\((['"]?)([\s\S]*)\1\)$/.exec(e.trim())?.[2]??null}function wt({adapter:e,id:t,props:s,fonts:i}){const a=B(),o=new Map(s.map(h=>[T(h.path),h])),c=(h,b)=>{e.inspector?.set(t,h,b),a.notifyIngestEdit()},r=o.get("backgroundImage"),l=o.get("backgroundColor"),[d,y]=v.useState(null),[g,f]=v.useState(null),S=String(r?e.inspector?.get(t,r.path)??"":""),x=kt(S),C=h=>{if(r){if(h.length>0){c(r.path,h.join(", "));return}e.inspector?.remove?.(t,r.path),a.notifyIngestEdit()}},p=(h,b)=>C(x.map((R,I)=>I===h?b:R)),P=h=>{y(null),C(x.filter((b,R)=>R!==h))},V=(h,b)=>{const R=[...x],I=R[h+b];I===void 0||R[h]===void 0||(R[h+b]=R[h],R[h]=I,y(null),C(R))},W={background:"none",border:"none",color:m.textMuted,cursor:"pointer",fontSize:j.base,padding:`${u[2]} ${u[3]}`,lineHeight:O.tight};return n.jsxs("div",{"data-testid":"react-fill-list",style:{padding:"2px 8px 7px"},children:[x.map((h,b)=>{const R=re(h),I=ee(h),me=R?`${R.type} gradient`:I!==null?I.split("/").pop()??"image":h.slice(0,22);return n.jsxs("div",{style:{marginBottom:3},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:5},children:[n.jsxs("button",{type:"button","data-testid":`react-fill-layer-${b}`,title:h,onClick:()=>y(d===b?null:b),style:{display:"flex",alignItems:"center",gap:u[3],flex:1,minWidth:0,background:"none",border:"none",cursor:"pointer",padding:`${u[1]} 0`,color:m.text,fontSize:j.base,textAlign:"left"},children:[n.jsx("span",{style:{width:16,height:16,flexShrink:0,borderRadius:Te.sm,border:`1px solid ${m.border}`,background:h,backgroundSize:"cover"}}),n.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:me})]}),b>0&&n.jsx("button",{type:"button","data-testid":`react-fill-up-${b}`,title:"Raise this fill",onClick:()=>V(b,-1),style:W,children:"↑"}),b<x.length-1&&n.jsx("button",{type:"button","data-testid":`react-fill-down-${b}`,title:"Lower this fill",onClick:()=>V(b,1),style:W,children:"↓"}),n.jsx("button",{type:"button","data-testid":`react-fill-remove-${b}`,title:"Remove this fill (CSS has no hidden-layer state — removing is Figma's eye)",onClick:()=>P(b),style:W,children:"✕"})]}),d===b&&R&&n.jsx(ae,{testId:`react-fill-gradient-${b}`,value:R,onChange:N=>p(b,M(N)),onChangeEnd:N=>p(b,M(N))}),d===b&&I!==null&&n.jsx(J,{"data-testid":`react-fill-url-${b}`,defaultValue:I,placeholder:"image url",onBlur:N=>p(b,`url("${N.target.value.trim()}")`),onKeyDown:N=>{N.key==="Enter"&&p(b,`url("${N.currentTarget.value.trim()}")`)},style:{width:"100%",marginTop:u[1]}})]},`${b}-${h.slice(0,24)}`)}),g!==null&&n.jsx(J,{"data-testid":"react-fill-image-draft",value:g,placeholder:"image url — Enter to add",autoFocus:!0,onChange:h=>f(h.target.value),onKeyDown:h=>{h.key==="Enter"&&g.trim()&&(C([`url("${g.trim()}")`,...x]),f(null)),h.key==="Escape"&&f(null)},style:{width:"100%",marginBottom:3}}),n.jsxs("div",{style:{display:"flex",gap:u[2]},children:[n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-fill-add-gradient",onClick:()=>{C([M(de),...x]),y(0)},children:"+ gradient"}),n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-fill-add-image",onClick:()=>f(""),children:"+ image"})]}),x.some(h=>ee(h)!==null)&&["backgroundSize","backgroundPosition","backgroundRepeat"].map(h=>o.get(h)).filter(h=>!!h).map(h=>n.jsx($,{adapter:e,id:t,prop:h,fonts:i},h.path)),l&&n.jsx($,{adapter:e,id:t,prop:l,fonts:i})]})}function Et({adapter:e,id:t,props:s,fonts:i}){const a=B(),o=new Map(s.map(g=>[T(g.path),g])),c=o.get("position"),r=String(c?e.inspector?.get(t,c.path)??"static":"static"),l=(g,f)=>{e.inspector?.set(t,g,f),a.notifyIngestEdit()},d=["top","right","bottom","left"],y=["zIndex","flexGrow","flexShrink","flexBasis","alignSelf"].map(g=>o.get(g)).filter(g=>!!g);return n.jsxs("div",{style:{padding:"2px 8px 7px"},children:[c&&n.jsx("div",{"data-testid":F(c.path),style:{display:"grid",gridTemplateColumns:"repeat(5, 1fr)",gap:u[1]},children:(c.options??[]).map(g=>{const f=String(g),S=f===r;return n.jsx(k,{type:"button",variant:S?"primary":"secondary",size:"compact","aria-pressed":S,title:f,disabled:c.readonly,onClick:()=>l(c.path,f),children:f.slice(0,3)},f)})}),r!=="static"&&n.jsx("div",{"data-testid":"react-position-offsets",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:u[2],marginTop:u[3]},children:d.map(g=>E(e,t,o.get(g),g[0].toUpperCase(),l))}),y.length>0&&n.jsxs("div",{style:{borderTop:`1px solid ${m.border}`,marginTop:7,paddingTop:3},children:[n.jsx("div",{style:{color:m.textMuted,fontSize:j.xs,padding:"2px 0 1px"},children:"STACKING & FLEX ITEM"}),y.map(g=>n.jsx($,{adapter:e,id:t,prop:g,fonts:i},g.path))]})]})}function $t({adapter:e,id:t,props:s}){const i=B(),a=new Map(s.map(d=>[T(d.path),d])),o=(d,y)=>{e.inspector?.set(t,d,y),i.notifyIngestEdit()},c=d=>{const y=a.get(d);return y?n.jsx(A,{testId:F(y.path),label:"",value:_(e.inspector?.get(t,y.path)),unit:"px",disabled:y.readonly,onChange:g=>o(y.path,g),onChangeEnd:g=>o(y.path,g),style:{width:46,minWidth:0,flex:"none"}},y.path):n.jsx("span",{},d)},r=d=>n.jsx("span",{style:{position:"absolute",top:2,left:6,fontSize:8,letterSpacing:".08em",color:m.textMuted,pointerEvents:"none"},children:d}),l={display:"flex",alignItems:"center",justifyContent:"center"};return n.jsx("div",{style:{padding:`${u[1]} ${u[4]} ${u[4]}`},"data-testid":"react-spacing-box",children:n.jsxs("div",{style:{position:"relative",border:`1px solid ${m.border}`,borderRadius:4,padding:"11px 4px 3px"},children:[r("MARGIN"),n.jsx("div",{style:l,children:c("marginTop")}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:u[1]},children:[c("marginLeft"),n.jsxs("div",{style:{position:"relative",flex:1,minWidth:0,border:`1px dashed ${m.border}`,borderRadius:4,padding:"11px 4px 3px"},children:[r("PADDING"),n.jsx("div",{style:l,children:c("paddingTop")}),n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:u[1]},children:[c("paddingLeft"),c("paddingRight")]}),n.jsx("div",{style:l,children:c("paddingBottom")})]}),c("marginRight")]}),n.jsx("div",{style:l,children:c("marginBottom")})]})})}function Tt({name:e,groupId:t,props:s,adapter:i,id:a,fonts:o}){const[c,r]=v.useState(!1),l=ce(s);return n.jsxs("div",{"data-testid":`react-inspector-group-${t}`,children:[e==="Layout"&&n.jsx(Ct,{adapter:i,id:a,props:s,fonts:o,showConstraints:c,onToggleConstraints:()=>r(d=>!d)}),e==="Position"&&n.jsx(Et,{adapter:i,id:a,props:s,fonts:o}),e==="Spacing"&&n.jsx($t,{adapter:i,id:a,props:s}),e==="Fill"&&n.jsx(wt,{adapter:i,id:a,props:s,fonts:o}),e!=="Layout"&&e!=="Position"&&e!=="Spacing"&&e!=="Fill"&&l.map(d=>d.kind==="single"?n.jsx($,{adapter:i,id:a,prop:d.prop,fonts:o},z(d)):n.jsx(pe,{adapter:i,id:a,row:d},z(d)))]})}function It({adapter:e,node:t}){const s=[];let i=t,a=0;for(;i&&a++<100;)s.unshift(i),i=i.parentId?e.hierarchy.node(i.parentId):null;return n.jsx("nav",{"aria-label":"Selection ancestry","data-testid":"react-inspector-breadcrumbs",style:{display:"flex",alignItems:"center",gap:3,padding:`${u[3]} ${u[4]}`,overflowX:"auto",borderBottom:`1px solid ${m.border}`,whiteSpace:"nowrap"},children:s.map((o,c)=>n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:3},children:[c>0&&n.jsx("span",{style:{color:m.textMuted},children:"/"}),n.jsx(k,{type:"button",variant:"ghost",size:"compact","aria-current":o.id===t.id?"page":void 0,title:o.secondaryLabel??o.label,onClick:()=>$e(e,[o.id]),children:o.label})]},o.id))})}function Nt({owner:e,node:t}){const s=e.portableArgs(t.id),[i,a]=v.useState("idle"),[o,c]=v.useState(""),[r,l]=v.useState(null),d=async y=>{const g=await e.writeStory(t.id,y);l(g.changed?null:g.error??"refused"),g.changed&&(a("idle"),c(""))};return n.jsxs("div",{"data-testid":"react-story-controls-header",style:{borderBottom:`1px solid ${m.border}`},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:u[4],padding:"7px 8px"},children:[n.jsxs("div",{style:{minWidth:0},children:[n.jsx("div",{style:{color:m.text,fontSize:j.md,fontWeight:600},children:t.label}),n.jsx("div",{style:{color:m.textMuted,fontSize:j.sm},children:s?`${Object.keys(s).length} args · session controls`:"Portable CSF story"})]}),n.jsx(k,{type:"button",variant:"secondary",size:"compact","data-testid":"react-story-reset-args",onClick:()=>e.resetPortableArgs(t.id),children:"Reset"})]}),n.jsxs("div",{style:{display:"flex",gap:u[2],padding:`0 ${u[4]} ${u[3]}`,flexWrap:"wrap"},children:[n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-story-save-as",title:"Write the CURRENT session args as a new story export in this file",onClick:()=>{l(null),c(""),a(i==="save-as"?"idle":"save-as")},children:"Save as…"}),n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-story-rename",onClick:()=>{l(null),c(""),a(i==="rename"?"idle":"rename")},children:"Rename…"}),i==="confirm-delete"?n.jsx(k,{type:"button",variant:"secondary",size:"compact","data-testid":"react-story-delete-confirm",onClick:()=>void d({kind:"delete"}),children:"Delete story?"}):n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-story-delete",onClick:()=>{l(null),a("confirm-delete")},children:"Delete"})]}),(i==="save-as"||i==="rename")&&n.jsxs("div",{style:{display:"flex",gap:u[2],padding:`0 ${u[4]} ${u[4]}`,alignItems:"center"},children:[n.jsx("input",{"data-testid":"react-story-name-input",autoFocus:!0,value:o,placeholder:i==="save-as"?"NewStoryName":`Rename ${t.label}`,onChange:y=>c(y.target.value),onKeyDown:y=>{y.key==="Enter"&&o.trim()&&d(i==="save-as"?{kind:"save-as",name:o.trim()}:{kind:"rename",newName:o.trim()}),y.key==="Escape"&&a("idle")},style:{flex:1,minWidth:0,background:m.neutralHover,border:`1px solid ${m.border}`,borderRadius:4,color:m.text,fontSize:j.base,padding:"3px 6px"}}),n.jsx(k,{type:"button",variant:"secondary",size:"compact","data-testid":"react-story-name-commit",onClick:()=>void d(i==="save-as"?{kind:"save-as",name:o.trim()}:{kind:"rename",newName:o.trim()}),children:i==="save-as"?"Save":"Rename"})]}),r&&n.jsx("div",{"data-testid":"react-story-write-notice",style:{padding:`0 ${u[4]} ${u[4]}`,color:fe(),fontSize:j.sm,lineHeight:O.normal},children:r})]})}function Mt({owner:e,nodeId:t}){const s=e.elementClasses(t),[i,a]=v.useState(""),[o,c]=v.useState(null),r=async()=>{const l=i.trim().replace(/^\./,"");if(!l)return;const d=await e.writeNamedStyle(t,{kind:"set",className:l});c(d.changed?null:d.error??"refused"),d.changed&&a("")};return n.jsxs("div",{"data-testid":"react-element-classes",style:{padding:`${u[3]} ${u[4]}`,borderBottom:`1px solid ${m.border}`},children:[n.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:u[2],alignItems:"center"},children:[n.jsx("span",{style:{fontSize:j.sm,color:m.textMuted,marginRight:u[1]},children:"Style class"}),s.map(l=>n.jsxs("span",{"data-testid":`react-class-chip-${l.name}`,title:l.styledIn?`.${l.name} — ${l.count} element${l.count===1?"":"s"} in this game share this style (${l.styledIn.split("/").pop()??l.styledIn})`:`.${l.name} — utility/generated class (no first-party rule to edit)`,style:{display:"inline-flex",alignItems:"center",gap:3,fontFamily:H,fontSize:j.sm,color:l.styledIn?m.text:m.textMuted,background:m.neutralHover,border:`1px solid ${m.border}`,borderRadius:4,padding:"1px 4px"},children:[".",l.name,l.count>1&&n.jsxs("span",{style:{color:m.textMuted,fontSize:j.xs},children:["×",l.count]}),n.jsx("button",{type:"button","data-testid":`react-class-remove-${l.name}`,title:`Remove .${l.name} from this element`,onClick:()=>void e.writeNamedStyle(t,{kind:"remove",className:l.name}).then(d=>c(d.changed?null:d.error??"refused")),style:{background:"none",border:"none",color:m.textMuted,cursor:"pointer",fontSize:j.base,padding:"3px 5px",margin:"-3px -4px -3px -1px",lineHeight:O.tight},children:"✕"})]},l.name)),n.jsx("input",{"data-testid":"react-class-input",value:i,placeholder:s.length===0?"create style…":"add class…",title:"Type a class name — an existing first-party class is applied; a new name creates a style from this element's inline declarations",onChange:l=>{a(l.target.value),o&&c(null)},onKeyDown:l=>{l.key==="Enter"&&r(),l.key==="Escape"&&a("")},style:{flex:1,minWidth:72,background:"transparent",border:`1px dashed ${m.border}`,borderRadius:4,color:m.text,fontSize:j.sm,fontFamily:H,padding:"2px 5px"}})]}),o&&n.jsx("div",{"data-testid":"react-class-notice",style:{paddingTop:u[2],color:fe(),fontSize:j.sm,lineHeight:O.normal},children:o}),n.jsx(Ot,{})]})}function Ot(){const e=v.useSyncExternalStore(Ve,U);return n.jsxs(n.Fragment,{children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:5,paddingTop:5},children:[n.jsx("span",{style:{fontSize:j.sm,color:m.textMuted},children:"Breakpoint"}),n.jsx(K,{"data-testid":"react-breakpoint-select",value:e??"",onChange:t=>oe(t.target.value||null),style:{fontSize:j.sm,flex:1,...e?{color:m.accent,borderColor:m.accent}:{}},children:he.map(t=>n.jsx("option",{value:t.media??"",children:t.label},t.label))})]}),e&&n.jsxs("div",{"data-testid":"react-breakpoint-note",style:{paddingTop:3,color:m.textMuted,fontSize:j.xs,lineHeight:O.normal},children:["Style edits write @media ",e," — previewed live by frame width."]})]})}const he=[{label:"Base",media:null},{label:"Tablet ≤991",media:"(max-width: 991px)"},{label:"Phone L ≤767",media:"(max-width: 767px)"},{label:"Phone ≤479",media:"(max-width: 479px)"}];function fe(){return"#e06c75"}function At({entry:e}){const[t,s]=v.useState(!1),i=`${e.file}:${e.line}`,a=`${e.file.split("/").pop()??e.file}:${e.line}`,o=async()=>{try{await navigator.clipboard.writeText(i),s(!0),setTimeout(()=>s(!1),1500)}catch{}};return n.jsx("button",{type:"button","data-testid":"react-source-location",title:`${i} — click to copy the path`,onClick:()=>void o(),style:{fontFamily:H,fontSize:"inherit",color:m.textMuted,cursor:"pointer",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0,background:"none",border:"none",padding:0,textAlign:"left"},children:t?"Copied":a})}function Bt({owner:e,node:t,nodeId:s}){const i=e instanceof D,a=i?e.sourceLocation(s):void 0,o=t?.role==="story"?`Story · ${t.label}`:t?.role==="document"?`CSF · ${t.secondaryLabel??t.label}`:i?"Source":"Session overlay — not written to source",c=t?.role==="story"?`${t.label} is the active portable CSF design state.`:t?.role==="document"?`${t.secondaryLabel??t.label} owns this root's design states.`:i?`Edits change ${t?.label??"this component"}'s source — every rendered instance updates.`:"This is an ingested game: edits persist as a per-project overlay only, never written to source.";return n.jsxs("div",{"data-testid":i?"react-lane-b-disclosure":"react-overlay-disclosure",title:c,style:{display:"flex",alignItems:"center",gap:u[3],padding:`${u[1]} ${u[4]} ${u[3]}`,borderBottom:`1px solid ${m.border}`,color:m.textMuted,fontSize:j.sm,lineHeight:O.normal,minWidth:0},children:[n.jsx("span",{style:{flexShrink:0,...i?{}:{color:m.accent}},children:o}),a&&n.jsx(At,{entry:a})]})}function Ft({adapter:e,node:t,nodeId:s,owner:i}){return n.jsxs("div",{"data-testid":"react-inspector-section",children:[n.jsx(It,{adapter:e,node:t}),i instanceof D&&n.jsx(Mt,{owner:i,nodeId:s}),n.jsx(Bt,{owner:i,node:t,nodeId:s})]})}function te({adapter:e,id:t,name:s,groupId:i,props:a}){const o=v.useMemo(()=>Ye(),[]);return n.jsx(Tt,{name:s,groupId:i,props:a,adapter:e,id:t,fonts:o})}function Lt(e,t){const s=le(e,t);if(!s||!e)return[];const i=e.id,a=(t.inspector?.properties(i)??[]).filter(l=>l.path!=="name"),{ungrouped:o,groups:c}=be(a),r=[{id:et,title:"Element",icon:je,order:tt,body:{kind:"custom",render:()=>v.createElement(Ft,{adapter:t,node:e,nodeId:i,owner:s}),...s instanceof D?{data:{classes:s.elementClasses(i),breakpoint:U()},editable:{fields:[{path:"element.breakpoint",label:"Breakpoint",type:"enum",options:he.map(l=>l.media??"")}],io:{get:l=>l==="element.breakpoint"?U()??"":void 0,set:(l,d)=>{l==="element.breakpoint"&&oe(typeof d=="string"&&d?d:null)}}}}:{}}}];return e.role==="story"&&s instanceof D&&r.push({id:nt,title:"Story",icon:Se,order:st,body:{kind:"custom",render:()=>v.createElement(Nt,{owner:s,node:e})}}),o.length>0&&r.push({id:ne,title:"Style",icon:Ce,order:ve,defaultOpen:!0,body:{kind:"custom",render:()=>v.createElement(te,{adapter:t,id:i,name:"Style",groupId:"style",props:o})}}),c.forEach((l,d)=>{r.push({id:we(l.groupId),title:l.name,icon:ke(l.name),order:Re+d,defaultOpen:!0,body:{kind:"custom",render:()=>v.createElement(te,{adapter:t,id:i,name:l.name,groupId:l.groupId,props:l.properties})}})}),r}const Dt=xe();function _t(){Dt.ensure(e=>{e(ye({match:Ze,sections:Lt,claims:[ne]}))})}const on="workspace.service";function ln(){return _t(),()=>{}}export{on as point,ln as start};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./jsx-runtime-DPjLkJKQ.js";import"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{cZ as Rt,ae as b,d9 as Mt,da as ot,db as kt}from"./index-CaG87ZF-.js";const qt="#191c22",Kt="rgba(255, 255, 255, 0.2)",_t="#20242a",K="#2d323a";function St(){return`linear-gradient(45deg, ${K} 25%, transparent 25%, transparent 75%, ${K} 75%), linear-gradient(45deg, ${K} 25%, transparent 25%, transparent 75%, ${K} 75%)`}const B=20,J=6,H=22,at=10,yt=B+J,ft=H+at,It=.6,Ct=.4,Lt=.7,$t=.45;function pt(n,s,l){return n>=s?[1,!0]:n<=l?[0,!1]:[(n-l)/(s-l),!0]}function ht(n,s){const l=Math.max(0,n),i=s?Math.min(1,l/ft):0,[u,d]=pt(i,Lt,$t),c=Math.max(0,l-ft*i),y=Math.min(1,c/yt),[v,_]=pt(y,It,Ct),w=_?yt*y:0;return{frame:{scale:y,opacity:v,visible:_,offset:J*y+B},group:s?{scale:i,opacity:u,visible:d,offset:w+at*i+H}:null}}function mt(n,s){n.style.transformOrigin="0 100%",n.style.transform=s.scale>=1?"":`scale(${s.scale})`,n.style.opacity=s.visible?String(s.opacity):"0",n.style.display=s.visible?"":"none"}const Ot={width:null,height:null};let Z=Ot;const st=new Set;function Bt(){return Z}function Pt(n,s){const l=n===null?null:Math.max(1,Math.round(n)),i=s===null?null:Math.max(1,Math.round(s));if(!(Z.width===l&&Z.height===i)){Z={width:l,height:i};for(const u of st)u()}}function Zt(){Pt(null,null)}function Ft(n){return st.add(n),()=>st.delete(n)}const Tt=640,Vt=400,N=64,C=64,gt=72,zt=28,nt=C+H+at+B+J;function wt(n,s){const l=new Map(n.map(i=>[i.id,i]));return s.sections.map(i=>({key:i.id,label:i.label,stories:i.storyIds.flatMap(u=>{const d=l.get(u);return d?[d]:[]})}))}const Nt=n=>n.split("/").map(s=>s.trim()).filter(Boolean);function xt(n){const s=new Set(n.filter(i=>i.stories.length===1).map(i=>i.key)),l=[];{const i=new Map;for(const u of n){if(!s.has(u.key)){l.push({key:u.key,label:u.label,stories:[...u.stories]});continue}const d=Nt(u.label).slice(0,-1).join("/");let c=i.get(d);c||(c={key:`category:${d}`,label:d||null,stories:[]},i.set(d,c),l.push(c)),c.stories.push(...u.stories)}}return l}function Gt(n,s,l){const i=xt(wt(n,s)),u=new Map,d=new Map;let c=N,y=0;i.forEach((w,P)=>{const E=Math.max(1,Math.ceil(Math.sqrt(w.stories.length))),S=Math.ceil(w.stories.length/E),L=w.stories.map(h=>l(h)),I=Array.from({length:E},()=>0),R=Array.from({length:S},()=>0);L.forEach((h,f)=>{const m=f%E,A=Math.floor(f/E);I[m]=Math.max(I[m],h.width),R[A]=Math.max(R[A],h.height)});const F=I.map((h,f)=>I.slice(0,f).reduce((m,A)=>m+A+C,0)),W=R.map((h,f)=>R.slice(0,f).reduce((m,A)=>m+A+C,0)),$=P===0?Number.POSITIVE_INFINITY:w.label!==null?nt:C+B+J;w.label!==null&&d.set(w.key,{x:N,y:c,roomAbove:$}),w.stories.forEach((h,f)=>{const m=Math.floor(f/E),A=f%E,D=L[f],{width:T,height:U}=D,it=N+F[A],Y=c+W[m];u.set(h.id,{x:it,y:Y,width:T,height:U,roomAbove:m===0?$:C,withGroupLabel:i.length>1&&m===0&&w.label!==null})});const x=I.reduce((h,f)=>h+f,0)+Math.max(0,E-1)*C,O=R.reduce((h,f)=>h+f,0)+Math.max(0,S-1)*C;y=Math.max(y,x),c+=O+nt});const v=N*2+y,_=c-nt+N;return{layouts:u,groupOrigins:d,width:v,height:n.length?_:0}}const k=new WeakMap,rt=new Set,Ht=null;function G(){for(const n of rt)n()}function Jt(n){return rt.add(n),()=>rt.delete(n)}function Qt(n){return n?k.get(n)?.viewport()??Ht:null}function Xt(n,s){const l=n?k.get(n):void 0;return l?(l.setViewport(s),!0):!1}function te(n){const s=n?k.get(n):void 0;return!s||s.viewport().locked?!1:(s.setRotation(!s.viewport().rotated),!0)}function Wt(){const n=Bt();return{width:n.width??Tt,height:n.height??Vt}}function bt(n,s,l){if(s.width<=0||s.height<=0)return;const i=Math.max(1,n.clientWidth-gt*2),u=Math.max(1,n.clientHeight-gt*2),d=Math.min(l,Math.max(.1,Math.min(i/s.width,u/s.height)));kt(n.clientWidth/2-(s.x+s.width/2)*d,n.clientHeight/2-(s.y+s.height/2)*d,d)}function ee(n){const s=k.get(n);return s?(s.fitAll(),!0):!1}function oe(n,s,l){return n?k.get(n)?.selectAtClientPoint(s,l)??!1:!1}function ne(n,s,l){return n?k.get(n)?.zoomAtClientPoint(s,l)??!1:!1}function se(n,s,l,i,u){if(s.length===0)throw new Error("A React story board requires at least one story.");const d=n.parentElement;if(!d)throw new Error("A React story board layer must be attached before mounting.");n.dataset.vgaiReactStoryBoard="true",n.style.contain="none";const c=document.createElement("div");c.dataset.testid="react-story-board",c.dataset.vgaiReactStoryBoardCanvas="true",c.style.position="absolute",c.style.left="0",c.style.top="0",c.style.transformOrigin="0 0",n.appendChild(c);const y=document.createElement("div");y.dataset.testid="react-story-board-chrome",y.dataset.vgaiStoryBoardChromeFor=n.dataset.worldId??"",y.style.position="absolute",y.style.inset="0",y.style.zIndex=String(Rt.sticky),y.style.display=n.style.display||"block",y.style.pointerEvents="none",y.style.overflow="visible",d.appendChild(y);const v=new Map,_=new Map,w=new Map,P=new Map,E=new Map,S=new Map,L=wt(s,u.index),I=new Map,R=new Map,F=new Map,W=new Map;let $,x=s.some(t=>t.id===l)?l:s[0].id,O=!1,h=!1;const f=t=>{const e=u.resolve(t,t.frameSize??Wt(),F.has(t.id)?F.get(t.id):void 0,W.get(t.id)),o=S.get(t.id);return o?{...e,width:o.frame.width,height:o.frame.height,layout:"fullscreen"}:t.frameSize?{...e,layout:"fullscreen"}:e},m=()=>{const t=f(s.find(e=>e.id===x));$={storyId:x,selectedViewportId:t.selectedViewportId,locked:t.locked,rotated:t.rotated,choices:t.choices}};m();const A=new Set(L.filter(t=>t.stories.length===1).map(t=>t.key)),D=t=>t.split("/").map(e=>e.trim()).filter(Boolean),T=new Map;for(const t of L)for(const e of t.stories){const o=(e.title?D(e.title).at(-1):void 0)??D(t.label).at(-1);T.set(e.id,A.has(t.key)?o??e.label:e.label)}const U=xt(L);for(const t of L.flatMap(e=>e.stories)){const e=document.createElement("section");e.dataset.testid="react-story-frame",e.dataset.storyId=t.id,e.dataset.storyLabel=t.label,e.dataset.storyGroup=u.index.sections.find(et=>et.storyIds.includes(t.id))?.label??"",e.style.position="absolute",e.style.border=`1px solid ${b.boundary.strong}`,e.style.borderRadius="0",e.style.backgroundColor=_t,e.style.backgroundImage=St(),e.style.backgroundPosition="0 0, 8px 8px",e.style.backgroundSize="16px 16px",e.style.boxShadow="none";const o=document.createElement("button");o.type="button",o.dataset.testid="react-story-frame-label",o.dataset.storyId=t.id,o.title=`${T.get(t.id)??t.label} — click to select, double-click to zoom — ${t.modulePath}`,o.textContent=T.get(t.id)??t.label,o.style.position="absolute",o.style.height=`${B}px`,o.style.padding="0 2px",o.style.border="0",o.style.appearance="none",o.style.background="transparent",o.style.color=b.content.primary,o.style.font=`600 12px ${b.typography.sans}`,o.style.lineHeight=`${B}px`,o.style.textAlign="left",o.style.cursor="default",o.style.pointerEvents="auto",o.style.whiteSpace="nowrap",o.style.overflow="hidden",o.style.textOverflow="ellipsis",o.style.width="max-content",o.addEventListener("click",()=>i(t.id,"highlight")),o.addEventListener("dblclick",()=>i(t.id,"zoom"));const r=document.createElement("div");r.dataset.testid="react-story-frame-content",r.dataset.storyId=t.id,r.style.position="absolute",r.style.left="0",r.style.top="0",r.style.overflow="hidden",r.style.contain="layout paint",r.style.boxSizing="border-box";const a=document.createElement("div");a.dataset.testid="react-story-frame-note",a.dataset.storyId=t.id,a.style.position="absolute",a.style.left="0",a.style.right="0",a.style.bottom="0",a.style.display="none",a.style.padding="6px 8px",a.style.boxSizing="border-box",a.style.background=b.surface.overlay,a.style.color=b.content.muted,a.style.font=`11px ${b.typography.sans}`,a.style.pointerEvents="none";const p=document.createElement("div");p.dataset.testid="react-story-frame-error",p.dataset.storyId=t.id,p.style.position="absolute",p.style.inset="0",p.style.display="none",p.style.padding="16px",p.style.boxSizing="border-box",p.style.background=b.surface.overlay,p.style.color=b.semantic.danger,p.style.font=`12px ${b.typography.mono}`,p.style.pointerEvents="none",e.append(r,a,p),c.appendChild(e),y.appendChild(o),v.set(t.id,{element:e,content:r}),_.set(t.id,p),w.set(t.id,a),P.set(t.id,o)}if(U.length>1)for(const t of U){if(t.label===null)continue;const e=document.createElement("div");e.dataset.testid="react-story-group-label",e.dataset.storyGroup=t.key,e.textContent=t.label,e.style.position="absolute",e.style.height=`${H}px`,e.style.lineHeight=`${H}px`,e.style.color=b.content.primary,e.style.font=`700 14px ${b.typography.sans}`,e.style.whiteSpace="nowrap",e.style.pointerEvents="none",e.style.width="max-content",y.appendChild(e),I.set(t.key,e)}const Y=()=>{for(const[t,e]of v){const o=t===x;e.element.dataset.active=o?"true":"false",e.element.style.outline=o?`2px solid ${b.accent.default}`:"none",e.element.style.outlineOffset=o?"3px":"0";const r=P.get(t);r.setAttribute("aria-pressed",String(o)),r.style.color=o?b.accent.default:b.content.muted}},lt=(t,e)=>Number.isFinite(t)?t*e:Number.POSITIVE_INFINITY,j=()=>{const t=ot();for(const[e,o]of E){const r=P.get(e),{frame:a}=ht(lt(o.roomAbove,t.zoom),o.withGroupLabel);r.style.left=`${t.x+o.x*t.zoom}px`,r.style.top=`${t.y+o.y*t.zoom-a.offset}px`;const p=Math.max(1,(o.width+C/2)*t.zoom);r.style.maxWidth=`${p}px`,mt(r,p>=zt?a:{...a,opacity:0,visible:!1})}for(const[e,o]of R){const r=I.get(e);if(!r)continue;const{group:a}=ht(lt(o.roomAbove,t.zoom),!0);a&&(r.style.left=`${t.x+o.x*t.zoom}px`,r.style.top=`${t.y+o.y*t.zoom-a.offset}px`,mt(r,a))}},V=()=>{E.clear(),R.clear();const t=Gt(s,u.index,f);for(const[r,a]of t.groupOrigins)R.set(r,a);for(const r of s){const a=t.layouts.get(r.id);if(!a)continue;E.set(r.id,a);const{x:p,y:et,width:dt,height:ut}=a,z=f(r),g=v.get(r.id);g.element.style.left=`${p}px`,g.element.style.top=`${et}px`,g.element.style.width=`${dt}px`,g.element.style.height=`${ut}px`;const M=S.get(r.id);g.element.style.overflow=M?"hidden":"",g.content.style.width=`${M?M.mount.width:dt}px`,g.content.style.height=`${M?M.mount.height:ut}px`,g.content.style.left=`${M?-M.offset.x:0}px`,g.content.style.top=`${M?-M.offset.y:0}px`,g.content.dataset.storyLayout=z.layout,g.content.style.padding=z.layout==="padded"?"16px":"0",g.content.style.display=z.layout==="centered"?"flex":"block",g.content.style.alignItems=z.layout==="centered"?"center":"",g.content.style.justifyContent=z.layout==="centered"?"center":""}const e=t.width,o=t.height;c.style.width=`${e}px`,c.style.height=`${o}px`,n.style.width=`${e}px`,n.style.height=`${o}px`,j()},vt=()=>{const t=Number.parseFloat(c.style.width),e=Number.parseFloat(c.style.height);bt(d,{x:0,y:0,width:t,height:e},1)};let Q=null;const X=()=>{h||(h=!0,queueMicrotask(()=>{h=!1,!O&&(q(x,!0),Q=ot())}))},q=(t,e=!1)=>{const o=v.get(t),r=E.get(t);!o||!r||(x=t,Y(),m(),G(),e&&bt(d,r,2))},ct=(t,e)=>{for(const[o,r]of v){const a=r.content.getBoundingClientRect();if(t>=a.left&&t<=a.right&&e>=a.top&&e<=a.bottom)return o}return null},Et=Ft(()=>{V(),X()}),At=Mt(j);V(),Y(),j();const tt={element:c,frames:v,activeContent:()=>v.get(x).content,activate:q,clearError:t=>{const e=_.get(t);e&&(e.style.display="none",e.textContent="")},fitAll:vt,selectAtClientPoint:(t,e)=>{const o=ct(t,e);return!o||o===x?!1:(i(o,"highlight"),!0)},zoomAtClientPoint:(t,e)=>{const o=ct(t,e);return o?(i(o,"zoom"),!0):!1},setError:(t,e)=>{const o=_.get(t);o&&(o.textContent=e,o.style.display="block")},setMeasuredFrame:(t,e)=>{if(O||!v.has(t))return;const o=S.get(t);if(e===null){if(!o)return;S.delete(t)}else{if(o&&o.frame.width===e.frame.width&&o.frame.height===e.frame.height&&o.mount.width===e.mount.width&&o.mount.height===e.mount.height&&o.offset.x===e.offset.x&&o.offset.y===e.offset.y)return;S.set(t,e)}V(),j(),Q!==null&&ot()===Q&&X()},setNote:t=>{for(const e of w.values())e.textContent=t??"",e.style.display=t===null?"none":"block"},viewport:()=>$,setViewport:t=>{$.locked||(F.set(x,t),V(),m(),G(),q(x,!0))},setRotation:t=>{$.locked||(W.set(x,t),V(),m(),G(),q(x,!0))},dispose:()=>{O||(O=!0,Et(),At(),k.get(d)===tt&&k.delete(d),G(),c.remove(),y.remove())}};return k.set(d,tt),G(),X(),tt}export{qt as R,Jt as a,Qt as b,Xt as c,Pt as d,Zt as e,ee as f,Bt as g,se as h,Kt as i,oe as j,Gt as r,Ft as s,te as t,ne as z};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{g as re,a as oe}from"./board-guides-_3R1t_-2.js";import{eb as se,bh as ne,bg as ie,al as ae,ec as le,dm as P,cx as D,da as M,aq as I,d3 as $,ed as C,ee as ce,ef as de,eg as O,eh as ue,bl as pe,M as he,bm as ge}from"./index-CaG87ZF-.js";import{r as fe,c as ye}from"./relative-import-specifier-DQzkawgj.js";import{s as be}from"./story-arg-descriptors-Ek86ExX7.js";import{b as me,a as Se,c as we,d as Re,e as E,f as ve,g as y,h as j,i as Ie,j as Ee}from"./inspect-C8RP8G5F.js";import{n as W,p as Ae,t as Te}from"./writer-tw6EcuVO.js";const _={count:0},ke="data-oid";function xe(u){return{count:u.size}}function K(u){return u.tagName.toLowerCase()==="svg"}function Y(u,e){const t=new Map,r=[];e.begin?.();const o=(s,n,i)=>{const l=Array.from(s.children);l.forEach((d,c)=>{if(e.skip?.(d))return;const a=e.identify(d,{ownerId:n,ownedByAncestor:i,parent:s,siblingIndex:c,siblings:l});a!==null&&(t.set(a,{object:d,id:a,parentId:n,childIds:[]}),n===null?r.push(a):t.get(n)?.childIds.push(a));const p=a??n,g=i||a!==null;e.descend?.(d)!==!1&&o(d,p,g),e.leave?.(d,a)})};return o(u,null,!1),{nodes:t,rootIds:r,stats:xe(t)}}function Ze(){return{project:u=>{const e=new Map;return Y(u,{begin:()=>e.clear(),identify:(t,r)=>{const o=t.tagName.toLowerCase();let s=0;for(let c=0;c<r.siblingIndex;c++)r.siblings[c].tagName.toLowerCase()===o&&s++;const n=`${o}[${s}]`,i=r.ownerId?e.get(r.ownerId)??"":"",l=i?`${i}/${n}`:n,d=`rdom:${l}`;return e.set(d,l),d},descend:t=>!K(t)})}}}function q(){return{project:u=>{const e=new Map;return Y(u,{begin:()=>e.clear(),identify:t=>{const r=t.getAttribute(ke);if(!r)return null;const o=e.get(r)??0;return e.set(r,o+1),o===0?r:`${r}#${o}`},descend:t=>!K(t)})}}}function Pe(u){return q().project(u)}class $e{constructor(e){this.identity=e}nodesById=new Map;objectsById=new Map;idsByObjectIndex=new Map;roots=[];walkStats=_;project(e){if(!e)return this.nodesById=new Map,this.objectsById=new Map,this.idsByObjectIndex=new Map,this.roots=[],this.walkStats=_,this.walkStats;const{nodes:t,rootIds:r,stats:o}=this.identity.project(e);return this.nodesById=t,this.objectsById=new Map([...t].map(([s,n])=>[s,n.object])),this.idsByObjectIndex=new Map([...t].map(([s,n])=>[n.object,s])),this.roots=r,this.walkStats=o,o}get nodes(){return this.nodesById}get objects(){return this.objectsById}get idsByObject(){return this.idsByObjectIndex}get rootIds(){return this.roots}get stats(){return this.walkStats}node(e){return this.nodesById.get(e)??null}rootNodes(){return this.roots.map(e=>this.nodesById.get(e)).filter(e=>e!==void 0)}objectOf(e){return this.objectsById.get(e)??null}idOf(e){return this.idsByObjectIndex.get(e)??null}}const H=64;function S(u){const e=u?.replace(/\s+/g," ").trim();return e?e.length<=H?e:`${e.slice(0,H-1).trimEnd()}…`:null}function x(u,e){return u?u[e]:void 0}const Ce=/^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*[\d.]+\s*)?\)$/;function Oe(u){if(typeof u!="string"||u==="")return;if(u.startsWith("#"))return u;const e=Ce.exec(u);if(!e)return;const t=r=>Number.parseInt(r,10).toString(16).padStart(2,"0");return`#${t(e[1])}${t(e[2])}${t(e[3])}`}function Be(u,e){switch(u){case"width":case"height":case"marginTop":case"marginRight":case"marginBottom":case"marginLeft":case"paddingTop":case"paddingRight":case"paddingBottom":case"paddingLeft":return{prop:u,cssValue:t=>`${t}px`};case"x":return e?{prop:"left",cssValue:t=>`${t}px`}:null;case"y":return e?{prop:"top",cssValue:t=>`${t}px`}:null;case"rotate":return{prop:"transform",cssValue:t=>`rotate(${t}deg)`};default:return null}}const Ne="data-oid",Le="http://www.w3.org/1999/xhtml",De=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function F(u,e){const t=u.namespaceURI;return t!=null&&t!==Le?!1:!De.has(e)}function A(u){const e=u.replaceAll("\\","/").replace(/^\.\//,""),t=e.lastIndexOf("/src/");return t>=0?e.slice(t+1):e}function Me(u){return Q(Pe(u))}function Q(u){const e=new Map;for(const[t,r]of u.nodes)e.set(t,{id:t,oid:r.object.getAttribute(Ne)??t,tag:r.object.tagName.toLowerCase(),el:r.object,parentId:r.parentId,childIds:[...r.childIds]});return{nodes:e,rootIds:[...u.rootIds]}}const Z=[{prop:"display",label:"Display",type:"enum",group:"Layout",options:["block","flex","grid","inline","inline-block","inline-flex","none"]},{prop:"flexDirection",label:"Direction",type:"enum",group:"Layout",options:["row","column","row-reverse","column-reverse"]},{prop:"flexWrap",label:"Wrap",type:"enum",group:"Layout",options:["nowrap","wrap","wrap-reverse"]},{prop:"justifyContent",label:"Justify",type:"enum",group:"Layout",options:["flex-start","center","flex-end","space-between","space-around","space-evenly"]},{prop:"alignItems",label:"Align",type:"enum",group:"Layout",options:["stretch","flex-start","center","flex-end","baseline"]},{prop:"gap",label:"Gap",type:"number",group:"Layout"},{prop:"gridTemplateColumns",label:"Columns",type:"string",group:"Layout"},{prop:"gridTemplateRows",label:"Rows",type:"string",group:"Layout"},{prop:"gridAutoFlow",label:"Flow",type:"enum",group:"Layout",options:["row","column","row dense","column dense"]},{prop:"rowGap",label:"Row Gap",type:"number",group:"Layout"},{prop:"columnGap",label:"Col Gap",type:"number",group:"Layout"},{prop:"gridColumn",label:"Grid Col",type:"string",group:"Layout"},{prop:"gridRow",label:"Grid Row",type:"string",group:"Layout"},{prop:"justifySelf",label:"Justify Self",type:"enum",group:"Layout",options:["auto","start","center","end","stretch"]},{prop:"overflow",label:"Overflow",type:"enum",group:"Layout",options:["visible","hidden","scroll","auto"]},{prop:"width",label:"Width",type:"number",group:"Layout"},{prop:"height",label:"Height",type:"number",group:"Layout"},{prop:"minWidth",label:"Min W",type:"number",group:"Layout"},{prop:"minHeight",label:"Min H",type:"number",group:"Layout"},{prop:"maxWidth",label:"Max W",type:"number",group:"Layout"},{prop:"maxHeight",label:"Max H",type:"number",group:"Layout"},{prop:"position",label:"Position",type:"enum",group:"Position",options:["static","relative","absolute","fixed","sticky"]},{prop:"top",label:"Top",type:"number",group:"Position"},{prop:"right",label:"Right",type:"number",group:"Position"},{prop:"bottom",label:"Bottom",type:"number",group:"Position"},{prop:"left",label:"Left",type:"number",group:"Position"},{prop:"zIndex",label:"Z Index",type:"number",group:"Position"},{prop:"flexGrow",label:"Grow",type:"number",group:"Position"},{prop:"flexShrink",label:"Shrink",type:"number",group:"Position"},{prop:"flexBasis",label:"Basis",type:"string",group:"Position"},{prop:"alignSelf",label:"Self Align",type:"enum",group:"Position",options:["auto","stretch","flex-start","center","flex-end","baseline"]},{prop:"marginTop",label:"Margin T",type:"number",group:"Spacing"},{prop:"marginRight",label:"Margin R",type:"number",group:"Spacing"},{prop:"marginBottom",label:"Margin B",type:"number",group:"Spacing"},{prop:"marginLeft",label:"Margin L",type:"number",group:"Spacing"},{prop:"paddingTop",label:"Padding T",type:"number",group:"Spacing"},{prop:"paddingRight",label:"Padding R",type:"number",group:"Spacing"},{prop:"paddingBottom",label:"Padding B",type:"number",group:"Spacing"},{prop:"paddingLeft",label:"Padding L",type:"number",group:"Spacing"},{prop:"color",label:"Color",type:"color",group:"Type"},{prop:"fontSize",label:"Size",type:"number",group:"Type"},{prop:"fontWeight",label:"Weight",type:"string",group:"Type"},{prop:"lineHeight",label:"Line H",type:"string",group:"Type"},{prop:"letterSpacing",label:"Spacing",type:"string",group:"Type"},{prop:"textAlign",label:"Align",type:"enum",group:"Type",options:["left","center","right","justify"]},{prop:"textTransform",label:"Transform",type:"enum",group:"Type",options:["none","uppercase","lowercase","capitalize"]},{prop:"fontStyle",label:"Style",type:"enum",group:"Type",options:["normal","italic"]},{prop:"fontFamily",label:"Font",type:"string",group:"Type"},{prop:"textDecoration",label:"Decoration",type:"enum",group:"Type",options:["none","underline","line-through","overline"]},{prop:"backgroundColor",label:"Background",type:"color",group:"Fill"},{prop:"backgroundImage",label:"Fills",type:"string",group:"Fill"},{prop:"backgroundSize",label:"Size",type:"enum",group:"Fill",options:["auto","cover","contain"]},{prop:"backgroundPosition",label:"Pos",type:"string",group:"Fill"},{prop:"backgroundRepeat",label:"Repeat",type:"enum",group:"Fill",options:["repeat","no-repeat","repeat-x","repeat-y"]},{prop:"borderColor",label:"Border Color",type:"color",group:"Stroke"},{prop:"borderWidth",label:"Border Width",type:"number",group:"Stroke"},{prop:"borderStyle",label:"Border Style",type:"enum",group:"Stroke",options:["none","solid","dashed","dotted","double"]},{prop:"borderRadius",label:"Radius",type:"number",group:"Stroke"},{prop:"opacity",label:"Opacity",type:"number",group:"Effects"},{prop:"boxShadow",label:"Box Shadow",type:"string",group:"Effects"},{prop:"mixBlendMode",label:"Blend",type:"enum",group:"Effects",options:["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"]},{prop:"filter",label:"Filter",type:"string",group:"Effects"},{prop:"backdropFilter",label:"Backdrop",type:"string",group:"Effects"},{prop:"textShadow",label:"Text Shadow",type:"string",group:"Effects"},{prop:"cursor",label:"Cursor",type:"enum",group:"Effects",options:["auto","default","pointer","text","move","wait","help","crosshair","not-allowed","grab","grabbing","zoom-in","zoom-out","col-resize","row-resize","none"]},{prop:"transform",label:"Transform",type:"string",group:"Transform"}],f="style.",w="component source (JSX, via /__ui-source — writes are immediate; nothing pending to flush)",B="component source (JSX) — no source-write backend in this session",b="prop.",R="token.",T="story.arg.",G="text",je=30;let z=!1;const V=40,J="The source value is a dynamic expression, so replacing it with a literal is guarded.",ee={border:["borderWidth","borderStyle","borderColor"],borderWidth:["borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"],borderStyle:["borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle"],borderColor:["borderTopColor","borderRightColor","borderBottomColor","borderLeftColor"],borderRadius:["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],padding:["paddingTop","paddingRight","paddingBottom","paddingLeft"],margin:["marginTop","marginRight","marginBottom","marginLeft"],inset:["top","right","bottom","left"]},U=new Map(Object.entries(ee).flatMap(([u,e])=>e.map(t=>[t,u])));function We(u){const e=[];for(let t=U.get(u);t;t=U.get(t))e.unshift(t);return e}const k="portable-document",N="React Preview",_e=new Map(Z.map(({prop:u,type:e})=>[u,e])),He={borderTopLeftRadius:"borderRadius",borderTopRightRadius:"borderRadius",borderBottomLeftRadius:"borderRadius",borderBottomRightRadius:"borderRadius",borderTopWidth:"borderWidth",borderRightWidth:"borderWidth",borderBottomWidth:"borderWidth",borderLeftWidth:"borderWidth",borderTopStyle:"borderStyle",borderRightStyle:"borderStyle",borderBottomStyle:"borderStyle",borderLeftStyle:"borderStyle",borderTopColor:"borderColor",borderRightColor:"borderColor",borderBottomColor:"borderColor",borderLeftColor:"borderColor"},Fe=[{kind:"div",label:"Container"},{kind:"span",label:"Text"},{kind:"p",label:"Paragraph"},{kind:"button",label:"Button"},{kind:"a",label:"Link"},{kind:"img",label:"Image"},{kind:"ul",label:"List"},{kind:"li",label:"List Item"}],Ge=/\.(?:avif|gif|jpe?g|png|svg|webp)(?:[?#].*)?$/i;function ze(u,e){return e.type==="number"?String(Number(u)):e.type==="boolean"?u===!0||u==="true"?"true":"false":e.type==="vec3"&&Array.isArray(u)?`[${u.map(t=>Number(t)).join(", ")}]`:e.type==="json"?JSON.stringify(u):JSON.stringify(String(u))}const Ve={source:"source-code",label:"jsx",detail:"The JSX source is the document — edits write back to the component source file."};function X(u){const e=u;return(typeof e?.getAttribute=="function"?e.getAttribute("class")??"":"").split(/\s+/).filter(Boolean)}function Je(u,e){const t=u.style;return typeof t?.getPropertyValue!="function"?!1:t.getPropertyValue(Ee(e))!==""}class et{constructor(e,t,r={}){this.root=e,this.store=t,this.assetRoot=r.assetRoot??e,this.provenance=r.provenance??Ve,this.writeBackend=se(r.writeBackend,t.projectHistory),this.computedStyle=r.computedStyle??me,this.matchedCssRules=r.matchedCssRules??(a=>Se(a));const o=()=>{const a=this.root,p=typeof Element<"u"&&a instanceof Element?a.querySelector("[data-vgai-game-styles]")??a.closest?.("[data-vgai-game-styles]")??a:typeof document<"u"?document.documentElement:null;return typeof getComputedStyle=="function"&&p instanceof Element?getComputedStyle(p):void 0};this.designTokens=r.designTokens??(()=>we(o())),this.designTokenValue=r.designTokens?a=>r.designTokens().find(p=>p.name===a)?.value:a=>o()?.getPropertyValue(a).trim()||void 0,this.portableStories=[...r.portableStories??[]];for(const a of this.portableStories)this.portableStoryArgs.set(a.id,{...a.args??{}});const s=r.portableDocuments??(this.portableStories.length>0?[{id:k,label:N,storyIds:this.portableStories.map(a=>a.id)}]:[]),n=new Set(this.portableStories.map(a=>a.id)),i=new Set,l=new Set,d=s.flatMap(a=>{if(l.has(a.id))return[];l.add(a.id);const p=a.storyIds.filter(g=>!n.has(g)||i.has(g)?!1:(i.add(g),!0));return p.length===0?[]:[{id:a.id,label:a.label??(a.path?ne(ie({modulePath:a.path,title:a.title})):N),...a.path?{path:a.path}:{},storyIds:p}]}),c=this.portableStories.map(a=>a.id).filter(a=>!i.has(a));c.length>0&&d.push({id:l.has(k)?`${k}:unassigned`:k,label:N,storyIds:c}),this.portableDocuments=d,this.portableHierarchy=r.portableHierarchy??null,this.portableDefaultStoryId=this.portableStories.some(a=>a.id===r.activePortableStoryId)?r.activePortableStoryId??null:this.portableStories[0]?.id??null,this.onPortableStoryApplied=r.onPortableStoryApplied,this.onPortableStoryArgsChanged=r.onPortableStoryArgsChanged,this.activeStoryId=this.portableDefaultStoryId,this.capabilities={transform:!1,inspectorFields:!0,persist:!0};{const a=ae(()=>this.reconcileEchoAfterReload());this.disposeReloadSignal=a}this.writeBackend?.index&&this.writeBackend.index().then(a=>{this.oidIndex=new Map(Object.entries(a)),this.store.notifyIngestEdit()}).catch(()=>{})}capabilities;provenance;writeBackend;projector=new $e(q());hierarchySnapshotCache=null;hierarchySnapshotClearQueued=!1;computedStyle;matchedCssRules;designTokens;designTokenValue;oidIndex=new Map;dirty=!1;valueEcho=new Map;guardedPaths=new Map;lockedIds=new Set;assetRoot;pendingSourceReconcile=0;lastResolvedSelection=[];selectionRepairWatching=!1;disposeReloadSignal;portableStories;portableStoryArgs=new Map;portableDocuments;portableHierarchy;portableDefaultStoryId;onPortableStoryApplied;onPortableStoryArgsChanged;activeStoryId=null;boxEditSession=null;boxEditTail=Promise.resolve();snapshot(){return this.projector.project(this.root),Q({nodes:this.projector.nodes,rootIds:[...this.projector.rootIds]})}hierarchySnapshot(){return this.hierarchySnapshotCache??=this.snapshot(),this.hierarchySnapshotClearQueued||(this.hierarchySnapshotClearQueued=!0,queueMicrotask(()=>{this.hierarchySnapshotCache=null,this.hierarchySnapshotClearQueued=!1})),this.hierarchySnapshotCache}async refreshOidIndex(){const e=await this.writeBackend?.index?.();e&&(this.oidIndex=new Map(Object.entries(e)),this.store.notifyIngestEdit())}setEcho(e,t,r){let o=this.valueEcho.get(e);o||(o=new Map,this.valueEcho.set(e,o)),o.set(t,r)}clearEcho(e,t){const r=this.valueEcho.get(e);r&&(r.delete(t),r.size===0&&this.valueEcho.delete(e))}markGuarded(e,t,r){this.guardedPaths.set(`${e}|${t}`,r)}readEcho(e,t){const r=this.valueEcho.get(e);return r?.has(t)?{hit:!0,value:r.get(t)}:{hit:!1,value:void 0}}reconcileEchoAfterReload(){this.scheduleSelectionRepair(),!(this.valueEcho.size===0&&this.pendingSourceReconcile===0)&&(this.valueEcho.clear(),this.pendingSourceReconcile>0&&this.pendingSourceReconcile--,this.store.notifyIngestEdit())}scheduleSelectionRepair(){if(this.selectionRepairWatching||this.lastResolvedSelection.length===0)return;this.selectionRepairWatching=!0;let e=0,t=!1;const r=()=>{if(e++,t=this.repairSelectionAfterReprojection(t)||t,e>=je){this.selectionRepairWatching=!1;return}setTimeout(r,V)};setTimeout(r,V)}repairSelectionAfterReprojection(e){const t=this.lastResolvedSelection;if(t.length===0||this.store.selectedEntityIds.size>0)return!1;const r=this.snapshot(),o=t.filter(s=>r.nodes.has(s));return o.length===0?(e||console.warn(`[ReactRootAuthoringAdapter] the re-projection dropped the selection (${t.join(", ")}) and none of those ids resolve in the remounted tree, so it cannot be restored. An inspector write issued now has no subject — re-select.`),this.lastResolvedSelection=[],!0):(!e&&!z&&(z=!0,console.warn(`[ReactRootAuthoringAdapter] OPEN DEFECT, repaired: an HMR re-projection drops this root's selection, and the editor is putting it back — restoring ${o.length} of ${t.length} id(s) that still resolve in the remounted tree (${o.join(", ")}). A write issued in that window has no subject. Named once per session; the repair runs on every re-projection.`)),this.store.selectMultiple([...o]),!0)}disposeReactRootAdapter(){this.disposeReloadSignal?.()}componentName(e){return this.oidIndex.get(e.oid)?.component??Re(e.el)??null}elementLabel(e,t){const r=S(e.el.getAttribute("data-vgai-name"));if(r)return r;const o=e.el.getAttribute("aria-labelledby");if(o){const l=o.split(/\s+/).map(c=>Array.from(t.nodes.values()).find(a=>a.el.getAttribute("id")===c)).map(c=>S(c?.el.textContent)).filter(c=>c!==null),d=S(l.join(" "));if(d)return d}const s=S(e.el.getAttribute("aria-label"));if(s)return s;if(["section","article","aside","nav","main","header","footer"].includes(e.tag)){const l=e.childIds.map(c=>t.nodes.get(c)).find(c=>c!==void 0&&/^h[1-6]$/.test(c.tag)),d=S(l?.el.textContent);if(d)return d}if(/^(h[1-6]|p|span|label|button|a|time|output|dt|dd|li|legend|caption|summary)$/.test(e.tag)){const l=S(e.el.textContent);if(l)return l}for(const l of["alt","title","placeholder","name"]){const d=S(e.el.getAttribute(l));if(d)return d}const n=e.el.getAttribute("id");if(n)return`#${n}`;const i=(e.el.getAttribute("class")??"").split(/\s+/).filter(Boolean)[0];return i?`${e.tag}.${i}`:e.tag}toEditorNode(e,t=this.snapshot()){const r=this.componentName(e),o=e.parentId?t.nodes.get(e.parentId):null,s=o?this.componentName(o):null,n=r!==null&&r!==s,i=e.el.getAttribute("data-vgai-hierarchy-id"),l=e.el.getAttribute("data-vgai-hierarchy-parent-id"),d=e.el.getAttribute("data-vgai-hierarchy-order"),c=e.el.getAttribute("data-vgai-hierarchy-group-label"),a=d===null?void 0:Number(d),p={id:e.id,label:n?r:this.elementLabel(e,t),...n?{secondaryLabel:`<${e.tag}>`}:{},role:n?"component":"element",kind:e.tag,parentId:e.parentId,childIds:e.childIds,...i===null?{}:{crossSurfaceId:i},...l===null?{}:{crossSurfaceParentId:l},...a===void 0||!Number.isInteger(a)?{}:{crossSurfaceOrder:a},...c===null?{}:{crossSurfaceGroupLabel:c}};return this.portableStories.length>0&&p.parentId===null?{...p,parentId:this.activeStoryId}:p}crossSurfaceStructureSignature(){const e=this.hierarchySnapshot(),t=new Set;for(const r of e.nodes.values())(r.el.getAttribute("data-vgai-hierarchy-id")!==null||r.el.getAttribute("data-vgai-hierarchy-parent-id")!==null||r.el.getAttribute("data-vgai-hierarchy-order")!==null||r.el.getAttribute("data-vgai-hierarchy-group-label")!==null)&&t.add(r.id);return t.size===0?null:JSON.stringify([...e.nodes.values()].flatMap(r=>{if(!t.has(r.id))return[];let o=r.parentId;for(;o!==null&&!t.has(o);)o=e.nodes.get(o)?.parentId??null;return[[r.id,o,r.el.getAttribute("data-vgai-hierarchy-id"),r.el.getAttribute("data-vgai-hierarchy-parent-id"),r.el.getAttribute("data-vgai-hierarchy-order"),r.el.getAttribute("data-vgai-hierarchy-group-label")]]}))}portableDocumentNode(e){return{id:e.id,label:e.label,...e.path?{secondaryLabel:e.path}:{},role:"document",kind:"tsx",parentId:null,childIds:[...e.storyIds]}}portableDocumentForStory(e){return this.portableDocuments.find(t=>t.storyIds.includes(e))??null}portableHierarchyNode(e){return this.portableHierarchy?.nodes.find(t=>t.id===e)??null}portableStoriesForNode(e){if(e===le)return[...this.portableStories];if(!this.portableHierarchy)return[...this.portableStories];const t=this.portableHierarchyNode(e);if(t&&t.role!=="component")return[];const r=t?.role==="component"?t.id:this.portableHierarchy.storyParentIds.get(e)??this.portableHierarchy.storyParentIds.get(this.activeStoryId??"");if(!r)return[];const o=this.portableHierarchyNode(r),s=new Set(o?.childIds??[]);return this.portableStories.filter(n=>s.has(n.id))}portableStoryNode(e,t){const r=e.id===this.activeStoryId;return{id:e.id,label:e.label,role:"story",kind:"story",parentId:this.portableHierarchy?.storyParentIds.get(e.id)??this.portableDocumentForStory(e.id)?.id??k,childIds:r?t:[]}}hierarchy={crossSurfaceStructureSignature:()=>this.crossSurfaceStructureSignature(),roots:()=>{const e=this.hierarchySnapshot(),{nodes:t,rootIds:r}=e;return this.portableStories.length>0?this.portableHierarchy?this.portableHierarchy.rootIds.flatMap(o=>{const s=this.portableHierarchy?.nodes.find(n=>n.id===o);return s?[{...s,childIds:[...s.childIds]}]:[]}):this.portableDocuments.map(o=>this.portableDocumentNode(o)):r.map(o=>this.toEditorNode(t.get(o),e))},node:e=>{if(this.portableStories.length>0){const o=this.portableHierarchy?.nodes.find(i=>i.id===e);if(o)return{...o,childIds:[...o.childIds]};const s=this.portableDocuments.find(i=>i.id===e);if(s)return this.portableDocumentNode(s);const n=this.portableStories.find(i=>i.id===e);if(n)return this.portableStoryNode(n,this.hierarchySnapshot().rootIds)}const t=this.hierarchySnapshot(),r=t.nodes.get(e);return r?this.toEditorNode(r,t):null}};selection={get:()=>{const e=[...this.store.selectedEntityIds];return e.length>0&&(this.lastResolvedSelection=e),e},set:e=>this.store.selectMultiple(e),resolve:(e,t)=>{const r=this.hierarchy.node(e);if(!r)return null;const o=[];let s=r,n=0;for(;s&&n++<1e3;)(s.role==="component"||s.role==="instance"||s.role==="boundary")&&o.push(s),s=s.parentId?this.hierarchy.node(s.parentId):null;const i=o.reverse();if(i.length===0)return{id:e};const l=t?.scopeId?i.findIndex(a=>a.id===t.scopeId):-1;let d=l>=0?l+1:0;return t?.intent==="deep"&&(d+=1),{id:(i[d]??r).id}}};truth={resolve:e=>{const t=this.snapshot().nodes.get(e);if(!t)return{site:{anchored:!1,reason:"This row is a design document, not a JSX element."},writeAnchorKind:void 0};const r=this.oidIndex.get(t.oid),o=this.writeBackend?"source-prop":"live-only";if(!r)return{site:{anchored:!1,reason:"Source metadata is still loading or unavailable."},writeAnchorKind:o};const s=A(r.file);return{site:{anchored:!0,kind:"source",file:s,line:r.line,col:r.col,display:`${s}:${r.line}`},writeAnchorKind:o}}};related={links:e=>this.hierarchy.node(e)?.role!=="component"||this.stories.storiesFor(e).length===0?[]:[{id:`definition:${P}`,title:"Open in UI Components",open:()=>{D(P)}}]};instanceSource(e){const t=this.snapshot().nodes.get(e);if(!t||this.hierarchy.node(e)?.role!=="component")return null;const r=E(t.el);if(!r)return null;const o=this.oidIndex.get(r.callSiteOid);return!o||!/^[A-Z]/.test(o.tag)?null:{node:t,callSiteOid:r.callSiteOid,callSite:o,props:r.props}}instanceProp(e,t){if(!t.startsWith(b))return null;const r=this.instanceSource(e);if(!r)return null;const o=t.slice(b.length),s=r.callSite.props?.find(i=>i.name===o),n=r.callSite.authoredProps?.find(i=>i.name===o);return s&&n?{source:r,prop:o,spec:s,authored:n}:null}affectedInstances(e,t){const r=this.instanceSource(e);if(!r)return 0;let o=0;for(const s of this.snapshot().nodes.values()){const n=E(s.el);if(!n)continue;const i=this.oidIndex.get(n.callSiteOid);!i||i.tag!==r.callSite.tag||(s.id===e||!i.authoredProps?.some(l=>l.name===t))&&o++}return Math.max(1,o)}instances={openComponent:()=>{D(P)},describe:e=>{const t=this.instanceSource(e);if(!t||this.stories.storiesFor(e).length===0)return null;const r=Object.entries(t.props).flatMap(([o,s])=>{const n=`${b}${o}`,i=this.instanceProp(e,n);if(!i)return[];const l=i.authored.literal&&i.spec.defaultValue!==void 0&&t.node.oid!==t.callSiteOid&&!!this.writeBackend?.runGesture&&!!this.writeBackend.writeComponentDefault&&!!this.writeBackend.removeProp;return[{path:n,label:o,value:s,...i.spec.defaultText===void 0?{}:{defaultText:i.spec.defaultText},canApplyToComponent:l,affectedInstanceCount:this.affectedInstances(e,o),...l?{}:{applyUnavailableReason:i.authored.literal?i.spec.defaultValue===void 0?"The component default is computed or absent, so source cannot be changed safely.":"This session cannot atomically update the component and its callsite.":"The callsite value is a dynamic expression, so it cannot become a component literal."}}]});return{componentName:t.callSite.tag,sourcePath:A(t.callSite.file),overrides:r}},revert:async(e,t)=>{const r=this.instanceSource(e),o=this.writeBackend;if(!r||!o?.removeProp)return;const s=t.map(l=>this.instanceProp(e,l)?.prop).filter(l=>!!l);let n=!1;const i=async l=>{for(const d of s){const c=await l.removeProp?.(r.callSiteOid,d);n||=c?.changed===!0}};if(s.length>1&&o.runGesture?await o.runGesture(`Revert ${s.length} Overrides`,i):await i(o),!!n)return this.dirty=!0,this.pendingSourceReconcile++,await this.refreshOidIndex(),{destination:w,persisted:!0}},applyToComponent:async(e,t)=>{const r=this.instanceProp(e,t),o=this.writeBackend;if(!r||!r.authored.literal||r.spec.defaultValue===void 0||r.source.node.oid===r.source.callSiteOid||!o?.runGesture||!o.writeComponentDefault||!o.removeProp)return{changed:!1,message:"Apply was refused because both literal source writes are not available."};const s=r.source.props[r.prop];return await o.runGesture(`Apply ${r.prop} to ${r.source.callSite.tag}`,async n=>{const i=await n.writeComponentDefault?.(r.source.node.oid,r.prop,ze(s,r.spec));if(!i?.changed)throw new Error(i?.error??"The component default did not change.");const l=await n.removeProp?.(r.source.callSiteOid,r.prop);if(!l?.changed)throw new Error(l?.error??"The callsite override was not removed.")}),this.dirty=!0,this.pendingSourceReconcile++,await this.refreshOidIndex(),{changed:!0,message:`${r.prop} now defaults to ${String(s)} in ${r.source.callSite.tag}.`,write:{destination:w,persisted:!0}}}};pickable={pick:(e,t)=>{const{nodes:r}=this.snapshot();let o=null,s=Number.POSITIVE_INFINITY,n=-1,i=-1;for(const l of r.values()){if(i++,this.lockedIds.has(l.id)||x(l.el.style,"pointerEvents")==="none")continue;const d=l.el.getBoundingClientRect?.();if(!d||e<d.left||e>d.right||t<d.top||t>d.bottom)continue;const c=d.width*d.height;(c<s||c===s&&i>n)&&(o=l.id,s=c,n=i)}return o}};hostRect(){const e=this.root.getBoundingClientRect?.();return{left:e?.left??0,top:e?.top??0}}toHostRelative(e){const t=this.hostRect(),r=M().zoom;return{x:(e.left-t.left)/r,y:(e.top-t.top)/r,width:e.width/r,height:e.height/r}}rects={rect:e=>{const r=this.snapshot().nodes.get(e)?.el.getBoundingClientRect?.();return r?this.toHostRelative(r):null},contextRects:e=>{const{nodes:t}=this.snapshot(),r=t.get(e);if(!r)return{};const o=r.parentId?t.get(r.parentId):void 0,s=o?.el.getBoundingClientRect?.(),i=(o?o.childIds:this.snapshot().rootIds).filter(h=>h!==e).map(h=>t.get(h)?.el.getBoundingClientRect?.()).filter(h=>h!=null).map(h=>this.toHostRelative(h)),l=r.el,d=l.getBoundingClientRect?.();let c;if(d){const h=I(y(l,"borderTopWidth",this.computedStyle))??0,v=I(y(l,"borderRightWidth",this.computedStyle))??0,te=I(y(l,"borderBottomWidth",this.computedStyle))??0,L=I(y(l,"borderLeftWidth",this.computedStyle))??0;c=this.toHostRelative({left:d.left+L,top:d.top+h,width:Math.max(0,d.width-L-v),height:Math.max(0,d.height-h-te)})}const a=re(),p=this.hostRect(),g=M().zoom,m=a.x.length>0||a.y.length>0?{x:a.x.map(h=>(h-p.left)/g),y:a.y.map(h=>(h-p.top)/g)}:void 0;return{...s?{parent:this.toHostRelative(s)}:{},...i.length?{siblings:i}:{},...c?{paddingBox:c}:{},...m?{guideEdges:m}:{}}},emptyContainers:()=>{const{nodes:e}=this.snapshot(),t=[];for(const r of e.values()){const o=r.el.getBoundingClientRect?.();!o||!F(r.el,r.tag)||t.push({oid:r.id,rect:this.toHostRelative(o),displayName:r.tag,hasVisibleChildren:r.el.children.length>0,hasText:(r.el.textContent??"").trim().length>0})}return ve(t).map(r=>({id:r.oid,rect:r.rect,displayName:r.displayName}))}};colorSample={backgroundChainAt:(e,t)=>{const r=this.pickable.pick(e,t);if(!r)return null;const{nodes:o}=this.snapshot(),s=[];let n=o.get(r);for(;n;)s.push(y(n.el,"backgroundColor",this.computedStyle)),n=n.parentId?o.get(n.parentId):void 0;return s}};boxEdit={begin:e=>{this.boxEditSession={id:e,touched:new Map,priorInline:new Map}},apply:(e,t)=>{const r=this.boxEditSession;if(!r||r.id!==e)return;const o=this.snapshot().nodes.get(e);if(!o)return;const s=y(o.el,"position",this.computedStyle),n=s==="absolute"||s==="fixed";for(const[i,l]of Object.entries(t)){const d=Be(i,n);if(!d){console.warn(`[ReactRootAuthoringAdapter] boxEdit: dropping patch key "${i}" for "${e}" — `+(i==="x"||i==="y"?`node is not absolutely/fixed positioned (computed position: "${s}"), no left/top to move`:"unrecognized box-edit patch key")),(i==="x"||i==="y")&&!r.hinted&&(r.hinted=!0,$(`${o.tag} flows in its layout (position: ${s}), so a drag cannot move it. Set Position to "abs" in the Inspector to place it freely; drag a handle to resize.`));continue}if(!r.priorInline.has(d.prop)){const p=x(o.el.style,d.prop);r.priorInline.set(d.prop,p==null?"":String(p))}let c=l;if((i==="x"||i==="y")&&typeof l=="number"){const p=o.el,g=p.getBoundingClientRect?.();if(g&&typeof p.offsetLeft=="number"&&typeof p.offsetTop=="number"){const m=this.toHostRelative(g),h=i==="x"?m.x-p.offsetLeft:m.y-p.offsetTop;c=Math.round(l-h)}}const a=d.cssValue(c);o.el.style&&(o.el.style[d.prop]=a),r.touched.set(d.prop,d.prop==="transform"?a:c)}},end:e=>{const t=this.boxEditSession;this.boxEditSession=null,!(!t||t.id!==e||t.touched.size===0)&&(this.boxEditTail=this.boxEditTail.then(()=>this.commitBoxEdit(e,t.touched,t.priorInline),()=>this.commitBoxEdit(e,t.touched,t.priorInline)),this.boxEditTail.catch(r=>{console.error("[ReactRootAuthoringAdapter] box edit failed and was not committed.",r)}))}};async commitBoxEdit(e,t,r){const o=this.dirty;for(const[i,l]of t)this.setEcho(e,`${f}${i}`,l);let s=0;this.lastStyleWriteRefusal=null;const n=async i=>{for(const[l,d]of t){const c=typeof d=="number"?`${d}px`:d;await this.writeStyleEntry(e,l,c,r.get(l),i)&&(s+=1)}if(s===0&&t.size>0){const l=this.lastStyleWriteRefusal??"the write was refused without a reason";he.error(`The last edit on this element was NOT saved — ${l}`,"authoring"),$("Not saved: the edit could not be written to source — see the Console.")}};try{this.writeBackend?.runGesture?await this.writeBackend.runGesture(`Edit ${t.size} Styles`,n):await n(this.writeBackend)}catch(i){const l=this.snapshot().nodes.get(e);for(const[d,c]of r)this.clearEcho(e,`${f}${d}`),l?.el.style&&(l.el.style[d]=c);throw this.dirty=o,this.store.notifyIngestEdit(),i}}text={get:e=>{if(this.guardedPaths.has(`${e}|${G}`))return null;const t=this.snapshot().nodes.get(e);if(!t||t.el.children.length>0)return null;const r=t.el.textContent;if(r==null)return null;const o=r.trim();return o||null},set:(e,t)=>{this.editText(e,t)}};inspector={properties:e=>{const t=this.portableHierarchyNode(e);if(t)return t.secondaryLabel?[{path:"document.path",label:"Source",type:"string",readonly:!0,group:"Document"}]:[];const r=this.portableDocuments.find(n=>n.id===e);if(r)return r.path?[{path:"document.path",label:"Source",type:"string",readonly:!0,group:"Document"}]:[];if(this.portableStories.some(n=>n.id===e))return this.portableStoryArgDescriptors(e);const s=[...Z.map(({prop:n,label:i,type:l,group:d,options:c})=>({path:`${f}${n}`,label:i,type:l,group:d,...c?{options:c}:{}})),...this.propDescriptors(e),...this.tokenDescriptors()];return this.guardedPaths.size===0?s:s.map(n=>{const i=this.guardedPaths.get(`${e}|${n.path}`);return i?{...n,readonly:!0,readonlyReason:i}:n})},get:(e,t)=>{const r=this.portableHierarchyNode(e);if(r)return t==="document.path"?r.secondaryLabel:void 0;const o=this.portableDocuments.find(a=>a.id===e);if(o)return t==="document.path"?o.path:void 0;if(this.portableStories.some(a=>a.id===e))return t==="story.active"?e===this.activeStoryId:t.startsWith(T)?this.portableStoryArgs.get(e)?.[t.slice(T.length)]:void 0;const s=this.readEcho(e,t);if(s.hit)return s.value;if(t==="locked")return this.lockedIds.has(e);if(t==="visible"){const a=this.readEcho(e,`${f}visibility`);if(a.hit)return a.value!=="hidden";const p=this.snapshot().nodes.get(e);return p?y(p.el,"visibility",this.computedStyle)!=="hidden":void 0}if(t.startsWith(R)){const a=t.slice(R.length);return this.designTokenValue(a)}if(t.startsWith(b)){const a=this.snapshot().nodes.get(e);return(a?E(a.el):null)?.props[t.slice(b.length)]}if(!t.startsWith(f))return;const n=t.slice(f.length),i=this.snapshot().nodes.get(e);if(!i)return;const l=x(i.el.style,n),d=typeof l=="string"&&l!==""?l:typeof l=="number"?String(l):y(i.el,n,this.computedStyle),c=_e.get(n);return c==="number"?I(d):c==="color"?Oe(d):d||void 0},set:(e,t,r)=>{if(this.portableHierarchyNode(e)||this.portableDocuments.some(s=>s.id===e))return;if(this.portableStories.some(s=>s.id===e)){if(!t.startsWith(T))return;const s=t.slice(T.length),n=this.portableStoryArgs.get(e);if(!n||!(s in n))return;const i={...n,[s]:r};this.portableStoryArgs.set(e,i),this.onPortableStoryArgsChanged?.(e,{...i}),this.store.notifyIngestEdit();return}if(t==="locked"){r?this.lockedIds.add(e):this.lockedIds.delete(e),this.store.notifyIngestEdit();return}if(t==="visible"){const s=r?"visible":"hidden";return this.setEcho(e,`${f}visibility`,s),this.pipedSourceWrite(()=>this.writeStyle(e,"visibility",s))}if(t.startsWith(b))return this.setEcho(e,t,r),this.pipedSourceWrite(()=>this.writePropEdit(e,t.slice(b.length),String(r)));if(t.startsWith(R))return this.setEcho(e,t,r),this.pipedSourceWrite(()=>this.writeTokenValue(e,t.slice(R.length),String(r)));if(!t.startsWith(f))return;const o=t.slice(f.length);return this.setEcho(e,t,r),this.pipedSourceWrite(()=>this.writeStyle(e,o,r))},remove:(e,t)=>{if(!t.startsWith(f))return;const r=t.slice(f.length),o=He[r];return o?this.setEcho(e,t,this.inspector.get(e,`${f}${o}`)):this.clearEcho(e,t),this.pipedSourceWrite(()=>this.removeStyleProp(e,r))}};assetSubject={get:e=>this.assetSubjectForNode(this.snapshot(),e),entries:()=>{const e=Me(this.assetRoot);return[...e.nodes.keys()].flatMap(t=>{const r=this.assetSubjectForNode(e,t);return r?[{id:t,subject:r}]:[]})}};assetSubjectForNode(e,t){const r=e.nodes.get(t);if(!r||r.tag!=="svg"||!r.el.outerHTML)return null;const o=this.oidIndex.get(r.oid);return{kind:"image",name:this.componentName(r)??this.elementLabel(r,e),mediaType:"image/svg+xml",text:r.el.outerHTML,...o?.file?{sourcePath:A(o.file)}:{}}}portableStoryArgDescriptors(e){return be(this.portableStoryArgs.get(e)??{},T)}portableArgs(e){const t=this.portableStoryArgs.get(e);return t?{...t}:null}elementClasses(e){const r=this.snapshot().nodes.get(e)?.el;if(!r||typeof r.getAttribute!="function")return[];const o=(r.getAttribute("class")??"").split(/\s+/).filter(Boolean),s=(typeof r.closest=="function"?r.closest("[data-vgai-game-styles]"):null)??r.ownerDocument;return o.map(n=>{let i=0;try{i=s?.querySelectorAll?.(`.${CSS.escape(n)}`).length??0}catch{}return{name:n,count:i,styledIn:j(n)?.sourceFile??null}})}async writeNamedStyle(e,t){const r=this.snapshot().nodes.get(e);if(!r)return{changed:!1,error:`"${e}" no longer resolves in this root`};const o=c=>(console.warn(`[ReactRootAuthoringAdapter] named-style ${t.kind} refused: ${c}`),{changed:!1,error:c});if(t.kind==="remove"){const c=await C({op:"remove",oid:r.oid,className:t.className});return c.changed?(this.dirty=!0,this.store.notifyIngestEdit(),{changed:!0}):o(c.error??"no change")}if(j(t.className)){const c=await C({op:"apply",oid:r.oid,className:t.className});return c.changed?(this.dirty=!0,this.store.notifyIngestEdit(),{changed:!0}):o(c.error??"the element already wears this class")}const n=c=>c!==void 0&&!c.includes("/packages/editor/")&&!c.includes("/node_modules/")&&!c.includes("/vendor/"),i=this.matchedCssRules(r.el).filter(c=>n(c.sourceFile)),l=i[i.length-1]?.sourceFile??Ie().find(n),d=await C({op:"create",oid:r.oid,className:t.className,...l!==void 0?{file:l}:{}});return d.changed?(this.dirty=!0,this.store.notifyIngestEdit(),{changed:!0,created:!0}):o(d.error??"no change")}async writeStory(e,t){const r=this.portableStories.find(n=>n.id===e);if(!r)return{changed:!1,error:`unknown portable story '${e}'`};if(!r.name||!r.modulePath)return{changed:!1,error:`story '${r.label}' carries no source address (name/modulePath) — it is not writable from this session`};const o=t.kind==="save-as"?{op:"save",file:r.modulePath,name:t.name,args:this.portableStoryArgs.get(e)??{}}:t.kind==="rename"?{op:"rename",file:r.modulePath,name:r.name,newName:t.newName}:{op:"delete",file:r.modulePath,name:r.name},s=await ce(o);if(!s.changed)return console.warn(`[ReactRootAuthoringAdapter] csf-story ${t.kind} refused for '${r.label}': ${s.error??"no change"}`),{changed:!1,...s.error!==void 0?{error:s.error}:{}};if(t.kind==="rename")r.name=t.newName,r.label=t.newName.replace(/([a-z])([A-Z])/g,"$1 $2");else if(t.kind==="delete"){const n=this.portableStories.indexOf(r);n>=0&&this.portableStories.splice(n,1),this.activeStoryId===e&&(this.activeStoryId=null)}return this.dirty=!0,this.store.notifyIngestEdit(),{changed:!0}}resetPortableArgs(e){const t=this.portableStories.find(o=>o.id===e);if(!t)return;const r={...t.args??{}};this.portableStoryArgs.set(e,r),this.onPortableStoryArgsChanged?.(e,{...r}),this.store.notifyIngestEdit()}propDescriptors(e){const t=this.snapshot().nodes.get(e),r=t?E(t.el):null;return r?Object.keys(r.props).map(o=>({path:`${b}${o}`,label:o,type:"string",group:"Props"})):[]}tokenDescriptors(){return this.designTokens().map(e=>({path:`${R}${e.name}`,label:e.name,type:"string",group:"Tokens",readonly:!e.declaredIn}))}async writeTokenValue(e,t,r){const o=`${R}${t}`,s=this.designTokens().find(l=>l.name===t);if(!s)return this.clearEcho(e,o),console.warn(`[ReactRootAuthoringAdapter] unknown design token "${t}".`),!1;if(!s.declaredIn)return this.clearEcho(e,o),console.warn(`[ReactRootAuthoringAdapter] token "${t}" has no stylesheet declaration to edit — it is set by script (a theme data module mirroring itself onto :root, or host style). Edit that source; it is plain data.`),!1;const n=this.writeBackend;if(!n?.writeCss)return this.clearEcho(e,o),console.warn(`[ReactRootAuthoringAdapter] cannot write token "${t}": no css-capable source-write backend in this session (hosted/no dev server).`),!1;const i=await n.writeCss(s.declaredIn.sourceFile,s.declaredIn.selector,t,r);return i.changed?(this.dirty=!0,this.store.notifyIngestEdit(),!0):(this.clearEcho(e,o),console.warn(`[ReactRootAuthoringAdapter] token write refused/no-op for "${t}" at ${s.declaredIn.sourceFile} (${s.declaredIn.selector}): ${i.error??"no change"}`),!1)}stories={storiesFor:e=>this.portableStories.length>0?this.portableStoriesForNode(e):[],active:e=>this.activeStoryId,apply:(e,t)=>{if(t!==null&&!this.portableStories.some(r=>r.id===t)){console.warn(`[ReactRootAuthoringAdapter] stories.apply: unknown portable CSF story id "${t}" — ignoring.`);return}this.activeStoryId=t??this.portableDefaultStoryId,this.onPortableStoryApplied?.(t),this.store.notifyIngestEdit()},unavailable:()=>de()};structure={create:(e,t)=>({id:"",ack:this.structOp(t??"","create",{wrapperTag:e})}),remove:e=>this.removeElement(e),removeMany:e=>this.removeManyElements(e),duplicate:e=>({id:e,ack:this.structOp(e,"duplicate")}),reparent:(e,t)=>{const r=t?this.oidOf(t):void 0;return r?this.structOp(e,"reparent",{parentOid:r}):this.structRefusal(`reparent refused: "${t??"the document root"}" has no authored source element to move into.`)},reorder:(e,t)=>{const r=t===null?this.snapshot().nodes.get(e)?.parentId??null:null;return this.reorder(e,t,r)},creatableKinds:()=>[...Fe],wrap:(e,t)=>this.wrap(e,t),unwrap:e=>this.unwrap(e)};assetDrop={accepts:(e,t,r)=>this.assetDropPlan(e,t,r).ok,drop:(e,t,r)=>{const o=this.assetDropPlan(e,t,r);return o.ok?this.structOp(o.parentId,"create",{snippet:o.snippet,...o.ensureImport?{ensureImport:o.ensureImport}:{}}):this.structRefusal(`asset drop refused — ${o.reason}`)}};assetDropPlan(e,t,r){if(!this.writeBackend)return{ok:!1,reason:"This session has no source writer, so nothing can be added."};const o=this.snapshot().nodes.get(e);if(!o)return{ok:!1,reason:"That row has no authored JSX element."};if(!F(o.el,o.tag))return{ok:!1,reason:`<${o.tag}> cannot contain child elements.`};const s=r?.item?.kind==="component"?r.item:null;if(s){if(s.surface!=="dom")return{ok:!1,reason:`${s.name} is a ${s.surface} component, not a React UI component.`};const n=this.sourceLocation(e)?.file;return n?{ok:!0,parentId:e,snippet:`<${s.name} />`,ensureImport:{name:s.name,module:this.relativeProjectModule(n,s.sourcePath),kind:s.exportKind}}:{ok:!1,reason:"The target source location has not loaded yet."}}return Ge.test(t)?{ok:!0,parentId:e,snippet:`<img src=${JSON.stringify(t)} alt="" />`}:{ok:!1,reason:`${t} is not a browser image asset and has no DOM element to become.`}}relativeProjectModule(e,t){return fe(A(e),A(t))}wrap(e,t="div"){return this.structOp(e,"wrap",{wrapperTag:t})}unwrap(e){return this.structOp(e,"unwrap")}reorder(e,t,r){const o={},s=t?this.oidOf(t):void 0,n=r?this.oidOf(r):void 0;return s&&(o.targetOid=s),n&&(o.parentOid=n),this.structOp(e,"reorder",o)}oidOf(e){return this.snapshot().nodes.get(e)?.oid}sourceLocation(e){const t=this.oidOf(e);if(t)return this.oidIndex.get(t)}structOp(e,t,r){return this.structPipe.structOp(this.oidOf(e),e,t,r,w)}lastStyleWriteRefusal=null;refuseStyleWrite(e){this.lastStyleWriteRefusal=e,console.warn(e)}async writeStyleEntry(e,t,r,o,s=this.writeBackend){const n=`${f}${t}`,i=this.snapshot().nodes.get(e);if(!i)return this.clearEcho(e,n),this.refuseStyleWrite(`[ReactRootAuthoringAdapter] cannot write "${t}": "${e}" no longer resolves in this root (the tree was re-projected — an HMR remount — between the selection and the write). Nothing was written. Re-select and retry.`),!1;if(!s)return this.clearEcho(e,n),this.refuseStyleWrite(`[ReactRootAuthoringAdapter] cannot write "${t}" on "${e}": no source-write backend in this session (hosted/no dev server) — selection/inspection still work.`),!1;await this.expandShorthandsFor(e,t,s);const l=oe();if(l!==null){const c=W(this.matchedCssRules(i.el),X(i.el)),a=s.writeCss?c?null:"no style class carries this element — create one in the Style class row first (inline styles cannot be responsive, so a breakpoint edit needs a class rule).":"breakpoint edits need the dev-server css door (a hosted session cannot write @media).";if(a!==null||!c||!s.writeCss)return this.clearEcho(e,n),a&&(this.markGuarded(e,n,a),$(a)),this.store.notifyIngestEdit(),this.refuseStyleWrite(`[ReactRootAuthoringAdapter] breakpoint edit refused: ${a}`),!1;const p=await s.writeCss(c.sourceFile,c.selectorText,t,O(t,r),l);return p.changed?(this.dirty=!0,this.store.notifyIngestEdit(),!0):(this.clearEcho(e,n),this.refuseStyleWrite(`[ReactRootAuthoringAdapter] breakpoint css write refused/no-op for "${c.selectorText}" ${t} at ${l}: ${p.error??"no change"}`),!1)}if(s.writeCss){const c=this.matchedCssRules(i.el),a=Ae(c,t),p=!a&&!Je(i.el,t)?W(c,X(i.el)):null,g=a?.rule??p;if(g){const m={rule:g},{rule:h}=m,v=await s.writeCss(h.sourceFile,h.selectorText,t,O(t,r));if(v.changed)return this.dirty=!0,this.store.notifyIngestEdit(),!0;if(!v.generated)return this.clearEcho(e,n),this.refuseStyleWrite(`[ReactRootAuthoringAdapter] CSS write refused/no-op for selector "${h.selectorText}" prop "${t}": ${v.error??"no change"}`),!1}}r=ue(r,x(i.el.style,t));const d=await s.writeStyle(i.oid,t,r);if(!d.changed){this.clearEcho(e,n);const c=d.tokenRef?Te(t,d.tokenRef):d.dynamic?J:null;return c&&this.markGuarded(e,n,c),this.store.notifyIngestEdit(),this.refuseStyleWrite(`[ReactRootAuthoringAdapter] style write refused/no-op for oid "${i.oid}" prop "${t}": ${c??d.error??"no change"}`),!1}return this.dirty=!0,o===void 0&&i.el.style&&(i.el.style[t]=O(t,r)),this.store.notifyIngestEdit(),!0}async writeStyle(e,t,r){return this.writeStyleEntry(e,t,r)}async expandShorthandsFor(e,t,r){const o=We(t);if(o.length===0)return;const s=this.snapshot().nodes.get(e);if(!(!s||!r))for(const n of o){const i=ee[n]??[],l=i.map(d=>y(s.el,d,this.computedStyle));if(await this.removeStyleProp(e,n,r))for(const[d,c]of i.entries()){if(c===t)continue;const a=l[d];a&&await this.writeStyleEntry(e,c,a,void 0,r)}}}async removeStyleProp(e,t,r=this.writeBackend){const o=this.snapshot().nodes.get(e);return!o||!r||!(await r.removeStyle(o.oid,t)).changed?!1:(this.dirty=!0,o.el.style&&delete o.el.style[t],this.store.notifyIngestEdit(),!0)}async editText(e,t){const r=this.snapshot().nodes.get(e);if(!r)return;if(!this.writeBackend?.writeText){console.warn(`[ReactRootAuthoringAdapter] cannot edit text on "${e}": no source-write backend with text support in this session (hosted/no dev server).`);return}const o=await this.writeBackend.writeText(r.oid,t);if(!o.changed){o.dynamic&&this.markGuarded(e,G,"The body has an expression or child elements, so replacing it with text is guarded."),this.store.notifyIngestEdit(),console.warn(`[ReactRootAuthoringAdapter] text edit refused/no-op for oid "${r.oid}": ${o.dynamic?"body has an expression/children (guarded)":o.error??"no change"}`);return}this.dirty=!0,this.pendingSourceReconcile++,this.store.notifyIngestEdit()}async writePropEdit(e,t,r){const o=`${b}${t}`,s=this.snapshot().nodes.get(e);if(!s)return this.clearEcho(e,o),!1;if(!this.writeBackend?.writeProp)return this.clearEcho(e,o),console.warn(`[ReactRootAuthoringAdapter] cannot write prop "${t}" on "${e}": no source-write backend with prop support in this session (hosted/no dev server).`),!1;const n=E(s.el);if(!n)return this.clearEcho(e,o),console.warn(`[ReactRootAuthoringAdapter] "${e}" is not a component call site with props — cannot write prop "${t}".`),!1;const i=await this.writeBackend.writeProp(n.callSiteOid,t,r);return i.changed?(this.dirty=!0,this.store.notifyIngestEdit(),!0):(this.clearEcho(e,o),i.dynamic&&this.markGuarded(e,o,J),this.store.notifyIngestEdit(),console.warn(`[ReactRootAuthoringAdapter] prop write refused/no-op for oid "${n.callSiteOid}" prop "${t}": ${i.dynamic?"value is a dynamic expression (guarded)":i.error??"no change"}`),!1)}removeElement(e){const t=this.snapshot().nodes.get(e);return t?this.structPipe.structOp(t.oid,e,"delete",void 0,w):this.structRefusal(`cannot delete "${e}": no such node in this world.`)}removeManyElements(e){const t=this.snapshot(),r=[...new Set(e.map(o=>t.nodes.get(o)?.oid).filter(o=>!!o))];return r.length===0?this.structRefusal("batch delete reached no source-addressable element."):this.structPipe.structMany(r,"delete",void 0,w)}subscribe(e){return this.store.subscribe(e)}get persistence(){const e=this.writeBackend;return{isDirty:()=>this.dirty,save:async()=>{},destination:e?w:B}}pipedSourceWrite(e){return pe({resolve:()=>this.writeBackend?{reaches:"writer",anchorKind:"source-prop",destination:w,write:e}:ge(B),record:()=>{},report:t=>console.warn(`[ReactRootAuthoringAdapter] this edit stays live-only — ${t}.`)})}structPipe=ye({report:e=>console.warn(`[ReactRootAuthoringAdapter] ${e}`),noWriterReason:B,backend:()=>this.writeBackend,onChanged:()=>{this.dirty=!0,this.pendingSourceReconcile++,this.store.notifyIngestEdit()}});structRefusal(e){return this.structPipe.structRefusal(e)}}export{$e as D,et as R,x as a,Oe as c,Be as m,Ze as s,Me as w};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{a as l}from"./three-contract-Dkt6PmWY.js";import{reflectionProbeOf as m}from"./reflection-probe-BHNGwVyz.js";import{r as d}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{dU as f,fa as h,fb as a,aJ as s,$ as x}from"./index-CaG87ZF-.js";import{u as b}from"./three-state-wXRU3rLr.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./user-data-dHvLdpwM.js";import"./object-marks-DwvIEBOK.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./editor-shell-store-Bh1S7M54.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-B4oYfpj8.js";import"./workspace-arrangement-DIMM7ska.js";import"./user-data-CqOoAowZ.js";import"./entity-object-B_5Gc0Ky.js";function j(r,o){return r?.kind==="reflection-probe"}const g={idle:"Not captured",queued:"Capture queued",capturing:"Capturing…",ready:"Ready",error:"Capture failed"},C={status:"idle",lastCapturedAt:null};function S({adapter:r,nodeId:o}){const i=b(),c=o?i.objectMap.get(o)??l(r.hierarchy,o):null,e=m(c),n=d.useSyncExternalStore(u=>e?.subscribe(u)??(()=>{}),()=>e?.getSnapshot()??C);if(!e)return null;const p=e.config.captureMode==="on-change"?"On change":e.config.captureMode==="realtime"?"Realtime":"Manual";return t.jsxs(t.Fragment,{children:[n.status==="error"&&n.message?t.jsx(f,{tone:"error",children:n.message}):null,t.jsxs(h,{children:[t.jsx(a,{label:"Status",children:t.jsx(s,{tone:n.status==="error"?"danger":n.status==="ready"?"success":"muted",children:g[n.status]})}),t.jsx(a,{label:"Update",children:t.jsx(s,{tone:"muted",children:p})}),t.jsx(a,{label:"Cubemap",children:t.jsx(s,{tone:"muted",children:`${e.config.resolution} × ${e.config.resolution}`})}),t.jsx(a,{label:"Capture",children:t.jsx(x,{size:"compact",disabled:n.status==="capturing",onClick:()=>e.recapture(),children:"Recapture"})})]})]})}const v="selection.inspector",D="Capture",K="camera-rotate",Q=500;function V(r,o){return j(r)}function W({adapter:r,nodeId:o}){return t.jsx(S,{adapter:r,nodeId:o})}export{W as default,K as icon,V as match,Q as order,v as point,D as title};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a8 as g,a9 as d}from"./index-CaG87ZF-.js";const f=Object.assign({}),$=Object.assign({}),c=Object.assign({}),o="vgai.adapter.ts",l="packages/editor/src/ingest/games";function b(t){return c[u(t,o)]?`${l}/${t}/${o}`:null}async function M(t){const e=c[u(t,o)];return e?await e():null}const h=Object.assign({}),p=/^\.\/games\/([^/]+)\/vgai\.project\.json$/;function u(t,e){return`./games/${t}/${e}`}function m(t){const e=p.exec(t);if(!e?.[1])throw new Error(`ingest registry: unexpected manifest glob key "${t}"`);return e[1]}function E(t,e){const a=g(e,{configurationKinds:"defer"}),n=d(a);if(n.length!==1)throw new Error(`ingest registry: "${t}/vgai.project.json" must declare exactly one root (found ${n.length}).`);const s=n[0];if(s.adapter.type!=="ingest")throw new Error(`ingest registry: "${t}/vgai.project.json"'s root must be an { ingest } root (found adapter identity "${s.adapter.identity}").`);const i=s;return{folderId:t,manifest:a,root:i,surface:i.adapter.surface}}let r=null;function y(){return r||(r=Object.entries(f).map(([t,e])=>E(m(t),e)).sort((t,e)=>t.folderId.localeCompare(e.folderId))),r}function R(t){return y().filter(e=>e.surface===t)}export{b as a,R as b,h as c,$ as e,u as g,M as i};
|