@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,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The project's own IMAGE assets, for the inspector's `asset` slots.
|
|
3
|
+
*
|
|
4
|
+
* This is the existing asset-workflow seam and nothing new: the same
|
|
5
|
+
* `listAssets` walk over `public/` that the Asset Browser's Content gallery
|
|
6
|
+
* runs (`collectProjectContentAssets`), narrowed with the same facet
|
|
7
|
+
* classifier (`projectContentAssetFacet`). A texture slot must offer the same
|
|
8
|
+
* files the Asset Browser shows, so it reads them from the same place rather
|
|
9
|
+
* than growing a second listing.
|
|
10
|
+
*
|
|
11
|
+
* ONE scan is shared by every slot on screen — a `MeshStandardMaterial`
|
|
12
|
+
* publishes six of them, and six independent walks of `public/` per selection
|
|
13
|
+
* is the kind of quiet cost a panel never recovers from. The cached scan
|
|
14
|
+
* expires so an asset imported mid-session shows up on the next selection
|
|
15
|
+
* without a reload; the Asset Browser is still the surface that IMPORTS.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { useEffect, useState } from 'react';
|
|
19
|
+
import {
|
|
20
|
+
collectProjectContentAssets,
|
|
21
|
+
projectContentAssetFacet,
|
|
22
|
+
} from '../asset-workflow/project-content';
|
|
23
|
+
import { listAssets } from '../editor-api';
|
|
24
|
+
|
|
25
|
+
/** How long a scan is reused. Long enough to cover one selection's worth of
|
|
26
|
+
* slots mounting together, short enough that a just-imported texture appears
|
|
27
|
+
* without a reload. */
|
|
28
|
+
const CACHE_MS = 10_000;
|
|
29
|
+
|
|
30
|
+
export interface ProjectImageAssets {
|
|
31
|
+
/** Public-root-relative paths, sorted. */
|
|
32
|
+
readonly paths: readonly string[];
|
|
33
|
+
/** Directories whose listing FAILED — an empty picker over a failed scan
|
|
34
|
+
* would tell the author their project has no textures. */
|
|
35
|
+
readonly failures: readonly string[];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const EMPTY: ProjectImageAssets = { paths: [], failures: [] };
|
|
39
|
+
|
|
40
|
+
let cached: { at: number; scan: Promise<ProjectImageAssets> } | null = null;
|
|
41
|
+
|
|
42
|
+
async function scanProjectImageAssets(): Promise<ProjectImageAssets> {
|
|
43
|
+
// SHIPPED IMAGES ONLY. A material slot names a file the GAME loads at
|
|
44
|
+
// runtime, and reference material is never exported — offering a moodboard
|
|
45
|
+
// plate here would author a texture path that 404s in the built game.
|
|
46
|
+
const listed = await collectProjectContentAssets(listAssets, ['public']);
|
|
47
|
+
return {
|
|
48
|
+
paths: listed.assets
|
|
49
|
+
.filter((asset) => projectContentAssetFacet(asset.entry.name) === 'image')
|
|
50
|
+
.map((asset) => asset.path)
|
|
51
|
+
.sort((a, b) => a.localeCompare(b)),
|
|
52
|
+
failures: listed.failedListings,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** The shared scan, refreshed when the cached one has expired. */
|
|
57
|
+
export function projectImageAssets(): Promise<ProjectImageAssets> {
|
|
58
|
+
const now = Date.now();
|
|
59
|
+
if (!cached || now - cached.at > CACHE_MS) {
|
|
60
|
+
cached = {
|
|
61
|
+
at: now,
|
|
62
|
+
scan: scanProjectImageAssets().catch((error: unknown) => {
|
|
63
|
+
cached = null;
|
|
64
|
+
return { paths: [], failures: [error instanceof Error ? error.message : String(error)] };
|
|
65
|
+
}),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return cached.scan;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Read the shared scan into a component. `enabled: false` skips it entirely,
|
|
72
|
+
* so a panel with no asset row never walks `public/`. */
|
|
73
|
+
export function useProjectImageAssets(enabled: boolean): ProjectImageAssets {
|
|
74
|
+
const [assets, setAssets] = useState<ProjectImageAssets>(EMPTY);
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
if (!enabled) return;
|
|
77
|
+
let live = true;
|
|
78
|
+
void projectImageAssets().then((next) => {
|
|
79
|
+
if (live) setAssets(next);
|
|
80
|
+
});
|
|
81
|
+
return () => {
|
|
82
|
+
live = false;
|
|
83
|
+
};
|
|
84
|
+
}, [enabled]);
|
|
85
|
+
return assets;
|
|
86
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/* THE VIEWPORT HEADER'S TRANSCRIBED CONTROLS — the shading group
|
|
2
|
+
* (`ViewportShadingMenu.tsx`) and the overlays toggle
|
|
3
|
+
* (`ViewportOverlaysMenu.tsx`). One sheet because they are one row of chrome
|
|
4
|
+
* and share the icon rung below.
|
|
5
|
+
*
|
|
6
|
+
* THE SHADING CONTROL AS BLENDER DRAWS IT — a joined group of mode cells and
|
|
7
|
+
* a chevron, in place of a word dropdown. These rules only ever apply where a
|
|
8
|
+
* caller passes `segments`; the stage's floating shading trigger passes none
|
|
9
|
+
* and keeps its labelled button.
|
|
10
|
+
*
|
|
11
|
+
* The cells JOIN: square inner corners and a shared border, so the group is
|
|
12
|
+
* one widget with one cell lit rather than four boxes with daylight between
|
|
13
|
+
* them. Transcribed from the sibling group in this same header
|
|
14
|
+
* (`@vgai/blender`'s select-mode cells), whose own comment records why. */
|
|
15
|
+
.vgai-viewport-shading-segments {
|
|
16
|
+
display: inline-flex;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* EACH CELL ARRIVES WRAPPED IN A TOOLTIP ANCHOR, so the group's children are
|
|
20
|
+
* anchors and the buttons sit one level down — a `>` rule aimed at the button
|
|
21
|
+
* matched nothing and the group rendered as four separate rounded boxes with
|
|
22
|
+
* daylight between them. Both shapes are addressed here so a cell that loses
|
|
23
|
+
* its tooltip still joins. */
|
|
24
|
+
.vgai-viewport-shading-segments > * {
|
|
25
|
+
display: inline-flex;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* The DIVIDER between two cells is the left one's own right border: every
|
|
29
|
+
* cell but the first drops its left border rather than collapsing onto its
|
|
30
|
+
* neighbour with a negative margin, so the group carries exactly Blender's
|
|
31
|
+
* one-pixel separator and this sheet spends no pixel literal to get it. */
|
|
32
|
+
.vgai-viewport-shading-segments > :not(:first-child) .vgai-btn,
|
|
33
|
+
.vgai-viewport-shading-segments > .vgai-btn:not(:first-child) {
|
|
34
|
+
border-top-left-radius: 0;
|
|
35
|
+
border-bottom-left-radius: 0;
|
|
36
|
+
border-left-width: 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.vgai-viewport-shading-segments > :not(:last-child) .vgai-btn,
|
|
40
|
+
.vgai-viewport-shading-segments > .vgai-btn:not(:last-child) {
|
|
41
|
+
border-top-right-radius: 0;
|
|
42
|
+
border-bottom-right-radius: 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* The pressed cell rides ABOVE its neighbours so the shared border it owns is
|
|
46
|
+
* its own, not the unpressed cell's drawn over it. */
|
|
47
|
+
.vgai-viewport-shading-segments .vgai-btn[aria-pressed="true"] {
|
|
48
|
+
position: relative;
|
|
49
|
+
z-index: 1;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Sized off the ICON scale like every `EditorIcon` beside it, so a style that
|
|
53
|
+
* moves the chrome's glyph size moves these three with it. */
|
|
54
|
+
.vgai-viewport-shading-glyph {
|
|
55
|
+
width: var(--vgai-icon-md);
|
|
56
|
+
height: var(--vgai-icon-md);
|
|
57
|
+
overflow: visible;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* Blender keeps its lighting rows INSIDE the shading popover, under the modes.
|
|
61
|
+
* The grid matches the preview popover these rows came from. */
|
|
62
|
+
.vgai-viewport-shading-options {
|
|
63
|
+
display: grid;
|
|
64
|
+
gap: var(--vgai-space-2);
|
|
65
|
+
padding: var(--vgai-space-2) var(--vgai-space-3);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.vgai-viewport-shading-options > label {
|
|
69
|
+
display: grid;
|
|
70
|
+
grid-template-columns: 68px minmax(0, 1fr) auto;
|
|
71
|
+
align-items: center;
|
|
72
|
+
gap: var(--vgai-space-2);
|
|
73
|
+
color: var(--vgai-text-2);
|
|
74
|
+
font-size: var(--vgai-font-xs);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.vgai-viewport-shading-options select {
|
|
78
|
+
grid-column: 2 / -1;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.vgai-viewport-shading-options input[type="range"] {
|
|
82
|
+
width: 120px;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* The overlays mark sits on the same rung as the shading cells' glyphs. */
|
|
86
|
+
.vgai-viewport-overlays-glyph {
|
|
87
|
+
width: var(--vgai-icon-md);
|
|
88
|
+
height: var(--vgai-icon-md);
|
|
89
|
+
overflow: visible;
|
|
90
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The 3D board's empty-viewport vocabulary, reused by every other design
|
|
3
|
+
* surface that would otherwise sit blank while it builds. Scene's root-aware
|
|
4
|
+
* loading/failure/empty states live in `SurfaceStateOverlay`; this compact
|
|
5
|
+
* label remains for object/board construction whose subject is already known.
|
|
6
|
+
*
|
|
7
|
+
* Idle / building / ready is viewport STATE, not a new overlay channel —
|
|
8
|
+
* the board already owns this shape (`ThreeBoardDocument`: idle "Open this
|
|
9
|
+
* tab…", building "Settling N stories…"). Scene's first design
|
|
10
|
+
* mount and `Object3DDocumentViewport`'s first construct are the same wait
|
|
11
|
+
* with different subjects. Copy names the subject being prepared; it does not
|
|
12
|
+
* claim a narrower phase (such as physics settling) while indexing, mounting,
|
|
13
|
+
* bounds/layout, or renderer setup is actually in flight.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { themeVars } from '@volter/editor-sdk/widgets';
|
|
17
|
+
import type { ReactNode } from 'react';
|
|
18
|
+
|
|
19
|
+
/** Fixed construct tail after the board scene exists — viewport-bind, not settle. */
|
|
20
|
+
export const OBJECT3D_SURFACE_BUILDING = 'Preparing the viewport…';
|
|
21
|
+
|
|
22
|
+
/** Whole 3D-board construction, from component index through mounted previews. */
|
|
23
|
+
export const THREE_BOARD_BUILDING = 'Preparing 3D component previews…';
|
|
24
|
+
|
|
25
|
+
/** Name the candidate count when we already know it. Never a progress fraction. */
|
|
26
|
+
export function threeBoardBuildingCopy(storyCount: number): string {
|
|
27
|
+
if (!Number.isFinite(storyCount) || storyCount < 1) return THREE_BOARD_BUILDING;
|
|
28
|
+
return storyCount === 1
|
|
29
|
+
? 'Preparing 1 component preview…'
|
|
30
|
+
: `Preparing ${storyCount} component previews…`;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function ViewportSurfaceStatus({
|
|
34
|
+
testId,
|
|
35
|
+
children,
|
|
36
|
+
}: {
|
|
37
|
+
readonly testId: string;
|
|
38
|
+
readonly children: ReactNode;
|
|
39
|
+
}) {
|
|
40
|
+
return (
|
|
41
|
+
<div
|
|
42
|
+
data-testid={testId}
|
|
43
|
+
style={{
|
|
44
|
+
position: 'absolute',
|
|
45
|
+
inset: 0,
|
|
46
|
+
padding: 16,
|
|
47
|
+
fontSize: 12,
|
|
48
|
+
color: themeVars.content.muted,
|
|
49
|
+
pointerEvents: 'none',
|
|
50
|
+
}}
|
|
51
|
+
>
|
|
52
|
+
{children}
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace history bridge (W3) — the session `HistoryService` handed to
|
|
3
|
+
* workspace-document content modules (`build-documents.tsx`) WITHOUT them
|
|
4
|
+
* importing `EditorContext`.
|
|
5
|
+
*
|
|
6
|
+
* Why not `useOptionalHistoryService()`: `EditorContext`'s import graph
|
|
7
|
+
* pulls the whole editor boot (initial-scene → engine renderer stack), which
|
|
8
|
+
* document-content modules must not drag into their own graph, and the
|
|
9
|
+
* headless jsdom tests that mount document content rely on the light graph.
|
|
10
|
+
* `DefaultEditorLayout` (which already lives on the heavy side) sets the
|
|
11
|
+
* live service here; content reads it at commit time. Null (e.g. in tests,
|
|
12
|
+
* or before the layout mounts) degrades to the raw POST/save write paths —
|
|
13
|
+
* the same degrade the old prop-less mounts had.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import type { HistoryService } from '../history/history-service';
|
|
17
|
+
|
|
18
|
+
let _history: HistoryService | null = null;
|
|
19
|
+
|
|
20
|
+
/** Set (or clear) the live session history service. Returns a cleanup that
|
|
21
|
+
* clears it only if it is still this service. */
|
|
22
|
+
export function setWorkspaceHistoryService(history: HistoryService | null): () => void {
|
|
23
|
+
_history = history;
|
|
24
|
+
return () => {
|
|
25
|
+
if (_history === history) _history = null;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** The live session history service, or `null`. */
|
|
30
|
+
export function workspaceHistoryService(): HistoryService | null {
|
|
31
|
+
return _history;
|
|
32
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import type { EditorRegionName, WorkspacePanelGlyphName } from '@volter/editor-sdk/widgets';
|
|
2
|
+
import { Button } from '@volter/editor-sdk/widgets';
|
|
3
|
+
import { Component, type ComponentType, type ErrorInfo, type ReactNode } from 'react';
|
|
4
|
+
import { editorConsole } from '../editor-console';
|
|
5
|
+
import { WORKSPACE_STATIC_PANELS, type WorkspaceStaticPanelKind } from '../workspace-static-panels';
|
|
6
|
+
import { AssetBrowser, type AssetBrowserServices } from './AssetBrowser';
|
|
7
|
+
import { ChromeSlot } from './ChromeSlot';
|
|
8
|
+
import { GameHierarchy } from './GameHierarchy';
|
|
9
|
+
import { Inspector } from './Inspector';
|
|
10
|
+
|
|
11
|
+
export interface WorkspaceStaticPanelDependencies {
|
|
12
|
+
readonly assets?: AssetBrowserServices;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface WorkspaceStaticPanelContentProps {
|
|
16
|
+
readonly dependencies?: WorkspaceStaticPanelDependencies | undefined;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface WorkspaceStaticPanelRegistration {
|
|
20
|
+
readonly kind: WorkspaceStaticPanelKind;
|
|
21
|
+
readonly title: string;
|
|
22
|
+
readonly hotkeyScope: (typeof WORKSPACE_STATIC_PANELS)[number]['hotkeyScope'];
|
|
23
|
+
readonly selectableText: boolean;
|
|
24
|
+
/** The EDITOR-AREA fill this panel claims (`workspace-static-panels.ts`);
|
|
25
|
+
* absent means the one fill every dock group shares. */
|
|
26
|
+
readonly region?: EditorRegionName;
|
|
27
|
+
/** The glyph this panel shows in Blender's editor-type well
|
|
28
|
+
* (`workspace-static-panels.ts`; the well is `groupTabs: 'well'`). */
|
|
29
|
+
readonly icon?: WorkspacePanelGlyphName;
|
|
30
|
+
readonly Content: ComponentType<WorkspaceStaticPanelContentProps>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const CONTENT_BY_KIND: Readonly<
|
|
34
|
+
Record<WorkspaceStaticPanelKind, ComponentType<WorkspaceStaticPanelContentProps>>
|
|
35
|
+
> = {
|
|
36
|
+
// The CONVERSATIONS panel's place is the host's; its surface is not. The
|
|
37
|
+
// agent-harness conversation UI is `@vgai/agents`, filling the `panel:agent`
|
|
38
|
+
// chrome slot (`chrome-slot-registry.ts`); a build without that package
|
|
39
|
+
// shows an empty panel rather than an imported one.
|
|
40
|
+
agent: () => <ChromeSlot slot="panel:agent" />,
|
|
41
|
+
// The PROJECT WORK panel's place is the host's; its surface is not. A
|
|
42
|
+
// `ztrack` board of the worktree's open work, with "work on this with an
|
|
43
|
+
// agent" beside it, is `@vgai/agents` — the same reasoning as the two rows
|
|
44
|
+
// around it, and the same door. Its `services` prop came with it: nothing in
|
|
45
|
+
// the product ever supplied one (only a design-system story did), so the
|
|
46
|
+
// panel's own defaults are what ran.
|
|
47
|
+
'project-work': () => <ChromeSlot slot="panel:project-work" />,
|
|
48
|
+
hierarchy: GameHierarchy,
|
|
49
|
+
assets: ({ dependencies }) => <AssetBrowser services={dependencies?.assets} />,
|
|
50
|
+
// The LIBRARY panel's place is the host's; its surface is not. Browsing an
|
|
51
|
+
// external provider's catalog is `@vgai/asset-library`, filling the
|
|
52
|
+
// `panel:asset-library` chrome slot (`chrome-slot-registry.ts`) exactly as
|
|
53
|
+
// the `agent` row above does; a build without that package — the
|
|
54
|
+
// open-source core+Blender cut — shows an empty panel rather than an
|
|
55
|
+
// imported managed-service client.
|
|
56
|
+
'asset-library': () => <ChromeSlot slot="panel:asset-library" />,
|
|
57
|
+
inspector: Inspector,
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* A crash inside ONE static panel stays inside that panel.
|
|
62
|
+
*
|
|
63
|
+
* Without this, a panel's render throw climbed to `EditorRuntimeBoundary`
|
|
64
|
+
* (AppRoot), which replaces the WHOLE editor with the startup-error screen:
|
|
65
|
+
* the dock, the viewport and the game container all unmount, so play refuses
|
|
66
|
+
* ("the game container is not mounted"), and React's recovery re-creates the
|
|
67
|
+
* crashed subtree from scratch — a panel that crashes deterministically then
|
|
68
|
+
* crashes again on every recovery. The blind modeling bench measured the
|
|
69
|
+
* whole chain from a single Agents-panel throw (a duplicate `session-1` row
|
|
70
|
+
* key from the harness UI, then "Maximum update depth exceeded"): 53
|
|
71
|
+
* recoveries, the main thread pegged, the WebSocket dropped with 1006, the
|
|
72
|
+
* tab's heartbeat silent for 30 s, the tab declared departed, and every
|
|
73
|
+
* `vgai screenshot` refused with "No tab has been present" until the agent
|
|
74
|
+
* ran `vgai edit` again — in four of five sessions.
|
|
75
|
+
*
|
|
76
|
+
* The boundary reports the throw ONCE to the editor console (so `vgai
|
|
77
|
+
* console` carries it and its component stack), renders a small notice in the
|
|
78
|
+
* panel's own space, and remounts the panel ONLY when the user clicks Retry —
|
|
79
|
+
* never automatically, because an automatic remount of a deterministic crash
|
|
80
|
+
* is the loop above.
|
|
81
|
+
*/
|
|
82
|
+
class StaticPanelCrashBoundary extends Component<
|
|
83
|
+
{ readonly title: string; readonly children: ReactNode },
|
|
84
|
+
{ readonly error: Error | null }
|
|
85
|
+
> {
|
|
86
|
+
override state: { readonly error: Error | null } = { error: null };
|
|
87
|
+
|
|
88
|
+
static getDerivedStateFromError(error: Error): { readonly error: Error } {
|
|
89
|
+
return { error };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
override componentDidCatch(error: Error, info: ErrorInfo): void {
|
|
93
|
+
editorConsole.error(
|
|
94
|
+
`The ${this.props.title} panel crashed and was taken down alone (the rest of the editor ` +
|
|
95
|
+
`stays up; Retry in the panel remounts it): ${error.message}\n${info.componentStack ?? ''}`,
|
|
96
|
+
'editor',
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
override render(): ReactNode {
|
|
101
|
+
if (!this.state.error) return this.props.children;
|
|
102
|
+
return (
|
|
103
|
+
<div
|
|
104
|
+
role="alert"
|
|
105
|
+
data-testid="static-panel-crashed"
|
|
106
|
+
style={{ padding: 12, display: 'grid', gap: 8, alignContent: 'start' }}
|
|
107
|
+
>
|
|
108
|
+
<strong>{this.props.title} crashed.</strong>
|
|
109
|
+
<span style={{ opacity: 0.8, wordBreak: 'break-word' }}>{this.state.error.message}</span>
|
|
110
|
+
<div>
|
|
111
|
+
<Button
|
|
112
|
+
type="button"
|
|
113
|
+
variant="outline"
|
|
114
|
+
size="compact"
|
|
115
|
+
onClick={() => this.setState({ error: null })}
|
|
116
|
+
>
|
|
117
|
+
Retry
|
|
118
|
+
</Button>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** Canonical realization of the static-panel inventory. Every host — the
|
|
126
|
+
* frame, a bounded production host, a story fixture — consumes this same
|
|
127
|
+
* registry; there is no second switch or story-only component map to drift. */
|
|
128
|
+
export const WORKSPACE_STATIC_PANEL_REGISTRY: readonly WorkspaceStaticPanelRegistration[] =
|
|
129
|
+
WORKSPACE_STATIC_PANELS.map((panel) => {
|
|
130
|
+
const Inner = CONTENT_BY_KIND[panel.kind];
|
|
131
|
+
const Content: ComponentType<WorkspaceStaticPanelContentProps> = (props) => (
|
|
132
|
+
<StaticPanelCrashBoundary title={panel.title}>
|
|
133
|
+
<Inner {...props} />
|
|
134
|
+
</StaticPanelCrashBoundary>
|
|
135
|
+
);
|
|
136
|
+
Content.displayName = `StaticPanel(${panel.kind})`;
|
|
137
|
+
return { ...panel, Content };
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
export function workspaceStaticPanelRegistration(
|
|
141
|
+
kind: WorkspaceStaticPanelKind,
|
|
142
|
+
): WorkspaceStaticPanelRegistration {
|
|
143
|
+
return WORKSPACE_STATIC_PANEL_REGISTRY.find((panel) => panel.kind === kind)!;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export function WorkspaceStaticPanelSurface({
|
|
147
|
+
kind,
|
|
148
|
+
dependencies,
|
|
149
|
+
}: WorkspaceStaticPanelContentProps & { readonly kind: WorkspaceStaticPanelKind }) {
|
|
150
|
+
const { Content } = workspaceStaticPanelRegistration(kind);
|
|
151
|
+
return <Content dependencies={dependencies} />;
|
|
152
|
+
}
|