@volter/game-editor 0.5.68 → 0.5.70
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 +10941 -5080
- package/LICENSE +9 -10
- 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 +6 -6
- 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 +4026 -4026
- package/dist/assets/{AssetBudgetPanel-P2PeL_X5.js → AssetBudgetPanel-DpXsaQ6w.js} +4 -4
- package/dist/assets/AudioViewer-BdTHfNhD.js +1 -0
- package/dist/assets/{CanvasBoardDocument-BFJdTVGp.js → CanvasBoardDocument-DY-7zohc.js} +1 -1
- package/dist/assets/CanvasSceneViewport-57CEFqSM.js +1 -0
- package/dist/assets/ColorInput-Co6tCY9p.js +1 -0
- package/dist/assets/{EntityModelDocument-Du8wIbyK.js → EntityModelDocument-C-lhKrxv.js} +1 -1
- package/dist/assets/{EnvironmentAssetDocument-_SttfMY_.js → EnvironmentAssetDocument-BNe6ANTN.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-CWudWnfd.js → GameplaySessionTimeline-CryFYfYN.js} +1 -1
- package/dist/assets/ImageViewer-DiD2yIG4.js +1 -0
- package/dist/assets/{InspectorCanvasPreview-CEr_Kxna.js → InspectorCanvasPreview-BrFjhoiD.js} +1 -1
- package/dist/assets/InspectorObjectPreview-BBVO8bDT.js +1 -0
- package/dist/assets/JsonAssetDocument-xyXetSbl.js +2 -0
- package/dist/assets/{LiveModuleDocument-BWjOzO_6.js → LiveModuleDocument-BiAunjHS.js} +1 -1
- package/dist/assets/{LutAssetDocument-DIc6nsht.js → LutAssetDocument-5sW-5rb0.js} +1 -1
- package/dist/assets/{ModelAssetDocument-_CqTsX_A.js → ModelAssetDocument-Bdy7x47a.js} +1 -1
- package/dist/assets/{NonThreeAuthoringBootstrap-C-V23E1e.js → NonThreeAuthoringBootstrap-BP-1bVEr.js} +1 -1
- package/dist/assets/Object3DDocumentToolbar-CvnSLDPI.js +1 -0
- package/dist/assets/Object3DDocumentViewport-BE_OPc8T.js +2 -0
- package/dist/assets/{Object3DPreview-BPHEr3vI.js → Object3DPreview-D3w_dKrX.js} +1 -1
- package/dist/assets/OnlineAssetDetail-BnT8_p1W.js +1 -0
- package/dist/assets/PlayBar-C8Mn-EI0.js +1 -0
- package/dist/assets/{QuarksAssetDocument-4Dne3EHx.js → QuarksAssetDocument-DLMH5Csk.js} +1 -1
- package/dist/assets/ReactCanvasControls-rNz8syVB.js +1 -0
- package/dist/assets/RootSelectionOverlay-Cn2Rbr1N.js +1 -0
- package/dist/assets/{ShaderAssetDocument-W3ZjLCkt.js → ShaderAssetDocument-CsJCsNfA.js} +4 -4
- package/dist/assets/ShadowEditor-jB05hr1W.js +1 -0
- package/dist/assets/{SourceAssetViewer-BGUeDAEv.js → SourceAssetViewer-D0NgGrER.js} +1 -1
- package/dist/assets/StageHost-B3Yt4I7r.js +2 -0
- package/dist/assets/{StoryPreviewMount-Di8uMovM.js → StoryPreviewMount-CzzRn24c.js} +1 -1
- package/dist/assets/ThreeBoardDocument-BoHTN4Vl.js +2 -0
- package/dist/assets/{ThreeIsolationSceneContent-BAKurKW5.js → ThreeIsolationSceneContent-BM-0S6J5.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-CffvGJ1h.js → ToolObject3DPreview-BeM_kx_u.js} +1 -1
- package/dist/assets/Toolbar-BZyog9MR.js +1 -0
- package/dist/assets/{TransientHint-CgmkrmKF.js → TransientHint-RJEkOJoy.js} +1 -1
- package/dist/assets/VideoViewer-CxajgKrf.js +1 -0
- package/dist/assets/ViewportShadingMenu-S2lADFJg.js +1 -0
- package/dist/assets/active-ingest-CjZtqL7Q.js +3 -0
- package/dist/assets/{animation-clock-fLmY_3--.js → animation-clock-CWVW-mqY.js} +1 -1
- package/dist/assets/animation-mixers.service-CpoYw8cs.js +1 -0
- package/dist/assets/animation-timeline.utility-CEerojaB.js +1 -0
- package/dist/assets/{asset-budget-asset.menu-BDRDWrvx.js → asset-budget-asset.menu-Bk6scVWQ.js} +1 -1
- package/dist/assets/{asset-budget.action-tQmNGQHC.js → asset-budget.action-DtBDSfDj.js} +1 -1
- package/dist/assets/{asset-budget.document-BthgX37Z.js → asset-budget.document-R2zyoJ8E.js} +1 -1
- package/dist/assets/{asset-budget.menu-DfyWVH6p.js → asset-budget.menu-D6jza5Bc.js} +1 -1
- package/dist/assets/asset-editor-persistence-DrgwOZIW.js +1 -0
- package/dist/assets/asset-loaders-CUeYIjeH.js +2 -0
- package/dist/assets/{asset-preview-Cv7tfD98.js → asset-preview-CQfnI2cX.js} +1 -1
- package/dist/assets/{audio-unlock.service-BvHvZjzx.js → audio-unlock.service-W3UBKsw9.js} +1 -1
- package/dist/assets/audio.utility-qrXBdGXg.js +1 -0
- package/dist/assets/autoplay.service-DQD3Swo9.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-Cg5ALSpr.js → babylon-authoring-adapter-CS9LZNmz.js} +1 -1
- package/dist/assets/binding-resolver-B9VI52zt.js +2 -0
- package/dist/assets/blender-emscripten-engine-Cd6az4pU.js +2 -0
- package/dist/assets/{blender-node-editor.document-B92MO51u.js → blender-node-editor.document-BWLFvA2g.js} +1 -1
- package/dist/assets/{blender-properties-tab-CDVyDAbf.js → blender-properties-tab-BSmWG9d0.js} +1 -1
- package/dist/assets/{blender-runtime-host-CuniE0sy.js → blender-runtime-host-Cbkie7m4.js} +2 -2
- package/dist/assets/{blender-runtime-skin-B_tOz5j5.js → blender-runtime-skin-C_ATCb-z.js} +7 -7
- package/dist/assets/{blender-runtime.document-DxUwLiEW.js → blender-runtime.document-P9zdgwMt.js} +7 -7
- package/dist/assets/{blender-timeline.document-BdEEoQbK.js → blender-timeline.document-DRwySEJO.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-EMSUlRh4.js → blender-uv-editor.document-CmLoL2Vo.js} +1 -1
- package/dist/assets/blender-version.status-CP4Jqkry.js +1 -0
- package/dist/assets/blender-wali-engine-CZcS3eAd.js +2 -0
- package/dist/assets/{blender.command-BkBML2SY.js → blender.command-BYGm0Q_s.js} +1 -1
- package/dist/assets/blender.status-BMETIbb2.js +1 -0
- package/dist/assets/board-guides-BG-MHK2G.js +1 -0
- package/dist/assets/body-marks-C1LxJtQb.js +1 -0
- package/dist/assets/{bridge.command-VnplZ81v.js → bridge.command-DpUNErKN.js} +3 -3
- package/dist/assets/{browserAll-BCmkqg8n.js → browserAll-DES3i79H.js} +1 -1
- package/dist/assets/{build-player.document-DV7YcJQt.js → build-player.document-B42HrdSU.js} +1 -1
- package/dist/assets/build-profiles.document-Di5CQoH9.js +2 -0
- package/dist/assets/build-progress.status-B4te7-3j.js +1 -0
- package/dist/assets/{build-session-BGe0eGrQ.js → build-session-Yw4JoE8T.js} +2 -2
- package/dist/assets/{build.action-Bdj4ZEL_.js → build.action-B-DBpUj6.js} +1 -1
- package/dist/assets/{build.command-DAWiYvPa.js → build.command-CfWoHNp0.js} +1 -1
- package/dist/assets/build.header-BaURztYD.js +1 -0
- package/dist/assets/{build.menu-BiRNC_xc.js → build.menu-BFBn-dPJ.js} +1 -1
- package/dist/assets/{build.service-Dw9K6VSF.js → build.service-D8gYWB3n.js} +1 -1
- package/dist/assets/{camera-C-qXzXFf.js → camera-C-uR_xQp.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-BDrwWRlU.js → camera-runtime.inspector-BOGGEqVq.js} +1 -1
- package/dist/assets/{canvas-design-mount-DLn49Zle.js → canvas-design-mount-DamLAaWn.js} +4 -4
- package/dist/assets/canvas-entry-runtime-a6N7Rsrj.js +2 -0
- package/dist/assets/{canvas-preview-frames-B5xFRjhQ.js → canvas-preview-frames-XbrKuyJu.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-DQ_leYyi.js → canvas-story-capture.service-DYRdEzkG.js} +2 -2
- package/dist/assets/capability-coverage-7wKVA3PF.js +7 -0
- package/dist/assets/{collaboration-presence-BOS1t8wI.js → collaboration-presence-DaVKEfxs.js} +1 -1
- package/dist/assets/{collider-Bf4Uk6LW.js → collider-BEwlgkG5.js} +1 -1
- package/dist/assets/component-board.service-BWSBM2Bb.js +2 -0
- package/dist/assets/{component-board.service-DFSSCaCf.js → component-board.service-C9ZouakC.js} +2 -2
- package/dist/assets/{component-board.service-CpVXGhz5.js → component-board.service-D2eGKqHf.js} +2 -2
- package/dist/assets/component-contracts.service-D0uElctD.js +1 -0
- package/dist/assets/component-instance-root-C1Xf4SwR.js +1 -0
- package/dist/assets/{component-verbs.command-DGzZAV_Z.js → component-verbs.command-N-Tj8KOS.js} +1 -1
- package/dist/assets/{component-verbs.service-D1rVRogp.js → component-verbs.service-CWh4mQ7X.js} +1 -1
- package/dist/assets/{config-D-EAAhqP.js → config-hmmj-QHZ.js} +4 -4
- package/dist/assets/{configurations-_HZOWZPy.js → configurations-B9Pi_eRN.js} +1 -1
- package/dist/assets/connection.status-C2HPxoww.js +1 -0
- package/dist/assets/{constraint-5KLYpGm7.js → constraint-Bp1l8hY-.js} +1 -1
- package/dist/assets/constraints.inspector-D-h1f3K2.js +1 -0
- package/dist/assets/{content-bounds-DKBD7nsv.js → content-bounds-7UyI42Vj.js} +1 -1
- package/dist/assets/{contract-system-adapters-h6OUBRYA.js → contract-system-adapters-Bq1LGdjs.js} +1 -1
- package/dist/assets/coverage.service-BiBikIsV.js +3 -0
- package/dist/assets/{create-runtime-Bg2uYMfh.js → create-runtime-Cx-q5z2y.js} +2 -2
- package/dist/assets/curve-Co_mro-I.js +1 -0
- package/dist/assets/{data-asset-7Nfmx-28.js → data-asset-Ckx4D_U_.js} +1 -1
- package/dist/assets/data-check-core-CHqar_E8.js +1 -0
- package/dist/assets/data-ref-70PUrMuT.js +1 -0
- package/dist/assets/debug-bridge-CarsgKpm.js +1 -0
- package/dist/assets/debug-registry-DgYNlhH_.js +1 -0
- package/dist/assets/{deferred-ingest-play-Bej67_y9.js → deferred-ingest-play-Bpdhu2i-.js} +2 -2
- package/dist/assets/{design-time-canvas-mount-CFW9ZWuk.js → design-time-canvas-mount-Ca9Q75Ui.js} +2 -2
- package/dist/assets/design-time-layers-BIb71snu.js +1 -0
- package/dist/assets/{design-time-mount.service-DJeAPUB_.js → design-time-mount.service-DL6ZK2TQ.js} +2 -2
- package/dist/assets/{design-time-mount.service-_R1UDCw3.js → design-time-mount.service-zKUVjKAu.js} +2 -2
- package/dist/assets/design-time-react-mount-NrWimSxY.js +1 -0
- package/dist/assets/{document-preview-three-5cbuuJMH.js → document-preview-three-DoDs6q1q.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-CoESNvrM.js → dom-authoring-adapter-adLQog9l.js} +1 -1
- package/dist/assets/{draco3d-Sk9K4AUT.js → draco3d-aUvQF1Zx.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-CH6J-8N7.js → edit-mode-audio.service-CHZ1ultu.js} +1 -1
- package/dist/assets/edit-mode-authoring-ZQuUwc6e.js +1 -0
- package/dist/assets/{edit-mode-networking.service-C4o2pGHX.js → edit-mode-networking.service-C7fk2fL1.js} +1 -1
- package/dist/assets/editor-api-C8MUOrwt.js +1 -0
- package/dist/assets/{editor-layers-B4oYfpj8.js → editor-layers-CGX7iCSP.js} +1 -1
- package/dist/assets/editor-presentation-activity-CqJH4G9t.js +1 -0
- package/dist/assets/{editor-shell-store-Bh1S7M54.js → editor-shell-store-BRqB1JZO.js} +1 -1
- package/dist/assets/{entity-object-B_5Gc0Ky.js → entity-object--ZpqIat7.js} +1 -1
- package/dist/assets/{extend-DcEyE5jI.js → extend-BZQIQ18F.js} +1 -1
- package/dist/assets/{fork-menu-CKjNh3MO.js → fork-menu-CziehkPx.js} +1 -1
- package/dist/assets/{frame-debugger-store-D5YViF_8.js → frame-debugger-store-BOQjrPsh.js} +1 -1
- package/dist/assets/game-audio-BeCyd0Ha.js +1 -0
- package/dist/assets/{game-contract-seams-C0AVYwvO.js → game-contract-seams-Dgqv6S8X.js} +1 -1
- package/dist/assets/{game-css-scope-transform-8GOvVu1s.js → game-css-scope-transform-anfk8vP_.js} +2 -2
- package/dist/assets/game-document.service-CqmgrRUA.js +1 -0
- package/dist/assets/game-eval.command-CoetFm6_.js +2 -0
- package/dist/assets/game-module-access-Cg1EB8Mx.js +1 -0
- package/dist/assets/game-network-BqI-Ehz0.js +22 -0
- package/dist/assets/{gameplay-export-K5AcStVC.js → gameplay-export-D0hZoeSg.js} +1 -1
- package/dist/assets/gameplay-replay-BHz6VAVa.js +1 -0
- package/dist/assets/{gameplay.command-DoWqBWhH.js → gameplay.command-CPc9GKuW.js} +1 -1
- package/dist/assets/generation-CdOATubd.css +1 -0
- package/dist/assets/{generation-jobs-CiabIfR0.js → generation-jobs-D-zXQNZI.js} +1 -1
- package/dist/assets/generation.service-Bwt9lQEG.js +1 -0
- package/dist/assets/{generations-DU9rCeQR.js → generations-d-U9lCVo.js} +1 -1
- package/dist/assets/generations.status-BQ8xhaLN.js +1 -0
- package/dist/assets/hierarchy-marks-CndAXtie.js +1 -0
- package/dist/assets/hierarchy-marks-CsTaTkc7.js +1 -0
- package/dist/assets/hosted-asset-materialization-r2vKfJGY.js +2 -0
- package/dist/assets/{ibl-override-material-CiKkaOTW.js → ibl-override-material-CMo_a49U.js} +1 -1
- package/dist/assets/index-BMxv2MNV.js +1 -0
- package/dist/assets/index-BPVnvJfX.js +1 -0
- package/dist/assets/{index-C4AUQbmq.js → index-BqzpzjSB.js} +1 -1
- package/dist/assets/{index-CC1puVjo.js → index-CMU7lnXk.js} +1 -1
- package/dist/assets/index-CPiRKiDC.css +1 -0
- package/dist/assets/{index-CaG87ZF-.js → index-Cr9NTnJp.js} +271 -270
- package/dist/assets/index-DSMLYme2.js +1 -0
- package/dist/assets/index-DoGlzvsX.js +1 -0
- package/dist/assets/{index-BsYc2Oyj.js → index-dlvCCB72.js} +1 -1
- package/dist/assets/{index-Kb9_s5aP.js → index-xjc_62Ha.js} +1 -1
- package/dist/assets/{index-C20Flc1s.js → index-z0_InXxO.js} +2 -2
- package/dist/assets/{inference-diagnostics-MGcIHEX6.js → inference-diagnostics-D5jfxI5p.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-D2okO6JI.js → ingest-boot-viewport-Be0v44yf.js} +1 -1
- package/dist/assets/ingest-siblings-BowXSozE.js +1 -0
- package/dist/assets/ingest-source-persistence-BGIvThcv.js +1 -0
- package/dist/assets/ingest.service-wVm-ZcTI.js +1 -0
- package/dist/assets/{inspect-C8RP8G5F.js → inspect-CN92MgRT.js} +1 -1
- package/dist/assets/inspection-D8fZOHCM.js +1 -0
- package/dist/assets/instances.command-B6gJuL1Z.js +1 -0
- package/dist/assets/{json-history-resource-CTXRV4GD.js → json-history-resource-C9G_vCX9.js} +1 -1
- package/dist/assets/{layered-pick-B_-BRrRD.js → layered-pick-D9tIz_m7.js} +1 -1
- package/dist/assets/{light-CskDQ8gF.js → light-BGbl1a8K.js} +1 -1
- package/dist/assets/{live-project-verbs-BOAQN3ME.js → live-project-verbs-p1sdTwhF.js} +1 -1
- package/dist/assets/{machine.document-BxOoCOo9.js → machine.document-C1acXU7l.js} +1 -1
- package/dist/assets/{machines.finder-CqEceWzS.js → machines.finder-sOxNTYPx.js} +1 -1
- package/dist/assets/material-D7289cYI.js +1 -0
- package/dist/assets/{material-factory-qB9pzcQf.js → material-factory-D0T-DH8c.js} +1 -1
- package/dist/assets/{mesh-5--4qA-C.js → mesh-1A-HHxD6.js} +1 -1
- package/dist/assets/model-asset-sections-D1uxOu2v.css +1 -0
- package/dist/assets/model-asset-sections.service-DF-mllTL.js +1 -0
- package/dist/assets/{model-inspection-MrJY0U_-.js → model-inspection-CuVwNVvv.js} +1 -1
- package/dist/assets/{model-thumbnail-uk-2sblh.js → model-thumbnail-xm1Fabi2.js} +1 -1
- package/dist/assets/{models.finder-rk8dhgO8.js → models.finder-DrvU1qGk.js} +1 -1
- package/dist/assets/module-mode-BHOAAbgO.js +2 -0
- package/dist/assets/mount-canvas-ingest-root-aVZkVNh4.js +2 -0
- package/dist/assets/mount-dom-ingest-root-eOOGPaxi.js +2 -0
- package/dist/assets/{mount-ingest-root-BC3-1Cw1.js → mount-ingest-root-BsWbEvr_.js} +2 -2
- package/dist/assets/{mount-manifest-QJOB11Kv.js → mount-manifest-t6ipNsoF.js} +1 -1
- package/dist/assets/mount-readiness-DyAd17pe.js +4 -0
- package/dist/assets/mount-three-ingest-root-DIR0wKrN.js +1 -0
- package/dist/assets/{mounted-authoring-B7RL_V28.js → mounted-authoring-DX3DC9PJ.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-CnYhX3vW.js → mounted-story-viewport-source-D8FqGpci.js} +1 -1
- package/dist/assets/{native-debug-module-B-rWJfWE.js → native-debug-module-CB738yQu.js} +1 -1
- package/dist/assets/{navigation-BVu-aVmF.js → navigation-B9ihB0qU.js} +1 -1
- package/dist/assets/{navmesh.menu-C3M63eR4.js → navmesh.menu-CPxr9LPT.js} +1 -1
- package/dist/assets/{navmesh.service-B0H1fUfn.js → navmesh.service-BAtili_Y.js} +1 -1
- package/dist/assets/network-observer.service-CqTuZNtI.js +1 -0
- package/dist/assets/network.utility-CclYEmfV.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-BWeuL0nf.js} +2 -2
- package/dist/assets/{oid-transform-Bzc2ZJSH.js → oid-transform-BYeAsBKI.js} +1 -1
- package/dist/assets/{particles-Be7AvO4c.js → particles-BXiQDiB-.js} +1 -1
- package/dist/assets/{performance-profiler-OwnXQX0M.js → performance-profiler-CMbwGBuk.js} +1 -1
- package/dist/assets/pixi-authoring-adapter-CPsN0Yk7.js +1 -0
- package/dist/assets/pixi-live-write-target-BUbt5ixX.js +1 -0
- package/dist/assets/{play.command-CIGRq8ow.js → play.command-Bz5Ra6Uj.js} +2 -2
- package/dist/assets/pose-guard-CLabLSzf.js +1 -0
- package/dist/assets/presentation-C7ZHYsKF.js +1 -0
- package/dist/assets/{product-BN31wSnB.js → product-MSpbAqgo.js} +1 -1
- package/dist/assets/{profiler.action-D57Kj9ym.js → profiler.action-1Jbc-7Q4.js} +1 -1
- package/dist/assets/{profiler.menu-Dh9Q5DDx.js → profiler.menu-C544DxWZ.js} +1 -1
- package/dist/assets/profiler.utility-QnzedS3X.js +1 -0
- package/dist/assets/{project-authoring-session-LCJAwGrD.js → project-authoring-session-BhNfg7TY.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-DRCPfugt.js} +1 -1
- package/dist/assets/{properties-bone.inspector-D2fcQGMF.js → properties-bone.inspector-CYHeZX0p.js} +1 -1
- package/dist/assets/{properties-collection.inspector-CF5AtTAd.js → properties-collection.inspector-DtGhPkiU.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-Bj2itDrS.js → properties-constraints.inspector-TIyIV777.js} +1 -1
- package/dist/assets/{properties-data.inspector-BfRqk0Xo.js → properties-data.inspector-vA0MTaup.js} +1 -1
- package/dist/assets/{properties-material.inspector-Bf8H0mvu.js → properties-material.inspector-C73spBQh.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-BKShc1TH.js → properties-modifiers.inspector-9oyLBBE0.js} +1 -1
- package/dist/assets/{properties-object.inspector-YBh8ABnN.js → properties-object.inspector-7BuiUgbd.js} +1 -1
- package/dist/assets/{properties-output.inspector-CVkzfs-l.js → properties-output.inspector-CjYAggz2.js} +1 -1
- package/dist/assets/{properties-particles.inspector-ChDpAq-2.js → properties-particles.inspector-DpSfjykX.js} +1 -1
- package/dist/assets/{properties-physics.inspector-BLEM7aMj.js → properties-physics.inspector-BUTvmfU9.js} +1 -1
- package/dist/assets/{properties-render.inspector-vU4D9xLL.js → properties-render.inspector-CEdsDqbI.js} +1 -1
- package/dist/assets/{properties-scene.inspector-C-DoN-kL.js → properties-scene.inspector-4kp0sLNw.js} +1 -1
- package/dist/assets/{properties-texture.inspector-DySxy1oU.js → properties-texture.inspector-Ckpqy9eo.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-DEKxMahJ.js → properties-view-layer.inspector-CQIFbY8-.js} +1 -1
- package/dist/assets/{properties-world.inspector-m5qL_TQV.js → properties-world.inspector-xZgNV6rI.js} +1 -1
- package/dist/assets/r3f-design-session-D8VF-hty.js +2 -0
- package/dist/assets/{r3f-physics-binding-Bgzzd4ol.js → r3f-physics-binding-oippu1v_.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-C8oMjdTL.js → r3f-source-authoring-adapter-CZJX6VLM.js} +1 -1
- package/dist/assets/react-canvas-navigation-DuzvnFoN.js +1 -0
- package/dist/assets/react-inspector.service-CV4p6nrb.js +1 -0
- package/dist/assets/react-story-board-mhldts6w.js +1 -0
- package/dist/assets/{react-three-rapier.esm-BR2ttgLS.js → react-three-rapier.esm-Bo9LjrZe.js} +1 -1
- package/dist/assets/react-world-authoring-adapter-CuyruDfq.js +1 -0
- package/dist/assets/{realm-services-DefTrXnY.js → realm-services-BtiLE3a-.js} +1 -1
- package/dist/assets/reflection-probe-capture.inspector-mrrOHs-9.js +1 -0
- package/dist/assets/{reflection-probe-BHNGwVyz.js → reflection-probe-sIto9mh0.js} +1 -1
- package/dist/assets/registry-DpUr2YIM.js +1 -0
- package/dist/assets/{relative-import-specifier-DQzkawgj.js → relative-import-specifier-CyT6yU4l.js} +1 -1
- package/dist/assets/{render-env-BZ7LsGfk.js → render-env-C63BGT5v.js} +1 -1
- package/dist/assets/{render-features-C7QwmhCo.js → render-features-CBl6rom9.js} +1 -1
- package/dist/assets/{render-settings-BBvkacR3.js → render-settings-DjarlnjI.js} +1 -1
- package/dist/assets/resolve-three-OiswFiIS.js +702 -0
- package/dist/assets/root-seam-contract-BYLQx4CQ.js +1 -0
- package/dist/assets/{run-selection-BUeubtHj.js → run-selection-BMu0v3qC.js} +1 -1
- package/dist/assets/scene-capture-BLf3lJ44.js +1 -0
- package/dist/assets/scene-document.service-CjPDph5k.js +2 -0
- package/dist/assets/{scene-framing-PVMqGU8h.js → scene-framing-BhNk0WhI.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-DmdE0u-C.js +1 -0
- package/dist/assets/{session-CTXsU1lK.js → session-CeyQA0Dv.js} +35 -35
- package/dist/assets/{setup-renderer-OOw1SykJ.js → setup-renderer-Bf8g2S0f.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-RmutT5Dt.js → source-object3d-authoring-adapter-IDRws2Nk.js} +1 -1
- package/dist/assets/{source-persistence-backend-HviqjKZ2.js → source-persistence-backend-Dzc6MsmN.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-CpnIYiph.js} +1 -1
- package/dist/assets/stage-overlay-set-BrJzOTCe.js +1 -0
- package/dist/assets/stage-presence-markers-BFTl9Djp.js +1 -0
- package/dist/assets/stage-transform-tools-QaenmSrC.js +1 -0
- package/dist/assets/standard-viewport-dressing-DuKH01r4.js +24 -0
- package/dist/assets/{state-watch.action-DEdb1mNa.js → state-watch.action-BaRZ6YII.js} +1 -1
- package/dist/assets/{state-watch.menu-jWbUM3kw.js → state-watch.menu-DR2AtQ6r.js} +1 -1
- package/dist/assets/state-watch.utility-VW8H9Fgi.js +1 -0
- package/dist/assets/{story-capture-Dj1xkeKH.js → story-capture-BEVV48wm.js} +1 -1
- package/dist/assets/story-documents-DndjqJ7Y.js +3 -0
- package/dist/assets/{story-documents.service-BzQCuNBu.js → story-documents.service-CPrZ7gRM.js} +1 -1
- package/dist/assets/{story-documents.service-iNP-ORNr.js → story-documents.service-wCVmBPhh.js} +1 -1
- package/dist/assets/{story-media-presence-zTPlU9HR.js → story-media-presence-BSX78yVJ.js} +1 -1
- package/dist/assets/{story-pixi-preview-B7THvSl7.js → story-pixi-preview-D4FuH7lJ.js} +1 -1
- package/dist/assets/{story-presentation-BLXYPadR.js → story-presentation-2AxtnKGb.js} +1 -1
- package/dist/assets/story-three-preview-DjObHSAF.js +2 -0
- package/dist/assets/{structural-ids-Br2zjINh.js → structural-ids-BOo2BRoY.js} +1 -1
- package/dist/assets/studio-environment-B--4k2mN.js +2 -0
- package/dist/assets/{surface-state-D9j6qNu8.js → surface-state-CQHVfsma.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-BTnsMOvH.js → syntactic-prop-specs-CewRyC4c.js} +1 -1
- package/dist/assets/team-playtest.service-B9m6CNk7.js +1 -0
- package/dist/assets/{three-oYrcK5SQ.js → three-B86IzdNg.js} +1 -1
- package/dist/assets/three-authoring-adapter-BD8_MtYK.js +1 -0
- package/dist/assets/three-authoring.service-BjJ9wetk.js +2 -0
- package/dist/assets/{three-ingest-runtime-CXKjNysA.js → three-ingest-runtime-CXySzulx.js} +1 -1
- package/dist/assets/{three-integration-CuAnYaTW.js → three-integration-nl5TC6EF.js} +2 -2
- package/dist/assets/three-integration.service-BEk5QkKM.js +1 -0
- package/dist/assets/three-projection-core-D4m8lsPU.js +1 -0
- package/dist/assets/{three-state-wXRU3rLr.js → three-state-C36FeFK4.js} +1 -1
- package/dist/assets/{three-story-capture.service-DMJRcqjr.js → three-story-capture.service-C0icETyL.js} +2 -2
- package/dist/assets/{three-story-model-DgiAP-oQ.js → three-story-model-CqWu9S2a.js} +1 -1
- package/dist/assets/three-viewport-presentation-CCMgGLI2.js +141 -0
- package/dist/assets/tools-BnE3UWVA.js +1 -0
- package/dist/assets/transform-mode-request-CIgYj1Qb.js +1 -0
- package/dist/assets/transport-strip-B1AJKpn-.js +1 -0
- package/dist/assets/transport.header-D-n6dQ5n.js +1 -0
- package/dist/assets/{trigger-volume-DP0G1VBe.js → trigger-volume-BLkHmfm9.js} +1 -1
- package/dist/assets/tuples-uyiMYXrv.js +1 -0
- package/dist/assets/ui-board-document-6e4w4a8B.js +2 -0
- package/dist/assets/{user-data-CqOoAowZ.js → user-data-BXFD1jg-.js} +1 -1
- package/dist/assets/user-data-CODoGZqA.js +1 -0
- package/dist/assets/{utility-view-state-Db97zwDz.js → utility-view-state-I_o0WThv.js} +1 -1
- package/dist/assets/viewport-door-AsLxGhLN.js +1 -0
- package/dist/assets/{viewport-root-presentation-B35t51xX.js → viewport-root-presentation-B1qtThOB.js} +1 -1
- package/dist/assets/{viewport-surface-status-D5kZtFW5.js → viewport-surface-status-CWmQeKTO.js} +1 -1
- package/dist/assets/{webworkerAll-CfKEb4Ao.js → webworkerAll-DC445ANd.js} +1 -1
- package/dist/assets/worker-jepHAPPr.js +2 -0
- package/dist/assets/workspace-arrangement-dkubzCff.js +1 -0
- package/dist/assets/world-documents-psBK5u_2.js +1 -0
- package/dist/assets/world-root-stage-binding-BrvO8VMz.js +1 -0
- package/dist/assets/{xstate-animation-binding-aQEmNSpm.js → xstate-animation-binding-ChVFHSlM.js} +1 -1
- package/dist/assets/{xstate-animation-meta-CnMX1Sc1.js → xstate-animation-meta-D7xnhyCE.js} +1 -1
- package/dist/volter-shared-react.json +10 -0
- package/dist/volter-shared-three.json +3 -0
- package/dist-node/cli.js +247 -209
- package/dist-node/create.js +90 -74
- 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 -18
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +25 -25
- package/template/DEVLOG.md +1 -1
- package/template/IDIOMS.md +3 -3
- package/template/LICENSE +3 -3
- package/template/README.md +12 -13
- package/template/check-idioms.ts +71 -95
- package/template/manifest-entry-modules-plugin.ts +17 -4
- package/template/package.json +13 -15
- package/template/server/colyseus-setup.ts +1 -9
- package/template/server/main.ts +4 -9
- package/template/server/rooms/arena-room.ts +10 -10
- package/template/server/rooms/game-room.ts +10 -10
- package/template/server/rooms.ts +3 -5
- 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/net/NetworkedPlayers.tsx +3 -3
- 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 +12 -12
- 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-eval.command-4wa9vqWE.js +0 -2
- 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/template/server/loopback.ts +0 -76
- /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
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CMU7lnXk.js","assets/extends-CF3RwP-h.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/client-DNXj_opT.js","assets/index-CinJrH5C.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/events-156d8d12.esm-CYeuVCYr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-bQE2NA0D.js","assets/Gltf-GjdUJfpn.js","assets/BufferGeometryUtils-FJZNEiJN.js","assets/OrthographicCamera-QGDXU8-_.js","assets/Fbo-BwAOPGSM.js","assets/PerspectiveCamera-CzyDwUe8.js","assets/OrbitControls-DqeA2OK1.js","assets/index-Cr9NTnJp.js","assets/index-CtzuWnCS.js","assets/index-FUuS4qwW.js","assets/index-CPiRKiDC.css","assets/RoundedBox-DrJK5JOI.js","assets/babylon-authoring-adapter-CS9LZNmz.js","assets/json-history-resource-C9G_vCX9.js","assets/source-persistence-backend-Dzc6MsmN.js","assets/ingest-source-persistence-BGIvThcv.js","assets/pixi-authoring-adapter-CPsN0Yk7.js","assets/index-z0_InXxO.js","assets/component-instance-root-C1Xf4SwR.js","assets/user-data-BXFD1jg-.js","assets/workspace-arrangement-dkubzCff.js","assets/pixi-transform-channels-P4rvmusc.js","assets/pixi-live-write-target-BUbt5ixX.js","assets/canvas-entry-runtime-a6N7Rsrj.js","assets/debug-registry-DgYNlhH_.js","assets/mount-ingest-root-BsWbEvr_.js","assets/active-ingest-CjZtqL7Q.js","assets/game-contract-seams-Dgqv6S8X.js","assets/capability-coverage-7wKVA3PF.js","assets/contract-system-adapters-Bq1LGdjs.js","assets/three-state-C36FeFK4.js","assets/editor-shell-store-BRqB1JZO.js","assets/output-pass-HurwNl0G.js","assets/Pass-D1MRT672.js","assets/editor-layers-CGX7iCSP.js","assets/entity-object--ZpqIat7.js","assets/three-contract-Dkt6PmWY.js","assets/module-mode-BHOAAbgO.js","assets/binding-resolver-B9VI52zt.js","assets/native-debug-module-CB738yQu.js","assets/native-entry-surface-BE8LJNdu.js","assets/adapter-surface-Y37Nzcyw.js","assets/structural-signature-Dc7skRiy.js","assets/webgl-frame-capture-DdJkM2mi.js","assets/realm-services-BtiLE3a-.js","assets/three-ingest-runtime-CXySzulx.js","assets/EffectComposer-BEAt0PtQ.js","assets/CopyShader-BzTUYzf6.js","assets/ShaderPass-DTnDQXm0.js","assets/CSS3DRenderer-BsAqfavI.js","assets/relative-path-guard-GiM7Lsz8.js","assets/react-root-BHA-cdrW.js","assets/mount-manifest-t6ipNsoF.js","assets/create-runtime-Cx-q5z2y.js","assets/binding-Bmxqznjk.js","assets/root-stacking-BEd9ZvxC.js","assets/assets-BcrMQHRv.js","assets/loader-BTUKnX5Q.js","assets/KTX2Loader-CaqVE6nY.js","assets/GLTFLoader-KeoruJgS.js","assets/BufferGeometryUtils-B22h7jo4.js","assets/setup-renderer-Bf8g2S0f.js","assets/index-DHhMOs_s.js","assets/defaults-DKiBJCPN.js","assets/render-settings-DjarlnjI.js","assets/render-features-CBl6rom9.js","assets/seeded-random-DmdE0u-C.js","assets/loop-gate-report-N52EWFGD.js","assets/system-slot-E2mEdiih.js","assets/user-data-CODoGZqA.js","assets/object-marks-BnvSuCTt.js","assets/performance-profiler-CMbwGBuk.js","assets/debug-bridge-CarsgKpm.js","assets/index-OZVqp6xS.js","assets/index-Da9JhEvW.js","assets/game-audio-BeCyd0Ha.js","assets/rapier-physics-adapter-CaZqWLu0.js","assets/live-project-verbs-p1sdTwhF.js","assets/edit-mode-authoring-ZQuUwc6e.js","assets/editor-presentation-activity-CqJH4G9t.js","assets/pixi-story-model-DNkfnWUV.js","assets/surface-content-Dg9Kkazf.js","assets/viewport-root-presentation-B1qtThOB.js","assets/mounted-authoring-DX3DC9PJ.js","assets/three-B86IzdNg.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/three-authoring-adapter-BD8_MtYK.js","assets/three-projection-core-D4m8lsPU.js","assets/body-marks-C1LxJtQb.js","assets/structural-ids-BOo2BRoY.js","assets/object3d-authoring-subject-XccsO0xG.js","assets/r3f-physics-binding-oippu1v_.js","assets/deferred-ingest-play-Bpdhu2i-.js","assets/rrweb-Cd2ifIRP.js","assets/react-world-authoring-adapter-CuyruDfq.js","assets/board-guides-BG-MHK2G.js","assets/relative-import-specifier-CyT6yU4l.js","assets/story-arg-descriptors-Ek86ExX7.js","assets/inspect-CN92MgRT.js","assets/inference-diagnostics-D5jfxI5p.js","assets/writer-tw6EcuVO.js","assets/viewport-door-AsLxGhLN.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{u as An,p as Ar,S as Ir}from"./index-OZVqp6xS.js";import{decode as Q,encode as xr}from"./index-Da9JhEvW.js";import{Q as At,Z as In,Y as Rr,_ as $,e1 as xn,bA as Cr,p as Rn,M as Or,h3 as kr,m6 as Dr,m7 as Nr,m4 as Fr,m8 as jr,m9 as Br,bH as $r,bI as Gr,X as Cn,ma as On,bB as zr,bC as Ur,bE as kn,mb as Vr,V as Wr,mc as qr,bD as Hr,O as M,r as P,jb as Dn,md as Kr,me as Yr,mf as Jr,mg as X,aj as Xr,l8 as Nn,ah as Qr,bu as Me,jx as Zr,mh as es,at as Fn,mi as ts,aw as Xe,y as jn,aa as Ae,ko as Kt,mj as Bn,mk as $n,ml as Gn,kF as zn,hc as Un,q as ns,ku as rs,mm as ss,mn as os,mo as is,mp as as,mq as ls,gV as cs,go as us,aA as ds,bt as Vn,mr as fs,ms as Wn,m0 as ps,g4 as gs,bm as hs,bn as ms,e3 as ys,gQ as ws,mt as vs,gx as bs,ft as Ls}from"./index-Cr9NTnJp.js";import{i as Es,b as Ss}from"./native-debug-module-CB738yQu.js";import{T as Ie,c as _s,g as Ms}from"./seeded-random-DmdE0u-C.js";import{g as Qe,D as K}from"./debug-registry-DgYNlhH_.js";import{o as Ts}from"./game-audio-BeCyd0Ha.js";import{createRapierBodyEditing as Ps}from"./rapier-physics-adapter-CaZqWLu0.js";import{_ as As}from"./events-156d8d12.esm-CYeuVCYr.js";import{fo as Ve,dp as gt}from"./three.core-3arARmh6.js";import{b as qn,p as Hn}from"./live-project-verbs-p1sdTwhF.js";import{B as Yt}from"./edit-mode-authoring-ZQuUwc6e.js";import{p as Kn,c as Is}from"./json-history-resource-C9G_vCX9.js";import{b as Yn}from"./binding-resolver-B9VI52zt.js";import{i as xs,s as Rs}from"./editor-presentation-activity-CqJH4G9t.js";import{E as Jn,$ as Cs,a0 as Os,G as Xn,B as ht,l as We,a1 as ks,g as Ds}from"./active-ingest-CjZtqL7Q.js";import{m as Ns}from"./pixi-story-model-DNkfnWUV.js";import{t as Fs,d as js}from"./surface-content-Dg9Kkazf.js";import{p as Bs,l as $s}from"./viewport-root-presentation-B1qtThOB.js";import{assertNever as Gs}from"./adapter-surface-Y37Nzcyw.js";import{r as zs,o as Us,s as Vs}from"./three-authoring-adapter-BD8_MtYK.js";import{t as It}from"./three-contract-Dkt6PmWY.js";import{mountDeferredIngestForPlay as Ws,exitDeferredIngestPlay as qs}from"./deferred-ingest-play-Bpdhu2i-.js";import{r as se}from"./rrweb-Cd2ifIRP.js";import{R as Hs,w as Ks}from"./react-world-authoring-adapter-CuyruDfq.js";import{o as Ys}from"./three-state-C36FeFK4.js";import{p as Js}from"./viewport-door-AsLxGhLN.js";async function Xs(t){try{const e=await fetch(`${At}/log-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"start",...t?{name:t}:{}})});return(await Rr(e,"Could not start a play log session")).file}catch{return null}}async function Qs(){try{const t=await fetch(`${At}/log-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"end"})});In(t,"Could not end the play log session")}catch{}}async function Qn(t){if(t.length===0)return!0;try{const e=await fetch(`${At}/log-entries`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({entries:t})});return In(e,"Could not flush play log entries"),!0}catch{return!1}}async function Zs(t){if(t.length===0)return;const{useGLTF:e,useTexture:n}=await $(async()=>{const{useGLTF:r,useTexture:s}=await import("./index-CMU7lnXk.js");return{useGLTF:r,useTexture:s}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]));for(const r of t)e.clear(r),n.clear(r)}const eo=60;function to(t){if(t.length===0)return{ms:null,fps:null,worstMs:null,samples:[]};let e=0,n=0;for(const s of t)e+=s,s>n&&(n=s);const r=e/t.length;return{ms:xe(r,2),fps:r>0?xe(1e3/r,1):null,worstMs:xe(n,2),samples:t.map(s=>xe(s,2))}}function xe(t,e){const n=10**e;return Math.round(t*n)/n}const no="No physics adapter on this game implements setDebugDrawEnabled, so nothing can draw its colliders. A first-party three root with Rapier physics registers one; a game with no physics has no colliders to draw.",Re=xn([]);function ro(t){const e=[];let n=Jt();const r=t.onRenderStep(()=>{const a=Jt();e.push(a-n),n=a,e.length>eo&&e.shift()});let s=!1;const o=()=>{const a=Rn(t.systemAdapters.physics);return a?.setDebugDrawEnabled?a:null};return{instruments:[{id:"timescale",label:"Time scale",hint:"Sim speed multiplier. 1 is real time, 0 freezes the simulation while the game keeps drawing.",unit:"x",control:{kind:"scale",action:"set",min:Ie.min,max:Ie.max,step:.05},actions:[{id:"set",label:"Set",hint:`Set the sim speed multiplier (${Ie.min}–${Ie.max}).`,args:xn([Cr()]),run:a=>(t.loop.timeScale=_s(a[0]),t.loop.timeScale)}],read:()=>t.loop.timeScale},{id:"paused",label:"Paused",hint:"Freeze the simulation. The game keeps drawing, so you can look at a frozen frame.",control:{kind:"toggle",action:"toggle"},actions:[{id:"toggle",label:"Toggle",hint:"Pause or resume the simulation.",args:Re,run:()=>(t.play.paused?t.play.resume():t.play.pause(),t.play.paused)},{id:"step",label:"Step",hint:"Advance exactly one fixed substep. Pauses first if the game is running.",args:Re,run:()=>(t.play.paused||t.play.pause(),t.play.step(),t.play.paused)}],read:()=>t.play.paused},{id:"colliders",label:"Colliders drawn",hint:"Draw the physics colliders over the world, through the game's own physics adapter.",control:{kind:"toggle",action:"toggle"},actions:[{id:"toggle",label:"Toggle",hint:"Turn collider wireframes on or off.",args:Re,run:()=>{const a=o();if(!a)throw new Error(no);return s=!s,a.setDebugDrawEnabled?.(s),s}}],read:()=>o()===null?null:s},{id:"frame-time",label:"Frame time",hint:"Wall-clock milliseconds per display frame, newest last. The window is where a hitch shows; the mean hides it.",unit:"ms",control:{kind:"plot"},actions:[{id:"clear",label:"Clear",hint:"Forget the sampled window and start measuring again.",args:Re,run:()=>(e.length=0,null)}],read:()=>to(e)}],dispose(){r(),e.length=0}}}function Jt(){return typeof performance>"u"?Date.now():performance.now()}const so="instruments",oo="__instruments__";function io(t){const e={name:`instrument.${t.id}`,id:t.id,label:t.label,hint:t.hint,...t.unit===void 0?{}:{unit:t.unit},control:t.control,actions:t.actions.map(n=>({name:`instrument.${t.id}.${n.id}`,id:n.id,label:n.label,hint:n.hint}))};try{return{...e,value:t.read()}}catch(n){return{...e,value:null,error:n instanceof Error?n.message:String(n)}}}function ao(t){const e=Qe(t);if(!e)throw new Error("Cannot publish dev instruments: mounted Game has no debug registry.");const n=ro(t),r=e.forRoot(oo);for(const s of n.instruments){r.registerStateProvider(`instrument.${s.id}`,()=>s.read(),{tier:"assisted"});for(const o of s.actions)r.registerCommand(`instrument.${s.id}.${o.id}`,{description:`${s.label}: ${o.label} — ${o.hint}`,locus:"client",args:o.args},(...i)=>o.run(i))}return r.registerStateProvider(so,()=>n.instruments.map(io),{tier:"assisted"}),()=>n.dispose()}function lo(t){if(!t||typeof t!="object")return!1;const e=t;return e.rigidBodyStates instanceof Map&&e.colliderStates instanceof Map&&e.world!==void 0&&e.rapier!==void 0}let Ce=null,co=null;function uo(){return Ce||(co??=(async()=>{if(!await Or()){Ce=As;return}const t=await import(kr);if(!(t.r3fRoots instanceof Map))throw new Error("The packaged runtime's synthetic R3F module did not export `r3fRoots` — see R3F_DOORWAY in vite-plugin-module-doorways.ts.");Ce=t.r3fRoots})(),null)}function ie(t){const e=uo();if(!e)return null;for(const n of e.values()){if(n.store.getState().scene!==t)continue;const r=n.fiber.current,s=r?[r]:[];for(;s.length>0;){const o=s.pop(),i=o.memoizedProps?.value;if(lo(i))return i;o.sibling&&s.push(o.sibling),o.child&&s.push(o.child)}}return null}function Fa(t,e=6e4){const n=performance.now();return new Promise(r=>{const s=()=>{if(ie(t))return r(!0);if(performance.now()-n>e)return r(!1);setTimeout(s,250)};s()})}function Xt(t,e){let n;for(const r of t)if(r.object.traverse(s=>{!n&&s.userData.entityId===e&&(n=s)}),n)return n}function Qt(t,e){const n=new Map;for(const r of e)n.set(r.object,r.rigidBody);for(let r=t;r;r=r.parent){const s=n.get(r);if(s)return s}}const U=t=>[t.x,t.y,t.z],me=t=>[t.x,t.y,t.z,t.w];function Zt(t,e){const{ShapeType:n}=t.rapier;switch(e.shapeType()){case n.Cuboid:return{type:"cuboid",halfExtents:U(e.halfExtents())};case n.Ball:return{type:"ball",radius:e.radius()};case n.Capsule:return{type:"capsule",halfHeight:e.halfHeight(),radius:e.radius()};default:return{type:"unsupported",kind:n[e.shapeType()]??`shapeType ${e.shapeType()}`}}}function fo(t,e){const{JointType:n}=t.rapier;switch(e){case n.Revolute:return"revolute";case n.Fixed:return"fixed";case n.Prismatic:return"prismatic";case n.Rope:return"rope";case n.Spring:return"spring";case n.Spherical:return"spherical";default:return"generic"}}function en(t,e){return U(new Ve(e.x,e.y,e.z).applyQuaternion(new gt(...me(t.rotation()))).add(new Ve(...U(t.translation()))))}function po(t,e){const n=e.body1(),r=e.body2(),s=e.anchor1(),o=e.anchor2(),i=fo(t,e.type()),a=i==="revolute"||i==="prismatic",l=a?e.frameX1():null,p=l?new Ve(1,0,0).applyQuaternion(new gt(l.x,l.y,l.z,l.w)):null,u=e;return{id:String(e.handle),type:i,body1:String(n.handle),body2:String(r.handle),anchor1:U(s),anchor2:U(o),worldAnchor1:en(n,s),worldAnchor2:en(r,o),body1Position:U(n.translation()),body2Position:U(r.translation()),body1Rotation:me(n.rotation()),body2Rotation:me(r.rotation()),...p?{axis:U(p),worldAxis:U(p.clone().applyQuaternion(new gt(...me(n.rotation()))))}:{},...a&&u.limitsEnabled()?{limits:{min:u.limitsMin(),max:u.limitsMax()}}:{},contactsEnabled:e.contactsEnabled()}}function go(t){const e=r=>{const s=ie(t);if(!s)return{kind:"unresolved"};const o=[...s.rigidBodyStates.values()],i=Xt(o,r);if(!i)return{kind:"unresolved"};const a=Qt(i,o);return a?{kind:"body",body:a}:{kind:"no-body"}},n=r=>{const s=ie(t);if(!s)return null;const o=[...s.rigidBodyStates.values()],i=Xt(o,r),a=i?Qt(i,o):void 0;return a?{context:s,body:a}:null};return{...Ps(e),colliders(r){const s=n(r);if(!s)return[];const o=[];for(const i of s.context.colliderStates.values()){if(i.collider.parent()?.handle!==s.body.handle)continue;i.object.updateWorldMatrix(!0,!1);const a=i.object.getWorldScale(new Ve);o.push({id:String(i.collider.handle),shape:Zt(s.context,i.collider),position:U(i.collider.translation()),rotation:me(i.collider.rotation()),scale:[Math.abs(a.x),Math.abs(a.y),Math.abs(a.z)],sensor:i.collider.isSensor()})}return o.sort((i,a)=>Number(i.id)-Number(a.id))},previewCollider(r,s){const o=ie(t),i=o?[...o.colliderStates.values()].find(a=>String(a.collider.handle)===r)?.collider:void 0;if(!(!o||!i||Zt(o,i).type!==s.type))switch(s.type){case"cuboid":i.setHalfExtents({x:s.halfExtents[0],y:s.halfExtents[1],z:s.halfExtents[2]});break;case"ball":i.setRadius(s.radius);break;case"capsule":i.setHalfHeight(s.halfHeight),i.setRadius(s.radius);break}},joints(r){const s=n(r);if(!s)return[];const o=[],i=s.context.world.impulseJoints;return i.forEachJointHandleAttachedToRigidBody(s.body.handle,a=>{const l=i.get(a);l&&o.push(po(s.context,l))}),o.sort((a,l)=>Number(a.id)-Number(l.id))},previewJointAnchor(r,s,o){const i=ie(t)?.world.impulseJoints.get(Number(r));if(!i)return;const a={x:o[0],y:o[1],z:o[2]};s===0?i.setAnchor1(a):i.setAnchor2(a)}}}const ho="__adapter__",tn=new WeakSet;function nn(t,e){const n=[];for(const r of t.roots){const s=r.binding?.observation[e];s&&n.push(s)}return n}function mo(t,e){return e.some(n=>n.slots.audio||n.absent.some(r=>r.slot==="audio"))?e:t.roots.map(n=>{const r=e.find(s=>s.rootId===n.id);return{rootId:n.id,slots:{...r?.slots,audio:Ts},absent:r?.absent??[]}})}const yo=["@colyseus/sdk","colyseus.js"];function wo(t,e){const n=e.some(u=>u.slots.networking||u.absent.some(f=>f.slot==="networking"));qn();const r=Hn(),s=r===null||r.some(u=>yo.includes(u)),o=t.roots[0];if(n||!s||!o)return e;const i=e.findIndex(u=>u.rootId===o.id),a=i>=0?e[i]:void 0,l={rootId:o.id,slots:{...a?.slots,networking:ca},absent:a?.absent??[]},p=[...e];return i>=0?p[i]=l:p.push(l),p}const vo=["@react-three/rapier","@dimforge/rapier3d-compat"];function bo(t,e){qn();const n=Hn(),r=n===null||n.some(o=>vo.includes(o)),s=[...e];for(const o of t.roots){if(o.mounted.kind!=="three"||o.mounted.systems?.physics)continue;const i=s.findIndex(f=>f.rootId===o.id),a=i>=0?s[i]:void 0;if(a&&(a.slots.physics||a.absent.some(f=>f.slot==="physics")))continue;const l=o.mounted.scene;if(!r&&!ie(l))continue;const p=go(l),u={rootId:o.id,slots:{...a?.slots,physics:p},absent:a?.absent??[]};i>=0?s[i]=u:s.push(u)}return s}function Lo(t,e,n){const r=e.forRoot(ho);for(const s of n){if(s.kind==="state"){r.registerStateProvider(s.id,()=>{if(!s.answer)throw new K("OBSERVATION_UNANSWERED",`Observation "${s.id}" (state) is declared by this game's adapter with no answer.`);return s.answer(t)},{tier:"assisted"});continue}r.registerCommand(s.id,{...s.description?{description:s.description}:{},locus:s.locus??"client"},(...o)=>{if(!s.answer)throw new K("OBSERVATION_UNANSWERED",`Observation "${s.id}" (command) is declared by this game's adapter with no answer.`);return s.answer(t,...o)})}}function ot(t,e){const n=t.actions(e);if(!Array.isArray(n))throw new Error("volter.adapter.ts input.actions must return an array.");const r=new Map;for(const s of n){if(typeof s?.name!="string"||s.name.length===0||!Nr.includes(s.valueType))throw new Error("volter.adapter.ts input.actions returned an invalid action; each action needs a non-empty `name` and a supported `valueType`.");if(r.has(s.name))throw new Error(`volter.adapter.ts input.actions returned duplicate action "${s.name}".`);r.set(s.name,s.valueType)}return r}function Eo(t,e){return t==="digital"?typeof e=="boolean":t==="scalar"?typeof e=="number"&&Number.isFinite(e):typeof e=="object"&&e!==null&&typeof e.x=="number"&&Number.isFinite(e.x)&&typeof e.y=="number"&&Number.isFinite(e.y)}function So(t,e,n){if(!t.world(n.root))throw new Error(`volter.adapter.ts input.root names "${n.root}", which is not a mounted manifest root.`);const r=[],s=[];let o=!1;const i=(f,d)=>{const c=ot(n,t).get(f);if(!c)throw new K("INPUT_ACTION_NOT_FOUND",`Adapter input has no action named "${f}".`,{registered:[...ot(n,t).keys()]});if(!Eo(c,d))throw new K("INPUT_ACTION_VALUE_TYPE",`Adapter input action "${f}" expects ${c}, not ${typeof d}.`,{action:f,expected:c});return c},a=(f,d,c)=>{i(f,d),n.set(t,f,d),o&&s.push({tick:c,action:f,value:d})},l=()=>{const f=e.getGameTick(),d=r.filter(c=>c.tick===f);if(d.length!==0){for(let c=r.length-1;c>=0;c--)r[c].tick===f&&r.splice(c,1);for(const c of d)a(c.action,c.value,f)}};t.systems.add("input",l,{name:"adapter.input"});const p=f=>{throw new K("ADAPTER_INPUT_SOURCE_UNSUPPORTED",`${f} addresses an engine test source, but this game declares an app-owned action store. Drive it by action name instead.`)},u={setVirtualAction(f,d){return a(f,d,e.getGameTick()),{delivered:!0}},tapVirtualAction(f){const d=e.getGameTick();return a(f,!0,d),r.push({tick:d+1,action:f,value:!1}),{delivered:!0}},clearVirtualActions(){r.length=0,n.clear(t)},scheduleActionAtTick(f,d,c){const h=e.getGameTick();if(!Number.isInteger(f)||f<h)throw new K("TICK_ALREADY_PASSED",`Cannot schedule adapter input for tick ${f}; current tick is ${h}.`,{tick:f,currentTick:h});i(d,c),r.push({tick:f,action:d,value:c})},startInputRecording(){s.length=0,o=!0},stopInputRecording(){o=!1},isInputRecording(){return o},injectAxis(){p("injectAxis")},injectVector2(){p("injectVector2")},injectPointerDelta(){p("injectPointerDelta")},injectPointerPosition(){p("injectPointerPosition")}};e.setInputActionsSource(n.root,()=>[...ot(n,t)].map(([f,d])=>({name:f,valueType:d}))),e.setInputTraceSource(n.root,()=>({version:1,seed:null,fixedDt:t.loop.fixedDt,ticks:[...s]})),e.setVirtualInputTarget(n.root,u)}function Zn(t){if(tn.has(t))return;Es(t,nn(t,"entryDebug")),Ss(t,wo(t,bo(t,mo(t,nn(t,"entrySystems"))))),ao(t);const e=Qe(t);if(!e)throw new Error("Cannot install adapter runtime bindings: mounted Game has no debug registry.");t.roots.some(s=>s.mounted.systems?.debug!==void 0&&s.mounted.systems.debug!==e.adapter)||Lo(t,e,Fr());const r=Dr();r&&So(t,e,r),tn.add(t)}let m=(function(t){return t.info="info",t.warn="warn",t.error="error",t.debug="debug",t.trace="trace",t.fatal="fatal",t})({});const ue={trace:10,debug:20,info:30,warn:40,error:50,fatal:60},er=Symbol.for("loglayer.lazy"),xt="[LazyEvalError]";function le(t){return t!=null&&typeof t=="object"&&er in t}function rn(t){let e=0;for(const n of Object.keys(t))le(t[n])&&e++;return e}function it(t){let e=!1;for(const s of Object.keys(t))if(le(t[s])){e=!0;break}if(!e)return{resolved:t,errors:null};const n={};let r=null;for(const s of Object.keys(t)){const o=t[s];if(le(o))try{n[s]=o[er]()}catch(i){n[s]=xt,r||(r=[]),r.push({key:s,error:i})}else n[s]=o}return{resolved:n,errors:r}}function _o(t){for(const e of Object.keys(t))if(t[e]instanceof Promise)return!0;return!1}function sn(t){let e=null;const n={};for(const r of Object.keys(t))t[r]instanceof Promise?(n[r]=xt,e||(e=[]),e.push(r)):n[r]=t[r];return e?{resolved:n,asyncKeys:e}:{resolved:t,asyncKeys:null}}async function Mo(t){const e=Object.keys(t),n=await Promise.allSettled(e.map(o=>Promise.resolve(t[o]))),r={};let s=null;for(let o=0;o<e.length;o++){const i=n[o];i.status==="fulfilled"?r[e[o]]=i.value:(r[e[o]]=xt,s||(s=[]),s.push({key:e[o],error:i.reason}))}return{resolved:r,errors:s}}function B(t){const e=t[0];if(Array.isArray(e)&&typeof e.raw<"u"){const n=e,r=t.slice(1);let s="";for(let o=0;o<n.length;o++)s+=n[o],o<r.length&&(s+=String(r[o]));return[s]}return t}let C=(function(t){return t.transformLogLevel="transformLogLevel",t.onBeforeDataOut="onBeforeDataOut",t.shouldSendToLogger="shouldSendToLogger",t.onMetadataCalled="onMetadataCalled",t.onBeforeMessageOut="onBeforeMessageOut",t.onContextCalled="onContextCalled",t})({});var To=class tr{context={};hasContext=!1;setContext(e){if(!e){this.context={},this.hasContext=!1;return}this.context=e,this.hasContext=!0}appendContext(e){this.context={...this.context,...e},this.hasContext=!0}getContext(){return this.context}hasContextData(){return this.hasContext}clearContext(e){if(e===void 0){this.context={},this.hasContext=!1;return}const n=Array.isArray(e)?e:[e];for(const r of n)delete this.context[r];this.hasContext=Object.keys(this.context).length>0}onChildLoggerCreated({parentContextManager:e,childContextManager:n}){if(e.hasContextData()){const r=e.getContext();n.setContext({...r})}}clone(){const e=new tr;return e.setContext({...this.context}),e.hasContext=this.hasContext,e}},Po=class mt{logLevelEnabledStatus={info:!0,warn:!0,error:!0,debug:!0,trace:!0,fatal:!0};setLevel(e){const n=ue[e];for(const r of Object.values(m)){const s=r,o=ue[r];this.logLevelEnabledStatus[s]=o>=n}}enableIndividualLevel(e){const n=e;n in this.logLevelEnabledStatus&&(this.logLevelEnabledStatus[n]=!0)}disableIndividualLevel(e){const n=e;n in this.logLevelEnabledStatus&&(this.logLevelEnabledStatus[n]=!1)}isLevelEnabled(e){const n=e;return this.logLevelEnabledStatus[n]}enableLogging(){for(const e of Object.keys(this.logLevelEnabledStatus))this.logLevelEnabledStatus[e]=!0}disableLogging(){for(const e of Object.keys(this.logLevelEnabledStatus))this.logLevelEnabledStatus[e]=!1}onChildLoggerCreated({parentLogLevelManager:e,childLogLevelManager:n}){const r=e.logLevelEnabledStatus;n instanceof mt&&(n.logLevelEnabledStatus={...r})}clone(){const e=new mt;return e.logLevelEnabledStatus={...this.logLevelEnabledStatus},e}},Ao=class{id;enabled;level;consoleDebug;constructor(t){this.id=t.id??Date.now().toString()+Math.random().toString(),this.enabled=t.enabled??!0,this.consoleDebug=t.consoleDebug??!1,this.level=t.level??"trace"}_sendToLogger(t){if(!this.enabled||ue[t.logLevel]<ue[this.level])return;const e=this.shipToLogger(t);if(this.consoleDebug)switch(t.logLevel){case m.info:console.info(...e);break;case m.warn:console.warn(...e);break;case m.error:console.error(...e);break;case m.trace:console.debug(...e);break;case m.debug:console.debug(...e);break;case m.fatal:console.debug(...e);break;default:console.log(...e)}}getLoggerInstance(){throw new Error("This transport does not have a logger instance")}},Io={};const xo=[C.onBeforeDataOut,C.onMetadataCalled,C.onBeforeMessageOut,C.transformLogLevel,C.shouldSendToLogger,C.onContextCalled];var on=class{idToPlugin;transformLogLevel=[];onBeforeDataOut=[];shouldSendToLogger=[];onMetadataCalled=[];onBeforeMessageOut=[];onContextCalled=[];constructor(t){this.idToPlugin={},this.mapPlugins(t),this.indexPlugins()}mapPlugins(t){for(const e of t){if(e.id||(e.id=Date.now().toString()+Math.random().toString()),this.idToPlugin[e.id])throw new Error(`[LogLayer] Plugin with id ${e.id} already exists.`);e.registeredAt=Date.now(),this.idToPlugin[e.id]=e}}indexPlugins(){this.transformLogLevel=[],this.onBeforeDataOut=[],this.shouldSendToLogger=[],this.onMetadataCalled=[],this.onBeforeMessageOut=[],this.onContextCalled=[];const t=Object.values(this.idToPlugin).sort((e,n)=>e.registeredAt-n.registeredAt);for(const e of t){if(e.disabled)return;for(const n of xo)e[n]&&e.id&&this[n].push(e.id)}}hasPlugins(t){return this[t].length>0}countPlugins(t){return t?this[t].length:Object.keys(this.idToPlugin).length}addPlugins(t){this.mapPlugins(t),this.indexPlugins()}enablePlugin(t){const e=this.idToPlugin[t];e&&(e.disabled=!1),this.indexPlugins()}disablePlugin(t){const e=this.idToPlugin[t];e&&(e.disabled=!0),this.indexPlugins()}removePlugin(t){delete this.idToPlugin[t],this.indexPlugins()}runTransformLogLevel(t,e){let n=null;for(const r of this.transformLogLevel){const s=this.idToPlugin[r];if(s.transformLogLevel){const o=s.transformLogLevel({data:t.data,logLevel:t.logLevel,messages:t.messages,error:t.error,metadata:t.metadata,context:t.context,groups:t.groups,schema:t.schema,prefix:t.prefix},e);o!=null&&o!==!1&&(n=o)}}return n!=null&&n!==!1?n:t.logLevel}runOnBeforeDataOut(t,e){const n={...t},r=n.data;for(const s of this.onBeforeDataOut){const o=this.idToPlugin[s];if(o.onBeforeDataOut){const i=o.onBeforeDataOut({data:n.data,logLevel:n.logLevel,error:n.error,metadata:n.metadata,context:n.context,groups:n.groups,schema:n.schema,prefix:n.prefix},e);i&&(n.data||(n.data={}),i!==r&&Object.assign(n.data,i))}}return n.data}runShouldSendToLogger(t,e){return!this.shouldSendToLogger.some(n=>!this.idToPlugin[n].shouldSendToLogger?.(t,e))}runOnMetadataCalled(t,e){let n={...t};for(const r of this.onMetadataCalled){const s=this.idToPlugin[r].onMetadataCalled?.(n,e);if(s)n=s;else return null}return n}runOnBeforeMessageOut(t,e){let n=[...t.messages];for(const r of this.onBeforeMessageOut){const s=this.idToPlugin[r].onBeforeMessageOut?.({messages:n,logLevel:t.logLevel,groups:t.groups,schema:t.schema,prefix:t.prefix},e);s&&(n=s)}return n}runOnContextCalled(t,e){let n={...t};for(const r of this.onContextCalled){const s=this.idToPlugin[r].onContextCalled?.(n,e);if(s)n=s;else return null}return n}},Ro=class nr{pluginManager;idToTransport;hasMultipleTransports;singleTransport;contextManager;logLevelManager;_isLoggingLazyError=!1;_lazyContextCount=0;_assignedGroups=null;_groupsConfig=null;_activeGroups=null;_ungroupedBehavior="all";_config;constructor(e){this._config={...e,enabled:e.enabled??!0},this.contextManager=new To,this.logLevelManager=new Po,this._config.enabled||this.disableLogging();const n=[...e.plugins||[],...ye.pluginsToInit];this.pluginManager=new on(n),this._config.errorFieldName||(this._config.errorFieldName="err"),this._config.copyMsgOnOnlyError||(this._config.copyMsgOnOnlyError=!1),this._initializeTransports(this._config.transport),this._groupsConfig=e.groups?{...e.groups}:null,this._ungroupedBehavior=e.ungroupedBehavior??"all",this._activeGroups=e.activeGroups?new Set(e.activeGroups):null,this._parseEnvGroups(),ye.logLayerHandlers.length>0&&ye.logLayerHandlers.forEach(r=>{r.onConstruct&&r.onConstruct(this,e)})}withContextManager(e){return this.contextManager&&typeof this.contextManager[Symbol.dispose]=="function"&&this.contextManager[Symbol.dispose](),this.contextManager=e,this._lazyContextCount=e.hasContextData()?rn(e.getContext()):0,this}getContextManager(){return this.contextManager}withLogLevelManager(e){return this.logLevelManager&&typeof this.logLevelManager[Symbol.dispose]=="function"&&this.logLevelManager[Symbol.dispose](),this.logLevelManager=e,this}getLogLevelManager(){return this.logLevelManager}getConfig(){return this._config}_initializeTransports(e){if(this.idToTransport)for(const n in this.idToTransport)this.idToTransport[n]&&typeof this.idToTransport[n][Symbol.dispose]=="function"&&this.idToTransport[n][Symbol.dispose]();this.hasMultipleTransports=Array.isArray(e)&&e.length>1,this.singleTransport=this.hasMultipleTransports?null:Array.isArray(e)?e[0]:e,Array.isArray(e)?this.idToTransport=e.reduce((n,r)=>(n[r.id]=r,n),{}):this.idToTransport={[e.id]:e}}withPrefix(e){const n=this.child();return n._config.prefix=e,n}withGroup(e){const n=this.child(),r=Array.isArray(e)?e:[e];if(n._assignedGroups){const s=new Set([...n._assignedGroups,...r]);n._assignedGroups=Array.from(s)}else n._assignedGroups=[...r];return n}addGroup(e,n){return this._groupsConfig||(this._groupsConfig={}),this._groupsConfig[e]={...n},this}removeGroup(e){return this._groupsConfig&&(delete this._groupsConfig[e],Object.keys(this._groupsConfig).length===0&&(this._groupsConfig=null)),this}enableGroup(e){return this._groupsConfig?.[e]&&(this._groupsConfig[e]={...this._groupsConfig[e],enabled:!0}),this}disableGroup(e){return this._groupsConfig?.[e]&&(this._groupsConfig[e]={...this._groupsConfig[e],enabled:!1}),this}setGroupLevel(e,n){return this._groupsConfig?.[e]&&(this._groupsConfig[e]={...this._groupsConfig[e],level:n}),this}setActiveGroups(e){return this._activeGroups=e?new Set(e):null,this}getGroups(){return this._groupsConfig?{...this._groupsConfig}:{}}withContext(e){let n=e;if(!e)return this._config.consoleDebug&&console.debug("[LogLayer] withContext was called with no context; dropping."),this;if(this.pluginManager.hasPlugins(C.onContextCalled)&&(n=this.pluginManager.runOnContextCalled(e,this),!n))return this._config.consoleDebug&&console.debug("[LogLayer] Context was dropped due to plugin returning falsy value."),this;const r=this.contextManager.getContext();for(const s of Object.keys(n)){const o=s in r&&le(r[s]),i=le(n[s]);!o&&i?this._lazyContextCount++:o&&!i&&this._lazyContextCount--}return this.contextManager.appendContext(n),this}clearContext(e){if(e!==void 0&&this._lazyContextCount>0){const n=this.contextManager.getContext(),r=Array.isArray(e)?e:[e];for(const s of r)s in n&&le(n[s])&&this._lazyContextCount--}else e===void 0&&(this._lazyContextCount=0);return this.contextManager.clearContext(e),this}getContext(e){const n=this.contextManager.getContext();if(e?.raw||this._lazyContextCount===0)return n;const{resolved:r,errors:s}=it(n);s&&this._logLazyEvalErrors(s,"context");const{resolved:o,asyncKeys:i}=sn(r);return i&&this._logAsyncLazyContextErrors(i),o}addPlugins(e){this.pluginManager.addPlugins(e)}enablePlugin(e){this.pluginManager.enablePlugin(e)}disablePlugin(e){this.pluginManager.disablePlugin(e)}removePlugin(e){this.pluginManager.removePlugin(e)}withMetadata(e){return new an(this).withMetadata(e)}withError(e){return new an(this).withError(e)}child(){const e=new nr({...this._config,transport:Array.isArray(this._config.transport)?[...this._config.transport]:this._config.transport}).withPluginManager(this.pluginManager).withContextManager(this.contextManager.clone()).withLogLevelManager(this.logLevelManager.clone());return this.contextManager.onChildLoggerCreated({parentContextManager:this.contextManager,childContextManager:e.contextManager,parentLogger:this,childLogger:e}),this.logLevelManager.onChildLoggerCreated({parentLogLevelManager:this.logLevelManager,childLogLevelManager:e.logLevelManager,parentLogger:this,childLogger:e}),e._lazyContextCount=e.contextManager.hasContextData()?rn(e.contextManager.getContext()):0,e._groupsConfig=this._groupsConfig,e._activeGroups=this._activeGroups,e._ungroupedBehavior=this._ungroupedBehavior,e._assignedGroups=this._assignedGroups?[...this._assignedGroups]:null,e}withFreshTransports(e){return this._config.transport=e,this._initializeTransports(e),this}addTransport(e){const n=Array.isArray(e)?e:[e],r=Array.isArray(this._config.transport)?this._config.transport:[this._config.transport],s=new Set(n.map(i=>i.id));for(const i of n){const a=this.idToTransport[i.id];a&&typeof a[Symbol.dispose]=="function"&&a[Symbol.dispose]()}const o=[...r.filter(i=>!s.has(i.id)),...n];this._config.transport=o;for(const i of n)this.idToTransport[i.id]=i;return this.hasMultipleTransports=o.length>1,this.singleTransport=this.hasMultipleTransports?null:o[0],this}removeTransport(e){const n=this.idToTransport[e];if(!n)return!1;typeof n[Symbol.dispose]=="function"&&n[Symbol.dispose](),delete this.idToTransport[e];const r=(Array.isArray(this._config.transport)?this._config.transport:[this._config.transport]).filter(s=>s.id!==e);return this._config.transport=r.length===1?r[0]:r,this.hasMultipleTransports=r.length>1,this.singleTransport=this.hasMultipleTransports?null:r[0]||null,!0}withFreshPlugins(e){return this._config.plugins=e,this.pluginManager=new on(e),this}withPluginManager(e){return this.pluginManager=e,this}errorOnly(e,n){const r=n?.logLevel||m.error;if(!this.isLevelEnabled(r))return;const{copyMsgOnOnlyError:s}=this._config,o={logLevel:r,err:e};(s&&n?.copyMsg!==!1||n?.copyMsg===!0)&&e?.message&&(o.params=[e.message]),this._formatLog(o)}metadataOnly(e,n=m.info){if(!this.isLevelEnabled(n))return;const{muteMetadata:r,consoleDebug:s}=this._config;if(r)return;if(!e){s&&console.debug("[LogLayer] metadataOnly was called with no metadata; dropping.");return}let o=e;if(this.pluginManager.hasPlugins(C.onMetadataCalled)&&(o=this.pluginManager.runOnMetadataCalled(e,this),!o)){s&&console.debug("[LogLayer] Metadata was dropped due to plugin returning falsy value.");return}const i={logLevel:n,metadata:o};return this._formatLog(i)}info(...e){if(!this.isLevelEnabled(m.info))return;const n=B(e);this._formatMessage(n),this._formatLog({logLevel:m.info,params:n})}warn(...e){if(!this.isLevelEnabled(m.warn))return;const n=B(e);this._formatMessage(n),this._formatLog({logLevel:m.warn,params:n})}error(...e){if(!this.isLevelEnabled(m.error))return;const n=B(e);this._formatMessage(n),this._formatLog({logLevel:m.error,params:n})}debug(...e){if(!this.isLevelEnabled(m.debug))return;const n=B(e);this._formatMessage(n),this._formatLog({logLevel:m.debug,params:n})}trace(...e){if(!this.isLevelEnabled(m.trace))return;const n=B(e);this._formatMessage(n),this._formatLog({logLevel:m.trace,params:n})}fatal(...e){if(!this.isLevelEnabled(m.fatal))return;const n=B(e);this._formatMessage(n),this._formatLog({logLevel:m.fatal,params:n})}raw(e){if(!this.isLevelEnabled(e.logLevel))return;const n={logLevel:e.logLevel,params:e.messages,metadata:e.metadata,rootData:e.rootData,err:e.error,context:e.context};return this._formatMessage(e.messages),this._formatLog(n)}disableLogging(){return this.logLevelManager.disableLogging(),this}enableLogging(){return this.logLevelManager.enableLogging(),this}muteContext(){return this._config.muteContext=!0,this}unMuteContext(){return this._config.muteContext=!1,this}muteMetadata(){return this._config.muteMetadata=!0,this}unMuteMetadata(){return this._config.muteMetadata=!1,this}enableIndividualLevel(e){return this.logLevelManager.enableIndividualLevel(e),this}disableIndividualLevel(e){return this.logLevelManager.disableIndividualLevel(e),this}setLevel(e){return this.logLevelManager.setLevel(e),this}isLevelEnabled(e){return this.logLevelManager.isLevelEnabled(e)}formatContext(e){const{contextFieldName:n,muteContext:r}=this._config;return e&&Object.keys(e).length>0&&!r?n?{[n]:{...e}}:{...e}:{}}formatMetadata(e=null){const{metadataFieldName:n,muteMetadata:r}=this._config;return e&&!r?n?{[n]:{...e}}:{...e}:{}}getLoggerInstance(e){const n=this.idToTransport[e];if(n)return n.getLoggerInstance()}_parseEnvGroups(){const e=typeof process<"u"?Io?.LOGLAYER_GROUPS:void 0;if(!e)return;const n=e.split(",").map(s=>s.trim()).filter(Boolean),r=[];for(const s of n){const o=s.indexOf(":");if(o>0){const i=s.slice(0,o),a=s.slice(o+1);r.push(i),this._groupsConfig?.[i]&&(this._groupsConfig[i]={...this._groupsConfig[i],level:a})}else r.push(s)}this._activeGroups=new Set(r)}_mergeGroups(e){if(this._assignedGroups&&e){const n=new Set([...this._assignedGroups,...e]);return Array.from(n)}return e||this._assignedGroups}_applyUngroupedRules(e){return this._ungroupedBehavior==="all"?!0:this._ungroupedBehavior==="none"?!1:this._ungroupedBehavior.includes(e)}_shouldTransportReceiveLog(e,n,r){if(!this._groupsConfig)return!0;const s=this._mergeGroups(r);if(!s||s.length===0)return this._applyUngroupedRules(e);let o=!1;for(const i of s){const a=this._groupsConfig[i];if(a&&(o=!0,a.enabled!==!1&&!(this._activeGroups&&!this._activeGroups.has(i)))){if(a.level){const l=ue[a.level];if(ue[n]<l)continue}if(a.transports.includes(e))return!0}}return o?!1:this._applyUngroupedRules(e)}_formatMessage(e=[]){const{prefix:n}=this._config;n&&typeof e[0]=="string"&&(e[0]=`${n} ${e[0]}`)}_formatLog({logLevel:e,params:n=[],metadata:r=null,rootData:s=null,err:o,context:i=null,groups:a=null}){const l=i!==null?i:this.contextManager.getContext();let p;if(this._lazyContextCount>0||i!==null){const f=it(l);f.errors&&this._logLazyEvalErrors(f.errors,"context");const{resolved:d,asyncKeys:c}=sn(f.resolved);c&&this._logAsyncLazyContextErrors(c),p=d}else p=l;let u=null;if(r){const f=it(r);r=f.resolved,u=f.errors}if(u&&this._logLazyEvalErrors(u,"metadata"),r&&_o(r))return this._resolveAsyncAndProcess(e,n,p,r,s,o,i,a);this._processLog(e,n,p,r,s,o,i,a)}async _resolveAsyncAndProcess(e,n,r,s,o,i,a,l){let p=null;if(s){const u=await Mo(s);p=u.resolved,u.errors&&this._logLazyEvalErrors(u.errors,"metadata")}this._processLog(e,n,r,p,o,i,a,l)}_logLazyEvalErrors(e,n){if(this._isLoggingLazyError){for(const r of e)console.error(`[LogLayer] Lazy evaluation error in ${n} key "${r.key}":`,r.error);return}this._isLoggingLazyError=!0;try{for(const r of e){const s=r.error instanceof Error?r.error.message:String(r.error);this._processLog(m.error,[`[LogLayer] Lazy evaluation failed for ${n} key "${r.key}": ${s}`],{},null,null,r.error instanceof Error?r.error:void 0,{})}}finally{this._isLoggingLazyError=!1}}_logAsyncLazyContextErrors(e){if(this._isLoggingLazyError){for(const n of e)console.error(`[LogLayer] Async lazy values are not supported in context (key "${n}"). Use async lazy only in metadata.`);return}this._isLoggingLazyError=!0;try{for(const n of e)this._processLog(m.error,[`[LogLayer] Async lazy values are not supported in context (key "${n}"). Use async lazy only in metadata.`],{},null,null,void 0,{})}finally{this._isLoggingLazyError=!1}}_processLog(e,n,r,s,o,i,a,l=null){const{errorSerializer:p,errorFieldInMetadata:u,muteContext:f,contextFieldName:d,metadataFieldName:c,errorFieldName:h,prefix:E}=this._config,v={contextFieldName:d??void 0,metadataFieldName:c??void 0,errorFieldName:h??"err"},S=this._mergeGroups(l)??void 0;let y=!!s||(f?!1:a!==null?Object.keys(a).length>0:this.contextManager.hasContextData()),w={};if(y)if(d&&d===c){const _=this.formatContext(r)[d],T=this.formatMetadata(s)[c];w={[d]:{..._,...T}}}else w={...this.formatContext(r),...this.formatMetadata(s)};if(i){const _=p?p(i):i;u&&s&&c?w?.[c]?w[c][h]=_:w={...w,[c]:{[h]:_}}:u&&!s&&c?w={...w,[c]:{[h]:_}}:w={...w,[h]:_},y=!0}o&&Object.keys(o).length>0&&(w={...w,...o},y=!0),this.pluginManager.hasPlugins(C.onBeforeDataOut)&&(w=this.pluginManager.runOnBeforeDataOut({data:y?w:void 0,logLevel:e,error:i,metadata:s,context:r,groups:S,schema:v,prefix:E},this),w&&!y&&(y=!0)),this.pluginManager.hasPlugins(C.onBeforeMessageOut)&&(n=this.pluginManager.runOnBeforeMessageOut({messages:[...n],logLevel:e,groups:S,schema:v,prefix:E},this)),this.pluginManager.hasPlugins(C.transformLogLevel)&&(e=this.pluginManager.runTransformLogLevel({data:y?w:void 0,logLevel:e,messages:[...n],error:i,metadata:s,context:r,groups:S,schema:v,prefix:E},this));const k={data:y?w:void 0,error:i,metadata:s,context:r,groups:S,schema:v,prefix:E};if(this.hasMultipleTransports){const _=this._config.transport.filter(T=>!(!T.enabled||!this._shouldTransportReceiveLog(T.id,e,S))).map(async T=>{const D=e;if(!(this.pluginManager.hasPlugins(C.shouldSendToLogger)&&!this.pluginManager.runShouldSendToLogger({messages:[...n],logLevel:D,transportId:T.id,...k},this)))return T._sendToLogger({logLevel:D,messages:[...n],hasData:y,...k})});Promise.all(_).catch(T=>{this._config.consoleDebug&&console.error("[LogLayer] Error executing transports:",T)})}else{if(!this.singleTransport?.enabled||!this._shouldTransportReceiveLog(this.singleTransport.id,e,S)||this.pluginManager.hasPlugins(C.shouldSendToLogger)&&!this.pluginManager.runShouldSendToLogger({messages:[...n],logLevel:e,transportId:this.singleTransport.id,...k},this))return;this.singleTransport._sendToLogger({logLevel:e,messages:[...n],hasData:y,...k})}}};const ye={logLayerHandlers:[],pluginsToInit:[],logBuilderHandlers:[]};var an=class{err;metadata;structuredLogger;hasMetadata;pluginManager;_groups=null;constructor(t){this.err=null,this.metadata={},this.structuredLogger=t,this.hasMetadata=!1,this.pluginManager=t.pluginManager,ye.logBuilderHandlers.length>0&&ye.logBuilderHandlers.forEach(e=>{e.onConstruct&&e.onConstruct(this,t)})}withMetadata(t){const{pluginManager:e,structuredLogger:{_config:{consoleDebug:n}}}=this;if(!t)return n&&console.debug("[LogLayer] withMetadata was called with no metadata; dropping."),this;let r=t;return e.hasPlugins(C.onMetadataCalled)&&(r=e.runOnMetadataCalled(t,this.structuredLogger),!r)?(n&&console.debug("[LogLayer] Metadata was dropped due to plugin returning falsy value."),this):(this.metadata={...this.metadata,...r},this.hasMetadata=!0,this)}withError(t){return this.err=t,this}withGroup(t){const e=Array.isArray(t)?t:[t];if(this._groups){const n=new Set([...this._groups,...e]);this._groups=Array.from(n)}else this._groups=[...e];return this}info(...t){if(!this.structuredLogger.isLevelEnabled(m.info))return;const e=B(t);return this.structuredLogger._formatMessage(e),this.formatLog(m.info,e)}warn(...t){if(!this.structuredLogger.isLevelEnabled(m.warn))return;const e=B(t);return this.structuredLogger._formatMessage(e),this.formatLog(m.warn,e)}error(...t){if(!this.structuredLogger.isLevelEnabled(m.error))return;const e=B(t);return this.structuredLogger._formatMessage(e),this.formatLog(m.error,e)}debug(...t){if(!this.structuredLogger.isLevelEnabled(m.debug))return;const e=B(t);return this.structuredLogger._formatMessage(e),this.formatLog(m.debug,e)}trace(...t){if(!this.structuredLogger.isLevelEnabled(m.trace))return;const e=B(t);return this.structuredLogger._formatMessage(e),this.formatLog(m.trace,e)}fatal(...t){if(!this.structuredLogger.isLevelEnabled(m.fatal))return;const e=B(t);return this.structuredLogger._formatMessage(e),this.formatLog(m.fatal,e)}disableLogging(){return this.structuredLogger.disableLogging(),this}enableLogging(){return this.structuredLogger.enableLogging(),this}formatLog(t,e){const{muteMetadata:n}=this.structuredLogger._config,r=n?!1:this.hasMetadata;return this.structuredLogger._formatLog({logLevel:t,params:e,metadata:r?this.metadata:null,err:this.err,groups:this._groups})}},Co=class extends Ao{shipToLoggerFn;constructor(t){super(t),this.shipToLoggerFn=t.shipToLogger}shipToLogger(t){return this.shipToLoggerFn(t)}};let yt=!1;const Oo={trace:"log",debug:"log",info:"log",warn:"warn",error:"error",fatal:"error"},Rt=new Ro({transport:new Co({shipToLogger:({logLevel:t,messages:e,data:n,hasData:r})=>{const s=Oo[t]??"log";let o,i;if(r&&n){const{_sub:a,...l}=n;o=a?String(a):void 0,Object.keys(l).length>0&&(i=l)}return yt=!0,i?console[s](...e,i):console[s](...e),yt=!1,typeof window<"u"&&window.postMessage({type:"engine-log",level:t,message:e.join(" "),subsystem:o,metadata:i,timestamp:Date.now()},"*"),e}}),prefix:"[engine]"});Rt.setLevel(m.info);typeof window<"u"&&(window.setEngineLogLevel=t=>{Rt.setLevel(t)});if(typeof window<"u"){const t=new URLSearchParams(window.location.search).get("engineLogLevel");t&&Rt.setLevel(t)}const ko=4,Do=1e4;async function No(t,e,n,r){const s=t.getRunTicksTarget();if(s===null)throw new K("RUN_TICKS_UNAVAILABLE","runTicksWhenSettled: no run-ticks target is wired — no Game has mounted yet");const o=Do,i=ko,a=n?.render??"last";for(let l=0;l<e;l++){if(!t.worldSettled()){const f=Date.now()+o;for(;!t.worldSettled();){if(Date.now()>f)throw new K("WORLD_UNSETTLED_TIMEOUT",`runTicksWhenSettled: a world-settled probe still answers false after ${o}ms — a scene remount (or a broken probe) is stuck, and driving ticks into it would race it`);await new Promise(d=>setTimeout(d,i))}}const p=l===e-1,u=a==="all"?"all":a==="none"?"none":p?"last":"none";s.runTicks(1,{render:u})}}const Fo="fit",rr=[{id:Fo,label:"Fit panel",kind:"fit",width:null,height:null,dpr:null,safeArea:null},{id:"iphone-portrait",label:"iPhone 14 — 390×844 @3x",kind:"phone",width:390,height:844,dpr:3,safeArea:{top:47,right:0,bottom:34,left:0}},{id:"iphone-landscape",label:"iPhone 14 landscape — 844×390 @3x",kind:"phone",width:844,height:390,dpr:3,safeArea:{top:0,right:47,bottom:21,left:47}},{id:"android-portrait",label:"Android — 412×915 @2.6x",kind:"phone",width:412,height:915,dpr:2.6,safeArea:{top:24,right:0,bottom:24,left:0}},{id:"ipad-portrait",label:"iPad — 820×1180 @2x",kind:"tablet",width:820,height:1180,dpr:2,safeArea:{top:24,right:0,bottom:20,left:0}},{id:"desktop-1080p",label:"Desktop — 1920×1080 @1x",kind:"desktop",width:1920,height:1080,dpr:1,safeArea:null}],Ct=rr[0];function sr(t){return rr.find(e=>e.id===t)??Ct}let O=Ct,te=null,or=0;const wt=new Set;function Ot(){or++;for(const t of wt)t()}function ja(t){return wt.add(t),()=>{wt.delete(t)}}const Ba=()=>or;function $a(){return O}function ir(){return te??(O.kind==="phone"||O.kind==="tablet")}function Ga(t){const e=sr(t);e!==O&&(O=e,te=null,ar(),Ot())}function za(t){t!==te&&(te=t,ar(),Ot())}function jo(){return O.dpr}function Ua(){return Math.min(typeof window<"u"&&window.devicePixelRatio||1,2)}function ar(){jr({devicePreview:{preset:O.id,touch:te}})}function Va(){const t=Br().devicePreview;return t?.preset?(O=sr(t.preset),te=typeof t.touch=="boolean"?t.touch:null):(O=Ct,te=null),Ot(),O}const ln=["pointerdown","pointermove","pointerup","pointercancel"],cn=new WeakSet;let vt=null,at=null;function un(t){if(!ir()||cn.has(t)||!(t instanceof PointerEvent)||t.pointerType!=="mouse")return;const e=t.target;if(!e)return;t.stopImmediatePropagation();const n=new PointerEvent(t.type,{bubbles:!0,cancelable:t.cancelable,composed:!0,view:t.view,detail:t.detail,clientX:t.clientX,clientY:t.clientY,screenX:t.screenX,screenY:t.screenY,button:t.button,buttons:t.buttons,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,pointerId:t.pointerId,pointerType:"touch",isPrimary:!0,pressure:t.type==="pointerup"||t.type==="pointercancel"?0:Math.max(t.pressure,.5),width:20,height:20});cn.add(n),e.dispatchEvent(n),n.defaultPrevented&&t.preventDefault()}function Bo(t){if(t!==vt&&(at?.(),at=null,vt=t,!!t)){for(const e of ln)t.addEventListener(e,un,{capture:!0});at=()=>{for(const e of ln)t.removeEventListener(e,un,{capture:!0})}}}function Wa(t){vt===t&&Bo(null)}function $o(){return{presetId:O.id,presetLabel:O.label,dpr:O.dpr,safeArea:O.safeArea,touchActive:ir()}}typeof window<"u"&&(window.__volterDevicePreview=$o);const Go=15e3;function zo(t,e,n){const r=n?` (open ${n})`:"";return`Play start stalled at "${t}" for ${Math.round(e/1e3)}s and the editor tab is HIDDEN — a backgrounded tab has its network requests deprioritized by the browser, so this step is queued rather than broken. Bring the editor tab to the foreground${r} and run play again; the engine loop itself is hidden-safe, only the boot's fetches are starved.`}function Uo(t,e,n){const r=n.stallMs??Go,s=n.setTimer??((i,a)=>setTimeout(i,a)),o=n.clearTimer??(i=>clearTimeout(i));return new Promise((i,a)=>{let l=!1;const p=s(()=>{l||n.isHidden()&&(l=!0,a(new Error(zo(t,r,n.editorUrl))))},r);e.then(u=>{l||(l=!0,o(p),i(u))},u=>{l||(l=!0,o(p),a(u instanceof Error?u:new Error(String(u))))})})}function Vo(t,e,n=Date.now()){const r=t.filter(s=>s.seq>e).sort((s,o)=>s.seq-o.seq);return{entries:r.map(s=>({t:n,level:"info",source:"game-event",msg:s.event,tick:s.tick,simT:s.simT,meta:{seq:s.seq,...s.detail!==void 0?{detail:s.detail}:{}}})),lastSeq:r.at(-1)?.seq??e}}const Ne="data-volter-replay-block",pe="data-volter-replay-video",dn="https://replay-assets.invalid/",Wo=1e3,qo=256*1024,Ho=/data:image\/(?:png|jpeg|webp|gif|svg\+xml);base64,[a-zA-Z0-9+/=]+/g;function lt(t){const e=t.getBoundingClientRect();return{left:e.left,top:e.top,width:e.width,height:e.height}}function Ko(t){switch(t.toLowerCase()){case"image/png":return"png";case"image/jpeg":return"jpg";case"image/webp":return"webp";case"image/gif":return"gif";case"image/svg+xml":return"svg";default:return null}}function Yo(t){const e=/^data:([^;,]+);base64,([\s\S]+)$/i.exec(t);if(!e)throw new Error("image data URL is not base64 encoded");const n=atob(e[2]),r=new Uint8Array(n.length);for(let s=0;s<n.length;s+=1)r[s]=n.charCodeAt(s);return new Blob([r],{type:e[1].toLowerCase()})}function Jo(t){const e=[];for(let n=t;n&&n!==document.body;n=n.parentElement){const r=n.parentElement;if(!r)break;for(const s of Array.from(r.children))s!==n&&!["STYLE","LINK","SCRIPT"].includes(s.tagName)&&!s.hasAttribute(Ne)&&(s.setAttribute(Ne,""),e.push(s))}return()=>{for(const n of e)n.removeAttribute(Ne)}}function Xo(t,e,n){if(n.format!=="canvas-dom"||n.replayPath===null)throw new Error("gameplay DOM recording requires a canvas-dom sink");const r=Jo(t),s=e.getAttribute(pe);e.setAttribute(pe,"");const o=()=>{r(),s===null?e.removeAttribute(pe):e.setAttribute(pe,s)},i=[],a=new Map,l=[];let p=0,u=0,f=0,d=0,c=0,h=null,E=Date.now(),v=null,S=Promise.resolve(),y=!1;const w=(b,z)=>{S=S.then(async()=>{if(!v)try{await z()}catch(re){const H=re instanceof Error?re.message:String(re);v=new Error(`${b}: ${H}`)}})},k=b=>{const z=a.get(b);if(z)return`${dn}${z}`;const re=/^data:([^;,]+)/i.exec(b)?.[1]??"",H=Ko(re);if(!H)return b;const Pe=`${String(c).padStart(6,"0")}.${H}`;return c+=1,a.set(b,Pe),w(`replay asset ${Pe}`,async()=>{const Ht=Yo(b);f+=Ht.size,await $r(n,Pe,Ht)}),`${dn}${Pe}`},_=b=>b.includes("data:image/")?b.replace(Ho,k):b,T=()=>{if(i.length===0)return;const b=new Blob([`[${i.join(",")}]`],{type:"application/json"});i.length=0,p=0;const z=d;d+=1,w(`DOM event batch ${z}`,()=>Gr(n,z,b))};let D;try{D=se({emit(b){h??=b.timestamp;const z=JSON.stringify(b,(re,H)=>typeof H=="string"?_(H):H);i.push(z),p+=z.length,u+=1,p>=qo&&T()},blockSelector:`[${Ne}], [${pe}]`,recordCanvas:!0,inlineStylesheet:!0,inlineImages:!1,collectFonts:!0,sampling:{mousemove:!1,mouseInteraction:!1,scroll:100,canvas:15},errorHandler(b){return l.push(b instanceof Error?b.message:String(b)),!0}})}catch(b){throw o(),b}if(!D)throw o(),new Error("rrweb could not start the DOM recording");const N=t.ownerDocument.defaultView??window,L={width:N.innerWidth,height:N.innerHeight,dpr:N.devicePixelRatio},I=lt(t),fe=lt(e),st=se.mirror.getId(t),Tr=se.mirror.getId(e),Wt=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>{se.addCustomEvent("volter-canvas-layout",{rect:lt(e),drawingWidth:e.width,drawingHeight:e.height,dpr:N.devicePixelRatio})});Wt?.observe(e),se.addCustomEvent("volter-canvas-layout",{rect:fe,drawingWidth:e.width,drawingHeight:e.height,dpr:N.devicePixelRatio});const Pr=N.setInterval(T,Wo),qt=()=>{N.clearInterval(Pr),Wt?.disconnect(),o()};return{markVideoStarted(b){E=b},async stop(b){if(y)throw new Error("gameplay DOM recording is already stopped");if(y=!0,se.addCustomEvent("volter-recording-stop",{}),D(),qt(),T(),await S,v)throw v;return{version:1,recorder:"rrweb@2.1.6",events:"events.json",assets:"assets/",video:b,videoStartEpochMs:E,firstEventEpochMs:h,viewport:L,surface:I,surfaceNodeId:st,canvas:{...fe,nodeId:Tr,drawingWidth:e.width,drawingHeight:e.height},eventCount:u,assetCount:a.size,assetBytes:f,rrwebErrors:l}},async abort(){y||(y=!0,D(),qt(),i.length=0,await S)}}}function Qo(){let t=null,e=!1,n=null;const r=`
|
|
3
|
+
let canvas;
|
|
4
|
+
onmessage = async ({data}) => {
|
|
5
|
+
const {bitmap, width, height, type, quality} = data;
|
|
6
|
+
try {
|
|
7
|
+
if (!canvas) canvas = new OffscreenCanvas(width, height);
|
|
8
|
+
if (canvas.width !== width) canvas.width = width;
|
|
9
|
+
if (canvas.height !== height) canvas.height = height;
|
|
10
|
+
const context = canvas.getContext('2d');
|
|
11
|
+
if (!context) throw new Error('No worker canvas context');
|
|
12
|
+
context.globalCompositeOperation = 'copy';
|
|
13
|
+
context.drawImage(bitmap, 0, 0, width, height);
|
|
14
|
+
bitmap.close();
|
|
15
|
+
const blob = await canvas.convertToBlob({type, quality});
|
|
16
|
+
postMessage({blob});
|
|
17
|
+
} catch (error) {
|
|
18
|
+
bitmap.close();
|
|
19
|
+
postMessage({error: error instanceof Error ? error.message : String(error)});
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
`;function s(o){const i=n;n=null,t?.terminate(),t=null,i?.reject(o)}return{encode(o,i,a,l,p){return e?Promise.reject(new Error("Recording preview encoder stopped")):n?Promise.reject(new Error("Recording preview already in flight")):new Promise((u,f)=>{const d={resolve:u,reject:f};n=d;try{if(!t){const c=URL.createObjectURL(new Blob([r],{type:"text/javascript"}));try{t=new Worker(c)}finally{URL.revokeObjectURL(c)}t.onmessage=({data:h})=>{if(h.error||!h.blob){s(new Error(h.error??"No recording preview image"));return}const E=n;n=null,E?.resolve(h.blob)},t.onerror=h=>{h.preventDefault(),s(new Error(h.message||"Recording preview worker failed"))},t.onmessageerror=()=>s(new Error("Recording preview worker message failed"))}createImageBitmap(o).then(c=>{if(e||n!==d||!t){c.close();return}try{t.postMessage({bitmap:c,width:i,height:a,type:l,quality:p},[c])}catch(h){c.close(),s(h instanceof Error?h:new Error(String(h)))}},c=>{n===d&&s(c instanceof Error?c:new Error(String(c)))})}catch(c){s(c instanceof Error?c:new Error(String(c)))}})},dispose(){e=!0,s(new Error("Recording preview encoder stopped"))}}}let q=null;const fn=1,pn=60,Zo=30,Ze=2,ei=1e3/Ze,et=12e4,ti=et/1e3*Ze,ni=256,ri="image/webp",si=.72;function oi(t,e){const n="'use strict';var t=null;onmessage=function(e){clearInterval(t);t=null;if(e.data&&e.data.ms>0){t=setInterval(function(){postMessage(0)},e.data.ms)}};";try{const r=URL.createObjectURL(new Blob([n],{type:"text/javascript"})),s=new Worker(r);URL.revokeObjectURL(r);let o=null;return s.addEventListener("error",i=>{i.preventDefault(),o===null&&(o=window.setInterval(e,t))}),s.addEventListener("message",()=>e()),s.postMessage({ms:t}),{stop(){s.postMessage({ms:0}),s.terminate(),o!==null&&window.clearInterval(o)}}}catch{const r=window.setInterval(e,t);return{stop(){window.clearInterval(r)}}}}function ii(t){const e=t??Zo;if(!Number.isFinite(e)||!Number.isInteger(e)||e<fn||e>pn)throw new Error(`gameplay recording fps must be an integer from ${fn} to ${pn}`);return e}function ai(t){const n=(t?["video/webm;codecs=vp9,opus","video/webm;codecs=vp8,opus","video/webm"]:["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"]).find(r=>MediaRecorder.isTypeSupported(r));if(!n)throw new Error("this browser exposes MediaRecorder but no WebM video codec");return n}function kt(){qr(q?.previewSnapshot??null)}function ct(t,e){t.previewSnapshot={startedAt:t.started.startedAt,width:t.started.width,height:t.started.height,liveEdgeMs:e,sampleFps:Ze,retentionMs:et,frames:[...t.previewFrames],previewError:t.previewError},q===t&&kt()}function li(t){for(const e of t.previewFrames)URL.revokeObjectURL(e.src);t.previewFrames.length=0}function lr(t,e){if(t.stopping||t.previewEncoding||t.previewError||e<t.nextPreviewAt)return;t.nextPreviewAt=e+ei;const n=Math.min(1,ni/Math.max(1,t.output.width)),r=Math.max(1,Math.round(t.output.width*n)),s=Math.max(1,Math.round(t.output.height*n));t.previewEncoding=!0;const o=new Date().toISOString(),i=t.nextPreviewSequence;t.nextPreviewSequence+=1;const a=t.previewEncoder.encode(t.output,r,s,ri,si).then(l=>{if(t.stopping)return;if(!l){t.previewError="The browser could not encode recording previews.",ct(t,e);return}const p={sequence:i,mediaTimeMs:Math.max(0,Math.round(e)),capturedAt:o,src:URL.createObjectURL(l),width:r,height:s};for(t.previewFrames.push(p);t.previewFrames.length>ti||(t.previewFrames[0]?.mediaTimeMs??p.mediaTimeMs)<p.mediaTimeMs-et;){const u=t.previewFrames.shift();u&&URL.revokeObjectURL(u.src)}ct(t,p.mediaTimeMs)}).catch(l=>{t.stopping||(t.previewError=l instanceof Error?l.message:"The browser could not encode recording previews.",ct(t,e))}).finally(()=>{t.previewEncoding=!1});t.previewTask=a}function ci(){if(q)throw new Error("a gameplay recording is already active; stop it before starting one");if(typeof MediaRecorder>"u")throw new Error("this browser does not support MediaRecorder gameplay capture")}function ui(t){t.stopping||t.drawing||performance.now()<t.nextFrameAt||(typeof document<"u"&&document.hidden&&(t.hidden=!0),t.drawing=!0,t.frameTask=(async()=>{const e=performance.now();try{if(t.options.refreshFrame?.(),t.started.format==="composite-webm"){const n=t.staging,r=t.overlayCache;if(!n||!r)throw new Error("gameplay recording: composite buffers unavailable");await Cn(t.container,n,{canvasFrame:t.options.canvasFrame,snapshots:t.snapshots,overlayCache:r});const{output:s}=t,o=s.getContext("2d");if(!o)throw new Error("gameplay recording: output context unavailable");s.width!==n.width&&(s.width=n.width),s.height!==n.height&&(s.height=n.height),o.globalCompositeOperation="copy",o.drawImage(n,0,0),o.globalCompositeOperation="source-over",lr(t,performance.now()-t.startedWallMs)}t.frames+=1}catch{t.frameErrors+=1}finally{t.drawing=!1;const n=performance.now()-e;t.nextFrameAt=e+Math.max(t.intervalMs/2,2*n)}})())}async function cr(t,e={}){ci();const n=ii(e.fps),r=e.format??"composite-webm",s=t.ownerDocument.createElement("canvas"),o=e.audio??null;let i=null,a=null,l=null;const p=Wr(),u=Vr();try{const f=await Cn(t,s,{canvasFrame:e.canvasFrame,snapshots:p,overlayCache:u});if(f.canvases===0&&f.domOverlays===0)throw new Error("gameplay recording: no game layers are mounted");const d=Array.from(t.querySelectorAll("canvas")).filter(On);if(r==="canvas-dom"&&d.length!==1)throw new Error(`canvas-dom recording requires exactly one root canvas; this game has ${d.length}`);const c=r==="canvas-dom"?d[0]:s;if(typeof c.captureStream!="function")throw new Error("this browser cannot capture a canvas as a media stream");if(i=c.captureStream(n),o)for(const w of o.stream.getAudioTracks())i.addTrack(w);const h=ai(i.getAudioTracks().length>0),E=new MediaRecorder(i,{mimeType:h}),v=new Date().toISOString();a=await zr({startedAt:v,mimeType:h,name:e.name??null,format:r}),r==="canvas-dom"&&(l=Xo(t,c,a),u.dispose());const S={format:r,startedAt:v,mimeType:h,width:c.width,height:c.height,fps:n,audio:i.getAudioTracks().length>0,layers:f,path:a.path,replayPath:a.replayPath,rotates:a.rotates,logFile:a.logFile},y={started:S,recorder:E,output:c,staging:r==="composite-webm"?t.ownerDocument.createElement("canvas"):null,stream:i,audio:o,sink:a,startedWallMs:performance.now(),intervalMs:1e3/n,container:t,options:{canvasFrame:e.canvasFrame,refreshFrame:e.refreshFrame},clock:null,frameTask:null,drawing:!1,nextFrameAt:0,snapshots:p,overlayCache:r==="composite-webm"?u:null,domRecording:l,previewEncoder:Qo(),previewFrames:[],previewSnapshot:{startedAt:v,width:c.width,height:c.height,liveEdgeMs:0,sampleFps:Ze,retentionMs:et,frames:[],previewError:null},previewTask:null,previewEncoding:!1,previewError:null,nextPreviewAt:0,nextPreviewSequence:0,frames:1,frameErrors:0,hidden:typeof document<"u"&&document.hidden,recorderError:null,uploadError:null,uploads:Promise.resolve(),nextSequence:0,stopping:!1};return E.addEventListener("dataavailable",w=>{if(w.data.size===0||y.uploadError)return;const k=y.nextSequence;y.nextSequence+=1,y.uploads=y.uploads.then(async()=>{if(!y.uploadError)try{await Ur(y.sink,k,w.data)}catch(_){y.uploadError=_ instanceof Error?_:new Error(String(_))}})}),E.addEventListener("error",w=>{y.recorderError=w.error??new Error("gameplay recording failed")}),E.addEventListener("start",()=>{y.domRecording?.markVideoStarted(Date.now())}),E.start(1e3),q=y,kt(),r==="composite-webm"&&lr(y,0),y.clock=oi(y.intervalMs,()=>ui(y)),S}catch(f){await l?.abort(),u.dispose(),a&&await kn(a);for(const d of i?.getTracks()??[])d.stop();throw o?.dispose(),f}}async function ur(t){const e=q;if(!e)throw new Error("no gameplay recording is active");e.stopping=!0,e.clock?.stop(),e.clock=null,await e.frameTask,e.previewEncoder.dispose(),await e.previewTask;let n=!1;try{if(e.recorder.state!=="inactive"){const l=new Promise(p=>{e.recorder.addEventListener("stop",()=>p(),{once:!0})});e.recorder.stop(),await l}if(e.recorderError)throw e.recorderError;if(await e.uploads,e.uploadError)throw e.uploadError;const r=Math.max(0,Math.round(performance.now()-e.startedWallMs)),s=Math.round(r/1e3*e.started.fps),o={...e.started,durationMs:r,droppedFrames:Math.max(0,s-e.frames),frameErrors:e.frameErrors,effectiveFps:r>0?Math.round(e.frames/(r/1e3)*10)/10:0,hidden:e.hidden},i=e.sink.path.split(/[\\/]/).at(-1)??"video.webm",a=await e.domRecording?.stop(i);return await Hr(e.sink,t??null,void 0,a?{...a,capture:{durationMs:o.durationMs,droppedFrames:o.droppedFrames,frameErrors:o.frameErrors,effectiveFps:o.effectiveFps,hidden:o.hidden,fps:o.fps,width:o.width,height:o.height,mimeType:o.mimeType,audio:o.audio}}:null),n=!0,o}finally{n||(await e.domRecording?.abort(),await kn(e.sink)),q=null,kt(),li(e),e.overlayCache?.dispose();for(const r of e.stream.getTracks())r.stop();e.audio?.dispose()}}function Dt(){return q!==null}function di(){return q?.started??null}function dr(t,e){return Math.max(0,Math.floor(e-t))}function fi(){const t=q;return t===null?null:{startedAt:t.started.startedAt,elapsedMs:dr(t.startedWallMs,performance.now())}}const qa=Object.freeze(Object.defineProperty({__proto__:null,activeGameplayRecording:di,activeGameplayRecordingTimeline:fi,gameplayRecordingActive:Dt,recordingTimelineElapsedMs:dr,startGameplayRecording:cr,stopGameplayRecording:ur},Symbol.toStringTag,{value:"Module"})),Nt=12e4,pi=5e3,gn=["keydown","keyup","pointerdown","pointermove","wheel","touchstart","touchmove"];let x=null,Fe=null,hn=0,gi=null,fr=null;function hi(t){fr=t}function mi(){return!x||!Dt()?null:{path:x.started.path,format:x.started.format,replayPath:x.started.replayPath,startedAt:x.started.startedAt,rotates:x.started.rotates,logFile:x.started.logFile,idleAutoStopMs:Nt}}function pr(){x&&(x.lastActivityMs=Date.now())}function yi(){if(typeof window>"u")return()=>{};const t=()=>pr();for(const e of gn)window.addEventListener(e,t,{capture:!0,passive:!0});return()=>{for(const e of gn)window.removeEventListener(e,t,{capture:!0})}}async function Ha(t,e={}){if(x&&await Ft("restart"),await Fe,!t)return M.warn("Play started, but gameplay recording did not: no game surface is mounted to record.","play-recording"),null;try{return x={started:await cr(t,{format:Array.from(t.querySelectorAll("canvas")).filter(On).length===1?"canvas-dom":"composite-webm",...e.name?{name:e.name}:{},...e.audio?{audio:e.audio}:{},...e.refreshFrame?{refreshFrame:e.refreshFrame}:{},...e.canvasFrame?{canvasFrame:e.canvasFrame}:{}}),lastActivityMs:Date.now(),poll:null,releaseInput:yi(),ending:!1},x.poll=window.setInterval(()=>{const r=x;!r||r.ending||Date.now()-r.lastActivityMs<Nt||vi()},pi),mi()}catch(n){return M.warn(`Play started, but gameplay recording did not: ${n instanceof Error?n.message:String(n)}`,"play-recording"),null}}async function Ft(t){const e=x;if(!e||e.ending)return Fe;if(e.ending=!0,e.poll!==null&&window.clearInterval(e.poll),e.releaseInput?.(),x=null,!Dt())return null;const n=++hn,r=(async()=>{try{const s=await ur(t);return gi=s,s}catch(s){return M.warn(`Gameplay recording could not be finalized: ${s instanceof Error?s.message:String(s)}`,"play-recording"),null}finally{hn===n&&(Fe=null)}})();return Fe=r,r}function wi(t){const e=Math.round(t.durationMs/100)/10;return`${t.path} — ${e}s at ${t.effectiveFps} fps${t.hidden?" (tab hidden; that is the cadence actually captured, not the requested one)":""}`}async function vi(){const t=Math.round(Nt/1e3),e=await Ft("idle-autostop");M.log(e===null?`Play auto-stopped after ${t}s with no session command and no player input.`:`Play auto-stopped after ${t}s with no session command and no player input. Recording finalized: ${wi(e)}`,"play-recording"),fr?.()}P().session.onCommandDispatched(()=>pr());const bi={source:"live",label:"live",detail:"Running DOM adopted from the playing game. Edits apply to this session only and are discarded when play stops."},mn="structure is owned by the running React tree — play edits are live-DOM only and are discarded on stop; stop play to change structure in source";function ut(t,e){const n=[];for(const r of Ks(t).nodes.values())r.oid===e&&n.push(r.el);return n}function yn(t){return t.style?t.style:null}function Li(t){return{writeStyle:async(e,n,r)=>{const s=ut(t,e);if(s.length===0)return{changed:!1,error:`no live element carries oid "${e}"`};for(const o of s){const i=yn(o);i&&(i[n]=r)}return{changed:!0,route:"live-dom"}},removeStyle:async(e,n)=>{const r=ut(t,e);if(r.length===0)return{changed:!1,error:`no live element carries oid "${e}"`};let s=!1;for(const o of r){const i=yn(o),a=i?.[n];i&&a!==void 0&&a!==null&&a!==""&&(delete i[n],s=!0)}return{changed:s,route:"live-dom"}},writeText:async(e,n)=>{const r=ut(t,e).filter(o=>o.children.length===0);if(r.length===0)return{changed:!1,error:`no live leaf element carries oid "${e}"`};const s=r[0]?.textContent??null;for(const o of r)o.textContent=n;return{changed:!0,prevText:s}},writeProp:async(e,n)=>({changed:!1,error:`prop "${n}" is owned by the running React element (its value lives at the parent call site, not in the DOM) — play edits are live-DOM only and are discarded on stop; stop play to change it in source`}),writeStruct:async()=>({changed:!1,error:mn}),writeStructMany:async()=>({changed:!1,error:mn})}}function Ei(t,e){return new Hs(t,e.shell,{writeBackend:Li(t),provenance:bi})}function gr(){return{id:"",journalSession:"",name:"",container:null,session:null,presentation:null,unregisterPerformanceSource:null,unsubscribeSystemAdapters:null,determinismDeclared:!1,resizeObserver:null,rootResources:[]}}const g=gr(),G=[];let we=[],Y=null;const bt=new Set;function jt(){return Y&&(Y===g.id||G.some(t=>t.id===Y))?Y:g.id}function Ka(){return g.id}function Ya(t){return bt.add(t),()=>bt.delete(t)}function Bt(){for(const t of bt)t()}function Ja(t){Nn(t),jt()!==t&&(Y=t,Bt())}function Lt(t){if(!A)return!1;const{store:e}=A;return e.shell.playState==="playing"&&e.shell.activeViewportTab==="play"&&jt()===t&&ps()}let A=null;const je=new Set;function Si(){return A?Promise.resolve():new Promise((t,e)=>{const n=()=>{clearTimeout(r),je.delete(n),t()},r=setTimeout(()=>{je.delete(n),e(new Error("Play mode failed to start: the editor shell did not bind within 15 seconds."))},15e3);je.add(n)})}const Et=new Set,qe=new Set;let He=null;function hr(){return He}function Xa(t){return qe.add(t),()=>qe.delete(t)}function _i(t){He=t;for(const e of qe)e();P().live.notifyChanged()}const dt=new Set;function Mi(){if(dt.size>0){const t=[...dt].map(e=>({severity:"warn",message:e}));dt.clear(),ls("console-resolved",{conditions:t,by:"play-mode"})}if(He!==null){He=null;for(const t of qe)t();P().live.notifyChanged()}}function tt(){wr();for(const t of Et)t()}function Qa(t){return Et.add(t),()=>Et.delete(t)}let R=0,$t=null,Ke=null;Os();let Be;function Oe(t){const e={...t.capabilities,persist:!1},n=Is(),r=()=>hs({resolve:()=>ms("play edits are session-local by architecture",ys),record:()=>{}}),s=t.transforms,o=s&&{...s,get:l=>s.get(l),beginEdit:l=>s.beginEdit(l),apply:(l,p)=>s.apply(l,p),endEdit:l=>(s.endEdit(l),r()),...s.remove?{remove:()=>r()}:{}},i=t.inspector,a=i&&{...i,properties:l=>i.properties(l),get:(l,p)=>i.get(l,p),set:(l,p,u)=>(i.set(l,p,u),r()),...i.remove?{remove:()=>r()}:{}};return new Proxy(t,{get(l,p){if(p==="capabilities")return e;if(p==="persistence")return n;if(p==="transforms"&&o)return o;if(p==="inspector"&&a)return a;const u=Reflect.get(l,p,l);return typeof u=="function"?u.bind(l):u}})}function Ti(){Be!==void 0&&(Vn(Be),Be=void 0)}async function Pi(t,e,n,r,s){Be=bs();const o=[],i=[],a=()=>{for(const u of i)"dispose"in u&&typeof u.dispose=="function"&&u.dispose()};for(const u of e){const f=n?cs(n,u.id):void 0,d=f?{zOrder:f.zOrder,pausable:f.pausable,...f.entry?{content:`Entry · ${f.entry}`}:{}}:{};if(f?.adapter.identity==="ingest-react"){o.push({worldId:u.id,kind:u.kind,adapter:new Yt(t.shell,{id:u.id,kind:u.kind,adapter:f.adapter.identity,entryOrScenePath:f.entry,zOrder:f.zOrder,pausable:f.pausable}),...d});continue}const c=u.mounted;if(c.kind==="three"){const h=It(c).scene,E=u.id===r&&h===t.scene,v=E?await zs():void 0;if(!s()){a();return}const S=E?Us(t,h,$s(u.id),ft(u.id),{explicitSourceCommit:!0,sourceAnchor:v}):Vs(t,h,{frameControl:"host",journal:ft(u.id)});i.push(S),o.push({worldId:u.id,kind:u.kind,adapter:Oe(S),...d})}else if(c.kind==="canvas"){if(c.substrate.name==="babylon"){const{BabylonAuthoringAdapter:I}=await $(async()=>{const{BabylonAuthoringAdapter:st}=await import("./babylon-authoring-adapter-CS9LZNmz.js");return{BabylonAuthoringAdapter:st}},__vite__mapDeps([23,18,2,3,4,10,19,6,20,5,21,24,25,26]));if(!s()){a();return}const fe=new I(c.substrate.root,t,{canvas:c.canvas,api:c.substrate.api,provenance:{source:"live",label:"live",detail:"Native Babylon.js play scene; ordinary Play edits are ephemeral."}});i.push(fe),o.push({worldId:u.id,kind:u.kind,adapter:Oe(fe),...d});continue}if(c.substrate.name!=="pixi"){const I=new Yt(t.shell,{id:u.id,kind:u.kind,adapter:c.substrate.name,entryOrScenePath:f?.entry,zOrder:f?.zOrder??0,pausable:f?.pausable??!0},`No authoring adapter is registered for canvas substrate "${c.substrate.name}".`);i.push(I),o.push({worldId:u.id,kind:u.kind,adapter:I,...d});continue}const h=c.substrate.root,[E,v,S,y,w]=await Promise.all([$(()=>import("./physics-registry-B2Jkp8e6.js"),[]),$(()=>import("./system-adapters-rIC8FSGP.js"),[]),$(()=>import("./pixi-authoring-adapter-CPsN0Yk7.js").then(I=>I.p),__vite__mapDeps([27,28,18,2,3,4,10,19,6,20,5,21,25,26,29,30,31,24,32])),$(()=>import("./pixi-live-write-target-BUbt5ixX.js"),__vite__mapDeps([33,18,2,3,4,10,19,6,20,5,21,24,25,26,32])),$(()=>import("./canvas-entry-runtime-a6N7Rsrj.js"),__vite__mapDeps([34,18,2,3,4,10,19,6,20,5,21,35]))]);if(!s()){a();return}const{createPhysics2DRegistry:k}=E,{createPhysicsAdapter2D:_}=v,{PixiAuthoringAdapter:T}=S,{createLiveCanvasWriteTarget:D}=y,N=_(u.physics2d??k()),L=new T(h,t,{pixi:await w.resolveCanvasPixiForEditor(),target:D({physics:N}),journal:ft(u.id),surface:xi});i.push(L),o.push({worldId:u.id,kind:u.kind,adapter:Oe(L),...d})}else if(c.kind==="dom"){const h=Ei(c.container,t);i.push(h),o.push({worldId:u.id,kind:u.kind,adapter:Oe(h),...d})}else Gs(c,"installPlayRootAuthoring")}if(!s()){a();return}g.rootResources=i;const l=us(Xe()?.config),p=new ds(o,void 0,l);Vn(p),t.shell.notifyIngestEdit()}function ft(t){return Kn(g.id,t)}function Ai(t){for(const e of g.rootResources)"dispose"in e&&typeof e.dispose=="function"&&e.dispose();g.rootResources=[],g.journalSession&&(t.shell.projectHistory?.expireSession(g.journalSession),g.journalSession="")}function Ii(t){return!(t.defaultPrevented||vs(t.target))}let ve=null,be=null,Le=null,Ee=null,Se=null,J=Promise.resolve(),$e=null,Z=[],Ge=0;function mr(){const t=g.session?.game;if(!t)return{};const e=t.roots,n=g.presentation?.worldId??(e.length===1?e[0]?.id:void 0),r=t.loop.timeScale;return{...n!==void 0?{world:n}:{},...typeof r=="number"?{simSpeed:r}:{}}}function St(){const t=g.session?.game?.systemAdapters?.debug;if(t)try{const e=Vo(t.events(Ge),Ge);Ge=e.lastSeq;const n=mr();for(const r of e.entries)Z.push({...r,...n})}catch{}}Zr(t=>{Zs(t),g.session&&_i("Project assets changed — restart play to load the revised models or textures.")});function xi(){return P().workspace.liveDocument.container()}function Ri(){const t=()=>{const e=P().workspace.liveDocument.container();if(!e)return;const n=typeof document<"u"?document.activeElement:null;n instanceof HTMLElement&&n!==e&&n.tagName==="BUTTON"&&n.blur(),e.hasAttribute("tabindex")||(e.tabIndex=-1);try{e.focus({preventScroll:!0})}catch{}gs("viewport")};t(),setTimeout(t,150),setTimeout(t,600)}Ys(t=>Ci(t));function Ci(t){A={store:t,gameContainer:null},hi(ae);for(const e of je)e()}function ze(){return g.session!==null}function ke(){const t=g.session?.game;if(!t)return null;const e=Qe(t),n=e?.getRunTicksTarget()??null;return{getInputTarget:r=>e?.getVirtualInputTarget(r)??null,loop:t.loop,runTicks:n?n.runTicks.bind(n):null,runTicksSettled:e&&n?(r,s)=>No(e,r,s):null,random:Ms(t),determinismDeclared:g.determinismDeclared}}function Za(){const t=g.session?.game.defaultRoot.mounted;return t?.kind==="three"?It(t).scene:null}function el(){const t=g.session?.game?.roots;return t?t.map(e=>{const n=e.mounted;let r=!1;if(n.kind==="three")r=Fs(It(n).scene);else if(n.kind==="canvas")try{r=n.substrate.name==="pixi"?Ns(n.substrate.root):n.substrate.name==="babylon"?(n.substrate.root.scenes??[]).some(s=>(s.rootNodes?.length??0)>0):!1}catch{r=!1}else r=js(n.container);return{rootId:e.id,kind:n.kind,hasRenderableContent:r}}):[]}function Oi(){return g.session?Dn(P().workspace.liveDocument.container()).canvas:null}function ki(t){return!t||t===g.id?P().workspace.liveDocument.container():G.find(e=>e.id===t)?.container??null}function tl(t){if(!t||t===g.id)return Oi();const e=G.find(n=>n.id===t);return e?.session?Dn(e.container).canvas:null}function yr(){return $t}function Di(){return Ke}function ne(){return[g,...G].filter(t=>t.session)}const De=new Set;function wr(){const t=new Set(ne().map(e=>e.session.game.loop));for(const e of De)t.has(e)||De.delete(e);for(const e of t)xs()?De.delete(e)&&e.start():e.liveness!=="stopped"&&(De.add(e),e.stop())}Rs(wr);function wn(){const t=ne(),e=ws();return t.find(n=>n.id===e)??t[0]??null}let Ye=null;function Ni(){Ye?.(),Ye=fs(()=>({projectName:Xe()?.config.name??null,instanceName:ne().length>1?wn()?.name??null:null})),Wn(()=>{const t=wn();return t?.session?{game:t.session.game,instanceId:t.id,recording:Ls}:null})}function Fi(){Ye?.(),Ye=null,Wn(null)}function nl(t,e,n){for(const r of ne())r.session?.resize(t,e,n)}let vn=Promise.resolve(),nt=null,Gt=null;function rl(){return nt}function ji(){const t=globalThis.crypto?.randomUUID?.()??`private-${Date.now()}`;return{mode:"private",id:t,roomKey:`private:${t}`,revision:null,participantId:Xr}}function bn(t,e=ji(),n,r){const s=r??null,o=vn.then(()=>(Yr(),$i(t,e,n??null,s).finally(()=>{Jr()})));return vn=o.then(()=>{},()=>{}),o}async function Bi(t){const{autoLaunchIngest:e}=await $(async()=>{const{autoLaunchIngest:s}=await import("./mount-ingest-root-BsWbEvr_.js").then(o=>o.m);return{autoLaunchIngest:s}},__vite__mapDeps([36,18,2,3,4,10,19,6,20,5,21,37,38,39,26,40,41,42,43,7,8,44,45,31,30,46,47]));await e(t);const n=Ds();if(n)return n.play(),!0;const{isModuleModeActive:r}=await $(async()=>{const{isModuleModeActive:s}=await import("./module-mode-BHOAAbgO.js");return{isModuleModeActive:s}},__vite__mapDeps([48,18,2,3,4,10,19,6,20,5,21,39,38,49,50,51,35,40,52,53,8,54,9,7,11,55,34,56,57,58,59,44,60,61,62]));return r()}function pt(t,e){return X(t),Uo(t,e,{isHidden:()=>typeof document<"u"&&document.hidden,editorUrl:typeof window<"u"?window.location.href:void 0})}async function $i(t,e,n,r){if(!A){const d=R;if(X("waiting for the editor to bind Play"),await Si(),R!==d)throw new Error("Play start cancelled while waiting for the editor to bind.")}if(!A)throw new Error("Play mode failed to start: the editor shell is not bound.");if(X("waiting for the project bootstrap to settle"),await es(),g.session&&ae(),Gt=r,await Bi(A.store)||await Ws(A.store))return;const s=++R;nt=e,$t=Date.now(),Ke=null;const{store:o}=A;Ki();const i=J.then(()=>Xs(n));if(J=i,await pt("starting the play log session",i),s!==R||(Z=[],Ge=0,M.setSink(d=>{let c;try{const h=g.session?.game?.systemAdapters.debug?.state("time");typeof h?.tick=="number"&&typeof h.simSeconds=="number"&&(c={tick:h.tick,simT:h.simSeconds})}catch{}Z.push({t:d.timestamp,level:d.level,msg:d.message,...d.source?{source:d.source}:{},...d.subsystem?{sub:d.subsystem}:{},...d.metadata?{meta:d.metadata}:{},...c??{},...mr()})}),$e=setInterval(()=>{if(St(),Z.length>0){const d=Z.splice(0);J=J.then(()=>Qn(d))}},200),ve=d=>{d.key==="Escape"&&Ii(d)&&ae()},window.addEventListener("keydown",ve),X("opening the Game document"),await P().workspace.liveDocument.acquire(),s!==R))return;const a=P().workspace.liveDocument.container();if(!a){const d="Play mode failed to start: the game container is not mounted in the workspace.";throw M.error(d,"play-mode"),ae(),new Error(d)}const l=a.clientWidth,p=a.clientHeight;a.style.contain||(a.style.cssText+=Xn),Fn(a),ht(a),P().viewport.transition.begin(),o.shell.setPlayState("playing"),Ri(),M.log("Play mode started","play-mode"),P().viewport.transition.onSettled(()=>{s===R&&o.shell.playState==="playing"&&ts()});let u=null,f=null;try{const d=Xe();if(!d)throw new Error("No project open — open or create a project first");const c=await pt("fetching the project manifest",jn());we=Ae(c).map(L=>L.id);for(const L of we)Kt({rootId:L,mechanism:"host-mount",source:"declared",state:"waiting"});let h;Bn();const{entries:E,mountId:v}=await pt("resolving the project's root entries",Yn(c,d.rootPath,{selectionOverride:r??void 0}));if(M.log(`Resolved manifest composition (${Ae(c).length} world${Ae(c).length===1?"":"s"}): `+Ae(c).map(L=>`${L.id} (${L.surface})`).join(", "),"play-mode"),s!==R)return;const S=a.clientWidth||l,y=a.clientHeight||p;ht(a,v),u=v,X("mounting the runtime roots");const{mountManifestRoots:w}=await $(async()=>{const{mountManifestRoots:L}=await import("./mount-manifest-t6ipNsoF.js");return{mountManifestRoots:L}},__vite__mapDeps([63,52,18,2,3,4,10,19,6,20,5,21,64,65,66,67,68,69,7,8,70,71,72,73,74,75,76,77,35,78,79,80,81,82,83,84,85,50,51,40,38,86,87,9,11,88,39,89,24,49,53,54,55,34,56,57,58,59,44,60,61,62,90,37,26,91,92,93,94,46,30,31,47,95,45,29,96,97,25,98,99,100,101,102,103,104,105,106,107,108,109,110,111,41,42,43,112]));if(h=await w({manifest:c,container:a,entries:E,width:S,height:y,seed:t,playtest:e}),f=h,s!==R){h.stop(),Te(h,v,"Cancelled instance");return}for(const L of $n(d.rootPath))M.error(Gn(L),"play-mode");for(const L of we)Kt({rootId:L,mechanism:"host-mount",source:"declared",state:"ready"});if(Zn(h.game),g.session=h,g.id=v,g.journalSession=Kn(v,"").session,g.name=vr(0),g.unregisterPerformanceSource?.(),g.unregisterPerformanceSource=zn({id:"workspace:game",label:"Game runtime",kind:"game",instanceId:v,profiler:h.game.profiler}),Mi(),g.determinismDeclared=c.determinism?.seededRandom===!0,c.configurations.some(L=>L.kind==="process")&&Qe(h.game)?.setRoomDeclared(!0),tt(),o.shell.setPlayEditRegime("ephemeral"),g.presentation=Js(h.game.roots)??Bs(o,h.game.roots),X("installing play authoring for each root"),await Pi(o,h.game.roots,c,g.presentation?.worldId??null,()=>s===R),s!==R)return;X("binding the editor to the running game");const k=h.game.systemAdapters;Me(k,v),Nn(v),Ni(),g.unsubscribeSystemAdapters?.(),g.unsubscribeSystemAdapters=h.game.subscribeSystemAdapters?.(()=>{Un(h.game.systemAdapters,v)})??null,We(()=>Lt(v),v),We(()=>Lt(jt()));const _=Rn(k.physics);o.setEcsSyncTransform((L,I)=>{!_||ns(_,L)==="unresolved"||_.commit(L,{position:I.position.toArray(),rotation:I.quaternion.toArray(),scale:I.scale.toArray()})});const T=jo(),D=a.clientWidth,N=a.clientHeight;D>0&&N>0&&(D!==l||N!==p||T!==null)&&h.resize(D,N,T??void 0),P().viewport.transition.ready(()=>{const L=g.session?.game;if(!L)return null;for(const I of L.roots)if(I.mounted.kind==="three")return I.mounted.camera;return null})}catch(d){const c=`Play mode failed to start: ${d}`;if(M.error(c,"play-mode"),u!==null&&g.id!==u)if(f){try{f.stop()}catch(h){M.error(`Error stopping the failed play session: ${h}`,"play-mode")}Te(f,u,"Failed instance")}else rt(u,"Failed instance");throw s===R&&ae(),new Error(c)}}async function sl(t,e){if(!A)throw new Error("Cannot mount an additional instance: play mode is not bound.");if(!g.session)throw new Error("Cannot mount an additional instance: no primary play session is running.");const n=R,r=Xe();if(!r)throw new Error("Cannot mount an additional instance: no project is open.");const s=await jn();Bn();const{entries:o,mountId:i}=await Yn(s,r.rootPath,{selectionOverride:Gt??void 0});t.style.contain||(t.style.cssText+=Xn),Fn(t),ht(t,i);const{mountManifestRoots:a}=await $(async()=>{const{mountManifestRoots:d}=await import("./mount-manifest-t6ipNsoF.js");return{mountManifestRoots:d}},__vite__mapDeps([63,52,18,2,3,4,10,19,6,20,5,21,64,65,66,67,68,69,7,8,70,71,72,73,74,75,76,77,35,78,79,80,81,82,83,84,85,50,51,40,38,86,87,9,11,88,39,89,24,49,53,54,55,34,56,57,58,59,44,60,61,62,90,37,26,91,92,93,94,46,30,31,47,95,45,29,96,97,25,98,99,100,101,102,103,104,105,106,107,108,109,110,111,41,42,43,112])),l=await a({manifest:s,container:t,entries:o,width:t.clientWidth,height:t.clientHeight,playtest:nt});for(const d of $n(r.rootPath))M.error(Gn(d),"play-mode");if(n!==R||!g.session){try{l.stop()}catch{}return Te(l,i,e?.trim()||"Cancelled instance"),i}Zn(l.game);const p=gr();p.id=i,p.name=e?.trim()||vr(G.length+1),p.container=t,p.session=l,p.unregisterPerformanceSource=zn({id:`workspace:game:${i}`,label:`Game runtime (instance ${i})`,kind:"game",instanceId:i,profiler:l.game.profiler});const u=l.game.systemAdapters;Me(u,i),p.unsubscribeSystemAdapters=l.game.subscribeSystemAdapters?.(()=>{Un(l.game.systemAdapters,i)})??null,We(()=>Lt(i),i),G.push(p);const f=g.session.game.systemAdapters;return Me(f,g.id),tt(),i}function Gi(){return G.map(t=>t.id)}function ol(){const t=[];g.id&&t.push({id:g.id,name:g.name});for(const e of G)e.id&&t.push({id:e.id,name:e.name});return t}function zi(t){return g.id===t?g.name:G.find(e=>e.id===t)?.name}function rt(t,e){t&&(Jn(t),Cs(t,e))}function Te(t,e,n){t.stopComplete.then(()=>rt(e,n))}function Ui(t){const e=G.findIndex(s=>s.id===t);if(e<0)return;const[n]=G.splice(e,1);if(!n)return;n.unsubscribeSystemAdapters?.(),n.unsubscribeSystemAdapters=null;const r=n.session;try{r?.stop()}catch(s){M.error(`Error stopping additional instance ${n.id}: ${s}`,"play-mode")}n.unregisterPerformanceSource?.(),Me(null,n.id),r?Te(r,n.id,n.name):rt(n.id,n.name),n.container=null,n.session=null,Y===t&&(Y=null,Bt()),tt()}function Vi(){for(const t of Gi())Ui(t)}let ce=[];const _t=new Set;function zt(t){if(t===0){const e=Qr()?.getPlayerIdentity?.()?.name?.trim();if(e)return e}return`Instance ${t+1}`}function il(){return ce.length===0?0:ce.length-1}function vr(t){return ce[t]??zt(t)}function al(t){return _t.add(t),()=>_t.delete(t)}function Wi(){for(const t of _t)t()}function qi(t){const e=Math.max(0,Math.floor(t));Hi(e===0?[]:Array.from({length:e+1},(n,r)=>zt(r)))}function Hi(t){const e=t.length<=1?[]:t.map((n,r)=>n?.trim()?n.trim():zt(r));e.length===ce.length&&e.every((n,r)=>n===ce[r])||(ce=e,Wi())}function ae(){if(R++,Kr(),!A||(Ft("teardown"),Fi(),Gt=null,qs(A.store)))return;nt=null,Y=null,Bt();const{store:t}=A;St(),qi(0),Vi(),P().viewport.transition.end(),t.setEcsSyncTransform(null);const e=g.id,n=g.name||"Game instance";g.id="",g.unsubscribeSystemAdapters?.(),g.unsubscribeSystemAdapters=null,Me(null,e),g.presentation?.dispose(),g.presentation=null,Ai(t),Ti(),t.shell.setPlayEditRegime(null);const r=g.session;if(r)try{r.stop()}catch(s){M.error(`Error stopping play session: ${s}`,"play-mode")}finally{g.unregisterPerformanceSource?.(),g.unregisterPerformanceSource=null,g.session=null,g.determinismDeclared=!1,tt()}r?Te(r,e,n):rt(e,n);for(const s of we)rs(s);if(we=[],We(()=>!0),Jn(),g.resizeObserver?.disconnect(),g.resizeObserver=null,ve&&(window.removeEventListener("keydown",ve),ve=null),M.log("Play mode stopped","play-mode"),ss(),$e&&(clearInterval($e),$e=null),St(),M.setSink(null),Z.length>0){const s=Z.splice(0);J=J.then(()=>Qn(s))}J=J.then(()=>Qs()),Yi(),t.shell.setPlayState("stopped"),P().workspace.liveDocument.release(),$t!==null&&Ke===null&&(Ke=Date.now())}function ll(){if(!(!g.session||!A)){for(const t of ne())t.session?.pause();A.store.shell.setPlayState("paused"),M.log("Play mode paused","play-mode")}}function cl(){if(!(!g.session||!A)){for(const t of ne())t.session?.resume();A.store.shell.setPlayState("playing"),M.log("Play mode resumed","play-mode")}}function ul(){if(g.session)for(const t of ne())t.session?.step()}function Ki(){os(),be=console.log,Le=console.info,Ee=console.warn,Se=console.error;const t=(e,n)=>{if(yt)return;const r=ks();M.logStructured(e,as(n),"game",void 0,r?{instanceId:r,instanceName:zi(r)??`Instance ${r}`}:void 0)};console.log=(...e)=>{be?.apply(console,e),t("info",e)},console.info=(...e)=>{Le?.apply(console,e),t("info",e)},console.warn=(...e)=>{Ee?.apply(console,e),t("warn",e)},console.error=(...e)=>{Se?.apply(console,e),t("error",e)}}function Yi(){is(),be&&(console.log=be),Le&&(console.info=Le),Ee&&(console.warn=Ee),Se&&(console.error=Se),be=null,Le=null,Ee=null,Se=null}P().live.register({id:"play",priority:0,mounted:ze,playing:ze,stop:ae,instanceContainer:t=>ki(t),startedAt:yr,endedAt:Di,restartRequired:hr,restart:()=>void bn(),remount:async t=>{try{return await bn(void 0,void 0,void 0,t),ze()?{ok:!0}:{ok:!1,error:"Play did not start: the remount was superseded before it finished booting."}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}});P().session.reportFacet(()=>({timeScale:ke()?.loop.timeScale??null,loopLiveness:ke()?.loop.liveness??null,restartRequired:hr(),seed:ke()?.random?.seed??null,deterministic:ke()?.determinismDeclared??!1}));const br=10,Ji=11,Lr=12,Ut=13,Xi=14,Qi=15,Er=17,Vt=18,Ln=2e3,V=[],Mt=new WeakMap,En=new WeakMap,_e=new WeakMap;let Tt={latencyMs:0,jitterMs:0,packetLoss:0};function Sn(t,e,n){const{latencyMs:r,jitterMs:s}=Tt,o=performance.now(),i=e==="in"?t.dueIn:t.dueOut;if(r<=0&&s<=0&&i<=o){n();return}const a=Math.max(i,o+r+Math.random()*s);e==="in"?t.dueIn=a:t.dueOut=a,setTimeout(n,a-o)}const Ue=new Map,ge=[];let _n=0;const Pt=new Set;let ee={start:0,msgsIn:0,msgsOut:0,bytesIn:0,bytesOut:0},he={msgsIn:0,msgsOut:0,bytesIn:0,bytesOut:0};function W(){for(const t of Pt)t()}function Sr(t){const e=t-ee.start;e<1e3||(he=e<2e3?{...ee}:{msgsIn:0,msgsOut:0,bytesIn:0,bytesOut:0},ee={start:t,msgsIn:0,msgsOut:0,bytesIn:0,bytesOut:0})}let de=!1;const Zi="networkProfilerAutostart";let Mn;function ea(t){const e=new Map,n=(r,s)=>{if(!r||typeof r!="object"||e.has(r))return;e.set(r,s);const o=r.constructor?.[Symbol.metadata];if(o){for(const i of Object.keys(o)){const a=/^\d+$/.test(i)?o[i]?.name:void 0;a&&n(r[a],[...s,a])}return}r.forEach?.((i,a)=>n(i,[...s,String(a)]))};return n(t,[]),e}function ta(t,e,n){if(!de||e.length===0)return;const r=ea(t.serializer?.getState()),s=new Map;for(const o of e){const i=[...r.get(o.ref)??[],String(o.dynamicIndex??o.field)],a=i.slice(0,i.length>1?2:1).join(".");s.set(a,(s.get(a)??0)+1)}for(const[o,i]of s){let a=t.entities.get(o);a||(a={path:o,syncs:0,changes:0,patchBytesMin:n,patchBytesMax:n},t.entities.set(o,a)),a.syncs+=1,a.changes+=i,a.patchBytesMin=Math.min(a.patchBytesMin,n),a.patchBytesMax=Math.max(a.patchBytesMax,n)}}function F(t,e,n,r,s){if(!de)return;const o=Date.now();Sr(o),e==="in"?(ee.msgsIn+=1,ee.bytesIn+=r):(ee.msgsOut+=1,ee.bytesOut+=r);let i=t.types.get(n);i||(i={type:n,countIn:0,countOut:0,bytesIn:0,bytesOut:0},t.types.set(n,i)),e==="in"?(i.countIn+=1,i.bytesIn+=r):(i.countOut+=1,i.bytesOut+=r),s!==void 0&&(i.last=s),_n+=1,ge.push({seq:_n,time:performance.now(),direction:e,type:n,size:r}),ge.length>Ln&&ge.splice(0,ge.length-Ln)}function Je(t,e){const n=t;return Q.stringCheck(n,e)?Q.string(n,e):String(Q.number(n,e))}function na(t,e){const n=e[0],r={offset:1},s=e;try{if(n===br)Q.utf8Read(s,r,e[r.offset++]),Q.utf8Read(s,r,e[r.offset++])==="schema"&&!t.serializer&&(t.serializer=new Ir,e.byteLength>r.offset&&t.serializer.handshake(e,r)),t.state="connected",t.joinedAt??=Date.now(),F(t,"in","join",e.byteLength);else if(n===Ji){const o=Q.number(s,r),i=Q.string(s,r);t.error=`${o}: ${i}`,t.state="error",F(t,"in","error",e.byteLength)}else if(n===Lr)F(t,"in","leave",e.byteLength);else if(n===Xi)t.serializer?.setState(e,r),t.stateBytes=e.byteLength,F(t,"in","state",e.byteLength);else if(n===Qi){const o=t.serializer?.decoder;let i=[];o&&(o.triggerChanges=a=>i=a),t.serializer?.patch(e,r),ta(t,i,e.byteLength),de&&(t.patches+=1,t.patchBytes+=e.byteLength),F(t,"in","patch",e.byteLength)}else if(n===Ut){const o=Je(e,r),i=e.byteLength>r.offset?An(e,{start:r.offset}):void 0;F(t,"in",o,e.byteLength,i)}else if(n===Er)F(t,"in",Je(e,r),e.byteLength);else if(n===Vt){t.pingSentAt!==null&&(t.rttMs=Math.round(performance.now()-t.pingSentAt)),t.pingSentAt=null;const o=_e.get(t);_e.delete(t),o&&t.rttMs!==null&&o(t.rttMs),F(t,"in","ping",e.byteLength)}}catch(o){t.error||(t.error=`the editor could not read a frame (code ${n}): ${String(o)}`)}W()}function ra(t,e){const n=e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):null;if(!n||n.byteLength===0)return;const r=n[0],s={offset:1};try{if(r===Ut){const o=Je(n,s),i=n.byteLength>s.offset?An(n,{start:s.offset}):void 0;F(t,"out",o,n.byteLength,i)}else r===Er?F(t,"out",Je(n,s),n.byteLength):r===Vt?(t.pingSentAt=performance.now(),F(t,"out","ping",n.byteLength)):r===br?F(t,"out","join",n.byteLength):r===Lr&&F(t,"out","leave",n.byteLength)}catch{}W()}function sa(t){let e;try{e=new URL(t,location.href)}catch{return null}const n=e.searchParams.get("sessionId"),r=e.pathname.split("/").filter(Boolean);if(!n||r.length<2)return null;const s=r[r.length-1];return{processId:r[r.length-2],roomId:s,sessionId:n,endpoint:`${e.protocol}//${e.host}`}}function oa(t,e){const n=sa(e);if(!n)return;const r={...n,state:"connecting",joinedAt:null,closedAt:null,closeCode:null,error:null,serializer:null,pingSentAt:null,rttMs:null,stateBytes:0,patches:0,entities:new Map,patchBytes:0,types:new Map,socket:t,dueIn:0,dueOut:0,receive:null},s=ze()?yr():null,o=!V.some(a=>a.state==="connected"||a.state==="connecting");(s!==Mn||s===null&&o)&&(Mn=s,de=P().projectLocalState.read(Zi)??!1),V.push(r),Mt.set(t,r),t.addEventListener("message",a=>{Sn(r,"in",()=>{a.data instanceof ArrayBuffer&&na(r,new Uint8Array(a.data)),r.receive?.(a)})}),t.addEventListener("close",a=>{r.state="disconnected",r.closedAt=Date.now(),r.closeCode=a.code,W()}),t.addEventListener("error",()=>{r.state="error",r.error??="the socket reported an error",W()});const i=t.send.bind(t);t.send=a=>{ra(r,a),Sn(r,"out",()=>{t.readyState===t.OPEN&&i(a)})},W()}function ia(t,e){const n=typeof t=="string"?t:t instanceof URL?t.href:t.url;/\/matchmake\//.test(n)&&e.clone().json().then(r=>{const s=r.room??r;typeof s.roomId=="string"&&typeof s.name=="string"&&(Ue.set(s.roomId,s.name),W())}).catch(()=>{})}function dl(){const t=window;if(t.__volterNetworkObserver)return;t.__volterNetworkObserver=!0;const e=window.WebSocket;if(typeof e=="function"){const r=class extends e{constructor(s,o){super(s,o),oa(this,String(s))}set onmessage(s){const o=Mt.get(this);if(!o){super.onmessage=s;return}En.set(this,s),o.receive=s?i=>s.call(this,i):null}get onmessage(){return Mt.has(this)?En.get(this)??null:super.onmessage}};window.WebSocket=r}const n=window.fetch;typeof n=="function"&&(window.fetch=async(r,s)=>{const o=await n(r,s);return ia(r,o),o})}function _r(t){if(typeof t=="string")return t;if(typeof t=="function")return"schema";if(t&&typeof t=="object"){const[e,n]=Object.entries(t)[0]??[];if(e)return`${e}<${_r(n)}>`}return"unknown"}function aa(t,e){let n=t,r=null,s=null;for(const o of e){if(n==null)return null;const i=n.constructor?.[Symbol.metadata];if(i&&typeof i[o]=="number")s=i[i[o]]?.type??null,r=s&&typeof s=="object"?Object.values(s)[0]:null,n=n[o];else{s=r,r=null;const a=n;n=a.get?a.get(String(o)):a.at?a.at(Number(o)):void 0}}return s===null?null:_r(s)}function Mr(t){return`${t.endpoint.replace(/^ws/,"http")}/monitor/api`}async function Tn(t){const e=await fetch(t).catch(()=>null);return!e||!e.ok?null:await e.json().catch(()=>null)}async function oe(t,e,n,r){const s=j();if(!s)throw new Error("No room is observed.");const o=new URLSearchParams({roomId:r??s.roomId,method:t,args:JSON.stringify(e)}),i=await fetch(`${Mr(s)}/room/call?${o}`);if(i.status===404)throw new Error(`The room server serves no Monitor view, so ${n} has nowhere to go (its \`server\` configuration sets VOLTER_ROOM_MONITOR=1).`);if(!i.ok)throw new Error(`The room server refused ${n} (${i.status}).`)}function j(){for(let t=V.length-1;t>=0;t-=1)if(V[t].state!=="disconnected")return V[t];return V[V.length-1]??null}function la(t){const e=t?.serializer?.getState();return e?.toJSON?e.toJSON():e}function Pn(){return Sr(Date.now()),{msgsInPerSec:he.msgsIn,msgsOutPerSec:he.msgsOut,bytesInPerSec:he.bytesIn,bytesOutPerSec:he.bytesOut}}const ca={peers(){return V.filter(t=>t.state==="connected").map(t=>({id:t.sessionId,label:`${Ue.get(t.roomId)??t.roomId} (this client)`}))},networkId:()=>null,authority:()=>"server",editable:()=>!1,getConnectionState(){return j()?.state??"disconnected"},getRoomInfo(){const t=j();return t?{roomId:t.roomId,sessionId:t.sessionId,roomName:Ue.get(t.roomId)??""}:null},getReplicationStats(){const e=j()?.serializer?.decoder?.root?.refs,n=Pn();return{entities:e?.size??0,msgsInPerSec:n.msgsInPerSec,msgsOutPerSec:n.msgsOutPerSec}},subscribe(t){return Pt.add(t),()=>{Pt.delete(t)}},getStateSnapshot:()=>la(j()),messageEvents(t=0){return ge.filter(e=>e.seq>t)},getRates:Pn,sendMessage(t,e){const n=j();if(!n||n.state!=="connected")throw new Error("No room is connected to send into.");const r=new Uint8Array(6+t.length*3);r[0]=Ut;const s={offset:1};xr.string(r,t,s);const o=e===void 0?new Uint8Array(0):new Uint8Array(Ar(e)),i=new Uint8Array(s.offset+o.byteLength);i.set(r.subarray(0,s.offset)),i.set(o,s.offset),n.socket.send(i)},getConditioning:()=>({...Tt}),setConditioning(t){Tt={latencyMs:Math.max(0,t.latencyMs),jitterMs:Math.max(0,t.jitterMs),packetLoss:0},W()},getConditioningLimits:()=>({packetLoss:"A WebSocket is reliable and ordered: a lost packet is resent, so loss is not simulated here."}),ping(){const t=j();return!t||t.state!=="connected"?Promise.reject(new Error("No room is connected to ping.")):new Promise((e,n)=>{_e.set(t,e),setTimeout(()=>{_e.get(t)===e&&(_e.delete(t),n(new Error("The server did not answer the ping within 5 s.")))},5e3),t.socket.send(new Uint8Array([Vt]))})},async inspectServer(t){const e=j();if(!e)return null;const n=Mr(e),r=await Tn(`${n}/`);if(!r)return null;const s=t??e.roomId,o=await Tn(`${n}/room?roomId=${encodeURIComponent(s)}`),i=a=>{const l=Number(a);return Number.isFinite(l)?l:null};return{rooms:(r.rooms??[]).map(a=>({roomId:a.roomId,name:a.name,clients:a.clients,maxClients:i(a.maxClients),locked:a.locked===!0,elapsedMs:a.elapsedTime??0})),connections:r.connections??0,cpuPercent:typeof r.cpu=="number"&&Number.isFinite(r.cpu)?r.cpu:null,memory:r.memory?.usedMemMb!==void 0&&r.memory.totalMemMb!==void 0?{usedMb:r.memory.usedMemMb,totalMb:r.memory.totalMemMb}:null,room:o?{roomId:s,clients:(o.clients??[]).map(a=>({sessionId:a.sessionId,elapsedMs:a.elapsedTime})),stateBytes:o.stateSize??0,...o.state!==void 0?{state:o.state}:{}}:null}},disconnectClient:(t,e)=>oe("_forceClientDisconnect",[t],"the disconnect",e),editServerState:(t,e,n)=>oe("_editStateProperty",[t,e],"the state edit",n),deleteServerState:(t,e)=>oe("_deleteStateProperty",[t],"the state delete",e),sendToClient:(t,e,n,r)=>oe("_sendMessageToClient",[t,e,n],"the send",r),broadcast:(t,e,n)=>oe("broadcast",[t,e],"the broadcast",n),disposeRoom:t=>oe("disconnect",[],"the dispose",t),clearTraffic(){for(const t of V)t.types.clear(),t.entities.clear(),t.patches=0,t.patchBytes=0;W()},stateFieldType(t){return aa(j()?.serializer?.getState(),t)},getTrafficByType(){const t=j();return t?[...t.types.values()].map(({type:e,countIn:n,countOut:r,bytesIn:s,bytesOut:o})=>({type:e,countIn:n,countOut:r,bytesIn:s,bytesOut:o})):[]},getTrafficByEntity(){const t=j();return t?[...t.entities.values()].map(({path:e,syncs:n,changes:r,patchBytesMin:s,patchBytesMax:o})=>({path:e,syncs:n,changes:r,patchBytesMin:s,patchBytesMax:o})).sort((e,n)=>n.syncs-e.syncs):[]},isRecording:()=>de,setRecording(t){de=t,W()},getServerConfig(){const t=j();if(!t)return null;const e=Ue.get(t.roomId);return e?{endpoint:t.endpoint,roomName:e}:{endpoint:t.endpoint}}};export{sl as $,ki as A,tl as B,mi as C,cr as D,fi as E,Fa as F,bo as G,Zs as H,Za as I,rr as J,ir as K,za as L,$a as M,Zi as N,Ga as O,ja as P,Ba as Q,Ya as R,Va as S,Bo as T,Wa as U,nl as V,Ja as W,Ka as X,vr as Y,el as Z,Qa as _,ze as a,Ui as a0,Ua as a1,Fo as a2,qa as a3,ol as b,Hi as c,ur as d,bn as e,ul as f,ke as g,Ft as h,dl as i,ae as j,Ha as k,cl as l,rl as m,pr as n,Qs as o,ll as p,Qn as q,No as r,qi as s,Xs as t,xi as u,jt as v,al as w,il as x,Xa as y,hr as z};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{X as A,V as x}from"./index-Cr9NTnJp.js";import{c as y,B as C,O as I,W as O,C as S,Q as g,d as V,e as k}from"./output-DK8waum9.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";function F(a){let r=0,e=0,t=0;for(const n of a)for(let s=0;s<n.length;s++){const i=n[s]??0;r+=i*i,e=Math.max(e,Math.abs(i)),t++}return{rms:t>0?Math.sqrt(r/t):0,peak:e}}const u="opus",R=128e3;function z(a){const r=a.fps??30;if(!Number.isInteger(r)||r<1||r>60||60%r!==0)throw new Error("Video export FPS must be a positive divisor of 60.");if(!Number.isSafeInteger(a.frames)||a.frames<1)throw new Error("Video export frames must be a positive safe integer.");if(a.frames/r>300)throw new Error("Video export is limited to five minutes per file.");return r}async function N(a){if(!await y("vp9",{width:a.clientWidth,height:a.clientHeight}))throw new Error("This browser cannot encode VP9 video at the game resolution.")}async function G(a,r,e){const{buffer:t}=await a.render(a.startSeconds,a.startSeconds+r),n=t.length/t.sampleRate;if(Math.abs(n-r)>1/e)throw new Error(`Offline audio render returned ${n.toFixed(4)}s for a ${r.toFixed(4)}s export window (tolerance one frame, ${(1/e).toFixed(4)}s).`);if(!await k(u,{numberOfChannels:t.numberOfChannels,sampleRate:t.sampleRate}))throw new Error(`This browser cannot encode ${u} at ${t.sampleRate} Hz, ${t.numberOfChannels} channel(s).`);const s=[];for(let o=0;o<t.numberOfChannels;o++)s.push(t.getChannelData(o));const i=F(s);return{buffer:t,track:{codec:u,sampleRate:t.sampleRate,channels:t.numberOfChannels,durationSeconds:n,rms:i.rms,peak:i.peak}}}async function Q(a,r,e){const t=z(r),n=performance.now(),s=a.ownerDocument.createElement("canvas");if(s.width=a.clientWidth,s.height=a.clientHeight,s.width<1||s.height<1)throw new Error("Game surface has no exportable size.");const i=s.width,o=s.height,v=r.frames/t,m=e.audio?await G(e.audio,v,t):null;e.signal?.throwIfAborted(),e.assertActive();let c=null;const h=new C,f=new I({target:h,format:new O}),l=new S(s,{codec:"vp9",quality:new g({bitrate:3e6})});f.addVideoTrack(l,{frameRate:t}),m&&(c=new V({codec:u,quality:new g({bitrate:R})}),f.addAudioTrack(c));const E=x();let w=null;const p=()=>{w??=f.cancel()};e.signal?.addEventListener("abort",p,{once:!0});try{e.signal?.throwIfAborted(),await f.start(),c&&m&&(await c.add(m.buffer),c.close(),e.signal?.throwIfAborted());for(let d=0;d<r.frames;d++){if(e.signal?.throwIfAborted(),e.assertActive(),!a.isConnected)throw new Error("Game surface was removed during video export.");if(a.clientWidth!==i||a.clientHeight!==o)throw new Error("Game surface resized during video export.");if(d>0)for(let b=0;b<60/t;b++)e.step();if(await A(a,s,{size:{width:i,height:o},snapshots:E,canvasFrame:e.canvasFrame}),e.signal?.throwIfAborted(),e.assertActive(),a.clientWidth!==i||a.clientHeight!==o)throw new Error("Game surface resized during video export.");await l.add(d/t,1/t,{keyFrame:d%(t*2)===0})}if(e.assertActive(),e.signal?.throwIfAborted(),await f.finalize(),e.signal?.throwIfAborted(),e.assertActive(),!h.buffer)throw new Error("Video encoder produced no output.");return{blob:new Blob([h.buffer],{type:"video/webm"}),frames:r.frames,fps:t,durationMs:r.frames*1e3/t,wallMs:performance.now()-n,width:i,height:o,audio:m?.track??!1}}catch(d){throw w?await w:f.state!=="finalized"&&await f.cancel(),d}finally{e.signal?.removeEventListener("abort",p)}}export{N as assertGameplayVideoSupport,Q as exportGameplayVideo,z as validateGameplayExport};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{R as N,E as P}from"./rrweb-Cd2ifIRP.js";import{Q as C,U as L,V as U,X as F}from"./index-Cr9NTnJp.js";import{B as O,O as B,W as D,C as I,Q as A,I as W,a as $,U as H,A as V,b as q}from"./output-DK8waum9.js";function x(e,r){const o=new URLSearchParams({replay:e,file:r});return`${C}/recording/replay-file?${o}`}async function T(e,r){const o=await fetch(x(e,r));if(!o.ok)throw new Error(`could not load replay ${r}: HTTP ${o.status}`);return o.text()}function z(e){return new Promise((r,o)=>{const s=new FileReader;s.onload=()=>r(String(s.result)),s.onerror=()=>o(s.error??new Error("could not read replay asset")),s.readAsDataURL(e)})}async function j(e){let r=await T(e,"events.json");const o=new Set(r.match(/https:\/\/replay-assets\.invalid\/\d{6}\.(?:png|jpg|webp|gif|svg)/g)??[]),s=await Promise.all([...o].map(async a=>{const i=a.split("/").at(-1),n=await fetch(x(e,`assets/${i}`));if(!n.ok)throw new Error(`could not load replay asset ${i}`);return[a,await z(await n.blob())]}));for(const[a,i]of s)r=r.replaceAll(a,i);const t=JSON.parse(r);if(!Array.isArray(t)||t.length===0)throw new Error("replay contains no DOM events");return t}function G(e,r,o){return Math.max(0,e.videoStartEpochMs+o-r[0].timestamp)}function Q(e,r,o){const s=e.videoStartEpochMs+o;let t={rect:e.canvas,drawingWidth:e.canvas.drawingWidth,drawingHeight:e.canvas.drawingHeight};for(const a of r){if(a.timestamp>s)break;a.type===P.Custom&&a.data.tag==="volter-canvas-layout"&&a.data.payload&&typeof a.data.payload=="object"&&"rect"in a.data.payload&&"drawingWidth"in a.data.payload&&"drawingHeight"in a.data.payload&&(t=a.data.payload)}return t}async function _(e,r){await new Promise((o,s)=>{const t=()=>{clearTimeout(n),e.removeEventListener("loadeddata",a),e.removeEventListener("error",i)},a=()=>{t(),o()},i=()=>{t(),s(new Error("replay video failed to load"))},n=setTimeout(()=>{t(),s(new Error("replay video load timed out"))},15e3);e.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA?a():(e.addEventListener("loadeddata",a,{once:!0}),e.addEventListener("error",i,{once:!0}))}),!(Math.abs(e.currentTime-r)<.001)&&await new Promise((o,s)=>{const t=()=>{clearTimeout(n),e.removeEventListener("seeked",a),e.removeEventListener("error",i)},a=()=>{t(),o()},i=()=>{t(),s(new Error("replay video seek failed"))},n=setTimeout(()=>{t(),s(new Error("replay video seek timed out"))},15e3);e.addEventListener("seeked",a,{once:!0}),e.addEventListener("error",i,{once:!0}),e.currentTime=r})}async function J(e){e.fonts.size>0&&e.fonts.status!=="loaded"&&await Promise.race([e.fonts.ready.then(()=>{}),new Promise(r=>setTimeout(r,3e3))]),await Promise.all(Array.from(e.images,r=>r.decode().catch(()=>{})))}async function S(e,r){const[o,s]=await Promise.all([T(e,"manifest.json"),j(e)]),t=JSON.parse(o);if(t.status!=="complete"||t.format!=="canvas-dom"||t.version!==1||!t.capture||typeof t.capture.durationMs!="number")throw new Error("replay manifest is incomplete or unsupported");const a=document.createElement("div");a.setAttribute("data-volter-replay-block",""),Object.assign(a.style,{position:"fixed",left:"-100000px",top:"0",width:`${t.viewport.width}px`,height:`${t.viewport.height}px`,overflow:"hidden",pointerEvents:"none"});const i=document.createElement("div");a.append(i),document.body.append(a);const n=document.createElement("video");n.muted=!0,n.preload="auto",n.playsInline=!0,n.src=x(e,"video"),a.append(n);let w;try{w=new N(s,{root:i,showWarning:!1,showDebug:!1,mouseTail:!1,UNSAFE_replayCanvas:!0,insertStyleRules:["[data-volter-replay-video] { visibility: hidden !important; }"]});const f=w;return await r({manifest:t,async render(u){const h=Math.max(0,Math.min(u,t.capture.durationMs));await _(n,h/1e3),f.pause(G(t,s,h)),await J(f.iframe.contentDocument);const y=f.getMirror().getNode(t.canvas.nodeId),p=f.getMirror().getNode(t.surfaceNodeId);if(!y||y.tagName!=="CANVAS")throw new Error("replay canvas placeholder is unavailable");if(!p||typeof p.getBoundingClientRect!="function")throw new Error("replay game surface is unavailable");const c=y,g=p;c.setAttribute("data-volter-root-surface","true");const E=Q(t,s,h);c.width=E.drawingWidth,c.height=E.drawingHeight;const d=c.getContext("2d");if(!d)throw new Error("replay canvas has no 2D context");return d.drawImage(n,0,0,c.width,c.height),c.style.setProperty("visibility","visible","important"),g}})}finally{n.pause(),w?.destroy(),n.removeAttribute("src"),n.load(),a.remove()}}async function Z(e,r){return S(e,async({manifest:o,render:s})=>{const t=Math.max(0,Math.min(r,o.capture.durationMs)),a=await s(t),i=await L(a),n=a.getBoundingClientRect();return{...i,replayPath:e,positionMs:t,width:Math.max(1,Math.round(n.width)),height:Math.max(1,Math.round(n.height))}})}async function ee(e){const r=e.fps??30;if(!Number.isInteger(r)||r<1||r>60)throw new Error("replay export fps must be an integer from 1 to 60");return S(e.replayPath,async({manifest:o,render:s})=>{const t=e.startMs??0,a=e.endMs??o.capture.durationMs;if(!Number.isFinite(t)||!Number.isFinite(a)||t<0||a<=t||a>o.capture.durationMs||a-t>3e5)throw new Error("replay export requires a valid recorded interval of at most five minutes");const i=t/1e3,n=a/1e3,w=Math.ceil((n-i)*r),f=await s(t),u=document.createElement("canvas"),h=f.getBoundingClientRect();u.width=Math.max(1,Math.round(h.width)),u.height=Math.max(1,Math.round(h.height));const y={width:u.width,height:u.height},p=new O,c=new B({target:p,format:new D}),g=new I(u,{codec:"vp9",quality:new A({bitrate:3e6})});c.addVideoTrack(g,{frameRate:r});const E=new W({source:new H(x(e.replayPath,"video")),formats:[$]});try{const d=await E.getPrimaryAudioTrack();if(o.capture.audio&&!d)throw new Error("recorded audio track is missing");const M=d?new V({codec:"opus",quality:new A({bitrate:128e3})}):null;M&&c.addAudioTrack(M),await c.start();const R=async()=>{if(!(!M||!d)){for await(const l of new q(d).samples(i,n))try{const m=Math.max(0,Math.ceil((i-l.timestamp)*l.sampleRate)),v=Math.min(l.numberOfFrames,Math.ceil((n-l.timestamp)*l.sampleRate));if(v<=m)continue;const b=l.trim(m,v);try{b.setTimestamp(Math.max(0,b.timestamp-i)),await M.add(b)}finally{b.close()}}finally{l.close()}M.close()}},k=async()=>{const l=U();for(let m=0;m<w;m++){const v=m/r;await F(await s(t+v*1e3),u,{size:y,snapshots:l}),await g.add(v,Math.min(1/r,n-i-v),{keyFrame:m%(r*2)===0})}g.close()};if(await Promise.all([R(),k()]),await c.finalize(),!p.buffer)throw new Error("replay encoder produced no output");return{blob:new Blob([p.buffer],{type:"video/webm"}),frames:w,fps:r,durationMs:a-t,...y,audio:d!==null}}catch(d){throw c.state!=="finalized"&&await c.cancel(),d}finally{E.dispose()}})}export{Z as c,ee as e};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a5 as a}from"./index-Cr9NTnJp.js";import{s as n,n as s}from"./command-results-CUQD49AB.js";import{g as m,a as p}from"./game-network-BqI-Ehz0.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-OZVqp6xS.js";import"./index-Da9JhEvW.js";import"./native-debug-module-CB738yQu.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-DgYNlhH_.js";import"./contract-system-adapters-Bq1LGdjs.js";import"./game-contract-seams-Dgqv6S8X.js";import"./seeded-random-DmdE0u-C.js";import"./game-audio-BeCyd0Ha.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./index-bQE2NA0D.js";import"./live-project-verbs-p1sdTwhF.js";import"./capability-coverage-7wKVA3PF.js";import"./edit-mode-authoring-ZQuUwc6e.js";import"./json-history-resource-C9G_vCX9.js";import"./binding-resolver-B9VI52zt.js";import"./adapter-surface-Y37Nzcyw.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./realm-services-BtiLE3a-.js";import"./canvas-entry-runtime-a6N7Rsrj.js";import"./three-ingest-runtime-CXySzulx.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./relative-path-guard-GiM7Lsz8.js";import"./react-root-BHA-cdrW.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./active-ingest-CjZtqL7Q.js";import"./ingest-source-persistence-BGIvThcv.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-B1qtThOB.js";import"./mounted-authoring-DX3DC9PJ.js";import"./entity-object--ZpqIat7.js";import"./user-data-BXFD1jg-.js";import"./workspace-arrangement-dkubzCff.js";import"./three-contract-Dkt6PmWY.js";import"./three-B86IzdNg.js";import"./editor-layers-CGX7iCSP.js";import"./component-instance-root-C1Xf4SwR.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./three-authoring-adapter-BD8_MtYK.js";import"./source-persistence-backend-Dzc6MsmN.js";import"./three-projection-core-D4m8lsPU.js";import"./body-marks-C1LxJtQb.js";import"./user-data-CODoGZqA.js";import"./object-marks-BnvSuCTt.js";import"./structural-ids-BOo2BRoY.js";import"./object3d-authoring-subject-XccsO0xG.js";import"./r3f-physics-binding-oippu1v_.js";import"./deferred-ingest-play-Bpdhu2i-.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-CuyruDfq.js";import"./board-guides-BG-MHK2G.js";import"./relative-import-specifier-CyT6yU4l.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-CN92MgRT.js";import"./inference-diagnostics-D5jfxI5p.js";import"./writer-tw6EcuVO.js";import"./three-state-C36FeFK4.js";import"./editor-shell-store-BRqB1JZO.js";import"./output-pass-HurwNl0G.js";import"./viewport-door-AsLxGhLN.js";const Ge="workspace.command",Le={"list-gameplay-state":{derivedRefresh:"if-content-changed",handle:()=>{const e=a().debug;return e?{ok:!0,data:{providers:e.providers()}}:p()?{ok:!0,data:{providers:[]}}:s()}},"inspect-gameplay-state":{derivedRefresh:"if-content-changed",handle:e=>{const t=a().debug;if(!t)return p()?{ok:!0,data:{state:null}}:s();const r=e.keys;try{const o={};if(r&&r.length>0)for(const i of r)o[i]=t.state(i);else Object.assign(o,t.stateAll());return{ok:!0,data:{state:o}}}catch(o){return n(o)}}},"list-debug-commands":{derivedRefresh:"if-content-changed",handle:()=>{const e=a().debug;return e?{ok:!0,data:{commands:e.commands()}}:p()?{ok:!0,data:{commands:[]}}:s()}},"invoke-debug-command":{derivedRefresh:"always",handle:async e=>{const t=a().debug;if(!t)return p()?{ok:!1,error:`debug: no command registered under "${e.name}" — this game exposes no debug adapter`,data:{code:"DEBUG_COMMAND_NOT_REGISTERED",registered:[]}}:s();try{return{ok:!0,data:{result:await t.invoke(e.name,e.args??[])}}}catch(r){return n(r)}}},"inject-input":{derivedRefresh:"none",handle:e=>{const t=m();if(!t)return{ok:!1,error:"not in play mode — start play before injecting input"};let r;try{r=t.getInputTarget(e.worldId)}catch(o){return n(o)}if(!r)return{ok:!1,error:"this play session has no input door: no root entry exports `debug.input`"};try{if(e.kind==="action"){const i=e.atTick;return typeof i=="number"?(r.scheduleActionAtTick(i,e.action,e.value),{ok:!0,data:{scheduled:!0,tick:i}}):{ok:!0,data:r.setVirtualAction(e.action,e.value)}}const o=e.sourceId;switch(e.kind){case"axis":r.injectAxis(o,e.value);break;case"vector2":r.injectVector2(o,e.value);break;case"pointerDelta":r.injectPointerDelta(o,e.value);break;case"pointerPosition":r.injectPointerPosition(o,e.value);break;default:return{ok:!1,error:`unknown injection kind "${e.kind}"`}}return{ok:!0,data:{delivered:!0}}}catch(o){return n(o)}}},"set-time-scale":{derivedRefresh:"none",handle:e=>{const t=m();return t?(t.loop.timeScale=e.timeScale,{ok:!0,data:{timeScale:t.loop.timeScale}}):{ok:!1,error:"not in play mode — start play before setting time-scale"}}},"set-seed":{derivedRefresh:"none",handle:e=>{const t=m();return t?t.determinismDeclared?t.random?(t.random.reseed(e.seed),{ok:!0,data:{seed:t.random.seed}}):{ok:!1,error:"this play session has no first-party ctx.random to reseed"}:{ok:!1,error:"this project's manifest does not declare determinism.seededRandom — play.seed.set has no documented contract to reseed against (D15)",data:{code:"DETERMINISM_NOT_DECLARED"}}:{ok:!1,error:"not in play mode — start play before setting the seed"}}},"run-ticks":{derivedRefresh:"none",handle:async e=>{const t=m();if(!t)return{ok:!1,error:"not in play mode — start play before running ticks"};if(!t.runTicks)return{ok:!1,error:"this play session has no first-party Game to run ticks on",data:{code:"RUN_TICKS_UNAVAILABLE"}};try{const r=e.n,o=e.render;return t.runTicksSettled?await t.runTicksSettled(r,o?{render:o}:void 0):t.runTicks(r,o?{render:o}:void 0),{ok:!0}}catch(r){return n(r)}}}};export{Le as commands,Ge as point};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.volter-generation-gallery{display:flex;height:100%;flex-direction:column;color:var(--volter-content-primary);container-type:size}.volter-generation-gallery .volter-toolbar{flex:0 0 auto}.volter-generation-gallery-bar{gap:var(--volter-space-2)}.volter-generation-gallery-alert{margin:var(--volter-space-3)}.volter-generation-gallery-empty{margin:auto;max-width:420px;text-align:center}.volter-generation-grid{display:grid;min-height:0;flex:1;align-content:start;gap:var(--volter-space-3);padding:var(--volter-space-3);overflow-y:auto;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));grid-auto-rows:max-content}@container (max-width: 380px){.volter-generation-grid{grid-template-columns:1fr}}.volter-generation-card{display:flex;flex-direction:column;overflow:hidden;border:var(--volter-stroke-resting) solid var(--volter-boundary-default);border-radius:var(--volter-radius-md);background:var(--volter-surface-panel)}.volter-generation-card[data-state=failed],.volter-generation-card[data-state=save-failed]{border-color:var(--volter-danger-muted)}.volter-generation-card[data-state=ready]{border-color:var(--volter-boundary-strong)}.volter-generation-card-media{display:grid;flex-shrink:0;height:160px;max-height:160px;gap:var(--volter-stroke-active);background:var(--volter-bg-inset);grid-template-columns:1fr}.volter-generation-card-media[data-outputs="2"],.volter-generation-card-media[data-outputs="3"],.volter-generation-card-media[data-outputs="4"]{grid-template-columns:1fr 1fr}.volter-generation-output{display:flex;min-width:0;min-height:0;align-items:center;justify-content:center;overflow:hidden;padding:var(--volter-space-1)}.volter-generation-output-media{display:block;width:100%;height:100%;max-width:100%;max-height:100%;border-radius:var(--volter-radius-sm);object-fit:contain}.volter-generation-output .volter-generation-output-open.volter-btn{display:flex;width:100%;height:100%;max-height:100%;min-height:0;align-items:center;justify-content:center;padding:0;border:0;background:transparent;cursor:zoom-in}video.volter-generation-output-media{width:100%}.volter-generation-output-audio{display:flex;width:100%;height:100%;flex-direction:column;align-items:center;justify-content:center;gap:var(--volter-space-2);padding:var(--volter-space-2)}.volter-generation-output-audio audio{width:100%}.volter-generation-output-file{display:flex;flex-direction:column;align-items:center;gap:var(--volter-space-2);padding:var(--volter-space-3);color:var(--volter-content-muted);text-align:center;overflow-wrap:anywhere}.volter-generation-state-media{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--volter-space-2);padding:var(--volter-space-3);text-align:center}.volter-generation-progress{width:70%;height:4px;accent-color:var(--volter-accent)}.volter-generation-card-body{display:flex;min-width:0;flex-direction:column;gap:var(--volter-space-1);padding:var(--volter-space-3)}.volter-generation-card-heading{display:flex;min-width:0;align-items:center;gap:var(--volter-space-2)}.volter-generation-card-heading>.volter-text{min-width:0;flex:1}.volter-generation-chip{flex:0 0 auto}.volter-generation-chip[data-state=ready]{color:var(--volter-success);border-color:var(--volter-success-muted)}.volter-generation-chip[data-state=failed],.volter-generation-chip[data-state=save-failed]{color:var(--volter-danger);border-color:var(--volter-danger-muted)}.volter-generation-chip[data-state=queued],.volter-generation-chip[data-state=running],.volter-generation-chip[data-state=saving],.volter-generation-chip[data-state=new]{color:var(--volter-accent);border-color:var(--volter-accent-muted)}.volter-generation-card-prompt{display:-webkit-box;margin:var(--volter-space-1) 0 0;overflow:hidden;color:var(--volter-content-dim);font-size:var(--volter-font-sm);line-height:var(--volter-leading-normal);-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2}.volter-generation-card-alert{margin-top:var(--volter-space-2);font-size:var(--volter-font-sm)}.volter-generation-card-actions{display:flex;flex-wrap:wrap;gap:var(--volter-space-2);margin-top:var(--volter-space-2)}@container (max-height: 300px){.volter-generation-card-media{height:96px}.volter-generation-card-prompt{display:none}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Y as l,Z as a,a6 as c}from"./index-Cr9NTnJp.js";const g={version:1,jobs:[]};let u=g,i=null,s=0,o=!1;const r=new Set;function w(e,n=null){u=e,i=n,s++;for(const d of r)d()}function J(){return u}function v(){return i}function E(){return s}function y(e){return r.add(e),()=>r.delete(e)}function p(e){return e.status==="queued"||e.status==="running"}function h(e){return!p(e)&&(!e.readAt||Date.parse(e.readAt)<Date.parse(e.updatedAt))}function b(e){return e.filter(h).length}async function t(){try{const e=await fetch("/__editor/generations");w(await l(e,"Generation activity request failed"))}catch(e){i=e instanceof Error?e.message:String(e),s++;for(const n of r)n()}}async function G(){if(!o){o=!0;try{const e=await fetch("/__editor/generations/reconcile",{method:"POST"});a(e,"Generation reconciliation failed"),await t()}finally{o=!1}}}async function _(e){const n=await c(e.poll.tool,e.poll.input);if(!n.ok)throw new Error(n.error.message);if(n.generationWarning)throw new Error(n.generationWarning);return await t(),await f(e.id),n.data}async function S(e){if(!e.accept)throw new Error("This completed generation has no project asset to add.");const n=await c(e.accept.tool,e.accept.input,{confirm:!0});if(!n.ok)throw new Error(n.error.message);if(n.generationWarning)throw new Error(n.generationWarning);await t(),await f(e.id)}async function f(e){const n=await fetch(`/__editor/generations/${encodeURIComponent(e)}/read`,{method:"POST"});a(n,"Mark generation read failed"),await t()}async function T(e){const n=await fetch(`/__editor/generations/${encodeURIComponent(e)}`,{method:"DELETE"});a(n,"Forget generation job failed"),await t()}function A(){t();const e=window.setInterval(()=>void t(),2e3);return()=>{window.clearInterval(e)}}export{b as a,p as b,S as c,v as d,h as e,T as f,J as g,A as h,_ as i,E as j,f as m,G as p,t as r,y as s};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jf as K,jg as Y,f9 as I,dq as D,g$ as E,jh as Q,ji as A,aM as X,a0 as p,h1 as H,fl as Z,jj as ee,jk as te,jl as b,jm as ne,jn as re,jo as ae,jp as oe,jq as se,jr as ie,cO as le,aK as h,hV as ce,ex as P,hG as R,dV as B,O as de,a1 as M,gc as ue,js as me,jt as ge,ju as pe,gY as ve,jv as fe,b6 as he,jw as xe,f3 as je,a7 as ye,f5 as Ce}from"./index-Cr9NTnJp.js";import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{r as u}from"./index-nmcBqr7Y.js";import{m as Ne}from"./model-thumbnail-xm1Fabi2.js";import"./index-CtzuWnCS.js";import{s as T,g as x,c as _,f as q,i as Ee,b as z,p as Se,r as J,d as ke,e as Te,m as $e,h as we,j as Ae,a as be}from"./generation-jobs-D-zXQNZI.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./renderer-ownership-BovSEcLv.js";import"./studio-environment-B--4k2mN.js";import"./user-data-BXFD1jg-.js";import"./workspace-arrangement-dkubzCff.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";function j(e){switch(e.status){case"queued":return"queued";case"running":return"running";case"failed":return"failed";case"cancelled":return"cancelled";default:return e.acceptedAt?"ready":e.accept?e.pollError?"save-failed":"saving":"no-asset"}}function U(e){const n=j(e);return n!=="queued"&&n!=="running"&&n!=="saving"}function F(e,n){return e.status==="succeeded"&&!!e.accept&&!e.acceptedAt&&!!(e.pollError??n)}const $={queued:"Queued",running:"Running",saving:"Saving","save-failed":"Couldn't save",ready:"In project","no-asset":"No file",failed:"Failed",cancelled:"Cancelled"},Re=new Map([...["png","jpg","jpeg","webp","gif","avif","svg","bmp"].map(e=>[e,"image"]),...["mp4","webm","ogv","mov","m4v"].map(e=>[e,"video"]),...["mp3","wav","ogg","oga","m4a","flac","aac"].map(e=>[e,"audio"]),...["glb","gltf","fbx","obj","stl","ply","dae","3ds","usdz","spz"].map(e=>[e,"model"])]);function Oe(e){const n=e.slice(e.lastIndexOf("/")+1).toLowerCase(),r=n.lastIndexOf(".");return r>0?n.slice(r+1):""}function L(e){return(e.outputPaths??[]).map(n=>{const r=K.find(a=>n.startsWith(`${a}/`)),o=r?Y(r,n.slice(r.length+1)):null;return{path:n,name:n.slice(n.lastIndexOf("/")+1),kind:Re.get(Oe(n))??"file",url:o}})}function O(e,n){const r=e.trim();return r.length<=n?r:`${r.slice(0,n-1).trimEnd()}…`}function N(e){const n=De(e);if(n)return n;const r=L(e);if(r.length===0)return O(e.label,64);const o=r[0],a=Ie(o.path);return r.length>1?a?`${a} · ${r.length} files`:`${r.length} files`:Ge.test(o.name)?a?`${a}/${o.name}`:O(e.label,64):o.name}const Ge=/^(image|video|audio|model|panorama|output)(-\d+)?\./;function Ie(e){const n=e.split("/").slice(-2,-1)[0];return n?/^[0-9a-f]{8,}$/i.test(n)||/^[0-9a-f-]{16,}$/i.test(n)?null:n:null}function De(e){const n=e.accept?.input;if(!n||typeof n!="object")return null;const r=n.outputName;return typeof r=="string"&&r.trim().length>0?r.trim():null}function Pe(e){for(const n of[e.accept?.input,e.poll.input]){const r=W(n,0);if(r)return r}return null}function W(e,n){if(n>3||typeof e!="object"||e===null)return null;const r=e,o=r.prompt;if(typeof o=="string"&&o.trim().length>0)return o.trim();for(const a of Object.values(r)){const l=W(a,n+1);if(l)return l}return null}function G(e){return e.operation}function Be(e){return e.mode==="managed"?"Volter subscription":e.mode==="direct"?"Your provider key":"Mock"}function Me(e){return e.route==="mock"?"Free · mock":e.route==="managed"?e.settledCredits!==void 0?`${e.settledCredits} credits`:e.estimatedCredits!==void 0?`Up to ${e.estimatedCredits} credits`:"Credit estimate unavailable":e.settledAmount!==void 0?`$${e.settledAmount.toFixed(3)}`:e.estimatedAmount!==void 0?`Up to $${e.estimatedAmount.toFixed(3)}`:"USD estimate unavailable"}function _e(e){return e.route==="mock"?!0:e.route==="managed"?e.settledCredits!==void 0:e.settledAmount!==void 0}function qe(e){const n=Math.floor((Date.now()-Date.parse(e))/6e4);if(!Number.isFinite(n)||n<1)return"just now";if(n<60)return`${n}m ago`;const r=Math.floor(n/60);if(r<24)return`${r}h ago`;const o=Math.floor(r/24);return o<7?`${o}d ago`:`${Math.floor(o/7)}w ago`}const S="generation:",ze="generation:create";function Je(e){return e.route==="mock"?"Free mock":e.route==="managed"?e.settledCredits!==void 0?`${e.settledCredits} credits settled`:e.estimatedCredits!==void 0?`Up to ${e.estimatedCredits} credits`:"Volter subscription · estimate unavailable":e.settledAmount!==void 0?`$${e.settledAmount.toFixed(3)} settled`:e.estimatedAmount!==void 0?`Up to $${e.estimatedAmount.toFixed(3)}`:"BYOK · estimate unavailable"}function V(e){return I({id:`${S}${e.id}`,title:e.label,kind:"generation",workspaceRole:"authored-subject",provenance:{origin:`${e.provider}:${e.externalId}`},Content:Le,closeable:!0,presentation:()=>({kind:"generation",id:e.id})})}function k(){return I({id:ze,title:"Create Asset",kind:"generation",workspaceRole:"workspace-task",provenance:{origin:"registered generation tools"},Content:Ue,closeable:!0,presentation:()=>({kind:"generation",id:"create"})})}function Ue(){u.useSyncExternalStore(D,E),u.useSyncExternalStore(Q,A,A);const e=ee(),[n,r]=u.useState(""),o=n.trim().toLowerCase(),a=E().filter(i=>i.point==="workspace.document"&&i.tool?.generation?.role==="submit").filter(i=>o?[i.title,i.tool?.generation?.provider,i.tool?.summary,i.tool?.description].filter(Boolean).some(c=>String(c).toLowerCase().includes(o)):!0),l=new Map;for(const i of a){const c=i.tool?.generation?.provider??"other";l.set(c,[...l.get(c)??[],i])}return t.jsxs("div",{className:"volter-tool-page","data-testid":"generation-create-catalog",children:[t.jsxs("header",{className:"volter-tool-header",children:[t.jsx("div",{className:"volter-tool-eyebrow",children:"Installed provider extensions"}),t.jsx("h2",{className:"volter-tool-title",children:"Create an asset"}),t.jsxs("p",{className:"volter-tool-description",children:["Choose a native provider operation. Mock, managed, and BYOK execution remain explicit in the operation you open. Current default: ",e.preferredRoute,"."]})]}),t.jsx(X,{type:"search","aria-label":"Search generation tools",placeholder:"Search operations or providers…",value:n,onChange:i=>r(i.target.value)}),[...l.entries()].map(([i,c])=>t.jsxs("section",{className:"volter-tool-card",children:[t.jsx("h3",{className:"volter-tool-section-title",children:i}),t.jsx("div",{className:"volter-generation-create-grid",children:c.map(m=>t.jsxs(p,{variant:"ghost",className:"volter-generation-create-card",onClick:()=>H(m.id),children:[t.jsx("strong",{children:m.title}),t.jsx("span",{children:m.tool?.summary})]},m.id))})]},i)),a.length===0&&t.jsx("div",{className:"volter-generation-document-empty",children:"No installed generation operation matches this search."})]})}function Fe({job:e,result:n,documentId:r,active:o}){u.useSyncExternalStore(D,E),u.useSyncExternalStore(te,b,b);const a=ne(e.poll.tool,e,n);if(!a)return t.jsx("pre",{className:"volter-generation-native-result",children:JSON.stringify(n,null,2)});const l=a.Component;return t.jsx(re,{file:a.file,children:t.jsx(l,{tool:a.tool,contributionId:a.id,client:ie(),surfaces:ae,account:se(),play:oe(),documentId:r,active:o,job:e,result:n})})}function Le({documentId:e,active:n}){const{jobs:r}=u.useSyncExternalStore(T,x,x),o=e.startsWith(S)?e.slice(S.length):e,a=r.find(d=>d.id===o),[l,i]=u.useState(),[c,m]=u.useState(!1),[s,g]=u.useState(null),[v,f]=u.useState(!1),y=async d=>{m(!0),g(null);try{i(await Ee(d))}catch(C){g(C instanceof Error?C.message:String(C))}finally{m(!1)}};if(u.useEffect(()=>{a&&y(a)},[a?.id,a?.status]),!a)return t.jsx("div",{className:"volter-generation-document-empty",children:"This generation is no longer in project activity."});const w=s??(j(a)==="save-failed"?`Could not save into the project: ${a.pollError}`:null);return t.jsxs("div",{className:"volter-generation-document","data-status":a.status,children:[t.jsxs("header",{className:"volter-generation-document-header",children:[t.jsxs("div",{children:[t.jsxs("div",{className:"volter-tool-eyebrow",children:[a.provider," · ",a.operation]}),t.jsx("h2",{className:"volter-tool-title",children:a.label}),t.jsxs("div",{className:"volter-generation-job-meta",children:[$[j(a)]," · ",Je(a.billing)]})]}),t.jsxs("div",{className:"volter-tool-actions",children:[t.jsx(p,{size:"compact",variant:"ghost",disabled:c,onClick:()=>void y(a),children:c?"Refreshing…":"Refresh"}),F(a,s)&&t.jsx(p,{size:"compact",variant:"primary",disabled:v,onClick:()=>{f(!0),g(null),_(a).catch(d=>g(d instanceof Error?d.message:String(d))).finally(()=>f(!1))},children:v?"Saving…":"Retry save"})]})]}),a.message&&t.jsx("div",{className:"volter-tool-status",children:a.message}),w&&t.jsx("div",{className:"volter-tool-status","data-tone":"error",role:"alert",children:w}),t.jsx("section",{className:"volter-generation-result","aria-label":"Generation result",children:l===void 0?t.jsx("div",{className:"volter-generation-document-empty",children:c?"Loading provider result…":"No provider result is available yet."}):t.jsx(Fe,{job:a,result:l,documentId:e,active:n})}),a.outputPaths&&a.outputPaths.length>0&&t.jsxs("section",{className:"volter-generation-output-paths",children:[t.jsx("strong",{children:"Project assets"}),a.outputPaths.map(d=>t.jsx("code",{children:d},d))]}),U(a)&&t.jsx("div",{className:"volter-generation-document-footer",children:t.jsx(p,{size:"compact",variant:"ghost",disabled:v,onClick:()=>{f(!0),q(a.id).then(()=>Z(e)).catch(d=>g(d instanceof Error?d.message:String(d))).finally(()=>f(!1))},children:"Remove from activity"})})]})}function We({output:e,onOpen:n}){const r=e.url;if(r&&e.kind==="image"){const o=t.jsx("img",{className:"volter-generation-output-media",src:r,alt:e.name,loading:"lazy"});return n?t.jsx(p,{variant:"ghost",className:"volter-generation-output-open",onClick:n,"aria-label":`Open ${e.name}`,children:o}):o}return r&&e.kind==="video"?t.jsx("video",{className:"volter-generation-output-media",src:r,controls:!0,preload:"metadata",playsInline:!0,title:e.name}):r&&e.kind==="audio"?t.jsxs("div",{className:"volter-generation-output-audio",children:[t.jsx(me,{url:r,name:e.name}),t.jsx("audio",{src:r,controls:!0,preload:"metadata",title:e.name})]}):e.url&&e.kind==="model"&&Ne(e.url)?t.jsx(ge,{url:e.url}):t.jsxs("div",{className:"volter-generation-output-file",children:[t.jsx(M,{icon:e.kind==="model"?pe:ve}),t.jsx(h,{variant:"caption",tone:"muted",children:e.name}),n&&t.jsx(p,{size:"compact",variant:"ghost",onClick:n,children:"Open file"})]})}const Ve={queued:"loading",running:"loading",saving:"loading","save-failed":"error",ready:"success","no-asset":"neutral",failed:"error",cancelled:"neutral"},Ke={queued:e=>e.queuePosition===void 0?"Waiting for the provider to start.":`Position ${e.queuePosition} in the provider queue.`,running:e=>e.message??"The provider is working on it.",saving:()=>"Downloading the finished output into this project.","save-failed":e=>e.pollError??"The finished output could not be saved.",ready:()=>"Saved into this project.","no-asset":()=>"The operation finished without a file this project can hold.",failed:e=>e.message??"The provider reported a failure.",cancelled:()=>"This generation was cancelled."};function Ye({job:e,state:n}){const r=n==="queued"||n==="running"||n==="saving",o=n==="failed"||n==="save-failed";return t.jsxs("div",{className:"volter-generation-state-media","data-state":n,children:[t.jsx(P,{compact:!0,tone:Ve[n],...o?{icon:t.jsx(M,{icon:ue})}:{},title:$[n],description:Ke[n](e)}),r&&t.jsx("progress",{className:"volter-generation-progress","aria-label":`${e.label} progress`,...n==="running"&&e.progress!==void 0?{value:e.progress,max:1}:{}})]})}function Qe({job:e,busy:n,error:r,run:o}){return t.jsxs("div",{className:"volter-generation-card-actions",children:[F(e,r)&&t.jsx(p,{size:"compact",variant:"primary",disabled:n,onClick:()=>o(()=>_(e)),children:n?"Saving…":"Retry save"}),t.jsx(p,{size:"compact",variant:"ghost",onClick:()=>V(e),children:"Details"}),U(e)&&t.jsx(p,{size:"compact",variant:"ghost",disabled:n,onClick:()=>o(()=>q(e.id)),children:"Remove"})]})}function Xe({job:e,busy:n,error:r,run:o}){const a=j(e),l=L(e),i=Pe(e),c=Te(e),m=s=>{if(!s.url)return;const g=fe(he(s.name));if(g)return()=>xe(s.url,g)};return t.jsxs("article",{className:"volter-generation-card","data-state":a,"aria-busy":z(e),"aria-label":N(e),onClickCapture:()=>{c&&$e(e.id).catch(s=>{de.warn(`Could not mark generation as seen: ${s instanceof Error?s.message:String(s)}`,"generations")})},children:[t.jsx("div",{className:"volter-generation-card-media","data-outputs":Math.min(l.length,4),children:l.length===0?t.jsx(Ye,{job:e,state:a}):l.map(s=>t.jsx("div",{className:"volter-generation-output",title:s.path,children:t.jsx(We,{output:s,onOpen:m(s)})},s.path))}),t.jsxs("div",{className:"volter-generation-card-body",children:[t.jsxs("div",{className:"volter-generation-card-heading",children:[t.jsx(h,{variant:"label",truncate:!0,title:N(e),children:N(e)}),t.jsxs(R,{className:"volter-generation-chip","data-state":a,children:[$[a],a==="running"&&e.progress!==void 0?` · ${Math.round(e.progress*100)}%`:""]}),c&&t.jsx(R,{className:"volter-generation-chip","data-state":"new",children:"New"})]}),t.jsxs(h,{variant:"caption",tone:"muted",truncate:!0,title:G(e),children:[e.provider," · ",G(e)]}),t.jsxs(h,{variant:"caption",tone:"dim",children:[Me(e.billing),_e(e.billing)?"":" (est.)"," · ",Be(e)," ·"," ",qe(e.updatedAt)]}),i&&t.jsx("p",{className:"volter-generation-card-prompt",title:i,children:i}),(r??e.pollError)&&t.jsx(B,{tone:r||a==="save-failed"?"error":"warning",className:"volter-generation-card-alert",children:r??(a==="save-failed"?`Could not save into the project: ${e.pollError}`:`Polling will retry: ${e.pollError}`)}),t.jsx(Qe,{job:e,busy:n,error:r,run:o})]})]})}function He(){const{jobs:e}=u.useSyncExternalStore(T,x,x),[n,r]=u.useState(null),[o,a]=u.useState({}),l=e.filter(z).length,i=e.filter(s=>j(s)==="saving").length,c=async(s,g)=>{r(s),a(v=>{const f={...v};return delete f[s],f});try{await g()}catch(v){const f=v instanceof Error?v.message:String(v);a(y=>({...y,[s]:f}))}finally{r(null)}},m=ke();return t.jsxs("div",{className:"volter-generation-gallery",children:[t.jsxs(le,{label:"Generations",compact:!0,className:"volter-generation-gallery-bar",children:[t.jsx(h,{variant:"label",children:"Generations"}),t.jsxs(h,{variant:"caption",tone:"muted",children:[e.length," ",e.length===1?"generation":"generations",l>0?` · ${l} running`:"",i>0?` · ${i} saving`:""]}),t.jsx(ce,{}),t.jsx(p,{size:"compact",variant:"ghost",onClick:()=>void Se().then(J),children:"Refresh"}),t.jsx(p,{size:"compact",variant:"primary",onClick:()=>k(),children:"New asset"})]}),m&&t.jsx(B,{tone:"error",className:"volter-generation-gallery-alert",children:m}),e.length===0?t.jsx(P,{className:"volter-generation-gallery-empty",title:"No generated assets yet",description:"Preview generated images, video, audio and models here. Create an asset to get started.",action:t.jsx(p,{size:"compact",variant:"primary",onClick:()=>k(),children:"New asset"})}):t.jsx("section",{className:"volter-generation-grid","aria-label":"Generated assets",children:e.map(s=>t.jsx(Xe,{job:s,busy:n===s.id,error:o[s.id]??null,run:g=>void c(s.id,g)},s.id))})]})}const kt="workspace.service",Ze="generation";function et(){const e=be(x().jobs);return e>0?{count:e,severity:"info"}:null}function Tt(){const e=[we(),je({...ye.generations,order:15,Content:He,badge:et,subscribeBadge:T,badgeSnapshot:Ae,visibleByDefault:!1,closeable:!0}),Ce({id:Ze,owner:"@volter/editor-game/generation",open:(n,r)=>{if(r.id==="create")return k();const o=x().jobs.find(a=>a.id===r.id);return o?V(o):null},settle:J})];return()=>{for(const n of e)n()}}export{kt as point,Tt as start};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{dY as p,t as o,w as n,bA as e,u as l,v as t,by as d,e0 as c}from"./index-Cr9NTnJp.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const u=d(["queued","running","succeeded","failed","cancelled"]),g=p("route",[o({route:n("mock")}).strict(),o({route:n("managed"),estimatedCredits:e().nonnegative().optional(),settledCredits:e().nonnegative().optional()}).strict(),o({route:n("byok"),currency:n("USD"),estimatedAmount:e().nonnegative().optional(),settledAmount:e().nonnegative().optional()}).strict()]),r=o({tool:t().min(1),input:c()}).strict(),v=o({id:t().min(1),provider:t().min(1),externalId:t().min(1),label:t().min(1),operation:t().min(1),mode:d(["mock","direct","managed"]),status:u,createdAt:t().datetime(),updatedAt:t().datetime(),progress:e().min(0).max(1).optional(),providerStatus:t().optional(),queuePosition:e().int().nonnegative().optional(),message:t().optional(),lastPolledAt:t().datetime().optional(),lastProviderChangeAt:t().datetime().optional(),pollError:t().optional(),pollErrorAt:t().datetime().optional(),pollFailureCount:e().int().nonnegative().optional(),nextPollAt:t().datetime().optional(),billing:g,poll:r,cancel:r.optional(),accept:r.optional(),acceptedAt:t().datetime().optional(),readAt:t().datetime().optional(),provenanceOperationId:t().optional(),outputPaths:l(t()).optional()}).strict(),x=o({version:n(1),jobs:l(v)}).strict();function y(m,s){if(m!=="managed")return{};const{estimatedCredits:i,settledCredits:a}=s;return i===void 0&&a===void 0?{}:{billing:{route:"managed",...i===void 0?{}:{estimatedCredits:i},...a===void 0?{}:{settledCredits:a}}}}export{g as GenerationBillingSchema,v as GenerationJobSchema,u as GenerationJobStatusSchema,x as GenerationJobsDocumentSchema,y as managedBilling};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as s}from"./jsx-runtime-DPjLkJKQ.js";import{a0 as r,r as a,a7 as i}from"./index-Cr9NTnJp.js";import{r as u}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{s as c,g as o,a as p,b as m}from"./generation-jobs-D-zXQNZI.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 I="workspace.status",$="Generations",C="left",T=24;function U(){const{jobs:e}=u.useSyncExternalStore(c,o,o),n=p(e),t=e.filter(m).length;return s.jsxs(r,{type:"button",variant:"ghost",size:"compact",className:"volter-status-action","data-testid":"status-generations","aria-label":`Generations, ${n} unseen, ${t} running`,title:`${n} unseen generation results, ${t} running — open Generations`,onClick:()=>a().workspace.showUtility(i.generations.id),children:["Generations · ",n,t>0?` · ${t} running`:""]})}export{C as align,U as default,T as order,I as point,$ as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as n}from"./workspace-arrangement-dkubzCff.js";function r(t){const o=n(t,"volterComponentRoot");return typeof o=="string"&&o?o:void 0}function i(t){return n(t,"volterBuiltInternal")===!0}export{r as c,i};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getObjectMark as n,setObjectMark as e}from"./object-marks-BnvSuCTt.js";function u(t,o){e(t,"volterComponentRoot",o)}function r(t){const o=n(t,"volterComponentRoot");return typeof o=="string"&&o?o:void 0}function l(t){return r(t)!==void 0}function m(t){e(t,"volterBuiltInternal",!0)}function a(t){return n(t,"volterBuiltInternal")===!0}export{r as componentRootName,a as isBuiltInternal,l as isComponentRoot,m as markBuiltInternal,u as markComponentRoot};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{kv as k,v as l,t as y,kw as P,u as b,b2 as T}from"./index-Cr9NTnJp.js";import{i as x}from"./relative-path-guard-GiM7Lsz8.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const d=".volter/assets.json",E=y({key:l().min(1),license:l().min(1).optional(),sourceHash:l().regex(/^sha256-[a-f0-9]{64}$/,'sourceHash must be "sha256-<64 hex>"').optional(),materializedAt:l().datetime()}).strict(),O=k(l().min(1),E);function z(e){if(!/^[a-f0-9]{64}$/.test(e))throw new Error(`Not a sha256 digest, refusing to record it as a sourceHash: ${e}`);return`sha256-${e}`}function m(e){const t=e.replaceAll("\\","/").replace(/^\.\//,"").replace(/^\/+/,"");if(!t)throw new Error("An asset ledger path cannot be empty.");if(!x(t))throw new Error(`An asset ledger path cannot escape the project: ${e}`);return t}function _(e){return O.parse(e)}function D(e){if(e==null||e.trim()==="")return{};let t;try{t=JSON.parse(e)}catch(s){throw new Error(`${d} is not valid JSON: ${String(s)}`)}return _(t)}function I(e,t,s){const r=m(t),n=E.parse(s),a={...e,[r]:n},i={};for(const u of Object.keys(a).sort())i[u]=a[u];return i}function M(e){const t={};for(const s of Object.keys(e).sort())t[s]=e[s];return`${JSON.stringify(t,null,2)}
|
|
2
|
+
`}function U(e,t,s){const r=globalThis.navigator?.locks;return r?r.request(`volter:${e}:${P(t)}`,s):s()}const H=1e4,N=15;function j(){return globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random()}`}async function R(e,t,s={}){const r=s.staleAfterMs??H,n=s.retryDelayMs??N,a=s.now??Date.now,i=s.sleep??(o=>new Promise(c=>setTimeout(c,o))),u=s.token??j;for(;;){const o=JSON.stringify({at:a(),owner:s.owner??"unknown",token:u()});if(await e.createIfAbsent(o))try{return await t()}finally{await e.removeIfHeldBy(o)}const c=await e.read();if(c!==null){if(a()-B(c)>r){await e.removeIfHeldBy(c);continue}await i(n)}}}function B(e){try{const t=JSON.parse(e);return typeof t.at=="number"?t.at:0}catch{return 0}}function J(){const e=new Map;return(t,s)=>{const n=(e.get(t)??Promise.resolve()).then(s,s),a=n.then(()=>{},()=>{});return e.set(t,a),a.then(()=>{e.get(t)===a&&e.delete(t)}),n}}async function S(e){return await e.exists(d)?D(await e.read(d)):{}}async function F(e,t){await e.write(d,M(t))}const f=`${d}.lock`,C=J(),A=new WeakMap;let $=0;function K(e){const t=A.get(e);if(t!==void 0)return t;$+=1;const s=`${e.id}#${$}`;return A.set(e,s),s}async function W(e,t){const s={key:t.key,...t.license?{license:t.license}:{},...t.sourceSha256?{sourceHash:z(t.sourceSha256)}:{},materializedAt:t.materializedAt??new Date().toISOString()};await C(K(e),()=>R({createIfAbsent:r=>e.writeIfAbsent(f,r),read:async()=>await e.exists(f)?e.read(f):null,removeIfHeldBy:r=>U(e.id,f,async()=>{await e.exists(f)&&await e.read(f)===r&&await e.remove(f)})},async()=>{const r=await S(e);await F(e,I(r,m(t.destPath),s))},{owner:e.id}))}const G=y({key:l().regex(/^[^:]+:.+$/,'An asset key must be "source:id"'),dest:l().min(1),sha256:l().regex(/^[a-f0-9]{64}$/,"A pack entry must pin the sha256 of its bytes as 64 lowercase hex digits")}).strict(),Y=y({packs:k(l().min(1),b(G))}).strict();function q(e){return Y.parse(e)}function V(e){const t=[],s=new Map;for(const[r,n]of Object.entries(e.packs))for(const a of n){const i=s.get(a.dest);if(i!==void 0)throw new Error(`Two packs declare the same destination "${a.dest}": "${i}" and "${r}".`);s.set(a.dest,r),t.push({...a,pack:r})}return t}const w="asset-manifest.json",v="https://volter-asset-library.aaron-0ed.workers.dev";function L(e){return(e.baseUrl??v).replace(/\/+$/,"")}function Q(e){return e.signal?{signal:e.signal}:{}}async function X(e,t={}){const s=L(t),r=await fetch(`${s}/v1/assets/${encodeURIComponent(e)}`,Q(t));if(!r.ok)return null;const n=await r.json();return!n||typeof n!="object"||!Array.isArray(n.files)?null:n}function Z(e,t,s,r){return`${L(e?{baseUrl:e}:{})}/v1/assets/${encodeURIComponent(t)}/files/${s}`}async function he(e,t={}){const s=await ee(e),r={declared:s.length,materialized:[],alreadyPresent:[],failed:[]};if(s.length===0)return r;const n=await S(e);for(const a of s){if(t.signal?.aborted)break;if(n[m(a.dest)]&&await e.exists(a.dest)){r.alreadyPresent.push(a),t.onProgress?.(a,"already-present");continue}try{await te(e,a,t),r.materialized.push(a),t.onProgress?.(a,"materialized")}catch(i){r.failed.push({entry:a,reason:i instanceof Error?i.message:String(i)}),t.onProgress?.(a,"failed")}}return r}async function ee(e){if(!await e.exists(w))return[];const t=await e.read(w);let s;try{s=JSON.parse(t)}catch(r){throw new Error(`${w} is not valid JSON: ${r instanceof Error?r.message:String(r)}`)}return V(q(s))}async function te(e,t,s){const r=await se(t,s);await e.write(t.dest,r.bytes),await W(e,{destPath:t.dest,key:t.key,license:r.license,sourceSha256:t.sha256})}async function se(e,t={}){const s=e.key.indexOf(":");if(s<0)throw new Error(`Malformed asset key "${e.key}" (expected "source:id").`);const r=e.key.slice(0,s),n=e.key.slice(s+1);if(r!=="local")throw new Error(`Asset key "${e.key}": only the "local" (cloud-hosted) source can be materialized from the cloud worker.`);const a=t.baseUrl??v,i=t.signal?{baseUrl:a,signal:t.signal}:{baseUrl:a},u=await X(n,i);if(!u)throw new Error(`"${e.key}" is not hosted by the cloud asset library.`);const o=u.files[0];if(!o)throw new Error(`"${e.key}" has no files in the cloud library.`);if(o.dependencies.length>0)throw new Error(`"${e.key}" has ${o.dependencies.length} dependency file(s) — a pack entry names exactly one destination file.`);if(o.main.sha256!==e.sha256)throw new Error(`"${e.key}" → ${e.dest}: the cloud library reports sha256:${o.main.sha256} but ${w} pins sha256:${e.sha256}. Nothing was fetched or written; the pin is only re-cut by a reviewed change to the declaration.`);const c=Z(a,n,0),h=await fetch(c,t.signal?{signal:t.signal}:{});if(!h.ok)throw new Error(`${c} returned ${h.status} ${h.statusText}.`);const p=new Uint8Array(await h.arrayBuffer()),g=await T(p);if(g!==e.sha256)throw new Error(`"${e.key}" → ${e.dest}: ${c} delivered sha256:${g} but the declaration pins sha256:${e.sha256}. Nothing was written.`);return{bytes:p,license:u.license}}export{w as ASSET_MANIFEST_PATH,se as fetchVerifiedPackEntry,he as materializeDeclaredAssetPacks};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{S as s}from"./three.module-BLhyNg0e.js";import{au as d,dw as u,ff as p,ae as f}from"./three.core-3arARmh6.js";const o="
|
|
1
|
+
import{S as s}from"./three.module-BLhyNg0e.js";import{au as d,dw as u,ff as p,ae as f}from"./three.core-3arARmh6.js";const o="volterIblWorldPosition";function v(){return s.envmap_physical_pars_fragment.replaceAll("getIBLIrradiance","getBaseIBLIrradiance").replaceAll("getIBLRadiance","getBaseIBLRadiance")}function y(e){return(Array.isArray(e.material)?e.material:[e.material]).filter(a=>!!a.isMeshStandardMaterial)}function _(){const e=new d(new Uint8Array(1024),16,16,u,p);return e.mapping=f,e.needsUpdate=!0,e}function I(e,n){const a=e.onBeforeCompile,i=e.customProgramCacheKey;let t=null;return e.onBeforeCompile=(r,c)=>{a.call(e,r,c),l(r.vertexShader,"#include <worldpos_vertex>"),l(r.fragmentShader,"#include <envmap_physical_pars_fragment>"),r.vertexShader=`varying vec3 ${o};
|
|
2
2
|
${r.vertexShader.replace("#include <worldpos_vertex>",`#include <worldpos_vertex>
|
|
3
3
|
#if defined(USE_ENVMAP)
|
|
4
4
|
${o} = worldPosition.xyz;
|