@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,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WHICH ROOTS THE ACTIVE AUTHORING SURFACE PRESENTS LIVE — the host's own
|
|
3
|
+
* answer to "what is mounted, and through which adapter".
|
|
4
|
+
*
|
|
5
|
+
* It lived in `coverage/root-coverage.ts` because the per-root coverage report
|
|
6
|
+
* was its first reader, and it stayed there long after a second one appeared.
|
|
7
|
+
* It is not a grade: the vitals' `presented three roots` invariant ("a scene
|
|
8
|
+
* has one root", `coverage/ontology-invariants.ts`) asks it, the Hierarchy and
|
|
9
|
+
* the gizmo work over exactly these subjects, and a host with no game skew
|
|
10
|
+
* loaded still has every one of them. So it is the authoring seam's, beside
|
|
11
|
+
* `active-adapter.ts` whose override it reads — and the coverage report that
|
|
12
|
+
* grades these subjects can leave the host without taking the question with
|
|
13
|
+
* it.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import type { AuthoringAdapter } from '@volter/editor-project/adapter';
|
|
17
|
+
import type { AdapterSurface } from '@volter/editor-project/adapter/adapter-surface';
|
|
18
|
+
import { liveSurface } from '../live-session-registry';
|
|
19
|
+
import { projectAdapterFacet } from '../project-adapter';
|
|
20
|
+
import {
|
|
21
|
+
activeWorkspaceDocument,
|
|
22
|
+
activeWorkspaceDocumentSelection,
|
|
23
|
+
} from '../workspace-document-registry';
|
|
24
|
+
import { getAuthoringOverride } from './active-adapter';
|
|
25
|
+
import { CompositeAuthoringAdapter } from './composite-authoring-adapter';
|
|
26
|
+
|
|
27
|
+
/** One mounted root, as this module needs to see it. Structural on purpose: the
|
|
28
|
+
* composite hands these over, and a test can build one by hand. */
|
|
29
|
+
export interface MountedRootSubject {
|
|
30
|
+
readonly worldId: string;
|
|
31
|
+
readonly surface: AdapterSurface | null;
|
|
32
|
+
readonly adapter: AuthoringAdapter;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const SURFACE_KINDS: readonly string[] = ['three', 'canvas', 'dom'];
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* A root that DECLARES it has no live editing surface here — the disclosure
|
|
39
|
+
* adapter (`AuthoringProvenance.source === 'boundary'`) a manifest-declared
|
|
40
|
+
* world wears while its real mount is still assembling, or after that mount was
|
|
41
|
+
* suspended or failed.
|
|
42
|
+
*
|
|
43
|
+
* It is NOT a coverage subject. Grading a disclosure against the provider
|
|
44
|
+
* contract prints "this root exposes no <provider> provider" fourteen times
|
|
45
|
+
* about a surface that does not exist yet — a snapshot that is false the moment
|
|
46
|
+
* it is taken and, because the console sync forwards warnings to the server's
|
|
47
|
+
* unresolved ledger, then stands there forever beside the real post-mount
|
|
48
|
+
* report.
|
|
49
|
+
*
|
|
50
|
+
* MEASURED on a canvas ingest: opening the project installs the edit-mode
|
|
51
|
+
* composite with a Boundary child for the ingest root
|
|
52
|
+
* (`authoring/edit-mode-authoring.ts`), and the mount then spends SECONDS
|
|
53
|
+
* awaiting the Game document, the capture window — a budget of VISIBLE time,
|
|
54
|
+
* 8s by default, which PARKS while the tab is hidden
|
|
55
|
+
* (`ingest/capture-wait-report.ts`) — and the stage settle, before
|
|
56
|
+
* `setActiveAuthoring` swaps the live adapter in
|
|
57
|
+
* (`ingest/mount-canvas-ingest-root.ts`). The vitals sampler runs every 5s
|
|
58
|
+
* (`coverage/session-vitals.ts`), so an ordinary reload lands inside that
|
|
59
|
+
* window and files "16 of 30 seams are MISSING" against a session that reports
|
|
60
|
+
* zero editor gaps seconds later.
|
|
61
|
+
*
|
|
62
|
+
* The stand-down is principled rather than timed: no debounce, no delay, no
|
|
63
|
+
* game id. Provenance is the adapter's OWN statement of what its rows project
|
|
64
|
+
* (rule zero — the shell reads the field, it never infers truth from adapter
|
|
65
|
+
* identity), and "declared world with no live editing surface here" is the
|
|
66
|
+
* adapter saying the mount has not attached. Coverage over an unattached mount
|
|
67
|
+
* is not a measurement.
|
|
68
|
+
*
|
|
69
|
+
* A root that mounted and honestly publishes nothing is the OPPOSITE case and
|
|
70
|
+
* stays a subject: `authoring/no-authoring-adapter.ts` declares no provenance
|
|
71
|
+
* at all, because "this root has no authoring surface" is a real, standing
|
|
72
|
+
* capability gap that the report exists to keep loud.
|
|
73
|
+
*/
|
|
74
|
+
function isBoundaryDisclosure(adapter: AuthoringAdapter): boolean {
|
|
75
|
+
return adapter.provenance?.source === 'boundary';
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** The composite's `kind` string as a surface, or `null` when it is not one of
|
|
79
|
+
* the three the host hands out — in which case NOTHING is excused (see
|
|
80
|
+
* `CapabilityCoverageFacts.surface`). */
|
|
81
|
+
function asSurface(kind: string): AdapterSurface | null {
|
|
82
|
+
return SURFACE_KINDS.includes(kind) ? (kind as AdapterSurface) : null;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Every root the active authoring surface presents LIVE, or `[]` when nothing is
|
|
87
|
+
* mounted.
|
|
88
|
+
*
|
|
89
|
+
* A composite lists its children; a bare adapter IS the one root. `role:
|
|
90
|
+
* 'surface'` children are skipped: they are adapter-owned content INSIDE a
|
|
91
|
+
* root (a nested board, a scene-UI seam), not roots the manifest declared, and
|
|
92
|
+
* grading them against the full contract would invent gaps for things that were
|
|
93
|
+
* never meant to be roots. {@link isBoundaryDisclosure} children are skipped for
|
|
94
|
+
* the sibling reason: they are worlds the editor has DISCLOSED, not mounted.
|
|
95
|
+
*/
|
|
96
|
+
export function mountedRootSubjects(): readonly MountedRootSubject[] {
|
|
97
|
+
// An isolation document is a real Edit mount owned by one declared region,
|
|
98
|
+
// even though it deliberately does not replace the composition-wide active
|
|
99
|
+
// adapter. Its workspace binding is the same adapter Hierarchy, Inspector,
|
|
100
|
+
// and writes use; its descriptor carries the owning root. Measure that pair
|
|
101
|
+
// first so coverage describes the surface the author is actually editing.
|
|
102
|
+
const documentSelection = activeWorkspaceDocumentSelection();
|
|
103
|
+
const documentRootId = activeWorkspaceDocument()?.descriptor.provenance?.rootId;
|
|
104
|
+
const documentRegion = documentRootId
|
|
105
|
+
? projectAdapterFacet()?.regions.find((region) => region.id === documentRootId)
|
|
106
|
+
: undefined;
|
|
107
|
+
const documentSubject =
|
|
108
|
+
documentSelection?.adapter && documentRootId && documentRegion
|
|
109
|
+
? {
|
|
110
|
+
worldId: documentRootId,
|
|
111
|
+
surface: documentRegion.surface,
|
|
112
|
+
adapter: documentSelection.adapter,
|
|
113
|
+
}
|
|
114
|
+
: null;
|
|
115
|
+
const active = getAuthoringOverride();
|
|
116
|
+
if (!active) return documentSubject ? [documentSubject] : [];
|
|
117
|
+
if (active instanceof CompositeAuthoringAdapter) {
|
|
118
|
+
const subjects = active
|
|
119
|
+
.childAdapters()
|
|
120
|
+
.filter((child) => child.role === 'world' && !isBoundaryDisclosure(child.adapter))
|
|
121
|
+
.map((child) => ({
|
|
122
|
+
worldId: child.worldId,
|
|
123
|
+
surface: asSurface(child.kind),
|
|
124
|
+
adapter: child.adapter,
|
|
125
|
+
}));
|
|
126
|
+
if (!documentSubject) return subjects;
|
|
127
|
+
return [documentSubject, ...subjects.filter((subject) => subject.worldId !== documentRootId)];
|
|
128
|
+
}
|
|
129
|
+
if (isBoundaryDisclosure(active)) return documentSubject ? [documentSubject] : [];
|
|
130
|
+
// A bare (non-composite) active adapter still HAS a surface — a live ingest
|
|
131
|
+
// session states its render substrate outright, and `IngestKind` and
|
|
132
|
+
// `AdapterSurface` are the same three words by construction. Leaving this
|
|
133
|
+
// `null` reported the canvas N-A trio (assetSubject/text/colorSample) as
|
|
134
|
+
// gaps on every bare canvas mount, while the surface-aware ingest door
|
|
135
|
+
// called the same three rows `na` — two doors disagreeing about one mount.
|
|
136
|
+
// No live ingest ⇒ `null` stays, and nothing is excused (the deliberate
|
|
137
|
+
// cheap-direction-to-be-wrong).
|
|
138
|
+
const activeSubject = {
|
|
139
|
+
worldId: 'root',
|
|
140
|
+
surface: liveSurface(),
|
|
141
|
+
adapter: active,
|
|
142
|
+
};
|
|
143
|
+
return documentSubject ? [documentSubject, activeSubject] : [activeSubject];
|
|
144
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NoAuthoringAdapter — what the editor can honestly offer over a mounted root
|
|
3
|
+
* that exposes no authoring surface at all.
|
|
4
|
+
*
|
|
5
|
+
* A `{ module }` adapter is free to publish nothing authorable: it mounts, it
|
|
6
|
+
* draws, and the host has no tree to bind the hierarchy/inspector/gizmo to.
|
|
7
|
+
* Rather than hide that root, or fabricate a surface for it, this adapter
|
|
8
|
+
* advertises exactly what is true — one informational hierarchy node and all
|
|
9
|
+
* `capabilities` false — so the editor's generic panels render an honest
|
|
10
|
+
* nothing-to-author state instead of pretending to edit.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type {
|
|
14
|
+
AuthoringAdapter,
|
|
15
|
+
AuthoringCapabilities,
|
|
16
|
+
EditorNode,
|
|
17
|
+
HierarchyProvider,
|
|
18
|
+
} from '@volter/editor-project/adapter';
|
|
19
|
+
import type { EditorShellStore } from '../editor-shell-store';
|
|
20
|
+
|
|
21
|
+
/** The one hierarchy row this adapter publishes. Exported because it is a
|
|
22
|
+
* MESSAGE, not an entity: a surface that lists entities (the command palette)
|
|
23
|
+
* has to be able to tell it apart from a thing a person can select. */
|
|
24
|
+
export const NO_AUTHORING_ID = 'no-authoring:root';
|
|
25
|
+
|
|
26
|
+
export function makeNoAuthoringAdapter(store: EditorShellStore, label: string): AuthoringAdapter {
|
|
27
|
+
const node: EditorNode = {
|
|
28
|
+
id: NO_AUTHORING_ID,
|
|
29
|
+
label,
|
|
30
|
+
secondaryLabel: 'No authoring surface',
|
|
31
|
+
role: 'boundary',
|
|
32
|
+
kind: 'object',
|
|
33
|
+
parentId: null,
|
|
34
|
+
childIds: [],
|
|
35
|
+
};
|
|
36
|
+
const hierarchy: HierarchyProvider = {
|
|
37
|
+
roots: () => [node],
|
|
38
|
+
node: (id) => (id === NO_AUTHORING_ID ? node : null),
|
|
39
|
+
// No `object3D`/`idForObject3D`: there is no reachable Object3D to offer.
|
|
40
|
+
};
|
|
41
|
+
const capabilities: AuthoringCapabilities = {
|
|
42
|
+
transform: false,
|
|
43
|
+
inspectorFields: false,
|
|
44
|
+
persist: false,
|
|
45
|
+
};
|
|
46
|
+
return {
|
|
47
|
+
capabilities,
|
|
48
|
+
hierarchy,
|
|
49
|
+
selection: {
|
|
50
|
+
get: () => [...store.selectedEntityIds],
|
|
51
|
+
set: (ids) => store.selectMultiple(ids),
|
|
52
|
+
},
|
|
53
|
+
subscribe: (listener) => store.subscribe(listener),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shipped NO-SELECTION subjects (`inspection/null-subject.ts` is the
|
|
3
|
+
* seam; `main.tsx` imports this module for its import-time registration).
|
|
4
|
+
*
|
|
5
|
+
* With nothing selected, the inspector shows NOTHING (owner, 2026-08-07) —
|
|
6
|
+
* no box, no hint, no scene-global settings. A surface earns an empty-state
|
|
7
|
+
* subject only when its empty space IS a real thing: the one shipped case is
|
|
8
|
+
* an open Asset Lab document, where clicking empty space means "the
|
|
9
|
+
* document", and the box shows the document's own identity and sections.
|
|
10
|
+
* Every other surface's honest answer is `null`, which unmounts the box
|
|
11
|
+
* entirely (`inspection/null-subject.ts`'s no-provider contract).
|
|
12
|
+
*
|
|
13
|
+
* Scene-GLOBAL affordances do not ride the empty state: the navmesh
|
|
14
|
+
* bake/clear verbs live in the Debug menu (`components/ApplicationMenus.tsx`),
|
|
15
|
+
* dispatched through the same `navmesh-actions.ts` events as always.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { getActiveAssetEditorContext } from '../asset-editor-context';
|
|
19
|
+
import { documentInspectionSubject } from '../inspection/document-subject';
|
|
20
|
+
import { registerNullSubjectProvider } from '../inspection/null-subject';
|
|
21
|
+
import { activeWorkspaceDocumentId } from '../workspace-document-registry';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* An open asset document's empty state: the DOCUMENT itself. Pick a part
|
|
25
|
+
* inside it and the ordinary selection path composes that part's subject
|
|
26
|
+
* through the document's own adapter; pick nothing and this is what the
|
|
27
|
+
* document says it is — its name, its kind, its provenance, and whatever
|
|
28
|
+
* sections it declared (`components/AssetEditorShell.tsx` publishes the
|
|
29
|
+
* description to `inspection/document-subject.ts`).
|
|
30
|
+
*/
|
|
31
|
+
registerNullSubjectProvider({
|
|
32
|
+
match: (ctx) => ctx.surface === 'asset-lab',
|
|
33
|
+
describe: () => {
|
|
34
|
+
const context = getActiveAssetEditorContext();
|
|
35
|
+
if (!context) return null;
|
|
36
|
+
const published = documentInspectionSubject();
|
|
37
|
+
// Only THIS document's subject. A stale publication from a document that
|
|
38
|
+
// has since been closed is not what the human is looking at — the honest
|
|
39
|
+
// fallback is the document's identity alone.
|
|
40
|
+
return published?.documentId === context.documentId
|
|
41
|
+
? published.subject
|
|
42
|
+
: {
|
|
43
|
+
id: context.documentId,
|
|
44
|
+
title: context.title,
|
|
45
|
+
kindLabel: context.type,
|
|
46
|
+
sections: [],
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* ANY active document's own subject — the general case the Asset Lab provider
|
|
53
|
+
* above is the specialized one of.
|
|
54
|
+
*
|
|
55
|
+
* A document that stands behind no authoring adapter still has things to say
|
|
56
|
+
* about what you picked inside it, and `publishDocumentInspectionSubject` is
|
|
57
|
+
* where it says them. Until this existed the only READER was keyed on the
|
|
58
|
+
* `asset-lab` surface, so the 2D components board published a picked frame's
|
|
59
|
+
* identity into a holder nothing ever consulted and a human clicked frame
|
|
60
|
+
* after frame against an empty panel (runhuman pass 92). The match is
|
|
61
|
+
* document identity and nothing more, the same test
|
|
62
|
+
* `inspection/game-subject.ts` makes.
|
|
63
|
+
*
|
|
64
|
+
* Registered AFTER the Asset Lab provider so first-match-wins keeps that
|
|
65
|
+
* surface's fallback-to-document-identity behavior, which this deliberately
|
|
66
|
+
* does not have: a document that published nothing is describing no subject,
|
|
67
|
+
* and an empty inspector is the honest answer.
|
|
68
|
+
*/
|
|
69
|
+
registerNullSubjectProvider({
|
|
70
|
+
match: () => {
|
|
71
|
+
const published = documentInspectionSubject();
|
|
72
|
+
return published !== null && published.documentId === activeWorkspaceDocumentId();
|
|
73
|
+
},
|
|
74
|
+
describe: () => documentInspectionSubject()?.subject ?? null,
|
|
75
|
+
});
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic Asset Lab persistence. Project code serializes its own native
|
|
3
|
+
* document into ordinary files; this host-side bridge owns transaction
|
|
4
|
+
* ordering, checksum preflight, compensation, and canonical undo/redo.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type {
|
|
8
|
+
ToolObject3DDocumentPersistence,
|
|
9
|
+
ToolObject3DDocumentState,
|
|
10
|
+
} from '@volter/editor-sdk/contributions';
|
|
11
|
+
import type { HistoryService } from '../history/history-service';
|
|
12
|
+
import {
|
|
13
|
+
getProjectFileHistory,
|
|
14
|
+
type HistoryFileBackend,
|
|
15
|
+
type ProjectFileMutation,
|
|
16
|
+
type ProjectFileMutationSession,
|
|
17
|
+
} from '../history/project-file-history';
|
|
18
|
+
import { getProjectResourceHistoryBackend } from '../history/project-root-history-backends';
|
|
19
|
+
import { runWritePipe, type WriteAck, type WriteResolution } from './write-pipe';
|
|
20
|
+
|
|
21
|
+
export interface OpenObject3DDocumentPersistenceOptions {
|
|
22
|
+
readonly binding: ToolObject3DDocumentPersistence;
|
|
23
|
+
readonly document: ToolObject3DDocumentState;
|
|
24
|
+
readonly history: HistoryService;
|
|
25
|
+
readonly backend?: HistoryFileBackend;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async function serializeObject3DDocument(
|
|
29
|
+
binding: ToolObject3DDocumentPersistence,
|
|
30
|
+
document: ToolObject3DDocumentState,
|
|
31
|
+
): Promise<ProjectFileMutation[]> {
|
|
32
|
+
if (binding.resources.length === 0) {
|
|
33
|
+
throw new Error('An Object3D document persistence binding must own at least one resource.');
|
|
34
|
+
}
|
|
35
|
+
const changes: ProjectFileMutation[] = [];
|
|
36
|
+
for (const resource of binding.resources) {
|
|
37
|
+
changes.push({
|
|
38
|
+
path: resource.path,
|
|
39
|
+
data: await resource.serialize(document),
|
|
40
|
+
contentType: resource.contentType ?? 'application/octet-stream',
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return changes;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface Object3DDocumentPersistenceSession {
|
|
47
|
+
/** Commit through the one persistence pipe, and answer for THIS commit.
|
|
48
|
+
* `persisted: false` means the serializers produced the bytes already on
|
|
49
|
+
* disk and nothing moved — a real outcome, not a failure (a failure throws). */
|
|
50
|
+
commit(document: ToolObject3DDocumentState, label?: string): Promise<WriteAck>;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Where an Asset Lab document's bytes go — the binding's own resource paths,
|
|
54
|
+
* which is the finest-grained honest answer this lane has. */
|
|
55
|
+
function destinationOf(binding: ToolObject3DDocumentPersistence): string {
|
|
56
|
+
return binding.resources.map((resource) => resource.path).join(' + ');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Establish the exact serialized bytes represented by a newly mounted native
|
|
61
|
+
* document. Every later commit is checked against that mount-time baseline,
|
|
62
|
+
* so a stale HMR module can never overwrite a newer sidecar on disk.
|
|
63
|
+
*/
|
|
64
|
+
export async function openObject3DDocumentPersistence(
|
|
65
|
+
options: OpenObject3DDocumentPersistenceOptions,
|
|
66
|
+
): Promise<Object3DDocumentPersistenceSession> {
|
|
67
|
+
const { binding, document, history } = options;
|
|
68
|
+
const files = getProjectFileHistory(
|
|
69
|
+
history,
|
|
70
|
+
options.backend ?? getProjectResourceHistoryBackend(),
|
|
71
|
+
'asset-lab-document',
|
|
72
|
+
);
|
|
73
|
+
const session: ProjectFileMutationSession = await files.openMutationSession(
|
|
74
|
+
await serializeObject3DDocument(binding, document),
|
|
75
|
+
);
|
|
76
|
+
return {
|
|
77
|
+
// THE ONE PIPE, this lane's plug: resolve (a binding with resources is a
|
|
78
|
+
// real destination) → write (serialize + the file-mutation transaction) →
|
|
79
|
+
// record (that transaction IS the history entry, so nothing more).
|
|
80
|
+
commit: (nextDocument, requestedLabel) =>
|
|
81
|
+
runWritePipe({
|
|
82
|
+
resolve: (): WriteResolution => ({
|
|
83
|
+
reaches: 'writer',
|
|
84
|
+
// The document's own file is the anchor: no source literal addresses
|
|
85
|
+
// it, and project code serializes the record the editor edited.
|
|
86
|
+
anchorKind: 'data-record',
|
|
87
|
+
destination: destinationOf(binding),
|
|
88
|
+
write: async () => {
|
|
89
|
+
// Check the mount-time bytes BEFORE entering project code. HMR can
|
|
90
|
+
// invalidate a serializer's module-local state; a newer file must
|
|
91
|
+
// still receive the canonical content-conflict refusal, never that
|
|
92
|
+
// incidental serializer error and never an overwrite.
|
|
93
|
+
await session.assertUnchanged();
|
|
94
|
+
// Serialize before entering history: a failing project serializer
|
|
95
|
+
// writes nothing and cannot advance the open-document checksum
|
|
96
|
+
// baseline.
|
|
97
|
+
const changes = await serializeObject3DDocument(binding, nextDocument);
|
|
98
|
+
const label =
|
|
99
|
+
requestedLabel?.trim() || binding.label?.trim() || 'Edit Asset Lab Document';
|
|
100
|
+
return session.mutate(changes, { label });
|
|
101
|
+
},
|
|
102
|
+
}),
|
|
103
|
+
record: () => undefined,
|
|
104
|
+
}),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight registry for live Object3D document sessions.
|
|
3
|
+
*
|
|
4
|
+
* State/control readers only need to find a session that some document has
|
|
5
|
+
* already constructed. Keeping this map beside the implementation made every
|
|
6
|
+
* reader load the implementation's postprocessing, skeleton, outline and
|
|
7
|
+
* diagnostic-rendering graph during a plain Scene boot. The class remains the
|
|
8
|
+
* native session type; this module owns only its live identities.
|
|
9
|
+
*/
|
|
10
|
+
import type { Object3DDocumentSession } from './object3d-document-session';
|
|
11
|
+
|
|
12
|
+
const sessions = new Map<string, Object3DDocumentSession>();
|
|
13
|
+
const announcedStages = new Map<string, number>();
|
|
14
|
+
const preparations = new Map<string, () => Promise<void>>();
|
|
15
|
+
let registryVersion = 0;
|
|
16
|
+
const registryListeners = new Set<() => void>();
|
|
17
|
+
|
|
18
|
+
function notifyRegistry(): void {
|
|
19
|
+
registryVersion++;
|
|
20
|
+
for (const listener of registryListeners) listener();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function registerObject3DDocumentSession(session: Object3DDocumentSession): () => void {
|
|
24
|
+
sessions.set(session.documentId, session);
|
|
25
|
+
notifyRegistry();
|
|
26
|
+
return () => {
|
|
27
|
+
if (sessions.get(session.documentId) !== session) return;
|
|
28
|
+
sessions.delete(session.documentId);
|
|
29
|
+
notifyRegistry();
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function object3DDocumentSession(documentId: string): Object3DDocumentSession | null {
|
|
34
|
+
return sessions.get(documentId) ?? null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Async source-backed documents refresh their graph before a requested view
|
|
38
|
+
* is presented. The callback owns its build and failure semantics. */
|
|
39
|
+
export function registerObject3DDocumentPreparation(
|
|
40
|
+
documentId: string,
|
|
41
|
+
prepare: () => Promise<void>,
|
|
42
|
+
): () => void {
|
|
43
|
+
preparations.set(documentId, prepare);
|
|
44
|
+
return () => {
|
|
45
|
+
if (preparations.get(documentId) === prepare) preparations.delete(documentId);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export async function prepareObject3DDocument(documentId: string): Promise<void> {
|
|
50
|
+
await preparations.get(documentId)?.();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* A DOCUMENT'S STAGE ANNOUNCES ITSELF AS IT RENDERS, before the session it
|
|
55
|
+
* will register exists — the fact an opener's `ready` needs and cannot get
|
|
56
|
+
* from anywhere else.
|
|
57
|
+
*
|
|
58
|
+
* MEASURED 2026-09-19 (phase 1 unit 16): whether a document mounts an Object3D
|
|
59
|
+
* session is a fact of its MOUNT, never of its address. Three `bird`/`humanoid`/
|
|
60
|
+
* `walking-castle` Builder documents open through the `tool` address and mount
|
|
61
|
+
* one (`catalog/project-source/src/contributions/builder-document.tsx:66`)
|
|
62
|
+
* while `data`, `asset-budget` and nine other `workspace.document`
|
|
63
|
+
* contributions at the same address do not; a `source` asset mounts one only
|
|
64
|
+
* when its module is a model builder (`asset-viewers/SourceAssetViewer.tsx:256`)
|
|
65
|
+
* and a `json` asset only when its content is a three.quarks system
|
|
66
|
+
* (`asset-viewers/JsonAssetDocument.tsx:64`). A host that waited by ADDRESS
|
|
67
|
+
* would hang the whole `DOCUMENT_REGISTRATION_TIMEOUT_MS` on every flat
|
|
68
|
+
* document at that address and then refuse a document that was never wrong —
|
|
69
|
+
* which is why the readiness rule the presenter held could not simply be
|
|
70
|
+
* copied kind-side. The announcement is made by the ONE host component every
|
|
71
|
+
* chromed stage goes through, so no lane is recognised by name.
|
|
72
|
+
*
|
|
73
|
+
* Announcing is idempotent and counted: several mounts for one document id
|
|
74
|
+
* (a revision swap keyed on `viewerKey`) overlap, and the last release is the
|
|
75
|
+
* one that clears it.
|
|
76
|
+
*/
|
|
77
|
+
export function announceObject3DDocumentStage(documentId: string): () => void {
|
|
78
|
+
announcedStages.set(documentId, (announcedStages.get(documentId) ?? 0) + 1);
|
|
79
|
+
let released = false;
|
|
80
|
+
return () => {
|
|
81
|
+
if (released) return;
|
|
82
|
+
released = true;
|
|
83
|
+
const open = (announcedStages.get(documentId) ?? 0) - 1;
|
|
84
|
+
if (open > 0) announcedStages.set(documentId, open);
|
|
85
|
+
else announcedStages.delete(documentId);
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Whether a stage for this document has begun mounting. The WAIT that reads
|
|
90
|
+
* it is `document-context-registry.ts`'s, deliberately not here: this module
|
|
91
|
+
* sits on `StageHost.tsx`'s own pinned closure, and a poll helper's import
|
|
92
|
+
* edge grew that pin by one (measured). */
|
|
93
|
+
export function object3DDocumentStageAnnounced(documentId: string): boolean {
|
|
94
|
+
return (announcedStages.get(documentId) ?? 0) > 0;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** Every live CHROMED document session — the ones that own a toolbar, an
|
|
98
|
+
* inspector context and a performance source. This is a presentation registry,
|
|
99
|
+
* not the Edit-static one: whether a surface's CONTENT time is held is asked of
|
|
100
|
+
* `coverage/design-time-surfaces.ts`, which every mount publishes into
|
|
101
|
+
* (chromeless preview cards included). */
|
|
102
|
+
export function allObject3DDocumentSessions(): readonly Object3DDocumentSession[] {
|
|
103
|
+
return [...sessions.values()];
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function subscribeObject3DDocumentSessions(listener: () => void): () => void {
|
|
107
|
+
registryListeners.add(listener);
|
|
108
|
+
return () => registryListeners.delete(listener);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function object3DDocumentSessionsVersion(): number {
|
|
112
|
+
return registryVersion;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function __resetObject3DDocumentSessionsForTest(): void {
|
|
116
|
+
sessions.clear();
|
|
117
|
+
preparations.clear();
|
|
118
|
+
announcedStages.clear();
|
|
119
|
+
notifyRegistry();
|
|
120
|
+
}
|