@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,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seam-level provenance resolution (spec 29 §5): which {@link
|
|
3
|
+
* AuthoringProvenance} governs a given hierarchy node. Provenance is declared
|
|
4
|
+
* once per adapter and rendered at the seam (world group row / panel header);
|
|
5
|
+
* affordance code also reads it for the REASON string on a disabled operation
|
|
6
|
+
* ("the subject is present but the operation isn't" — the complement of spec
|
|
7
|
+
* 28's hide-when-absent rule).
|
|
8
|
+
*
|
|
9
|
+
* Rule zero: roots are resolved by ASKING the composite (`groupNodeId` /
|
|
10
|
+
* `ownerOf`), never by decoding adapter-minted id strings here.
|
|
11
|
+
*/
|
|
12
|
+
import type { AuthoringAdapter, AuthoringProvenance } from '@volter/editor-project/adapter';
|
|
13
|
+
import { CompositeAuthoringAdapter } from './composite-authoring-adapter';
|
|
14
|
+
|
|
15
|
+
/** Resolve the concrete adapter that owns a real hierarchy node. Synthetic
|
|
16
|
+
* composite rows and unknown ids have no owner. */
|
|
17
|
+
export function authoringAdapterForNode(
|
|
18
|
+
adapter: AuthoringAdapter,
|
|
19
|
+
nodeId: string,
|
|
20
|
+
): AuthoringAdapter | null {
|
|
21
|
+
if (!(adapter instanceof CompositeAuthoringAdapter)) return adapter;
|
|
22
|
+
const worldId = adapter.ownerOf(nodeId);
|
|
23
|
+
if (worldId === null) return null;
|
|
24
|
+
return adapter.childAdapters().find((child) => child.worldId === worldId)?.adapter ?? null;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The adapter GOVERNING `nodeId` under the ACTIVE adapter — the one entitled to
|
|
29
|
+
* answer questions *about that node*: the owning child inside a composite, the
|
|
30
|
+
* world's own child for a `world:<id>` GROUP row, the adapter itself when it
|
|
31
|
+
* isn't a composite. `null` when the composite recognizes no owner (a synthetic
|
|
32
|
+
* organization row, an unknown id).
|
|
33
|
+
*
|
|
34
|
+
* Use this — not the active adapter — for any PER-NODE capability check inside
|
|
35
|
+
* a composite. `CompositeAuthoringAdapter`'s provider fields are unconditional
|
|
36
|
+
* routing objects: reading presence off the composite is `true` for every node
|
|
37
|
+
* in every multi-root project, including nodes whose owner exposes no such
|
|
38
|
+
* provider at all and nodes nobody owns (where `route()` falls back to the
|
|
39
|
+
* FIRST child). That has the editor assert a capability claim on a child's
|
|
40
|
+
* behalf — exactly the fabrication the anti-shim rule forbids. Ask the
|
|
41
|
+
* governing adapter instead, and treat "no governing adapter" as "nobody
|
|
42
|
+
* declared anything".
|
|
43
|
+
*
|
|
44
|
+
* Distinct from {@link authoringAdapterForNode}, which resolves REAL hierarchy
|
|
45
|
+
* nodes only and is deliberately `null` for a group row.
|
|
46
|
+
*/
|
|
47
|
+
export function governingAdapterForNode(
|
|
48
|
+
adapter: AuthoringAdapter,
|
|
49
|
+
nodeId: string,
|
|
50
|
+
): AuthoringAdapter | null {
|
|
51
|
+
if (!(adapter instanceof CompositeAuthoringAdapter)) return adapter;
|
|
52
|
+
for (const child of adapter.childAdapters()) {
|
|
53
|
+
if (adapter.groupNodeId(child.worldId) === nodeId) return child.adapter;
|
|
54
|
+
}
|
|
55
|
+
return authoringAdapterForNode(adapter, nodeId);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The provenance governing `nodeId` under the ACTIVE adapter: the owning
|
|
60
|
+
* child's declaration inside a composite (a `world:<id>` group row resolves
|
|
61
|
+
* to that world's own child), the adapter's own declaration otherwise.
|
|
62
|
+
* `null` when nothing was declared (the shell shows no badge and falls back
|
|
63
|
+
* to a generic reason — never fabricates a claim).
|
|
64
|
+
*/
|
|
65
|
+
export function provenanceForNode(
|
|
66
|
+
adapter: AuthoringAdapter,
|
|
67
|
+
nodeId: string,
|
|
68
|
+
): AuthoringProvenance | null {
|
|
69
|
+
return governingAdapterForNode(adapter, nodeId)?.provenance ?? null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** The reason string for an affordance that is present but unavailable —
|
|
73
|
+
* the adapter's own explanation when it declared one, a plain honest
|
|
74
|
+
* fallback when it didn't. */
|
|
75
|
+
export function unavailableReason(provenance: AuthoringProvenance | null): string {
|
|
76
|
+
return provenance?.detail ?? "Not supported by this world's adapter.";
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* WHERE this adapter's truth is written, as one human-readable string.
|
|
80
|
+
*
|
|
81
|
+
* One owner, because two surfaces read it and they must agree: the Hierarchy
|
|
82
|
+
* panel publishes it as its scene name (`components/GameHierarchy.tsx`), and
|
|
83
|
+
* the Inspector's identity row PRINTS it as the datablock line
|
|
84
|
+
* (`inspection/model.ts`'s `InspectionDocumentLine`) now that the tree's own
|
|
85
|
+
* breadcrumb row is gone. When the two were computed separately the
|
|
86
|
+
* Inspector's half silently showed nothing for every adapter that answers
|
|
87
|
+
* through its document root instead of a persistence provider — which is the
|
|
88
|
+
* ordinary three-source case.
|
|
89
|
+
*
|
|
90
|
+
* `null` for a session with no single destination (a composite, whose worlds'
|
|
91
|
+
* destinations differ) — the same silence its `provenance` keeps.
|
|
92
|
+
*/
|
|
93
|
+
export function authoringDestination(adapter: AuthoringAdapter): string | null {
|
|
94
|
+
const persisted = adapter.persistence?.destination;
|
|
95
|
+
if (persisted) return persisted;
|
|
96
|
+
const roots = adapter.hierarchy.roots();
|
|
97
|
+
const documentRoot = roots.length === 1 && roots[0]?.role === 'document' ? roots[0] : null;
|
|
98
|
+
return documentRoot?.secondaryLabel ?? documentRoot?.label ?? null;
|
|
99
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type * as THREE from 'three';
|
|
2
|
+
import type { ParticleSystem } from 'three.quarks';
|
|
3
|
+
|
|
4
|
+
/** Native three.quarks systems owned by ParticleEmitter nodes in this graph.
|
|
5
|
+
* Detection is structural because a project can bring its own compatible
|
|
6
|
+
* three.quarks module instance; `instanceof` would make that ordinary case
|
|
7
|
+
* disappear across package boundaries. */
|
|
8
|
+
export function quarksParticleSystems(root: THREE.Object3D): ParticleSystem[] {
|
|
9
|
+
const systems: ParticleSystem[] = [];
|
|
10
|
+
const seen = new Set<ParticleSystem>();
|
|
11
|
+
root.traverse((object) => {
|
|
12
|
+
if (object.type !== 'ParticleEmitter') return;
|
|
13
|
+
const system = (object as THREE.Object3D & { system?: ParticleSystem }).system;
|
|
14
|
+
if (!system || typeof system.getRendererSettings !== 'function' || seen.has(system)) return;
|
|
15
|
+
seen.add(system);
|
|
16
|
+
systems.push(system);
|
|
17
|
+
});
|
|
18
|
+
return systems;
|
|
19
|
+
}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { type RootPan, type RootViewController, sharedRootViewController } from './world-pan-state';
|
|
2
|
+
|
|
3
|
+
const MIN_ZOOM = 0.1;
|
|
4
|
+
const MAX_ZOOM = 4;
|
|
5
|
+
const ZOOM_SENSITIVITY = 0.002;
|
|
6
|
+
const SECONDARY_DRAG_THRESHOLD_PX = 4;
|
|
7
|
+
|
|
8
|
+
export interface ReactCanvasWheelInput {
|
|
9
|
+
readonly clientX: number;
|
|
10
|
+
readonly clientY: number;
|
|
11
|
+
readonly deltaX: number;
|
|
12
|
+
readonly deltaY: number;
|
|
13
|
+
readonly deltaMode: number;
|
|
14
|
+
readonly ctrlKey: boolean;
|
|
15
|
+
readonly metaKey: boolean;
|
|
16
|
+
readonly shiftKey: boolean;
|
|
17
|
+
readonly bounds: Pick<DOMRect, 'left' | 'top' | 'width' | 'height'>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function deltaPixels(delta: number, mode: number, pageSize: number): number {
|
|
21
|
+
if (mode === 1) return delta * 16; // WheelEvent.DOM_DELTA_LINE
|
|
22
|
+
if (mode === 2) return delta * pageSize; // WheelEvent.DOM_DELTA_PAGE
|
|
23
|
+
return delta;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Resolve one component-board wheel gesture without touching global state. */
|
|
27
|
+
export function resolveReactCanvasWheel(view: RootPan, input: ReactCanvasWheelInput): RootPan {
|
|
28
|
+
let deltaX = deltaPixels(input.deltaX, input.deltaMode, input.bounds.width);
|
|
29
|
+
let deltaY = deltaPixels(input.deltaY, input.deltaMode, input.bounds.height);
|
|
30
|
+
|
|
31
|
+
if (input.ctrlKey || input.metaKey) {
|
|
32
|
+
const zoom = Math.min(
|
|
33
|
+
MAX_ZOOM,
|
|
34
|
+
Math.max(MIN_ZOOM, view.zoom * Math.exp(-deltaY * ZOOM_SENSITIVITY)),
|
|
35
|
+
);
|
|
36
|
+
const pointerX = input.clientX - input.bounds.left;
|
|
37
|
+
const pointerY = input.clientY - input.bounds.top;
|
|
38
|
+
const worldX = (pointerX - view.x) / view.zoom;
|
|
39
|
+
const worldY = (pointerY - view.y) / view.zoom;
|
|
40
|
+
return {
|
|
41
|
+
x: pointerX - worldX * zoom,
|
|
42
|
+
y: pointerY - worldY * zoom,
|
|
43
|
+
zoom,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Figma treats a shifted vertical mouse wheel as horizontal movement.
|
|
48
|
+
// Trackpads already provide deltaX, so preserve that richer input.
|
|
49
|
+
if (input.shiftKey && deltaX === 0) {
|
|
50
|
+
deltaX = deltaY;
|
|
51
|
+
deltaY = 0;
|
|
52
|
+
}
|
|
53
|
+
return { x: view.x - deltaX, y: view.y - deltaY, zoom: view.zoom };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Resolve the wheel gesture for a native 2D Scene. Like the Three Scene and
|
|
57
|
+
* Godot's 2D workspace, the wheel changes the spatial camera's zoom around
|
|
58
|
+
* the cursor; panning belongs to middle-drag, right-drag, or Space-drag. This is
|
|
59
|
+
* intentionally different from the component board above, where a wheel pans
|
|
60
|
+
* the layout and a modifier-wheel zooms it. */
|
|
61
|
+
export function resolveCanvasSceneWheel(view: RootPan, input: ReactCanvasWheelInput): RootPan {
|
|
62
|
+
const deltaY = deltaPixels(input.deltaY, input.deltaMode, input.bounds.height);
|
|
63
|
+
const zoom = Math.min(
|
|
64
|
+
MAX_ZOOM,
|
|
65
|
+
Math.max(MIN_ZOOM, view.zoom * Math.exp(-deltaY * ZOOM_SENSITIVITY)),
|
|
66
|
+
);
|
|
67
|
+
const pointerX = input.clientX - input.bounds.left;
|
|
68
|
+
const pointerY = input.clientY - input.bounds.top;
|
|
69
|
+
const worldX = (pointerX - view.x) / view.zoom;
|
|
70
|
+
const worldY = (pointerY - view.y) / view.zoom;
|
|
71
|
+
return {
|
|
72
|
+
x: pointerX - worldX * zoom,
|
|
73
|
+
y: pointerY - worldY * zoom,
|
|
74
|
+
zoom,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function isNavigationChrome(target: EventTarget | null): boolean {
|
|
79
|
+
return (
|
|
80
|
+
target instanceof Element &&
|
|
81
|
+
target.closest('[data-vgai-canvas-navigation-ignore="true"]') !== null
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Install viewport-sized navigation for a React design canvas. This stays on
|
|
87
|
+
* the untransformed document container, unlike authoring chrome that follows
|
|
88
|
+
* the world transform, so navigation remains available after fit/zoom.
|
|
89
|
+
*/
|
|
90
|
+
function installCanvasNavigation(
|
|
91
|
+
container: HTMLElement,
|
|
92
|
+
view: RootViewController,
|
|
93
|
+
resolveWheel: (view: RootPan, input: ReactCanvasWheelInput) => RootPan,
|
|
94
|
+
options: { readonly rightDragPans?: boolean } = {},
|
|
95
|
+
): () => void {
|
|
96
|
+
let drag: {
|
|
97
|
+
readonly pointerId: number;
|
|
98
|
+
readonly button: 1 | 2;
|
|
99
|
+
readonly startClientX: number;
|
|
100
|
+
readonly startClientY: number;
|
|
101
|
+
readonly startPan: RootPan;
|
|
102
|
+
moved: boolean;
|
|
103
|
+
} | null = null;
|
|
104
|
+
let suppressNextContextMenu = false;
|
|
105
|
+
let previousInteractionCursor = '';
|
|
106
|
+
|
|
107
|
+
const interactionLayer = (): HTMLElement | null =>
|
|
108
|
+
container.querySelector<HTMLElement>('[data-testid="world-selection-overlay-interaction"]');
|
|
109
|
+
|
|
110
|
+
const setDraggingAppearance = (dragging: boolean): void => {
|
|
111
|
+
container.dataset['canvasPanning'] = dragging ? 'true' : 'false';
|
|
112
|
+
container.style.cursor = dragging ? 'grabbing' : '';
|
|
113
|
+
const interaction = interactionLayer();
|
|
114
|
+
if (!interaction) return;
|
|
115
|
+
if (dragging) {
|
|
116
|
+
previousInteractionCursor = interaction.style.cursor;
|
|
117
|
+
interaction.style.cursor = 'grabbing';
|
|
118
|
+
} else {
|
|
119
|
+
interaction.style.cursor = previousInteractionCursor;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const onPointerMove = (event: PointerEvent): void => {
|
|
124
|
+
if (!drag || event.pointerId !== drag.pointerId) return;
|
|
125
|
+
// PointerEvent's button mask is platform-independent: 4 is middle, 2 is
|
|
126
|
+
// secondary/right. Windows can drop pointerup around native auto-scroll
|
|
127
|
+
// or a window boundary, so stop as soon as the active bit disappears.
|
|
128
|
+
const pressedButtonMask = drag.button === 1 ? 4 : 2;
|
|
129
|
+
if ((event.buttons & pressedButtonMask) === 0) {
|
|
130
|
+
endDrag(event);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const deltaX = event.clientX - drag.startClientX;
|
|
134
|
+
const deltaY = event.clientY - drag.startClientY;
|
|
135
|
+
if (!drag.moved) {
|
|
136
|
+
if (Math.hypot(deltaX, deltaY) <= SECONDARY_DRAG_THRESHOLD_PX) return;
|
|
137
|
+
drag.moved = true;
|
|
138
|
+
setDraggingAppearance(true);
|
|
139
|
+
}
|
|
140
|
+
view.setPan(drag.startPan.x + deltaX, drag.startPan.y + deltaY);
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
const endDrag = (event: PointerEvent): void => {
|
|
144
|
+
if (!drag || event.pointerId !== drag.pointerId) return;
|
|
145
|
+
const pointerId = drag.pointerId;
|
|
146
|
+
if (drag.button === 2 && drag.moved) suppressNextContextMenu = true;
|
|
147
|
+
drag = null;
|
|
148
|
+
setDraggingAppearance(false);
|
|
149
|
+
if (container.hasPointerCapture?.(pointerId)) container.releasePointerCapture(pointerId);
|
|
150
|
+
window.removeEventListener('pointermove', onPointerMove);
|
|
151
|
+
window.removeEventListener('pointerup', endDrag);
|
|
152
|
+
window.removeEventListener('pointercancel', endDrag);
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const onPointerDown = (event: PointerEvent): void => {
|
|
156
|
+
const isMiddleButton = event.button === 1;
|
|
157
|
+
const isRightButton = options.rightDragPans === true && event.button === 2;
|
|
158
|
+
if ((!isMiddleButton && !isRightButton) || isNavigationChrome(event.target)) return;
|
|
159
|
+
if (isRightButton) suppressNextContextMenu = false;
|
|
160
|
+
event.preventDefault();
|
|
161
|
+
// A secondary press is shared with the selection overlay: navigation owns
|
|
162
|
+
// movement, while the overlay owns the stationary overlap menu. Let that
|
|
163
|
+
// one event continue so both can measure the same press; middle drag is
|
|
164
|
+
// unambiguous and remains navigation-only.
|
|
165
|
+
if (isMiddleButton) event.stopPropagation();
|
|
166
|
+
drag = {
|
|
167
|
+
pointerId: event.pointerId,
|
|
168
|
+
button: event.button as 1 | 2,
|
|
169
|
+
startClientX: event.clientX,
|
|
170
|
+
startClientY: event.clientY,
|
|
171
|
+
startPan: view.get(),
|
|
172
|
+
// Middle-drag is unambiguous and retains its immediate response. A
|
|
173
|
+
// secondary press waits for movement so a stationary secondary click
|
|
174
|
+
// remains the viewport's overlap/context menu.
|
|
175
|
+
moved: isMiddleButton,
|
|
176
|
+
};
|
|
177
|
+
// Pointer capture is the mouse-equivalent of a trackpad's uninterrupted
|
|
178
|
+
// gesture stream: middle-drag keeps panning across child frames and past
|
|
179
|
+
// the viewport edge, including on Windows where window-level move/up
|
|
180
|
+
// delivery is otherwise inconsistent around native auto-scroll.
|
|
181
|
+
container.setPointerCapture?.(event.pointerId);
|
|
182
|
+
setDraggingAppearance(isMiddleButton);
|
|
183
|
+
window.addEventListener('pointermove', onPointerMove);
|
|
184
|
+
window.addEventListener('pointerup', endDrag);
|
|
185
|
+
window.addEventListener('pointercancel', endDrag);
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
const onMouseDown = (event: MouseEvent): void => {
|
|
189
|
+
// Prevent Chromium's native middle-button auto-scroll glyph.
|
|
190
|
+
if (event.button === 1 && !isNavigationChrome(event.target)) event.preventDefault();
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
const onContextMenu = (event: MouseEvent): void => {
|
|
194
|
+
if (options.rightDragPans !== true) return;
|
|
195
|
+
const activeRightDrag = drag?.button === 2 && drag.moved;
|
|
196
|
+
if (!activeRightDrag && !suppressNextContextMenu) return;
|
|
197
|
+
suppressNextContextMenu = false;
|
|
198
|
+
event.preventDefault();
|
|
199
|
+
event.stopPropagation();
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
const onWheel = (event: WheelEvent): void => {
|
|
203
|
+
if (isNavigationChrome(event.target)) return;
|
|
204
|
+
event.preventDefault();
|
|
205
|
+
event.stopPropagation();
|
|
206
|
+
const next = resolveWheel(view.get(), {
|
|
207
|
+
clientX: event.clientX,
|
|
208
|
+
clientY: event.clientY,
|
|
209
|
+
deltaX: event.deltaX,
|
|
210
|
+
deltaY: event.deltaY,
|
|
211
|
+
deltaMode: event.deltaMode,
|
|
212
|
+
ctrlKey: event.ctrlKey,
|
|
213
|
+
metaKey: event.metaKey,
|
|
214
|
+
shiftKey: event.shiftKey,
|
|
215
|
+
bounds: container.getBoundingClientRect(),
|
|
216
|
+
});
|
|
217
|
+
view.setView(next.x, next.y, next.zoom);
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
container.addEventListener('pointerdown', onPointerDown, true);
|
|
221
|
+
container.addEventListener('lostpointercapture', endDrag, true);
|
|
222
|
+
container.addEventListener('mousedown', onMouseDown, true);
|
|
223
|
+
container.addEventListener('contextmenu', onContextMenu, true);
|
|
224
|
+
container.addEventListener('wheel', onWheel, { capture: true, passive: false });
|
|
225
|
+
return () => {
|
|
226
|
+
drag = null;
|
|
227
|
+
setDraggingAppearance(false);
|
|
228
|
+
container.removeEventListener('pointerdown', onPointerDown, true);
|
|
229
|
+
container.removeEventListener('lostpointercapture', endDrag, true);
|
|
230
|
+
container.removeEventListener('mousedown', onMouseDown, true);
|
|
231
|
+
container.removeEventListener('contextmenu', onContextMenu, true);
|
|
232
|
+
container.removeEventListener('wheel', onWheel, true);
|
|
233
|
+
window.removeEventListener('pointermove', onPointerMove);
|
|
234
|
+
window.removeEventListener('pointerup', endDrag);
|
|
235
|
+
window.removeEventListener('pointercancel', endDrag);
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/** Component-board navigation: wheel pans; modifier-wheel zooms. */
|
|
240
|
+
export function installReactCanvasNavigation(
|
|
241
|
+
container: HTMLElement,
|
|
242
|
+
view: RootViewController = sharedRootViewController,
|
|
243
|
+
): () => void {
|
|
244
|
+
return installCanvasNavigation(container, view, resolveReactCanvasWheel);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/** Native 2D Scene navigation: wheel zooms; middle/right/Space drag pans. */
|
|
248
|
+
export function installCanvasSceneNavigation(
|
|
249
|
+
container: HTMLElement,
|
|
250
|
+
view: RootViewController,
|
|
251
|
+
): () => void {
|
|
252
|
+
return installCanvasNavigation(container, view, resolveCanvasSceneWheel, {
|
|
253
|
+
rightDragPans: true,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React design documents deliberately use an opaque, theme-independent canvas.
|
|
3
|
+
* Glass theme surface tokens are translucent and would let the chrome's
|
|
4
|
+
* backdrop frost turn the fine dot grid into a pale blur. These literals describe the
|
|
5
|
+
* semantic preview media itself, like an alpha checkerboard, rather than editor
|
|
6
|
+
* chrome colors.
|
|
7
|
+
*/
|
|
8
|
+
export const REACT_DESIGN_CANVAS_COLOR = '#191c22';
|
|
9
|
+
export const REACT_DESIGN_CANVAS_DOT = 'rgba(255, 255, 255, 0.2)';
|
|
10
|
+
export const REACT_STORY_TRANSPARENCY_BASE = '#20242a';
|
|
11
|
+
export const REACT_STORY_TRANSPARENCY_TILE = '#2d323a';
|
|
12
|
+
|
|
13
|
+
export function reactStoryTransparencyBackground(): string {
|
|
14
|
+
return (
|
|
15
|
+
`linear-gradient(45deg, ${REACT_STORY_TRANSPARENCY_TILE} 25%, transparent 25%, ` +
|
|
16
|
+
`transparent 75%, ${REACT_STORY_TRANSPARENCY_TILE} 75%), ` +
|
|
17
|
+
`linear-gradient(45deg, ${REACT_STORY_TRANSPARENCY_TILE} 25%, transparent 25%, ` +
|
|
18
|
+
`transparent 75%, ${REACT_STORY_TRANSPARENCY_TILE} 75%)`
|
|
19
|
+
);
|
|
20
|
+
}
|