@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,370 @@
|
|
|
1
|
+
import type { ToolDocumentEntry } from '@volter/editor-sdk/contributions';
|
|
2
|
+
import { space, themeVars } from '@volter/editor-sdk/widgets';
|
|
3
|
+
/**
|
|
4
|
+
* Project-global tool host (W4; re-homed by workspace-shell W3) — renders one
|
|
5
|
+
* project tool's component wrapped in an error boundary: tools are PROJECT
|
|
6
|
+
* code running in the editor (§4's trust note), and a crashing tool must
|
|
7
|
+
* never take the editor down with it. A render crash swaps the content for a
|
|
8
|
+
* teaching message naming the source file; every other tool keeps working. An
|
|
9
|
+
* HMR reload of the tool remounts the host fresh (its hosts key it on the
|
|
10
|
+
* load version — see `tool-documents.tsx` and `tool-loader.ts`'s utility
|
|
11
|
+
* registrations), which also clears a tripped boundary — fix the file, save,
|
|
12
|
+
* retry for free.
|
|
13
|
+
*
|
|
14
|
+
* Chrome stays editor-styled (§3.4): the host provides the scrollable
|
|
15
|
+
* editor-toned container. Contributions use ordinary React for composition
|
|
16
|
+
* and the public editor widgets for shared interactive controls.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import {
|
|
20
|
+
Component,
|
|
21
|
+
createElement as createEditorElement,
|
|
22
|
+
type ErrorInfo,
|
|
23
|
+
lazy,
|
|
24
|
+
type ReactNode,
|
|
25
|
+
Suspense,
|
|
26
|
+
useEffect,
|
|
27
|
+
useRef,
|
|
28
|
+
useState,
|
|
29
|
+
useSyncExternalStore,
|
|
30
|
+
} from 'react';
|
|
31
|
+
import { createRoot as createEditorRoot } from 'react-dom/client';
|
|
32
|
+
import { accountVersion, contributionAccount, subscribeAccount } from '../account';
|
|
33
|
+
import {
|
|
34
|
+
markContributedDocumentMounted,
|
|
35
|
+
publishDocumentContext,
|
|
36
|
+
} from '../document-context-registry';
|
|
37
|
+
import { notify } from '../editor-notifications';
|
|
38
|
+
import { toolGameplaySessions } from '../gameplay-sessions';
|
|
39
|
+
import { beginPageWork } from '../play-boot-phase';
|
|
40
|
+
import {
|
|
41
|
+
subscribeToolContributionPlay,
|
|
42
|
+
toolContributionPlay,
|
|
43
|
+
toolContributionPlayKey,
|
|
44
|
+
} from '../tool-contribution-play';
|
|
45
|
+
import { getToolContributionClient, type SurfaceToolContribution } from '../tool-loader';
|
|
46
|
+
|
|
47
|
+
// The analytics timeline is the play-session shell's — recordings, the
|
|
48
|
+
// play-log ledger, the server transport behind them — and only the
|
|
49
|
+
// `workspace.analytics` point mounts it. A lazy door keeps those 97 files
|
|
50
|
+
// out of every host that mounts contributions without play.
|
|
51
|
+
const GameplaySessionTimeline = lazy(() =>
|
|
52
|
+
import('./GameplaySessionTimeline').then((m) => ({ default: m.GameplaySessionTimeline })),
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
import { toolContributionSurfaces } from './ToolContributionSurfaces';
|
|
56
|
+
|
|
57
|
+
interface ToolErrorBoundaryProps {
|
|
58
|
+
/** Project-relative source file, shown in the crash message. */
|
|
59
|
+
file: string;
|
|
60
|
+
children: ReactNode;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
interface ToolErrorBoundaryState {
|
|
64
|
+
error: Error | null;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Shared by the dock host below and `InspectorToolSection.tsx` (W3) — one
|
|
68
|
+
* crash-containment story for every project-tool mount point. */
|
|
69
|
+
export class ToolErrorBoundary extends Component<ToolErrorBoundaryProps, ToolErrorBoundaryState> {
|
|
70
|
+
override state: ToolErrorBoundaryState = { error: null };
|
|
71
|
+
|
|
72
|
+
static getDerivedStateFromError(error: Error): ToolErrorBoundaryState {
|
|
73
|
+
return { error };
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
override componentDidCatch(error: Error, info: ErrorInfo): void {
|
|
77
|
+
// Loud in the editor console too (same channel the tool-loader's
|
|
78
|
+
// teaching errors use), with React's component stack for context.
|
|
79
|
+
// biome-ignore lint/suspicious/noConsole: deliberate, greppable — a crashed project tool must be diagnosable from the console (§6.5 "errors teach"), mirroring tool-loader.ts
|
|
80
|
+
console.error(
|
|
81
|
+
`[tools] ${this.props.file} crashed while rendering:`,
|
|
82
|
+
error,
|
|
83
|
+
info.componentStack,
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
override render(): ReactNode {
|
|
88
|
+
if (this.state.error) {
|
|
89
|
+
return (
|
|
90
|
+
<div
|
|
91
|
+
style={{
|
|
92
|
+
padding: space[6],
|
|
93
|
+
fontSize: 'var(--vgai-font-md)',
|
|
94
|
+
color: themeVars.semantic.danger,
|
|
95
|
+
maxWidth: 640,
|
|
96
|
+
}}
|
|
97
|
+
>
|
|
98
|
+
<div style={{ fontWeight: 600, marginBottom: space[2] }}>
|
|
99
|
+
Tool crashed: <code>{this.props.file}</code>
|
|
100
|
+
</div>
|
|
101
|
+
<div style={{ whiteSpace: 'pre-wrap' }}>{String(this.state.error)}</div>
|
|
102
|
+
<div style={{ color: themeVars.content.muted, marginTop: space[3] }}>
|
|
103
|
+
The editor is fine — fix the tool file and save; it reloads in place.
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
return this.props.children;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* ONE React FOR A CONTRIBUTION, AND IT IS THE EDITOR'S.
|
|
114
|
+
*
|
|
115
|
+
* This root is ISOLATED (its own tree, its own `onUncaughtError`) so a
|
|
116
|
+
* crashing tool cannot take the editor's chrome down — but isolation is about
|
|
117
|
+
* the TREE, never about the instance: the root is created with the editor's
|
|
118
|
+
* own `react-dom/client`, the same React the contribution's modules import.
|
|
119
|
+
*
|
|
120
|
+
* That agreement is the whole contract, and it is easy to break from the other
|
|
121
|
+
* side. Under the packaged runtime a project's `src/contributions/**` module has its
|
|
122
|
+
* `react` resolved to the SHELL's own chunk (`vite-plugin-shared-react.ts` —
|
|
123
|
+
* the doorway that made inspector contributions render at all), while this
|
|
124
|
+
* mount used to create its root from the PROJECT's `react-dom/client`
|
|
125
|
+
* (`/__vgai-react-world-runtime`). Hooks from one React inside a tree
|
|
126
|
+
* reconciled by another is "Invalid hook call", and it killed EVERY workspace
|
|
127
|
+
* document and utility on a packaged editor while the same contributions
|
|
128
|
+
* rendered fine in a checkout — measured on `node dist-server/packaged.mjs`:
|
|
129
|
+
* `[tools] src/contributions/sprite-lab.document.tsx crashed while rendering: Minified
|
|
130
|
+
* React error #321`, thrown at the document's FIRST hook, with a one-frame
|
|
131
|
+
* component stack (this root) rather than the editor's.
|
|
132
|
+
*
|
|
133
|
+
* The checkout path was always this way (`dev.ts` serves both halves through
|
|
134
|
+
* one Vite), so this is convergence, not a new design: packaged now mounts a
|
|
135
|
+
* contribution exactly the way dev and `InspectorToolSection` already did.
|
|
136
|
+
* Editor surfaces are therefore handed over directly — no bridge root, because
|
|
137
|
+
* there is no longer a graph boundary for one to cross.
|
|
138
|
+
*/
|
|
139
|
+
function ProjectToolMount({
|
|
140
|
+
contribution,
|
|
141
|
+
Component: override,
|
|
142
|
+
documentId,
|
|
143
|
+
active,
|
|
144
|
+
document: documentEntry,
|
|
145
|
+
accountRevision,
|
|
146
|
+
playKey,
|
|
147
|
+
}: {
|
|
148
|
+
contribution: SurfaceToolContribution;
|
|
149
|
+
/** Mount THIS component of the contribution instead of its default — the
|
|
150
|
+
* document's `Toolbar` in the host's header strip, with the same props. */
|
|
151
|
+
Component?: React.ComponentType<Record<string, unknown>> | undefined;
|
|
152
|
+
documentId?: string;
|
|
153
|
+
active?: boolean;
|
|
154
|
+
/** The adapter-table entry this mount edits (`kind-documents.tsx`). */
|
|
155
|
+
document?: ToolDocumentEntry | undefined;
|
|
156
|
+
accountRevision: number;
|
|
157
|
+
/** Identity of the bound play instance. In the deps below for the same
|
|
158
|
+
* reason `accountRevision` and `active` are: the props this effect renders
|
|
159
|
+
* are captured when it runs, so a change the effect does not observe is a
|
|
160
|
+
* contribution left describing a game that is no longer the one showing. */
|
|
161
|
+
playKey: string;
|
|
162
|
+
}) {
|
|
163
|
+
const host = useRef<HTMLDivElement | null>(null);
|
|
164
|
+
const [error, setError] = useState<Error | null>(null);
|
|
165
|
+
const rootRef = useRef<ReturnType<typeof createEditorRoot> | null>(null);
|
|
166
|
+
const endWork = useRef<(() => void) | null>(null);
|
|
167
|
+
const contributionFile = useRef(contribution.file);
|
|
168
|
+
contributionFile.current = contribution.file;
|
|
169
|
+
const mountedDocumentId = useRef(documentId);
|
|
170
|
+
mountedDocumentId.current = documentId;
|
|
171
|
+
|
|
172
|
+
useEffect(() => {
|
|
173
|
+
const element = host.current;
|
|
174
|
+
if (!element) return;
|
|
175
|
+
let disposed = false;
|
|
176
|
+
setError(null);
|
|
177
|
+
const fail = (reason: unknown, info?: { componentStack?: string | undefined }) => {
|
|
178
|
+
if (disposed) return;
|
|
179
|
+
const caught = reason instanceof Error ? reason : new Error(String(reason));
|
|
180
|
+
// biome-ignore lint/suspicious/noConsole: project tool failures remain loud while the isolated root protects editor chrome
|
|
181
|
+
console.error(
|
|
182
|
+
`[tools] ${contributionFile.current} crashed while rendering:`,
|
|
183
|
+
caught,
|
|
184
|
+
info?.componentStack,
|
|
185
|
+
);
|
|
186
|
+
setError(caught);
|
|
187
|
+
// A CRASH IS ALSO AN ANSWER. React tears the whole inner root down on an
|
|
188
|
+
// uncaught render error, so the mount signal below never fires — and an
|
|
189
|
+
// opener's `ready`, which waits for that signal to learn whether this
|
|
190
|
+
// document mounted a stage, would sit out the entire registration window
|
|
191
|
+
// before proceeding. MEASURED on a `full` scaffold: presenting the
|
|
192
|
+
// template's deliberately-throwing `data.document` stub took 10.018s
|
|
193
|
+
// against 0.045s for a healthy one. A contribution that crashed has
|
|
194
|
+
// decided what it is — it has no stage — and this is the host's own
|
|
195
|
+
// path, outside the root that just died.
|
|
196
|
+
if (mountedDocumentId.current) markContributedDocumentMounted(mountedDocumentId.current);
|
|
197
|
+
};
|
|
198
|
+
// Prop updates (account polling, tab activation, play binding) reconcile
|
|
199
|
+
// the existing tree. Recreating its root discards tool state and GPU
|
|
200
|
+
// contexts. Only this host's lifetime owns the root and its container.
|
|
201
|
+
// Cleanup stays deferred: React cannot unmount a nested root during the
|
|
202
|
+
// parent root's commit. A fresh container also makes StrictMode safe.
|
|
203
|
+
const container = element.appendChild(document.createElement('div'));
|
|
204
|
+
container.style.display = 'contents';
|
|
205
|
+
const root = createEditorRoot(container, { onUncaughtError: fail });
|
|
206
|
+
rootRef.current = root;
|
|
207
|
+
return () => {
|
|
208
|
+
disposed = true;
|
|
209
|
+
rootRef.current = null;
|
|
210
|
+
endWork.current?.();
|
|
211
|
+
endWork.current = null;
|
|
212
|
+
queueMicrotask(() => {
|
|
213
|
+
root.unmount();
|
|
214
|
+
container.remove();
|
|
215
|
+
});
|
|
216
|
+
};
|
|
217
|
+
}, []);
|
|
218
|
+
|
|
219
|
+
useEffect(() => {
|
|
220
|
+
const root = rootRef.current;
|
|
221
|
+
if (!root) return;
|
|
222
|
+
setError(null);
|
|
223
|
+
const shared: Record<string, unknown> = {
|
|
224
|
+
contributionId: contribution.id,
|
|
225
|
+
client: getToolContributionClient(),
|
|
226
|
+
surfaces: toolContributionSurfaces,
|
|
227
|
+
account: contributionAccount(),
|
|
228
|
+
// A contribution's notice is a REPORT (Blender's info line): the same
|
|
229
|
+
// title from the same contribution replaces its card rather than
|
|
230
|
+
// stacking, and info/warning cards fade — nine refusals from one
|
|
231
|
+
// session left nine cards over the Conversations panel (2026-09-06).
|
|
232
|
+
// An error stays until dismissed, as every error card does.
|
|
233
|
+
work: (label: string | null) => {
|
|
234
|
+
endWork.current?.();
|
|
235
|
+
endWork.current =
|
|
236
|
+
label === null ? null : beginPageWork(`building ${label.replace(/^building /, '')}`);
|
|
237
|
+
},
|
|
238
|
+
notify: (notice: { tone: 'info' | 'warning' | 'error'; title: string; detail?: string }) =>
|
|
239
|
+
notify({
|
|
240
|
+
...notice,
|
|
241
|
+
id: `contribution:${contribution.id}:${notice.title}`,
|
|
242
|
+
...(notice.tone === 'warning' ? { fades: true } : {}),
|
|
243
|
+
}),
|
|
244
|
+
...(contribution.point === 'workspace.analytics'
|
|
245
|
+
? { gameplaySessions: toolGameplaySessions }
|
|
246
|
+
: { play: toolContributionPlay() }),
|
|
247
|
+
...(documentId
|
|
248
|
+
? {
|
|
249
|
+
documentId,
|
|
250
|
+
publishContext: (context: unknown) => publishDocumentContext(documentId, context),
|
|
251
|
+
}
|
|
252
|
+
: {}),
|
|
253
|
+
...(active !== undefined ? { active } : {}),
|
|
254
|
+
...(documentEntry ? { document: documentEntry } : {}),
|
|
255
|
+
};
|
|
256
|
+
// Utilities AND documents may present without a callable (a pure-view
|
|
257
|
+
// Data Book); the generation points always carry one.
|
|
258
|
+
// The union collapses to the widest props shape; each component's own
|
|
259
|
+
// signature narrows what it actually reads.
|
|
260
|
+
const Component =
|
|
261
|
+
override ??
|
|
262
|
+
(contribution.Component as unknown as React.ComponentType<Record<string, unknown>>);
|
|
263
|
+
const element = createEditorElement(Component, {
|
|
264
|
+
...shared,
|
|
265
|
+
...(contribution.tool ? { tool: contribution.tool } : {}),
|
|
266
|
+
});
|
|
267
|
+
// THE MOUNT SIGNAL RIDES INSIDE THE CONTRIBUTION'S OWN ROOT, never outside
|
|
268
|
+
// it: `root.render` is SCHEDULED, so an effect in the host's own tree fires
|
|
269
|
+
// while this root has not rendered a thing. Wrapped here, the signal is a
|
|
270
|
+
// parent of the contribution in ITS root, and React runs every child effect
|
|
271
|
+
// first — including the stage announcement a document mounts through
|
|
272
|
+
// `ToolContributionSurfaces`. That ordering is what makes "no announcement"
|
|
273
|
+
// mean "this document has no stage" for an opener's `ready`.
|
|
274
|
+
root.render(
|
|
275
|
+
documentId ? createEditorElement(ContributionMountSignal, { documentId }, element) : element,
|
|
276
|
+
);
|
|
277
|
+
}, [accountRevision, active, contribution, override, documentId, documentEntry, playKey]);
|
|
278
|
+
|
|
279
|
+
// THE HOST DIV STAYS MOUNTED THROUGH A CRASH. Swapping it for the message
|
|
280
|
+
// hands this root's container to React's own removal while the inner root
|
|
281
|
+
// still owns the nodes inside it, and the unmount then throws
|
|
282
|
+
// `NotFoundError: … removeChild … not a child of this node` — a second,
|
|
283
|
+
// louder error about the teardown, on top of the one the tool actually hit.
|
|
284
|
+
return (
|
|
285
|
+
<>
|
|
286
|
+
{error ? (
|
|
287
|
+
<div style={{ padding: space[6], color: themeVars.semantic.danger }}>
|
|
288
|
+
Tool crashed: <code>{contribution.file}</code>
|
|
289
|
+
<div style={{ whiteSpace: 'pre-wrap', marginTop: space[2] }}>{String(error)}</div>
|
|
290
|
+
</div>
|
|
291
|
+
) : null}
|
|
292
|
+
<div ref={host} style={{ minHeight: 0, width: '100%' }} />
|
|
293
|
+
</>
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/** See the render site above: this is a PARENT of the contribution inside the
|
|
298
|
+
* contribution's own React root, so its effect runs after every child's. */
|
|
299
|
+
function ContributionMountSignal({
|
|
300
|
+
documentId,
|
|
301
|
+
children,
|
|
302
|
+
}: {
|
|
303
|
+
readonly documentId: string;
|
|
304
|
+
// Supplied as `createElement`'s third argument at the render site, which the
|
|
305
|
+
// props-object overload cannot see.
|
|
306
|
+
readonly children?: ReactNode;
|
|
307
|
+
}) {
|
|
308
|
+
useEffect(() => markContributedDocumentMounted(documentId), [documentId]);
|
|
309
|
+
return <>{children}</>;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/** One project-global tool's content host: editor-styled scroll container +
|
|
313
|
+
* boundary. Analytics receives its universal session rail here; all other
|
|
314
|
+
* contribution content remains entirely project-owned. */
|
|
315
|
+
export function ToolHost({
|
|
316
|
+
contribution,
|
|
317
|
+
Component,
|
|
318
|
+
documentId,
|
|
319
|
+
active,
|
|
320
|
+
document: documentEntry,
|
|
321
|
+
}: {
|
|
322
|
+
contribution: SurfaceToolContribution;
|
|
323
|
+
/** Mount this component of the contribution instead of its default (the
|
|
324
|
+
* document's `Toolbar` — see `tool-documents.tsx`). */
|
|
325
|
+
Component?: React.ComponentType<Record<string, unknown>> | undefined;
|
|
326
|
+
documentId?: string;
|
|
327
|
+
active?: boolean;
|
|
328
|
+
/** The adapter-table entry a kind document edits (`kind-documents.tsx`). */
|
|
329
|
+
document?: ToolDocumentEntry | undefined;
|
|
330
|
+
}) {
|
|
331
|
+
const accountRevision = useSyncExternalStore(subscribeAccount, accountVersion, accountVersion);
|
|
332
|
+
const playKey = useSyncExternalStore(
|
|
333
|
+
subscribeToolContributionPlay,
|
|
334
|
+
toolContributionPlayKey,
|
|
335
|
+
toolContributionPlayKey,
|
|
336
|
+
);
|
|
337
|
+
const mountKey = contribution.point === 'workspace.analytics' ? 'gameplay-sessions' : playKey;
|
|
338
|
+
return (
|
|
339
|
+
<div
|
|
340
|
+
data-testid={`tool-panel-${contribution.id}`}
|
|
341
|
+
style={{
|
|
342
|
+
flex: 1,
|
|
343
|
+
minHeight: 0,
|
|
344
|
+
overflow: contribution.point === 'workspace.analytics' ? 'visible' : 'auto',
|
|
345
|
+
color: themeVars.content.primary,
|
|
346
|
+
display: 'flex',
|
|
347
|
+
flexDirection: 'column',
|
|
348
|
+
}}
|
|
349
|
+
>
|
|
350
|
+
{contribution.point === 'workspace.analytics' ? (
|
|
351
|
+
<Suspense fallback={null}>
|
|
352
|
+
<GameplaySessionTimeline />
|
|
353
|
+
</Suspense>
|
|
354
|
+
) : null}
|
|
355
|
+
<ToolErrorBoundary file={contribution.file}>
|
|
356
|
+
<div style={{ flex: 1, minHeight: 0, overflow: 'auto' }}>
|
|
357
|
+
<ProjectToolMount
|
|
358
|
+
contribution={contribution}
|
|
359
|
+
{...(Component ? { Component } : {})}
|
|
360
|
+
accountRevision={accountRevision}
|
|
361
|
+
playKey={mountKey}
|
|
362
|
+
{...(documentId ? { documentId } : {})}
|
|
363
|
+
{...(active !== undefined ? { active } : {})}
|
|
364
|
+
{...(documentEntry ? { document: documentEntry } : {})}
|
|
365
|
+
/>
|
|
366
|
+
</div>
|
|
367
|
+
</ToolErrorBoundary>
|
|
368
|
+
</div>
|
|
369
|
+
);
|
|
370
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ToolObject3DPreviewProps } from '@volter/editor-sdk/contributions';
|
|
2
|
+
import { Object3DPreview } from './asset-viewers/Object3DPreview';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Editor-owned preview chrome for project-authored native Three.js sources.
|
|
6
|
+
* Object3DPreview owns renderer, camera, controls, animation, and
|
|
7
|
+
* teardown; the project owns only the raw build function and its resources.
|
|
8
|
+
*/
|
|
9
|
+
export function ToolObject3DPreview({
|
|
10
|
+
build,
|
|
11
|
+
displayName = 'Object3D preview',
|
|
12
|
+
height = 360,
|
|
13
|
+
background,
|
|
14
|
+
showSkeleton = false,
|
|
15
|
+
cameraDirection,
|
|
16
|
+
showGrid,
|
|
17
|
+
useDefaultLighting,
|
|
18
|
+
exposure,
|
|
19
|
+
setupPreview,
|
|
20
|
+
active = true,
|
|
21
|
+
}: ToolObject3DPreviewProps) {
|
|
22
|
+
const customPresentation = setupPreview !== undefined;
|
|
23
|
+
return (
|
|
24
|
+
<div style={{ width: '100%', height, minHeight: 240 }}>
|
|
25
|
+
<Object3DPreview
|
|
26
|
+
sourceFactory={build}
|
|
27
|
+
displayName={displayName}
|
|
28
|
+
active={active}
|
|
29
|
+
showSkeleton={showSkeleton}
|
|
30
|
+
background={background}
|
|
31
|
+
cameraDirection={cameraDirection}
|
|
32
|
+
showGrid={showGrid ?? !customPresentation}
|
|
33
|
+
useDefaultLighting={useDefaultLighting ?? !customPresentation}
|
|
34
|
+
exposure={exposure}
|
|
35
|
+
setupPreview={setupPreview}
|
|
36
|
+
/>
|
|
37
|
+
</div>
|
|
38
|
+
);
|
|
39
|
+
}
|