@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,2 +1,2 @@
|
|
|
1
|
-
import{a as b}from"./jsx-runtime-DPjLkJKQ.js";import{r as d}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{
|
|
1
|
+
import{a as b}from"./jsx-runtime-DPjLkJKQ.js";import{r as d}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{af as O}from"./index-C5ZAyrKq.js";import{r as L}from"./studio-environment-R9qXUUcC.js";import{Q as x,V as y,d as C,m as j}from"./three.quarks.esm-C_HmSKXo.js";import{p as z}from"./project-provenance-BGnJXJwa.js";import{O as Q}from"./StageHost-DYfGYwvq.js";import{a as M}from"./three-contract-Dkt6PmWY.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-C84W0V47.js";import"./workspace-arrangement-DqG5sUns.js";import"./KTX2Loader-CaqVE6nY.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./three-state-BCACvUtm.js";import"./editor-shell-store-DHVWS8cE.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./editor-layers-D-CTUqco.js";import"./entity-object-MKYemTFM.js";import"./standard-viewport-dressing-BW-dM_1h.js";import"./content-bounds-DROIchTa.js";import"./hierarchy-marks-BuCO8Ke-.js";import"./preview-renderer-BrYNFV1p.js";import"./renderer-ownership-BovSEcLv.js";import"./live-mixers-B-bwLZ7c.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-DvspbmJl.js";import"./three-viewport-presentation-CBzvc2v2.js";import"./clip-planes-CnAI6DZn.js";import"./three-DiL6vMXq.js";import"./component-instance-root-DLI40MiB.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-BmQs-h6t.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three-integration-DXOFI88n.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-CAVQMPI7.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-CMRJdFp6.js";import"./viewport-door-BARIpMu-.js";import"./asset-preview-DxlSdRZn.js";import"./bitmap-label-Ct4k6ehY.js";import"./scene-framing-DkZKDwH3.js";import"./source-object3d-authoring-adapter-CvmFpSUj.js";import"./three-projection-core-B7Lf8tOp.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-xCg94CuI.js";import"./viewport-surface-status-TUfhXKR9.js";function $(r){const t=[],e=new Set;return r.traverse(o=>{if(o.type!=="ParticleEmitter")return;const i=o.system;!i||typeof i.getRendererSettings!="function"||e.has(i)||(e.add(i),t.push(i))}),t}const S=new WeakMap;function h(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function E(r){return h(r)?r:null}function w(r,t){t(r);for(const e of r.children??[])w(e,t)}function V(r){if(!h(r))return!1;const t=E(r.object);if(!t)return!1;let e=!1;return w(t,o=>{o.type==="ParticleEmitter"&&h(o.ps)&&o.ps.version!==void 0&&(e=!0)}),e}function B(r){const t=new Map,e=E(r.object);return e&&w(e,o=>{typeof o.uuid=="string"&&t.set(o.uuid,o)}),t}function F(r){const t=new x().parse(r.json),e=B(r.json),o=$(t),i=new Map(o.map(n=>[n.emitter,n])),p=new Map;if(t.traverse(n=>{const f=i.get(n);if(!f)return;const s=e.get(n.uuid);if(!s?.ps)throw new Error(`Native Quarks emitter ${n.name||n.uuid} has no matching JSON node.`);p.set(n,{system:f,json:s})}),p.size===0)throw new Error("The Quarks document contains no loadable emitter.");const m={root:t,originalText:r.text,json:r.json,emitters:p,dirty:!1};return S.set(t,m),m}function J(r){const t=S.get(r);if(!t)throw new Error("Object3D is not a native three.quarks JSON document.");return t}function q(r){for(const t of r.emitters.values())t.system.dispose();S.delete(r.root)}function G(r){const t=J(r);return t.dirty?`${JSON.stringify(t.json,null,2)}
|
|
2
2
|
`:t.originalText}const U=new Set(["particles.duration","particles.looping","particles.prewarm","particles.worldSpace","particles.startLife","particles.startSpeed","particles.startRotation","particles.startSize","particles.startColor","particles.emissionOverTime","particles.emissionOverDistance"]);function W(){return[{path:"particles.duration",label:"Duration",type:"number",group:"Emission"},{path:"particles.looping",label:"Looping",type:"boolean",group:"Emission"},{path:"particles.prewarm",label:"Prewarm",type:"boolean",group:"Emission"},{path:"particles.emissionOverTime",label:"Rate over time",type:"json",group:"Emission"},{path:"particles.emissionOverDistance",label:"Rate over distance",type:"json",group:"Emission"},{path:"particles.startLife",label:"Lifetime",type:"json",group:"Start"},{path:"particles.startSpeed",label:"Speed",type:"json",group:"Start"},{path:"particles.startRotation",label:"Rotation",type:"json",group:"Start"},{path:"particles.startSize",label:"Size",type:"json",group:"Start"},{path:"particles.startColor",label:"Color",type:"json",group:"Start"},{path:"particles.worldSpace",label:"World space",type:"boolean",group:"Simulation"},{path:"particles.shape",label:"Shape",type:"string",readonly:!0,group:"Shape"},{path:"particles.behaviors",label:"Modules",type:"json",readonly:!0,group:"Behavior"},{path:"particles.renderMode",label:"Native render mode",type:"number",readonly:!0,group:"Renderer"}]}function u(r,t){if(!h(r)||typeof r.type!="string")throw new Error(`${t} must be a native quarks function JSON object with a type.`);return r}function k(r,t){const{system:e}=r;switch(t){case"particles.duration":return e.duration;case"particles.looping":return e.looping;case"particles.prewarm":return e.prewarm;case"particles.worldSpace":return e.worldSpace;case"particles.startLife":return e.startLife.toJSON();case"particles.startSpeed":return e.startSpeed.toJSON();case"particles.startRotation":return e.startRotation.toJSON();case"particles.startSize":return e.startSize.toJSON();case"particles.startColor":return e.startColor.toJSON();case"particles.emissionOverTime":return e.emissionOverTime.toJSON();case"particles.emissionOverDistance":return e.emissionOverDistance.toJSON();case"particles.shape":return e.emitterShape.type;case"particles.behaviors":return e.behaviors.map(o=>o.type);case"particles.renderMode":return e.renderMode;default:return}}function g(r){return r.slice(10)}function N(r,t,e){const{system:o}=r;switch(t){case"particles.duration":{const i=Number(e);if(!Number.isFinite(i)||i<=0)throw new Error("Particle duration must be a positive finite number.");o.duration=i;break}case"particles.looping":o.looping=!!e;break;case"particles.prewarm":o.prewarm=!!e;break;case"particles.worldSpace":o.worldSpace=!!e;break;case"particles.startLife":o.startLife=y(u(e,"Lifetime"));break;case"particles.startSpeed":o.startSpeed=y(u(e,"Speed"));break;case"particles.startRotation":o.startRotation=j(u(e,"Rotation"));break;case"particles.startSize":o.startSize=j(u(e,"Size"));break;case"particles.startColor":o.startColor=C(u(e,"Color"));break;case"particles.emissionOverTime":o.emissionOverTime=y(u(e,"Rate over time"));break;case"particles.emissionOverDistance":o.emissionOverDistance=y(u(e,"Rate over distance"));break;default:throw new Error(`Particle field ${t} is read-only.`)}r.json.ps[g(t)]=e,o.restart()}function H(r,t,e,o){N(r,t,e),r.json.ps[g(t)]=o}function I(r){return r===void 0?void 0:JSON.parse(JSON.stringify(r))}const _=({root:r,defaultAdapter:t,commit:e})=>{const o=J(r),i=new Set,p=()=>{for(const s of i)s()},m=s=>{const a=M(t.hierarchy,s);return a?o.emitters.get(a)??null:null},n={properties:s=>[...t.inspector?.properties(s)??[],...m(s)?W():[]],get:(s,a)=>{const c=m(s);return c&&a.startsWith("particles.")?k(c,a):t.inspector?.get(s,a)},set:async(s,a,c)=>{const l=m(s);if(!l||!U.has(a)){await t.inspector?.set(s,a,c);return}const v=k(l,a),T=g(a),R=I(l.json.ps?.[T]),P=o.dirty;try{N(l,a,c),o.dirty=!0,p(),await e(`Edit ${l.system.emitter.name||"Particle Emitter"}`)}catch(D){throw H(l,a,v,R),o.dirty=P,p(),D}}};return{adapter:{capabilities:{...t.capabilities,inspectorFields:!0,persist:!0},provenance:{source:"document",label:"three.quarks JSON",detail:"The hierarchy and emitter fields are the native three.quarks Object3D JSON document."},hierarchy:t.hierarchy,...t.selection?{selection:t.selection}:{},...t.transforms?{transforms:t.transforms}:{},inspector:n,subscribe:s=>{i.add(s);const a=t.subscribe?.(s)??(()=>{});return()=>{i.delete(s),a()}}},dispose:()=>i.clear()}};async function er(r,t){const e=await fetch(L(r),{cache:"no-store",...t?{signal:t}:{}});if(!e.ok)throw new Error(`Could not load ${r}: HTTP ${e.status}.`);const o=await e.text();let i;try{i=JSON.parse(o)}catch{return null}return V(i)?{text:o,json:i,projectPath:z(r)}:null}function or({documentId:r,assetPath:t,displayName:e,active:o,source:i}){const[p,m]=d.useState(null),[n,f]=d.useState(null);d.useEffect(()=>{if(!o){m(null);return}let c=null;try{c=F(i),m(c),f(null)}catch(l){f(l instanceof Error?l.message:String(l))}return()=>{c&&q(c)}},[o,i]);const s=d.useCallback(()=>{if(!p)throw new Error(`Particle asset ${t} is not loaded.`);return{root:p.root,dispose(){}}},[p,t]),a=d.useMemo(()=>({label:`Edit ${e}`,resources:[{path:i.projectPath,contentType:"application/json",serialize:({root:c})=>G(c)}]}),[e,i.projectPath]);return n?b.jsx("div",{role:"alert",style:{padding:20,color:O.semantic.danger},children:n}):p?b.jsx(Q,{documentId:r,sourcePath:t,displayName:e,build:s,active:o,assetType:"particles",persistence:a,authoring:_,dressing:{grid:!0}}):b.jsxs("div",{style:{padding:20,color:O.content.muted},children:["Loading ",e,"…"]})}export{or as QuarksAssetDocument,V as isNativeQuarksJson,er as loadNativeQuarksJsonSource};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{K as V,da as B,db as F,dc as w,dd as I,cD as W,a0 as R,aL as j,a1 as S,de as D,df as H,dg as T,dh as A,di as P,cR as N,aM as G,dj as M,cS as f}from"./index-C5ZAyrKq.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{s as K,g as L,a as X,b as Y,c as _,d as y,f as $,t as q}from"./react-story-board-CCm2Opwn.js";const z={fill:null,desktop:{width:1440,height:900},tablet:{width:768,height:1024},mobile:{width:390,height:844}};function J({boardViewport:e,containerRef:r,selectViewport:n,viewportValue:d}){return t.jsxs(t.Fragment,{children:[t.jsxs(A,{"aria-label":"Responsive viewport",title:e?.locked?"Viewport is locked by this story’s globals.viewport":"Responsive viewport",value:d,disabled:e?.locked===!0,onChange:o=>n(o.target.value),className:"volter-react-viewport-select",children:[t.jsx("option",{value:"fill",children:"Responsive"}),e?e.choices.map(o=>t.jsxs("option",{value:o.id,children:[o.label," · ",o.width,"×",o.height]},o.id)):t.jsxs(t.Fragment,{children:[t.jsx("option",{value:"desktop",children:"Desktop · 1440×900"}),t.jsx("option",{value:"tablet",children:"Tablet · 768×1024"}),t.jsx("option",{value:"mobile",children:"Mobile · 390×844"})]})]}),e&&t.jsx(j,{"aria-label":"Rotate viewport",title:e.locked?"Viewport is locked by this story’s globals.viewport":"Rotate viewport",size:"comfortable",disabled:e.locked,onClick:()=>q(r.current),children:t.jsx(S,{icon:P,size:"md"})})]})}function at({containerRef:e,context:r,boardOnly:n=!1}){const d=V();h.useSyncExternalStore(d.subscribe,d.getSnapshot);const o=h.useSyncExternalStore(B,F),l=h.useSyncExternalStore(K,L),u=h.useSyncExternalStore(X,()=>Y(e.current),()=>null),m=h.useCallback(i=>{const s=e.current;if(!s)return;const a=Math.min(4,Math.max(.1,i)),p=s.clientWidth/2,b=s.clientHeight/2,g=(p-o.x)/o.zoom,Z=(b-o.y)/o.zoom;w(p-g*a,b-Z*a,a)},[e,o]),c=h.useCallback(()=>{const i=e.current,s=[...d.selectedEntityIds].at(-1);if(!i||!s)return;const a=r?.adapter.rects?.rect(s);if(!a||a.width<=0||a.height<=0)return;const p=Math.max(1,i.clientWidth-96),b=Math.max(1,i.clientHeight-96),g=Math.min(4,Math.max(.1,Math.min(p/a.width,b/a.height)));w(i.clientWidth/2-(a.x+a.width/2)*g,i.clientHeight/2-(a.y+a.height/2)*g,g)},[e,r,d]),x=h.useCallback(i=>{const s=e.current;if(u){_(s,i==="fill"?null:i);return}const a=z[i];if(!s||a===null){y(null,null),w(0,0,1);return}y(a.width,a.height);const p=Math.min(1,Math.max(.1,Math.min((s.clientWidth-96)/a.width,(s.clientHeight-96)/a.height)));w((s.clientWidth-a.width*p)/2,(s.clientHeight-a.height*p)/2,p)},[u,e]),k=h.useCallback(()=>{const i=e.current;i&&$(i)},[e]),v=u!==null,C=r?.kind==="dom"&&!!r.adapter.rects;if(n?!v:!C)return null;const E=u?u.selectedViewportId??"fill":Object.entries(z).find(([,i])=>i===null?l.width===null:i.width===l.width&&i.height===l.height)?.[0]??"fill";return t.jsxs(t.Fragment,{children:[!v&&l.width!==null&&l.height!==null&&t.jsx("div",{"data-testid":"react-canvas-device-frame",style:{position:"absolute",left:0,top:0,zIndex:0,width:l.width,height:l.height,transform:I(o),transformOrigin:"0 0",pointerEvents:"none",background:"#fff",boxShadow:"0 0 0 1px #ffffff40, 0 8px 30px #0009"}}),t.jsxs(W,{label:n?"2D component board view":"React canvas view","data-testid":n?"canvas-board-zoom-controls":"react-canvas-zoom-controls",...n?{"data-board-zoom":""}:{},"data-volter-canvas-navigation-ignore":"true",className:"volter-react-canvas-controls",children:[!n&&t.jsx(J,{boardViewport:u,containerRef:e,selectViewport:x,viewportValue:E}),v&&t.jsx(R,{variant:"ghost","aria-label":"Fit story board",title:"Fit all stories",size:"comfortable",onClick:k,children:"Fit board"}),t.jsx(j,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>m(o.zoom/1.2),children:t.jsx(S,{icon:D,size:"md"})}),t.jsx(Q,{zoom:o.zoom,zoomTo:m,...v?{fit:k}:{},...!n&&d.selectedEntityIds.size>0?{toSelection:c}:{}}),t.jsx(j,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>m(o.zoom*1.2),children:t.jsx(S,{icon:H,size:"md"})}),!n&&t.jsx(j,{"aria-label":"Zoom to selection",title:"Zoom to selection",size:"comfortable",onClick:c,children:t.jsx(S,{icon:T,size:"md"})})]})]})}function Q({zoom:e,zoomTo:r,fit:n,toSelection:d}){const[o,l]=h.useState(!1),u=h.useRef(null),m=c=>()=>{c(),l(!1)};return t.jsxs(t.Fragment,{children:[t.jsxs(R,{ref:u,variant:"ghost","aria-label":"Zoom","aria-haspopup":"menu","aria-expanded":o,title:"Zoom",size:"comfortable",onClick:()=>l(!o),children:[Math.round(e*100),"%"]}),o&&t.jsxs(N,{anchorRef:u,align:"end",clamp:!0,"aria-label":"Zoom",onDismiss:()=>l(!1),children:[t.jsx("div",{style:{padding:"4px 8px"},children:t.jsx(G,{"aria-label":"Zoom percentage",defaultValue:String(Math.round(e*100)),onKeyDown:c=>{if(c.key!=="Enter")return;const x=Number.parseFloat(c.currentTarget.value);Number.isFinite(x)&&x>0&&(r(x/100),l(!1))}})}),t.jsx(M,{}),t.jsx(f,{onSelect:m(()=>r(e*1.2)),children:"Zoom in"}),t.jsx(f,{onSelect:m(()=>r(e/1.2)),children:"Zoom out"}),n?t.jsx(f,{onSelect:m(n),children:"Zoom to fit"}):null,d?t.jsx(f,{onSelect:m(d),children:"Zoom to selection"}):null,t.jsx(M,{}),[.5,1,2].map(c=>t.jsx(f,{onSelect:m(()=>r(c)),children:`Zoom to ${c*100}%`},c))]})]})}export{at as R};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as l}from"./jsx-runtime-DPjLkJKQ.js";import{r as u}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{af as st,aM as Ze,a0 as St,hY as he,gi as Qe,c_ as Et,cS as de,r as qe,c4 as Xn,jL as Je,jM as Yn,cD as Bn,jN as ze,jO as De,jP as Ie,aL as Oe,a1 as Le,jQ as Hn,gH as Gn,jR as An,jS as Kn,jT as Nn,jU as K,eY as _n,K as Wn,ax as Vn,cA as Un,dG as Zn,dH as Qn,fx as qn,jV as re,jW as tn,fJ as T,jX as ue,fM as xt,jY as se,jZ as Dt,j_ as zt,fK as Jn,fL as Me,fN as to,j$ as eo,k0 as no,k1 as oo,k2 as io,k3 as ro,k4 as so,k5 as Te,k6 as ao,k7 as lo,k8 as co,k9 as uo,ka as po,kb as fo,kc as xo,eU as en,fI as Fe,kd as ho,ke as yo,kf as go,kg as vo,dd as mo,kh as bo,aA as nn,ki as wo,kj as So,kk as Eo,kl as ko,km as Co,aB as jo,fz as Ro}from"./index-C5ZAyrKq.js";import{s as Po,i as zo,r as $e}from"./eyedropper-session-bjPXnfeX.js";import{a as Do,p as Io}from"./layered-pick-CAVQMPI7.js";import{z as Oo,j as Lo}from"./react-story-board-CCm2Opwn.js";import{v as ye}from"./viewport-editor-controls-BYaAZ_Ku.js";import{l as Mo}from"./inspect-Cz3Zyx_1.js";const Xe=new WeakMap;let Ye=0;function yt(e){let o=Xe.get(e);return o||(o={guides:[],listeners:new Set,revision:0},Xe.set(e,o)),o}function Vt(e){e.revision+=1;for(const o of e.listeners)o()}function To(e){return yt(e).guides}function Fo(e){return yt(e).revision}function $o(e,o){const n=yt(e);return n.listeners.add(o),()=>n.listeners.delete(o)}function qi(e,o,n){Ye+=1;const d=yt(e),r=`canvas-guide-${Ye}`;return d.guides=[...d.guides,{id:r,axis:o,value:n}],Vt(d),r}function Ji(e,o,n){const d=yt(e),r=d.guides.map(h=>h.id===o?{...h,value:n}:h);r.every((h,s)=>h===d.guides[s])||(d.guides=r,Vt(d))}function tr(e,o){const n=yt(e),d=n.guides.filter(r=>r.id!==o);d.length!==n.guides.length&&(n.guides=d,Vt(n))}function er(e){const o=yt(e);o.guides.length!==0&&(o.guides=[],Vt(o))}const pe=new WeakMap,fe=new Set;let on=0;function ht(e){return pe.get(e)??null}function Xo(e,o){o?pe.set(e,o):pe.delete(e),on+=1;for(const n of fe)n()}function Yo(e){return fe.add(e),()=>fe.delete(e)}function Bo(){return on}const rn="canvasCreateNode";function Ho(){return qe().projectLocalState.read(rn)??{favorites:[],recent:[]}}function Be(e){qe().projectLocalState.write(rn,e)}function sn(e,o){u.useEffect(()=>{const n=r=>{e.current?.contains(r.target)||o()},d=r=>{r.key==="Escape"&&o()};return document.addEventListener("pointerdown",n),document.addEventListener("keydown",d),()=>{document.removeEventListener("pointerdown",n),document.removeEventListener("keydown",d)}},[e,o])}function Go({state:e,onClose:o}){const[n,d]=u.useState("menu");return n==="create"?l.jsx(No,{state:e,onClose:o}):n==="instantiate"?l.jsx(_o,{state:e,onClose:o}):l.jsx(Ao,{state:e,onClose:o,onPick:d})}function Ao({state:e,onClose:o,onPick:n}){const d=u.useRef(null);return sn(d,o),l.jsx(he,{children:l.jsxs(Qe,{ref:d,"aria-label":"Add node here","data-testid":"viewport-add-menu",style:{position:"fixed",left:e.x,top:e.y,minWidth:190,zIndex:Et.dropdown},children:[l.jsx(de,{"data-testid":"viewport-add-menu-item",disabled:e.kinds.length===0,title:e.kinds.length===0?"Nothing can be added under the selected node.":void 0,onSelect:()=>n("create"),children:"Add 2D Node Here…"}),e.adapter.assetDrop?l.jsx(de,{"data-testid":"viewport-add-menu-item",disabled:e.kinds.length===0,title:e.kinds.length===0?"Nothing can be added under the selected node.":void 0,onSelect:()=>n("instantiate"),children:"Instantiate Scene Here…"}):null]})})}function an({title:e,testId:o,onClose:n,children:d,footer:r}){const h=u.useRef(null);return sn(h,n),l.jsx(he,{children:l.jsx("div",{style:{position:"fixed",inset:0,zIndex:Et.dropdown,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0, 0, 0, .35)"},children:l.jsxs("div",{ref:h,role:"dialog","aria-label":e,"data-testid":o,style:{width:640,maxWidth:"90vw",maxHeight:"80vh",display:"flex",flexDirection:"column",gap:8,padding:12,borderRadius:6,background:st.surface.raised,color:st.content.primary,boxShadow:"0 12px 40px rgba(0, 0, 0, .5)",fontSize:12},children:[l.jsx("div",{style:{fontWeight:600},children:e}),d,l.jsx("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:r})]})})})}const N={color:st.content.muted};function xe({selected:e,onPick:o,onOpen:n,testId:d,indent:r=0,children:h}){return l.jsx("div",{role:"option","aria-selected":e,"data-testid":d,onClick:o,onDoubleClick:n,style:{padding:`2px 6px 2px ${6+r*14}px`,borderRadius:3,cursor:"default",background:e?st.accent.muted:"transparent"},children:h})}function Ko(e,o){let n=0,d=e.extends?o.get(e.extends):void 0;for(;d&&n<16;)n+=1,d=d.extends?o.get(d.extends):void 0;return n}function ln(e){const[o,n]=u.useState(null),[d,r]=u.useState(null);return u.useEffect(()=>{if(!e)return;let h=!0;return Xn().then(s=>{if(h){if(!s.ok){r(s.reason),n([]);return}n(s.entries.filter(y=>y.surface==="canvas"&&y.exported&&y.contentKind!=="image"))}}),()=>{h=!1}},[e]),{components:o,failure:d}}const He=e=>`component:${e.path}#${e.name}`;function cn(e,o){const n=e.adapter.assetDrop;if(!n)return"This surface places no components.";const d={position:[e.at.x,e.at.y,0],item:{kind:"component",name:o.name,sourcePath:o.path,exportKind:o.defaultExport?"default":"named",surface:o.surface}},r=e.parentId??"";return n.accepts(r,o.path,d)?(Je(e.adapter,r,o.path,d),null):`${o.name} cannot be placed here.`}function No({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState(Ho),[s,y]=u.useState({builtIn:!0,custom:!0}),[w,v]=u.useState(!1),[b,j]=u.useState(null),{components:P}=ln(!!e.adapter.assetDrop),I=e.kinds.find(x=>!x.extends),O=(P??[]).map(x=>({kind:He(x),label:x.name,...I?{extends:I.kind}:{},description:`A project component, from ${x.path}.`})),k=[...s.builtIn?e.kinds:[],...s.custom?O:[]],A=u.useMemo(()=>new Map([...e.kinds,...O].map(x=>[x.kind,x])),[e.kinds,P]),V=k.filter(x=>x.label.toLowerCase().includes(n.trim().toLowerCase())),[nt,U]=u.useState(e.kinds[0]?.kind??null),L=nt&&V.some(x=>x.kind===nt)?nt:V[0]?.kind??null,Z=L?A.get(L):void 0,ut=x=>{if(!x)return;const $=(P??[]).find(R=>He(R)===x);if($){const R=cn(e,$);if(R){j(R);return}}else e.structure.create(x,e.parentId??void 0,e.at).ack;Be({...r,recent:[x,...r.recent.filter(R=>R!==x)].slice(0,10)}),o()},It=()=>{if(!L)return;const x=r.favorites.includes(L)?r.favorites.filter(R=>R!==L):[...r.favorites,L],$={...r,favorites:x};Be($),h($)},Ot=(x,$)=>x.map(R=>A.get(R)).filter(R=>R!==void 0).map(R=>l.jsx(xe,{testId:$,selected:R.kind===L,onPick:()=>U(R.kind),onOpen:()=>ut(R.kind),children:R.label},R.kind));return l.jsx(an,{title:`Create New ${I?.label??"Node"}`,testId:"canvas-create-node-dialog",onClose:o,footer:l.jsxs(l.Fragment,{children:[l.jsx(St,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),l.jsx(St,{type:"button","data-testid":"canvas-create-node-create",disabled:!L,onClick:()=>ut(L),children:"Create"})]}),children:l.jsxs("div",{style:{display:"flex",gap:12,minHeight:240},children:[l.jsxs("div",{style:{width:170,display:"flex",flexDirection:"column",gap:4},children:[l.jsx("span",{style:N,children:"Favorites:"}),l.jsx("div",{"data-testid":"canvas-create-node-favorites",style:{flex:1},children:Ot(r.favorites,"canvas-create-node-favorite")}),l.jsx("span",{style:N,children:"Recent:"}),l.jsx("div",{"data-testid":"canvas-create-node-recent",style:{flex:1},children:Ot(r.recent,"canvas-create-node-recent-item")})]}),l.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:4},children:[l.jsx("span",{style:N,children:"Search:"}),l.jsxs("div",{style:{display:"flex",gap:4},children:[l.jsx(Ze,{"data-testid":"canvas-create-node-search",value:n,autoFocus:!0,onChange:x=>d(x.target.value),onKeyDown:x=>{if(x.key==="Enter"&&ut(L),x.key==="ArrowDown"||x.key==="ArrowUp"){x.preventDefault();const $=V.findIndex(Lt=>Lt.kind===L),R=V[Math.min(V.length-1,Math.max(0,$+(x.key==="ArrowDown"?1:-1)))];R&&U(R.kind)}},style:{flex:1}}),l.jsx(St,{type:"button",variant:"ghost","data-testid":"canvas-create-node-favorite-toggle","aria-pressed":L?r.favorites.includes(L):!1,title:"(Un)favorite selected item.",disabled:!L,onClick:It,children:L&&r.favorites.includes(L)?"★":"☆"})]}),l.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[l.jsx("span",{style:N,children:"Matches:"}),l.jsx("span",{style:{flex:1}}),l.jsx(St,{type:"button",variant:"ghost","data-testid":"canvas-create-node-filters","aria-haspopup":"menu","aria-expanded":w,onClick:()=>v(!w),children:"Filters"})]}),w?l.jsx("div",{role:"menu","data-testid":"canvas-create-node-filter-menu",style:{display:"flex",gap:12},children:[["builtIn","Show Built-in"],["custom","Show Custom"]].map(([x,$])=>l.jsxs("label",{role:"menuitemcheckbox","aria-checked":s[x],style:{display:"flex",gap:4},children:[l.jsx("input",{type:"checkbox","data-testid":`canvas-create-node-filter-${x}`,checked:s[x],onChange:()=>y({...s,[x]:!s[x]})}),$]},x))}):null,l.jsx("div",{role:"listbox","data-testid":"canvas-create-node-matches",style:{flex:1,overflow:"auto"},children:V.map(x=>l.jsx(xe,{testId:"canvas-create-node-match",indent:n.trim()===""?Ko(x,A):0,selected:x.kind===L,onPick:()=>U(x.kind),onOpen:()=>ut(x.kind),children:x.label},x.kind))}),l.jsx("span",{style:N,children:"Description:"}),b?l.jsx("span",{"data-testid":"canvas-create-node-failure",style:N,children:b}):null,l.jsx("div",{"data-testid":"canvas-create-node-description",style:{minHeight:36},children:Z?l.jsxs(l.Fragment,{children:[l.jsxs("div",{children:[Z.label,Z.extends?l.jsx("span",{style:N,children:` < ${A.get(Z.extends)?.label??Z.extends}`}):null]}),Z.description?l.jsx("div",{style:N,children:Z.description}):null]}):null})]})]})})}function _o({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState(null),{components:s,failure:y}=ln(!0),[w,v]=u.useState(null),b=w??y,j=k=>`${k.path}#${k.name}`,P=(s??[]).filter(k=>`${k.name} ${k.path}`.toLowerCase().includes(n.trim().toLowerCase())),I=P.find(k=>j(k)===r)??P[0]??null,O=k=>{if(!k)return;const A=cn(e,k);if(A){v(A);return}o()};return l.jsxs(an,{title:"Instantiate Scene",testId:"canvas-instantiate-dialog",onClose:o,footer:l.jsxs(l.Fragment,{children:[l.jsx(St,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),l.jsx(St,{type:"button","data-testid":"canvas-instantiate-open",disabled:!I,onClick:()=>O(I),children:"Instantiate"})]}),children:[l.jsx("span",{style:N,children:"Search:"}),l.jsx(Ze,{"data-testid":"canvas-instantiate-search",value:n,autoFocus:!0,onChange:k=>d(k.target.value),onKeyDown:k=>{k.key==="Enter"&&O(I)}}),l.jsxs("div",{role:"listbox","data-testid":"canvas-instantiate-matches",style:{minHeight:160,overflow:"auto"},children:[s===null?l.jsx("span",{style:N,children:"Reading the project's components…"}):null,s!==null&&P.length===0?l.jsx("span",{style:N,children:"No canvas component matches."}):null,P.map(k=>l.jsxs(xe,{testId:"canvas-instantiate-match",selected:I!==null&&j(k)===j(I),onPick:()=>h(j(k)),onOpen:()=>O(k),children:[k.name," ",l.jsx("span",{style:N,children:k.path})]},j(k)))]}),b?l.jsx("span",{"data-testid":"canvas-instantiate-failure",style:N,children:b}):null]})}function Ge(e,o){for(const n of o){const d=K(e,n.id);if(!d)continue;const r={};n.x!==void 0&&(r.x=n.x),n.y!==void 0&&(r.y=n.y),Object.keys(r).length!==0&&(d.begin(n.id),d.apply(n.id,r),d.end(n.id))}}const Wo=[{op:"left",testId:"align-left",label:"Align left",icon:ze},{op:"hcenter",testId:"align-hcenter",label:"Align horizontal center",icon:De},{op:"right",testId:"align-right",label:"Align right",icon:Ie},{op:"top",testId:"align-top",label:"Align top",icon:ze,rotate:!0},{op:"vcenter",testId:"align-vcenter",label:"Align vertical center",icon:De,rotate:!0},{op:"bottom",testId:"align-bottom",label:"Align bottom",icon:Ie,rotate:!0}],Vo=[{axis:"horizontal",testId:"distribute-horizontal",label:"Distribute horizontally",icon:An},{axis:"vertical",testId:"distribute-vertical",label:"Distribute vertically",icon:Kn}];function Uo(e){const d=e.y-30-8;return{left:e.x,top:d<0?e.y+e.height+8:d}}function Zo({adapter:e,entries:o}){if(o.length<2)return null;const n=Yn(o.map(s=>s.rect));if(!n)return null;const{left:d,top:r}=Uo(n),h=o.length>=3;return l.jsxs(Bn,{label:"Align and distribute","data-testid":"align-toolbar",style:{position:"absolute",left:d,top:r,zIndex:Et.overlayLow,gap:2,padding:3},children:[Wo.map(({op:s,testId:y,label:w,icon:v,rotate:b})=>l.jsx(Oe,{"data-testid":y,title:w,"aria-label":w,variant:"ghost",size:"compact",onClick:()=>Ge(e,Hn(o,s)),children:l.jsx(Le,{icon:v,"aria-hidden":"true",style:b?{transform:"rotate(90deg)"}:void 0})},s)),h&&l.jsxs(l.Fragment,{children:[l.jsx(Gn,{}),Vo.map(({axis:s,testId:y,label:w,icon:v})=>l.jsx(Oe,{"data-testid":y,title:w,"aria-label":w,variant:"ghost",size:"compact",onClick:()=>Ge(e,Nn(o,s)),children:l.jsx(Le,{icon:v,"aria-hidden":"true"})},s))]})]})}function Qo({rect:e,initialText:o,onCommit:n,onCancel:d}){const[r,h]=u.useState(o),s=u.useRef(null),y=u.useRef(!1);u.useEffect(()=>{const b=s.current;b&&(b.focus(),b.select())},[]);const w=()=>{y.current||(y.current=!0,n(r))},v=()=>{y.current||(y.current=!0,d())};return l.jsx(_n,{ref:s,"data-testid":"world-text-editor",value:r,onChange:b=>h(b.target.value),onBlur:w,onKeyDown:b=>{b.key==="Escape"?(b.stopPropagation(),v()):b.key==="Enter"&&!b.shiftKey&&(b.preventDefault(),w())},"data-variant":"inline-editor",style:{position:"absolute",left:e.x,top:e.y,width:Math.max(e.width,40),height:Math.max(e.height,20),boxSizing:"border-box",zIndex:Et.overlayLow,pointerEvents:"auto",resize:"none"}})}const B=st.accent.default,qo=Et.overlayLow,Wt=5;function Jo(e,o,n){return e?!1:ye()?.activate(o,n)??!1}function ti(e,o,n,d,r,h){const s=e?null:ye()?.hover(o,n)??null;r(s),h(s?null:d(o,n))}function ei(e,o){const n=e.hierarchy.node(o);return n?`${n.label}·${n.kind}`:o}function ni(e){return e instanceof nn?e.childAdapters().some(o=>!!o.adapter.rects):!!e.rects}function oi(e){const o=e instanceof nn?e.childAdapters():[{worldId:"",adapter:e}],n=[];for(const{worldId:d,adapter:r}of o)if(r.rects&&!(d&&jo(d)))for(const h of Ro(r)){if(r.inspector?.get(h,"locked")===!0)continue;const s=r.rects.rect(h);s&&n.push({id:h,rect:s})}return n}function ii(e,o){return e.x<o.x+o.width&&e.x+e.width>o.x&&e.y<o.y+o.height&&e.y+e.height>o.y}function ri(e,o,n){if(!n)return[o];const d=new Set(e);return d.has(o)?d.delete(o):d.add(o),[...d]}function si(e,o,n,d){return o&&!!n&&(n.width>Wt||n.height>Wt)&&n?oi(e).filter(s=>ii(n,s.rect)).map(s=>s.id):d?null:[]}function ai(e,o,n,d){return e?"grabbing":o?"grab":n||d?"crosshair":"default"}function rt(e){try{e.currentTarget.setPointerCapture?.(e.pointerId)}catch{}}function ae(e){e.currentTarget.hasPointerCapture?.(e.pointerId)&&e.currentTarget.releasePointerCapture?.(e.pointerId)}function li(e,o){if(o!==null)return!1;const n=e.currentTarget.parentElement?.parentElement??null;return Lo(n,e.clientX,e.clientY)}function Kt(e,o,n){return!e||o===n||o==="combined"||o==="select"}function Ae(e,o){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,borderStyle:"solid",borderColor:B,borderWidth:o?2:1,background:o?`color-mix(in srgb, ${B} 6%, transparent)`:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function ci(e,o,n){if(!e)return{left:o.x+o.width/2-et/2,top:o.y-n-et/2};const d=(e.tl.x+e.tr.x)/2,r=(e.tl.y+e.tr.y)/2,h=e.tl.x-e.bl.x,s=e.tl.y-e.bl.y,y=Math.hypot(h,s)||1;return{left:d+h/y*n-et/2,top:r+s/y*n-et/2}}function di(e,o){const n=Math.hypot(e.tr.x-e.tl.x,e.tr.y-e.tl.y),d=Math.hypot(e.bl.x-e.tl.x,e.bl.y-e.tl.y),r=(e.tl.x+e.br.x)/2,h=(e.tl.y+e.br.y)/2;return{position:"absolute",left:r-n/2,top:h-d/2,width:n,height:d,transform:`rotate(${zt(e)}rad)`,transformOrigin:"center",borderStyle:"solid",borderColor:B,borderWidth:o,background:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function ui(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-18),padding:"2px 6px",fontSize:11,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:"#fff",background:B,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const Nt=10,le=48;function ce(e,o){return{position:"absolute",left:e.x-Nt/2,top:e.y-Nt/2,width:Nt,height:Nt,background:"#fff",border:`1px solid ${B}`,boxSizing:"border-box",cursor:o,pointerEvents:"auto"}}const et=12,dn=24;function pi(e){return{position:"absolute",left:e.x+e.width/2-et/2,top:e.y-dn-et/2,width:et,height:et,borderRadius:"50%",background:"#fff",border:`1px solid ${B}`,boxSizing:"border-box",cursor:"grab",padding:0,pointerEvents:"auto"}}const Ke=12;function fi(e){return{position:"absolute",left:e.position[0],top:e.position[1],width:Ke,height:Ke,borderRadius:"50%",background:e.writable?e.color:"transparent",border:`2px solid ${e.color}`,boxSizing:"border-box",cursor:e.writable?"grab":"not-allowed",padding:0,pointerEvents:e.writable?"auto":"none",touchAction:"none"}}function xi(e){return{position:"absolute",left:e.x-8,top:e.y-8,width:16,height:16,display:"grid",placeItems:"center",borderRadius:e.kind==="anchor"?"50%":2,background:"#fff",border:`1px solid ${B}`,boxSizing:"border-box",color:B,cursor:"crosshair",fontSize:9,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:700,lineHeight:1,padding:0,pointerEvents:"auto",touchAction:"none"}}function hi(e){return{position:"absolute",left:e.x,top:e.y+e.height+4,padding:"2px 6px",fontSize:11,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:"#fff",background:B,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const yi="rgba(46, 204, 113, 0.25)",gi="rgba(230, 126, 34, 0.25)";function vi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:e.kind==="padding"?yi:gi,boxSizing:"border-box",cursor:e.cursor,pointerEvents:"auto"}}function mi(e){return{position:"absolute",left:e.labelX,top:e.labelY,transform:"translate(-50%, -50%)",fontSize:10,fontFamily:"monospace",color:e.kind==="padding"?"#1b7a3d":"#a35a12",background:"rgba(255,255,255,0.85)",padding:"0 2px",borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}function bi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`2px dashed ${B}`,background:`color-mix(in srgb, ${B} 15%, transparent)`,boxSizing:"border-box",pointerEvents:"none",opacity:.7}}function wi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:"#ff5fa2",borderRadius:2,pointerEvents:"none"}}const ge="#ff2d92",_t=6;function Si(e){const o=e.orientation==="horizontal";return{position:"absolute",left:Math.min(e.x1,e.x2),top:Math.min(e.y1,e.y2),width:o?Math.abs(e.x2-e.x1):1,height:o?1:Math.abs(e.y2-e.y1),background:ge,pointerEvents:"none"}}function Ne(e,o,n){return{position:"absolute",left:n?e:e-_t/2,top:n?o-_t/2:o,width:n?1:_t,height:n?_t:1,background:ge,pointerEvents:"none"}}function Ei(e){return{position:"absolute",left:e.labelX,top:e.labelY,transform:"translate(-50%, -50%)",padding:"1px 4px",fontSize:10,fontFamily:"monospace",fontWeight:600,color:"#fff",background:ge,borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}const _e="#f24822";function ki(e){const o=e.orientation==="vertical";return{position:"absolute",left:o?e.at:e.start,top:o?e.start:e.at,width:o?1:e.end-e.start,height:o?e.end-e.start:1,borderLeft:o?`1px dashed ${_e}`:void 0,borderTop:o?void 0:`1px dashed ${_e}`,pointerEvents:"none"}}function Ci(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-36),display:"flex",gap:4,pointerEvents:"none"}}const We={padding:"2px 6px",fontSize:10,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:st.content.onAccent,background:`color-mix(in srgb, ${B} 85%, transparent)`,borderRadius:3,whiteSpace:"nowrap"};function ji(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`1px dashed color-mix(in srgb, ${B} 45%, transparent)`,boxSizing:"border-box",pointerEvents:"none"}}function Ve(e,o,n,d=0){return o&&n>0?Math.round((e-d)/n)*n+d:e}function Ri(e,o,n,d,r,h,s=!1){const y=e.nativeHandleSpan??1,w=s?"both":e.nativeScaleAxis??"both",v=s&&e.nativeScaleAxis==="x"?o:s&&e.nativeScaleAxis==="y"?n:null;let b,j;if(w==="x")b=1+o/y,j=1;else if(w==="y")b=1,j=1+n/y;else if(v!==null)b=1+v/y,j=b;else if(e.center){const P=(e.startAngleDeg??0)*Math.PI/180,I=e.startLocal.x-e.center.x,O=e.startLocal.y-e.center.y,k=I*Math.cos(P)+O*Math.sin(P),A=-I*Math.sin(P)+O*Math.cos(P),V=(I+o)*Math.cos(P)+(O+n)*Math.sin(P),nt=-(I+o)*Math.sin(P)+(O+n)*Math.cos(P);if(b=Math.abs(k)>1e-6?V/k:1,j=Math.abs(A)>1e-6?nt/A:1,s){const U=(b+j)/2;b=U,j=U}}else{const P=1+(o+n)/(Math.SQRT2*y);b=P,j=P}return{...w!=="y"?{scaleXFactor:b}:{},...w!=="x"?{scaleYFactor:j}:{},...d&&!r?{scaleStep:h}:{}}}function Pi(e,o,n,d,r,h,s={x:0,y:0}){const y=e.nativeOrigin;if(!y)return{};const w=d&&!0;return{...e.moveAxis!=="y"?{originX:Ve(y.x+o,w,h,s.x)}:{},...e.moveAxis!=="x"?{originY:Ve(y.y+n,w,h,s.y)}:{}}}function Ue(e,o,n){return e==="x"?{x:o.x+n,y:o.y}:e==="y"?{x:o.x,y:o.y+n}:{x:o.x+n/Math.SQRT2,y:o.y+n/Math.SQRT2}}function zi(e,o,n){return e==="x"?{dx:o,dy:0}:e==="y"?{dx:0,dy:n}:{dx:o,dy:n}}function Di(e,o){e.ownerBoxEdit.begin(e.id);for(const n of e.peers)n.ownerBoxEdit.begin(n.id);return{kind:"move",id:e.id,ownerBoxEdit:e.ownerBoxEdit,startLocal:o,origRect:e.origRect,context:e.context,...e.nativeOrigin?{nativeOrigin:e.nativeOrigin}:{},movePeers:e.peers}}function Ii(e,o,n){let d=o;for(let r=0;d!==null&&r<256;r++){if(n.has(d))return d;d=e.hierarchy.node(d)?.parentId??null}return null}function Oi(e,o,n){const d=K(e,o);if(!d)return null;const r=e.inspector?.get(o,"style.position"),h=ue(e,o)==="2d";if(r!=="absolute"&&r!=="fixed"&&!h)return null;const s=T(e,o);if(!s)return null;const y=h?d.gizmoOrigin?.(o)??void 0:void 0,w=[];for(const v of n){if(v===o)continue;const b=K(e,v),j=T(e,v);if(!b||!j)continue;const P=e.inspector?.get(v,"style.position"),I=ue(e,v)==="2d";if(P!=="absolute"&&P!=="fixed"&&!I)continue;const O=I?b.gizmoOrigin?.(v)??void 0:void 0;w.push({id:v,ownerBoxEdit:b,origRect:j,...O?{nativeOrigin:O}:{}})}return{id:o,ownerBoxEdit:d,origRect:s,context:Dt(e,o),...y?{nativeOrigin:y}:{},peers:w}}function Li(e,o){if(!tn(e,o)?.reorder)return null;const d=bo(e,o);if(!d||d.length<3)return null;const r=T(e,o);if(!r)return null;const h=[];for(const s of d){if(s===o)continue;const y=T(e,s);y&&h.push({id:s,rect:y})}return h.length===0?null:{id:o,adapter:e,origRect:r,siblingRects:h}}function Mi(){return wo()}function Ti(e,o){if(o.size!==1)return null;const n=[...o][0],d=K(e,n);if(!d)return null;const r=T(e,n);if(!r)return null;const h=So(r,Eo(e,n));return{id:n,rect:r,ownerBoxEdit:d,spacingBands:h}}function Fi(e,o){if(o.size<2)return null;const n=[];for(const d of o){const r=T(e,d);if(!r||!K(e,d))return null;n.push({id:d,rect:r})}return n}function $i(e,o,n){const d=o.size===1?[...o][0]:null,r=d?T(e,d):null,h=r&&n?ko(r,n):[],s=d?Co(e,d):null,y=!!(s&&(s.position||s.parentLayout)),w=d?Dt(e,d)?.parent??null:null;return{selectedSingleRect:r,measureLines:h,positionBadge:s,showPositionBadge:y,parentRect:w}}function Xi({state:e,adapter:o,onClose:n}){const d=u.useRef(null);return u.useEffect(()=>{const r=s=>{d.current?.contains(s.target)||n()},h=s=>{s.key==="Escape"&&n()};return document.addEventListener("pointerdown",r),document.addEventListener("keydown",h),()=>{document.removeEventListener("pointerdown",r),document.removeEventListener("keydown",h)}},[n]),l.jsx(he,{children:l.jsx(Qe,{ref:d,"aria-label":"Pick object under pointer","data-testid":"viewport-pick-menu",style:{position:"fixed",left:e.x,top:e.y,minWidth:190,maxWidth:320,zIndex:Et.dropdown},children:e.ids.map(r=>{const h=o.hierarchy.node(r);return l.jsxs(de,{"data-testid":"viewport-pick-menu-item",onSelect:()=>{en(o,[r]),n()},style:{justifyContent:"space-between",gap:20},children:[l.jsx("span",{children:h?.label??r}),l.jsx("span",{style:{color:st.content.muted,fontSize:11},children:h?.kind??""})]},r)})})})}function nr({adapter:e,view:o,transformModeAware:n=!1,presentationId:d}={}){const r=Wn(),h=u.useSyncExternalStore(r.subscribe,r.getSnapshot),s=e??Vn(r),y=u.useCallback((t,i)=>e?e.pickable?.pick(t,i)??null:Do(r,t,i),[e,r]),w=u.useRef(null),v=u.useRef(null),b=u.useRef(null),[j,P]=u.useState(null),[I,O]=u.useState(null),[k,A]=u.useState(null),[V,nt]=u.useState(null),U=u.useRef(null),[L,Z]=u.useState(null),ut=u.useRef(()=>{}),It=u.useCallback((t,i,c=!1)=>{const a=Io(r,t,i,{...e?{adapter:e}:{},...c?{includeLocked:c}:{}});if(a.length===0){nt(null);return}nt({x:t,y:i,ids:a})},[e,r]);u.useEffect(()=>{const t=c=>{const a=U.current;!a||a.pointerId!==c.pointerId||a.moved||Math.hypot(c.clientX-a.startClientX,c.clientY-a.startClientY)>Wt&&(a.moved=!0)},i=c=>{const a=U.current;!a||a.pointerId!==c.pointerId||(U.current=null,c.type==="pointerup"&&!a.moved&&(n&&!c.altKey?ut.current(c.clientX,c.clientY):It(c.clientX,c.clientY,n)))};return window.addEventListener("pointermove",t),window.addEventListener("pointerup",i),window.addEventListener("pointercancel",i),()=>{window.removeEventListener("pointermove",t),window.removeEventListener("pointerup",i),window.removeEventListener("pointercancel",i)}},[It,n]);const Ot=u.useCallback(t=>{t.preventDefault(),t.stopPropagation()},[]),x=o??Un;u.useSyncExternalStore(Yo,Bo);const $=n?ht(x):null,R=[...r.selectedEntityIds].sort().join("\0"),Lt=u.useRef(R);u.useEffect(()=>{Lt.current!==R&&(Lt.current=R,ht(x)&&Xo(x,null))},[R,x]);const m=u.useSyncExternalStore(x.subscribe,x.get,x.get);u.useSyncExternalStore(u.useCallback(t=>$o(x,t),[x]),u.useCallback(()=>Fo(x),[x]));const Ut=n?To(x):[],H=n?1/m.zoom:1,gt=n&&r.transformMode!=="combined"&&r.transformMode!=="select";u.useSyncExternalStore(Zn,Qn);const ve=d?qn(d):null,un=ve?.position??!0,Mt=!gt||(ve?.transformation??!0),Zt=u.useRef(!1),Qt=u.useRef(null),[pn,me]=u.useState(!1),at=u.useRef(null),[fn,Tt]=u.useState(!1),F=u.useRef(null);u.useEffect(()=>()=>{const t=F.current;if(F.current=null,!!t){t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id)}},[]);const[,xn]=u.useState(0),[hn,kt]=u.useState(null),[yn,pt]=u.useState([]),qt=u.useRef(null),[gn,vn]=u.useState(null),vt=u.useCallback(t=>{qt.current=t,vn(t)},[]),be=u.useRef(null),[mn,bn]=u.useState(null),[Ft,Ct]=u.useState(null),ft=u.useCallback(t=>{be.current=t,bn(t)},[]),Jt=u.useRef(null),we=u.useRef(null);u.useEffect(()=>{const t=Jt.current;if(!t)return;Jt.current=null;const i=re(s,t.id);i&&i.get(t.id)===null&&Ct({id:t.id,rect:t.rect})},[h]);const Se=u.useRef("");u.useEffect(()=>{const t=[...r.selectedEntityIds].sort().join(",");t!==Se.current&&(Se.current=t,Ft&&Ct(null))}),u.useEffect(()=>{if(!Ft)return;const t=window.setTimeout(()=>Ct(null),4e3);return()=>window.clearTimeout(t)},[Ft]);const lt=u.useSyncExternalStore(Po,zo),[wn,Ee]=u.useState(null),Q=u.useCallback(t=>{b.current=t,P(t)},[]),S=u.useCallback((t,i)=>{const c=w.current?.getBoundingClientRect();return{x:(t-(c?.left??0)-m.x)/m.zoom,y:(i-(c?.top??0)-m.y)/m.zoom}},[m.x,m.y,m.zoom]);ut.current=(t,i)=>{const c=r.selectedEntityIds,a=s.hierarchy.roots(),f=c.size===1?[...c][0]:a.length===1?a[0].id:null,p=f?tn(s,f):s.structure??null,D=p?.creatableKinds?.(f)??[];if(!p){Z(null);return}const g=r.snap2D,C=(W,dt)=>r.snapEnabled&&g.step>0?Math.round((W-dt)/g.step)*g.step+dt:W,E=S(t,i),M={x:C(E.x,g.offsetX),y:C(E.y,g.offsetY)},z=g.pixel?{x:Math.round(M.x),y:Math.round(M.y)}:M;Z({x:t,y:i,at:z,parentId:f,structure:p,kinds:D,adapter:s})};const Sn=u.useCallback(t=>{!o||!n||!s.assetDrop||!t.dataTransfer.types.includes("application/x-editor-asset")||(t.preventDefault(),t.dataTransfer.dropEffect="copy")},[s.assetDrop,o,n]),En=u.useCallback(t=>{if(!o||!n||!s.assetDrop)return;const i=t.dataTransfer.getData("application/x-editor-asset");if(!i)return;let c;try{c=JSON.parse(i)}catch{return}const a=S(t.clientX,t.clientY),f={position:[a.x,a.y,0],item:c.component??{kind:"file",name:c.name??c.path.split("/").pop()??c.path}};s.assetDrop.accepts("",c.path,f)&&(t.preventDefault(),t.stopPropagation(),Je(s,"",c.path,f))},[s.assetDrop,o,S,n]),q=u.useCallback(()=>xn(t=>t+1),[]),$t=u.useCallback(()=>{const t=F.current;if(!t)return!1;F.current=null,t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id);return kt(null),pt([]),q(),!0},[q]),kn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=s.inspector?.get(a,"style.position"),g=ue(s,a)==="2d",C=g?xt(s,a):null,E=C&&se(C)?f.gizmoOrigin?.(a)??null:null;rt(i),f.begin(a),F.current={kind:"resize",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,pos:t,...C&&E?{frame:C,frameOrigin:E}:{},isPositioned:D==="absolute"||D==="fixed"||g,context:Dt(s,a)}},[s,r,S]),ke=u.useCallback(()=>{if(!n||r.selectedEntityIds.size<2)return null;const t=[...r.selectedEntityIds].flatMap(c=>{const a=K(s,c),f=T(s,c),p=a?.gizmoOrigin?.(c);return a&&f&&p?[{id:c,ownerBoxEdit:a,origRect:f,nativeOrigin:p}]:[]});if(t.length<2)return null;const i=ht(x);return{primary:t[0],peers:t.slice(1),center:i??t[0].nativeOrigin,pivot:i}},[s,r,n,x]),Xt=u.useCallback((t,i,c="both")=>{const a=ke();if(!a)return!1;const f=xt(s,a.primary.id);rt(i),a.primary.ownerBoxEdit.begin(a.primary.id);for(const p of a.peers)p.ownerBoxEdit.begin(p.id);return F.current={kind:t,id:a.primary.id,ownerBoxEdit:a.primary.ownerBoxEdit,startLocal:S(i.clientX,i.clientY),origRect:a.primary.origRect,center:a.center,nativeOrigin:a.primary.nativeOrigin,movePeers:a.peers,...a.pivot?{groupCenter:a.pivot}:{},...f?{startAngleDeg:zt(f)*180/Math.PI}:{},...t==="native-scale"?{nativeScaleAxis:c,nativeHandleSpan:le/m.zoom}:{}},!0},[s,ke,S,m.zoom]),Yt=u.useCallback(t=>{if(t.stopPropagation(),t.button!==0)return;const i=r.selectedEntityIds;if(i.size>1){Xt("rotate",t);return}if(i.size!==1)return;const c=[...i][0],a=K(s,c),f=T(s,c);if(!a||!f)return;const p=n?a.gizmoOrigin?.(c):null,D=p?xt(s,c):null;rt(t),a.begin(c),F.current={...D?{startAngleDeg:zt(D)*180/Math.PI}:{},kind:"rotate",id:c,ownerBoxEdit:a,startLocal:S(t.clientX,t.clientY),origRect:f,center:(p?ht(x):null)??p??{x:f.x+f.width/2,y:f.y+f.height/2},...p?{nativeOrigin:p}:{}}},[s,r,S,n,Xt,x]),te=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=f.gizmoOrigin?.(a)??{x:p.x+p.width/2,y:p.y+p.height/2};rt(i),f.begin(a),F.current={kind:"move",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,context:Dt(s,a),moveAxis:t,nativeOrigin:D}},[s,r,S]),jt=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size>1){Xt("native-scale",i,t);return}if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=f.gizmoOrigin?.(a)??{x:p.x+p.width/2,y:p.y+p.height/2},g=xt(s,a);rt(i),f.begin(a),F.current={...g?{startAngleDeg:zt(g)*180/Math.PI}:{},kind:"native-scale",center:ht(x)??D,id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,nativeOrigin:D,nativeScaleAxis:t,nativeHandleSpan:le/m.zoom}},[s,m.zoom,r,S,Xt,x]),Cn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);!f||!p||f.referencePoint?.(a)?.id!==t.id||(rt(i),f.begin(a),F.current={kind:"reference",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,context:Dt(s,a),pointerId:i.pointerId,referencePoint:t})},[s,r,S]),Rt=u.useRef(null),mt=u.useCallback((t,i,c)=>{const a=T(s,t);return Jn(i,xt(s,t)??(a?to(a):null),{invert:c,smart:r.smartSnap,gridOn:r.snapEnabled,grid:r.snap2D,threshold:Me/Math.max(x.get().zoom,.01)})},[s,r,x]),jn=u.useCallback((t,i,c,a)=>{if(a.stopPropagation(),a.button!==0||!c.writable)return;rt(a);const f=i.layers(t).some(p=>p.category==="origin"&&p.handles.some(D=>D.id===c.id));Rt.current={id:t,handleId:c.id,provider:i,pivot:f}},[]),Rn=u.useCallback(t=>{const i=Rt.current;if(!i)return;const c=S(t.clientX,t.clientY),a=i.pivot?mt(i.id,c,t.metaKey||t.ctrlKey):c;i.provider.preview(i.id,i.handleId,[a.x,a.y,0]),q()},[q,S,mt]),ee=u.useCallback(t=>{const i=Rt.current;if(Rt.current=null,!i)return;ae(t);const c=S(t.clientX,t.clientY),a=i.pivot?mt(i.id,c,t.metaKey||t.ctrlKey):c;i.provider.commit(i.id,i.handleId,[a.x,a.y,0]),q()},[q,S,mt]),Pn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);!f||!p||(rt(i),f.begin(a),F.current={kind:"spacing",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,side:t.side,origValue:t.value})},[s,r,S]),Bt=u.useCallback((t,i)=>{if(t.pointerId!==void 0&&i.pointerId!==t.pointerId)return;const c=S(i.clientX,i.clientY),a=c.x-t.startLocal.x,f=c.y-t.startLocal.y;let p;if(t.kind==="resize"&&t.frame&&t.frameOrigin)p=eo(t.frame,t.pos,a,f,t.frameOrigin,i.shiftKey),pt([]);else if(t.kind==="resize")p=no(t.pos,a,f,t.origRect,!!t.isPositioned,i.altKey,t.context),i.shiftKey&&t.isPositioned&&(p=oo(p,t.origRect,t.pos)),pt(io(t.pos,a,f,t.origRect,i.altKey,t.context));else if(t.kind==="native-scale")p=Ri(t,a,f,r.scaleSnap,i.altKey,r.snap2D.scaleStep,i.shiftKey),pt([]);else if(t.kind==="move"){const{dx:g,dy:C}=zi(t.moveAxis,a,f);if(t.nativeOrigin){p=Pi(t,g,C,r.snapEnabled,!1,r.snap2D.step,r.snap2D.relative?t.nativeOrigin:{x:r.snap2D.offsetX,y:r.snap2D.offsetY});const E=ro({x:p.originX??t.nativeOrigin.x,y:p.originY??t.nativeOrigin.y},t.nativeOrigin,t.origRect,t.context,t.moveAxis,r.smartSnap.enabled===(i.metaKey||i.ctrlKey),Me/Math.max(m.zoom,.01),{x:Ut.filter(z=>z.axis==="x").map(z=>z.value),y:Ut.filter(z=>z.axis==="y").map(z=>z.value)},r.smartSnap),M=z=>r.snap2D.pixel?Math.round(z):z;p.originX!==void 0&&(p.originX=M(E.position.x)),p.originY!==void 0&&(p.originY=M(E.position.y)),pt(E.guides)}else p=so(g,C,t.origRect,i.altKey,t.context);kt(Te(t.origRect,g,C)),t.nativeOrigin||pt(ao(g,C,t.origRect,i.altKey,t.context))}else if(t.kind==="reference"){const g=lo(c,t.origRect,i.altKey,t.context,{bounded:t.referencePoint?.bounded,snapPoints:t.referencePoint?.snapPoints});p={referenceX:g.position.x,referenceY:g.position.y},pt(g.guides)}else if(t.kind==="rotate"){const g=t.nativeOrigin&&t.startAngleDeg!==void 0&&!r.snap2D.relative,C=(r.smartSnap.enabled||r.rotationSnap)!==(i.metaKey||i.ctrlKey);if(p=co(t.center,t.startLocal,c,t.nativeOrigin?g||!C:i.altKey,t.nativeOrigin?r.snap2D.rotationStep:15),g&&C&&p.rotate!==void 0){const M=r.snap2D.rotationStep,z=r.snap2D.rotationOffset,W=t.startAngleDeg,dt=W+p.rotate;p={rotate:Math.round((dt-z)/M)*M+z-W,rotationStep:M,rotationOffset:z}}const E=t.groupCenter??(t.nativeOrigin?ht(x):null);if(E&&t.nativeOrigin&&p.rotate!==void 0){const M=p.rotate*Math.PI/180,z=t.nativeOrigin.x-E.x,W=t.nativeOrigin.y-E.y;p={...p,originX:E.x+z*Math.cos(M)-W*Math.sin(M),originY:E.y+z*Math.sin(M)+W*Math.cos(M)}}}else p=uo(t.side,a,f,t.origValue??0);if(t.kind==="native-scale"&&t.groupCenter&&t.nativeOrigin){const g=t.groupCenter,C=p.scaleXFactor??1,E=p.scaleYFactor??1;p={...p,originX:g.x+(t.nativeOrigin.x-g.x)*C,originY:g.y+(t.nativeOrigin.y-g.y)*E}}const D=t.kind==="native-scale"&&!t.groupCenter&&t.nativeOrigin?ht(x):null;if(D&&t.nativeOrigin&&(p={...p,originX:D.x+(t.nativeOrigin.x-D.x)*(p.scaleXFactor??1),originY:D.y+(t.nativeOrigin.y-D.y)*(p.scaleYFactor??1)}),t.ownerBoxEdit.apply(t.id,p),t.movePeers&&(t.kind==="rotate"||t.kind==="native-scale")){const g=t.groupCenter,C=(p.rotate??0)*Math.PI/180,E=p.scaleXFactor??1,M=p.scaleYFactor??1;for(const z of t.movePeers){if(!z.nativeOrigin)continue;const W=g?z.nativeOrigin.x-g.x:0,dt=g?z.nativeOrigin.y-g.y:0;z.ownerBoxEdit.apply(z.id,t.kind==="rotate"?{rotate:p.rotate??0,...p.rotationStep!==void 0?{rotationStep:p.rotationStep,rotationOffset:p.rotationOffset??0}:{},...g?{originX:g.x+W*Math.cos(C)-dt*Math.sin(C),originY:g.y+W*Math.sin(C)+dt*Math.cos(C)}:{}}:{...p.scaleXFactor!==void 0?{scaleXFactor:E}:{},...p.scaleYFactor!==void 0?{scaleYFactor:M}:{},...p.scaleStep!==void 0?{scaleStep:p.scaleStep}:{},...g?{originX:g.x+W*E,originY:g.y+dt*M}:{}})}}if(t.kind==="move"&&t.movePeers){const g=t.nativeOrigin?(p.originX??t.nativeOrigin.x)-t.nativeOrigin.x:(p.x??t.origRect.x)-t.origRect.x,C=t.nativeOrigin?(p.originY??t.nativeOrigin.y)-t.nativeOrigin.y:(p.y??t.origRect.y)-t.origRect.y;for(const E of t.movePeers)E.ownerBoxEdit.apply(E.id,E.nativeOrigin?{originX:E.nativeOrigin.x+g,originY:E.nativeOrigin.y+C}:{x:E.origRect.x+g,y:E.origRect.y+C})}q()},[S,q,r,Ut,m.zoom]),Ht=u.useCallback((t,i)=>{const c=y(t,i);if(!c)return null;const a=po(s,c)?.backgroundChainAt(t,i)??null;return a?Mo(a):null},[s,y]);u.useEffect(()=>{if(!lt)return;const t=i=>{i.key==="Escape"&&$e(null)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[lt]),u.useEffect(()=>{if(!n)return;const t=i=>{if(i.key.toLowerCase()!=="v"||i.repeat||i.metaKey||i.ctrlKey||i.altKey)return;const c=i.target;if(c instanceof HTMLInputElement||c instanceof HTMLTextAreaElement||c instanceof HTMLSelectElement||c instanceof HTMLElement&&c.isContentEditable)return;const a=Qt.current,f=r.selectedEntityIds;if(!a||f.size!==1||F.current||Rt.current)return;const p=[...f][0],D=Fe(s,p),g=D?.layers(p).find(E=>E.category==="origin")?.handles.find(E=>E.writable);if(!D||!g)return;i.preventDefault();const C=mt(p,S(a.x,a.y),!1);D.commit(p,g.id,[C.x,C.y,0]),q()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[s,r,n,S,q,mt]),u.useEffect(()=>{const t=a=>a instanceof HTMLInputElement||a instanceof HTMLTextAreaElement||a instanceof HTMLSelectElement||a instanceof HTMLElement&&a.isContentEditable,i=a=>{a.code!=="Space"||a.repeat||t(a.target)||a.target instanceof HTMLButtonElement||(a.preventDefault(),Zt.current=!0,me(!0))},c=a=>{a.code==="Space"&&(Zt.current=!1,me(!1),at.current&&(at.current=null,Tt(!1)))};return window.addEventListener("keydown",i),window.addEventListener("keyup",c),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",c)}},[]);const Ce=u.useCallback(t=>{if(t.stopPropagation(),rt(t),Zt.current){at.current={startClientX:t.clientX,startClientY:t.clientY,startPan:x.get()},Tt(!0);return}if(n&&r.selectedEntityIds.size>1&&!(t.metaKey||t.ctrlKey)&&(r.transformMode==="rotate"||r.transformMode==="scale")){r.transformMode==="rotate"?Yt(t):jt("both",t);return}if(n&&r.selectedEntityIds.size>=1&&(t.metaKey||t.ctrlKey)){t.altKey?jt("both",t):Yt(t);return}if(lt){$e(Ht(t.clientX,t.clientY)),Ee(null);return}if(Jo(e,t.clientX,t.clientY)){v.current=null,O(null),Q(null);return}const i=y(t.clientX,t.clientY);if(li(t,i)){v.current=null,O(null),Q(null);return}const a=n&&t.altKey&&r.selectedEntityIds.size===1?[...r.selectedEntityIds][0]:i!==null?Ii(s,i,r.selectedEntityIds):null,f=Kt(n,r.transformMode,"translate")&&a!==null?Oi(s,a,r.selectedEntityIds):null,p=!f&&a!==null?Li(s,a):null;v.current={downClientX:t.clientX,downClientY:t.clientY,downLocal:S(t.clientX,t.clientY),hitAtDown:i,moved:!1,moveCandidate:f,reorderCandidate:p},O(null),Q(null)},[s,r,x,n,S,Q,lt,Ht,y,e,jt,Yt]),zn=u.useCallback(t=>{if(t.button===2){U.current={pointerId:t.pointerId,startClientX:t.clientX,startClientY:t.clientY,moved:!1};return}t.button===0&&Ce(t)},[Ce]),je=u.useCallback((t,i)=>{const c=i.clientX-t.downClientX,a=i.clientY-t.downClientY;if(!t.moved&&Math.hypot(c,a)>Wt&&(t.moved=!0),!!t.moved){if(t.moveCandidate){const f=Di(t.moveCandidate,t.downLocal);F.current=f,Bt(f,i);return}if(t.reorderCandidate){const f=S(i.clientX,i.clientY),p=fo(t.reorderCandidate.siblingRects,f);p&&(vt({id:t.reorderCandidate.id,adapter:t.reorderCandidate.adapter,gap:p}),kt(Te(t.reorderCandidate.origRect,f.x-t.downLocal.x,f.y-t.downLocal.y)));return}if(t.hitAtDown===null){const f=S(i.clientX,i.clientY);Q({x:Math.min(t.downLocal.x,f.x),y:Math.min(t.downLocal.y,f.y),width:Math.abs(f.x-t.downLocal.x),height:Math.abs(f.y-t.downLocal.y)})}}},[S,Q,Bt,vt]),J=u.useCallback(t=>{const i=at.current;if(i){x.setPan(i.startPan.x+(t.clientX-i.startClientX),i.startPan.y+(t.clientY-i.startClientY));return}if(lt){const f=S(t.clientX,t.clientY);Ee({...f,color:Ht(t.clientX,t.clientY)});return}Qt.current={x:t.clientX,y:t.clientY};const c=F.current;if(c){Bt(c,t);return}if((t.buttons&1)===0){ti(e,t.clientX,t.clientY,y,A,O);return}const a=v.current;a&&je(a,t)},[r,x,S,Bt,lt,Ht,je,y,e]),tt=u.useCallback(t=>{if(ae(t),at.current){at.current=null,Tt(!1);return}const i=F.current;if(i?.pointerId!==void 0&&t.pointerId!==i.pointerId||$t())return;const c=qt.current;if(c){vt(null),kt(null),v.current=null,xo(c.adapter,c.id,c.gap.beforeSiblingId);return}const a=v.current;if(v.current=null,!a)return;const f=a.hitAtDown!==null?ri(r.selectedEntityIds,a.hitAtDown,t.shiftKey):si(s,a.moved,b.current,t.shiftKey);f!==null&&en(s,f),Q(null)},[s,r,Q,$t,vt]),_=u.useCallback(t=>{if(ae(t),at.current){at.current=null,Tt(!1);return}const i=F.current;i?.pointerId!==void 0&&t.pointerId!==i.pointerId||$t()||(qt.current&&(vt(null),kt(null)),v.current=null,Q(null))},[$t,Q,vt]),Dn=u.useCallback(()=>{Qt.current=null,e||ye()?.clearHover(),A(null),O(null)},[e]),In=u.useCallback(t=>{const i=w.current?.parentElement??null;if(Oo(i,t.clientX,t.clientY))return;const c=y(t.clientX,t.clientY);if(!c)return;const a=re(s,c);if(!a)return;const f=T(s,c);if(!f)return;const p=a.get(c);if(p===null){console.warn(`[RootSelectionOverlay] text edit refused for "${c}": dynamic body or has child elements — not inline-editable.`),ft(null),Ct({id:c,rect:f});return}Ct(null),ft({id:c,rect:f,initialText:p})},[s,y,ft]),On=u.useCallback(t=>{const i=be.current;if(!i)return;const c=re(s,i.id);c&&(Jt.current={id:i.id,rect:i.rect},c.set(i.id,t)),ft(null)},[s,ft]),Ln=u.useCallback(()=>ft(null),[ft]);if(!ni(s)||Mi())return null;const ot=new Set([...r.selectedEntityIds].filter(t=>s.hierarchy.node(t)!==void 0)),ne=I!==null&&!ot.has(I)?T(s,I):null,X=Ti(s,ot),it=X?.rect??null,Mn=X?.ownerBoxEdit??null,oe=n&&X?xt(s,X.id):null,G=oe&&se(oe)?oe:null,Y=n&&X?X.ownerBoxEdit.gizmoOrigin?.(X.id)??{x:X.rect.x+X.rect.width/2,y:X.rect.y+X.rect.height/2}:null,bt=le/m.zoom,ie=n&&ot.size>1?[...ot][0]:null,Re=ie?K(s,ie)?.gizmoOrigin?.(ie)??null:null,ct=X?X.ownerBoxEdit.referencePoint?.(X.id):null,Tn=X?.spacingBands??[],wt=ot.size===1?[...ot][0]:null,Gt=wt?Fe(s,wt):null,Fn=wt&&Gt?Gt.layers(wt).filter(t=>n&&t.category==="origin"?un:r.showHelpers?r.helperVisibility[t.category]??!0:!1):[],Pt=n?{selectedSingleRect:null,measureLines:[],positionBadge:null,showPositionBadge:!1,parentRect:null}:$i(s,ot,ne),Pe=n?null:Fi(s,ot),At=we.current,$n=n?[]:At&&At.adapter===s&&At.version===h?At.hints:(()=>{const t=ho(s);return we.current={adapter:s,version:h,hints:t},t})();return l.jsxs("div",{style:{position:"absolute",inset:0,zIndex:qo,pointerEvents:"none"},children:[l.jsx("div",{ref:w,"data-testid":"world-selection-overlay-interaction",style:{position:"absolute",inset:0,pointerEvents:"auto",touchAction:"none",userSelect:"none",cursor:k??ai(fn,pn,lt,!!j)},onPointerDownCapture:zn,onPointerMove:J,onPointerUp:tt,onPointerCancel:_,onLostPointerCapture:_,onPointerLeave:Dn,onDoubleClick:In,onContextMenu:Ot,onDragOver:Sn,onDrop:En}),L?l.jsx(Go,{state:L,onClose:()=>Z(null)}):null,V?l.jsx(Xi,{state:V,adapter:s,onClose:()=>nt(null)}):null,l.jsxs("div",{"data-testid":"world-selection-overlay-chrome",style:{position:"absolute",inset:0,pointerEvents:"none",transform:mo(m),transformOrigin:"0 0"},children:[!n&&$n.map(t=>l.jsx("div",{"data-testid":"world-empty-container-hint","data-entity-id":t.id,title:t.displayName,style:{position:"absolute",left:t.rect.x,top:t.rect.y,width:t.rect.width,height:t.rect.height,borderStyle:"dashed",borderColor:"rgba(154, 160, 166, 0.7)",borderWidth:n?1/m.zoom:1,boxSizing:"border-box",pointerEvents:"none"}},t.id)),ne&&l.jsx("div",{"data-testid":"world-selection-hover",style:{...Ae(ne,!1),...n?{borderWidth:1/m.zoom}:{}}}),[...ot].map(t=>{const i=T(s,t);if(!i)return null;const c=n?xt(s,t):null,a=c&&se(c)?c:null;return l.jsxs("div",{children:[l.jsx("div",{"data-testid":"world-selection-box","data-entity-id":t,"data-turned":a?"true":void 0,style:{...a?di(a,1/m.zoom):Ae(i,!0),...n&&!a?{borderWidth:1/m.zoom,background:"transparent"}:{}}}),!n&&l.jsx("div",{"data-testid":"world-selection-label",style:ui(i),children:ei(s,t)})]},t)}),j&&l.jsx("div",{"data-testid":"world-selection-marquee",style:{position:"absolute",left:j.x,top:j.y,width:j.width,height:j.height,border:`1px solid ${B}`,background:`color-mix(in srgb, ${B} 10%, transparent)`,pointerEvents:"none"}}),!n&&l.jsx(Yi,{measureLines:Pt.measureLines,snapGuides:yn,positionBadge:Pt.positionBadge,showPositionBadge:Pt.showPositionBadge,badgeAnchorRect:Pt.selectedSingleRect,parentRect:Pt.parentRect,screenScale:H,screenZoom:1}),!n&&l.jsx(Bi,{dragGhost:hn,reorderPreview:gn}),!n&&Pe&&l.jsx(Zo,{adapter:s,entries:Pe}),$?l.jsx("div",{"data-testid":"world-2d-temporary-pivot","aria-label":"Temporary pivot",style:{position:"absolute",left:$.x-8,top:$.y-8,width:16,height:16,transform:`scale(${H})`,transformOrigin:"center",pointerEvents:"none",background:"linear-gradient(#ffb020, #ffb020) center / 16px 2px no-repeat, linear-gradient(#ffb020, #ffb020) center / 2px 16px no-repeat"}}):null,Re&&Kt(n,r.transformMode,"scale")&&Mt&>&&["x","y"].map(t=>l.jsx("div",{"data-testid":`world-2d-group-scale-${t}`,title:t==="x"?"Scale the selection on X":"Scale the selection on Y",style:{...ce(Ue(t,Re,bt),t==="x"?"ew-resize":"ns-resize"),transform:`scale(${H})`,transformOrigin:"center",background:t==="x"?"#ef5350":"#66bb6a"},onPointerDown:i=>jt(t,i),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)),it&&Mn&&l.jsxs(l.Fragment,{children:[!n&&Tn.map(t=>l.jsxs("div",{children:[l.jsx("div",{"data-testid":`world-spacing-${t.kind}-${Gi(t.side)}`,style:vi(t),onPointerDown:i=>Pn(t,i),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),!t.isZero&&l.jsx("div",{style:{...mi(t),...n?{transform:`translate(-50%, -50%) scale(${H})`,transformOrigin:"center"}:{}},children:Math.round(t.value)})]},t.side)),ct&&l.jsx("div",{"aria-label":`Edit ${ct.label}`,"data-reference-kind":ct.kind,"data-testid":"world-reference-point-handle",title:`${ct.label} (${ct.bounded?"native corner/edge/center snap":"8px/alignment snap"}, Alt for free movement)`,style:{...xi(ct),...n?{transform:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:t=>Cn(ct,t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_,onLostPointerCapture:_,role:"button",tabIndex:0,children:ct.kind==="anchor"?"A":"P"}),wt&&Gt&&Fn.flatMap(t=>t.handles.map(i=>l.jsx("div",{"aria-label":i.label,"data-testid":"world-spatial-handle","data-handle-id":i.id,"data-writable":i.writable,role:"button",tabIndex:0,title:i.writable?i.label:`${i.label} — ${i.reason}`,style:{...fi(i),transform:`translate(-50%, -50%) scale(${H})`},onPointerDown:c=>jn(wt,Gt,i,c),onPointerMove:Rn,onPointerUp:ee,onPointerCancel:ee,onLostPointerCapture:ee},`${t.id}:${i.id}`))),n&&r.transformMode==="translate"&&Mt&&l.jsxs(l.Fragment,{children:[l.jsx("div",{"data-testid":"world-2d-move-axis-x",title:"Move on X axis",style:{position:"absolute",left:Y.x,top:Y.y-5/m.zoom,width:bt,height:10/m.zoom,borderTop:`${2/m.zoom}px solid #ef5350`,boxSizing:"border-box",cursor:"ew-resize",pointerEvents:"auto"},onPointerDown:t=>te("x",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),l.jsx("div",{"data-testid":"world-2d-move-axis-y",title:"Move on Y axis",style:{position:"absolute",left:Y.x-5/m.zoom,top:Y.y,width:10/m.zoom,height:bt,borderLeft:`${2/m.zoom}px solid #66bb6a`,boxSizing:"border-box",cursor:"ns-resize",pointerEvents:"auto"},onPointerDown:t=>te("y",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),l.jsx("div",{"data-testid":"world-2d-move-center",title:"Move freely",style:{position:"absolute",left:Y.x-5/m.zoom,top:Y.y-5/m.zoom,width:10/m.zoom,height:10/m.zoom,border:"1px solid rgba(255,255,255,.9)",background:"#4aa3ff",boxSizing:"border-box",cursor:"move",pointerEvents:"auto"},onPointerDown:t=>te("both",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_})]}),Kt(n,r.transformMode,"scale")&&Mt&&(gt?l.jsxs(l.Fragment,{children:[l.jsx("div",{"data-testid":"world-2d-scale-axis-x",style:{position:"absolute",left:Y.x,top:Y.y,width:bt,borderTop:`${2/m.zoom}px solid #ef5350`,pointerEvents:"none"}}),l.jsx("div",{"data-testid":"world-2d-scale-axis-y",style:{position:"absolute",left:Y.x,top:Y.y,height:bt,borderLeft:`${2/m.zoom}px solid #66bb6a`,pointerEvents:"none"}}),[["x","ew-resize"],["y","ns-resize"],["both","nwse-resize"]].map(([t,i])=>{const c=Ue(t,Y,bt),a=t==="x"?"e":t==="y"?"s":"se";return l.jsx("div",{"data-testid":`world-resize-handle-${a}`,style:{...ce(c,i),transform:`scale(${H})`,transformOrigin:"center",background:t==="x"?"#ef5350":t==="y"?"#66bb6a":"#fff"},onPointerDown:f=>jt(t,f),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)})]}):l.jsxs(l.Fragment,{children:[yo.map(({pos:t,cursor:i})=>l.jsx("div",{"data-testid":`world-resize-handle-${t}`,style:{...ce(G?go(G,t):vo(it,t),i),...n?{transform:G?`rotate(${zt(G)}rad) scale(${H})`:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:c=>kn(t,c),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)),l.jsx("div",{"data-testid":"world-resize-dimension-label",style:{...hi(it),...n?{top:it.y+it.height+4*H,transform:`scale(${H})`,transformOrigin:"top left"}:{}},children:G?`${Math.round(Math.hypot(G.tr.x-G.tl.x,G.tr.y-G.tl.y))}×${Math.round(Math.hypot(G.bl.x-G.tl.x,G.bl.y-G.tl.y))}`:`${Math.round(it.width)}×${Math.round(it.height)}`})]})),Kt(n,r.transformMode,"rotate")&&Mt&&l.jsxs(l.Fragment,{children:[gt&&l.jsx("div",{"data-testid":"world-2d-rotate-ring",style:{position:"absolute",left:Y.x-40/m.zoom,top:Y.y-40/m.zoom,width:80/m.zoom,height:80/m.zoom,border:`${1/m.zoom}px solid #4aa3ff`,borderRadius:"50%",boxSizing:"border-box",pointerEvents:"none"}}),l.jsx("div",{"data-testid":"world-rotate-handle","aria-label":"Rotate selection",title:n?"Rotate selection (snaps under Smart Snap or Use Rotation Snap; Cmd inverts)":"Rotate selection (15° snap, Alt for free rotation)",style:{...pi(it),...n&&!gt?{...ci(G,it,dn*H),transform:`scale(${H})`,transformOrigin:"center"}:{},...gt?{left:Y.x-et/2,top:Y.y-40/m.zoom-et/2,transform:`scale(${H})`,transformOrigin:"center",background:"#4aa3ff"}:{}},onPointerDown:Yt,onPointerMove:J,onPointerUp:tt,onPointerCancel:_,role:"button",tabIndex:0})]})]}),!n&&l.jsx(Hi,{textEdit:mn,onCommitTextEdit:On,onCancelTextEdit:Ln,textEditRefused:Ft,eyedropperActive:lt,eyedropperPreview:wn})]})]})}function Yi(e){const{measureLines:o,snapGuides:n,positionBadge:d,showPositionBadge:r,badgeAnchorRect:h,parentRect:s,screenScale:y,screenZoom:w}=e;return l.jsxs(l.Fragment,{children:[s&&l.jsx("div",{"data-testid":"world-parent-outline",style:ji(s)}),o.map(v=>l.jsxs("div",{"data-testid":"world-measure-line",children:[l.jsx("div",{style:Si(v)}),l.jsx("div",{style:Ne(v.x1,v.y1,v.orientation==="horizontal")}),l.jsx("div",{style:Ne(v.x2,v.y2,v.orientation==="horizontal")}),l.jsx("div",{"data-testid":"world-measure-line-label",style:{...Ei(v),...y!==1?{transform:`translate(-50%, -50%) scale(${y})`,transformOrigin:"center"}:{}},children:v.distance})]},v.orientation)),n.map(v=>l.jsx("div",{"data-testid":"world-snap-guide",style:ki(v)},v.orientation)),r&&h&&d&&l.jsxs("div",{"data-testid":"world-position-badge",style:{...Ci(h),...y!==1?{top:h.y-36/w,transform:`scale(${y})`,transformOrigin:"top left"}:{}},children:[d.position&&l.jsx("span",{"data-testid":"world-position-badge-mode",style:We,children:d.position}),d.parentLayout&&l.jsx("span",{"data-testid":"world-position-badge-layout",style:We,children:d.parentLayout})]})]})}function Bi(e){const{dragGhost:o,reorderPreview:n}=e;return l.jsxs(l.Fragment,{children:[o&&l.jsx("div",{"data-testid":"world-drag-ghost",style:bi(o)}),n&&l.jsx("div",{"data-testid":"world-reorder-preview",style:wi(n.gap.marker)})]})}function Hi(e){const{textEdit:o,onCommitTextEdit:n,onCancelTextEdit:d,textEditRefused:r,eyedropperActive:h,eyedropperPreview:s}=e;return l.jsxs(l.Fragment,{children:[o&&l.jsx("div",{style:{pointerEvents:"auto"},children:l.jsx(Qo,{rect:o.rect,initialText:o.initialText,onCommit:n,onCancel:d})}),r&&l.jsx("div",{"data-testid":"world-text-edit-refused",title:"dynamic body — not inline-editable",style:{position:"absolute",left:r.rect.x,top:r.rect.y,width:Math.max(r.rect.width,40),height:Math.max(r.rect.height,20),border:`2px dashed ${st.semantic.danger}`,boxSizing:"border-box",background:st.semantic.dangerMuted,pointerEvents:"none"}}),h&&s&&l.jsx("div",{"data-testid":"world-eyedropper-swatch","data-color-state":s.color?"resolved":"unknown",style:{position:"absolute",left:s.x+12,top:s.y+12,width:24,height:24,borderRadius:4,border:"2px solid #fff",boxShadow:"0 1px 4px rgba(0,0,0,0.5)",background:s.color??"repeating-linear-gradient(45deg, #999, #999 4px, #ccc 4px, #ccc 8px)",pointerEvents:"none"}})]})}function Gi(e){return e.endsWith("Top")?"top":e.endsWith("Right")?"right":e.endsWith("Bottom")?"bottom":"left"}export{nr as R,Xi as V,To as a,Xo as b,Fo as c,qi as d,er as e,Ji as m,tr as r,$o as s};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{
|
|
1
|
+
import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{du as ne,eM as D,dw as N,dx as se,gc as ie,af as m,b4 as M,dh as oe,ch as _,dy as G,aR as ae}from"./index-C5ZAyrKq.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{C as le}from"./ColorInput-C2EK-OnD.js";import{W as ce}from"./three.module-BLhyNg0e.js";import{s as P}from"./asset-editor-persistence-BIbf5u0Q.js";import{ej as H,el as ue,d9 as de,em as fe,aI as me,co as pe,cl as he,cm as ge,_ as X,fd as W,fo as K,fp as Z,K as ye,db as ve,ey as xe,Z as be,au as Se,dw as we,cE as je}from"./three.core-3arARmh6.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";const Ee=[".vert",".vert.glsl"],$e=[".frag",".frag.glsl"];function Ce(e){return e.split(/[?#]/,1)[0].toLowerCase()}function Re(e,t=""){const r=Ce(e);return Ee.some(n=>r.endsWith(n))?"vertex":$e.some(n=>r.endsWith(n))?"fragment":/\bgl_Position\b/.test(t)?"vertex":"fragment"}function q(e){const t=e.split(/[?#]/,1)[0];return/\.vert\.glsl$/i.test(t)?t.replace(/\.vert\.glsl$/i,".frag.glsl"):/\.frag\.glsl$/i.test(t)?t.replace(/\.frag\.glsl$/i,".vert.glsl"):/\.vert$/i.test(t)?t.replace(/\.vert$/i,".frag"):/\.frag$/i.test(t)?t.replace(/\.frag$/i,".vert"):null}function Ae(e){return e.replace(/\/\*[\s\S]*?\*\//g,t=>t.replace(/[^\n]/g," ")).replace(/\/\/[^\n]*/g,"")}function O(e,t){const r=[],n=/\buniform\s+(?:(?:lowp|mediump|highp)\s+)?([A-Za-z_]\w*)\s+([A-Za-z_]\w*)\s*(?:\[\s*(\d+)\s*\])?\s*;/g;for(const s of Ae(e).matchAll(n)){const o=s[1],l=s[2];if(!o||!l)continue;const p=s[3]?Number.parseInt(s[3],10):void 0;r.push({name:l,type:o,...p?{arraySize:p}:{},stages:[t]})}return r}function Le(e,t){const r=new Map;for(const n of[...O(e,"vertex"),...O(t,"fragment")]){const s=r.get(n.name);if(!s){r.set(n.name,n);continue}r.set(n.name,{...s,stages:[...new Set([...s.stages,...n.stages])]})}return[...r.values()]}function T(e,t){const r=e.split(`
|
|
2
2
|
`).map(n=>Fe(n.trim(),t)).filter(n=>n!==null);return r.length===0&&e.trim()&&r.push({stage:t,severity:"error",message:e.trim()}),r}function Fe(e,t){if(!e)return null;const r=e.match(/^(ERROR|WARNING):\s*\d+:(\d+)(?::|\((\d+)\):)\s*(.*)$/i);if(r)return{stage:t,severity:r[1].toLowerCase()==="warning"?"warning":"error",line:Number.parseInt(r[2],10),...r[3]?{column:Number.parseInt(r[3],10)}:{},message:r[4]||e};const n=e.match(/^\d+:(\d+)\((\d+)\):\s*(?:(error|warning)\s*:?)?\s*(.*)$/i);return n?{stage:t,severity:n[3]?.toLowerCase()==="warning"?"warning":"error",line:Number.parseInt(n[1],10),column:Number.parseInt(n[2],10),message:n[4]||e}:null}function V(e){return`#line 1
|
|
3
|
-
${e}`}const
|
|
3
|
+
${e}`}const Me=`varying vec2 vUv;
|
|
4
4
|
|
|
5
5
|
void main() {
|
|
6
6
|
vUv = uv;
|
|
7
7
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
8
|
-
}`,
|
|
8
|
+
}`,Te=`varying vec2 vUv;
|
|
9
9
|
|
|
10
10
|
void main() {
|
|
11
11
|
gl_FragColor = vec4(vUv, 0.55, 1.0);
|
|
12
|
-
}`;function I(e,t=null){return{path:t,source:e==="vertex"?Te:Me,available:!1}}function $(e){return e?.split("/").pop()??"Preview fallback"}function U(e){return e.type==="vec3"&&/(colou?r|tint|albedo|emissive)/i.test(e.name)}function Q(e){return/^(u|i)?time$/i.test(e.name)&&/^(float|double)$/.test(e.type)?"time":/^(u|i)?resolution$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"resolution":/^(u|i)?mouse$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"mouse":null}function F(e){if(U(e))return/horizon/i.test(e.name)?"#badbe9":/zenith/i.test(e.name)?"#297aba":/sun/i.test(e.name)?"#fff0c2":"#6f8cff";if(e.type==="bool")return!1;if(/^(float|double|int|uint)$/.test(e.type))return 0;const t=e.type.match(/^(?:[biu]?vec)([234])$/);return t?Array.from({length:Number.parseInt(t[1],10)},()=>0):0}function Ie(){const e=new Uint8Array([38,43,58,255,176,190,255,255,176,190,255,255,38,43,58,255]),t=new Se(e,2,2,we);return t.colorSpace=H,t.magFilter=je,t.needsUpdate=!0,t}function J(e,t,r){if(e.arraySize){const{arraySize:s,...o}=e;return Array.from({length:s},()=>J(o,t,r))}if(/^sampler2D/.test(e.type)){const s=Ie();return r.push(s),s}if(/^sampler/.test(e.type))return null;if(e.type==="mat3")return new he;if(e.type==="mat4")return new ge;if(U(e))return new X(typeof t=="string"?t:"#6f8cff");const n=e.type.match(/^(?:[biu]?vec)([234])$/);if(n){const s=Array.isArray(t)?t:[],o=Number.parseInt(n[1],10);return o===2?new W(s[0]??0,s[1]??0):o===3?new K(s[0]??0,s[1]??0,s[2]??0):new Z(s[0]??0,s[1]??0,s[2]??0,s[3]??0)}return t}function Ue(e,t,r,n,s){const o=Q(t);if(o==="time"){e.value=n;return}if(e.value instanceof X&&typeof r=="string"){e.value.set(r);return}const l=Array.isArray(r)?r:[];if(e.value instanceof W){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0);return}if(e.value instanceof K){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0);return}if(e.value instanceof Z){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0,l[3]??0);return}o!=="mouse"&&!t.arraySize&&!/^sampler|^mat/.test(t.type)&&(e.value=r)}function ze(e){return e==="box"?new ve(1.35,1.35,1.35,48,48,48):e==="plane"?new ye(2.2,2.2,96,96):new xe(.95,96,64)}function ke({vertexSource:e,fragmentSource:t,descriptors:r,valuesRef:n,geometry:s,onDiagnostics:o}){const l=h.useRef(null);return h.useEffect(()=>{const p=l.current;if(!p)return;let w=!1,u=0;const x=document.createElement("canvas");x.setAttribute("aria-label","Live shader preview"),x.style.width="100%",x.style.height="100%",x.style.display="block",p.replaceChildren(x);let d;try{d=new ce({canvas:x,antialias:!0,alpha:!1})}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}]);return}d.outputColorSpace=H,d.setClearColor(1119261,1),d.debug.checkShaderErrors=!0;const S=new ue,v=new de(38,1,.01,100);v.position.set(0,0,3.4);const C=[],g={};for(const a of r)g[a.name]={value:J(a,n.current[a.name]??F(a),C)};const R=new fe({vertexShader:V(e),fragmentShader:V(t),uniforms:g,side:me,toneMapped:!1}),L=ze(s),c=new pe(L,R);S.add(c);const f=[];d.debug.onShaderError=(a,b,E,A)=>{const ee=b,te=E,re=A;f.push(...M(a.getProgramInfoLog(ee)??"","program"),...M(a.getShaderInfoLog(te)??"","vertex"),...M(a.getShaderInfoLog(re)??"","fragment"))};const y={width:1,height:1},j=()=>{const a=p.getBoundingClientRect();y.width=Math.max(1,Math.floor(a.width)),y.height=Math.max(1,Math.floor(a.height)),d.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),d.setSize(y.width,y.height,!1),v.aspect=y.width/y.height,v.position.z=3.4/Math.min(1,v.aspect),v.updateProjectionMatrix()};j();const z=new ResizeObserver(j);z.observe(p);const Y=new be;try{d.compile(S,v),d.render(S,v),o(f.filter((a,b,E)=>E.findIndex(A=>A.stage===a.stage&&A.line===a.line&&A.message===a.message)===b))}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}])}const k=()=>{if(w)return;const a=Y.getElapsedTime();for(const b of r){const E=g[b.name];E&&Ue(E,b,n.current[b.name]??F(b),a,y)}s!=="plane"&&(c.rotation.y=a*.18,c.rotation.x=Math.sin(a*.22)*.08),d.render(S,v),u=requestAnimationFrame(k)};return u=requestAnimationFrame(k),()=>{w=!0,cancelAnimationFrame(u),z.disconnect(),d.debug.onShaderError=null,L.dispose(),R.dispose();for(const a of C)a.dispose();d.dispose(),x.remove()}},[r,t,s,o,n,e]),i.jsx("div",{ref:l,"data-testid":"shader-preview",style:{width:"100%",height:"100%",minHeight:240,background:"#11141d"}})}function De({descriptors:e,values:t,onChange:r}){return e.length===0?i.jsx("div",{style:{color:m.content.muted},children:"No uniform declarations found."}):i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:4},children:[e.map(n=>i.jsx(Ne,{uniform:n,value:t[n.name]??F(n),onChange:s=>r(n.name,s)},n.name)),i.jsx("div",{style:{color:m.content.muted,fontSize:10,lineHeight:1.4},children:"Preview values are session-only. Author runtime defaults beside the ShaderMaterial in TS/TSX."})]})}function Ne({uniform:e,value:t,onChange:r}){const n=Q(e),s=e.type.match(/^(?:[biu]?vec)([234])$/);let o;return n?o=i.jsxs("div",{style:{color:m.content.muted,fontSize:10},children:["Driven by preview ",n]}):U(e)?o=i.jsx(le,{value:typeof t=="string"?t:"#6f8cff",onChange:r}):e.type==="bool"?o=i.jsxs("label",{style:{display:"flex",alignItems:"center",gap:7,fontSize:11},children:[i.jsx(ae,{checked:!!t,onChange:l=>r(l.target.checked)}),t?"True":"False"]}):/^(float|double|int|uint)$/.test(e.type)?o=i.jsx(G,{value:typeof t=="number"?t:0,onChange:r,step:e.type==="int"||e.type==="uint"?1:.01,precision:e.type==="int"||e.type==="uint"?0:3}):s&&Array.isArray(t)?o=i.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${s[1]}, minmax(0, 1fr))`,gap:4},children:t.map((l,p)=>i.jsx(G,{value:l,label:"xyzw"[p],onChange:w=>{const u=[...t];u[p]=w,r(u)},step:.01},`${e.name}:${p}`))}):o=i.jsx("div",{style:{color:m.content.muted,fontSize:10},children:"Reflected for runtime binding; no scalar preview control."}),i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5},children:[i.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:8},children:[i.jsx("span",{style:{color:m.content.primary,fontSize:11},children:e.name}),i.jsx("span",{style:{color:m.content.muted,fontSize:10},children:e.type})]}),o]})}function B({diagnostics:e,files:t}){return e.length===0?i.jsx("div",{style:{color:m.semantic.success,fontSize:11,padding:4},children:"Shader program compiled successfully."}):i.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6,padding:4},children:e.map((r,n)=>{const s=r.stage==="program"?null:t[r.stage];return i.jsxs("div",{style:{color:r.severity==="warning"?m.semantic.warning:m.semantic.danger,fontSize:10,lineHeight:1.45},children:[s?.available?$(s.path):r.stage,r.line?`:${r.line}${r.column?`:${r.column}`:""}`:""," · ",r.message]},`${r.stage}:${r.line??0}:${r.message}:${n}`)})})}async function _e(e){const t=await _(e);if(t===null)throw new Error(`Could not read ${e}.`);const r=Re(e,t),n=q(e),s=n?await _(n):null,o={vertex:I("vertex"),fragment:I("fragment")};o[r]={path:e,source:t,available:!0};const l=r==="vertex"?"fragment":"vertex";return o[l]=s===null?I(l,n):{path:n,source:s,available:!0},o}function Ye({documentId:e,assetPath:t,active:r=!0}){const[n,s]=h.useState(null),[o,l]=h.useState(0),[p,w]=h.useState("sphere"),[u,x]=h.useState([]),[d,S]=h.useState({}),[v,C]=h.useState(null);h.useEffect(()=>{if(!r)return;const c=()=>l(j=>j+1),f=q(t),y=[P(t,c),...f?[P(f,c)]:[]];return()=>{for(const j of y)j()}},[r,t]),h.useEffect(()=>{if(!r)return;let c=!1;return s(null),C(null),_e(t).then(f=>{c||s(f)},f=>{c||C(f instanceof Error?f.message:String(f))}),()=>{c=!0}},[r,t,o]);const g=h.useMemo(()=>n?Le(n.vertex.source,n.fragment.source):[],[n]);h.useEffect(()=>{S(c=>Object.fromEntries(g.map(f=>[f.name,c[f.name]??F(f)])))},[g]);const R=h.useRef(d);R.current=d;const L=h.useMemo(()=>[{id:"shader-pair",title:"Shader Pair",icon:D,order:ne,body:{kind:"custom",render:()=>i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5,padding:4,fontSize:10},children:[i.jsxs("span",{children:["Vertex · ",n?$(n.vertex.path):"Loading…",n&&!n.vertex.available?" (preview fallback)":""]}),i.jsxs("span",{children:["Fragment · ",n?$(n.fragment.path):"Loading…",n&&!n.fragment.available?" (preview fallback)":""]}),i.jsx("span",{style:{color:m.content.muted},children:"Ordinary sibling GLSL files; runtime composition stays in TS/TSX."})]})}},{id:"shader-uniforms",title:"Uniforms",icon:se,order:N,description:`${g.length} reflected`,body:{kind:"custom",data:Object.fromEntries(g.map(c=>[c.name,d[c.name]])),render:()=>i.jsx(De,{descriptors:g,values:d,onChange:(c,f)=>S(y=>({...y,[c]:f}))})}},{id:"shader-diagnostics",title:"Diagnostics",icon:u.length>0?ie:D,order:N+100,description:u.length===0?"Compiled":`${u.length} issue${u.length===1?"":"s"}`,body:{kind:"custom",data:{diagnostics:u},render:()=>n&&i.jsx(B,{diagnostics:u,files:n})}}],[g,u,n,d]);return v?i.jsx(T,{documentId:e,active:r,type:"shader",title:$(t),status:"Shader unavailable",children:i.jsx("div",{role:"alert",style:{padding:20,color:m.semantic.danger},children:v})}):n?i.jsx(T,{documentId:e,active:r,type:"shader",title:$(t),sections:L,status:u.length===0?`GLSL · compiles · ${g.length} uniforms`:`GLSL · ${u.length} compile issues`,fill:!0,children:i.jsxs("div",{style:{width:"100%",height:"100%",minHeight:0,position:"relative",background:m.surface.panel},children:[i.jsx(ke,{vertexSource:n.vertex.source,fragmentSource:n.fragment.source,descriptors:g,valuesRef:R,geometry:p,onDiagnostics:x}),i.jsx("div",{style:{position:"absolute",left:10,top:10},children:i.jsxs(oe,{"aria-label":"Preview geometry",value:p,onChange:c=>w(c.target.value),children:[i.jsx("option",{value:"sphere",children:"Sphere"}),i.jsx("option",{value:"box",children:"Box"}),i.jsx("option",{value:"plane",children:"Plane"})]})}),u.length>0&&i.jsx("div",{style:{position:"absolute",left:12,right:12,bottom:12,maxHeight:120,overflow:"auto",padding:8,border:`1px solid ${m.semantic.danger}`,borderRadius:6,background:m.surface.overlay},children:i.jsx(B,{diagnostics:u,files:n})})]})}):i.jsx(T,{documentId:e,active:r,type:"shader",title:$(t),status:"Loading GLSL",children:i.jsx("div",{style:{padding:20,color:m.content.muted},children:"Loading shader files…"})})}export{Ye as ShaderAssetDocument};
|
|
12
|
+
}`;function I(e,t=null){return{path:t,source:e==="vertex"?Me:Te,available:!1}}function $(e){return e?.split("/").pop()??"Preview fallback"}function U(e){return e.type==="vec3"&&/(colou?r|tint|albedo|emissive)/i.test(e.name)}function J(e){return/^(u|i)?time$/i.test(e.name)&&/^(float|double)$/.test(e.type)?"time":/^(u|i)?resolution$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"resolution":/^(u|i)?mouse$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"mouse":null}function F(e){if(U(e))return/horizon/i.test(e.name)?"#badbe9":/zenith/i.test(e.name)?"#297aba":/sun/i.test(e.name)?"#fff0c2":"#6f8cff";if(e.type==="bool")return!1;if(/^(float|double|int|uint)$/.test(e.type))return 0;const t=e.type.match(/^(?:[biu]?vec)([234])$/);return t?Array.from({length:Number.parseInt(t[1],10)},()=>0):0}function Ie(){const e=new Uint8Array([38,43,58,255,176,190,255,255,176,190,255,255,38,43,58,255]),t=new Se(e,2,2,we);return t.colorSpace=H,t.magFilter=je,t.needsUpdate=!0,t}function Q(e,t,r){if(e.arraySize){const{arraySize:s,...o}=e;return Array.from({length:s},()=>Q(o,t,r))}if(/^sampler2D/.test(e.type)){const s=Ie();return r.push(s),s}if(/^sampler/.test(e.type))return null;if(e.type==="mat3")return new he;if(e.type==="mat4")return new ge;if(U(e))return new X(typeof t=="string"?t:"#6f8cff");const n=e.type.match(/^(?:[biu]?vec)([234])$/);if(n){const s=Array.isArray(t)?t:[],o=Number.parseInt(n[1],10);return o===2?new W(s[0]??0,s[1]??0):o===3?new K(s[0]??0,s[1]??0,s[2]??0):new Z(s[0]??0,s[1]??0,s[2]??0,s[3]??0)}return t}function Ue(e,t,r,n,s){const o=J(t);if(o==="time"){e.value=n;return}if(e.value instanceof X&&typeof r=="string"){e.value.set(r);return}const l=Array.isArray(r)?r:[];if(e.value instanceof W){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0);return}if(e.value instanceof K){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0);return}if(e.value instanceof Z){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0,l[3]??0);return}o!=="mouse"&&!t.arraySize&&!/^sampler|^mat/.test(t.type)&&(e.value=r)}function ze(e){return e==="box"?new ye(1.35,1.35,1.35,48,48,48):e==="plane"?new ve(2.2,2.2,96,96):new xe(.95,96,64)}function ke({vertexSource:e,fragmentSource:t,descriptors:r,valuesRef:n,geometry:s,onDiagnostics:o}){const l=h.useRef(null);return h.useEffect(()=>{const p=l.current;if(!p)return;let w=!1,u=0;const x=document.createElement("canvas");x.setAttribute("aria-label","Live shader preview"),x.style.width="100%",x.style.height="100%",x.style.display="block",p.replaceChildren(x);let d;try{d=new ce({canvas:x,antialias:!0,alpha:!1})}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}]);return}d.outputColorSpace=H,d.setClearColor(1119261,1),d.debug.checkShaderErrors=!0;const S=new ue,y=new de(38,1,.01,100);y.position.set(0,0,3.4);const C=[],g={};for(const a of r)g[a.name]={value:Q(a,n.current[a.name]??F(a),C)};const R=new fe({vertexShader:V(e),fragmentShader:V(t),uniforms:g,side:me,toneMapped:!1}),L=ze(s),c=new pe(L,R);S.add(c);const f=[];d.debug.onShaderError=(a,b,E,A)=>{const ee=b,te=E,re=A;f.push(...T(a.getProgramInfoLog(ee)??"","program"),...T(a.getShaderInfoLog(te)??"","vertex"),...T(a.getShaderInfoLog(re)??"","fragment"))};const v={width:1,height:1},j=()=>{const a=p.getBoundingClientRect();v.width=Math.max(1,Math.floor(a.width)),v.height=Math.max(1,Math.floor(a.height)),d.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),d.setSize(v.width,v.height,!1),y.aspect=v.width/v.height,y.position.z=3.4/Math.min(1,y.aspect),y.updateProjectionMatrix()};j();const z=new ResizeObserver(j);z.observe(p);const Y=new be;try{d.compile(S,y),d.render(S,y),o(f.filter((a,b,E)=>E.findIndex(A=>A.stage===a.stage&&A.line===a.line&&A.message===a.message)===b))}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}])}const k=()=>{if(w)return;const a=Y.getElapsedTime();for(const b of r){const E=g[b.name];E&&Ue(E,b,n.current[b.name]??F(b),a,v)}s!=="plane"&&(c.rotation.y=a*.18,c.rotation.x=Math.sin(a*.22)*.08),d.render(S,y),u=requestAnimationFrame(k)};return u=requestAnimationFrame(k),()=>{w=!0,cancelAnimationFrame(u),z.disconnect(),d.debug.onShaderError=null,L.dispose(),R.dispose();for(const a of C)a.dispose();d.dispose(),x.remove()}},[r,t,s,o,n,e]),i.jsx("div",{ref:l,"data-testid":"shader-preview",style:{width:"100%",height:"100%",minHeight:240,background:"#11141d"}})}function De({descriptors:e,values:t,onChange:r}){return e.length===0?i.jsx("div",{style:{color:m.content.muted},children:"No uniform declarations found."}):i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:4},children:[e.map(n=>i.jsx(Ne,{uniform:n,value:t[n.name]??F(n),onChange:s=>r(n.name,s)},n.name)),i.jsx("div",{style:{color:m.content.muted,fontSize:10,lineHeight:1.4},children:"Preview values are session-only. Author runtime defaults beside the ShaderMaterial in TS/TSX."})]})}function Ne({uniform:e,value:t,onChange:r}){const n=J(e),s=e.type.match(/^(?:[biu]?vec)([234])$/);let o;return n?o=i.jsxs("div",{style:{color:m.content.muted,fontSize:10},children:["Driven by preview ",n]}):U(e)?o=i.jsx(le,{value:typeof t=="string"?t:"#6f8cff",onChange:r}):e.type==="bool"?o=i.jsxs("label",{style:{display:"flex",alignItems:"center",gap:7,fontSize:11},children:[i.jsx(ae,{checked:!!t,onChange:l=>r(l.target.checked)}),t?"True":"False"]}):/^(float|double|int|uint)$/.test(e.type)?o=i.jsx(G,{value:typeof t=="number"?t:0,onChange:r,step:e.type==="int"||e.type==="uint"?1:.01,precision:e.type==="int"||e.type==="uint"?0:3}):s&&Array.isArray(t)?o=i.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${s[1]}, minmax(0, 1fr))`,gap:4},children:t.map((l,p)=>i.jsx(G,{value:l,label:"xyzw"[p],onChange:w=>{const u=[...t];u[p]=w,r(u)},step:.01},`${e.name}:${p}`))}):o=i.jsx("div",{style:{color:m.content.muted,fontSize:10},children:"Reflected for runtime binding; no scalar preview control."}),i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5},children:[i.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:8},children:[i.jsx("span",{style:{color:m.content.primary,fontSize:11},children:e.name}),i.jsx("span",{style:{color:m.content.muted,fontSize:10},children:e.type})]}),o]})}function B({diagnostics:e,files:t}){return e.length===0?i.jsx("div",{style:{color:m.semantic.success,fontSize:11,padding:4},children:"Shader program compiled successfully."}):i.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6,padding:4},children:e.map((r,n)=>{const s=r.stage==="program"?null:t[r.stage];return i.jsxs("div",{style:{color:r.severity==="warning"?m.semantic.warning:m.semantic.danger,fontSize:10,lineHeight:1.45},children:[s?.available?$(s.path):r.stage,r.line?`:${r.line}${r.column?`:${r.column}`:""}`:""," · ",r.message]},`${r.stage}:${r.line??0}:${r.message}:${n}`)})})}async function _e(e){const t=await _(e);if(t===null)throw new Error(`Could not read ${e}.`);const r=Re(e,t),n=q(e),s=n?await _(n):null,o={vertex:I("vertex"),fragment:I("fragment")};o[r]={path:e,source:t,available:!0};const l=r==="vertex"?"fragment":"vertex";return o[l]=s===null?I(l,n):{path:n,source:s,available:!0},o}function Ye({documentId:e,assetPath:t,active:r=!0}){const[n,s]=h.useState(null),[o,l]=h.useState(0),[p,w]=h.useState("sphere"),[u,x]=h.useState([]),[d,S]=h.useState({}),[y,C]=h.useState(null);h.useEffect(()=>{if(!r)return;const c=()=>l(j=>j+1),f=q(t),v=[P(t,c),...f?[P(f,c)]:[]];return()=>{for(const j of v)j()}},[r,t]),h.useEffect(()=>{if(!r)return;let c=!1;return s(null),C(null),_e(t).then(f=>{c||s(f)},f=>{c||C(f instanceof Error?f.message:String(f))}),()=>{c=!0}},[r,t,o]);const g=h.useMemo(()=>n?Le(n.vertex.source,n.fragment.source):[],[n]);h.useEffect(()=>{S(c=>Object.fromEntries(g.map(f=>[f.name,c[f.name]??F(f)])))},[g]);const R=h.useRef(d);R.current=d;const L=h.useMemo(()=>[{id:"shader-pair",title:"Shader Pair",icon:D,order:ne,body:{kind:"custom",render:()=>i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5,padding:4,fontSize:10},children:[i.jsxs("span",{children:["Vertex · ",n?$(n.vertex.path):"Loading…",n&&!n.vertex.available?" (preview fallback)":""]}),i.jsxs("span",{children:["Fragment · ",n?$(n.fragment.path):"Loading…",n&&!n.fragment.available?" (preview fallback)":""]}),i.jsx("span",{style:{color:m.content.muted},children:"Ordinary sibling GLSL files; runtime composition stays in TS/TSX."})]})}},{id:"shader-uniforms",title:"Uniforms",icon:se,order:N,description:`${g.length} reflected`,body:{kind:"custom",data:Object.fromEntries(g.map(c=>[c.name,d[c.name]])),render:()=>i.jsx(De,{descriptors:g,values:d,onChange:(c,f)=>S(v=>({...v,[c]:f}))})}},{id:"shader-diagnostics",title:"Diagnostics",icon:u.length>0?ie:D,order:N+100,description:u.length===0?"Compiled":`${u.length} issue${u.length===1?"":"s"}`,body:{kind:"custom",data:{diagnostics:u},render:()=>n&&i.jsx(B,{diagnostics:u,files:n})}}],[g,u,n,d]);return y?i.jsx(M,{documentId:e,active:r,type:"shader",title:$(t),status:"Shader unavailable",children:i.jsx("div",{role:"alert",style:{padding:20,color:m.semantic.danger},children:y})}):n?i.jsx(M,{documentId:e,active:r,type:"shader",title:$(t),sections:L,status:u.length===0?`GLSL · compiles · ${g.length} uniforms`:`GLSL · ${u.length} compile issues`,fill:!0,children:i.jsxs("div",{style:{width:"100%",height:"100%",minHeight:0,position:"relative",background:m.surface.panel},children:[i.jsx(ke,{vertexSource:n.vertex.source,fragmentSource:n.fragment.source,descriptors:g,valuesRef:R,geometry:p,onDiagnostics:x}),i.jsx("div",{style:{position:"absolute",left:10,top:10},children:i.jsxs(oe,{"aria-label":"Preview geometry",value:p,onChange:c=>w(c.target.value),children:[i.jsx("option",{value:"sphere",children:"Sphere"}),i.jsx("option",{value:"box",children:"Box"}),i.jsx("option",{value:"plane",children:"Plane"})]})}),u.length>0&&i.jsx("div",{style:{position:"absolute",left:12,right:12,bottom:12,maxHeight:120,overflow:"auto",padding:8,border:`1px solid ${m.semantic.danger}`,borderRadius:6,background:m.surface.overlay},children:i.jsx(B,{diagnostics:u,files:n})})]})}):i.jsx(M,{documentId:e,active:r,type:"shader",title:$(t),status:"Loading GLSL",children:i.jsx("div",{style:{padding:20,color:m.content.muted},children:"Loading shader files…"})})}export{Ye as ShaderAssetDocument};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{r as $}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{eS as v,a0 as L,hp as N,cK as wt,aM as pt,ho as B,eZ as zt,dh as ut,a1 as X,iZ as ft,kR as it,eF as Bt,hZ as ht,dy as Dt,aR as Ft}from"./index-C5ZAyrKq.js";const Ht={full:{anchor:{left:0,top:0,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},top:{anchor:{left:0,top:0,right:1,bottom:0},offset:{left:0,top:0,right:0,bottom:0}},bottom:{anchor:{left:0,top:1,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},left:{anchor:{left:0,top:0,right:0,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},right:{anchor:{left:1,top:0,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},center:{anchor:{left:.5,top:.5,right:.5,bottom:.5},offset:{left:-60,top:-20,right:60,bottom:20}},"top-left":{anchor:{left:0,top:0,right:0,bottom:0},offset:{left:0,top:0,right:120,bottom:40}},"top-right":{anchor:{left:1,top:0,right:1,bottom:0},offset:{left:-120,top:0,right:0,bottom:40}}},mt=["flex-start","center","flex-end"],gt=["flex-start","center","flex-end"];function At({row:t,col:e,justify:n,align:r,isActive:a,disabled:s,onSelect:c}){return o.jsx("div",{"data-testid":`alignment-grid-${t}-${e}`,onClick:()=>{s||c(n,r)},style:{width:16,height:16,display:"flex",alignItems:"center",justifyContent:"center",cursor:s?"not-allowed":"pointer",borderRadius:v.radiusSmall,background:a?v.accent:"transparent"},children:o.jsx("div",{style:{width:a?6:4,height:a?6:4,borderRadius:"50%",background:a?v.onAccent:v.textMuted}})})}function ce({value:t,onChange:e,disabled:n}){const r=mt.indexOf(t.justify),a=gt.indexOf(t.align);return o.jsx("div",{"data-testid":"alignment-grid",style:{display:"inline-grid",gridTemplateColumns:"repeat(3, 16px)",gridTemplateRows:"repeat(3, 16px)",gap:1,background:v.inputBg,borderRadius:v.radiusMedium,padding:4,opacity:n?.35:1},children:gt.map((s,c)=>mt.map((l,u)=>o.jsx(At,{row:c,col:u,justify:l,align:s,isActive:c===a&&u===r,disabled:n,onSelect:(p,h)=>e({justify:p,align:h})},`${c}-${u}`)))})}function de({onSelect:t,disabled:e}){return o.jsx("div",{"data-testid":"anchor-presets",style:{display:"flex",flexWrap:"wrap",gap:4},children:Object.entries(Ht).map(([n,r])=>o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":`anchor-preset-${n}`,disabled:e,onClick:()=>t(n,r),children:n},n))})}function nt(t){let e=t.replace("#","");e.length===3&&(e=`${e[0]??"0"}${e[0]??"0"}${e[1]??"0"}${e[1]??"0"}${e[2]??"0"}${e[2]??"0"}`);const n=Number.parseInt(e,16);return[n>>16&255,n>>8&255,n&255]}function St(t,e,n){return`#${[t,e,n].map(r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0")).join("")}`}function Q(t,e,n){const r=t/255,a=e/255,s=n/255,c=Math.max(r,a,s),l=Math.min(r,a,s),u=c-l;let p=0;u!==0&&(c===r?p=((a-s)/u%6+6)%6:c===a?p=(s-r)/u+2:p=(r-a)/u+4,p/=6);const h=c===0?0:u/c;return[p,h,c]}function O(t,e,n){const r=Math.floor(t*6),a=t*6-r,s=n*(1-e),c=n*(1-a*e),l=n*(1-(1-a)*e);let u=0,p=0,h=0;switch(r%6){case 0:u=n,p=l,h=s;break;case 1:u=c,p=n,h=s;break;case 2:u=s,p=n,h=l;break;case 3:u=s,p=c,h=n;break;case 4:u=l,p=s,h=n;break;case 5:u=n,p=s,h=c;break}return[Math.round(u*255),Math.round(p*255),Math.round(h*255)]}function kt(t,e,n){let r,a,s;if(e===0)r=a=s=n;else{const c=(p,h,d)=>{let b=d;return b<0&&(b+=1),b>1&&(b-=1),b<.16666666666666666?p+(h-p)*6*b:b<.5?h:b<.6666666666666666?p+(h-p)*(.6666666666666666-b)*6:p},l=n<.5?n*(1+e):n+e-n*e,u=2*n-l;r=c(u,l,t+1/3),a=c(u,l,t),s=c(u,l,t-1/3)}return[Math.round(r*255),Math.round(a*255),Math.round(s*255)]}function Pt(t,e,n){const r=t/255,a=e/255,s=n/255,c=Math.max(r,a,s),l=Math.min(r,a,s);let u=0,p=0;const h=(c+l)/2;if(c!==l){const d=c-l;p=h>.5?d/(2-c-l):d/(c+l),c===r?u=((a-s)/d+(a<s?6:0))/6:c===a?u=((s-r)/d+2)/6:u=((r-a)/d+4)/6}return[u,p,h]}function rt(t){if(t.startsWith("#")&&(t.length===4||t.length===7))return t;if(t.startsWith("#")&&t.length===9)return t.slice(0,7);const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(e){const[,r,a,s]=e;return`#${[r??"0",a??"0",s??"0"].map(c=>Number.parseInt(c,10).toString(16).padStart(2,"0")).join("")}`}const n=t.match(/hsla?\((\d+),\s*(\d+)%?,\s*(\d+)%?/);if(n){const[r,a,s]=kt(Number.parseInt(n[1]??"0",10)/360,Number.parseInt(n[2]??"0",10)/100,Number.parseInt(n[3]??"0",10)/100);return St(r,a,s)}return"#000000"}function lt(t){const e=t.match(/rgba\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)/);if(e?.[1])return Number.parseFloat(e[1]);const n=t.match(/hsla\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)/);return n?.[1]?Number.parseFloat(n[1]):t.startsWith("#")&&t.length===9?Number.parseInt(t.slice(7,9),16)/255:1}function xt(t,e,n,r,a){if(a==="hex"){const d=St(t,e,n);return r<1?`rgba(${t}, ${e}, ${n}, ${r.toFixed(2)})`:d}if(a==="rgb")return r<1?`rgba(${t}, ${e}, ${n}, ${r.toFixed(2)})`:`rgb(${t}, ${e}, ${n})`;const[s,c,l]=Pt(t,e,n),u=Math.round(s*360),p=Math.round(c*100),h=Math.round(l*100);return r<1?`hsla(${u}, ${p}%, ${h}%, ${r.toFixed(2)})`:`hsl(${u}, ${p}%, ${h}%)`}function Mt(t){const e=t.match(/\d+/g);return!e||e.length<3?"#000000":`#${[e[0]??"0",e[1]??"0",e[2]??"0"].map(n=>Number.parseInt(n,10).toString(16).padStart(2,"0")).join("")}`}const F=200,J=150,U=14;function Gt({value:t,onChange:e,onChangeEnd:n,onClose:r,recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l,disabled:u}){const p=rt(t),h=nt(p),[d,b]=$.useState(()=>Q(...h)),[m,i]=$.useState(()=>lt(t)),[f,g]=$.useState("hex"),[k,C]=$.useState(p),z=$.useRef(null),S=$.useRef(null),w=$.useRef(null),E=$.useRef(null),T=$.useRef(null),H=$.useCallback((x=d,y=m,j=f)=>{const[M,R,I]=O(x[0],x[1],x[2]);return xt(M,R,I,y,j)},[d,m,f]);$.useEffect(()=>{C(H())},[H]),$.useEffect(()=>{const x=S.current,y=x?.getContext("2d");if(!x||!y)return;const[j,M,R]=O(d[0],1,1),I=y.createLinearGradient(0,0,F,0);I.addColorStop(0,"#ffffff"),I.addColorStop(1,`rgb(${j},${M},${R})`),y.fillStyle=I,y.fillRect(0,0,F,J);const P=y.createLinearGradient(0,0,0,J);P.addColorStop(0,"rgba(0,0,0,0)"),P.addColorStop(1,"rgba(0,0,0,1)"),y.fillStyle=P,y.fillRect(0,0,F,J)},[d[0]]),$.useEffect(()=>{const x=w.current,y=x?.getContext("2d");if(!x||!y)return;const j=y.createLinearGradient(0,0,F,0);for(let M=0;M<=6;M++){const[R,I,P]=O(M/6,1,1);j.addColorStop(M/6,`rgb(${R},${I},${P})`)}y.fillStyle=j,y.fillRect(0,0,F,U)},[]),$.useEffect(()=>{const x=E.current,y=x?.getContext("2d");if(!x||!y)return;const j=4;for(let q=0;q<U;q+=j)for(let Z=0;Z<F;Z+=j)y.fillStyle=(Z/j+q/j)%2===0?"#ffffff":"#cccccc",y.fillRect(Z,q,j,j);const[M,R,I]=O(d[0],d[1],d[2]),P=y.createLinearGradient(0,0,F,0);P.addColorStop(0,`rgba(${M},${R},${I},0)`),P.addColorStop(1,`rgba(${M},${R},${I},1)`),y.fillStyle=P,y.fillRect(0,0,F,U)},[d]),$.useEffect(()=>{if(!r)return;function x(j){j.key==="Escape"&&r?.()}function y(j){z.current&&!z.current.contains(j.target)&&r?.()}return document.addEventListener("keydown",x),document.addEventListener("mousedown",y,!0),()=>{document.removeEventListener("keydown",x),document.removeEventListener("mousedown",y,!0)}},[r]);const _=$.useCallback((x,y,j,M)=>{const R=y?.getBoundingClientRect();if(R)if(x==="sat"){const I=[d[0],ct(j,R.left,R.width),_t(M,R.top,R.height)];b(I),N({onChange:e},H(I))}else if(x==="hue"){const I=[ct(j,R.left,R.width),d[1],d[2]];b(I),N({onChange:e},H(I))}else{const I=Math.round(ct(j,R.left,R.width)*100)/100;i(I),N({onChange:e},H(d,I))}},[d,H,e]);$.useEffect(()=>{function x(j){const M=T.current;if(!M)return;j.preventDefault();const R=M==="sat"?S.current:M==="hue"?w.current:E.current;_(M,R,j.clientX,j.clientY)}function y(){if(T.current){T.current=null;const j=H();B({onChange:e,onChangeEnd:n},j),s?.(j)}}return window.addEventListener("mousemove",x),window.addEventListener("mouseup",y),()=>{window.removeEventListener("mousemove",x),window.removeEventListener("mouseup",y)}},[_,H,e,n,s]);const D=(x,y)=>{u||(y.preventDefault(),T.current=x,_(x,y.currentTarget,y.clientX,y.clientY))},G=()=>{const x=k.trim(),y=Kt(x),j=y?{r:y[0],g:y[1],b:y[2],a:1}:Ot(x)??Ut(x);if(!j)return;b(Q(j.r,j.g,j.b)),i(j.a);const M=y?x:xt(j.r,j.g,j.b,j.a,f);N({onChange:e},M),B({onChange:e,onChangeEnd:n},M),s?.(M)},st=()=>{g(x=>x==="hex"?"rgb":x==="rgb"?"hsl":"hex")},K=typeof globalThis.EyeDropper=="function",at=x=>{const y=rt(x);b(Q(...nt(y))),i(lt(x)),N({onChange:e},x),B({onChange:e,onChangeEnd:n},x)},Ct=async()=>{if(K){try{const y=globalThis.EyeDropper,j=await new y().open();at(j.sRGBHex)}catch{}return}if(l){l(y=>{y&&at(y)});return}const x=c?.();x&&at(x)},[It,Lt,Tt]=O(d[0],d[1],d[2]),Nt=`rgba(${It},${Lt},${Tt},${m})`;return o.jsxs(wt,{ref:z,"data-testid":"inspector-color-picker",onMouseDown:x=>x.stopPropagation(),style:{padding:10,width:F+16,boxSizing:"border-box"},children:[o.jsx("canvas",{ref:S,"data-testid":"color-picker-sv",width:F,height:J,onMouseDown:x=>D("sat",x),style:{cursor:"crosshair",borderRadius:v.radiusSmall,display:"block"}}),o.jsx("canvas",{ref:w,"data-testid":"color-picker-hue",width:F,height:U,onMouseDown:x=>D("hue",x),style:{cursor:"pointer",borderRadius:v.radiusSmall,display:"block",marginTop:6}}),o.jsx("canvas",{ref:E,"data-testid":"color-picker-alpha",width:F,height:U,onMouseDown:x=>D("alpha",x),style:{cursor:"pointer",borderRadius:v.radiusSmall,display:"block",marginTop:6}}),o.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center",marginTop:8},children:[o.jsx("div",{style:{width:22,height:22,borderRadius:v.radiusSmall,flexShrink:0,border:`1px solid ${v.border}`,background:Nt}}),o.jsx(pt,{type:"text","data-testid":"color-picker-text",value:k,onChange:x=>C(x.target.value),onKeyDown:x=>{x.key==="Enter"&&G()},onBlur:G,"data-density":"compact","data-monospace":"true",style:{flex:1}}),o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":"color-format-toggle",onClick:st,title:"Cycle color format",style:{flexShrink:0},children:f.toUpperCase()}),(K||c||l)&&o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":"color-picker-eyedropper",onClick:Ct,title:"Eyedropper",style:{flexShrink:0},children:"⌖"})]}),a&&a.length>0&&o.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:3,marginTop:8,paddingTop:6,borderTop:`1px solid ${v.border}`},children:a.map((x,y)=>o.jsx("div",{"data-testid":"color-picker-recent",onClick:()=>{const j=rt(x);b(Q(...nt(j))),i(lt(x)),N({onChange:e},x),B({onChange:e,onChangeEnd:n},x)},title:x,style:{width:16,height:16,borderRadius:v.radiusSmall,cursor:"pointer",background:x,border:`1px solid ${v.border}`}},`${x}-${y}`))})]})}function Y({label:t,value:e,onChange:n,onChangeEnd:r,recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l,disabled:u,testId:p}){const[h,d]=$.useState(!1),b=rt(e);return o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,position:"relative"},children:[o.jsx("div",{"data-testid":p?`${p}-swatch`:"color-swatch",onClick:()=>{u||d(m=>!m)},style:{width:20,height:20,borderRadius:v.radiusSmall,flexShrink:0,background:b,border:`1px solid ${v.border}`,cursor:u?"not-allowed":"pointer"}}),t&&o.jsx("span",{style:{fontSize:10,color:v.textMuted,flexShrink:0},children:t}),h&&!u&&o.jsx("div",{style:{position:"absolute",zIndex:"var(--volter-z-dropdown)",top:"100%",left:0,marginTop:4},children:o.jsx(Gt,{value:e,onChange:n,onChangeEnd:r,onClose:()=>d(!1),recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l})})]})}function Et(t){return Math.max(0,Math.min(1,t))}function ct(t,e,n){return Et(n?(t-e)/n:0)}function _t(t,e,n){return Et(n?1-(t-e)/n:0)}function Kt(t){return/^#[0-9a-fA-F]{6}$/.test(t)?nt(t):null}function Ot(t){const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(!e)return null;const[,n,r,a,s]=e;return{r:Number.parseInt(n??"0",10),g:Number.parseInt(r??"0",10),b:Number.parseInt(a??"0",10),a:s?Number.parseFloat(s):1}}function Ut(t){const e=t.match(/hsla?\((\d+),\s*(\d+)%?,\s*(\d+)%?(?:,\s*([\d.]+))?\)/);if(!e)return null;const[,n,r,a,s]=e,[c,l,u]=kt(Number.parseInt(n??"0",10)/360,Number.parseInt(r??"0",10)/100,Number.parseInt(a??"0",10)/100);return{r:c,g:l,b:u,a:s?Number.parseFloat(s):1}}function A({label:t,value:e,unit:n="",step:r=1,min:a,max:s,precision:c,disabled:l,onChange:u,onChangeEnd:p,testId:h,style:d}){const b=$.useRef(null),m=c??(r<1?2:r>=100?-2:0),i=$.useMemo(()=>w=>{if(m<0){const T=10**-m;return Math.round(w/T)*T}const E=10**m;return Math.round(w*E)/E},[m]),f=w=>{let E=w;return a!==void 0&&(E=Math.max(a,E)),s!==void 0&&(E=Math.min(s,E)),i(E)},g=w=>{if(l)return;w.preventDefault(),b.current={startX:w.clientX,startValue:e,last:e},document.body.style.cursor="ew-resize";const E=D=>{if(!b.current)return;D.preventDefault();const G=D.clientX-b.current.startX,st=D.shiftKey?10:D.altKey?.1:1,K=f(b.current.startValue+G*r*st);b.current.last=K,N({onChange:u},K)},T=()=>{document.body.style.cursor="",window.removeEventListener("mousemove",E),window.removeEventListener("mouseup",H),window.removeEventListener("keydown",_)},H=()=>{if(b.current){const D=b.current.last;b.current=null,B({onChange:u,onChangeEnd:p},D)}T()},_=D=>{if(D.key==="Escape"&&b.current){const G=f(b.current.startValue);b.current=null,N({onChange:u},G),B({onChange:u,onChangeEnd:p},G),T()}};window.addEventListener("mousemove",E),window.addEventListener("mouseup",H),window.addEventListener("keydown",_)},[k,C]=$.useState(null),z=$.useRef(!1),S=w=>{const E=Number.parseFloat(w);if(Number.isNaN(E))return;const T=f(E);T!==e&&B({onChange:u,onChangeEnd:p},T)};return o.jsxs("div",{style:{...zt,...d},children:[o.jsx("span",{className:"volter-scrub-label","data-testid":h?`${h}-label`:void 0,onMouseDown:g,"data-disabled":l||void 0,style:{fontSize:11,...l?{color:v.dynamic}:{},flexShrink:0,cursor:l?"not-allowed":"ew-resize",userSelect:"none",fontWeight:500},children:t}),o.jsx(pt,{"data-testid":h,type:"text",value:k??`${e}${n}`,readOnly:l,"data-dynamic":l||void 0,onFocus:w=>{C(`${e}${n}`),w.target.select()},onChange:w=>C(w.target.value),onBlur:w=>{z.current||S(w.target.value),z.current=!1,C(null)},onKeyDown:w=>{w.key==="Enter"&&w.target.blur(),w.key==="Escape"&&(z.current=!0,w.target.blur())},style:{flex:1,width:0}})]})}const bt=["none","solid","dashed","dotted","double"];function Wt(t){return{top:t,right:t,bottom:t,left:t}}function Xt(t){const e=r=>`${r.width}|${r.style}|${r.color}`,n=e(t.top);return e(t.right)===n&&e(t.bottom)===n&&e(t.left)===n}function pe({value:t,onChange:e,onChangeEnd:n,disabled:r,recentColors:a,onAddRecentColor:s}){const[c,l]=$.useState(!Xt(t)),u=(d,b)=>{const m={...t.top,...d},i=Wt(m);b?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)},p=(d,b,m)=>{const i={...t,[d]:{...t[d],...b}};m?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)};if(!c)return o.jsxs("div",{"data-testid":"border-editor-uniform",style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsx(Y,{testId:"border-color",value:t.top.color,disabled:r,onChange:d=>u({color:d},!1),onChangeEnd:d=>u({color:d},!0),recentColors:a,onAddRecentColor:s}),o.jsx(A,{testId:"border-width",label:"W",value:t.top.width,min:0,disabled:r,onChange:d=>u({width:d},!1),onChangeEnd:d=>u({width:d},!0),style:{width:64}}),o.jsx(ut,{className:"volter-select","data-testid":"border-style",value:t.top.style,disabled:r,"data-dynamic":r||void 0,onChange:d=>u({style:d.target.value},!0),style:{flex:1},children:bt.map(d=>o.jsx("option",{value:d,children:d},d))}),o.jsx(L,{type:"button","data-testid":"border-expand",title:"Per-side borders","aria-label":"Edit borders per side",onClick:()=>l(!0),variant:"ghost",size:"compact",children:o.jsx(X,{icon:ft})})]});const h=[{key:"top",label:"T"},{key:"right",label:"R"},{key:"bottom",label:"B"},{key:"left",label:"L"}];return o.jsxs("div",{"data-testid":"border-editor-expanded",style:{display:"flex",flexDirection:"column",gap:4},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted},children:"Per-side"}),o.jsx("div",{style:{flex:1}}),o.jsx(L,{type:"button",variant:"primary",size:"compact","data-testid":"border-collapse",title:"Uniform border","aria-label":"Use one border for all sides",onClick:()=>l(!1),children:o.jsx(X,{icon:ft})})]}),h.map(({key:d,label:b})=>o.jsxs("div",{style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted,width:10,textAlign:"center"},children:b}),o.jsx(Y,{testId:`border-${d}-color`,value:t[d].color,disabled:r,onChange:m=>p(d,{color:m},!1),onChangeEnd:m=>p(d,{color:m},!0),recentColors:a,onAddRecentColor:s}),o.jsx(A,{testId:`border-${d}-width`,label:"",value:t[d].width,min:0,disabled:r,onChange:m=>p(d,{width:m},!1),onChangeEnd:m=>p(d,{width:m},!0),style:{width:48}}),o.jsx(ut,{className:"volter-select","data-testid":`border-${d}-style`,value:t[d].style,disabled:r,"data-density":"compact","data-dynamic":r||void 0,onChange:m=>p(d,{style:m.target.value},!0),style:{flex:1},children:bt.map(m=>o.jsx("option",{value:m,children:m},m))})]},d))]})}function Vt(t){return{topLeft:t,topRight:t,bottomLeft:t,bottomRight:t}}function Yt(t){return t.topLeft===t.topRight&&t.topRight===t.bottomLeft&&t.bottomLeft===t.bottomRight}function ue({value:t,onChange:e,onChangeEnd:n,disabled:r}){const[a,s]=$.useState(!Yt(t)),c=(p,h)=>{const d=Vt(p);h?B({onChange:e,onChangeEnd:n},d):N({onChange:e},d)},l=(p,h,d)=>{const b={...t,[p]:h};d?B({onChange:e,onChangeEnd:n},b):N({onChange:e},b)};if(!a)return o.jsxs("div",{"data-testid":"border-radius-editor-uniform",style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx(A,{testId:"border-radius",label:o.jsx(X,{icon:it,label:"Radius"}),value:t.topLeft,min:0,disabled:r,onChange:p=>c(p,!1),onChangeEnd:p=>c(p,!0),style:{flex:1}}),o.jsx(L,{type:"button","data-testid":"border-radius-expand",title:"Independent corners","aria-label":"Edit radius per corner",onClick:()=>s(!0),variant:"ghost",size:"compact",children:o.jsx(X,{icon:it})})]});const u=[{key:"topLeft",label:"TL"},{key:"topRight",label:"TR"},{key:"bottomLeft",label:"BL"},{key:"bottomRight",label:"BR"}];return o.jsxs("div",{"data-testid":"border-radius-editor-expanded",children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted},children:"Corners"}),o.jsx("div",{style:{flex:1}}),o.jsx(L,{type:"button",variant:"primary",size:"compact","data-testid":"border-radius-collapse",title:"Uniform radius","aria-label":"Use one radius for all corners",onClick:()=>s(!1),children:o.jsx(X,{icon:it})})]}),o.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:3},children:u.map(({key:p,label:h})=>o.jsx(A,{testId:`border-radius-${p}`,label:h,value:t[p],min:0,disabled:r,onChange:d=>l(p,d,!1),onChangeEnd:d=>l(p,d,!0)},p))})]})}const ot=[{name:"blur",unit:"px",min:0,max:50,step:.5,default:0},{name:"brightness",unit:"%",min:0,max:300,step:1,default:100},{name:"contrast",unit:"%",min:0,max:300,step:1,default:100},{name:"saturate",unit:"%",min:0,max:300,step:1,default:100},{name:"grayscale",unit:"%",min:0,max:100,step:1,default:0},{name:"hue-rotate",unit:"deg",min:0,max:360,step:1,default:0}];function fe(t){return!t||t==="none"?ot.map(e=>({name:e.name,value:e.default})):ot.map(e=>{const n=new RegExp(`${e.name}\\(([\\d.]+)${e.unit}?\\)`),r=t.match(n);return{name:e.name,value:r?.[1]?Number.parseFloat(r[1]):e.default}})}function he(t){const e=[];for(let n=0;n<t.length;n++){const r=t[n],a=ot[n];r&&a&&r.value!==a.default&&e.push(`${r.name}(${r.value}${a.unit})`)}return e.length?e.join(" "):"none"}function me({value:t,onChange:e,onChangeEnd:n,disabled:r,label:a="Filter",testId:s="filter-editor"}){const c=(l,u,p)=>{const h=t.map((d,b)=>b===l?{...d,value:u}:d);p?B({onChange:e,onChangeEnd:n},h):N({onChange:e},h)};return o.jsxs("div",{"data-testid":s,children:[o.jsx("div",{style:{fontSize:9,color:v.textMuted,marginBottom:4},children:a}),t.map((l,u)=>{const p=ot[u];return p?o.jsx("div",{"data-testid":`filter-row-${l.name}`,style:{marginBottom:3},children:o.jsx(A,{testId:`filter-${l.name}`,label:l.name.replace("hue-rotate","hue"),value:l.value,unit:p.unit,min:p.min,max:p.max,step:p.step,disabled:r,onChange:h=>c(u,h,!1),onChangeEnd:h=>c(u,h,!0)})},l.name):null})]})}const W=28,yt=10;function ge({value:t,onChange:e,disabled:n,fonts:r,testId:a="font-picker"}){const[s,c]=$.useState(!1),[l,u]=$.useState(""),[p,h]=$.useState(0),d=$.useRef(null),b=$.useRef(null);$.useEffect(()=>{s&&b.current?.focus()},[s]),$.useEffect(()=>{if(!s)return;const S=w=>{d.current&&!d.current.contains(w.target)&&c(!1)};return document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[s]),$.useEffect(()=>{if(!s)return;const S=w=>{w.key==="Escape"&&c(!1)};return document.addEventListener("keydown",S),()=>document.removeEventListener("keydown",S)},[s]);const m=$.useMemo(()=>{if(!l)return r;const S=l.toLowerCase();return r.filter(w=>w.toLowerCase().includes(S))},[r,l]),i=m.length*W,f=Math.floor(p/W),g=Math.min(m.length,f+yt+2),k=m.slice(f,g),C=S=>{e(S),c(!1),u("")},z=t.replace(/^["']|["']$/g,"");return o.jsxs("div",{ref:d,"data-testid":a,style:{position:"relative",flex:1},children:[o.jsxs(L,{type:"button",variant:"secondary",className:"volter-field-trigger","aria-haspopup":"listbox","aria-expanded":s,disabled:n,"data-testid":"font-picker-input",onClick:()=>{n||c(S=>!S)},children:[o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:z||"—"}),o.jsx(Bt,{direction:"down",tone:"muted",style:{marginLeft:4}})]}),s&&o.jsxs(wt,{"data-testid":"font-picker-dropdown",style:{position:"absolute",top:"100%",left:0,right:0,zIndex:"var(--volter-z-dropdown)",marginTop:2},children:[o.jsx("div",{style:{padding:4},children:o.jsx(pt,{ref:b,type:"text","data-testid":"font-picker-search",value:l,onChange:S=>{u(S.target.value),h(0)},placeholder:"Search fonts…","data-density":"compact",style:{width:"100%",boxSizing:"border-box"}})}),o.jsx("div",{"data-testid":"font-picker-list",onScroll:S=>h(S.target.scrollTop),style:{maxHeight:yt*W,overflowY:"auto"},children:o.jsx("div",{style:{height:i,position:"relative"},children:k.map((S,w)=>{const E=f+w,T=S.toLowerCase()===z.toLowerCase();return o.jsx("div",{"data-testid":`font-picker-option-${S}`,onClick:()=>C(S),style:{position:"absolute",top:E*W,left:0,right:0,height:W,display:"flex",alignItems:"center",padding:"0 8px",cursor:"pointer",fontSize:12,background:T?v.accent:"transparent",color:T?v.onAccent:v.text},children:o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:S})},S)})})}),m.length===0&&o.jsx("div",{style:{padding:"8px 12px",color:v.textMuted,fontSize:10,textAlign:"center"},children:"No matching fonts"})]})]})}function qt(t){const e=t.stops.map(n=>`${n.color} ${Math.round(n.position*100)}%`).join(", ");return t.type==="radial"?`radial-gradient(circle, ${e})`:`linear-gradient(${t.angle}deg, ${e})`}function Zt(t){const e=t.match(/^linear-gradient\((.+)\)$/);if(e?.[1]!==void 0)return{type:"linear",inner:e[1]};const n=t.match(/^radial-gradient\((.+)\)$/);return n?.[1]!==void 0?{type:"radial",inner:n[1]}:null}function Qt(t){const e=t.match(/^(\d+)deg\s*,\s*/);if(e)return{angle:Number.parseInt(e[1]??"180",10),colorPart:t.slice(e[0].length)};if(t.startsWith("to ")){const n=t.match(/^to\s+\w+\s*,\s*/);if(n)return{angle:180,colorPart:t.slice(n[0].length)}}return{angle:180,colorPart:t}}function Jt(t){const e=t.split(/,\s*(?![^(]*\))/).map(n=>{const r=n.trim(),a=r.match(/\s+(\d+)%$/),s=a?Number.parseInt(a[1]??"0",10)/100:-1;return{color:a?r.slice(0,-a[0].length).trim():r,position:s}});for(let n=0;n<e.length;n++){const r=e[n];r&&r.position<0&&(r.position=e.length>1?n/(e.length-1):0)}return e}function xe(t){if(!t||t==="none")return null;const e=Zt(t);if(!e)return null;const{angle:n,colorPart:r}=e.type==="linear"?Qt(e.inner):{angle:180,colorPart:e.inner},a=Jt(r);return a.length<2?null:{type:e.type,angle:n,stops:a}}function dt({stops:t,selected:e,onSelect:n,onMove:r,disabled:a,testIdPrefix:s}){return o.jsx("div",{style:{position:"relative",height:12,marginTop:2},children:t.map((c,l)=>o.jsx("div",{"data-testid":`${s}-${l}`,onClick:()=>n(l),onMouseDown:u=>{if(a)return;u.preventDefault(),n(l);const h=u.target.parentElement?.getBoundingClientRect(),d=i=>h?.width?Math.max(0,Math.min(1,(i-h.left)/h.width)):c.position,b=i=>r(l,d(i.clientX),!1),m=i=>{r(l,d(i.clientX),!0),window.removeEventListener("mousemove",b),window.removeEventListener("mouseup",m)};window.addEventListener("mousemove",b),window.addEventListener("mouseup",m)},style:{position:"absolute",left:`${c.position*100}%`,top:0,width:10,height:10,borderRadius:"50%",background:c.css,border:`2px solid ${l===e?v.accent:"#fff"}`,transform:"translateX(-50%)",cursor:a?"not-allowed":"pointer"}},l))})}function be({value:t,onChange:e,onChangeEnd:n,disabled:r,recentColors:a,onAddRecentColor:s,testId:c="gradient-editor"}){const[l,u]=$.useState(0),p=(f,g)=>{g?B({onChange:e,onChangeEnd:n},f):N({onChange:e},f)},h=(f,g,k)=>{const C=t.stops.map((z,S)=>S===f?{...z,...g}:z);p({...t,stops:C},k)},d=()=>{const f=t.stops[t.stops.length-1]?.position??1,g=t.stops[0]?.position??0,k=(f+g)/2,C=[...t.stops,{color:"#888888",position:k}].sort((z,S)=>z.position-S.position);u(C.length-1),p({...t,stops:C},!0)},b=f=>{if(t.stops.length<=2)return;const g=t.stops.filter((k,C)=>C!==f);u(Math.min(l,g.length-1)),p({...t,stops:g},!0)},m=t.stops[l]?.color??"#000000",i=m.startsWith("#")?m:Mt(m);return o.jsxs("div",{"data-testid":c,children:[o.jsxs("div",{style:{position:"relative",marginBottom:8},children:[o.jsx("div",{"data-testid":"gradient-preview",style:{height:20,borderRadius:v.radiusSmall,border:`1px solid ${v.border}`,background:qt(t)}}),o.jsx(dt,{stops:t.stops.map(f=>({position:f.position,css:f.color})),selected:l,onSelect:u,onMove:(f,g,k)=>h(f,{position:g},k),disabled:r,testIdPrefix:"gradient-stop"})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:4},children:[o.jsx(Y,{testId:"gradient-selected-color",value:i,disabled:r,onChange:f=>h(l,{color:f},!1),onChangeEnd:f=>h(l,{color:f},!0),recentColors:a,onAddRecentColor:s}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Stop ",l+1]}),t.stops.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove gradient stop","data-testid":"gradient-remove-stop",onClick:()=>b(l),children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":"gradient-add-stop",onClick:d,children:"+ stop"})]}),o.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsxs("div",{style:{display:"flex",gap:1,flex:1},children:[o.jsx(ht,{testId:"gradient-type-linear",label:"Linear",active:t.type==="linear",disabled:r,onClick:()=>p({...t,type:"linear"},!0)}),o.jsx(ht,{testId:"gradient-type-radial",label:"Radial",active:t.type==="radial",disabled:r,onClick:()=>p({...t,type:"radial"},!0)})]}),t.type==="linear"&&o.jsx(A,{testId:"gradient-angle",label:"°",value:t.angle,unit:"deg",disabled:r,onChange:f=>p({...t,angle:f},!1),onChangeEnd:f=>p({...t,angle:f},!0),style:{width:70}})]})]})}function jt(t){const e=n=>Math.round(Math.max(0,Math.min(1,n))*255).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}function vt(t){return{r:Number.parseInt(t.slice(1,3),16)/255,g:Number.parseInt(t.slice(3,5),16)/255,b:Number.parseInt(t.slice(5,7),16)/255}}function tt(t,e,n){if(t.length===0)return;if(e<=t[0].pos)return t[0].value;const r=t[t.length-1];if(e>=r.pos)return r.value;for(let a=0;a+1<t.length;a++){const s=t[a],c=t[a+1];if(e>=s.pos&&e<=c.pos){const l=c.pos>s.pos?(e-s.pos)/(c.pos-s.pos):0;return n(s.value,c.value,l)}}return r.value}const V=(t,e,n)=>t+(e-t)*n,$t=(t,e,n)=>({r:V(t.r,e.r,n),g:V(t.g,e.g,n),b:V(t.b,e.b,n)});function et(t,e,n){const r={...t[e],pos:n},a=[...t.filter((s,c)=>c!==e),r].sort((s,c)=>s.pos-c.pos);return{keys:a,index:a.indexOf(r)}}function ye({value:t,onChange:e,onChangeEnd:n,disabled:r,testId:a="quarks-gradient"}){const[s,c]=$.useState({track:"color",i:0}),l=(i,f)=>{f?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)},u=i=>({...t,color:{...t.color,keys:i}}),p=i=>({...t,alpha:{...t.alpha,keys:i}}),d=[...new Set([...t.color.keys.map(i=>i.pos),...t.alpha.keys.map(i=>i.pos)])].sort((i,f)=>i-f).map(i=>{const f=tt(t.color.keys,i,$t)??{r:1,g:1,b:1},g=tt(t.alpha.keys,i,V)??1;return`rgba(${Math.round(f.r*255)},${Math.round(f.g*255)},${Math.round(f.b*255)},${Math.round(g*1e3)/1e3}) ${Math.round(i*100)}%`}).join(", "),b=t.color.keys[s.track==="color"?s.i:0],m=t.alpha.keys[s.track==="alpha"?s.i:0];return o.jsxs("div",{"data-testid":a,children:[o.jsx(dt,{stops:t.alpha.keys.map(i=>{const f=Math.round(Math.max(0,Math.min(1,i.value))*255);return{position:i.pos,css:`rgb(${f},${f},${f})`}}),selected:s.track==="alpha"?s.i:-1,onSelect:i=>c({track:"alpha",i}),onMove:(i,f,g)=>{const{keys:k,index:C}=et(t.alpha.keys,i,f);c({track:"alpha",i:C}),l(p(k),g)},disabled:r,testIdPrefix:`${a}-alpha-stop`}),o.jsx("div",{"data-testid":`${a}-preview`,style:{height:20,borderRadius:v.radiusSmall,border:`1px solid ${v.border}`,backgroundImage:`linear-gradient(90deg, ${d}), repeating-linear-gradient(45deg, #777 0 5px, #aaa 5px 10px)`}}),o.jsx(dt,{stops:t.color.keys.map(i=>({position:i.pos,css:jt(i.value)})),selected:s.track==="color"?s.i:-1,onSelect:i=>c({track:"color",i}),onMove:(i,f,g)=>{const{keys:k,index:C}=et(t.color.keys,i,f);c({track:"color",i:C}),l(u(k),g)},disabled:r,testIdPrefix:`${a}-color-stop`}),s.track==="color"&&b&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(Y,{testId:`${a}-color-swatch`,value:jt(b.value),disabled:r,onChange:i=>l(u(t.color.keys.map((f,g)=>g===s.i?{...f,value:vt(i)}:f)),!1),onChangeEnd:i=>l(u(t.color.keys.map((f,g)=>g===s.i?{...f,value:vt(i)}:f)),!0)}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Color ",s.i+1,"/",t.color.keys.length]}),t.color.keys.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove color stop","data-testid":`${a}-remove-color-stop`,onClick:()=>{const i=t.color.keys.filter((f,g)=>g!==s.i);c({track:"color",i:Math.min(s.i,i.length-1)}),l(u(i),!0)},children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${a}-add-color-stop`,onClick:()=>{const f=tt(t.color.keys,.5,$t)??{r:1,g:1,b:1},{keys:g,index:k}=et([...t.color.keys,{value:f,pos:.5}],t.color.keys.length,.5);c({track:"color",i:k}),l(u(g),!0)},children:"+ stop"})]}),s.track==="alpha"&&m&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(Dt,{label:"a",step:.05,testId:`${a}-alpha-value`,value:Math.round(m.value*1e3)/1e3,onChange:i=>l(p(t.alpha.keys.map((f,g)=>g===s.i?{...f,value:Math.max(0,Math.min(1,i))}:f)),!1),onChangeEnd:i=>l(p(t.alpha.keys.map((f,g)=>g===s.i?{...f,value:Math.max(0,Math.min(1,i))}:f)),!0)}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Alpha ",s.i+1,"/",t.alpha.keys.length]}),t.alpha.keys.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove alpha stop","data-testid":`${a}-remove-alpha-stop`,onClick:()=>{const i=t.alpha.keys.filter((f,g)=>g!==s.i);c({track:"alpha",i:Math.min(s.i,i.length-1)}),l(p(i),!0)},children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${a}-add-alpha-stop`,onClick:()=>{const f=tt(t.alpha.keys,.5,V)??1,{keys:g,index:k}=et([...t.alpha.keys,{value:f,pos:.5}],t.alpha.keys.length,.5);c({track:"alpha",i:k}),l(p(g),!0)},children:"+ stop"})]})]})}const te={x:0,y:4,blur:8,spread:0,color:"rgba(0,0,0,0.25)",inset:!1,enabled:!0},ee={x:0,y:2,blur:4,spread:0,color:"rgba(0,0,0,0.3)",inset:!1,enabled:!0};function ne(t,e){return(e?[t.inset?"inset":"",`${t.x}px`,`${t.y}px`,`${t.blur}px`,`${t.spread}px`,t.color]:[`${t.x}px`,`${t.y}px`,`${t.blur}px`,t.color]).filter(Boolean).join(" ")}function je(t,e=!0){const n=t.filter(r=>r.enabled);return n.length===0?"none":n.map(r=>ne(r,e)).join(", ")}function re(t){const e=t.match(/(rgba?\([^)]+\))/);if(e?.[1])return{color:e[1],nums:t.replace(e[1],"").trim()};const n=t.match(/(#[0-9a-fA-F]{3,8})/);return n?.[1]?{color:n[1],nums:t.replace(n[1],"").trim()}:{color:"#000000",nums:t}}function oe(t,e){if(!t||t==="none")return null;const n=t.trim(),r=e&&n.startsWith("inset"),a=r?n.slice(5).trim():n,{color:s,nums:c}=re(a),l=c.split(/\s+/).map(u=>Number.parseFloat(u)).filter(u=>!Number.isNaN(u));return e?{inset:r,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:l[3]??0,color:s}:l.length<2?null:{inset:!1,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:0,color:s}}function ve(t,e=!0){if(!t||t==="none")return[];const n=t.split(/,\s*(?![^(]*\))/),r=[];for(const a of n){const s=oe(a.trim(),e);s&&r.push({...s,enabled:!0})}return r}function Rt({value:t,onChange:e,onChangeEnd:n,disabled:r,withSpreadInset:a=!0,label:s="Shadow",testId:c="shadow-editor",recentColors:l,onAddRecentColor:u}){const p=(m,i)=>{i?B({onChange:e,onChangeEnd:n},m):N({onChange:e},m)},h=(m,i,f=!1)=>{p(t.map((g,k)=>k===m?{...g,...i}:g),f)},d=m=>{p(t.filter((i,f)=>f!==m),!0)},b=()=>{p([...t,{...a?te:ee}],!0)};return o.jsxs("div",{"data-testid":c,children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:t.length>0?4:0},children:[o.jsx("span",{style:{fontSize:9,color:v.textMuted},children:s}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${c}-add`,onClick:b,children:"+"})]}),t.map((m,i)=>{const f=m.color.startsWith("#")?m.color:Mt(m.color);return o.jsxs("div",{"data-testid":`${c}-row-${i}`,style:{marginBottom:6,padding:"4px 0",borderBottom:`1px solid ${v.border}`},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-pressed":m.enabled,"data-testid":`${c}-toggle-${i}`,onClick:()=>{r||h(i,{enabled:!m.enabled},!0)},children:m.enabled?"●":"○"}),o.jsx(Y,{testId:`${c}-color-${i}`,value:f,disabled:r,onChange:g=>h(i,{color:g}),onChangeEnd:g=>h(i,{color:g},!0),recentColors:l,onAddRecentColor:u}),a&&o.jsxs("label",{style:{display:"flex",alignItems:"center",gap:2,fontSize:8,color:v.textMuted,cursor:"pointer"},children:[o.jsx(Ft,{className:"volter-checkbox","data-testid":`${c}-inset-${i}`,checked:m.inset,disabled:r,onChange:g=>h(i,{inset:g.target.checked},!0)}),"in"]}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":`Remove ${s.toLowerCase()} ${i+1}`,"data-testid":`${c}-remove-${i}`,onClick:()=>d(i),children:"×"})]}),m.enabled&&o.jsxs("div",{style:{display:"flex",gap:4},children:[o.jsx(A,{label:"X",value:m.x,disabled:r,onChange:g=>h(i,{x:g}),onChangeEnd:g=>h(i,{x:g},!0),style:{flex:1}}),o.jsx(A,{label:"Y",value:m.y,disabled:r,onChange:g=>h(i,{y:g}),onChangeEnd:g=>h(i,{y:g},!0),style:{flex:1}}),o.jsx(A,{label:"B",value:m.blur,min:0,disabled:r,onChange:g=>h(i,{blur:Math.max(0,g)}),onChangeEnd:g=>h(i,{blur:Math.max(0,g)},!0),style:{flex:1}}),a&&o.jsx(A,{label:"S",value:m.spread,disabled:r,onChange:g=>h(i,{spread:g}),onChangeEnd:g=>h(i,{spread:g},!0),style:{flex:1}})]})]},i)})]})}function $e(t){return o.jsx(Rt,{...t,withSpreadInset:!0,testId:"box-shadow-editor",label:t.label??"Shadow"})}function we(t){return o.jsx(Rt,{...t,withSpreadInset:!1,testId:"text-shadow-editor",label:t.label??"Text Shadow"})}export{ce as A,pe as B,Y as C,te as D,me as F,be as G,ye as Q,A as S,we as T,ue as a,fe as b,qt as c,he as d,ve as e,$e as f,je as g,ge as h,Xt as i,Yt as j,de as k,Gt as l,ee as m,dt as n,Rt as o,xe as p,Vt as q,Wt as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as r}from"./jsx-runtime-DPjLkJKQ.js";import{
|
|
1
|
+
import{a as r}from"./jsx-runtime-DPjLkJKQ.js";import{b4 as m,af as n,b5 as x,b6 as $,b7 as C,aw as V}from"./index-C5ZAyrKq.js";import{r as f}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{J as E,C as N,c as A}from"./JsonAssetDocument-CvjTlcdr.js";import{AudioViewer as H}from"./AudioViewer-DESxi7pU.js";import{ImageViewer as R}from"./ImageViewer-D16OExYu.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";function k(t){const e=(t.split(/[?#]/,1)[0]??"").replace(/^\//,"");return e.startsWith("src/")&&/\.(?:[cm]?[jt]sx?)$/.test(e)}function j(t){const e=$(t);return e.editor==="model"?"model":e.editor==="image"?"image":e.editor==="audio"?"audio":e.editor==="data"?"json":e.editor==="environment"?"environment":e.format==="cube"?"lut":e.format==="glsl"||e.format==="vert"||e.format==="frag"?"shader":k(t)?"module":e.editor==="source"&&e.previewable?"text":"binary"}function b({documentId:t,assetPath:e,active:i=!0}){const[o,l]=f.useState(null),[c,u]=f.useState(null),y=e.split("/").pop()??e;return f.useEffect(()=>{let a=!1;l(null),u(null);const w=e.replace(/^\//,"");let d=0;async function h(){const g=++d;try{const s=`/__editor/source-file?path=${encodeURIComponent(w)}`,S=await fetch(s,{cache:"no-store"}).then(p=>{if(!p.ok)throw new Error(`HTTP ${p.status}`);return p.text()});!a&&g===d&&(l(S),u(null))}catch(s){!a&&g===d&&u(s instanceof Error?s.message:String(s))}}const v=C();return h(),()=>{a=!0,v()}},[e]),r.jsx(m,{documentId:t,active:i,type:"source",title:y,sections:[],status:`source · ${e}`,fill:!0,children:r.jsx("div",{style:{padding:12,height:"100%",minHeight:0,display:"flex",flexDirection:"column",gap:8},children:r.jsx("div",{style:{padding:8,flex:1,minHeight:0,display:"flex",overflow:"hidden",background:n.surface.inset,border:`1px solid ${n.boundary.default}`,borderRadius:n.shape.small},children:c!==null||o===null?r.jsx("div",{style:{fontFamily:n.typography.mono,fontSize:11,lineHeight:1.5,color:c?n.semantic.danger:n.content.muted,padding:4},children:c??"Loading…"}):r.jsx(N,{value:o,followChanges:!0,language:A(e),fontSize:11,maxHeight:"100%",ariaLabel:`Source of ${e}`})})})})}function z({documentId:t,assetPath:e,active:i}){const o=e.split("/").pop()??e;return r.jsx(m,{documentId:t,active:i,type:"source",title:o,sections:[],status:`no viewer · ${e}`,children:r.jsxs("div",{style:{padding:16,color:n.content.muted,fontSize:12},children:["No editor package in this project renders ",o,"; the file is available in the project and stays selectable and referenceable."]})})}function K({documentId:t,assetPath:e,active:i=!0}){switch(j(e)){case"model":case"environment":case"lut":case"shader":{const o=j(e);return r.jsx(x,{route:o,documentId:t,assetPath:e,displayName:e.split("/").pop()??e,active:i,whenUnregistered:r.jsx(z,{documentId:t,assetPath:e,active:i})})}case"image":return r.jsx(R,{assetPath:e});case"audio":return r.jsx(H,{assetPath:e});case"json":return r.jsx(E,{documentId:t,assetPath:e,displayName:e.split("/").pop()??e,active:i,sections:[],status:`json · ${e}`});case"module":{const o=V()?.rootPath,l=r.jsx(b,{documentId:t,assetPath:e,active:i});return o?r.jsx(x,{route:"module",documentId:t,assetPath:e,projectRoot:o,displayName:e.split("/").pop()??e,active:i,fallback:l,whenUnregistered:l}):l}case"text":return r.jsx(b,{documentId:t,assetPath:e,active:i});case"binary":return r.jsx(m,{documentId:t,active:i,type:"binary source",title:e.split("/").pop()??e,sections:[],status:`binary · ${e}`,children:r.jsxs("div",{style:{padding:16,color:n.content.muted,fontSize:12},children:[r.jsx("div",{style:{color:n.content.primary,fontWeight:600,marginBottom:6},children:e.split("/").pop()}),"This binary source is available in the project, but it has no safe in-editor renderer. Its file remains selectable and referenceable without being misidentified as another format."]})})}}export{K as SourceAssetViewer,j as sourceAssetRoute};
|