@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,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace STATUS-CONTRIBUTION registry (W0 — the shell-contract slice of
|
|
3
|
+
* §9 W0). "Status is status, not a command" (§1.5): save/dirty/failure
|
|
4
|
+
* state, problem counts, connection/play state, build progress, and concise
|
|
5
|
+
* selection information belong in a narrow status bar — not mixed into the
|
|
6
|
+
* global command header and not spread across viewport overlays.
|
|
7
|
+
*
|
|
8
|
+
* Consumed since W4 by `components/StatusBar.tsx` (rendered under the
|
|
9
|
+
* bottom dock/drawer strip); the core contributions live in
|
|
10
|
+
* `components/status-contributions.tsx` (+ `build-documents.tsx`'s
|
|
11
|
+
* `build-progress`). Migration map.
|
|
12
|
+
*
|
|
13
|
+
* Idioms mirror `inspector-section-registry.ts`: module-scope state,
|
|
14
|
+
* `useSyncExternalStore`-shaped subscribe + monotonic version,
|
|
15
|
+
* `__resetForTest`, pure-logic headless tests (`Content` is never rendered
|
|
16
|
+
* here). Ids key persisted/status-bar slots, so duplicates throw (same rule
|
|
17
|
+
* as `workspace-utility-registry.ts`).
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import type { ComponentType } from 'react';
|
|
21
|
+
|
|
22
|
+
/** The §7 status contribution contract: one compact status-bar item. */
|
|
23
|
+
export interface WorkspaceStatusContribution {
|
|
24
|
+
/** Stable id — keys the status-bar slot (`data-testid`). */
|
|
25
|
+
readonly id: string;
|
|
26
|
+
/**
|
|
27
|
+
* WHAT A PERSON CALLS IT. Required, because the status bar this draws into
|
|
28
|
+
* is the workbench's and `IStatusbarEntry.name` is required there: it is the
|
|
29
|
+
* label in the bar's own right-click menu (`Hide <item>`) and the entry's
|
|
30
|
+
* aria label. Before it existed every contribution passed its raw id, so the
|
|
31
|
+
* menu read `tool:blender.status`, `console-counts`, `play-state` beside VS
|
|
32
|
+
* Code's own `Remote Host` and `Problems` (walk 4, 2026-09-20).
|
|
33
|
+
*
|
|
34
|
+
* Title Case, and a NOUN — it names the thing, not what it is doing right
|
|
35
|
+
* now: the CONTENT changes, this does not.
|
|
36
|
+
*/
|
|
37
|
+
readonly name: string;
|
|
38
|
+
/** Which end of the bar (§4.1: session state left, selection info right).
|
|
39
|
+
* Default `'left'`. */
|
|
40
|
+
readonly align?: 'left' | 'right';
|
|
41
|
+
/** Slot order within its side (ascending; ties keep registration order).
|
|
42
|
+
* Default `0`. */
|
|
43
|
+
readonly order?: number;
|
|
44
|
+
/** React content host — compact, passive, non-command (§1.5). Never
|
|
45
|
+
* rendered by the registry itself. */
|
|
46
|
+
readonly Content: ComponentType;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// --- Module-scope state (mirrors inspector-section-registry.ts) -----------
|
|
50
|
+
|
|
51
|
+
interface StoredContribution {
|
|
52
|
+
readonly contribution: WorkspaceStatusContribution;
|
|
53
|
+
readonly seq: number;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
let _contributions: StoredContribution[] = [];
|
|
57
|
+
let _seq = 0;
|
|
58
|
+
let _version = 0;
|
|
59
|
+
const _listeners = new Set<() => void>();
|
|
60
|
+
|
|
61
|
+
function notifyChanged(): void {
|
|
62
|
+
_version++;
|
|
63
|
+
for (const fn of _listeners) fn();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Subscribe to (un)registrations. Returns an unsubscribe function. */
|
|
67
|
+
export function subscribeWorkspaceStatus(fn: () => void): () => void {
|
|
68
|
+
_listeners.add(fn);
|
|
69
|
+
return () => {
|
|
70
|
+
_listeners.delete(fn);
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Monotonic change counter — the `getSnapshot` for `useSyncExternalStore`. */
|
|
75
|
+
export function workspaceStatusRegistryVersion(): number {
|
|
76
|
+
return _version;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Register a status contribution. Returns an unregister function.
|
|
81
|
+
* Throws on a duplicate id (ids key status-bar slots — same uniqueness rule
|
|
82
|
+
* as `registerWorkspaceUtility`).
|
|
83
|
+
*/
|
|
84
|
+
export function registerWorkspaceStatus(contribution: WorkspaceStatusContribution): () => void {
|
|
85
|
+
if (_contributions.some((c) => c.contribution.id === contribution.id)) {
|
|
86
|
+
throw new Error(
|
|
87
|
+
`registerWorkspaceStatus: id "${contribution.id}" is already registered — ` +
|
|
88
|
+
'status ids key status-bar slots, so they must be unique; unregister the ' +
|
|
89
|
+
'previous contribution first.',
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
const stored: StoredContribution = { contribution, seq: _seq++ };
|
|
93
|
+
_contributions = [..._contributions, stored];
|
|
94
|
+
notifyChanged();
|
|
95
|
+
return () => {
|
|
96
|
+
if (!_contributions.includes(stored)) return;
|
|
97
|
+
_contributions = _contributions.filter((c) => c !== stored);
|
|
98
|
+
notifyChanged();
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Registered contributions for one side of the bar, in (order,
|
|
103
|
+
* registration-sequence) order; with no argument, both sides (left first). */
|
|
104
|
+
export function workspaceStatusContributions(
|
|
105
|
+
align?: 'left' | 'right',
|
|
106
|
+
): WorkspaceStatusContribution[] {
|
|
107
|
+
const side = (want: 'left' | 'right') =>
|
|
108
|
+
[..._contributions]
|
|
109
|
+
.filter((c) => (c.contribution.align ?? 'left') === want)
|
|
110
|
+
.sort((a, b) => (a.contribution.order ?? 0) - (b.contribution.order ?? 0) || a.seq - b.seq)
|
|
111
|
+
.map((c) => c.contribution);
|
|
112
|
+
if (align) return side(align);
|
|
113
|
+
return [...side('left'), ...side('right')];
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Test-only reset (mirrors `__resetInspectorSectionRegistryForTest`). */
|
|
117
|
+
export function __resetWorkspaceStatusRegistryForTest(): void {
|
|
118
|
+
_contributions = [];
|
|
119
|
+
_seq = 0;
|
|
120
|
+
notifyChanged();
|
|
121
|
+
}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace STYLE BUNDLES (Glass-UI spike, Unit 3, "New named style using
|
|
3
|
+
* existing axes" row).
|
|
4
|
+
*
|
|
5
|
+
* Named one-shot presets over PALETTE + MATERIAL + ICONS + REGIONS. The axes
|
|
6
|
+
* stay independently selectable; choosing a named style intentionally
|
|
7
|
+
* restores its canonical complete appearance. In particular, Classic must
|
|
8
|
+
* restore the original Graphite contract rather than inheriting a Glass
|
|
9
|
+
* palette.
|
|
10
|
+
*
|
|
11
|
+
* REGIONS is the anatomy axis (`workspace-regions.ts`): which chrome regions
|
|
12
|
+
* the documents show — the workspace tab strip, the document header, the tool
|
|
13
|
+
* shelf, and how the inspector lays its sections out. A bundle's regions are
|
|
14
|
+
* DEFAULTS beneath each workspace's own declaration, so Look stays minimal
|
|
15
|
+
* under every bundle. This is what lets the same host wear Blender's shape
|
|
16
|
+
* (tabs, header, shelf, a tabbed Properties column), Maya's (a header, no
|
|
17
|
+
* shelf, a stacked column) and Substance's (charcoal, no header or shelf)
|
|
18
|
+
* without a line of per-tool code: each is one row here plus one palette
|
|
19
|
+
* document under `palettes/`.
|
|
20
|
+
*
|
|
21
|
+
* Bundles are ONE-SHOT PRESETS, not a fifth stored axis: applying a bundle
|
|
22
|
+
* just calls the four existing axis setters, and this module keeps no store
|
|
23
|
+
* or persistence of its own. "Which bundle is active" is always DERIVED
|
|
24
|
+
* from their current values (`activeWorkspaceStyleId`) and can never
|
|
25
|
+
* disagree with them — e.g. after a user independently changes just the
|
|
26
|
+
* material, the derived id correctly falls back to `null` (a "custom" mix)
|
|
27
|
+
* rather than going stale.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import type { StyleContribution } from '@volter/editor-sdk/looks';
|
|
31
|
+
import type { EditorMaterialId, EditorPalette } from '@volter/editor-sdk/widgets';
|
|
32
|
+
import {
|
|
33
|
+
DEFAULT_ICON_SET_ID,
|
|
34
|
+
registerContributedIconSet,
|
|
35
|
+
registerContributedMaterial,
|
|
36
|
+
} from '@volter/editor-sdk/widgets';
|
|
37
|
+
import { activeProduct, subscribeActiveProduct } from './active-product';
|
|
38
|
+
import { registerContributedPalette } from './theme-library';
|
|
39
|
+
import {
|
|
40
|
+
editorIconSetSnapshot,
|
|
41
|
+
editorMaterialSnapshot,
|
|
42
|
+
editorPaletteSnapshot,
|
|
43
|
+
setDefaultEditorAppearance,
|
|
44
|
+
setEditorIconSetPreference,
|
|
45
|
+
setEditorMaterialPreference,
|
|
46
|
+
setEditorPalettePreference,
|
|
47
|
+
} from './theme-preference';
|
|
48
|
+
import {
|
|
49
|
+
type ChromeRegions,
|
|
50
|
+
presetChromeRegions,
|
|
51
|
+
regionsKey,
|
|
52
|
+
setPresetRegions,
|
|
53
|
+
} from './workspace-regions';
|
|
54
|
+
|
|
55
|
+
export interface WorkspaceStyleBundle {
|
|
56
|
+
readonly id: string;
|
|
57
|
+
readonly title: string;
|
|
58
|
+
readonly paletteId: EditorPalette['id'];
|
|
59
|
+
readonly materialId: EditorMaterialId;
|
|
60
|
+
/** `icon-set-registry.ts`; `default` is the editor's own glyphs. */
|
|
61
|
+
readonly iconSetId: string;
|
|
62
|
+
/** Region defaults beneath each workspace's own (`workspace-regions.ts`).
|
|
63
|
+
* Empty means "whatever the workspace says", which is what Classic and
|
|
64
|
+
* Glass mean. */
|
|
65
|
+
readonly regions: ChromeRegions;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Frozen built-in list — the switch surface (command palette / View menu)
|
|
69
|
+
* enumerates this directly. */
|
|
70
|
+
const BUILT_IN_STYLES: readonly WorkspaceStyleBundle[] = Object.freeze([
|
|
71
|
+
{
|
|
72
|
+
id: 'classic',
|
|
73
|
+
title: 'Classic',
|
|
74
|
+
paletteId: 'graphite-dark',
|
|
75
|
+
materialId: 'classic',
|
|
76
|
+
iconSetId: DEFAULT_ICON_SET_ID,
|
|
77
|
+
regions: {},
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: 'glass',
|
|
81
|
+
title: 'Glass',
|
|
82
|
+
paletteId: 'graphite-neutral',
|
|
83
|
+
materialId: 'glass',
|
|
84
|
+
iconSetId: DEFAULT_ICON_SET_ID,
|
|
85
|
+
regions: {},
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
id: 'maya',
|
|
89
|
+
title: 'Maya',
|
|
90
|
+
paletteId: 'maya',
|
|
91
|
+
materialId: 'classic',
|
|
92
|
+
iconSetId: DEFAULT_ICON_SET_ID,
|
|
93
|
+
regions: { header: 'shown', shelf: 'hidden', inspector: 'column' },
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
id: 'substance',
|
|
97
|
+
title: 'Substance',
|
|
98
|
+
paletteId: 'substance',
|
|
99
|
+
materialId: 'classic',
|
|
100
|
+
iconSetId: DEFAULT_ICON_SET_ID,
|
|
101
|
+
regions: { header: 'hidden', shelf: 'hidden', inspector: 'column' },
|
|
102
|
+
},
|
|
103
|
+
]);
|
|
104
|
+
|
|
105
|
+
interface ContributedStyle {
|
|
106
|
+
readonly bundle: WorkspaceStyleBundle;
|
|
107
|
+
readonly unregisterPalette: (() => void) | null;
|
|
108
|
+
readonly unregisterMaterial: (() => void) | null;
|
|
109
|
+
readonly unregisterIconSet: (() => void) | null;
|
|
110
|
+
}
|
|
111
|
+
const contributedStyles = new Map<string, ContributedStyle>();
|
|
112
|
+
let registryVersion = 0;
|
|
113
|
+
const registryListeners = new Set<() => void>();
|
|
114
|
+
|
|
115
|
+
/** Built-ins first, then contributions in registration order — the switch
|
|
116
|
+
* surfaces (View menu, palette) enumerate this. */
|
|
117
|
+
export function workspaceStyles(): readonly WorkspaceStyleBundle[] {
|
|
118
|
+
return [...BUILT_IN_STYLES, ...[...contributedStyles.values()].map((entry) => entry.bundle)];
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export function workspaceStylesVersion(): number {
|
|
122
|
+
return registryVersion;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function subscribeWorkspaceStyles(listener: () => void): () => void {
|
|
126
|
+
registryListeners.add(listener);
|
|
127
|
+
return () => registryListeners.delete(listener);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Register a package's style bundle (`workspace.style` contribution), with
|
|
132
|
+
* the palette document and the material it carries registered first — the
|
|
133
|
+
* bundle names their ids, and an id must exist before the bundle can be
|
|
134
|
+
* applied. Returns the unregister. A duplicate id throws.
|
|
135
|
+
*/
|
|
136
|
+
export function registerContributedStyle(contribution: StyleContribution): () => void {
|
|
137
|
+
if (
|
|
138
|
+
BUILT_IN_STYLES.some((entry) => entry.id === contribution.id) ||
|
|
139
|
+
contributedStyles.has(contribution.id)
|
|
140
|
+
)
|
|
141
|
+
throw new Error(`registerContributedStyle: style "${contribution.id}" is already registered.`);
|
|
142
|
+
const unregisterPalette =
|
|
143
|
+
contribution.palette === undefined ? null : registerContributedPalette(contribution.palette);
|
|
144
|
+
const unregisterMaterial =
|
|
145
|
+
contribution.material === undefined ? null : registerContributedMaterial(contribution.material);
|
|
146
|
+
const unregisterIconSet =
|
|
147
|
+
contribution.icons === undefined ? null : registerContributedIconSet(contribution.icons);
|
|
148
|
+
const entry: ContributedStyle = {
|
|
149
|
+
bundle: {
|
|
150
|
+
id: contribution.id,
|
|
151
|
+
title: contribution.title,
|
|
152
|
+
paletteId: contribution.paletteId,
|
|
153
|
+
materialId: contribution.materialId,
|
|
154
|
+
iconSetId: contribution.iconSetId ?? contribution.icons?.id ?? DEFAULT_ICON_SET_ID,
|
|
155
|
+
regions: contribution.regions ?? {},
|
|
156
|
+
},
|
|
157
|
+
unregisterPalette,
|
|
158
|
+
unregisterMaterial,
|
|
159
|
+
unregisterIconSet,
|
|
160
|
+
};
|
|
161
|
+
contributedStyles.set(contribution.id, entry);
|
|
162
|
+
registryVersion++;
|
|
163
|
+
for (const listener of registryListeners) listener();
|
|
164
|
+
// The product's look is usually one of these (the Blender look ships inside
|
|
165
|
+
// `@volter/editor-blender`), so the id it named only becomes resolvable here.
|
|
166
|
+
publishProductLook();
|
|
167
|
+
return () => {
|
|
168
|
+
if (contributedStyles.get(contribution.id) !== entry) return;
|
|
169
|
+
contributedStyles.delete(contribution.id);
|
|
170
|
+
entry.unregisterPalette?.();
|
|
171
|
+
entry.unregisterMaterial?.();
|
|
172
|
+
entry.unregisterIconSet?.();
|
|
173
|
+
registryVersion++;
|
|
174
|
+
for (const listener of registryListeners) listener();
|
|
175
|
+
publishProductLook();
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* THE PRODUCT'S LOOK, RESOLVED TO ITS AXES — the one thing this module does for
|
|
181
|
+
* a composition rather than for a gesture.
|
|
182
|
+
*
|
|
183
|
+
* A product names a style bundle id (`frame/product.ts`'s `look`); this is the
|
|
184
|
+
* module that knows what a bundle IS, so it resolves the id and pushes the
|
|
185
|
+
* palette/material/icons behind `theme-preference.ts`'s defaults. It runs on
|
|
186
|
+
* every registry change because a product's own look usually arrives as one of
|
|
187
|
+
* its packages' `workspace.style` contributions, which register a moment into
|
|
188
|
+
* the session — the Blender look is the worked case.
|
|
189
|
+
*
|
|
190
|
+
* It applies nothing and persists nothing: a bundle a person CHOOSES goes
|
|
191
|
+
* through {@link applyWorkspaceStyle}, which writes the preference. This is the
|
|
192
|
+
* floor under that.
|
|
193
|
+
*/
|
|
194
|
+
function publishProductLook(): void {
|
|
195
|
+
const declared = activeProduct()?.look;
|
|
196
|
+
if (declared === undefined) {
|
|
197
|
+
setDefaultEditorAppearance(null);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const bundle = workspaceStyles().find((entry) => entry.id === declared);
|
|
201
|
+
if (!bundle) return;
|
|
202
|
+
setDefaultEditorAppearance({
|
|
203
|
+
palette: bundle.paletteId,
|
|
204
|
+
material: bundle.materialId,
|
|
205
|
+
icons: bundle.iconSetId,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
subscribeActiveProduct(publishProductLook);
|
|
210
|
+
publishProductLook();
|
|
211
|
+
|
|
212
|
+
/** Apply all four axes for the named bundle. Unknown ids are a silent no-op —
|
|
213
|
+
* callers (menu/command palette) only ever offer ids from {@link workspaceStyles}. */
|
|
214
|
+
export function applyWorkspaceStyle(id: string): void {
|
|
215
|
+
const bundle = workspaceStyles().find((entry) => entry.id === id);
|
|
216
|
+
if (!bundle) return;
|
|
217
|
+
setEditorPalettePreference(bundle.paletteId);
|
|
218
|
+
setEditorMaterialPreference(bundle.materialId);
|
|
219
|
+
setEditorIconSetPreference(bundle.iconSetId);
|
|
220
|
+
setPresetRegions(bundle.regions);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/** The bundle id whose palette, material, icon set and regions all match the
|
|
224
|
+
* current axis values, or `null` if the current combination isn't any
|
|
225
|
+
* registered bundle (a "custom" mix — always derived, never a separate
|
|
226
|
+
* stored state). */
|
|
227
|
+
export function activeWorkspaceStyleId(): string | null {
|
|
228
|
+
const paletteId = editorPaletteSnapshot();
|
|
229
|
+
const materialId = editorMaterialSnapshot();
|
|
230
|
+
const regions = regionsKey(presetChromeRegions());
|
|
231
|
+
const bundle = workspaceStyles().find(
|
|
232
|
+
(entry) =>
|
|
233
|
+
entry.paletteId === paletteId &&
|
|
234
|
+
entry.materialId === materialId &&
|
|
235
|
+
entry.iconSetId === editorIconSetSnapshot() &&
|
|
236
|
+
regionsKey(entry.regions) === regions,
|
|
237
|
+
);
|
|
238
|
+
return bundle?.id ?? null;
|
|
239
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/** Semantic commands and failure auto-open policy for workspace utilities. */
|
|
2
|
+
|
|
3
|
+
import { getMountFailureReports, subscribeToMountFailures } from './authoring/mount-failure-report';
|
|
4
|
+
import { editorConsole } from './editor-console';
|
|
5
|
+
import type { HistoryService } from './history/history-service';
|
|
6
|
+
import { showWorkspaceUtility, toggleWorkspaceUtility } from './workspace-host-commands';
|
|
7
|
+
import { activeChromeRegions } from './workspace-regions';
|
|
8
|
+
|
|
9
|
+
export const CONSOLE_UTILITY_ID = 'console';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Only actionable failures open a utility automatically.
|
|
13
|
+
*
|
|
14
|
+
* A world that did not mount is the most actionable failure the editor has —
|
|
15
|
+
* the project is showing something that is not the game — and revealing the
|
|
16
|
+
* Console (where every mount route already wrote its full line) is what keeps
|
|
17
|
+
* it LOUD without a second error surface. This replaced a top-of-shell red
|
|
18
|
+
* banner: the reveal, not the banner, is the answer to "the Console is not
|
|
19
|
+
* the default bottom tab". Fires on the empty→failing EDGE only, so a second
|
|
20
|
+
* failing world in the same attempt does not yank the region back.
|
|
21
|
+
*
|
|
22
|
+
* Source persistence failures arrive through the project history that guarded
|
|
23
|
+
* and rolled back the write. Watch its failure EDGE directly: this keeps the
|
|
24
|
+
* Console reveal format-neutral and avoids a second adapter-specific event.
|
|
25
|
+
*
|
|
26
|
+
* A workspace whose regions HIDE the drawer (Blender's modeling workspace has
|
|
27
|
+
* no strip below the viewport) is never yanked open by this policy: the
|
|
28
|
+
* status bar's error count stays the loud surface there, and a person's own
|
|
29
|
+
* gesture (a failure item, View → Console) still reveals it.
|
|
30
|
+
*/
|
|
31
|
+
export function installUtilityAutoOpen(history: HistoryService): () => void {
|
|
32
|
+
let hadMountFailure = getMountFailureReports().length > 0;
|
|
33
|
+
const stopMountFailures = subscribeToMountFailures(() => {
|
|
34
|
+
const failing = getMountFailureReports().length > 0;
|
|
35
|
+
if (failing && !hadMountFailure && activeChromeRegions().drawer !== 'hidden')
|
|
36
|
+
showWorkspaceUtility(CONSOLE_UTILITY_ID);
|
|
37
|
+
hadMountFailure = failing;
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
let hadSourceFailure = history.getSnapshot().lastError !== null;
|
|
41
|
+
const stopHistory = history.subscribe(() => {
|
|
42
|
+
const error = history.getSnapshot().lastError;
|
|
43
|
+
const failing = error !== null;
|
|
44
|
+
if (failing && !hadSourceFailure) {
|
|
45
|
+
// The one place every rolled-back write is named for the DOOR: the
|
|
46
|
+
// screen narrates it (a toast, the document's own message), and
|
|
47
|
+
// `vgai console` must say the same — measured silent before this line.
|
|
48
|
+
editorConsole.error(`Source write rolled back: ${error.message} (${error.code})`, 'history');
|
|
49
|
+
if (activeChromeRegions().drawer !== 'hidden') showWorkspaceUtility(CONSOLE_UTILITY_ID);
|
|
50
|
+
}
|
|
51
|
+
hadSourceFailure = failing;
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
return () => {
|
|
55
|
+
stopMountFailures();
|
|
56
|
+
stopHistory();
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Toggle the Console utility — the semantic command every menu/hotkey/
|
|
61
|
+
* control-API caller invokes directly. It used to be reached through a
|
|
62
|
+
* `window` CustomEvent (`editor:toggle-console`) installed by
|
|
63
|
+
* `installUtilityEvents`; that indirection was a shell-era relay with no
|
|
64
|
+
* remaining second implementation, so it was deleted. */
|
|
65
|
+
export function toggleConsoleUtility(): void {
|
|
66
|
+
toggleWorkspaceUtility(CONSOLE_UTILITY_ID);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** REVEAL the Console — what a failure item clicks through to. Distinct from
|
|
70
|
+
* {@link toggleConsoleUtility} on purpose: a user acting on a reported error
|
|
71
|
+
* must never have that click HIDE the panel holding the error's trace. */
|
|
72
|
+
export function showConsoleUtility(): void {
|
|
73
|
+
showWorkspaceUtility(CONSOLE_UTILITY_ID);
|
|
74
|
+
}
|