@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,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The DISPLAY resolution — "is there an inspector right now, and which
|
|
3
|
+
* projection is showing it?" — derived from the composed subject itself.
|
|
4
|
+
*
|
|
5
|
+
* ## The defect this exists for (measured live, 2026-08-06)
|
|
6
|
+
*
|
|
7
|
+
* With the UI document active and nothing selected, the inspector rendered
|
|
8
|
+
* the dom surface's own no-selection subject INSIDE the floating compact
|
|
9
|
+
* card, and `dock-panel:workspace:inspector` did not exist — while the dom
|
|
10
|
+
* surface's affinity is `column`. Two components had each open-coded the
|
|
11
|
+
* same "resolve the active surface, then resolve its presentation"
|
|
12
|
+
* expression over their own hand-rolled subscription sets: `components/Inspector.tsx` re-rendered when
|
|
13
|
+
* the active adapter notified, the workspace host did not, so the
|
|
14
|
+
* dock kept gating on the surface it had resolved before the document swap.
|
|
15
|
+
* "Both call the same function" is discipline, not structure, and it
|
|
16
|
+
* desynchronized within hours.
|
|
17
|
+
*
|
|
18
|
+
* ## The shape that makes disagreement unrepresentable
|
|
19
|
+
*
|
|
20
|
+
* There is ONE resolution — this type — and it is computed in ONE place
|
|
21
|
+
* (`inspection/active-subject.ts`, subscribed through
|
|
22
|
+
* `inspection/use-active-inspection.ts`). The presentation is read OFF THE
|
|
23
|
+
* COMPOSED SUBJECT (`InspectionSubject.presentation.preferred`, stamped by
|
|
24
|
+
* the composer from the surface it composed for), never re-derived from a
|
|
25
|
+
* surface the caller resolved for itself, and the dock's physical gating
|
|
26
|
+
* is nothing but that one value projected onto two booleans. A consumer
|
|
27
|
+
* cannot choose a projection the subject did not carry,
|
|
28
|
+
* because there is no second expression to choose it with.
|
|
29
|
+
*
|
|
30
|
+
* Pure: no React, no store, no subscription — `resolveInspectionDisplay` is a
|
|
31
|
+
* function of (subject, surface, override), which is what makes the invariant
|
|
32
|
+
* testable headlessly (`packages/editor/test/inspection-display.test.ts`).
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
import {
|
|
36
|
+
type InspectorPresentationOverride,
|
|
37
|
+
resolveInspectorPresentation,
|
|
38
|
+
} from '../inspector-presentation';
|
|
39
|
+
import type {
|
|
40
|
+
WorkspaceDocumentKind,
|
|
41
|
+
WorkspaceDocumentSelection,
|
|
42
|
+
} from '../workspace-document-registry';
|
|
43
|
+
import {
|
|
44
|
+
type InspectionPresentation,
|
|
45
|
+
type InspectionSubject,
|
|
46
|
+
type InspectionSurfaceKind,
|
|
47
|
+
inspectionAffinityFor,
|
|
48
|
+
} from './model';
|
|
49
|
+
|
|
50
|
+
/** The two document kinds a project TOOL opens as: the generic runner
|
|
51
|
+
* (`project-tool`) and a capability's own React surface (`tool-contribution`).
|
|
52
|
+
* Both own their whole viewport — a tool document IS its own UI. */
|
|
53
|
+
const PROJECT_TOOL_DOCUMENT_KINDS: readonly WorkspaceDocumentKind[] = [
|
|
54
|
+
'project-tool',
|
|
55
|
+
'tool-contribution',
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Would the inspector be describing a document OTHER than the one on screen?
|
|
60
|
+
*
|
|
61
|
+
* Only a project-tool document can reach this state: `authoring/panel-authoring.ts`
|
|
62
|
+
* has no branch for one, so it falls through to the scene's composite adapter
|
|
63
|
+
* and the inspector composes the SCENE's lingering selection — which the
|
|
64
|
+
* compact card then renders on top of the tool's own surface (owner-reported,
|
|
65
|
+
* 2026-08-14; measured with the Data sheet active and `world:world` still
|
|
66
|
+
* selected in the 3D scene).
|
|
67
|
+
*
|
|
68
|
+
* The test is POSITIVE, like `inspection/active-surface.ts`'s Asset Lab test:
|
|
69
|
+
* a tool document that publishes its OWN selection context (the humanoid
|
|
70
|
+
* builder's Object3D preview does) is showing its own inspector and keeps it.
|
|
71
|
+
* One that publishes none is not the subject's document, and gets nothing —
|
|
72
|
+
* the same answer the doctrine already gives an empty selection.
|
|
73
|
+
*/
|
|
74
|
+
export function inspectorBelongsToAnotherDocument(input: {
|
|
75
|
+
readonly activeDocumentKind: WorkspaceDocumentKind | null;
|
|
76
|
+
readonly documentSelection: WorkspaceDocumentSelection | null;
|
|
77
|
+
}): boolean {
|
|
78
|
+
const { activeDocumentKind, documentSelection } = input;
|
|
79
|
+
if (activeDocumentKind === null) return false;
|
|
80
|
+
if (!PROJECT_TOOL_DOCUMENT_KINDS.includes(activeDocumentKind)) return false;
|
|
81
|
+
return documentSelection === null;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export interface InspectionDisplay {
|
|
85
|
+
/** The composed subject. Always present — a surface with nothing to inspect
|
|
86
|
+
* composes an empty subject rather than a null one — so read
|
|
87
|
+
* {@link available} for "is there an inspector at all". */
|
|
88
|
+
readonly subject: InspectionSubject;
|
|
89
|
+
/** The surface the subject was composed for. */
|
|
90
|
+
readonly surface: InspectionSurfaceKind;
|
|
91
|
+
/** The resolved projection for this subject: the subject's own affinity,
|
|
92
|
+
* overridden by whatever the user asked for on this surface. */
|
|
93
|
+
readonly presentation: InspectionPresentation;
|
|
94
|
+
/** Whether an inspector SUBJECT exists at all — a selection, or a surface
|
|
95
|
+
* whose adapter answered `describeSubject(null)`, or a contribution that
|
|
96
|
+
* matched the empty selection. `false` empties the inspector's CONTENT
|
|
97
|
+
* (`components/Inspector.tsx` renders nothing) and withholds the floating
|
|
98
|
+
* card; it does not remove the dock column — see {@link column}. */
|
|
99
|
+
readonly available: boolean;
|
|
100
|
+
/** The viewport-local compact box is the projection showing. Floats over
|
|
101
|
+
* the viewport, so its coming and going moves no other pixel — it stays
|
|
102
|
+
* gated on {@link available}. */
|
|
103
|
+
readonly card: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* The `workspace:inspector` dock panel exists — true for BOTH docked
|
|
106
|
+
* layouts (`column` and `properties`). WORKSPACE GEOMETRY, not subject
|
|
107
|
+
* state — deliberately NOT gated on {@link available}.
|
|
108
|
+
*
|
|
109
|
+
* It used to be (`available && presentation === 'column'`), which made
|
|
110
|
+
* every select/deselect mount/unmount the dock panel and RESIZE THE
|
|
111
|
+
* VIEWPORT — measured live on the hosted editor: 587px wide with nothing
|
|
112
|
+
* selected, 309px with a selection, the camera reframing with it. Aim
|
|
113
|
+
* taken in one layout landed in the other, so clicking a second object
|
|
114
|
+
* "did nothing" or grabbed the arena behind it, and objects near the edge
|
|
115
|
+
* (the citadel's west tower) left the frame entirely on select. Four
|
|
116
|
+
* independent testers reported it as an unselectable-instances bug
|
|
117
|
+
* (runhuman passes 100/109/110/111) and every identity-layer suspect —
|
|
118
|
+
* occurrence ids, stamps, locks, resolve — measured correct; the world was
|
|
119
|
+
* simply MOVING between their clicks. One tester said "the shapes are
|
|
120
|
+
* changing on their own", which was exactly true.
|
|
121
|
+
*
|
|
122
|
+
* The content doctrine is unchanged: with nothing selected the inspector
|
|
123
|
+
* SHOWS nothing. The panel it shows nothing IN no longer comes and goes
|
|
124
|
+
* with the selection.
|
|
125
|
+
*/
|
|
126
|
+
readonly column: boolean;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Resolve the display for a composed subject. The two booleans are mutually
|
|
131
|
+
* exclusive derivations of the ONE `presentation` value, so "the dock says
|
|
132
|
+
* card while the inspector renders a column" is not a state this type can
|
|
133
|
+
* hold.
|
|
134
|
+
*
|
|
135
|
+
* `subject === null` means the active surface has nothing to inspect; the
|
|
136
|
+
* caller still gets a display (with `available: false` and every projection
|
|
137
|
+
* off) so both consumers read the same object shape either way.
|
|
138
|
+
*/
|
|
139
|
+
export function resolveInspectionDisplay(input: {
|
|
140
|
+
readonly subject: InspectionSubject;
|
|
141
|
+
readonly surface: InspectionSurfaceKind;
|
|
142
|
+
readonly available: boolean;
|
|
143
|
+
readonly override: InspectorPresentationOverride | null;
|
|
144
|
+
/** The active workspace's docked-layout choice (`workspace-regions.ts`),
|
|
145
|
+
* beneath the user's override and above the affinity. */
|
|
146
|
+
readonly workspaceDefault?: 'column' | 'properties' | 'card' | null;
|
|
147
|
+
}): InspectionDisplay {
|
|
148
|
+
const { subject, surface, available, override, workspaceDefault = null } = input;
|
|
149
|
+
// The subject carries the affinity the composer stamped on it. A surface
|
|
150
|
+
// whose subject somehow did not compose still resolves the same way its
|
|
151
|
+
// subject would have, so the two can never name different affinities.
|
|
152
|
+
const affinity = subject.presentation.preferred ?? inspectionAffinityFor(surface);
|
|
153
|
+
// ONE resolver, shared with every other caller of the preference
|
|
154
|
+
// (`inspector-presentation.ts`).
|
|
155
|
+
const presentation: InspectionPresentation = resolveInspectorPresentation(
|
|
156
|
+
affinity,
|
|
157
|
+
override,
|
|
158
|
+
workspaceDefault,
|
|
159
|
+
);
|
|
160
|
+
return {
|
|
161
|
+
subject,
|
|
162
|
+
surface,
|
|
163
|
+
presentation,
|
|
164
|
+
available,
|
|
165
|
+
card: available && presentation === 'card',
|
|
166
|
+
// Geometry, not subject state — see the field's doc for the measured
|
|
167
|
+
// defect behind dropping the `available &&` guard here.
|
|
168
|
+
column: presentation !== 'card',
|
|
169
|
+
};
|
|
170
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An open asset document's own SUBJECT, published for the one composer.
|
|
3
|
+
*
|
|
4
|
+
* ## What an asset document is, in the model
|
|
5
|
+
*
|
|
6
|
+
* "What is an asset in three.js but a hierarchical group of other three.js
|
|
7
|
+
* assets" (owner, 2026-08-07). An asset document is the three paradigm scoped
|
|
8
|
+
* to a SUBTREE — Unity's prefab-isolation mode: the same viewport, the same
|
|
9
|
+
* hierarchy, the same inspector box, with only the root changed. So it gets
|
|
10
|
+
* the ordinary inspector over it, in the ordinary place, and clicking a part
|
|
11
|
+
* inside it composes that part's subject exactly as clicking a node in the
|
|
12
|
+
* scene composes that node's.
|
|
13
|
+
*
|
|
14
|
+
* What is left for a document to say is what IT is when you have not pointed
|
|
15
|
+
* at one of its parts: its name, what kind of document it is, its provenance,
|
|
16
|
+
* and its own identified sections. It describes that as a SUBJECT and
|
|
17
|
+
* publishes it here; `authoring/null-inspection-subjects.tsx` hands it to the
|
|
18
|
+
* ONE composer as the `asset-lab` surface's `describeSubject(null)` answer, so
|
|
19
|
+
* a document's identity floor and a scene's empty state travel the same road.
|
|
20
|
+
*
|
|
21
|
+
* The shape this replaces published loose `InspectionSection[]` and let the
|
|
22
|
+
* document render them directly — sections reaching a renderer without ever
|
|
23
|
+
* being a subject's sections, which is exactly the side channel the model
|
|
24
|
+
* exists to remove.
|
|
25
|
+
*
|
|
26
|
+
* ## A latest-value holder that says when it changed
|
|
27
|
+
*
|
|
28
|
+
* The value is still written by the document that is RENDERING and read on
|
|
29
|
+
* demand — there is no state here the publisher does not already hold. What it
|
|
30
|
+
* also does is notify, because a publisher whose subject changes WITHOUT the
|
|
31
|
+
* inspector re-rendering for some other reason is otherwise invisible: the 2D
|
|
32
|
+
* components board publishes the picked frame's identity, nothing else about
|
|
33
|
+
* that pick reaches the inspector, and a human clicked frame after frame
|
|
34
|
+
* against an empty panel (runhuman pass 92). `use-active-inspection.ts`
|
|
35
|
+
* subscribes, per its own rule that everything the resolution reads is
|
|
36
|
+
* subscribed there once.
|
|
37
|
+
*
|
|
38
|
+
* The token discipline mirrors `activateAssetEditorContext`: a disposer only
|
|
39
|
+
* clears the exact publication it created, so an older document's unmount
|
|
40
|
+
* cannot erase a newer one's subject.
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
import type { NullInspectionSubject } from './null-subject';
|
|
44
|
+
|
|
45
|
+
/** What a document says it IS — the same shape any surface's
|
|
46
|
+
* `describeSubject(null)` answer takes, so the composer needs no special
|
|
47
|
+
* case for an asset document. */
|
|
48
|
+
export type DocumentInspectionSubject = NullInspectionSubject;
|
|
49
|
+
|
|
50
|
+
interface Published {
|
|
51
|
+
readonly documentId: string;
|
|
52
|
+
/** Read at consumption time so a mounted document can keep its section
|
|
53
|
+
* closures current without publishing again merely because React rendered
|
|
54
|
+
* it again. */
|
|
55
|
+
readonly readSubject: () => DocumentInspectionSubject;
|
|
56
|
+
readonly token: symbol;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
let published: Published | null = null;
|
|
60
|
+
let version = 0;
|
|
61
|
+
const listeners = new Set<() => void>();
|
|
62
|
+
|
|
63
|
+
function notifyChanged(): void {
|
|
64
|
+
version += 1;
|
|
65
|
+
for (const listener of listeners) listener();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function subscribeDocumentInspectionSubject(listener: () => void): () => void {
|
|
69
|
+
listeners.add(listener);
|
|
70
|
+
return () => {
|
|
71
|
+
listeners.delete(listener);
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function documentInspectionSubjectVersion(): number {
|
|
76
|
+
return version;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Publish the subject the open document describes. Returns a disposer that
|
|
80
|
+
* clears exactly this publication. */
|
|
81
|
+
export function publishDocumentInspectionSubject(
|
|
82
|
+
documentId: string,
|
|
83
|
+
readSubject: () => DocumentInspectionSubject,
|
|
84
|
+
): () => void {
|
|
85
|
+
const token = Symbol(documentId);
|
|
86
|
+
published = { documentId, readSubject, token };
|
|
87
|
+
notifyChanged();
|
|
88
|
+
return () => {
|
|
89
|
+
if (published?.token !== token) return;
|
|
90
|
+
published = null;
|
|
91
|
+
notifyChanged();
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** The subject the open document describes, or `null` when no document is
|
|
96
|
+
* publishing one. */
|
|
97
|
+
export function documentInspectionSubject(): {
|
|
98
|
+
readonly documentId: string;
|
|
99
|
+
readonly subject: DocumentInspectionSubject;
|
|
100
|
+
} | null {
|
|
101
|
+
return published === null
|
|
102
|
+
? null
|
|
103
|
+
: { documentId: published.documentId, subject: published.readSubject() };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function __resetDocumentInspectionSubjectForTest(): void {
|
|
107
|
+
published = null;
|
|
108
|
+
notifyChanged();
|
|
109
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE GAME as an inspection subject — the play surface's empty state (owner
|
|
3
|
+
* ruling, `docs/ARCHITECTURE-CORE.md`, 2026-08-19: "while a runtime is live,
|
|
4
|
+
* nothing-selected on the play surface composes THE GAME as the inspector's
|
|
5
|
+
* subject").
|
|
6
|
+
*
|
|
7
|
+
* It passes the recorded empty-state test rather than weakening it: "with
|
|
8
|
+
* nothing selected the inspector shows nothing" holds except where a surface's
|
|
9
|
+
* empty space IS a real thing, and the play surface's empty space is the
|
|
10
|
+
* running game. Edit mode is unchanged — no runtime, no subject — and that is
|
|
11
|
+
* enforced by LIFETIME, not by a predicate: `play-mode.ts` registers this
|
|
12
|
+
* provider when a session starts and disposes it when the session stops, so
|
|
13
|
+
* outside play there is no provider to match at all.
|
|
14
|
+
*
|
|
15
|
+
* Sections are project contributions scoped to this subject. A game with no
|
|
16
|
+
* sections has nothing to inspect; its identity alone does not open a card.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { GAME_DOCUMENT_ID } from '../workspace-document-ids';
|
|
20
|
+
import { activeWorkspaceDocumentId } from '../workspace-document-registry';
|
|
21
|
+
import type { NullInspectionSubject } from './null-subject';
|
|
22
|
+
import { registerNullSubjectProvider } from './null-subject';
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The Game subject's id — and therefore the SCOPING KEY a project inspector
|
|
26
|
+
* contribution matches on (`context.nullSubjectId === GAME_SUBJECT_ID`). It is
|
|
27
|
+
* a stable literal rather than a per-instance id precisely because it is a
|
|
28
|
+
* contract: a contribution scopes itself to "the game", and which mount that
|
|
29
|
+
* is follows the inspected instance underneath it.
|
|
30
|
+
*/
|
|
31
|
+
export const GAME_SUBJECT_ID = 'game';
|
|
32
|
+
|
|
33
|
+
/** The live facts the subject shows. Read at describe time, never captured. */
|
|
34
|
+
export interface GameSubjectFacts {
|
|
35
|
+
/** The project's display name (`vgai.project.json`'s `name`). */
|
|
36
|
+
readonly projectName: string | null;
|
|
37
|
+
/**
|
|
38
|
+
* The inspected seat's name, and ONLY when more than one seat is live —
|
|
39
|
+
* with a single mount "which game is this?" is not a question, and a row
|
|
40
|
+
* answering it would be chrome. With several, this is the one thing that
|
|
41
|
+
* distinguishes two mounts of the same project.
|
|
42
|
+
*/
|
|
43
|
+
readonly instanceName: string | null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** The Game subject, shaped. Pure, so the identity contract is testable
|
|
47
|
+
* without a play session or a DOM. */
|
|
48
|
+
export function gameNullInspectionSubject(facts: GameSubjectFacts): NullInspectionSubject {
|
|
49
|
+
const name = facts.projectName?.trim();
|
|
50
|
+
return {
|
|
51
|
+
id: GAME_SUBJECT_ID,
|
|
52
|
+
// The project's own name, because the subject IS this project's game. The
|
|
53
|
+
// fallback is not a display choice — a project with no name is a broken
|
|
54
|
+
// manifest, and the row still has to say what kind of thing it is.
|
|
55
|
+
title: name && name.length > 0 ? name : 'Game',
|
|
56
|
+
// Present ⇒ the composer gives the subject a read-only identity ROW. The
|
|
57
|
+
// identity row is editor-owned per the facet ruling; no contribution
|
|
58
|
+
// stands in for it.
|
|
59
|
+
kindLabel: 'Game',
|
|
60
|
+
...(facts.instanceName ? { note: { text: facts.instanceName } } : {}),
|
|
61
|
+
sections: [],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Publish the Game subject for the lifetime of one play session.
|
|
67
|
+
*
|
|
68
|
+
* `read` is a live reader rather than a snapshot: the subject FOLLOWS the
|
|
69
|
+
* inspected instance, so which seat's name it shows is resolved every time the
|
|
70
|
+
* inspector composes, not once at Play.
|
|
71
|
+
*
|
|
72
|
+
* The match is the active-document test and nothing more. The Game document is
|
|
73
|
+
* play-time only, so "a runtime is live" is already this registration's
|
|
74
|
+
* existence, and asking it twice would be two answers to one question. It also
|
|
75
|
+
* keeps the provider off every other surface: an Asset Lab document active
|
|
76
|
+
* means `activeWorkspaceDocumentId()` is that document's, so this never
|
|
77
|
+
* matches, and the asset-lab provider — registered at import time, therefore
|
|
78
|
+
* FIRST in the first-match-wins list — answers instead.
|
|
79
|
+
*/
|
|
80
|
+
export function registerGameNullSubject(read: () => GameSubjectFacts): () => void {
|
|
81
|
+
return registerNullSubjectProvider({
|
|
82
|
+
match: () => activeWorkspaceDocumentId() === GAME_DOCUMENT_ID,
|
|
83
|
+
describe: () => gameNullInspectionSubject(read()),
|
|
84
|
+
});
|
|
85
|
+
}
|