@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,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BoundaryAuthoringAdapter — A1's read-only {@link AuthoringAdapter} for a
|
|
3
|
+
* manifest-declared world that is NOT currently mounted (edit mode only runs
|
|
4
|
+
* the manifest's sole Three world live — every other declared world is disclosed,
|
|
5
|
+
* not simulated; see `edit-mode-authoring.ts`'s doc comment for the seam this
|
|
6
|
+
* plugs into, and B1 for the "mount it live" upgrade path).
|
|
7
|
+
*
|
|
8
|
+
* A single node, one per world: label = the declared entry/scene document (or
|
|
9
|
+
* the world id when it has none), with error/read-only state carried as
|
|
10
|
+
* metadata rather than punctuation embedded in the name. `kind` = the
|
|
11
|
+
* manifest world kind, inspector exposes kind/adapter/entry-or-scene
|
|
12
|
+
* path/zOrder/pausable (+ `reason` when unresolvable) as READ-ONLY
|
|
13
|
+
* properties. No children, no live object, no structural/transform ops — this
|
|
14
|
+
* adapter's entire job is "say the world exists and why it isn't live yet".
|
|
15
|
+
*
|
|
16
|
+
* Resolvability is a CALLER decision (`edit-mode-authoring.ts` computes the
|
|
17
|
+
* reason from the manifest world entry) — this adapter just renders whatever
|
|
18
|
+
* reason string it's given; it never itself decides a world is broken.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import type {
|
|
22
|
+
AuthoringAdapter,
|
|
23
|
+
AuthoringCapabilities,
|
|
24
|
+
AuthoringProvenance,
|
|
25
|
+
EditorNode,
|
|
26
|
+
HierarchyProvider,
|
|
27
|
+
InspectorProvider,
|
|
28
|
+
PickProvider,
|
|
29
|
+
PropertyDescriptor,
|
|
30
|
+
SelectionProvider,
|
|
31
|
+
} from '@volter/editor-project/adapter';
|
|
32
|
+
import type { EditorShellStore } from '../editor-shell-store';
|
|
33
|
+
|
|
34
|
+
/** The display-relevant slice of a manifest world entry — deliberately loose
|
|
35
|
+
* (plain strings, not the engine's validated `AdapterRoot['kind']` union) so
|
|
36
|
+
* an UNRESOLVABLE world (unknown kind, e.g.) can still be described. */
|
|
37
|
+
export interface BoundaryRootInfo {
|
|
38
|
+
readonly id: string;
|
|
39
|
+
readonly kind: string;
|
|
40
|
+
/** Display string for the manifest's `adapter` field (e.g. `'default'`,
|
|
41
|
+
* `'module:<path>'`) — omitted when not meaningfully derivable. */
|
|
42
|
+
readonly adapter?: string | undefined;
|
|
43
|
+
/** Whichever of `scene`/`entry` the world declares (display-only — this
|
|
44
|
+
* adapter never reads the file). */
|
|
45
|
+
readonly entryOrScenePath?: string | undefined;
|
|
46
|
+
readonly zOrder: number;
|
|
47
|
+
readonly pausable: boolean;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const NO_CAPABILITIES: AuthoringCapabilities = {
|
|
51
|
+
transform: false,
|
|
52
|
+
inspectorFields: false,
|
|
53
|
+
persist: false,
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export class BoundaryAuthoringAdapter implements AuthoringAdapter {
|
|
57
|
+
readonly capabilities: AuthoringCapabilities = NO_CAPABILITIES;
|
|
58
|
+
|
|
59
|
+
readonly provenance: AuthoringProvenance = {
|
|
60
|
+
source: 'boundary',
|
|
61
|
+
label: 'read-only',
|
|
62
|
+
detail:
|
|
63
|
+
'Declared world without a live editing surface in this viewport — disclosed, not simulated; rows are read-only.',
|
|
64
|
+
};
|
|
65
|
+
private readonly world: BoundaryRootInfo;
|
|
66
|
+
/** Non-null ⇒ error-node mode (#18) — set by the caller, never computed here. */
|
|
67
|
+
private readonly reason: string | null;
|
|
68
|
+
private readonly store: EditorShellStore;
|
|
69
|
+
/**
|
|
70
|
+
* D12 (B4) — a design-time layer's own stage hit-test, wired in by
|
|
71
|
+
* `design-time-layers.ts`'s layer-mount success handler: when a mount
|
|
72
|
+
* returns a `pick` but NO authoring adapter (an opaque/foreign root that can
|
|
73
|
+
* report where a click landed without offering a source-authoring surface),
|
|
74
|
+
* that handler re-wraps the world's Boundary through this constructor
|
|
75
|
+
* parameter, so the pick rides on THIS adapter rather than a second
|
|
76
|
+
* substrate-specific one. Absent for every other Boundary (an unresolved or
|
|
77
|
+
* error world, and every world whose mount reported no `pick`) ⇒ this
|
|
78
|
+
* adapter reports no `pickable` at all. A plain
|
|
79
|
+
* conditionally-assigned field (not a getter always returning `{ pick:
|
|
80
|
+
* undefined }`) — this repo's `exactOptionalPropertyTypes` requires the key
|
|
81
|
+
* to be genuinely ABSENT, not present with an `undefined` value, to satisfy
|
|
82
|
+
* `AuthoringAdapter.pickable?: PickProvider`.
|
|
83
|
+
*/
|
|
84
|
+
readonly pickable?: PickProvider;
|
|
85
|
+
|
|
86
|
+
constructor(
|
|
87
|
+
store: EditorShellStore,
|
|
88
|
+
world: BoundaryRootInfo,
|
|
89
|
+
reason?: string,
|
|
90
|
+
pick?: PickProvider['pick'],
|
|
91
|
+
) {
|
|
92
|
+
this.store = store;
|
|
93
|
+
this.world = world;
|
|
94
|
+
this.reason = reason ?? null;
|
|
95
|
+
if (pick) this.pickable = { pick };
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private get label(): string {
|
|
99
|
+
return this.world.entryOrScenePath?.split('/').pop() ?? this.world.id;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
private get node(): EditorNode {
|
|
103
|
+
return {
|
|
104
|
+
id: this.world.id,
|
|
105
|
+
label: this.label,
|
|
106
|
+
secondaryLabel: this.reason ? 'Unavailable' : 'Read-only',
|
|
107
|
+
role: 'boundary',
|
|
108
|
+
kind: this.world.kind,
|
|
109
|
+
parentId: null,
|
|
110
|
+
childIds: [],
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
readonly hierarchy: HierarchyProvider = {
|
|
115
|
+
roots: (): EditorNode[] => [this.node],
|
|
116
|
+
node: (id) => (id === this.world.id ? this.node : null),
|
|
117
|
+
// No `object3D`/`idForObject3D`: a boundary node has no live object at all.
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Selection delegates to the editor-global {@link EditorShellStore} selection set
|
|
122
|
+
* — the SAME seam `ThreeAuthoringAdapter`/`ReactRootAuthoringAdapter` use
|
|
123
|
+
* (selection is editor UI state, not a per-adapter document concern). Without
|
|
124
|
+
* this, clicking a Boundary/error node in `IngestHierarchy` (the panel the
|
|
125
|
+
* composite drives) would be a silent no-op, so the node — and its `reason`
|
|
126
|
+
* (#18) — could never be selected or inspected (defect 3). It also makes the
|
|
127
|
+
* composite's empty-clear (`selection.set([])` routed to `children[0]`) work
|
|
128
|
+
* when a Boundary sorts first (defect 4).
|
|
129
|
+
*/
|
|
130
|
+
readonly selection: SelectionProvider = {
|
|
131
|
+
get: () => [...this.store.selectedEntityIds],
|
|
132
|
+
set: (ids) => this.store.selectMultiple(ids),
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
readonly inspector: InspectorProvider = {
|
|
136
|
+
properties: (id): PropertyDescriptor[] => {
|
|
137
|
+
if (id !== this.world.id) return [];
|
|
138
|
+
const props: PropertyDescriptor[] = [
|
|
139
|
+
{ path: 'kind', label: 'Kind', type: 'string', readonly: true },
|
|
140
|
+
];
|
|
141
|
+
if (this.world.adapter !== undefined) {
|
|
142
|
+
props.push({ path: 'adapter', label: 'Adapter', type: 'string', readonly: true });
|
|
143
|
+
}
|
|
144
|
+
if (this.world.entryOrScenePath !== undefined) {
|
|
145
|
+
props.push({ path: 'path', label: 'Entry / Scene', type: 'string', readonly: true });
|
|
146
|
+
}
|
|
147
|
+
props.push(
|
|
148
|
+
{ path: 'zOrder', label: 'Z Order', type: 'number', readonly: true },
|
|
149
|
+
{ path: 'pausable', label: 'Pausable', type: 'boolean', readonly: true },
|
|
150
|
+
);
|
|
151
|
+
if (this.reason) {
|
|
152
|
+
props.push({ path: 'reason', label: 'Reason', type: 'string', readonly: true });
|
|
153
|
+
}
|
|
154
|
+
return props;
|
|
155
|
+
},
|
|
156
|
+
get: (id, path) => {
|
|
157
|
+
if (id !== this.world.id) return undefined;
|
|
158
|
+
switch (path) {
|
|
159
|
+
case 'kind':
|
|
160
|
+
return this.world.kind;
|
|
161
|
+
case 'adapter':
|
|
162
|
+
return this.world.adapter;
|
|
163
|
+
case 'path':
|
|
164
|
+
return this.world.entryOrScenePath;
|
|
165
|
+
case 'zOrder':
|
|
166
|
+
return this.world.zOrder;
|
|
167
|
+
case 'pausable':
|
|
168
|
+
return this.world.pausable;
|
|
169
|
+
case 'reason':
|
|
170
|
+
return this.reason ?? undefined;
|
|
171
|
+
default:
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
// Read-only — every property above is display-derived from the manifest;
|
|
176
|
+
// there is nowhere to persist a write to (matches how a not-yet-mounted
|
|
177
|
+
// world has no live document). No-op rather than throw, matching the
|
|
178
|
+
// reserved-paths convention's "adapters that don't support a path simply
|
|
179
|
+
// don't offer it" floor.
|
|
180
|
+
set: (_id, _path, _value) => {
|
|
181
|
+
// Intentionally inert.
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The active BREAKPOINT for style edits (design ledger: breakpoints) — a CSS
|
|
3
|
+
* media condition like `(max-width: 767px)`, or null for base. While set,
|
|
4
|
+
* react-world style edits land in the element's named-style rule inside that
|
|
5
|
+
* `@media` block; the dev server's serve-time container-query rewrite is what
|
|
6
|
+
* previews the result per frame width.
|
|
7
|
+
*
|
|
8
|
+
* MODULE state, not adapter state (measured): design-time re-renders recreate
|
|
9
|
+
* the authoring adapters between the select gesture and the next style edit,
|
|
10
|
+
* so an instance field silently reset to base — the select still showed the
|
|
11
|
+
* breakpoint while the write landed unscoped. Session-scoped UI state, like
|
|
12
|
+
* the transform mode; never persisted, never game truth.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
// globalThis-backed: the editor page can hold MORE THAN ONE instance of this
|
|
16
|
+
// module (measured: even after a cold load, the select's set and the
|
|
17
|
+
// adapter's read disagreed — the write landed unscoped while the select held
|
|
18
|
+
// the breakpoint), so module-local state is not a singleton here. One global
|
|
19
|
+
// slot is.
|
|
20
|
+
interface BreakpointGlobal {
|
|
21
|
+
__vgaiActiveBreakpoint?: string | null;
|
|
22
|
+
__vgaiBreakpointListeners?: Set<() => void>;
|
|
23
|
+
}
|
|
24
|
+
const g = globalThis as BreakpointGlobal;
|
|
25
|
+
|
|
26
|
+
function listeners(): Set<() => void> {
|
|
27
|
+
g.__vgaiBreakpointListeners ??= new Set();
|
|
28
|
+
return g.__vgaiBreakpointListeners;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function activeBreakpoint(): string | null {
|
|
32
|
+
return g.__vgaiActiveBreakpoint ?? null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function setActiveBreakpoint(media: string | null): void {
|
|
36
|
+
g.__vgaiActiveBreakpoint = media;
|
|
37
|
+
for (const listener of listeners()) listener();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function subscribeBreakpoint(listener: () => void): () => void {
|
|
41
|
+
listeners().add(listener);
|
|
42
|
+
return () => listeners().delete(listener);
|
|
43
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { RootViewController } from './world-pan-state';
|
|
2
|
+
|
|
3
|
+
export interface CanvasSceneGuide {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly axis: 'x' | 'y';
|
|
6
|
+
readonly value: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface GuideState {
|
|
10
|
+
guides: CanvasSceneGuide[];
|
|
11
|
+
listeners: Set<() => void>;
|
|
12
|
+
revision: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const states = new WeakMap<RootViewController, GuideState>();
|
|
16
|
+
let nextGuideId = 0;
|
|
17
|
+
|
|
18
|
+
function stateFor(view: RootViewController): GuideState {
|
|
19
|
+
let state = states.get(view);
|
|
20
|
+
if (!state) {
|
|
21
|
+
state = { guides: [], listeners: new Set(), revision: 0 };
|
|
22
|
+
states.set(view, state);
|
|
23
|
+
}
|
|
24
|
+
return state;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function publish(state: GuideState): void {
|
|
28
|
+
state.revision += 1;
|
|
29
|
+
for (const listener of state.listeners) listener();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function canvasSceneGuides(view: RootViewController): readonly CanvasSceneGuide[] {
|
|
33
|
+
return stateFor(view).guides;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function canvasSceneGuideRevision(view: RootViewController): number {
|
|
37
|
+
return stateFor(view).revision;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function subscribeCanvasSceneGuides(
|
|
41
|
+
view: RootViewController,
|
|
42
|
+
listener: () => void,
|
|
43
|
+
): () => void {
|
|
44
|
+
const state = stateFor(view);
|
|
45
|
+
state.listeners.add(listener);
|
|
46
|
+
return () => state.listeners.delete(listener);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function addCanvasSceneGuide(
|
|
50
|
+
view: RootViewController,
|
|
51
|
+
axis: CanvasSceneGuide['axis'],
|
|
52
|
+
value: number,
|
|
53
|
+
): string {
|
|
54
|
+
nextGuideId += 1;
|
|
55
|
+
const state = stateFor(view);
|
|
56
|
+
const id = `canvas-guide-${nextGuideId}`;
|
|
57
|
+
state.guides = [...state.guides, { id, axis, value }];
|
|
58
|
+
publish(state);
|
|
59
|
+
return id;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function moveCanvasSceneGuide(view: RootViewController, id: string, value: number): void {
|
|
63
|
+
const state = stateFor(view);
|
|
64
|
+
const next = state.guides.map((guide) => (guide.id === id ? { ...guide, value } : guide));
|
|
65
|
+
if (next.every((guide, index) => guide === state.guides[index])) return;
|
|
66
|
+
state.guides = next;
|
|
67
|
+
publish(state);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function removeCanvasSceneGuide(view: RootViewController, id: string): void {
|
|
71
|
+
const state = stateFor(view);
|
|
72
|
+
const next = state.guides.filter((guide) => guide.id !== id);
|
|
73
|
+
if (next.length === state.guides.length) return;
|
|
74
|
+
state.guides = next;
|
|
75
|
+
publish(state);
|
|
76
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ONE predicate for "is this object the outermost node of a component
|
|
3
|
+
* instance?", shared by every reader of the OID convention.
|
|
4
|
+
*
|
|
5
|
+
* ## Why this exists
|
|
6
|
+
*
|
|
7
|
+
* `vite-plugin-ui-oid`'s transform stamps `userData.authoringInstance` (the
|
|
8
|
+
* CALLSITE oid) on **every host element inside a component definition**, not
|
|
9
|
+
* just on the one the component returns — that is what lets a click on a mesh
|
|
10
|
+
* deep inside `<Coin/>` resolve to the `<Coin/>` callsite, and what lets a
|
|
11
|
+
* gizzmo drag rewrite the callsite's own props.
|
|
12
|
+
*
|
|
13
|
+
* So `authoringInstance !== undefined` answers "which instance does this node
|
|
14
|
+
* BELONG to", and it is the wrong question to ask when you mean "is this node
|
|
15
|
+
* that instance's root". Reading it as the latter is what made the hierarchy
|
|
16
|
+
* print `Stage` on every one of `Stage`'s interior nodes and type all of them
|
|
17
|
+
* `component`: `WorldEnvironment`, `GridMap` and `Coins` all carry `Stage`'s
|
|
18
|
+
* stamp, because they are all inside `Stage`'s definition.
|
|
19
|
+
*
|
|
20
|
+
* The boundary question has a structural answer that needs no extra stamp: an
|
|
21
|
+
* instance's root is the node whose `authoringInstance` its PARENT does not
|
|
22
|
+
* share. A component that returns several spatial roots (R3F003) therefore has
|
|
23
|
+
* several — which is exactly what that warning is about, and not something this
|
|
24
|
+
* predicate should hide.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import { getUserData } from '@volter/editor-threejs/ecs/user-data';
|
|
28
|
+
import type * as THREE from 'three';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* True when `object` is the outermost node of one component instance — the row
|
|
32
|
+
* that should print the component's label and read as `role: 'component'`.
|
|
33
|
+
*
|
|
34
|
+
* False for an interior host element of that same instance (it belongs to the
|
|
35
|
+
* instance but is not its boundary) and for any node the transform never
|
|
36
|
+
* stamped.
|
|
37
|
+
*/
|
|
38
|
+
export function isComponentInstanceRoot(object: THREE.Object3D | null | undefined): boolean {
|
|
39
|
+
return instanceCallsiteOid(object) !== undefined;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* WHICH INSTANCE this node belongs to — the raw `authoringInstance` stamp,
|
|
44
|
+
* read in exactly one place.
|
|
45
|
+
*
|
|
46
|
+
* Deliberately NOT the same question as {@link isComponentInstanceRoot} (see
|
|
47
|
+
* this module's header): every host element inside a component definition
|
|
48
|
+
* carries it, so it groups a subtree and never bounds one. Callers that want
|
|
49
|
+
* "same instance?" (the constraint stack's own-parts walk, the adapter's owner
|
|
50
|
+
* chain) want THIS; callers that want "is this the instance's row" want the
|
|
51
|
+
* predicate above.
|
|
52
|
+
*/
|
|
53
|
+
export function instanceStampOf(object: THREE.Object3D | null | undefined): string | undefined {
|
|
54
|
+
const instance = getUserData(object, 'authoringInstance');
|
|
55
|
+
return typeof instance === 'string' && instance ? instance : undefined;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The element's OWN definition-side oid — where this JSX element is WRITTEN, as
|
|
60
|
+
* opposed to the callsite that instantiated whatever renders it.
|
|
61
|
+
*
|
|
62
|
+
* `oid` is stamped by `vite-plugin-ui-oid` on every host element, so it is
|
|
63
|
+
* present on a component's root element and on each of its interior ones alike.
|
|
64
|
+
* It is NOT an address: at an instance root the address is the callsite
|
|
65
|
+
* ({@link authoringOidOf}). Read it when the DEFINITION is the subject —
|
|
66
|
+
* "Fork Component…" copying the component, or the occurrence rule below asking
|
|
67
|
+
* which definition element a live object renders.
|
|
68
|
+
*/
|
|
69
|
+
export function ownOidOf(
|
|
70
|
+
/** An `Object3D`, or a MATERIAL — fiber can pierce a stamp onto a
|
|
71
|
+
* `<meshStandardMaterial userData-oid=…>` child element, and a material
|
|
72
|
+
* carries `userData` without being a scene-graph node, so that stamp is its
|
|
73
|
+
* only handle. Structural, so both pass without this module knowing which. */
|
|
74
|
+
stamped: { readonly userData?: Record<string, unknown> } | null | undefined,
|
|
75
|
+
): string | undefined {
|
|
76
|
+
const own = stamped?.userData?.['oid'];
|
|
77
|
+
return typeof own === 'string' && own ? own : undefined;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** The callsite oid `object` is the ROOT of, or `undefined`. */
|
|
81
|
+
function instanceCallsiteOid(object: THREE.Object3D | null | undefined): string | undefined {
|
|
82
|
+
const instance = instanceStampOf(object);
|
|
83
|
+
if (instance === undefined) return undefined;
|
|
84
|
+
return getUserData(object?.parent, 'authoringInstance') === instance ? undefined : instance;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** A third-party R3F component cannot be instrumented inside its package, but
|
|
88
|
+
* many ecosystem components forward unknown props to their native host root.
|
|
89
|
+
* The editor-injected callsite prop therefore lands directly on the resulting
|
|
90
|
+
* Object3D (Drei cameras are the canonical example). It is a callsite address,
|
|
91
|
+
* not the object's definition-side `userData.oid`. */
|
|
92
|
+
function forwardedCallsiteOid(object: THREE.Object3D | null | undefined): string | undefined {
|
|
93
|
+
const forwarded = (object as (THREE.Object3D & { __vgaiOid?: unknown }) | null | undefined)
|
|
94
|
+
?.__vgaiOid;
|
|
95
|
+
return typeof forwarded === 'string' && forwarded ? forwarded : undefined;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* THE OCCURRENCE CONVENTION — one source address, several live objects.
|
|
100
|
+
*
|
|
101
|
+
* A single JSX element can render more than once (a `.map()` over 44 spawn
|
|
102
|
+
* points instantiates ONE `<Coin/>` callsite 44 times), and a component's
|
|
103
|
+
* interior element can be reparented out of its instance's subtree so that it,
|
|
104
|
+
* too, resolves to the callsite oid. Either way the adapters' walks meet the
|
|
105
|
+
* same oid twice, and both mint the same shape of id: the first one seen in
|
|
106
|
+
* depth-first order keeps the bare address, later ones get `#1`, `#2`, ….
|
|
107
|
+
*
|
|
108
|
+
* The suffix is spelled HERE and nowhere else. It was previously written out at
|
|
109
|
+
* four sites — two minting walks (`projection/three.ts`,
|
|
110
|
+
* `R3fSourceAuthoringAdapter.indexGraph`), one authority check, and one
|
|
111
|
+
* presence report that stripped it back off with `split('#')[0]` — which is how
|
|
112
|
+
* a convention becomes four conventions.
|
|
113
|
+
*/
|
|
114
|
+
export function occurrenceId(baseId: string, occurrence: number): string {
|
|
115
|
+
return occurrence === 0 ? baseId : `${baseId}#${occurrence}`;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** True for `…#1`, `…#2` — an id that is NOT its address's first occurrence. */
|
|
119
|
+
export function isOccurrenceId(id: string): boolean {
|
|
120
|
+
return id.includes('#');
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** `id` with any occurrence suffix removed — the address all its occurrences share. */
|
|
124
|
+
export function withoutOccurrence(id: string): string {
|
|
125
|
+
const hash = id.indexOf('#');
|
|
126
|
+
return hash < 0 ? id : id.slice(0, hash);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Whether two live objects are renders of THE SAME JSX element.
|
|
131
|
+
*
|
|
132
|
+
* This is the CAPABILITY question behind an occurrence id, and it is the whole
|
|
133
|
+
* reason the two causes above must not be treated alike. N objects that share
|
|
134
|
+
* one callsite AND render one definition element are N renders of one element;
|
|
135
|
+
* the element is the unit of edit, so a literal prop on it is honestly
|
|
136
|
+
* writable and moving one moves all — which is exactly what the source says. A
|
|
137
|
+
* reparented interior element renders a DIFFERENT definition element, merely
|
|
138
|
+
* addressed by the callsite it escaped from, so writing that callsite's props
|
|
139
|
+
* would edit the instance instead of the object under the pointer.
|
|
140
|
+
*
|
|
141
|
+
* Both objects having no own oid counts as the same element: an unstamped pair
|
|
142
|
+
* is a component with several spatial roots (R3F003), which the callsite's own
|
|
143
|
+
* authoring contract already refuses on better grounds than a guess here.
|
|
144
|
+
*/
|
|
145
|
+
export function rendersSameSourceElement(
|
|
146
|
+
a: THREE.Object3D | null | undefined,
|
|
147
|
+
b: THREE.Object3D | null | undefined,
|
|
148
|
+
): boolean {
|
|
149
|
+
return ownOidOf(a) === ownOidOf(b);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* The oid that ADDRESSES `object` in source — the key every id, source
|
|
154
|
+
* location and prop write resolves through.
|
|
155
|
+
*
|
|
156
|
+
* At an instance ROOT it is the CALLSITE oid, because that is where the author
|
|
157
|
+
* put this instance and where a gizmo drag must land: moving `Coin1` rewrites
|
|
158
|
+
* `<Coin name='Coin1' position={…}/>` in the parent scene, not the shared
|
|
159
|
+
* `<Coin/>` definition every coin renders from.
|
|
160
|
+
*
|
|
161
|
+
* ANYWHERE ELSE it is the element's OWN definition oid. An interior host
|
|
162
|
+
* element of a component carries the instance stamp too (that is how a click
|
|
163
|
+
* on it resolves to the instance), but the stamp is not its address: reading
|
|
164
|
+
* it as one gave every interior node of `Stage` the id
|
|
165
|
+
* `r3f:<world>:<Stage's callsite>#N` — a position among `Stage`'s stamped
|
|
166
|
+
* elements rather than a name — and pointed each one's source location and
|
|
167
|
+
* prop writes at the `<Stage/>` callsite instead of at itself.
|
|
168
|
+
*/
|
|
169
|
+
export function authoringOidOf(object: THREE.Object3D | null | undefined): string | undefined {
|
|
170
|
+
return instanceCallsiteOid(object) ?? forwardedCallsiteOid(object) ?? ownOidOf(object);
|
|
171
|
+
}
|