@vgai/editor 0.2.0 → 0.4.0-canary.20260715.0
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/README.md +24 -0
- package/dist/assets/axe-C7YBtOuM.js +30 -0
- package/dist/assets/browserAll-DDtGGE48.js +1 -0
- package/dist/assets/create-runtime-DbTlBlKG.js +1 -0
- package/dist/assets/{game-BI111o5f.js → game-BE0r7DMI.js} +3 -3
- package/dist/assets/game-BdTHR2_X.js +1 -0
- package/dist/assets/{game-pt_1lQLv.js → game-C3iQGSqo.js} +1 -1
- package/dist/assets/game-CcHfYxjP.js +1 -0
- package/dist/assets/game-Cqzj_lpD.js +1 -0
- package/dist/assets/game-DSZdeCHu.js +1 -0
- package/dist/assets/game-Dch9sAPc.js +1 -0
- package/dist/assets/{game-xsOho_wg.js → game-SAFn90pA.js} +3 -3
- package/dist/assets/game-loop-DMIgSMV-.js +1 -0
- package/dist/assets/{game-source-CvidN7AB.js → game-source-Dk83w26t.js} +1 -1
- package/dist/assets/{index-Bp5cecD6.js → index-4idIsHHJ.js} +2 -2
- package/dist/assets/{index-DL7RcQ0n.js → index-C-LhOTBN.js} +1 -1
- package/dist/assets/{index-Cs8xwv3e.js → index-CDkxceqE.js} +1 -1
- package/dist/assets/index-CQEfi217.js +15412 -0
- package/dist/assets/index-Dvi-V0NE.css +1 -0
- package/dist/assets/ingest-siblings-s0P5I1Ub.js +1 -0
- package/dist/assets/mount-manifest-DXMOlF79.js +1 -0
- package/dist/assets/react-18-C9eHn8x1.js +1 -0
- package/dist/assets/webworkerAll-Fn0e-ouF.js +1 -0
- package/dist/assets/world-documents-GM0a9Kv7.js +1 -0
- package/dist/index.html +15 -13
- package/dist/ingest/racing-game/vgai.game.json +5 -4
- package/dist/ingest/simcity/vgai.game.json +5 -4
- package/dist/ingest/tanks/vgai.game.json +5 -4
- package/dist/project-scripts.bundle.js +3917 -0
- package/dist/scenes/untitled.vscn.json +2 -0
- package/dist-server/packaged.mjs +7697 -3435
- package/package.json +31 -4
- package/scripts/probe-reporter.ts +349 -0
- package/scripts/run-probe.ts +2260 -0
- package/server/asset-catalog-audit.ts +268 -0
- package/server/asset-catalog-v2.ts +146 -0
- package/server/asset-library-routes.ts +276 -58
- package/server/canonical-path.ts +1 -1
- package/server/dev.ts +148 -44
- package/server/editor-server.ts +888 -61
- package/server/editor-sse.ts +115 -4
- package/server/harness-chat-service.ts +796 -0
- package/server/local-asset-catalog.ts +157 -22
- package/server/packaged.ts +51 -21
- package/server/process-shutdown.ts +136 -0
- package/server/prod.ts +9 -6
- package/server/project-hmr-files.ts +41 -0
- package/server/project-operations.ts +343 -0
- package/server/project-optimize-deps-entries.ts +4 -4
- package/server/project-output-writer.ts +156 -0
- package/server/project-validation.ts +140 -0
- package/server/project-view.ts +8 -50
- package/server/server-utils.ts +75 -10
- package/server/session-registry.ts +12 -0
- package/src/EditorContext.tsx +107 -3
- package/src/action-registry.ts +115 -17
- package/src/adapter-resolver.ts +213 -478
- package/src/asset-events.ts +64 -1
- package/src/asset-preview.ts +906 -0
- package/src/asset-selection.ts +121 -0
- package/src/asset-workflow/asset-capabilities.ts +259 -0
- package/src/asset-workflow/asset-editor-errors.ts +46 -0
- package/src/asset-workflow/asset-import-pipeline.ts +176 -0
- package/src/asset-workflow/asset-library-query.ts +107 -0
- package/src/asset-workflow/asset-types.ts +192 -0
- package/src/asset-workflow/asset-workflow-quality.ts +65 -0
- package/src/asset-workflow/import-contract.ts +113 -0
- package/src/asset-workflow/model-conversion.ts +126 -0
- package/src/asset-workflow/model-inspection.ts +185 -0
- package/src/asset-workflow/project-asset-commands.ts +23 -0
- package/src/asset-workflow/project-asset-health.ts +153 -0
- package/src/asset-workflow/project-asset-operations.ts +119 -0
- package/src/asset-workflow/thumbnail-system.ts +172 -0
- package/src/authoring/active-systems.ts +15 -0
- package/src/authoring/boundary-authoring-adapter.ts +16 -5
- package/src/authoring/composite-authoring-adapter.ts +305 -124
- package/src/authoring/design-time-layers.ts +300 -117
- package/src/authoring/edit-mode-authoring.ts +278 -293
- package/src/authoring/embed-only-adapter.ts +4 -2
- package/src/authoring/first-party-hierarchy-menu.ts +7 -2
- package/src/authoring/first-party-inspector/AddSectionMenu.tsx +5 -12
- package/src/authoring/first-party-inspector/EnvironmentSection.tsx +53 -126
- package/src/authoring/first-party-inspector/HeaderSection.tsx +54 -65
- package/src/authoring/first-party-inspector/is-first-party-selection.ts +30 -11
- package/src/authoring/first-party-inspector/register.tsx +13 -2
- package/src/authoring/ingest-authoring-adapter.ts +142 -45
- package/src/authoring/mount-failure-report.ts +5 -5
- package/src/authoring/provenance.ts +41 -0
- package/src/authoring/react-dom-authoring-adapter.ts +92 -92
- package/src/authoring/react-inspector-section.tsx +489 -51
- package/src/authoring/react-world-authoring-adapter.ts +541 -306
- package/src/authoring/story-overlay.ts +1 -1
- package/src/authoring/story-types.ts +11 -0
- package/src/authoring/vgai-scene-authoring-adapter.ts +54 -25
- package/src/authoring/viewport-tool-context.ts +78 -0
- package/src/authoring/world-canvas-viewport-state.ts +35 -0
- package/src/authoring/world-hidden-viewport.ts +186 -0
- package/src/authoring/world-pan-state.ts +33 -17
- package/src/authoring/world-session-state.ts +1 -1
- package/src/authoring/world2d-authoring-adapter.ts +109 -52
- package/src/availability-tick.ts +56 -0
- package/src/browser-play-entry.ts +5 -5
- package/src/browser-project-scripts.ts +1 -0
- package/src/build-identity.ts +15 -0
- package/src/command-listener.ts +893 -19
- package/src/components/AlignToolbar.tsx +74 -63
- package/src/components/AppRoot.tsx +193 -26
- package/src/components/ApplicationMenus.tsx +272 -0
- package/src/components/AssetBrowser.tsx +1450 -293
- package/src/components/AssetEditorShell.tsx +141 -0
- package/src/components/AssetImportDetails.tsx +218 -0
- package/src/components/AssetLibraryPanel.tsx +14 -0
- package/src/components/CameraInfo.tsx +11 -20
- package/src/components/CenterDocuments.tsx +585 -0
- package/src/components/CommandPalette.tsx +75 -30
- package/src/components/ConsolePanel.css +55 -0
- package/src/components/ConsolePanel.tsx +57 -112
- package/src/components/DebugConsolePanel.tsx +461 -0
- package/src/components/DebuggerPanel.tsx +165 -0
- package/src/components/DefaultEditorLayout.tsx +167 -231
- package/src/components/GameHierarchy.tsx +873 -290
- package/src/components/GamePerformanceOverlay.tsx +46 -0
- package/src/components/HarnessChatPanel.tsx +2352 -0
- package/src/components/HistoryPanel.tsx +226 -0
- package/src/components/Inspector.tsx +153 -99
- package/src/components/InspectorToolSection.tsx +6 -4
- package/src/components/MountFailureBanner.tsx +31 -48
- package/src/components/NetworkSection.tsx +25 -14
- package/src/components/OnlineAssetBrowser.tsx +794 -343
- package/src/components/OverlayReportBanner.tsx +38 -64
- package/src/components/PerformancePanel.tsx +206 -0
- package/src/components/PlayBar.tsx +93 -263
- package/src/components/PrefabSaveDialog.tsx +55 -127
- package/src/components/ProjectHeader.css +60 -0
- package/src/components/ProjectHeader.tsx +170 -105
- package/src/components/ProjectScreen.tsx +246 -184
- package/src/components/ReactCanvasControls.tsx +185 -0
- package/src/components/ResolutionPicker.tsx +85 -0
- package/src/components/RootActivateDialog.tsx +39 -68
- package/src/components/SaveDialog.tsx +55 -127
- package/src/components/SaveStatus.tsx +11 -29
- package/src/components/StartupLoadingScreen.tsx +96 -0
- package/src/components/StateWatchPanel.tsx +302 -0
- package/src/components/StatsOverlay.tsx +12 -5
- package/src/components/StatusBar.tsx +64 -0
- package/src/components/ThemeManagerDialog.css +89 -0
- package/src/components/ThemeManagerDialog.tsx +371 -0
- package/src/components/ToolHost.tsx +26 -15
- package/src/components/Toolbar.tsx +117 -214
- package/src/components/VgaiVoxelLogo.tsx +89 -0
- package/src/components/ViewportOverlay.tsx +97 -172
- package/src/components/ViewportPanel.tsx +130 -31
- package/src/components/WorkspaceDock.tsx +891 -0
- package/src/components/WorldSelectionOverlay.tsx +51 -63
- package/src/components/WorldTextEditor.tsx +9 -5
- package/src/components/asset-documents.tsx +390 -0
- package/src/components/asset-editor-persistence.ts +44 -0
- package/src/components/asset-selection-section.tsx +338 -0
- package/src/components/asset-viewers/AudioViewer.tsx +73 -21
- package/src/components/asset-viewers/GenericJsonViewer.tsx +26 -11
- package/src/components/asset-viewers/ImageViewer.tsx +43 -11
- package/src/components/asset-viewers/InputMapViewer.tsx +512 -134
- package/src/components/asset-viewers/MaterialAssetEditor.tsx +540 -0
- package/src/components/asset-viewers/ModelViewer.tsx +805 -121
- package/src/components/asset-viewers/OnlineAssetDetail.tsx +177 -60
- package/src/components/asset-viewers/SourceAssetViewer.tsx +121 -0
- package/src/components/asset-workflow.css +506 -0
- package/src/components/build-documents.tsx +696 -0
- package/src/components/core-utilities.tsx +75 -0
- package/src/components/data-documents.tsx +364 -0
- package/src/components/{DataPanel.tsx → data-editor.tsx} +138 -288
- package/src/components/debugger-panel-state.ts +57 -0
- package/src/components/inspector-widgets/AlignmentGrid.tsx +8 -14
- package/src/components/inspector-widgets/BorderEditor.tsx +41 -33
- package/src/components/inspector-widgets/ColorPicker.tsx +39 -39
- package/src/components/inspector-widgets/FontPicker.tsx +13 -21
- package/src/components/inspector-widgets/GradientEditor.tsx +11 -19
- package/src/components/inspector-widgets/ScrubbableInput.tsx +6 -3
- package/src/components/inspector-widgets/ShadowEditor.tsx +20 -33
- package/src/components/inspector-widgets/shared.tsx +90 -49
- package/src/components/inspectors/AnimationSection.tsx +39 -40
- package/src/components/inspectors/AudioSection.tsx +28 -39
- package/src/components/inspectors/BoneAttachmentSection.tsx +19 -24
- package/src/components/inspectors/CameraSection.tsx +14 -23
- package/src/components/inspectors/ComponentsSection.tsx +39 -43
- package/src/components/inspectors/JointsSection.tsx +34 -43
- package/src/components/inspectors/LightSection.tsx +90 -35
- package/src/components/inspectors/MaterialSection.tsx +137 -174
- package/src/components/inspectors/MeshSection.tsx +9 -17
- package/src/components/inspectors/NavigationSection.tsx +8 -15
- package/src/components/inspectors/ParticleSection.tsx +91 -76
- package/src/components/inspectors/PhysicsSection.tsx +42 -46
- package/src/components/inspectors/PostProcessingSection.tsx +28 -36
- package/src/components/inspectors/RenderingSection.tsx +12 -20
- package/src/components/inspectors/ShadowSection.tsx +7 -8
- package/src/components/inspectors/SplineSection.tsx +31 -42
- package/src/components/inspectors/TransformSection.tsx +14 -22
- package/src/components/patterns/Dialog.tsx +95 -0
- package/src/components/patterns/Fields.tsx +44 -0
- package/src/components/patterns/List.tsx +25 -0
- package/src/components/patterns/StateSurface.tsx +40 -0
- package/src/components/patterns/Surfaces.tsx +115 -0
- package/src/components/patterns/Tabs.tsx +80 -0
- package/src/components/patterns/Toolbar.tsx +51 -0
- package/src/components/patterns/Tree.tsx +72 -0
- package/src/components/primitives/Button.tsx +46 -0
- package/src/components/primitives/ColorInput.tsx +11 -47
- package/src/components/primitives/EditorIcon.tsx +99 -0
- package/src/components/primitives/FormControls.tsx +71 -0
- package/src/components/primitives/JsonInput.tsx +15 -2
- package/src/components/primitives/Layout.tsx +100 -0
- package/src/components/primitives/Menu.tsx +105 -0
- package/src/components/primitives/NumberInput.tsx +8 -35
- package/src/components/primitives/Panel.tsx +49 -44
- package/src/components/primitives/SectionHeader.tsx +10 -28
- package/src/components/primitives/Text.tsx +46 -0
- package/src/components/primitives/Tooltip.tsx +20 -12
- package/src/components/primitives/Vec3Input.tsx +3 -0
- package/src/components/primitives/banner-tones.ts +33 -0
- package/src/components/primitives/editor-icons.ts +102 -0
- package/src/components/primitives/panel-header-styles.ts +30 -0
- package/src/components/project-operation-documents.tsx +226 -0
- package/src/components/status-contributions.tsx +175 -0
- package/src/components/story-documents-register.ts +15 -0
- package/src/components/story-documents.tsx +1185 -0
- package/src/components/tool-documents.tsx +110 -0
- package/src/components/workspace-dock.css +293 -0
- package/src/components/workspace-history.ts +33 -0
- package/src/components/world-documents.tsx +145 -0
- package/src/components/xstate-documents.tsx +209 -0
- package/src/composite-screenshot.ts +248 -0
- package/src/design-system/index.ts +70 -0
- package/src/design-system-stories/Foundation.stories.tsx +183 -0
- package/src/design-system-stories/Patterns.stories.tsx +251 -0
- package/src/design-system-stories/Workspace.stories.tsx +538 -0
- package/src/doctor/report.ts +57 -13
- package/src/editor-api.ts +295 -31
- package/src/editor-compatibility.ts +200 -0
- package/src/editor-console.ts +35 -17
- package/src/editor-hotkeys.ts +85 -33
- package/src/editor-store.ts +538 -233
- package/src/editor-viewport.ts +160 -34
- package/src/entity-factory.ts +14 -3
- package/src/gizmo-registry.ts +21 -5
- package/src/harness-chat-editor-context.ts +37 -0
- package/src/harness-chat-indicator.ts +68 -0
- package/src/harness-chat-layout.ts +53 -0
- package/src/harness-chat-lifecycle.ts +170 -0
- package/src/harness-chat-reconnect.ts +85 -0
- package/src/harness-chat-types.ts +409 -0
- package/src/hierarchy-drop.ts +50 -0
- package/src/hierarchy-expansion-state.ts +100 -0
- package/src/hierarchy-menu-registry.ts +1 -1
- package/src/hierarchy-projection.ts +76 -0
- package/src/history/editor-session.ts +21 -0
- package/src/history/history-commands.ts +147 -0
- package/src/history/history-service.ts +904 -0
- package/src/history/json-history-resource.ts +165 -0
- package/src/history/persistence-coordinator.ts +35 -0
- package/src/history/project-file-history.ts +266 -0
- package/src/history/project-root-history-backends.ts +53 -0
- package/src/history/resource-registry.ts +209 -0
- package/src/history/snapshot-store.ts +108 -0
- package/src/history/source-history-backend.ts +374 -0
- package/src/history/types.ts +100 -0
- package/src/hmr-registration-group.ts +67 -0
- package/src/hmr-stable-react-context.ts +23 -0
- package/src/hosted-example.ts +12 -2
- package/src/hotkeys.ts +89 -18
- package/src/ingest/discovery-react.ts +9 -10
- package/src/ingest/discovery.ts +4 -4
- package/src/ingest/discovery2d.ts +5 -5
- package/src/ingest/games/bloom-composer/vgai.game.json +3 -3
- package/src/ingest/games/embed-bundle/vgai.game.json +3 -3
- package/src/ingest/games/games-fps/vgai.game.json +3 -3
- package/src/ingest/games/iframe-reachable/vgai.game.json +3 -3
- package/src/ingest/games/interactive-cubes/vgai.game.json +3 -3
- package/src/ingest/games/mismatched-three/vgai.game.json +3 -3
- package/src/ingest/games/own-three-bundled/vgai.game.json +3 -3
- package/src/ingest/games/pointerlock-maze/vgai.game.json +7 -4
- package/src/ingest/games-2d/bubbo-bubbo/vgai.game.json +3 -3
- package/src/ingest/games-2d/bunnymark/vgai.game.json +3 -3
- package/src/ingest/games-2d/flappy/vgai.game.json +3 -3
- package/src/ingest/games-2d/flappy-pixi/vgai.game.json +3 -3
- package/src/ingest/games-2d/puzzling-potions/vgai.game.json +3 -3
- package/src/ingest/games-2d/tilemap-camera/vgai.game.json +3 -3
- package/src/ingest/games-react/react-rpg/vgai.game.json +3 -3
- package/src/ingest/types.ts +1 -1
- package/src/ingest-mode.ts +47 -52
- package/src/ingest-siblings.ts +23 -33
- package/src/initial-scene.ts +1 -2
- package/src/main.tsx +16 -8
- package/src/manifest-project.ts +10 -12
- package/src/model-thumbnail.ts +261 -26
- package/src/module-mode.ts +44 -50
- package/src/play-log-events.ts +26 -0
- package/src/play-mode.ts +495 -401
- package/src/play-scene-adoption.ts +23 -0
- package/src/playground/main.ts +68 -24
- package/src/playwright-shim.ts +473 -0
- package/src/project-manager.ts +90 -10
- package/src/project-operations.ts +112 -0
- package/src/project-story-discovery.ts +25 -0
- package/src/project-tool-discovery.ts +43 -0
- package/src/scene-serializer.ts +0 -6
- package/src/scene-sync.ts +7 -2
- package/src/script-loader.ts +3 -3
- package/src/skeleton-helper.ts +57 -0
- package/src/storage/seed.ts +68 -8
- package/src/stories/StoryPreviewMount.tsx +265 -0
- package/src/stories/action-stories.fixture.tsx +44 -0
- package/src/stories/button-stories.fixture.tsx +50 -0
- package/src/stories/compose-project-stories.ts +182 -0
- package/src/stories/loader-stories.fixture.tsx +53 -0
- package/src/stories/story-discovery.ts +130 -0
- package/src/stories/story-registry.ts +146 -0
- package/src/theme-css.ts +1049 -0
- package/src/theme-library.ts +238 -0
- package/src/theme-preference.ts +130 -0
- package/src/theme.ts +527 -0
- package/src/tool-loader.ts +80 -24
- package/src/ui-source/inspect.ts +27 -4
- package/src/ui-source/source-write-backend.ts +83 -22
- package/src/widgets/index.ts +9 -18
- package/src/workspace-aux-commands.ts +11 -0
- package/src/workspace-dock-controller.ts +64 -0
- package/src/workspace-document-ids.ts +5 -0
- package/src/workspace-document-registry.ts +367 -0
- package/src/workspace-state-persistence.ts +455 -0
- package/src/workspace-status-registry.ts +110 -0
- package/src/workspace-utility-commands.ts +49 -0
- package/src/workspace-utility-registry.ts +161 -0
- package/src/world-document-routing.ts +16 -0
- package/src/xstate-inspect/XStateMachineInspector.tsx +544 -0
- package/src/xstate-inspect/character-animation-machine.fixture.ts +74 -0
- package/src/xstate-inspect/use-live-actor-state.ts +39 -0
- package/src/xstate-inspect/xstate-graph.ts +265 -0
- package/src/xstate-inspect/xstate-layout.ts +76 -0
- package/src/z-index.ts +26 -0
- package/template/.claude/skills/editor/SKILL.md +129 -90
- package/template/AGENTS.md +1110 -0
- package/template/CLAUDE.md +1 -512
- package/template/IDIOMS.md +50 -0
- package/template/check-idioms.ts +706 -0
- package/template/manifest-entry-modules-plugin.ts +53 -0
- package/template/package.json +13 -4
- package/template/public/scenes/default.scn2d.json +6 -0
- package/template/public/scenes/default.vscn.json +7 -1
- package/template/public/scenes/untitled.vscn.json +10 -0
- package/template/scripts/playtest.ts +40 -0
- package/template/server/loopback.ts +75 -0
- package/template/server/rooms/arena-room.ts +69 -1
- package/template/server/rooms/game-room.ts +68 -1
- package/template/src/data/README.md +9 -4
- package/template/src/data/data-ref.ts +35 -0
- package/template/src/data/tuning.schema.ts +1 -1
- package/template/src/main.ts +41 -62
- package/template/src/manifest-entry-modules.d.ts +3 -0
- package/template/src/operations/README.md +88 -0
- package/template/src/runtime/pixi-adapter.ts +24 -0
- package/template/src/scripts/components/data-spinner.ts +43 -2
- package/template/src/scripts/components/spin-lap-math.ts +27 -0
- package/template/src/tools/README.md +5 -3
- package/template/src/tools/example.tool.tsx +13 -7
- package/template/src/ui/Button.stories.tsx +66 -0
- package/template/src/ui/RebindPanel.tsx +2 -6
- package/template/src/ui/game.tsx +17 -0
- package/template/tests/acceptance/example.spec.ts +64 -0
- package/template/tests/logic/example.test.ts +31 -0
- package/template/tests/logic/room.test.ts +100 -0
- package/template/tests/tsconfig.json +30 -0
- package/template/validate-manifest.ts +5 -5
- package/template/validate-scenes.ts +50 -18
- package/template/vgai.game.json +20 -13
- package/template/vite.config.ts +77 -16
- package/vite-plugin-ui-oid.ts +261 -17
- package/dist/assets/CCDIKSolver-Dz-ysxZF.js +0 -1
- package/dist/assets/SelectionBox-BXsv_6aH.js +0 -1
- package/dist/assets/browser-project-scripts-DOru4L1x.js +0 -2
- package/dist/assets/browserAll-CEkWYlFk.js +0 -1
- package/dist/assets/create-runtime-DYIWr3va.js +0 -1
- package/dist/assets/data-asset-Bb9sIM7i.js +0 -5
- package/dist/assets/game-8SDZPPgH.js +0 -1
- package/dist/assets/game-CevorxyV.js +0 -1
- package/dist/assets/game-Di7XlywD.js +0 -1
- package/dist/assets/game-DjnCaw8R.js +0 -1
- package/dist/assets/game-Q9A0aXSV.js +0 -1
- package/dist/assets/index-CPVV6pjw.js +0 -1
- package/dist/assets/index-CpOnYyeD.js +0 -213
- package/dist/assets/index-Dr8H_6Rl.js +0 -1
- package/dist/assets/index-_bCaipUk.js +0 -13650
- package/dist/assets/ingest-siblings-Dz8eEqrV.js +0 -1
- package/dist/assets/mount-manifest-Bhk0ohsl.js +0 -1
- package/dist/assets/scene-query-BivAHhJu.js +0 -1
- package/dist/assets/webworkerAll-BLrH0F6F.js +0 -1
- package/dist/assets/xstate-animation-binding-1NGLmw6y.js +0 -1
- package/dist/assets/xstate.esm-BgUD33nl.js +0 -3
- package/src/authoring/scene-ui-layer.ts +0 -485
- package/src/authoring/ui-authoring-adapter.ts +0 -325
- package/src/authoring/ui-hierarchy-menu.ts +0 -40
- package/src/authoring/ui-inspector-sections.tsx +0 -156
- package/src/authoring/undo-timeline.ts +0 -145
- package/src/components/BottomPanel.tsx +0 -326
- package/src/components/BuildPanel.tsx +0 -455
- package/src/components/FolderTree.tsx +0 -179
- package/src/components/RightPanel.tsx +0 -166
- package/src/components/WorldContextMenu.tsx +0 -257
- package/src/components/asset-viewers/AssetViewer.tsx +0 -38
- package/src/ingest/games-react/react-rpg/src/ui/game-state.tsx +0 -129
- package/src/scene-ui-mode/active-scene-ui.ts +0 -58
- package/src/scene-ui-mode/scene-ui-palette-panel.tsx +0 -152
- package/src/scene-ui-mode/scene-ui-timeline-tab.tsx +0 -29
- package/src/scene-ui-mode/ui-prefab-dialog-host.tsx +0 -74
- package/src/scene-ui-mode/ui-prefab-hierarchy-menu.ts +0 -49
- package/src/scene-ui-mode/ui-prefab-io.ts +0 -76
- package/src/ui-editor/inspector.tsx +0 -563
- package/src/ui-editor/node-ops.ts +0 -266
- package/src/ui-editor/overlay.tsx +0 -380
- package/src/ui-editor/palette.tsx +0 -114
- package/src/ui-editor/react-store.ts +0 -78
- package/src/ui-editor/timeline-panel.tsx +0 -443
- package/src/ui-editor/ui-edit-store.ts +0 -552
- package/src/ui-editor/ui-prefab.ts +0 -95
- package/template/project.json +0 -9
- package/template/src/scripts/main.ts +0 -94
- package/template/src/ui/DefaultHud.tsx +0 -40
- package/template/src/ui/game-state.tsx +0 -37
- package/template/src/ui/mount-default-hud.tsx +0 -19
- package/template/src/ui/mount-ui.ts +0 -15
- package/vite-plugin-react-world-provider.ts +0 -81
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Default game script.
|
|
3
|
-
*
|
|
4
|
-
* When launched from the editor, loads the scene the user is editing.
|
|
5
|
-
* When running standalone, loads the default scene from disk.
|
|
6
|
-
*
|
|
7
|
-
* If the scene matches a known example, delegates to that example's setup
|
|
8
|
-
* function so gameplay systems (movement, camera, AI, etc.) are registered.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import type { GameAdapter } from '@engine/adapter';
|
|
12
|
-
import { fromSetup } from '@engine/adapter';
|
|
13
|
-
import type { EditorPreview, GameCleanup, GameContext } from '@engine/runtime/types';
|
|
14
|
-
import { loadScene, loadSceneFromData } from '@engine/scene/scene-loader';
|
|
15
|
-
import { applyScenePostProcessing } from '@engine/setup/setup-renderer';
|
|
16
|
-
import { mountDefaultHud } from '../ui/mount-default-hud';
|
|
17
|
-
import { componentRegistry, gameComponents } from './registry';
|
|
18
|
-
|
|
19
|
-
const DEFAULT_SCENE = 'scenes/default.vscn.json';
|
|
20
|
-
|
|
21
|
-
/** Exported for true HMR — play-mode swaps prototypes on live instances. */
|
|
22
|
-
export const components = gameComponents;
|
|
23
|
-
|
|
24
|
-
// HMR boundary — play-mode.ts handles script hot-reloading via custom events.
|
|
25
|
-
// This prevents Vite from triggering full page reloads when component files change.
|
|
26
|
-
if (import.meta.hot) {
|
|
27
|
-
import.meta.hot.accept();
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export async function setup(ctx: GameContext, editor?: EditorPreview): Promise<GameCleanup> {
|
|
31
|
-
// Generic fallback: load the scene with the full component registry
|
|
32
|
-
// so ECS components are applied, but no gameplay systems are registered.
|
|
33
|
-
const loadOpts = {
|
|
34
|
-
scene: ctx.scene,
|
|
35
|
-
rapierWorld: ctx.rapierWorld,
|
|
36
|
-
rapier: ctx.rapier,
|
|
37
|
-
physics: ctx.physics,
|
|
38
|
-
audioListener: ctx.audio.listener,
|
|
39
|
-
componentRegistry,
|
|
40
|
-
componentManager: ctx.components,
|
|
41
|
-
// Required for runtime fidelity (P1.4): particles need the batched renderer,
|
|
42
|
-
// skybox/IBL needs the WebGLRenderer for PMREM.
|
|
43
|
-
particleRenderer: ctx.particles.batchedRenderer,
|
|
44
|
-
renderer: ctx.composer.getRenderer(),
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
// Set the INITIAL camera viewpoint BEFORE loading the scene, so that any
|
|
48
|
-
// scene-defined camera or SceneCamera component (which run during loadScene)
|
|
49
|
-
// takes precedence over the editor viewport camera. Generic scenes with no
|
|
50
|
-
// camera component keep this viewpoint.
|
|
51
|
-
if (editor?.viewportCamera) {
|
|
52
|
-
ctx.camera.position.fromArray(editor.viewportCamera.position);
|
|
53
|
-
ctx.camera.quaternion.fromArray(editor.viewportCamera.quaternion);
|
|
54
|
-
} else {
|
|
55
|
-
ctx.camera.position.set(3, 3, 3);
|
|
56
|
-
ctx.camera.lookAt(0, 0.5, 0);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const sceneInstance = editor
|
|
60
|
-
? await loadSceneFromData(editor.sceneData, loadOpts)
|
|
61
|
-
: await loadScene(DEFAULT_SCENE, loadOpts);
|
|
62
|
-
|
|
63
|
-
// Apply scene-defined post-processing (bloom, vignette, DoF, …) if present.
|
|
64
|
-
if (sceneInstance.environment?.postProcessing) {
|
|
65
|
-
applyScenePostProcessing(
|
|
66
|
-
ctx.composer,
|
|
67
|
-
ctx.composer.getRenderer(),
|
|
68
|
-
ctx.scene,
|
|
69
|
-
ctx.camera,
|
|
70
|
-
sceneInstance.environment,
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Tick scene animations (GLTF mixers, etc.)
|
|
75
|
-
ctx.systems.add('postPhysics', (dt) => sceneInstance.update(dt));
|
|
76
|
-
|
|
77
|
-
// Default game HUD (C1, docs/AI-NATIVE-AUTHORING-IMPLEMENTATION-SPEC.md §9):
|
|
78
|
-
// ordinary React mounted through the existing `mountUI(ctx.uiContainer, ...)`
|
|
79
|
-
// overlay seam — see `../ui/DefaultHud.tsx`. Delete this line (and the HUD
|
|
80
|
-
// files under `../ui/`) if your game doesn't want it; it is not required by
|
|
81
|
-
// anything else in the template.
|
|
82
|
-
const unmountHud = mountDefaultHud(ctx.uiContainer);
|
|
83
|
-
|
|
84
|
-
return {
|
|
85
|
-
dispose() {
|
|
86
|
-
unmountHud();
|
|
87
|
-
sceneInstance.dispose();
|
|
88
|
-
},
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/** This example as a {@link GameAdapter} — first-party is one implementer of
|
|
93
|
-
* the same interface an external game implements (no change to setup's body). */
|
|
94
|
-
export const adapter: GameAdapter = fromSetup('default', setup);
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
import { Button } from './Button';
|
|
3
|
-
import { Panel } from './Panel';
|
|
4
|
-
|
|
5
|
-
export interface DefaultHudProps {
|
|
6
|
-
/** Panel title — plain prop, no VGAI binding-expression language. */
|
|
7
|
-
title: string;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* The template's default game HUD (C1,
|
|
12
|
-
* docs/AI-NATIVE-AUTHORING-IMPLEMENTATION-SPEC.md §9 "Make React the
|
|
13
|
-
* Template Default" / §5.1 React UI Contract): ordinary React — a plain
|
|
14
|
-
* `.tsx` component driven by props and a `useState` hook, normal inline
|
|
15
|
-
* styling (no CSS files), no `UINode`/Scene UI binding language.
|
|
16
|
-
*
|
|
17
|
-
* Mounted through the existing overlay seam — `mountUI(ctx.uiContainer, ...)`
|
|
18
|
-
* — by `mount-default-hud.tsx`, called from `../scripts/main.ts`'s `setup()`.
|
|
19
|
-
* Replace or delete this component freely; it exists to prove (and
|
|
20
|
-
* demonstrate) the React-HUD-by-default path, not to be load-bearing
|
|
21
|
-
* gameplay UI.
|
|
22
|
-
*/
|
|
23
|
-
export function DefaultHud({ title }: DefaultHudProps) {
|
|
24
|
-
const [paused, setPaused] = useState(false);
|
|
25
|
-
|
|
26
|
-
return (
|
|
27
|
-
<Panel title={title} position="top-left">
|
|
28
|
-
<div
|
|
29
|
-
data-testid="default-hud-status"
|
|
30
|
-
style={{ color: paused ? '#dd3d3d' : '#3ddc65', fontSize: 12 }}
|
|
31
|
-
>
|
|
32
|
-
{paused ? 'Paused' : 'Running'}
|
|
33
|
-
</div>
|
|
34
|
-
<Button
|
|
35
|
-
label={paused ? 'Resume' : 'Pause'}
|
|
36
|
-
onClick={() => setPaused((wasPaused) => !wasPaused)}
|
|
37
|
-
/>
|
|
38
|
-
</Panel>
|
|
39
|
-
);
|
|
40
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Thin re-export of the engine-published state bridge (D-Z5,
|
|
3
|
-
* `docs/WAVE3-ADAPTER-PLUMBING-DESIGN.md` §D-Z5) — `GameProvider`/`useGame`/
|
|
4
|
-
* `useGameState`/`useWorldObservation` now live canonically at
|
|
5
|
-
* `@engine/react/game-state` (`packages/engine/src/react/game-state.tsx`,
|
|
6
|
-
* the spec this file used to BE before D-Z5; see that module's doc comment
|
|
7
|
-
* for the full implementation and the context-identity rule it documents).
|
|
8
|
-
*
|
|
9
|
-
* This file KEEPS EXISTING on purpose — every scaffolded project still has
|
|
10
|
-
* `src/ui/game-state.tsx`, so:
|
|
11
|
-
* - `packages/editor/vite-plugin-react-world-provider.ts`'s virtual module
|
|
12
|
-
* (`export { GameProvider } from '/@fs/<root>/src/ui/game-state.tsx'`)
|
|
13
|
-
* keeps working byte-for-byte — it re-exports from THIS file, which now
|
|
14
|
-
* re-exports from the engine, but the file it points at (and the
|
|
15
|
-
* identity `useGame()` resolves against) is unchanged.
|
|
16
|
-
* - a react-world entry's own relative `import { useGameState } from
|
|
17
|
-
* './ui/game-state'` keeps resolving here too — both routes still
|
|
18
|
-
* converge on ONE module instance (this file), which itself resolves the
|
|
19
|
-
* engine's `@engine/react/game-state` exactly once, so `createContext()`
|
|
20
|
-
* runs exactly once per project. No context split.
|
|
21
|
-
*
|
|
22
|
-
* Adoption of the engine module is an OPTION, not a migration: existing
|
|
23
|
-
* projects that already have their OWN full copy of this file (their own
|
|
24
|
-
* `createContext`) are untouched by this change — only NEW projects
|
|
25
|
-
* scaffolded from the template get this canonical re-export. A project that
|
|
26
|
-
* wants a customized bridge can still replace this file with its own full
|
|
27
|
-
* implementation, exactly as before.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
export {
|
|
31
|
-
GameProvider,
|
|
32
|
-
requireWorldObserver,
|
|
33
|
-
shallow,
|
|
34
|
-
useGame,
|
|
35
|
-
useGameState,
|
|
36
|
-
useWorldObservation,
|
|
37
|
-
} from '@engine/react/game-state';
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { DefaultHud } from './DefaultHud';
|
|
2
|
-
import { mountUI } from './mount-ui';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Mounts the template's default React HUD into the shared UI overlay
|
|
6
|
-
* (`ctx.uiContainer` — `pointer-events:none`; `Panel`/`Button` inside opt
|
|
7
|
-
* back in via `pointer-events:auto`, so the game canvas keeps receiving
|
|
8
|
-
* pointer events everywhere except the HUD's own controls) and returns an
|
|
9
|
-
* unmount function. Kept as its own `.tsx` module so `../scripts/main.ts` —
|
|
10
|
-
* the game SETUP script, not a component — never needs JSX syntax itself.
|
|
11
|
-
*
|
|
12
|
-
* Usage (see `../scripts/main.ts`):
|
|
13
|
-
* const unmountHud = mountDefaultHud(ctx.uiContainer);
|
|
14
|
-
* // ... later, in the returned GameCleanup:
|
|
15
|
-
* // dispose() { unmountHud(); sceneInstance.dispose(); }
|
|
16
|
-
*/
|
|
17
|
-
export function mountDefaultHud(container: HTMLDivElement): () => void {
|
|
18
|
-
return mountUI(container, <DefaultHud title="Game Status" />);
|
|
19
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from 'react';
|
|
2
|
-
import { createRoot } from 'react-dom/client';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Mount a React element into a container div and return a cleanup function.
|
|
6
|
-
*
|
|
7
|
-
* Usage in example dispose():
|
|
8
|
-
* const unmount = mountUI(ctx.uiContainer, <MyHUD />);
|
|
9
|
-
* return { dispose: unmount };
|
|
10
|
-
*/
|
|
11
|
-
export function mountUI(container: HTMLDivElement, element: ReactNode): () => void {
|
|
12
|
-
const root = createRoot(container);
|
|
13
|
-
root.render(element);
|
|
14
|
-
return () => root.unmount();
|
|
15
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Vite plugin: a tiny synthetic ES module that STATICALLY re-exports
|
|
3
|
-
* `GameProvider` from a given project's `src/ui/game-state.tsx`
|
|
4
|
-
* (T6.2 slice 3 finding — see `packages/editor/src/adapter-resolver.ts`'s
|
|
5
|
-
* `loadProjectGameProvider` doc comment for the full mechanism this closes).
|
|
6
|
-
*
|
|
7
|
-
* The problem this solves: `resolveDefaultReactAdapter` needs `GameProvider`
|
|
8
|
-
* from the SAME `game-state.tsx` module instance a react world's entry
|
|
9
|
-
* module's OWN static relative import (`import { useGameState } from
|
|
10
|
-
* './src/ui/game-state'`) resolves to — otherwise `<GameProvider>`
|
|
11
|
-
* and `useGameState`'s `useGame()` read/write DIFFERENT `createContext()`
|
|
12
|
-
* objects and `useGame()` throws "no Game in context" even though
|
|
13
|
-
* `<GameProvider>` genuinely wraps the tree. `adapter-resolver.ts` cannot
|
|
14
|
-
* import `game-state.tsx` directly with a hand-built runtime `/@fs/` string
|
|
15
|
-
* (`import(/* @vite-ignore *\/ computedPath)`) and expect it to land on the
|
|
16
|
-
* SAME module: verified empirically (T6.2 slice 3's AC e2e, and this
|
|
17
|
-
* plugin's own doc history) that Vite's dev server treats a raw dynamic
|
|
18
|
-
* `/@fs/` fetch differently from its own rewrite of a STATIC relative
|
|
19
|
-
* import found while transforming a `.tsx` file — the two request URLs
|
|
20
|
-
* diverge (a query-string difference observed in practice), and since
|
|
21
|
-
* browser ES module identity is per-exact-URL, that is enough to produce
|
|
22
|
-
* TWO separate module instances even though both point at the identical
|
|
23
|
-
* file on disk.
|
|
24
|
-
*
|
|
25
|
-
* The fix: make the resolver's own request for `GameProvider` go through
|
|
26
|
-
* the SAME transform-time static-import rewrite Vite already applies to a
|
|
27
|
-
* react-world entry's own relative import, by asking Vite to transform a
|
|
28
|
-
* SYNTHETIC module whose body is nothing but a literal, static
|
|
29
|
-
* `export { GameProvider } from '/@fs/<projectRoot>/src/ui/
|
|
30
|
-
* game-state.tsx';` — that specifier is resolved by the SAME plugin
|
|
31
|
-
* machinery (Vite's own `resolveId`) an entry module's static import goes
|
|
32
|
-
* through, so both converge on the identical final module.
|
|
33
|
-
*/
|
|
34
|
-
import type { Plugin } from 'vite';
|
|
35
|
-
|
|
36
|
-
/** The dynamic-import-facing URL prefix (`?root=<projectRoot>` query). */
|
|
37
|
-
export const REACT_WORLD_PROVIDER_PATH = '/__vgai-game-provider';
|
|
38
|
-
|
|
39
|
-
const VIRTUAL_ID_PREFIX = '\0vgai-game-provider:';
|
|
40
|
-
|
|
41
|
-
/** Build the dynamic-import specifier `adapter-resolver.ts` uses. */
|
|
42
|
-
export function reactWorldProviderImportSpecifier(projectRoot: string): string {
|
|
43
|
-
return `${REACT_WORLD_PROVIDER_PATH}?root=${encodeURIComponent(projectRoot)}`;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export function reactWorldProviderPlugin(): Plugin {
|
|
47
|
-
return {
|
|
48
|
-
name: 'vgai-react-world-provider',
|
|
49
|
-
resolveId(id) {
|
|
50
|
-
if (id.startsWith(REACT_WORLD_PROVIDER_PATH)) {
|
|
51
|
-
const query = id.slice(REACT_WORLD_PROVIDER_PATH.length);
|
|
52
|
-
return VIRTUAL_ID_PREFIX + query;
|
|
53
|
-
}
|
|
54
|
-
return undefined;
|
|
55
|
-
},
|
|
56
|
-
load(id) {
|
|
57
|
-
if (!id.startsWith(VIRTUAL_ID_PREFIX)) return undefined;
|
|
58
|
-
const query = id.slice(VIRTUAL_ID_PREFIX.length);
|
|
59
|
-
const params = new URLSearchParams(query.startsWith('?') ? query.slice(1) : query);
|
|
60
|
-
const projectRoot = params.get('root');
|
|
61
|
-
if (!projectRoot) {
|
|
62
|
-
throw new Error(
|
|
63
|
-
`vgai-react-world-provider: missing \`?root=\` (got id "${id}") — ` +
|
|
64
|
-
'reactWorldProviderImportSpecifier() should always supply it.',
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
// Windows roots arrive as 'C:\…' — no leading slash and backslashed.
|
|
68
|
-
// Normalize to Vite's canonical '/@fs/C:/…' form; the bare-concat form
|
|
69
|
-
// degenerates to '/@fsC:\…', which Vite cannot serve. POSIX roots
|
|
70
|
-
// (leading '/') keep the original concat shape.
|
|
71
|
-
const rootUrlPath = projectRoot.replace(/\\/g, '/');
|
|
72
|
-
const gameStatePath = `/@fs${rootUrlPath.startsWith('/') ? '' : '/'}${rootUrlPath}/src/ui/game-state.tsx`;
|
|
73
|
-
// A LITERAL static specifier — Vite's own import-analysis rewrites this
|
|
74
|
-
// the SAME way it rewrites a react-world entry's own relative import
|
|
75
|
-
// to the same file (both are static specifiers processed by the same
|
|
76
|
-
// resolver at transform time), which is what makes the two converge on
|
|
77
|
-
// one module instance.
|
|
78
|
-
return `export { GameProvider } from ${JSON.stringify(gameStatePath)};\n`;
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
}
|