@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,621 @@
|
|
|
1
|
+
/* THE DOCUMENT SURFACE, and every pane the editor portals into a part of the
|
|
2
|
+
* workbench: the document box, its header strip, its shelf rail, the utility
|
|
3
|
+
* panel portal, the workspace-task overlay, and the play-transition chrome
|
|
4
|
+
* classes `live-transition.ts` adds and removes.
|
|
5
|
+
*
|
|
6
|
+
* WHAT IS NOT HERE is the ARRANGEMENT. Groups, sashes, tab strips, splits and
|
|
7
|
+
* the grid they live in are the workbench's, and the workbench draws them;
|
|
8
|
+
* this file dresses only what the editor itself renders INSIDE a part it was
|
|
9
|
+
* handed. Every rule below was measured against a real surface, and the
|
|
10
|
+
* measurement is in its own comment.
|
|
11
|
+
*
|
|
12
|
+
* The `vgai-dock-*` class names are the editor's own document classes and the
|
|
13
|
+
* fork's skin CSS keys on the same names, so they are a two-repository wire
|
|
14
|
+
* rather than a private spelling.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/* Workspace tasks (Account today) preserve the live authored subject behind
|
|
18
|
+
them in Glass + Floating. They are not fake viewport documents: the same
|
|
19
|
+
descriptor remains a normal center tab in Classic/Docked. */
|
|
20
|
+
.vgai-workspace-task-overlay {
|
|
21
|
+
position: absolute;
|
|
22
|
+
top: 72px;
|
|
23
|
+
bottom: 64px;
|
|
24
|
+
left: 50%;
|
|
25
|
+
z-index: var(--vgai-z-modal);
|
|
26
|
+
width: min(760px, calc(100% - 96px));
|
|
27
|
+
min-height: 320px;
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
transform: translateX(-50%);
|
|
30
|
+
display: flex;
|
|
31
|
+
flex-direction: column;
|
|
32
|
+
border: var(--vgai-stroke-resting) solid var(--vgai-boundary-default);
|
|
33
|
+
border-radius: var(--vgai-radius-lg);
|
|
34
|
+
box-shadow: var(--vgai-shadow-lg);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.vgai-workspace-task-overlay-header {
|
|
38
|
+
min-height: var(--vgai-panel-header-height);
|
|
39
|
+
box-sizing: border-box;
|
|
40
|
+
display: flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
justify-content: space-between;
|
|
43
|
+
gap: var(--vgai-space-3);
|
|
44
|
+
padding: var(--vgai-space-1) var(--vgai-space-3);
|
|
45
|
+
color: var(--vgai-content-primary);
|
|
46
|
+
font-size: var(--vgai-font-md);
|
|
47
|
+
font-weight: 650;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.vgai-workspace-task-overlay-body,
|
|
51
|
+
.vgai-workspace-task-overlay-body > .vgai-dock-document {
|
|
52
|
+
min-height: 0;
|
|
53
|
+
flex: 1;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@media (max-width: 720px) {
|
|
57
|
+
.vgai-workspace-task-overlay {
|
|
58
|
+
top: 56px;
|
|
59
|
+
bottom: 52px;
|
|
60
|
+
width: calc(100% - 32px);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.vgai-dock-panel,
|
|
65
|
+
.vgai-dock-document,
|
|
66
|
+
.vgai-dock-document-content {
|
|
67
|
+
min-width: 0;
|
|
68
|
+
min-height: 0;
|
|
69
|
+
width: 100%;
|
|
70
|
+
height: 100%;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Interior wrappers paint NOTHING (liquid-glass productization, report
|
|
74
|
+
§2.31 interior-background audit): the surface a pane is drawn INTO
|
|
75
|
+
already carries the theme's panel color, so a
|
|
76
|
+
second `--vgai-bg-1` here double-tints translucent themes and occludes
|
|
77
|
+
the glass surface. Opaque themes keep their look because the group
|
|
78
|
+
surface carries the fill — for every theme. */
|
|
79
|
+
.vgai-dock-panel,
|
|
80
|
+
.vgai-dock-document,
|
|
81
|
+
.vgai-dock-document-content {
|
|
82
|
+
display: flex;
|
|
83
|
+
flex-direction: column;
|
|
84
|
+
overflow: hidden;
|
|
85
|
+
pointer-events: auto;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* THE CONTENT BOX IS A DOCUMENT'S CONTAINING BLOCK. A document body that
|
|
89
|
+
positions itself absolutely (the Asset Lab 3D stage: `inset: -12` to bleed
|
|
90
|
+
under the panel padding) resolves against the nearest POSITIONED ancestor.
|
|
91
|
+
With no `position` here that ancestor was the whole document box — header
|
|
92
|
+
strip included — so a document with a host toolbar painted its stage OVER
|
|
93
|
+
the strip (measured 2026-09-03 on the mesh document: the strip sat at
|
|
94
|
+
y=66 in the DOM and the stage's canvas at y=54, covering it; the chrome
|
|
95
|
+
capture showed the 3D pill exactly where the header should be). Positioned,
|
|
96
|
+
the content box is the frame a document's absolute children fill, and the
|
|
97
|
+
host's strip stays the host's. */
|
|
98
|
+
.vgai-dock-document-content {
|
|
99
|
+
position: relative;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.vgai-dock-document-toolbar {
|
|
103
|
+
flex: 0 0 auto;
|
|
104
|
+
display: flex;
|
|
105
|
+
align-items: center;
|
|
106
|
+
gap: var(--vgai-space-2);
|
|
107
|
+
min-height: var(--vgai-local-toolbar-height);
|
|
108
|
+
/* A document's header is a step above its panel, the way Blender's area
|
|
109
|
+
header sits a step above its area. */
|
|
110
|
+
background: var(--vgai-surface-header);
|
|
111
|
+
border-bottom: var(--vgai-stroke-resting) solid var(--vgai-structural-divider);
|
|
112
|
+
pointer-events: auto;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* THE SHELF RAIL — the host's second region (`DocumentShelfRail`): a
|
|
116
|
+
vertical rail over the leading edge of the content box, the geometry the
|
|
117
|
+
scene viewport's own transform strip used (`.vgai-viewport-toolbar-left`)
|
|
118
|
+
generalized to every document. Absolute inside the positioned content box,
|
|
119
|
+
so it never covers the header strip and the stage keeps its size. */
|
|
120
|
+
.vgai-dock-document-shelf {
|
|
121
|
+
position: absolute;
|
|
122
|
+
left: var(--vgai-space-4);
|
|
123
|
+
top: var(--vgai-viewport-overlay-top, var(--vgai-space-4));
|
|
124
|
+
z-index: calc(var(--vgai-z-dropdown, 1000) - 1);
|
|
125
|
+
isolation: isolate;
|
|
126
|
+
display: flex;
|
|
127
|
+
flex-direction: column;
|
|
128
|
+
align-items: flex-start;
|
|
129
|
+
gap: var(--vgai-space-2);
|
|
130
|
+
pointer-events: auto;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* Blender's toolbar is ONE column: the transform strip stacks its buttons
|
|
134
|
+
when it rides the rail (it lays them in a row over the stage otherwise),
|
|
135
|
+
and the RAIL is the panel — the strip and the document's own operators
|
|
136
|
+
drop their own borders and fills so the column reads as one. */
|
|
137
|
+
.vgai-dock-document-shelf .vgai-floating-toolbar,
|
|
138
|
+
.vgai-dock-document-shelf .vgai-floating-toolbar > * {
|
|
139
|
+
display: flex;
|
|
140
|
+
flex-direction: column;
|
|
141
|
+
align-items: stretch;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* Blender's tool shelf is a FIXED-WIDTH region, not a card that grows to its
|
|
145
|
+
widest tool. RE-MEASURED 2026-09-18 in `modeling-edit-none.png` (2x, halved)
|
|
146
|
+
by reading the pixel columns and rows rather than the picture: what the
|
|
147
|
+
earlier reading took for a 38 px region FILL is the BUTTON — the dark 39-lum
|
|
148
|
+
box runs x 22..97 (38 CSS px of fill, one 1 px border each side) and its
|
|
149
|
+
rows run 765..830 (33 CSS px of fill inside the same border), with the
|
|
150
|
+
viewport's own 63-lum grey showing through the 7 CSS px between one button
|
|
151
|
+
and the next. So Blender's tool is 38 wide x ~34 tall of fill in a 40x35 box, and
|
|
152
|
+
the rail carries no fill of its own between them (our panel is this repo's
|
|
153
|
+
own decision, recorded in `a11f55c529`, and left standing here).
|
|
154
|
+
|
|
155
|
+
Overriding the control-height variables HERE resizes exactly this rail's
|
|
156
|
+
buttons — they already read them — without touching the same controls
|
|
157
|
+
anywhere else; the ToolStrip also draws in a ROW over the scene viewport,
|
|
158
|
+
where the size is that surface's. The size is a var with a fallback because
|
|
159
|
+
it wants a density home (`EditorDensity.chrome`, beside `treeRow`) the way
|
|
160
|
+
every other chrome measurement has one — `theme.ts` is being edited by
|
|
161
|
+
another unit, so the token is CONSUMED here and declared nowhere yet. */
|
|
162
|
+
.vgai-dock-document-shelf:not(:empty) {
|
|
163
|
+
/* No panel: Blender's tool shelf paints nothing BETWEEN its groups — the
|
|
164
|
+
viewport shows through there. Each TOOL, though, is an opaque widget:
|
|
165
|
+
re-measured 2026-09-18 on the native 2x frame (`modeling-edit-none.png`,
|
|
166
|
+
row y=400) the box runs x 20..99 as 2 px of #3c3c3c border, 76 px of
|
|
167
|
+
#272727 fill, 2 px of border — i.e. at 1x a 40 px box of
|
|
168
|
+
`--vgai-widget-menu` inside a one-pixel boundary. See the tool rule
|
|
169
|
+
below for the fill and the pitch. */
|
|
170
|
+
--vgai-control-compact-height: var(--vgai-tool-size, 36px);
|
|
171
|
+
--vgai-control-default-height: var(--vgai-tool-size, 36px);
|
|
172
|
+
--vgai-control-comfortable-height: var(--vgai-tool-size, 36px);
|
|
173
|
+
/* Blender's operator glyph inks 20x20 CSS px (extrude 20x23 — the lifted
|
|
174
|
+
slab is taller). These glyphs ink at ~1.1 of their em box, so the rail's
|
|
175
|
+
rung is the chrome's LARGEST (`--vgai-icon-2xl`, 18 under Blender's
|
|
176
|
+
density) and the two rungs the rail's strips ask for resolve to it here.
|
|
177
|
+
The call sites keep their own rung so the row-over-the-stage ToolStrip is
|
|
178
|
+
untouched; a rail control that wants a small glyph (the snap popover's
|
|
179
|
+
caret, `xs`) still gets one. */
|
|
180
|
+
--vgai-tool-glyph-size: var(--vgai-icon-2xl);
|
|
181
|
+
--vgai-icon-sm: var(--vgai-tool-glyph-size);
|
|
182
|
+
--vgai-icon-md: var(--vgai-tool-glyph-size);
|
|
183
|
+
/* The rail is EXACTLY one tool wide: the tool's own boundary is inside its
|
|
184
|
+
border box now, so nothing is added for it here — a rail wider than its
|
|
185
|
+
tools showed a sliver of viewport down both sides of the column. */
|
|
186
|
+
width: var(--vgai-tool-width, 40px);
|
|
187
|
+
align-items: stretch;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* One TOOL, stated once: every icon button on the rail is the shelf's tool
|
|
191
|
+
size, whatever shape its own surface gave it. The transform strip's
|
|
192
|
+
segments are `control + 12px` wide because a ROW of them reads as a
|
|
193
|
+
segmented capsule; in a column that extra width is what made the strip's
|
|
194
|
+
buttons 28 px against the mesh operators' 34 in the same rail. */
|
|
195
|
+
.vgai-dock-document-shelf .vgai-btn[data-icon="true"][data-size],
|
|
196
|
+
.vgai-dock-document-shelf .vgai-floating-toolbar .vgai-btn[data-icon="true"][data-shape] {
|
|
197
|
+
width: var(--vgai-tool-width, 40px);
|
|
198
|
+
height: var(--vgai-tool-size, 36px);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* The strip's own inline padding is ROW geometry — in the column it inset the
|
|
202
|
+
tools 4 px each side of a 38 px rail (measured live through
|
|
203
|
+
`document-script`: the strip computed `0px 4px`, its tooltip anchors 30 px,
|
|
204
|
+
and every tool stretched to that). The rail IS the panel, so the strip
|
|
205
|
+
contributes no inset of its own. */
|
|
206
|
+
.vgai-dock-document-shelf .vgai-toolbar.vgai-floating-toolbar {
|
|
207
|
+
padding-inline: 0;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/* A SPLIT tool (snap and its settings) is still ONE column wide. Blender's
|
|
211
|
+
rail is a single column and its "there is more here" is a corner triangle,
|
|
212
|
+
never a second button beside the first — measured live, at the tool's own
|
|
213
|
+
width the pair ran 68 px across a 38 px rail and the caret hung outside it.
|
|
214
|
+
The primary takes the tool's width less a caret sliver. */
|
|
215
|
+
.vgai-dock-document-shelf .vgai-split-button {
|
|
216
|
+
width: var(--vgai-tool-width, 40px);
|
|
217
|
+
}
|
|
218
|
+
/* Its two halves are wrapped in tooltip anchors, so the flex items are those
|
|
219
|
+
spans, not the buttons — and the buttons inside them take the span's width
|
|
220
|
+
rather than the tool's. */
|
|
221
|
+
.vgai-dock-document-shelf .vgai-split-button > * {
|
|
222
|
+
min-width: 0;
|
|
223
|
+
flex: 1 1 auto;
|
|
224
|
+
}
|
|
225
|
+
.vgai-dock-document-shelf .vgai-split-button > * + * {
|
|
226
|
+
flex: 0 0 13px;
|
|
227
|
+
}
|
|
228
|
+
.vgai-dock-document-shelf .vgai-split-button .vgai-btn[data-icon="true"][data-size] {
|
|
229
|
+
width: auto;
|
|
230
|
+
min-width: 0;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/* THE TOOL'S OWN SURFACE. Blender's rail tool is not a ghost: measured at 2x
|
|
234
|
+
in `modeling-edit-none.png` (row y=400, and column x=25 down the strip) the
|
|
235
|
+
resting box is an opaque #272727 fill — `--vgai-widget-menu`, the same fill
|
|
236
|
+
its menu buttons take — inside a 1 px #3c3c3c boundary. Ours drew nothing
|
|
237
|
+
but a near-invisible border, which is why the rail read as glyphs scattered
|
|
238
|
+
on the viewport instead of a toolbar. The pressed tool keeps the accent it
|
|
239
|
+
already paints (`aria-pressed`), so this rule stands aside for it. */
|
|
240
|
+
/* …and its GLYPH is full-strength ink, not the ghost button's muted one.
|
|
241
|
+
MEASURED at 2x in `modeling-edit-none.png`, x 40..200 down the rail: every
|
|
242
|
+
glyph in the column peaks at (227,227,227)/(228,228,228) — the select,
|
|
243
|
+
move, rotate and scale tools EXACTLY as much as the six operator marks, so
|
|
244
|
+
this is the rail's ink and not a property of the marks' drawings. The same
|
|
245
|
+
frame set puts Blender's TEXT at the same place (viewport header 229,
|
|
246
|
+
outliner labels 229, properties 229), which is the finding: Blender does
|
|
247
|
+
not draw icons brighter than words — it draws both at its primary ink, and
|
|
248
|
+
ours drew the rail at `content.muted` #c2c2c2, 33 levels down. #c2c2c2 is
|
|
249
|
+
a real Blender ink, just the DIM one (the outliner's secondary labels). */
|
|
250
|
+
.vgai-dock-document-shelf
|
|
251
|
+
.vgai-btn[data-variant="ghost"]:not([aria-pressed="true"]):not(:disabled) {
|
|
252
|
+
background: var(--vgai-widget-menu);
|
|
253
|
+
border-color: var(--vgai-boundary-default);
|
|
254
|
+
color: var(--vgai-content-primary);
|
|
255
|
+
}
|
|
256
|
+
.vgai-dock-document-shelf
|
|
257
|
+
.vgai-btn[data-variant="ghost"]:not([aria-pressed="true"]):not(:disabled):hover {
|
|
258
|
+
background: var(--vgai-widget-menu-hover);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/* CORRECTED against the frame's own button borders (`modeling-edit-none.png`,
|
|
262
|
+
column x=25 at 2x: fills at 326..390, 393..460, 463..530, 533..599 with a
|
|
263
|
+
2 px border between them, then 16 px of plain viewport at 310..325 and
|
|
264
|
+
600..615): inside a GROUP Blender's pitch is 35 CSS px and the box is 35 —
|
|
265
|
+
the tools are CONTIGUOUS, separated only by the one pixel of border they
|
|
266
|
+
share. The 7-8 px of viewport this file first recorded between two tools is
|
|
267
|
+
the gap between GROUPS, and it appears exactly four times in a nine-tool
|
|
268
|
+
rail. So a strip's own gap is ZERO and the group gap is what the divider
|
|
269
|
+
and the shelf spend. */
|
|
270
|
+
.vgai-dock-document-shelf .vgai-floating-toolbar {
|
|
271
|
+
gap: 0;
|
|
272
|
+
}
|
|
273
|
+
/* Contiguous means ONE border between two tools, not two — in EVERY strip the
|
|
274
|
+
rail carries, which is what `.vgai-document-shelf-tools` is: a contribution's
|
|
275
|
+
own column of operators (`@vgai/blender`'s Model document, whose own
|
|
276
|
+
comment already said the host states this pitch once and here). Listed here
|
|
277
|
+
rather than restated there, because the pitch is the RAIL's: measured live
|
|
278
|
+
before this line existed, the transform group ran at Blender's 35 and the
|
|
279
|
+
six mesh operators below it at 36, two rhythms in one column. */
|
|
280
|
+
.vgai-dock-document-shelf :is(.vgai-floating-toolbar, .vgai-document-shelf-tools) > * + * {
|
|
281
|
+
margin-block-start: calc(-1 * var(--vgai-stroke-resting));
|
|
282
|
+
}
|
|
283
|
+
/* A divider inside the rail IS the group gap. The strip draws it as a 1x16
|
|
284
|
+
vertical rule because it was authored for a ROW; in the column Blender
|
|
285
|
+
shows plain viewport there, so it becomes empty height. */
|
|
286
|
+
.vgai-dock-document-shelf .vgai-toolbar-divider {
|
|
287
|
+
width: 100%;
|
|
288
|
+
height: var(--vgai-tool-gap, var(--vgai-space-1));
|
|
289
|
+
background: none;
|
|
290
|
+
border: 0;
|
|
291
|
+
margin-block-start: 0;
|
|
292
|
+
}
|
|
293
|
+
/* …and so is the space between the rail's own groups. */
|
|
294
|
+
.vgai-dock-document-shelf {
|
|
295
|
+
gap: var(--vgai-tool-gap, var(--vgai-space-2));
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.vgai-dock-document-shelf .vgai-floating-toolbar {
|
|
299
|
+
padding: 0;
|
|
300
|
+
border: 0;
|
|
301
|
+
border-radius: 0;
|
|
302
|
+
background: none;
|
|
303
|
+
box-shadow: none;
|
|
304
|
+
backdrop-filter: none;
|
|
305
|
+
-webkit-backdrop-filter: none;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/* EVERY GROUP CASTS THE WIDGET EMBOSS, and it lands under the GROUP — which
|
|
309
|
+
is what `theme.css`'s emboss rule already says in prose ("Only stacked
|
|
310
|
+
widgets in one group escape the rule entirely… the emboss lands under the
|
|
311
|
+
GROUP") and what this rail is the first surface to actually paint.
|
|
312
|
+
MEASURED on `modeling-edit-none.png` at native 2x: the two rows under group
|
|
313
|
+
1's bottom border (device y 313-314, x 24..96) read luminance 53 against the
|
|
314
|
+
viewport's own 63, with the columns outside the group's width and the rows
|
|
315
|
+
beside its left and right edges untouched — bottom only, one CSS px, no
|
|
316
|
+
blur. `--vgai-widget-emboss-shadow` composites its 36/255 black over 63 to
|
|
317
|
+
54, one level off the frame, so this is the same token and not a second
|
|
318
|
+
number; a look that names no emboss resolves it to `none` and paints
|
|
319
|
+
exactly what it painted before.
|
|
320
|
+
|
|
321
|
+
TWO THINGS DECIDE THE SELECTOR, both measured live through the command
|
|
322
|
+
door across three cold boots rather than read off the cascade.
|
|
323
|
+
|
|
324
|
+
It has to be the rail's DIRECT children. A contributed shelf arrives inside
|
|
325
|
+
`ToolHost`'s wrapper, and that wrapper is `overflow: auto` — put the shadow
|
|
326
|
+
on the contribution's own column two levels down and the wrapper CLIPS it,
|
|
327
|
+
because the two boxes end on the same pixel (207..453 both, the last
|
|
328
|
+
button's bottom). Computed style said `rgba(0,0,0,0.14) 0 1px 0` and the
|
|
329
|
+
capture showed nothing under the group; that gap is what named the clip.
|
|
330
|
+
|
|
331
|
+
And `> *` alone is one class, which loses BOTH ways: to the reset a dozen
|
|
332
|
+
lines above (`.vgai-dock-document-shelf .vgai-floating-toolbar {
|
|
333
|
+
box-shadow: none }`, two classes) on specificity, and to `theme.css`'s
|
|
334
|
+
`.vgai-floating-toolbar { box-shadow: var(--vgai-island-shadow, …) }` on
|
|
335
|
+
ORDER, because this sheet is imported BEFORE `theme.css` —
|
|
336
|
+
`editor-styles.css` says so and prescribes exactly this remedy, scoping the
|
|
337
|
+
rule under your own root. The rail's `role="toolbar"` is that root's own
|
|
338
|
+
declaration (`DocumentShelfRail.tsx`), not a specificity trick. */
|
|
339
|
+
.vgai-dock-document-shelf[role="toolbar"] > * {
|
|
340
|
+
box-shadow: var(--vgai-widget-emboss-shadow);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/* A viewport toolbar that used to position ITSELF over the stage sits
|
|
344
|
+
in-flow once the rail carries it: the rail is the positioned thing now. */
|
|
345
|
+
.vgai-dock-document-shelf .vgai-viewport-toolbar {
|
|
346
|
+
position: static;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/* The document's OWN header keeps the leading, full-width part of the row,
|
|
350
|
+
so a header that right-aligns its controls (the Game document's) still
|
|
351
|
+
reaches the trailing edge when it is alone; the host's 3D controls, when
|
|
352
|
+
present, take only their content width beside it. */
|
|
353
|
+
.vgai-dock-document-toolbar-own {
|
|
354
|
+
flex: 1 1 auto;
|
|
355
|
+
min-width: 0;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/* THE HEADER'S TRANSFORM CONTROLS (`TransformHeaderControls`) — orientation,
|
|
359
|
+
pivot, snap and transform options, which are HEADER controls in Blender's 3D
|
|
360
|
+
viewport and rode our tool shelf until 2026-09-18. Like the 3D controls
|
|
361
|
+
beside them these are a plain in-flow group inside the strip, so they drop
|
|
362
|
+
the toolbar recipe's own band (its bottom rule) and keep only the
|
|
363
|
+
grouping.
|
|
364
|
+
|
|
365
|
+
The GAP is measured, not chosen: on the native 2x `modeling.png` at row
|
|
366
|
+
y=62 Blender's four wells (orientation x 1171..1322, pivot 1335..1396, snap
|
|
367
|
+
1409..1510, proportional editing 1523..1624) are separated by exactly 12
|
|
368
|
+
device px of bare header — 6 CSS px, which is `space-3`. Compounded with
|
|
369
|
+
`.vgai-toolbar` because theme.css declares the recipe LATER at the same
|
|
370
|
+
specificity (the precedent is `Object3DDocumentToolbar.css`'s own header
|
|
371
|
+
note): measured through `editor.document.query`, the uncompounded rule lost
|
|
372
|
+
and the row computed `gap: 4px`. Only the two declarations that WIN are
|
|
373
|
+
here: the compact recipe's own `padding-inline` and `min-height` outrank
|
|
374
|
+
even the compound (an attribute selector on top of the class), and both are
|
|
375
|
+
right for this row anyway — 4px of inset separates the cluster from the 3D
|
|
376
|
+
controls beside it, and the min-height already resolves to the density's
|
|
377
|
+
20px control. */
|
|
378
|
+
.vgai-toolbar.vgai-transform-header-controls {
|
|
379
|
+
flex: 0 0 auto;
|
|
380
|
+
gap: var(--vgai-space-3);
|
|
381
|
+
border: 0;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
.vgai-toolbar.vgai-transform-header-controls > * {
|
|
385
|
+
flex: 0 0 auto;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/* The orientation dropdown carries its LABEL, the way Blender's `Global v`
|
|
389
|
+
does (`Toolbar.tsx`'s `TransformOrientationButton` has the measurement).
|
|
390
|
+
Same three-part row as the model toolbar's own labelled triggers beside it:
|
|
391
|
+
glyph, word, chevron. */
|
|
392
|
+
.vgai-transform-orientation-trigger {
|
|
393
|
+
display: inline-flex;
|
|
394
|
+
align-items: center;
|
|
395
|
+
gap: var(--vgai-space-1);
|
|
396
|
+
white-space: nowrap;
|
|
397
|
+
}
|
|
398
|
+
/* Apple-style material assignment for persistent, text-heavy tool panels.
|
|
399
|
+
Clear glass remains the compact navigation/control material; Hierarchy,
|
|
400
|
+
Inspector, Assets, Agent, and utility panels use ONE Regular surface at
|
|
401
|
+
their portal host. Regular applies the theme's strongest frost plus a
|
|
402
|
+
low-alpha, continuously sampled luminosity correction: dark scenery is
|
|
403
|
+
lifted and bright scenery is dimmed without an opaque panel fill.
|
|
404
|
+
The portal IS the host now: a utility is rendered into one element the
|
|
405
|
+
frame handed over, so the material is assigned to that element directly. */
|
|
406
|
+
[data-vgai-chrome="islands"] .vgai-regular-panel-portal {
|
|
407
|
+
color: var(--vgai-content-primary);
|
|
408
|
+
text-shadow: var(--vgai-content-text-shadow, none);
|
|
409
|
+
background: var(
|
|
410
|
+
--vgai-glass-regular-panel-adaptive-bg,
|
|
411
|
+
var(--vgai-glass-regular-panel-bg, var(--vgai-surface-panel))
|
|
412
|
+
);
|
|
413
|
+
backdrop-filter: var(--vgai-glass-regular-panel-backdrop-filter, none);
|
|
414
|
+
-webkit-backdrop-filter: var(--vgai-glass-regular-panel-backdrop-filter, none);
|
|
415
|
+
border-color: color-mix(in srgb, var(--vgai-content-primary) 22%, transparent);
|
|
416
|
+
}
|
|
417
|
+
/* The Regular host already owns the 24px body frost. Semantic content floors
|
|
418
|
+
get the stronger adaptive luminosity correction, not a nested glass/filter
|
|
419
|
+
layer. The host's SVG chain still deepens blur toward the glass body. */
|
|
420
|
+
[data-vgai-chrome="islands"] .vgai-regular-panel-portal .vgai-content-frost {
|
|
421
|
+
background: var(
|
|
422
|
+
--vgai-glass-regular-content-adaptive-bg,
|
|
423
|
+
var(--vgai-content-frost-bg, transparent)
|
|
424
|
+
);
|
|
425
|
+
backdrop-filter: none;
|
|
426
|
+
-webkit-backdrop-filter: none;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/* A utility is always mounted and lives in a render portal, so that portal
|
|
430
|
+
owns the Regular material. Utility content may still use
|
|
431
|
+
EditorSurface for layout, but it must not repaint an opaque panel over that
|
|
432
|
+
shared adaptive host. */
|
|
433
|
+
.vgai-regular-panel-portal > .vgai-surface {
|
|
434
|
+
background: transparent;
|
|
435
|
+
}
|
|
436
|
+
.vgai-dock-document,
|
|
437
|
+
.vgai-dock-document-content,
|
|
438
|
+
.vgai-dock-document-toolbar {
|
|
439
|
+
background: transparent;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/* ---- Play-mode entry/exit transition (play-transition.ts). ----------------
|
|
443
|
+
The chrome dissolve is pure GPU compositing (opacity/transform/filter) on
|
|
444
|
+
the chrome elements; no layout animates — a part leaves layout only AFTER
|
|
445
|
+
it is invisible. Material stays the
|
|
446
|
+
theme's own glass vocabulary (the elements already carry the card/group
|
|
447
|
+
paint); the dissolve only thins it to nothing: a brief brightness bloom,
|
|
448
|
+
blur ramp, slight scale-down, and a short slide toward the panel's own
|
|
449
|
+
nearest edge (--vgai-play-dx/dy, assigned per element by
|
|
450
|
+
`live-transition.ts` with a per-edge stagger). */
|
|
451
|
+
|
|
452
|
+
@keyframes vgai-play-dissolve {
|
|
453
|
+
0% {
|
|
454
|
+
opacity: 1;
|
|
455
|
+
transform: none;
|
|
456
|
+
filter: blur(0) brightness(1);
|
|
457
|
+
}
|
|
458
|
+
42% {
|
|
459
|
+
opacity: 1;
|
|
460
|
+
transform: translate(var(--vgai-play-dx, 0px), var(--vgai-play-dy, 0px)) scale(0.985);
|
|
461
|
+
filter: blur(2px) brightness(1.06);
|
|
462
|
+
}
|
|
463
|
+
100% {
|
|
464
|
+
opacity: 0;
|
|
465
|
+
transform: translate(var(--vgai-play-dx, 0px), var(--vgai-play-dy, 0px)) scale(0.985);
|
|
466
|
+
filter: blur(8px) brightness(1);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
@keyframes vgai-play-materialize {
|
|
471
|
+
0% {
|
|
472
|
+
opacity: 0;
|
|
473
|
+
transform: translate(var(--vgai-play-dx, 0px), var(--vgai-play-dy, 0px)) scale(0.985);
|
|
474
|
+
filter: blur(6px) brightness(1.02);
|
|
475
|
+
}
|
|
476
|
+
100% {
|
|
477
|
+
opacity: 1;
|
|
478
|
+
transform: none;
|
|
479
|
+
filter: blur(0) brightness(1);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
.vgai-play-chrome-exit,
|
|
484
|
+
.vgai-play-chrome-enter {
|
|
485
|
+
--vgai-play-dx: 0px;
|
|
486
|
+
--vgai-play-dy: 0px;
|
|
487
|
+
--vgai-play-stagger: 0ms;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
/* The DURATIONS below are not written here. `play-transition.ts` owns them
|
|
491
|
+
(`PLAY_DISSOLVE_MS` / `PLAY_MATERIALIZE_MS` / `PLAY_CROSSFADE_MS`) because
|
|
492
|
+
the same numbers are its JS timers, and publishes them onto the document
|
|
493
|
+
element when the dock installs — the same way `--vgai-play-stagger` below
|
|
494
|
+
already arrives from `PLAY_DISSOLVE_STAGGER_MS`. There is no fallback on
|
|
495
|
+
purpose: a fallback would be the second copy this removes, and nothing can
|
|
496
|
+
add these classes before the module that publishes the properties is live. */
|
|
497
|
+
.vgai-play-chrome-exit {
|
|
498
|
+
animation: vgai-play-dissolve var(--vgai-play-dissolve-duration) var(--vgai-ease-standard) both;
|
|
499
|
+
animation-delay: var(--vgai-play-stagger, 0ms);
|
|
500
|
+
pointer-events: none;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/* Re-materialize immediately: entrance is deliberately unstaggered so an
|
|
504
|
+
explicit reveal never waits behind the cinematic play-entry cadence. */
|
|
505
|
+
.vgai-play-chrome-enter {
|
|
506
|
+
animation: vgai-play-materialize var(--vgai-play-materialize-duration) var(--vgai-ease-standard)
|
|
507
|
+
both;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/* ---- Non-dock chrome dissolve + GLOBAL edge reveal. While play owns the
|
|
511
|
+
screen the THEME ROOT carries `data-vgai-play-chrome="hidden"`: the Game
|
|
512
|
+
document toolbar (Device/resolution/shading/stats island), the
|
|
513
|
+
capture-frame button, and the bottom bar (status + session tray) dissolve
|
|
514
|
+
with the rest of the chrome. A pointer dwell at ANY screen edge sets
|
|
515
|
+
`data-vgai-play-revealed` on the theme root and ALL of it slides back in
|
|
516
|
+
together — alongside the project header (ProjectHeader.css) and the panel
|
|
517
|
+
overlays above. `visibility` gates interactivity so hidden chrome can
|
|
518
|
+
never swallow game input. */
|
|
519
|
+
.vgai-dock-document-toolbar,
|
|
520
|
+
.vgai-editor-bottom-bar {
|
|
521
|
+
transition:
|
|
522
|
+
transform var(--vgai-duration-slow) var(--vgai-ease-standard),
|
|
523
|
+
opacity var(--vgai-duration-slow) var(--vgai-ease-standard);
|
|
524
|
+
}
|
|
525
|
+
[data-vgai-play-chrome="hidden"] .vgai-dock-document-toolbar:not([data-runtime-toolbar]) {
|
|
526
|
+
opacity: 0;
|
|
527
|
+
visibility: hidden;
|
|
528
|
+
transform: translateY(-10px);
|
|
529
|
+
pointer-events: none;
|
|
530
|
+
transition:
|
|
531
|
+
transform var(--vgai-duration-base) var(--vgai-ease-standard),
|
|
532
|
+
opacity var(--vgai-duration-base) var(--vgai-ease-standard) 100ms,
|
|
533
|
+
visibility 0s linear 280ms;
|
|
534
|
+
}
|
|
535
|
+
[data-vgai-play-chrome="hidden"] .vgai-editor-bottom-bar {
|
|
536
|
+
opacity: 0;
|
|
537
|
+
visibility: hidden;
|
|
538
|
+
transform: translateY(calc(100% + 8px));
|
|
539
|
+
pointer-events: none;
|
|
540
|
+
transition:
|
|
541
|
+
transform var(--vgai-duration-base) var(--vgai-ease-standard),
|
|
542
|
+
opacity var(--vgai-duration-base) var(--vgai-ease-standard) 100ms,
|
|
543
|
+
visibility 0s linear 280ms;
|
|
544
|
+
}
|
|
545
|
+
[data-vgai-play-chrome="hidden"][data-vgai-play-revealed] .vgai-dock-document-toolbar,
|
|
546
|
+
[data-vgai-play-chrome="hidden"][data-vgai-play-revealed] .vgai-editor-bottom-bar {
|
|
547
|
+
opacity: 1;
|
|
548
|
+
visibility: visible;
|
|
549
|
+
transform: none;
|
|
550
|
+
pointer-events: auto;
|
|
551
|
+
transition:
|
|
552
|
+
transform var(--vgai-duration-base) var(--vgai-ease-standard),
|
|
553
|
+
opacity var(--vgai-duration-fast) var(--vgai-ease-standard),
|
|
554
|
+
visibility 0s;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
/* ---- Restart-required pill. An unsafe script edit during play flips the
|
|
558
|
+
transport's Restart Game button to primary — but the transport is
|
|
559
|
+
dissolved, so the state needs a surface of its own while the chrome is
|
|
560
|
+
concealed. Same treatment-driven island material as every toolstrip
|
|
561
|
+
(PlayPanelOverlays adds the island classes); this block only places it
|
|
562
|
+
and gates its visibility. Deliberately subtle: small type, secondary
|
|
563
|
+
ink, a soft drop-in. When the chrome is revealed the header's own
|
|
564
|
+
Restart button is the affordance, so the pill yields. */
|
|
565
|
+
.vgai-glass-island.vgai-play-restart-pill {
|
|
566
|
+
position: fixed;
|
|
567
|
+
top: 14px;
|
|
568
|
+
left: 50%;
|
|
569
|
+
z-index: 40;
|
|
570
|
+
display: none;
|
|
571
|
+
align-items: center;
|
|
572
|
+
gap: var(--vgai-space-2);
|
|
573
|
+
padding: 6px 14px;
|
|
574
|
+
border-radius: var(--vgai-radius-full);
|
|
575
|
+
font: inherit;
|
|
576
|
+
font-size: var(--vgai-font-md);
|
|
577
|
+
line-height: var(--vgai-leading-tight);
|
|
578
|
+
color: var(--vgai-content-muted);
|
|
579
|
+
cursor: pointer;
|
|
580
|
+
}
|
|
581
|
+
/* Scoped to the THEME root: the dock root carries the play-chrome flag too
|
|
582
|
+
but never the reveal attribute, so an unscoped :not() would match it and
|
|
583
|
+
keep the pill up over the revealed chrome. */
|
|
584
|
+
.vgai-editor-theme[data-vgai-play-chrome="hidden"]:not([data-vgai-play-revealed])
|
|
585
|
+
.vgai-glass-island.vgai-play-restart-pill {
|
|
586
|
+
display: flex;
|
|
587
|
+
animation: vgai-restart-pill-in var(--vgai-duration-slow) var(--vgai-ease-standard) both;
|
|
588
|
+
}
|
|
589
|
+
.vgai-glass-island.vgai-play-restart-pill:hover {
|
|
590
|
+
color: var(--vgai-content-primary);
|
|
591
|
+
}
|
|
592
|
+
@keyframes vgai-restart-pill-in {
|
|
593
|
+
from {
|
|
594
|
+
opacity: 0;
|
|
595
|
+
transform: translate(-50%, -8px);
|
|
596
|
+
}
|
|
597
|
+
to {
|
|
598
|
+
opacity: 1;
|
|
599
|
+
transform: translate(-50%, 0);
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
/* Reduced motion: every play-transition animation collapses to an instant
|
|
604
|
+
state change with the same end state. */
|
|
605
|
+
@media (prefers-reduced-motion: reduce) {
|
|
606
|
+
.vgai-play-chrome-exit,
|
|
607
|
+
.vgai-play-chrome-enter,
|
|
608
|
+
.vgai-editor-theme[data-vgai-play-chrome="hidden"]:not([data-vgai-play-revealed])
|
|
609
|
+
.vgai-glass-island.vgai-play-restart-pill {
|
|
610
|
+
animation: none;
|
|
611
|
+
}
|
|
612
|
+
.vgai-play-chrome-exit {
|
|
613
|
+
opacity: 0;
|
|
614
|
+
}
|
|
615
|
+
.vgai-dock-document-toolbar,
|
|
616
|
+
.vgai-editor-bottom-bar,
|
|
617
|
+
[data-vgai-play-chrome="hidden"] .vgai-dock-document-toolbar,
|
|
618
|
+
[data-vgai-play-chrome="hidden"] .vgai-editor-bottom-bar {
|
|
619
|
+
transition: none;
|
|
620
|
+
}
|
|
621
|
+
}
|