@volter/editor-core 0.5.57
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 +1527 -0
- package/LICENSE +686 -0
- package/LICENSE-APACHE +202 -0
- package/NOTICE +18 -0
- package/README.md +24 -0
- package/dist/build/chunk-JS4D4XZ3.js +175 -0
- package/dist/build/chunk-JS4D4XZ3.js.map +7 -0
- package/dist/build/vite-plugin-product-contributions.js +100 -0
- package/dist/build/vite-plugin-product-contributions.js.map +7 -0
- package/dist/build/vite-plugin-shared-react.js +25 -0
- package/dist/build/vite-plugin-shared-react.js.map +7 -0
- package/dist/build/vite-plugin-shared-three.js +86 -0
- package/dist/build/vite-plugin-shared-three.js.map +7 -0
- package/dist/server/chunk-KMJC7AGO.js +98 -0
- package/dist/server/chunk-KMJC7AGO.js.map +7 -0
- package/dist/server/chunk-PSILUMGS.js +46 -0
- package/dist/server/chunk-PSILUMGS.js.map +7 -0
- package/dist/server/frame-proxy.js +255 -0
- package/dist/server/frame-proxy.js.map +7 -0
- package/dist/server/open-browser.js +53 -0
- package/dist/server/open-browser.js.map +7 -0
- package/dist/server/process-shutdown.js +127 -0
- package/dist/server/process-shutdown.js.map +7 -0
- package/dist/server/session-registry.js +141 -0
- package/dist/server/session-registry.js.map +7 -0
- package/dist/server/spawn-opener.js +11 -0
- package/dist/server/spawn-opener.js.map +7 -0
- package/dist/server/worktree-identity.js +11 -0
- package/dist/server/worktree-identity.js.map +7 -0
- package/dist-server/packaged.mjs +88816 -0
- package/package.json +118 -0
- package/scripts/build-plugins.mjs +14 -0
- package/scripts/build-server.mjs +26 -0
- package/scripts/build-session.mjs +9 -0
- package/server/account-credentials.ts +60 -0
- package/server/account-service.ts +1434 -0
- package/server/adapter-region-includes.ts +47 -0
- package/server/asset-catalog-v2.ts +175 -0
- package/server/asset-history-snapshots.ts +196 -0
- package/server/asset-ledger-store.ts +195 -0
- package/server/asset-library-routes.ts +1595 -0
- package/server/blender-wasm-artifact.ts +430 -0
- package/server/boot-timings.ts +106 -0
- package/server/canonical-path.ts +50 -0
- package/server/checkout-workspace-preflight.ts +349 -0
- package/server/cloud-asset-catalog.ts +158 -0
- package/server/coding-inference-launch.ts +237 -0
- package/server/collaboration-account-client.ts +202 -0
- package/server/collaboration-attribution.ts +122 -0
- package/server/collaboration-session.ts +934 -0
- package/server/comfyui-bridge.ts +248 -0
- package/server/console-ledger.ts +499 -0
- package/server/creation-site-transform.ts +304 -0
- package/server/creation-site-write.ts +648 -0
- package/server/data-file-serialize.ts +158 -0
- package/server/editor-brand-html.ts +72 -0
- package/server/editor-control-socket.ts +366 -0
- package/server/editor-server-options.ts +190 -0
- package/server/editor-server.ts +1483 -0
- package/server/editor-sse.ts +352 -0
- package/server/engine-provenance.ts +169 -0
- package/server/engine-source-restart.ts +117 -0
- package/server/frame-bridge.ts +115 -0
- package/server/frame-proxy.ts +490 -0
- package/server/frame-workbench.ts +259 -0
- package/server/frontend-handoff.ts +229 -0
- package/server/game-globals-shadow.ts +113 -0
- package/server/gameplay-session-retention.ts +149 -0
- package/server/gameplay-sessions.ts +123 -0
- package/server/generation-jobs.ts +201 -0
- package/server/generation-reconciler.ts +137 -0
- package/server/generative-execution-context.ts +59 -0
- package/server/git-workflow.ts +612 -0
- package/server/harness-chat-caller.ts +36 -0
- package/server/harness-chat-service.ts +1681 -0
- package/server/idle-shutdown.ts +170 -0
- package/server/js-profiling-policy.ts +52 -0
- package/server/launcher-settings.ts +84 -0
- package/server/local-asset-catalog.ts +410 -0
- package/server/managed-account-defaults.ts +22 -0
- package/server/mock-control-plane.ts +540 -0
- package/server/model-import-conversion.ts +345 -0
- package/server/native-credential-store.ts +162 -0
- package/server/open-browser.ts +118 -0
- package/server/packaged.ts +1192 -0
- package/server/play-stall.ts +126 -0
- package/server/process-shutdown.ts +218 -0
- package/server/product-presets.ts +55 -0
- package/server/project-build-artifact.ts +95 -0
- package/server/project-components.ts +100 -0
- package/server/project-dependency-invalidation.ts +114 -0
- package/server/project-file-scan.ts +235 -0
- package/server/project-hmr-files.ts +215 -0
- package/server/project-install-roots.ts +210 -0
- package/server/project-kinds.ts +71 -0
- package/server/project-mcp-servers.ts +82 -0
- package/server/project-module-freshness.ts +109 -0
- package/server/project-module-instance.ts +375 -0
- package/server/project-optimize-deps-entries.ts +827 -0
- package/server/project-output-writer.ts +679 -0
- package/server/project-package-origin.ts +63 -0
- package/server/project-root-surface.ts +831 -0
- package/server/project-scratch-path.ts +47 -0
- package/server/project-script-hmr.ts +619 -0
- package/server/project-serving-plugins.ts +236 -0
- package/server/project-tools.ts +653 -0
- package/server/project-validation.ts +250 -0
- package/server/project-verbs.ts +127 -0
- package/server/project-view.ts +52 -0
- package/server/project-watch.ts +1134 -0
- package/server/project-work-coordinator.ts +288 -0
- package/server/provider-credentials.ts +331 -0
- package/server/recent-projects-store.ts +98 -0
- package/server/redact-secrets.ts +71 -0
- package/server/repository-presence.ts +267 -0
- package/server/routes/account.ts +357 -0
- package/server/routes/agents.ts +60 -0
- package/server/routes/assets.ts +154 -0
- package/server/routes/build.ts +13 -0
- package/server/routes/collaboration.ts +595 -0
- package/server/routes/configurations.ts +419 -0
- package/server/routes/context.ts +264 -0
- package/server/routes/control-plane.ts +1811 -0
- package/server/routes/logs.ts +272 -0
- package/server/routes/project-identity.ts +302 -0
- package/server/routes/project-open.ts +429 -0
- package/server/routes/project-source.ts +686 -0
- package/server/routes/project-state.ts +383 -0
- package/server/routes/relay.ts +1029 -0
- package/server/routes/route-helpers.ts +29 -0
- package/server/routes/served-modules.ts +138 -0
- package/server/routes/session-tabs.ts +196 -0
- package/server/routes/settings.ts +121 -0
- package/server/routes/share-control.ts +486 -0
- package/server/routes/themes.ts +116 -0
- package/server/routes/tools.ts +230 -0
- package/server/routes/worktrees.ts +595 -0
- package/server/scoped-game-css.ts +461 -0
- package/server/server-utils.ts +1194 -0
- package/server/session-product.ts +112 -0
- package/server/session-registry.ts +230 -0
- package/server/share-claims.ts +138 -0
- package/server/share-host.ts +526 -0
- package/server/share-session-gateway.ts +1362 -0
- package/server/share-tunnel.ts +123 -0
- package/server/spawn-opener.ts +74 -0
- package/server/support/play/log-format.ts +76 -0
- package/server/support/play/session-record.ts +199 -0
- package/server/support/project/build-discipline.ts +718 -0
- package/server/support/project/inspection-node.ts +119 -0
- package/server/support/project/log-naming.ts +54 -0
- package/server/support/project/provenance.ts +290 -0
- package/server/support/project/run-name.ts +18 -0
- package/server/support/project/session-journal.ts +830 -0
- package/server/support/project/shared.ts +327 -0
- package/server/tab-bootstrap.ts +62 -0
- package/server/tab-heartbeat.ts +477 -0
- package/server/tab-lifecycle.ts +550 -0
- package/server/tab-presence.ts +1508 -0
- package/server/team-agent-mirror.ts +95 -0
- package/server/twin-auth.ts +138 -0
- package/server/vendored-lock-recorder.ts +968 -0
- package/server/worktree-identity.ts +121 -0
- package/server/worktree-management.ts +398 -0
- package/server/worktree-retention.d.mts +13 -0
- package/server/worktree-retention.mjs +205 -0
- package/src/EditorContext.tsx +169 -0
- package/src/account.ts +333 -0
- package/src/action-registry.ts +532 -0
- package/src/active-product.ts +74 -0
- package/src/active-project.ts +155 -0
- package/src/adapter-editor-config.ts +25 -0
- package/src/adapter-observation.ts +49 -0
- package/src/animation/stage-transport.ts +379 -0
- package/src/animation/three-clips-subject.ts +172 -0
- package/src/api/asset-library-wire.ts +45 -0
- package/src/api/assets.ts +365 -0
- package/src/api/base.ts +10 -0
- package/src/api/build.ts +99 -0
- package/src/api/git-wire.ts +56 -0
- package/src/api/logs.ts +92 -0
- package/src/api/project-identity.ts +74 -0
- package/src/api/project-open.ts +355 -0
- package/src/api/project-source.ts +162 -0
- package/src/api/project-state.ts +107 -0
- package/src/api/relay.ts +268 -0
- package/src/api/settings.ts +36 -0
- package/src/api/themes.ts +45 -0
- package/src/api/worktrees.ts +257 -0
- package/src/asset-compare-core.ts +171 -0
- package/src/asset-compare.ts +294 -0
- package/src/asset-editor-context.tsx +100 -0
- package/src/asset-events.ts +97 -0
- package/src/asset-inspector-actions.ts +87 -0
- package/src/asset-preview-framing.ts +357 -0
- package/src/asset-preview.ts +2802 -0
- package/src/asset-selection-viewer-registry.ts +113 -0
- package/src/asset-selection.ts +133 -0
- package/src/asset-workflow/asset-capabilities.ts +344 -0
- package/src/asset-workflow/asset-import-jobs.ts +106 -0
- package/src/asset-workflow/asset-ledger-backend.ts +126 -0
- package/src/asset-workflow/asset-ledger.ts +156 -0
- package/src/asset-workflow/asset-materialization-report.ts +140 -0
- package/src/asset-workflow/asset-pack-manifest.ts +320 -0
- package/src/asset-workflow/asset-types.ts +142 -0
- package/src/asset-workflow/asset-workflow-quality.ts +61 -0
- package/src/asset-workflow/audio-preview-player.ts +193 -0
- package/src/asset-workflow/audio-waveform.ts +22 -0
- package/src/asset-workflow/cloud-asset-client.ts +263 -0
- package/src/asset-workflow/folder-preview.ts +345 -0
- package/src/asset-workflow/hosted-asset-materialization.ts +236 -0
- package/src/asset-workflow/image-view-scale.ts +32 -0
- package/src/asset-workflow/import-contract.ts +124 -0
- package/src/asset-workflow/ledger-write-lock.ts +244 -0
- package/src/asset-workflow/model-inspection.ts +818 -0
- package/src/asset-workflow/pixi-spritesheet.ts +197 -0
- package/src/asset-workflow/preview-resource-lifetime.ts +44 -0
- package/src/asset-workflow/project-asset-commands.ts +23 -0
- package/src/asset-workflow/project-asset-health.ts +139 -0
- package/src/asset-workflow/project-asset-operations.ts +154 -0
- package/src/asset-workflow/project-asset-roots.ts +68 -0
- package/src/asset-workflow/project-content.ts +288 -0
- package/src/asset-workflow/project-source-index.ts +550 -0
- package/src/asset-workflow/thumbnail-system.ts +256 -0
- package/src/authoring/active-adapter.ts +199 -0
- package/src/authoring/active-systems.ts +422 -0
- package/src/authoring/adapter-key.ts +18 -0
- package/src/authoring/authoring-asset-url.ts +27 -0
- package/src/authoring/bootstrap-state.ts +49 -0
- package/src/authoring/boundary-authoring-adapter.ts +184 -0
- package/src/authoring/breakpoint-state.ts +43 -0
- package/src/authoring/canvas-scene-guides.ts +76 -0
- package/src/authoring/component-instance-root.ts +171 -0
- package/src/authoring/composite-authoring-adapter.ts +2110 -0
- package/src/authoring/consumer-actions.ts +520 -0
- package/src/authoring/css-numeric-style.ts +97 -0
- package/src/authoring/design-time-layers.ts +849 -0
- package/src/authoring/design-time-mount-registry.ts +235 -0
- package/src/authoring/design-time-settle.ts +343 -0
- package/src/authoring/edit-mode-authoring.ts +619 -0
- package/src/authoring/eyedropper-session.ts +60 -0
- package/src/authoring/instance-source-menu-register.ts +13 -0
- package/src/authoring/instance-source-menu.ts +135 -0
- package/src/authoring/layered-pick.ts +183 -0
- package/src/authoring/live-gesture-lock.ts +50 -0
- package/src/authoring/live-object-transform.ts +62 -0
- package/src/authoring/mount-failure-report.ts +154 -0
- package/src/authoring/mounted-root-subjects.ts +144 -0
- package/src/authoring/no-authoring-adapter.ts +55 -0
- package/src/authoring/null-inspection-subjects.tsx +75 -0
- package/src/authoring/object3d-document-persistence.ts +106 -0
- package/src/authoring/object3d-document-session-registry.ts +120 -0
- package/src/authoring/object3d-document-session.ts +1326 -0
- package/src/authoring/object3d-gesture-controller.ts +113 -0
- package/src/authoring/panel-authoring.ts +121 -0
- package/src/authoring/prefab-instance-inspector-section.tsx +237 -0
- package/src/authoring/prefab-instance-section-model.ts +55 -0
- package/src/authoring/project-authoring-session.ts +105 -0
- package/src/authoring/provenance.ts +99 -0
- package/src/authoring/quarks-particle-systems.ts +19 -0
- package/src/authoring/react-canvas-navigation.ts +255 -0
- package/src/authoring/react-design-canvas-style.ts +20 -0
- package/src/authoring/react-story-board.ts +937 -0
- package/src/authoring/selection-scope.ts +195 -0
- package/src/authoring/shell-document-ops.ts +169 -0
- package/src/authoring/shell-object3d-document-write-policy.ts +108 -0
- package/src/authoring/shell-viewport-policy.ts +48 -0
- package/src/authoring/source-object3d-authoring-adapter.ts +526 -0
- package/src/authoring/stories-scope.ts +35 -0
- package/src/authoring/story-board-chrome-fit.ts +107 -0
- package/src/authoring/story-board-presentation.ts +111 -0
- package/src/authoring/three-projection-core.ts +226 -0
- package/src/authoring/viewport-pick-context.ts +40 -0
- package/src/authoring/viewport-raycast.ts +240 -0
- package/src/authoring/viewport-tool-context.ts +73 -0
- package/src/authoring/world-canvas-viewport-state.ts +35 -0
- package/src/authoring/world-hidden-viewport.ts +152 -0
- package/src/authoring/world-pan-state.ts +198 -0
- package/src/authoring/world-session-state.ts +101 -0
- package/src/authoring/write-pipe.ts +173 -0
- package/src/availability-tick.ts +66 -0
- package/src/bitmap-label.ts +120 -0
- package/src/blender-tab-metrics.ts +161 -0
- package/src/board-open-actions.ts +20 -0
- package/src/boot-routing.ts +391 -0
- package/src/build-identity.ts +15 -0
- package/src/bytes-codec.ts +62 -0
- package/src/camera-authoring.ts +175 -0
- package/src/cancellation-reason.ts +58 -0
- package/src/canvas-preview-frames.ts +482 -0
- package/src/capture-camera-pose.ts +77 -0
- package/src/chrome-registry.ts +159 -0
- package/src/chrome-slot-registry.ts +91 -0
- package/src/collaboration-client.ts +264 -0
- package/src/collaboration-presence.ts +41 -0
- package/src/command-dispatch.ts +19 -0
- package/src/command-listener.ts +2743 -0
- package/src/command-registry.ts +70 -0
- package/src/component-board-registry.ts +205 -0
- package/src/component-states-registry.ts +200 -0
- package/src/components/AgentPresentationNotice.tsx +75 -0
- package/src/components/AlignToolbar.tsx +204 -0
- package/src/components/AppRoot.tsx +394 -0
- package/src/components/ApplicationMenus.tsx +415 -0
- package/src/components/AssetBrowser.tsx +2843 -0
- package/src/components/AssetEditorShell.tsx +216 -0
- package/src/components/AssetInspectorToolSection.tsx +124 -0
- package/src/components/BoardRulers.tsx +354 -0
- package/src/components/CameraInfo.tsx +81 -0
- package/src/components/CanvasSceneViewport.tsx +556 -0
- package/src/components/CapabilityCoverageSection.tsx +185 -0
- package/src/components/CenterDocuments.tsx +22 -0
- package/src/components/ChromeSlot.tsx +20 -0
- package/src/components/CodeView.tsx +470 -0
- package/src/components/CollaborationHeaderControl.css +74 -0
- package/src/components/CompactInspectorCard.tsx +190 -0
- package/src/components/CompactInspectorShell.tsx +39 -0
- package/src/components/ConsolePanel.css +55 -0
- package/src/components/ConsolePanel.tsx +270 -0
- package/src/components/DefaultEditorLayout.tsx +106 -0
- package/src/components/DocumentHeaderStrip.tsx +96 -0
- package/src/components/DocumentShelfRail.tsx +45 -0
- package/src/components/DocumentThumbnail.tsx +345 -0
- package/src/components/EditorLeaseGuard.tsx +372 -0
- package/src/components/ErrorBanner.tsx +123 -0
- package/src/components/FolderPreviewTile.tsx +159 -0
- package/src/components/GameHierarchy.tsx +3842 -0
- package/src/components/GameplaySessionTimeline.tsx +295 -0
- package/src/components/InspectionProjection.tsx +968 -0
- package/src/components/Inspector.tsx +233 -0
- package/src/components/InspectorCanvasPreview.tsx +35 -0
- package/src/components/InspectorFieldsSection.tsx +290 -0
- package/src/components/InspectorObjectPreview.tsx +57 -0
- package/src/components/InspectorStoriesSection.tsx +92 -0
- package/src/components/InspectorToolSection.tsx +96 -0
- package/src/components/InspectorTransformSection.tsx +245 -0
- package/src/components/LightExplorerPanel.tsx +433 -0
- package/src/components/MediaProperties.tsx +145 -0
- package/src/components/NonThreeAuthoringBootstrap.tsx +19 -0
- package/src/components/Object3DDocumentToolbar.css +100 -0
- package/src/components/Object3DDocumentToolbar.tsx +454 -0
- package/src/components/Object3DDocumentViewport.tsx +58 -0
- package/src/components/ProjectHeader.css +617 -0
- package/src/components/ProjectHeader.tsx +328 -0
- package/src/components/ProjectLayout.tsx +249 -0
- package/src/components/ReactCanvasControls.tsx +284 -0
- package/src/components/RootSelectionOverlay.tsx +3162 -0
- package/src/components/RootTextEditor.tsx +79 -0
- package/src/components/SaveStatus.tsx +70 -0
- package/src/components/StageHost.tsx +1954 -0
- package/src/components/StageOverlays.tsx +21 -0
- package/src/components/StartupErrorScreen.tsx +76 -0
- package/src/components/StartupLoadingScreen.tsx +65 -0
- package/src/components/StatsOverlay.tsx +78 -0
- package/src/components/SurfaceStateOverlay.tsx +24 -0
- package/src/components/ToolContributionSurfaces.tsx +65 -0
- package/src/components/ToolHost.tsx +370 -0
- package/src/components/ToolObject3DPreview.tsx +39 -0
- package/src/components/Toolbar.tsx +595 -0
- package/src/components/TransientHint.tsx +44 -0
- package/src/components/TransportStrip.tsx +174 -0
- package/src/components/VersionControlSection.tsx +470 -0
- package/src/components/VgaiLogo.css +83 -0
- package/src/components/VgaiLogo.tsx +35 -0
- package/src/components/ViewportControlsHint.tsx +60 -0
- package/src/components/ViewportFurniture.tsx +401 -0
- package/src/components/ViewportOverlay.tsx +145 -0
- package/src/components/ViewportOverlaysMenu.tsx +153 -0
- package/src/components/ViewportShadingMenu.tsx +300 -0
- package/src/components/ViewportViewMenu.tsx +101 -0
- package/src/components/WorkspaceDocumentSurface.tsx +204 -0
- package/src/components/WorkspaceUtilitySurface.tsx +22 -0
- package/src/components/WorktreeSwitcher.css +239 -0
- package/src/components/WorktreeSwitcher.tsx +890 -0
- package/src/components/account-documents.tsx +1162 -0
- package/src/components/asset-documents.tsx +812 -0
- package/src/components/asset-editor-persistence.ts +216 -0
- package/src/components/asset-selection-section.tsx +535 -0
- package/src/components/asset-thumbnails.tsx +312 -0
- package/src/components/asset-viewers/AudioViewer.tsx +201 -0
- package/src/components/asset-viewers/EntityModelDocument.tsx +122 -0
- package/src/components/asset-viewers/EnvironmentAssetDocument.tsx +440 -0
- package/src/components/asset-viewers/GenericJsonViewer.tsx +102 -0
- package/src/components/asset-viewers/ImageViewer.tsx +300 -0
- package/src/components/asset-viewers/JsonAssetDocument.tsx +93 -0
- package/src/components/asset-viewers/LiveModuleDocument.tsx +417 -0
- package/src/components/asset-viewers/LutAssetDocument.tsx +444 -0
- package/src/components/asset-viewers/ModelAssetDocument.tsx +105 -0
- package/src/components/asset-viewers/Object3DPreview.tsx +359 -0
- package/src/components/asset-viewers/OnlineAssetDetail.tsx +421 -0
- package/src/components/asset-viewers/PasteboardModuleDocument.tsx +67 -0
- package/src/components/asset-viewers/QuarksAssetDocument.tsx +526 -0
- package/src/components/asset-viewers/ShaderAssetDocument.tsx +743 -0
- package/src/components/asset-viewers/SourceAssetViewer.tsx +281 -0
- package/src/components/asset-viewers/SpritesheetSpriteView.tsx +102 -0
- package/src/components/asset-viewers/VideoViewer.tsx +101 -0
- package/src/components/asset-viewers/shader-source.ts +144 -0
- package/src/components/asset-workflow.css +731 -0
- package/src/components/board-guides.ts +150 -0
- package/src/components/compact-inspector.css +539 -0
- package/src/components/core-utilities.tsx +90 -0
- package/src/components/editor-notifications.css +40 -0
- package/src/components/engine-workspace.css +274 -0
- package/src/components/inspector-preview-section.tsx +238 -0
- package/src/components/inspector-property-grouping.ts +64 -0
- package/src/components/inspector-revert-label.ts +20 -0
- package/src/components/inspector-selection.ts +42 -0
- package/src/components/inspector-stories-gating.ts +171 -0
- package/src/components/inspector-transform-subject.ts +11 -0
- package/src/components/inspector-transform.ts +75 -0
- package/src/components/kind-documents.tsx +500 -0
- package/src/components/palette-action-publisher.tsx +140 -0
- package/src/components/primitives/DraftColorInput.tsx +74 -0
- package/src/components/product-shell.css +1829 -0
- package/src/components/project-tool-documents.tsx +410 -0
- package/src/components/scene-documents.tsx +223 -0
- package/src/components/stage-keyboard.tsx +37 -0
- package/src/components/stage-overlay-set.tsx +107 -0
- package/src/components/stage-presence-markers.ts +478 -0
- package/src/components/standard-viewport-dressing.ts +417 -0
- package/src/components/status-contributions.tsx +403 -0
- package/src/components/tool-documents.tsx +309 -0
- package/src/components/tool-schema-form.tsx +262 -0
- package/src/components/use-after-paint.ts +41 -0
- package/src/components/use-project-image-assets.ts +86 -0
- package/src/components/viewport-header-controls.css +90 -0
- package/src/components/viewport-surface-status.tsx +55 -0
- package/src/components/workspace-history.ts +32 -0
- package/src/components/workspace-static-panel-registry.tsx +152 -0
- package/src/components/workspace-surfaces.css +621 -0
- package/src/components/world-documents.tsx +586 -0
- package/src/components/world-overlay-gestures.ts +1694 -0
- package/src/composite-screenshot.ts +1641 -0
- package/src/console-sync.ts +131 -0
- package/src/constraint-helper.ts +338 -0
- package/src/content-entry-source-registry.ts +184 -0
- package/src/coverage/authoring-seam-evidence.ts +300 -0
- package/src/coverage/canvas-reveal.ts +192 -0
- package/src/coverage/design-time-surfaces.ts +101 -0
- package/src/coverage/live-seam-evidence.ts +11 -0
- package/src/coverage/ontology-invariants.ts +466 -0
- package/src/coverage/session-vitals.ts +501 -0
- package/src/coverage/system-seam-evidence.ts +72 -0
- package/src/crash-null-boundary.ts +36 -0
- package/src/creation-site-edit.ts +1479 -0
- package/src/creation-site-registry.ts +160 -0
- package/src/delegate-harness-registry.ts +143 -0
- package/src/document-context-registry.ts +177 -0
- package/src/document-open-registry.ts +200 -0
- package/src/document-preview-source.ts +20 -0
- package/src/document-renderer-session.ts +138 -0
- package/src/editor-api.ts +46 -0
- package/src/editor-chrome-capture.ts +139 -0
- package/src/editor-commands.ts +164 -0
- package/src/editor-console.ts +563 -0
- package/src/editor-current-view.ts +82 -0
- package/src/editor-document-probe.ts +881 -0
- package/src/editor-git-client.ts +115 -0
- package/src/editor-host-door.ts +462 -0
- package/src/editor-hotkeys.ts +842 -0
- package/src/editor-lease-view.ts +39 -0
- package/src/editor-lease.ts +415 -0
- package/src/editor-mode.ts +19 -0
- package/src/editor-notifications.ts +140 -0
- package/src/editor-presence.ts +563 -0
- package/src/editor-presentation-activity.ts +50 -0
- package/src/editor-presentation-notice.ts +42 -0
- package/src/editor-runtime.tsx +145 -0
- package/src/editor-server-response.ts +86 -0
- package/src/editor-session-attribution.ts +75 -0
- package/src/editor-session-mode.ts +54 -0
- package/src/editor-shell-store.ts +1304 -0
- package/src/editor-state-facets.ts +74 -0
- package/src/editor-styles.css +33 -0
- package/src/editor-view-presentation.ts +810 -0
- package/src/editor-viewport.ts +5302 -0
- package/src/entity-lod.ts +31 -0
- package/src/entity-object.ts +91 -0
- package/src/files/file-provider.ts +62 -0
- package/src/files/project-files.ts +264 -0
- package/src/finders/index.ts +136 -0
- package/src/finders/scenes-from-entrypoint-selection.ts +387 -0
- package/src/frame/bridge.tsx +1408 -0
- package/src/frame/product.ts +77 -0
- package/src/gameplay-dom-recording.ts +319 -0
- package/src/gameplay-export-state.ts +14 -0
- package/src/gameplay-replay.ts +417 -0
- package/src/gameplay-session-time.ts +9 -0
- package/src/gameplay-sessions.ts +204 -0
- package/src/harness-chat-types.ts +253 -0
- package/src/hierarchy-component-marks.ts +298 -0
- package/src/hierarchy-drop.ts +91 -0
- package/src/hierarchy-expansion-state.ts +80 -0
- package/src/hierarchy-header-slot.ts +52 -0
- package/src/hierarchy-internals.ts +197 -0
- package/src/hierarchy-kind-icon.ts +217 -0
- package/src/hierarchy-mark-reader.ts +73 -0
- package/src/hierarchy-menu-registry.ts +67 -0
- package/src/hierarchy-node-rows.ts +307 -0
- package/src/hierarchy-panel-view.ts +280 -0
- package/src/hierarchy-projection.ts +76 -0
- package/src/hierarchy-row-cache.ts +243 -0
- package/src/hierarchy-row-model.ts +308 -0
- package/src/hierarchy-rows.ts +11 -0
- package/src/hierarchy-walk.ts +86 -0
- package/src/history/editor-session.ts +25 -0
- package/src/history/history-commands.ts +147 -0
- package/src/history/history-delegate.ts +163 -0
- package/src/history/history-limit-notices.ts +43 -0
- package/src/history/history-service.ts +1173 -0
- package/src/history/persistence-coordinator.ts +35 -0
- package/src/history/project-file-history.ts +386 -0
- package/src/history/project-root-history-backends.ts +139 -0
- package/src/history/resource-registry.ts +209 -0
- package/src/history/snapshot-store.ts +103 -0
- package/src/history/source-history-backend.ts +546 -0
- package/src/history/types.ts +124 -0
- package/src/hmr-registration-group.ts +67 -0
- package/src/hmr-stable-react-context.ts +23 -0
- package/src/hotkeys.ts +188 -0
- package/src/inference-diagnostics.ts +69 -0
- package/src/initial-project.ts +80 -0
- package/src/inspection/active-subject.ts +578 -0
- package/src/inspection/active-surface.ts +142 -0
- package/src/inspection/compose.ts +1064 -0
- package/src/inspection/display.ts +170 -0
- package/src/inspection/document-subject.ts +109 -0
- package/src/inspection/game-subject.ts +85 -0
- package/src/inspection/model.ts +542 -0
- package/src/inspection/null-subject.ts +115 -0
- package/src/inspection/serialize.ts +357 -0
- package/src/inspection/use-active-inspection.ts +180 -0
- package/src/inspector-presentation.ts +201 -0
- package/src/inspector-section-registry.ts +221 -0
- package/src/instance-source-actions.ts +163 -0
- package/src/instanced-presentation.ts +164 -0
- package/src/js-heap.ts +71 -0
- package/src/key-actions.ts +91 -0
- package/src/keymap-presets.ts +401 -0
- package/src/layout-policy.ts +31 -0
- package/src/learn-links.ts +73 -0
- package/src/light-explorer-model.ts +134 -0
- package/src/live-canvas-frame.ts +55 -0
- package/src/live-document.ts +279 -0
- package/src/live-module-source.ts +230 -0
- package/src/live-session-registry.ts +220 -0
- package/src/live-transition.ts +633 -0
- package/src/manifest-project.ts +107 -0
- package/src/model-thumbnail.ts +523 -0
- package/src/native-selection-style.ts +202 -0
- package/src/object3d-document-write-policy.ts +137 -0
- package/src/packaged-runtime.ts +108 -0
- package/src/palettes/maya.palette.json +57 -0
- package/src/palettes/substance.palette.json +57 -0
- package/src/pasteboard-module.ts +81 -0
- package/src/performance-profiler.ts +367 -0
- package/src/performance-sources.ts +69 -0
- package/src/play-boot-phase.ts +145 -0
- package/src/presentation-surface.ts +248 -0
- package/src/project-adapter.ts +1143 -0
- package/src/project-asset-refresh.ts +26 -0
- package/src/project-declaration-refresh.ts +31 -0
- package/src/project-local-state.ts +118 -0
- package/src/project-manager.ts +243 -0
- package/src/project-module-changes.ts +163 -0
- package/src/project-module-split.ts +266 -0
- package/src/project-provenance.ts +115 -0
- package/src/project-ready.ts +42 -0
- package/src/project-session-reset.ts +67 -0
- package/src/project-shape.ts +68 -0
- package/src/project-tool-discovery.ts +66 -0
- package/src/project-tools.ts +107 -0
- package/src/project-work-types.ts +149 -0
- package/src/projection/three.ts +898 -0
- package/src/projection/types.ts +44 -0
- package/src/readiness.ts +113 -0
- package/src/reflection-probe-helper.ts +142 -0
- package/src/reported-play-state.ts +90 -0
- package/src/resolve-relative-specifier.ts +33 -0
- package/src/scene-document-plan.ts +315 -0
- package/src/scene-framing.ts +315 -0
- package/src/scene-live-open.ts +210 -0
- package/src/scene-view-fog.ts +89 -0
- package/src/scoped-game-css.ts +152 -0
- package/src/session-orphan-record.ts +193 -0
- package/src/session-tombstone.ts +126 -0
- package/src/settings/settings-provider.ts +82 -0
- package/src/settings-store.ts +345 -0
- package/src/shared-view-restore.ts +42 -0
- package/src/shell-store-door.ts +45 -0
- package/src/source-conflict.ts +122 -0
- package/src/spatial-handle-visuals.ts +332 -0
- package/src/stage-context.ts +341 -0
- package/src/stage-store-registry.ts +63 -0
- package/src/stale-chunk-recovery.ts +34 -0
- package/src/state-report-deferral.ts +73 -0
- package/src/storage/host-files-storage.ts +97 -0
- package/src/storage/http-storage.ts +174 -0
- package/src/storage/index.ts +75 -0
- package/src/storage/mem-storage.ts +149 -0
- package/src/storage/path-lock.ts +44 -0
- package/src/storage/paths.ts +26 -0
- package/src/storage/types.ts +116 -0
- package/src/stories/StoryComponentThumbnail.tsx +184 -0
- package/src/stories/StoryPreviewMount.tsx +306 -0
- package/src/stories/component-content-source.tsx +106 -0
- package/src/stories/component-states-source.ts +78 -0
- package/src/stories/compose-project-stories.ts +255 -0
- package/src/stories/pixi-story-model.ts +30 -0
- package/src/stories/prefabs-finder.ts +54 -0
- package/src/stories/prefabs-from-stories.ts +182 -0
- package/src/stories/project-story-discovery.ts +78 -0
- package/src/stories/project-story-regions.ts +24 -0
- package/src/stories/story-actions.ts +54 -0
- package/src/stories/story-capture-command.ts +124 -0
- package/src/stories/story-capture.ts +584 -0
- package/src/stories/story-declared-medium.ts +126 -0
- package/src/stories/story-discovery.ts +176 -0
- package/src/stories/story-document-openers.ts +36 -0
- package/src/stories/story-dom-runtime.ts +78 -0
- package/src/stories/story-grouping.ts +111 -0
- package/src/stories/story-lane.ts +88 -0
- package/src/stories/story-mount-turn.ts +27 -0
- package/src/stories/story-opener.ts +260 -0
- package/src/stories/story-pixi-preview.ts +408 -0
- package/src/stories/story-presentation.ts +215 -0
- package/src/stories/story-registry.ts +517 -0
- package/src/stories/story-three-preview.ts +807 -0
- package/src/stories/three-story-model.ts +96 -0
- package/src/story-three-preview-runtime.ts +56 -0
- package/src/surface-keyboard.ts +112 -0
- package/src/surface-state.ts +124 -0
- package/src/tab-bootstrap.js +628 -0
- package/src/tab-census.ts +198 -0
- package/src/tab-lifecycle-client.ts +196 -0
- package/src/theme-library.ts +844 -0
- package/src/theme-preference.ts +378 -0
- package/src/theme.css +3437 -0
- package/src/three-viewport/bone-selection-highlight.ts +119 -0
- package/src/three-viewport/camera-fit.ts +41 -0
- package/src/three-viewport/interactive-renderer.ts +132 -0
- package/src/three-viewport/selection-brackets.ts +310 -0
- package/src/three-viewport/selection-outline.ts +183 -0
- package/src/three-viewport/skeleton-helper.ts +61 -0
- package/src/three-viewport/source-color.ts +167 -0
- package/src/three-viewport/studio-environment.ts +96 -0
- package/src/three-viewport-presentation.ts +23 -0
- package/src/tool-contribution-play.ts +74 -0
- package/src/tool-loader.ts +1798 -0
- package/src/transform-mode-request.ts +57 -0
- package/src/transient-hint.ts +78 -0
- package/src/trigger-volume-helper.ts +116 -0
- package/src/ui-source/adapter-region-includes.ts +241 -0
- package/src/ui-source/ensure-import.ts +132 -0
- package/src/ui-source/file-region-resolver.ts +302 -0
- package/src/ui-source/inspect.ts +775 -0
- package/src/ui-source/oid-transform.ts +1845 -0
- package/src/ui-source/plan-csf-story.ts +196 -0
- package/src/ui-source/plan-extract-component.ts +421 -0
- package/src/ui-source/plan-fork-component.ts +621 -0
- package/src/ui-source/plan-named-style.ts +95 -0
- package/src/ui-source/plan-source-edit.ts +353 -0
- package/src/ui-source/r3f-contract-resolver.ts +327 -0
- package/src/ui-source/r3f-diagnostic-index.ts +165 -0
- package/src/ui-source/r3f-environment-binding.ts +133 -0
- package/src/ui-source/r3f-joint-binding.ts +251 -0
- package/src/ui-source/r3f-lod-binding.ts +91 -0
- package/src/ui-source/r3f-particle-binding.ts +235 -0
- package/src/ui-source/r3f-physics-binding.ts +483 -0
- package/src/ui-source/r3f-project-contracts.ts +444 -0
- package/src/ui-source/relative-import-specifier.ts +34 -0
- package/src/ui-source/reparent-guard.ts +544 -0
- package/src/ui-source/source-edit-request.ts +97 -0
- package/src/ui-source/source-write-backend.ts +618 -0
- package/src/ui-source/syntactic-prop-specs.ts +296 -0
- package/src/ui-source/tier-source-write-backend.ts +279 -0
- package/src/ui-source/ts-ast.ts +171 -0
- package/src/ui-source/utility-class-support.ts +169 -0
- package/src/ui-source/write-component-default.ts +133 -0
- package/src/ui-source/writer.ts +1989 -0
- package/src/viewport-activation-timings.ts +840 -0
- package/src/viewport-authoring-policy.ts +186 -0
- package/src/viewport-controls-hint.ts +57 -0
- package/src/viewport-door.ts +237 -0
- package/src/viewport-shading-boundary.ts +12 -0
- package/src/vite-error-surface.ts +141 -0
- package/src/wait-until.ts +37 -0
- package/src/workspace-areas.ts +156 -0
- package/src/workspace-aux-commands.ts +11 -0
- package/src/workspace-available-documents.ts +127 -0
- package/src/workspace-core-utilities.ts +31 -0
- package/src/workspace-document-ids.ts +59 -0
- package/src/workspace-document-registry.ts +612 -0
- package/src/workspace-document-restore.ts +145 -0
- package/src/workspace-host-commands.ts +141 -0
- package/src/workspace-persistence-gate.ts +40 -0
- package/src/workspace-play-utilities.ts +44 -0
- package/src/workspace-presets.ts +425 -0
- package/src/workspace-regions.ts +294 -0
- package/src/workspace-state-persistence.ts +536 -0
- package/src/workspace-static-panels.ts +73 -0
- package/src/workspace-status-registry.ts +121 -0
- package/src/workspace-style.ts +239 -0
- package/src/workspace-utility-commands.ts +74 -0
- package/src/workspace-utility-registry.ts +263 -0
- package/src/workspace-viewport-rect.ts +97 -0
- package/src/world-adoption.ts +115 -0
- package/src/world-document-routing.ts +104 -0
- package/vite-plugin-creation-site-write.ts +184 -0
- package/vite-plugin-creation-site.ts +80 -0
- package/vite-plugin-game-static.ts +303 -0
- package/vite-plugin-module-doorways.ts +336 -0
- package/vite-plugin-product-contributions.ts +197 -0
- package/vite-plugin-project-game-static.ts +125 -0
- package/vite-plugin-project-jsx-js.ts +65 -0
- package/vite-plugin-project-root-absolute-assets.ts +359 -0
- package/vite-plugin-shared-react.ts +420 -0
- package/vite-plugin-shared-three.ts +203 -0
- package/vite-plugin-ui-oid.ts +2106 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Owns a module's registry contributions across Vite Fast Refresh.
|
|
3
|
+
*
|
|
4
|
+
* A module-local `registered` boolean is not sufficient: Vite may reload the
|
|
5
|
+
* contributor without reloading the registry (duplicates), or reload the
|
|
6
|
+
* registry without reloading the contributor (missing entries). Tracking the
|
|
7
|
+
* unregister callbacks in `import.meta.hot.data` gives the contribution one
|
|
8
|
+
* explicit lifetime and keeps strict duplicate-id checks meaningful.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export interface HmrRegistrationContext {
|
|
12
|
+
readonly data?: Record<string, unknown>;
|
|
13
|
+
dispose(callback: (data: Record<string, unknown>) => void): void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface HmrRegistrationGroup {
|
|
17
|
+
ensure(register: (track: (unregister: () => void) => void) => void): void;
|
|
18
|
+
reset(): void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface PersistedRegistrationGroup {
|
|
22
|
+
dispose(): void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function createHmrRegistrationGroup(
|
|
26
|
+
hot: HmrRegistrationContext | undefined,
|
|
27
|
+
key: string,
|
|
28
|
+
): HmrRegistrationGroup {
|
|
29
|
+
const persistedKey = `vgai:registration-group:${key}`;
|
|
30
|
+
// Test runners and non-Vite hosts can expose a partial `import.meta.hot`
|
|
31
|
+
// shim without `data`. In that case the group still owns its local
|
|
32
|
+
// registrations, but there is no cross-refresh persistence to maintain.
|
|
33
|
+
const hotData = hot?.data;
|
|
34
|
+
const previous = hotData?.[persistedKey] as PersistedRegistrationGroup | undefined;
|
|
35
|
+
previous?.dispose();
|
|
36
|
+
|
|
37
|
+
let active = false;
|
|
38
|
+
let unregisters: Array<() => void> = [];
|
|
39
|
+
|
|
40
|
+
const reset = () => {
|
|
41
|
+
active = false;
|
|
42
|
+
const owned = unregisters;
|
|
43
|
+
unregisters = [];
|
|
44
|
+
for (let i = owned.length - 1; i >= 0; i--) owned[i]!();
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const group: HmrRegistrationGroup = {
|
|
48
|
+
ensure(register) {
|
|
49
|
+
if (active) return;
|
|
50
|
+
active = true;
|
|
51
|
+
try {
|
|
52
|
+
register((unregister) => unregisters.push(unregister));
|
|
53
|
+
} catch (error) {
|
|
54
|
+
reset();
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
reset,
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
if (hotData) {
|
|
62
|
+
hotData[persistedKey] = { dispose: reset } satisfies PersistedRegistrationGroup;
|
|
63
|
+
hot.dispose(reset);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return group;
|
|
67
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type Context, createContext } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Preserve a React context object across Vite module replacement.
|
|
5
|
+
*
|
|
6
|
+
* A provider from the previous module generation can remain mounted while a
|
|
7
|
+
* freshly imported consumer renders. If both generations call
|
|
8
|
+
* `createContext()`, the consumer observes a different context and falsely
|
|
9
|
+
* reports that it is outside the provider. Vite keeps `import.meta.hot.data`
|
|
10
|
+
* for exactly this kind of module-local state handoff.
|
|
11
|
+
*/
|
|
12
|
+
export function createHmrStableReactContext<T>(
|
|
13
|
+
hotData: Record<string, unknown> | undefined,
|
|
14
|
+
key: string,
|
|
15
|
+
defaultValue: T,
|
|
16
|
+
): Context<T> {
|
|
17
|
+
const existing = hotData?.[key];
|
|
18
|
+
if (existing) return existing as Context<T>;
|
|
19
|
+
|
|
20
|
+
const context = createContext(defaultValue);
|
|
21
|
+
if (hotData) hotData[key] = context;
|
|
22
|
+
return context;
|
|
23
|
+
}
|
package/src/hotkeys.ts
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
let _installed = false;
|
|
2
|
+
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Types
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
|
|
7
|
+
export type HotkeyScope =
|
|
8
|
+
| 'viewport'
|
|
9
|
+
| 'hierarchy'
|
|
10
|
+
| 'inspector'
|
|
11
|
+
| 'asset-browser'
|
|
12
|
+
| 'workspace'
|
|
13
|
+
| 'global';
|
|
14
|
+
|
|
15
|
+
const HOTKEY_SCOPES = new Set<HotkeyScope>([
|
|
16
|
+
'viewport',
|
|
17
|
+
'hierarchy',
|
|
18
|
+
'inspector',
|
|
19
|
+
'asset-browser',
|
|
20
|
+
'workspace',
|
|
21
|
+
'global',
|
|
22
|
+
]);
|
|
23
|
+
|
|
24
|
+
export interface HotkeyBinding {
|
|
25
|
+
/** The key to match (`e.key`, lowercase). Ignored when `code` is set. */
|
|
26
|
+
key: string;
|
|
27
|
+
/** Match on `e.code` instead of `e.key` (for numpad keys). */
|
|
28
|
+
code?: string;
|
|
29
|
+
/** Require Ctrl (Win/Linux) or Cmd (Mac). */
|
|
30
|
+
mod?: boolean;
|
|
31
|
+
/** Require Shift. */
|
|
32
|
+
shift?: boolean;
|
|
33
|
+
/** Require Alt/Option (D4 — `wrap`'s `Ctrl+Alt+G`). */
|
|
34
|
+
alt?: boolean;
|
|
35
|
+
/** Scope(s) this binding belongs to. `'global'` bindings fire regardless of panel focus. */
|
|
36
|
+
scope: HotkeyScope | readonly HotkeyScope[];
|
|
37
|
+
/** Action to execute when the binding matches. */
|
|
38
|
+
action: (e: KeyboardEvent) => void;
|
|
39
|
+
/** Optional runtime gate. When it returns false, the binding yields to the
|
|
40
|
+
* browser and does not call preventDefault(). Use this for commands whose
|
|
41
|
+
* shortcut overlaps native behavior, such as Copy with a DOM text selection. */
|
|
42
|
+
when?: (e: KeyboardEvent) => boolean;
|
|
43
|
+
/** Allow this binding while a form control/contenteditable owns focus.
|
|
44
|
+
* Reserved for commands such as Save that are expected inside editors. */
|
|
45
|
+
allowInEditable?: boolean;
|
|
46
|
+
/** Human-readable label for menus / tooltips. */
|
|
47
|
+
label?: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// Active scope (which panel was last interacted with)
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
|
|
54
|
+
let _activeScope: HotkeyScope = 'viewport';
|
|
55
|
+
|
|
56
|
+
const ACTIVE_SCOPE_DATA_KEY = 'editorActiveHotkeyScope';
|
|
57
|
+
|
|
58
|
+
export function getActiveScope(): HotkeyScope {
|
|
59
|
+
const shared = document.documentElement.dataset[ACTIVE_SCOPE_DATA_KEY];
|
|
60
|
+
if (shared && HOTKEY_SCOPES.has(shared as HotkeyScope)) return shared as HotkeyScope;
|
|
61
|
+
return _activeScope;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function setActiveScope(scope: HotkeyScope): void {
|
|
65
|
+
_activeScope = scope;
|
|
66
|
+
// Vite can temporarily retain both pre- and post-HMR module instances.
|
|
67
|
+
// The editor shell is the durable ownership authority, so mirror the value
|
|
68
|
+
// onto the shared document rather than trusting one module-local singleton.
|
|
69
|
+
document.documentElement.dataset[ACTIVE_SCOPE_DATA_KEY] = scope;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** True when a DOM target belongs to a native text-editing surface. Shared
|
|
73
|
+
* by the global dispatcher and panel-local handlers so bubbled Backspace,
|
|
74
|
+
* Delete, and clipboard shortcuts cannot mutate editor state while typing. */
|
|
75
|
+
/**
|
|
76
|
+
* Fields that COMMIT PER KEYSTROKE — the inspector's numeric transform/prop
|
|
77
|
+
* inputs — carry no meaningful native text-undo: they are controlled inputs
|
|
78
|
+
* whose value is re-rendered from committed state, so the browser's own
|
|
79
|
+
* Cmd+Z is a dead key inside them. Marking one with this attribute lets the
|
|
80
|
+
* app's undo/redo bindings fire while it holds focus (measured 2026-08-27:
|
|
81
|
+
* after typing a transform value, undo silently did nothing until the field
|
|
82
|
+
* was blurred). Everything else keeps the editable guard — a rename box or a
|
|
83
|
+
* chat composer must keep native text undo.
|
|
84
|
+
*/
|
|
85
|
+
export const APP_UNDO_PASSTHROUGH_ATTR = 'data-editor-app-undo';
|
|
86
|
+
|
|
87
|
+
/** True when `target` sits inside a field that opted into app undo/redo. */
|
|
88
|
+
export function allowsAppUndoWhileEditable(target: EventTarget | null): boolean {
|
|
89
|
+
return target instanceof Element && target.closest(`[${APP_UNDO_PASSTHROUGH_ATTR}]`) !== null;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function isEditableTarget(target: EventTarget | null): boolean {
|
|
93
|
+
if (!(target instanceof Element)) return false;
|
|
94
|
+
if (
|
|
95
|
+
target instanceof HTMLInputElement ||
|
|
96
|
+
target instanceof HTMLTextAreaElement ||
|
|
97
|
+
target instanceof HTMLSelectElement
|
|
98
|
+
) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
if (target instanceof HTMLElement && target.isContentEditable) return true;
|
|
102
|
+
return Boolean(target.closest('[contenteditable]:not([contenteditable="false"])'));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function scopeFromOwnershipEvent(event: Event): HotkeyScope | null {
|
|
106
|
+
for (const target of event.composedPath()) {
|
|
107
|
+
if (!(target instanceof HTMLElement)) continue;
|
|
108
|
+
// A layout host moves focus through internal navigation sentinels that
|
|
109
|
+
// sit directly under the shell. A focusin on that infrastructure must not
|
|
110
|
+
// erase the concrete panel established by the preceding pointerdown.
|
|
111
|
+
// Pointerdown still uses the fallback, so genuinely clicking unclaimed
|
|
112
|
+
// chrome neutralizes authoring commands as intended.
|
|
113
|
+
if (event.type === 'focusin' && target.hasAttribute('data-editor-hotkey-fallback')) continue;
|
|
114
|
+
const candidate = target.dataset['editorHotkeyScope'];
|
|
115
|
+
if (candidate && HOTKEY_SCOPES.has(candidate as HotkeyScope)) {
|
|
116
|
+
return candidate as HotkeyScope;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function handleOwnershipEvent(event: Event): void {
|
|
123
|
+
const scope = scopeFromOwnershipEvent(event);
|
|
124
|
+
if (scope) setActiveScope(scope);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
// Binding registry
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
|
|
131
|
+
const _bindings: HotkeyBinding[] = [];
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Register hotkey bindings. Returns a dispose function that removes them.
|
|
135
|
+
*/
|
|
136
|
+
export function registerHotkeys(bindings: HotkeyBinding[]): () => void {
|
|
137
|
+
_bindings.push(...bindings);
|
|
138
|
+
return () => {
|
|
139
|
+
for (const b of bindings) {
|
|
140
|
+
const idx = _bindings.indexOf(b);
|
|
141
|
+
if (idx >= 0) _bindings.splice(idx, 1);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// ---------------------------------------------------------------------------
|
|
147
|
+
// Play-mode bare-key yield (owner ruling, 2026-08-30)
|
|
148
|
+
// ---------------------------------------------------------------------------
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* While Play runs and the GAME holds the keyboard, bare-key shell bindings
|
|
152
|
+
* yield — W/E/R belong to the game, not the transform gizmo — and ⌘/Ctrl
|
|
153
|
+
* chords stay the editor's (undo, save, palette). The predicate lives with
|
|
154
|
+
* play-mode (which owns play/tab state); this module stays dependency-free
|
|
155
|
+
* and just asks. Registered null ⇒ no yield (editor-only sessions, tests).
|
|
156
|
+
*/
|
|
157
|
+
/**
|
|
158
|
+
* Attach the scope-ownership listeners. Call once at startup.
|
|
159
|
+
*
|
|
160
|
+
* THERE IS NO KEYDOWN LISTENER HERE, and that is the whole shape of this
|
|
161
|
+
* module: VS Code's keybinding service is the one keyboard, and every editor
|
|
162
|
+
* action reaches it as a `vgai.<id>` command with a `when` clause over our
|
|
163
|
+
* panes' context keys (`scripts/workbench/generate-keymaps.mjs` writes one rule per
|
|
164
|
+
* (action, chord, keymap) into a built-in extension). A second window-level
|
|
165
|
+
* listener here would be the second owner the ruling forbids — and it was
|
|
166
|
+
* measured as exactly that: `1,1,1,2,2,2` typed into Monaco arrived as
|
|
167
|
+
* `,,,,,`, the file saved as `BoxGeometry(,,,,,)`, and a `Control+W` meant for
|
|
168
|
+
* the workbench opened Edit Mode's Inset tool.
|
|
169
|
+
*
|
|
170
|
+
* The SCOPE listeners are still ours and still needed: `getActiveScope()` is
|
|
171
|
+
* read by panel chrome as well as by the frame's `when` clauses, and they
|
|
172
|
+
* consume no keys. Ownership is captured before React's panel-local bubble
|
|
173
|
+
* handlers run, so the closest declarative scope in the composed path wins and
|
|
174
|
+
* the shell's `workspace` marker is a safe neutral fallback.
|
|
175
|
+
*/
|
|
176
|
+
export function installHotkeys(): void {
|
|
177
|
+
if (_installed) return;
|
|
178
|
+
window.addEventListener('pointerdown', handleOwnershipEvent, true);
|
|
179
|
+
window.addEventListener('focusin', handleOwnershipEvent, true);
|
|
180
|
+
_installed = true;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** Detach the scope-ownership listeners. */
|
|
184
|
+
export function uninstallHotkeys(): void {
|
|
185
|
+
window.removeEventListener('pointerdown', handleOwnershipEvent, true);
|
|
186
|
+
window.removeEventListener('focusin', handleOwnershipEvent, true);
|
|
187
|
+
_installed = false;
|
|
188
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE FALLBACK RUNG IS LOUD.
|
|
3
|
+
*
|
|
4
|
+
* ARCHITECTURE-CORE §The editor protocol, "Zero inference": the runtime answers
|
|
5
|
+
* a question by reading a declaration, walking ground truth, or diagnosing
|
|
6
|
+
* declared-vs-measured drift — loudly. A few editor surfaces still end in a
|
|
7
|
+
* text heuristic when no declaration reaches them: the inspector's widget type
|
|
8
|
+
* for a prop whose component declares nothing usable, and a design token's
|
|
9
|
+
* category when neither its name nor its value settles it.
|
|
10
|
+
*
|
|
11
|
+
* Those heuristics stay (a guessed widget still beats a blank row), but they
|
|
12
|
+
* stop being SILENT. A silent guess is indistinguishable from a declaration
|
|
13
|
+
* that worked, so nobody ever learns which rows are load-bearing and which are
|
|
14
|
+
* the editor improvising — and the guess is exactly the thing an author could
|
|
15
|
+
* have stated. Reporting names the file, the subject, and what was guessed, so
|
|
16
|
+
* the fix is one edit away.
|
|
17
|
+
*
|
|
18
|
+
* It goes to the editor's OWN Console panel, not `window.console`: the editor's
|
|
19
|
+
* doors answer questions about the editor. Warn-once per (where, what, guess),
|
|
20
|
+
* because inspector rows rebuild on every selection and a per-frame repeat
|
|
21
|
+
* would be noise rather than a signal.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { editorConsole } from './editor-console';
|
|
25
|
+
|
|
26
|
+
const warned = new Set<string>();
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The warn-once key for one (where, what, guess) triple.
|
|
30
|
+
*
|
|
31
|
+
* `JSON.stringify` of the tuple rather than a joined string: the three parts are
|
|
32
|
+
* free text, so any plain separator (`:`, `|`) can appear inside one of them and
|
|
33
|
+
* collapse two distinct guesses into one key. JSON quotes and escapes each part,
|
|
34
|
+
* which makes the encoding unambiguous — and keeps this module PLAIN TEXT. The
|
|
35
|
+
* separator this replaced was a raw NUL byte typed into the source literal,
|
|
36
|
+
* which made git classify the whole file as BINARY (`Bin 0 -> 2281 bytes`, no
|
|
37
|
+
* reviewable diff, no `.gitattributes` text normalization) while rendering as an
|
|
38
|
+
* innocent space in every editor — so the next person to touch the line would
|
|
39
|
+
* have deleted the separator without ever seeing it.
|
|
40
|
+
*/
|
|
41
|
+
function warnKey(where: string, what: string, guess: string): string {
|
|
42
|
+
return JSON.stringify([where, what, guess]);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Report that a widget/category was GUESSED from text because no declaration
|
|
47
|
+
* covered it.
|
|
48
|
+
*
|
|
49
|
+
* @param where Project-relative file (or other addressable location).
|
|
50
|
+
* @param what The subject inside it — a prop name, a token name.
|
|
51
|
+
* @param guess What the heuristic settled on, in the vocabulary the reader
|
|
52
|
+
* sees on screen.
|
|
53
|
+
*/
|
|
54
|
+
export function warnGuessedFromText(where: string, what: string, guess: string): void {
|
|
55
|
+
const key = warnKey(where, what, guess);
|
|
56
|
+
if (warned.has(key)) return;
|
|
57
|
+
warned.add(key);
|
|
58
|
+
editorConsole.warn(
|
|
59
|
+
`No declaration covers \`${what}\` in ${where}, so the editor GUESSED \`${guess}\` from its ` +
|
|
60
|
+
'text. Declare it (a typed prop on the component, a token value that states its own kind) ' +
|
|
61
|
+
'and the editor reads the declaration instead of a heuristic.',
|
|
62
|
+
'inspector',
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Test seam: forget what has already been reported. */
|
|
67
|
+
export function __resetInferenceDiagnosticsForTest(): void {
|
|
68
|
+
warned.clear();
|
|
69
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor project bootstrap: detect the open project before the editor builds
|
|
3
|
+
* anything.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { editorConsole } from './editor-console';
|
|
7
|
+
import { detectServerProject, getCurrentProject } from './project-manager';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Resolves once the boot-time project bootstrap has SETTLED (either outcome).
|
|
11
|
+
*
|
|
12
|
+
* The gate is OPEN until {@link bootstrapProject} arms it (`_projectBootstrap`
|
|
13
|
+
* starts resolved), and that is deliberate: a closed-until-armed initial value
|
|
14
|
+
* has no non-hanging form — nothing can prove a bootstrap will ever arrive, so
|
|
15
|
+
* any caller in a context that never boots the editor would wait forever.
|
|
16
|
+
* The safety comes from an ordering invariant one level up instead:
|
|
17
|
+
* `EditorProvider` calls `bootstrapProject()` in its RENDER BODY, so every
|
|
18
|
+
* descendant lifecycle — Play's binding on the store's arrival, the `?play=1`
|
|
19
|
+
* autoplay effect, `connectCommandListener`'s `vgai play` relay — observes an
|
|
20
|
+
* already-armed gate, and `DefaultEditorLayout` additionally SUSPENDS on the
|
|
21
|
+
* same promise via `use(useEditorInit())`. Moving that call into a `useEffect`
|
|
22
|
+
* would break this silently (effects run child-first), which is why the
|
|
23
|
+
* invariant is pinned by `test/editor-boot-gate-arming.test.tsx`.
|
|
24
|
+
*/
|
|
25
|
+
export function projectBootstrapSettled(): Promise<void> {
|
|
26
|
+
return _projectBootstrap;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
let _projectBootstrap: Promise<void> = Promise.resolve();
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The editor's boot-time project bootstrap: detect the project.
|
|
33
|
+
* Tracked by `projectBootstrapSettled()` so play-mode (and any
|
|
34
|
+
* other caller that must not observe a half-booted editor) can await it.
|
|
35
|
+
*
|
|
36
|
+
* Settlement tracker only — this caller still observes its OWN failure through
|
|
37
|
+
* the returned promise (same convention as play-mode's `_enterQueue`).
|
|
38
|
+
*/
|
|
39
|
+
export function bootstrapProject(): Promise<void> {
|
|
40
|
+
const run = bootstrapProjectInner();
|
|
41
|
+
_projectBootstrap = run.then(
|
|
42
|
+
() => undefined,
|
|
43
|
+
() => undefined,
|
|
44
|
+
);
|
|
45
|
+
return run;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async function bootstrapProjectInner(): Promise<void> {
|
|
49
|
+
await initProject();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Detect the active project and log the result.
|
|
53
|
+
*
|
|
54
|
+
* The only fallback detection left is ASKING THE SESSION: a local
|
|
55
|
+
* editor server holds which project is open, so there is nothing else to
|
|
56
|
+
* consult. This used to read `getProjectPathFromURL()` first, which on the
|
|
57
|
+
* HOSTED build handed an example ID to `openProject()` as if it were a
|
|
58
|
+
* filesystem path — reachable only if AppRoot had not already resolved the
|
|
59
|
+
* project, which is why it never bit. Both halves are gone with the param.
|
|
60
|
+
*/
|
|
61
|
+
export async function initProject(): Promise<void> {
|
|
62
|
+
// If the project manager already has a project (AppRoot resolved one),
|
|
63
|
+
// just log it and return — no need to re-detect.
|
|
64
|
+
const existing = getCurrentProject();
|
|
65
|
+
if (existing) {
|
|
66
|
+
editorConsole.log(`Opened project: ${existing.config.name}`, 'project');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Hosted has no server to ask; AppRoot's `detectProject` owns that surface.
|
|
71
|
+
|
|
72
|
+
try {
|
|
73
|
+
const project = await detectServerProject();
|
|
74
|
+
if (project) {
|
|
75
|
+
editorConsole.log(`Opened project: ${project.config.name}`, 'project');
|
|
76
|
+
}
|
|
77
|
+
} catch {
|
|
78
|
+
// No server project — run without a project
|
|
79
|
+
}
|
|
80
|
+
}
|