@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,617 @@
|
|
|
1
|
+
.vgai-project-header {
|
|
2
|
+
position: relative;
|
|
3
|
+
display: flex;
|
|
4
|
+
height: var(--vgai-command-bar-height);
|
|
5
|
+
flex: 0 0 auto;
|
|
6
|
+
align-items: center;
|
|
7
|
+
/* THE SHELL BANDS INSET THEIR CONTENT 6, at both ends, and two independent
|
|
8
|
+
measurements on Blender 5.2 agree to the pixel: the app mark's ink starts
|
|
9
|
+
at CSS 6.0 in `topbar.png`, and the first mouse hint's glyph starts at CSS
|
|
10
|
+
6.0 in `modeling.png`'s status bar — the band at the other end of the same
|
|
11
|
+
window. The trailing edge is the same number from the other side: the
|
|
12
|
+
ViewLayer selector's outer border sits at CSS 1722.75 of 1728, so 5.25.
|
|
13
|
+
`space-4` (8) put our right cluster 2.75 too far in from an edge a person
|
|
14
|
+
throws the pointer at; `space-3` is 6. */
|
|
15
|
+
padding: 0 var(--vgai-space-3);
|
|
16
|
+
color: var(--vgai-content-primary);
|
|
17
|
+
/* THE SHELL, not chrome. The top bar is the window's own outermost band —
|
|
18
|
+
measured in Blender 5.2 it is #171717, the same value as the status bar
|
|
19
|
+
at the other end of the window, while an AREA header (which our document
|
|
20
|
+
toolbar already matches) is #343434. `surface-chrome` painted it #1c1c1c
|
|
21
|
+
under the Blender skin, one step too light, which cost the bar its job of
|
|
22
|
+
framing everything between the two shell bands. */
|
|
23
|
+
background: var(--vgai-surface-shell);
|
|
24
|
+
/* The seam under the shell band is an AREA seam, not a widget outline, so
|
|
25
|
+
it takes `boundary.area` — measured in Blender 5.2 as a DARK groove
|
|
26
|
+
(#151515) where ours drew a light #3c3c3c hairline, i.e. the inversion
|
|
27
|
+
that made the window read as bright grout between tiles. It keeps the
|
|
28
|
+
hairline WIDTH: `modeling.png` y 48..52 is 5 device px (2.5 CSS) of
|
|
29
|
+
groove against a #171717 top bar two levels off it, so there is nothing
|
|
30
|
+
there to cut — only an interior area-to-area seam is widened (see
|
|
31
|
+
`workspace-dock.css`'s sash). */
|
|
32
|
+
border-bottom: var(--vgai-stroke-resting) solid var(--vgai-boundary-area);
|
|
33
|
+
font-size: var(--vgai-font-base);
|
|
34
|
+
pointer-events: auto;
|
|
35
|
+
user-select: none;
|
|
36
|
+
box-sizing: border-box;
|
|
37
|
+
}
|
|
38
|
+
.vgai-project-header-left {
|
|
39
|
+
position: relative;
|
|
40
|
+
display: flex;
|
|
41
|
+
min-width: 0;
|
|
42
|
+
flex: 1;
|
|
43
|
+
/* The column spans the band so the tab strip can take the plate geometry
|
|
44
|
+
measured above (top at 2, height 22) while every other child keeps the
|
|
45
|
+
20px control height it had when the column was content-sized. */
|
|
46
|
+
align-self: stretch;
|
|
47
|
+
align-items: center;
|
|
48
|
+
}
|
|
49
|
+
/* THE BAND'S LEADING GLYPH — Blender's app-mark slot, transcribed.
|
|
50
|
+
Measured on `topbar.png` at native 2x: the mark's INK runs device x 12..43
|
|
51
|
+
(CSS 6.0..21.5 — 16.0 wide, 13.0 tall), i.e. it starts at the band's own
|
|
52
|
+
6px inset with NO button padding in front of it, and the first menu word's
|
|
53
|
+
ink follows at CSS 32.0. The whole-frame read's "32 CSS px app mark at
|
|
54
|
+
inset 6.0 … menu words at 60" was that 32-DEVICE-px width read as CSS; the
|
|
55
|
+
frame says 16 and 32.
|
|
56
|
+
|
|
57
|
+
So: no padding, no pill, no chevron, and the glyph left-aligned in its box
|
|
58
|
+
so its ink begins at the inset instead of one padding-width inside it.
|
|
59
|
+
`.vgai-menu-trigger`'s 8px inline padding is what put our leading ink at
|
|
60
|
+
14.5.
|
|
61
|
+
|
|
62
|
+
TWO CLASSES, not one, and the second is load-bearing: `.vgai-menu-trigger`
|
|
63
|
+
in theme.css declares `padding: 0 var(--vgai-space-4)` at the SAME
|
|
64
|
+
specificity and lands LATER in the cascade than this sheet, so the
|
|
65
|
+
single-class version of this rule lost silently — measured, not reasoned:
|
|
66
|
+
the glyph stayed at x 14.0 with `padding: 0` resolving correctly on that
|
|
67
|
+
very element. Same failure the tab-strip divider hit (PR #7341). */
|
|
68
|
+
.vgai-menu-trigger.vgai-project-trigger {
|
|
69
|
+
position: relative;
|
|
70
|
+
display: flex;
|
|
71
|
+
/* 14, not 16: the glyph's own svg is 1.25em wide (17.5 at this skin's 14px
|
|
72
|
+
icon rung) and letterboxes its square viewBox to a 14x14 drawing, so a
|
|
73
|
+
16px box would centre a 14px ink and start it at 7.0. At 14 the ink's
|
|
74
|
+
left edge IS the box's, i.e. the band's 6.0 inset — measured, not
|
|
75
|
+
reasoned. */
|
|
76
|
+
width: 14px;
|
|
77
|
+
min-width: 0;
|
|
78
|
+
align-items: center;
|
|
79
|
+
justify-content: flex-start;
|
|
80
|
+
padding: 0;
|
|
81
|
+
overflow: visible;
|
|
82
|
+
white-space: nowrap;
|
|
83
|
+
}
|
|
84
|
+
/* IDENTITY'S READABLE HOME (see ProjectHeader.tsx): the glyph's menu opens on
|
|
85
|
+
the project's own name, the row Blender keeps in the OS title bar. */
|
|
86
|
+
.vgai-project-menu-name {
|
|
87
|
+
display: block;
|
|
88
|
+
max-width: 320px;
|
|
89
|
+
padding: var(--vgai-space-3) var(--vgai-space-4) var(--vgai-space-1);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* THE ROW OF WORDS IS ONE INK, and it is the bar's loudest. Measured on
|
|
93
|
+
Blender 5.2's `topbar.png` at native 2x: the app mark and every menu word —
|
|
94
|
+
File, Edit, Render, Window, Help — plateau at #d8d8d8 (216), while the
|
|
95
|
+
Scene and ViewLayer field labels at the other end of the same bar plateau
|
|
96
|
+
at #e5e5e5 (229) and the INACTIVE workspace tab at #979797 (151). Three
|
|
97
|
+
levels, and the ordering is what matters: menu words sit ABOVE the palette's
|
|
98
|
+
`content.muted` (#c2c2c2 / 194, which is measured as the OUTLINER ROW's ink
|
|
99
|
+
— theme.css), not level with it.
|
|
100
|
+
|
|
101
|
+
THE 216 HAS A HOME NOW. It was recorded here as a homeless measured ink and
|
|
102
|
+
an override to `content.primary` stood in for it; the palette inventory
|
|
103
|
+
settled the member (`content.menu`), and the word rule moved to
|
|
104
|
+
`.vgai-menu-trigger` itself in theme.css — which is where the split lived,
|
|
105
|
+
because the area header's words inherited the base ink and only this end
|
|
106
|
+
was overridden. Nothing here paints a menu word any more.
|
|
107
|
+
|
|
108
|
+
WHAT STAYS: the trailing GHOST BUTTONS, which are not menu words. Blender's
|
|
109
|
+
far end of the top bar carries the Scene and ViewLayer field labels at
|
|
110
|
+
#e5e5e5 (229), and `content.primary` is that ink. */
|
|
111
|
+
.vgai-project-header-right .vgai-btn[data-variant="ghost"] {
|
|
112
|
+
color: var(--vgai-content-primary);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* NOTHING IN BLENDER'S TOP BAR IS BOLD. The project name rendered at
|
|
116
|
+
`variant="label"`'s weight 600 — the single heaviest text in the window —
|
|
117
|
+
where Blender's heaviest top-bar text is its ACTIVE workspace tab at
|
|
118
|
+
regular weight and 255 ink. Same correction, and the same reason, as the
|
|
119
|
+
Properties panel bands (weight 600 -> 400, PR #7241: cap height was already
|
|
120
|
+
right and the WEIGHT was the whole difference). The variant keeps its size
|
|
121
|
+
rung; only the weight is overridden, and only here. Scoped to the whole
|
|
122
|
+
leading cluster rather than the project trigger alone: the name itself is
|
|
123
|
+
a glyph now, and the next label that lands in this band must not reopen
|
|
124
|
+
the defect. */
|
|
125
|
+
.vgai-project-header-left .vgai-text[data-variant="label"] {
|
|
126
|
+
font-weight: 400;
|
|
127
|
+
}
|
|
128
|
+
.vgai-project-app-menus,
|
|
129
|
+
.vgai-project-transport {
|
|
130
|
+
flex: 0 0 auto;
|
|
131
|
+
}
|
|
132
|
+
.vgai-project-menu {
|
|
133
|
+
position: absolute;
|
|
134
|
+
top: 100%;
|
|
135
|
+
left: 0;
|
|
136
|
+
min-width: 190px;
|
|
137
|
+
margin-top: var(--vgai-space-1);
|
|
138
|
+
}
|
|
139
|
+
.vgai-project-path {
|
|
140
|
+
display: block;
|
|
141
|
+
max-width: 320px;
|
|
142
|
+
padding: var(--vgai-space-2) var(--vgai-space-4);
|
|
143
|
+
}
|
|
144
|
+
.vgai-project-versions {
|
|
145
|
+
display: grid;
|
|
146
|
+
grid-template-columns: 1fr auto;
|
|
147
|
+
gap: var(--vgai-space-2) var(--vgai-space-6);
|
|
148
|
+
padding: var(--vgai-space-3) var(--vgai-space-4) var(--vgai-space-4);
|
|
149
|
+
color: var(--vgai-content-dim);
|
|
150
|
+
font-size: var(--vgai-font-sm);
|
|
151
|
+
}
|
|
152
|
+
.vgai-project-header-right {
|
|
153
|
+
min-width: 0;
|
|
154
|
+
flex: 1;
|
|
155
|
+
gap: var(--vgai-space-2);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/* A narrow editor is still a full editor. Keep menu and transport controls
|
|
159
|
+
at their normal size, giving them rows instead of overlapping columns. */
|
|
160
|
+
@media (max-width: 680px) {
|
|
161
|
+
.vgai-project-header {
|
|
162
|
+
height: auto;
|
|
163
|
+
min-height: var(--vgai-command-bar-height);
|
|
164
|
+
flex-wrap: wrap;
|
|
165
|
+
gap: var(--vgai-space-2) var(--vgai-space-4);
|
|
166
|
+
padding-block: 4px;
|
|
167
|
+
}
|
|
168
|
+
.vgai-project-header-left {
|
|
169
|
+
flex: 1 1 100%;
|
|
170
|
+
}
|
|
171
|
+
/* The cluster used to take `flex: 1; justify-content: space-between` here,
|
|
172
|
+
spreading the glyph, the switcher and the menu words across the full row.
|
|
173
|
+
It was written before the WORKSPACE TAB STRIP shared that row, and a
|
|
174
|
+
growable-and-shrinkable cluster beside the strip is exactly the squeeze
|
|
175
|
+
the rule below this media block exists to stop — so the cluster is
|
|
176
|
+
content-sized at every width now and the strip takes what is left. */
|
|
177
|
+
.vgai-project-header-right {
|
|
178
|
+
flex: 1 1 auto;
|
|
179
|
+
flex-wrap: wrap;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* Runtime telemetry is one compact header instrument: instantaneous audio
|
|
184
|
+
magnitude uses discrete VU segments, while performance uses a historical
|
|
185
|
+
line. Shape carries the distinction even without semantic color. */
|
|
186
|
+
.vgai-header-telemetry {
|
|
187
|
+
min-width: 0;
|
|
188
|
+
flex: 0 0 auto;
|
|
189
|
+
overflow: visible;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.vgai-header-telemetry-button.vgai-btn {
|
|
193
|
+
min-width: 0;
|
|
194
|
+
/* THE LITERAL THAT OUTRANKED THE MATERIAL. A hard 28px made the telemetry
|
|
195
|
+
capsule the only member of the top bar that is not control height, so it
|
|
196
|
+
overhung a 26px bar by 2px and the right cluster read as loose islands
|
|
197
|
+
instead of one row. Every other control in this bar takes the skin's
|
|
198
|
+
compact height (Blender's skin sets all three to 20). */
|
|
199
|
+
height: var(--vgai-control-compact-height);
|
|
200
|
+
gap: var(--vgai-space-2);
|
|
201
|
+
padding-inline: var(--vgai-space-2);
|
|
202
|
+
font-variant-numeric: tabular-nums;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.vgai-header-audio {
|
|
206
|
+
position: relative;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.vgai-audio-vu {
|
|
210
|
+
display: flex;
|
|
211
|
+
width: 34px;
|
|
212
|
+
height: 12px;
|
|
213
|
+
align-items: stretch;
|
|
214
|
+
gap: var(--vgai-space-1);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.vgai-audio-vu > i {
|
|
218
|
+
width: 2px;
|
|
219
|
+
flex: 1 1 0;
|
|
220
|
+
border-radius: 1px;
|
|
221
|
+
background: var(--vgai-boundary-strong);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.vgai-header-audio[data-available="true"] .vgai-audio-vu > i[data-filled="true"] {
|
|
225
|
+
background: var(--vgai-accent);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.vgai-header-audio[data-muted="true"] .vgai-audio-vu > i[data-filled="true"] {
|
|
229
|
+
background: var(--vgai-content-muted);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.vgai-header-performance {
|
|
233
|
+
border-left: var(--vgai-stroke-resting) solid var(--vgai-boundary-default);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.vgai-header-performance svg {
|
|
237
|
+
display: block;
|
|
238
|
+
overflow: visible;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.vgai-performance-graph {
|
|
242
|
+
border-radius: var(--vgai-radius-sm);
|
|
243
|
+
background: color-mix(in srgb, var(--vgai-surface-panel) 72%, transparent);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.vgai-performance-budget {
|
|
247
|
+
stroke: var(--vgai-boundary-strong);
|
|
248
|
+
stroke-dasharray: 2 2;
|
|
249
|
+
stroke-width: 1;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.vgai-performance-sparkline {
|
|
253
|
+
fill: none;
|
|
254
|
+
stroke: var(--vgai-accent);
|
|
255
|
+
stroke-linecap: round;
|
|
256
|
+
stroke-linejoin: round;
|
|
257
|
+
stroke-width: 1.5;
|
|
258
|
+
vector-effect: non-scaling-stroke;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.vgai-header-performance[data-performance-tone="warning"] .vgai-performance-sparkline,
|
|
262
|
+
.vgai-header-performance[data-performance-tone="warning"] .vgai-header-fps {
|
|
263
|
+
color: var(--vgai-warn);
|
|
264
|
+
stroke: var(--vgai-warn);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.vgai-header-performance[data-performance-tone="danger"] .vgai-performance-sparkline,
|
|
268
|
+
.vgai-header-performance[data-performance-tone="danger"] .vgai-header-fps {
|
|
269
|
+
color: var(--vgai-danger);
|
|
270
|
+
stroke: var(--vgai-danger);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.vgai-performance-readout {
|
|
274
|
+
display: grid;
|
|
275
|
+
min-width: 48px;
|
|
276
|
+
line-height: 1.05;
|
|
277
|
+
text-align: right;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.vgai-header-fps {
|
|
281
|
+
color: var(--vgai-content-primary);
|
|
282
|
+
font-family: var(--vgai-font-mono);
|
|
283
|
+
font-size: var(--vgai-font-sm);
|
|
284
|
+
font-weight: 600;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
.vgai-header-frame-ms {
|
|
288
|
+
color: var(--vgai-content-dim);
|
|
289
|
+
font-family: var(--vgai-font-mono);
|
|
290
|
+
font-size: var(--vgai-font-xs);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
@media (max-width: 1120px) {
|
|
294
|
+
.vgai-header-performance svg,
|
|
295
|
+
.vgai-audio-vu {
|
|
296
|
+
display: none;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/* Cluster wrappers (P6-U3): pure layout in bars chrome — the left wrapper
|
|
300
|
+
reproduces .vgai-project-header-left's stretch flex row exactly (no
|
|
301
|
+
align-items, so children keep stretching to the tallest sibling), the
|
|
302
|
+
right one reproduces the parent Inline's centered row + space-2 gap the
|
|
303
|
+
buttons used to get from .vgai-project-header-right directly. They exist
|
|
304
|
+
so islands chrome has a content-sized element to turn into a glass
|
|
305
|
+
island (the flex:1 side COLUMNS must keep their width — W5's transport
|
|
306
|
+
centering depends on the equal-flex geometry). */
|
|
307
|
+
.vgai-project-header-cluster {
|
|
308
|
+
display: flex;
|
|
309
|
+
min-width: 0;
|
|
310
|
+
}
|
|
311
|
+
/* THE MENU WORDS KEEP THEIR OWN WIDTH, AND THE TAB STRIP SCROLLS — Blender's
|
|
312
|
+
own top bar, transcribed.
|
|
313
|
+
|
|
314
|
+
MEASURED on the model editor release at 1280 CSS px: `Help` ran x 258..298
|
|
315
|
+
and the `Model` workspace tab x 268..320, a 30px overlap; at 1728 the same
|
|
316
|
+
pair had a 17px gap. The cause is here and not in the strip: this cluster
|
|
317
|
+
took flex's default `0 1 auto`, so the leading column's squeeze SHRANK ITS
|
|
318
|
+
BOX while `.vgai-project-app-menus` inside it kept `flex: 0 0 auto` and
|
|
319
|
+
simply overflowed — the tabs were then laid out against a box narrower than
|
|
320
|
+
the words it contained.
|
|
321
|
+
|
|
322
|
+
Blender never squeezes its menus: its top bar keeps File…Help at full width
|
|
323
|
+
and SCROLLS the workspace tab row when the window is too narrow for both.
|
|
324
|
+
So the cluster never shrinks (here) and the strip takes the remainder and
|
|
325
|
+
scrolls (`.vgai-workspace-tabs` below). No JS, no measurement, no state —
|
|
326
|
+
two flex declarations and the browser's own overflow. */
|
|
327
|
+
.vgai-project-header-left .vgai-project-header-cluster {
|
|
328
|
+
flex: 0 0 auto;
|
|
329
|
+
}
|
|
330
|
+
.vgai-project-header-right .vgai-project-header-cluster {
|
|
331
|
+
align-items: center;
|
|
332
|
+
gap: var(--vgai-space-2);
|
|
333
|
+
}
|
|
334
|
+
/* P6-U3 — islands chrome: no header BAR. The row keeps its
|
|
335
|
+
--vgai-command-bar-height slot (the dock geometry below depends on it)
|
|
336
|
+
but loses fill/border and all pointer
|
|
337
|
+
handling; the three clusters become 38px glass islands hung 8px from the
|
|
338
|
+
top edge (the P6 reference toolbar geometry — they overhang the 36px row
|
|
339
|
+
into the workspace, which is why the row is lifted to the sticky tier
|
|
340
|
+
like the bottom bar). Island material arrives via the shared
|
|
341
|
+
.vgai-chrome-island rule in theme.css. */
|
|
342
|
+
[data-vgai-chrome="islands"] .vgai-project-header {
|
|
343
|
+
z-index: var(--vgai-z-sticky);
|
|
344
|
+
align-items: flex-start;
|
|
345
|
+
padding-top: var(--vgai-space-4);
|
|
346
|
+
background: transparent;
|
|
347
|
+
border-bottom-color: transparent;
|
|
348
|
+
pointer-events: none;
|
|
349
|
+
}
|
|
350
|
+
/* FULL-BLEED (owner: "black bar at the top in glass FLOAT mode"): the
|
|
351
|
+
transparent row must not consume layout height with nothing behind it —
|
|
352
|
+
it OVERLAYS the workspace, so the scene runs edge-to-edge underneath the
|
|
353
|
+
islands (the macOS model: content under floating chrome). The shell
|
|
354
|
+
column reflows the dock to the top. Scoped to a BACKDROP document
|
|
355
|
+
(U5 regression fix, spec 69 case D): in a tiled arrangement under glass the
|
|
356
|
+
grid columns own the full workspace height, and an absolute header overlay
|
|
357
|
+
buried their top tab strips — a drag on the Inspector tab pressed the
|
|
358
|
+
header's Export island instead. Tiles + islands keeps the in-flow
|
|
359
|
+
transparent row. */
|
|
360
|
+
[data-vgai-chrome="islands"]
|
|
361
|
+
.vgai-editor-shell:has(.vgai-workspace-dock[data-vgai-backdrop])
|
|
362
|
+
.vgai-project-header {
|
|
363
|
+
position: absolute;
|
|
364
|
+
top: 0;
|
|
365
|
+
left: 0;
|
|
366
|
+
right: 0;
|
|
367
|
+
}
|
|
368
|
+
[data-vgai-chrome="islands"] .vgai-project-header .vgai-chrome-island {
|
|
369
|
+
height: 38px;
|
|
370
|
+
align-items: center;
|
|
371
|
+
padding: 0 var(--vgai-space-3);
|
|
372
|
+
}
|
|
373
|
+
/* The project dropdown anchors to the left flex COLUMN (a sibling of the
|
|
374
|
+
island, so the island's backdrop-filter never becomes its backdrop
|
|
375
|
+
root); the column sits under the row's pointer-events:none and must
|
|
376
|
+
restore its own. */
|
|
377
|
+
[data-vgai-chrome="islands"] .vgai-project-menu {
|
|
378
|
+
pointer-events: auto;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/* Play-mode chrome dissolve (play-transition.ts): runtime telemetry is the
|
|
382
|
+
one persistent part of the command header. The row still collapses so the
|
|
383
|
+
game is full-bleed; its authoring/transport/account clusters dissolve, while
|
|
384
|
+
the telemetry escapes as a fixed compact instrument. Edge reveal restores
|
|
385
|
+
the real header and returns telemetry to its ordinary trailing position. */
|
|
386
|
+
.vgai-project-header {
|
|
387
|
+
transition: margin-top var(--vgai-duration-slow) var(--vgai-ease-standard);
|
|
388
|
+
}
|
|
389
|
+
[data-vgai-play-chrome="hidden"] .vgai-project-header {
|
|
390
|
+
margin-top: calc(-1 * var(--vgai-command-bar-height));
|
|
391
|
+
background: transparent;
|
|
392
|
+
border-bottom-color: transparent;
|
|
393
|
+
pointer-events: none;
|
|
394
|
+
transition: margin-top var(--vgai-duration-base) var(--vgai-ease-standard);
|
|
395
|
+
}
|
|
396
|
+
[data-vgai-play-chrome="hidden"] .vgai-project-header-left,
|
|
397
|
+
[data-vgai-play-chrome="hidden"] .vgai-project-transport,
|
|
398
|
+
[data-vgai-play-chrome="hidden"] .vgai-project-header-right > :not(.vgai-header-telemetry) {
|
|
399
|
+
transform: translateY(calc(-100% - 12px));
|
|
400
|
+
opacity: 0;
|
|
401
|
+
visibility: hidden;
|
|
402
|
+
pointer-events: none;
|
|
403
|
+
transition:
|
|
404
|
+
transform var(--vgai-duration-base) var(--vgai-ease-standard),
|
|
405
|
+
opacity var(--vgai-duration-base) var(--vgai-ease-standard) 100ms,
|
|
406
|
+
visibility 0s linear 280ms;
|
|
407
|
+
}
|
|
408
|
+
[data-vgai-play-chrome="hidden"] .vgai-header-telemetry {
|
|
409
|
+
position: fixed;
|
|
410
|
+
top: 12px;
|
|
411
|
+
right: 12px;
|
|
412
|
+
z-index: var(--vgai-z-sticky);
|
|
413
|
+
height: 32px;
|
|
414
|
+
padding: 0 var(--vgai-space-2);
|
|
415
|
+
border: var(--vgai-stroke-resting) solid var(--vgai-boundary-default);
|
|
416
|
+
border-radius: var(--vgai-radius-lg);
|
|
417
|
+
background: var(--vgai-surface-chrome);
|
|
418
|
+
box-shadow: var(--vgai-shadow-sm);
|
|
419
|
+
pointer-events: auto;
|
|
420
|
+
}
|
|
421
|
+
[data-vgai-play-chrome="hidden"][data-vgai-play-revealed] .vgai-project-header {
|
|
422
|
+
margin-top: 0;
|
|
423
|
+
/* Restores the resting paint above — keep the two in step. */
|
|
424
|
+
background: var(--vgai-surface-shell);
|
|
425
|
+
border-bottom-color: var(--vgai-boundary-default);
|
|
426
|
+
pointer-events: auto;
|
|
427
|
+
transition: margin-top var(--vgai-duration-base) var(--vgai-ease-standard);
|
|
428
|
+
}
|
|
429
|
+
[data-vgai-play-chrome="hidden"][data-vgai-play-revealed] .vgai-project-header-left,
|
|
430
|
+
[data-vgai-play-chrome="hidden"][data-vgai-play-revealed] .vgai-project-transport,
|
|
431
|
+
[data-vgai-play-chrome="hidden"][data-vgai-play-revealed]
|
|
432
|
+
.vgai-project-header-right
|
|
433
|
+
> :not(.vgai-header-telemetry) {
|
|
434
|
+
transform: none;
|
|
435
|
+
opacity: 1;
|
|
436
|
+
visibility: visible;
|
|
437
|
+
pointer-events: auto;
|
|
438
|
+
transition:
|
|
439
|
+
transform var(--vgai-duration-base) var(--vgai-ease-standard),
|
|
440
|
+
opacity var(--vgai-duration-fast) var(--vgai-ease-standard),
|
|
441
|
+
visibility 0s;
|
|
442
|
+
}
|
|
443
|
+
[data-vgai-play-chrome="hidden"][data-vgai-play-revealed] .vgai-header-telemetry {
|
|
444
|
+
position: static;
|
|
445
|
+
height: auto;
|
|
446
|
+
padding: 0;
|
|
447
|
+
border: 0;
|
|
448
|
+
border-radius: 0;
|
|
449
|
+
background: transparent;
|
|
450
|
+
box-shadow: none;
|
|
451
|
+
}
|
|
452
|
+
@media (prefers-reduced-motion: reduce) {
|
|
453
|
+
.vgai-project-header,
|
|
454
|
+
[data-vgai-play-chrome="hidden"] .vgai-project-header,
|
|
455
|
+
[data-vgai-play-chrome="hidden"] .vgai-project-header-left,
|
|
456
|
+
[data-vgai-play-chrome="hidden"] .vgai-project-transport,
|
|
457
|
+
[data-vgai-play-chrome="hidden"] .vgai-project-header-right > * {
|
|
458
|
+
transition: none;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/* The workspace tab strip (Blender's top bar) — a region a style turns on
|
|
463
|
+
(`workspaceTabs`); the active tab wears the panel surface and joins the
|
|
464
|
+
area below it, the rest sit quiet in the bar. */
|
|
465
|
+
/* The rule between the menu words and the workspace tabs. Blender sets it 16px
|
|
466
|
+
past `Help`'s ink — 8px of the button's own padding plus 8 — and the tabs
|
|
467
|
+
begin 8px after it. */
|
|
468
|
+
/* TWO CLASSES, not one, and the second is load-bearing: `.vgai-divider`'s own
|
|
469
|
+
`background` in theme.css is the same specificity and lands LATER in the
|
|
470
|
+
cascade than this sheet, so a single-class rule here lost silently (driven
|
|
471
|
+
and measured: the token resolved to #2e2e2e on this very element while the
|
|
472
|
+
computed background stayed 60). */
|
|
473
|
+
.vgai-divider.vgai-project-menu-rule {
|
|
474
|
+
align-self: center;
|
|
475
|
+
margin-inline: var(--vgai-space-4);
|
|
476
|
+
/* A DIVIDER'S RULE IS NOT A WIDGET'S OUTLINE. `.vgai-divider` paints
|
|
477
|
+
`boundary.default`, and in this bar that is LIGHTER than the tab strip it
|
|
478
|
+
borders. Measured on `topbar.png` at native 2x: the rule sits at x
|
|
479
|
+
488..489, y 6..45 — 2 device px wide, 40 tall, a flat #2e2e2e (46) with no
|
|
480
|
+
AA ramp on either side, between the bar's 23 and the strip's 28, where
|
|
481
|
+
ours drew 60. `boundary.divider` is optional and falls back to
|
|
482
|
+
`boundary.default` in the emitter, so every other skin is bit-identical;
|
|
483
|
+
this is the one site that reads it, because it is the one divider the
|
|
484
|
+
reference frames photograph (see theme.ts). */
|
|
485
|
+
background: var(--vgai-boundary-divider);
|
|
486
|
+
}
|
|
487
|
+
.vgai-workspace-tabs {
|
|
488
|
+
display: flex;
|
|
489
|
+
/* Blender's tab strip sits on a band one step lighter than the shell bar it
|
|
490
|
+
is embedded in (#1c1c1c over #171717), which is what separates the
|
|
491
|
+
workspace region from the window frame. */
|
|
492
|
+
background: var(--vgai-surface-chrome);
|
|
493
|
+
/* THE PLATE IS 22 AND THE ACTIVE TAB IS INSET 1, the residue the hairline
|
|
494
|
+
measurement below recorded and did not take. Measured on `topbar.png` at
|
|
495
|
+
native 2x, reading down columns through the strip: the plate fills device
|
|
496
|
+
rows 4..47 — 44 rows, 22 CSS, top at CSS 2.0 — and the ACTIVE tab's 47
|
|
497
|
+
slab fills rows 6..45, 40 rows / 20 CSS, inset 2 device px (1 CSS) at top
|
|
498
|
+
AND bottom. Ours was a 20 CSS plate with the slab flush inside it, which
|
|
499
|
+
is why the emboss hairline under the strip sat 1 CSS px high in the bar
|
|
500
|
+
and the active tab touched the plate's edges where Blender leaves a line
|
|
501
|
+
of plate showing above and below it.
|
|
502
|
+
|
|
503
|
+
The height is explicit (not `stretch`) because the left COLUMN is content
|
|
504
|
+
-height: it holds 20px controls, so stretching gave the strip 20. The
|
|
505
|
+
column keeps its own children centered (`align-items: center` below) and
|
|
506
|
+
this one item is pulled to the band's top with the measured 2px of bar
|
|
507
|
+
above it. */
|
|
508
|
+
height: 22px;
|
|
509
|
+
align-items: center;
|
|
510
|
+
align-self: flex-start;
|
|
511
|
+
/* `space-1` is the grid's 2, and the measured 2 device rows of bar above
|
|
512
|
+
Blender's plate; the skin's own grid owns it in any other skin. */
|
|
513
|
+
margin-top: var(--vgai-space-1);
|
|
514
|
+
/* THE STRIP TAKES WHAT IS LEFT AND SCROLLS — the other half of the rule at
|
|
515
|
+
`.vgai-project-header-left .vgai-project-header-cluster` above, and
|
|
516
|
+
Blender's own answer to a top bar too narrow for its menus AND its
|
|
517
|
+
workspaces: the menu row keeps full width, the tab row scrolls.
|
|
518
|
+
`flex: 1 1 0` (not `auto`) so the strip's own content width never pushes
|
|
519
|
+
the row wider than the column, and `min-width: 0` so it may actually
|
|
520
|
+
shrink to the remainder — a flex item's `auto` minimum is its content.
|
|
521
|
+
Vertical wheel over an element that can only scroll horizontally scrolls
|
|
522
|
+
it horizontally, which is the whole interaction; there is no handler. */
|
|
523
|
+
flex: 1 1 0;
|
|
524
|
+
min-width: 0;
|
|
525
|
+
overflow-x: auto;
|
|
526
|
+
overflow-y: hidden;
|
|
527
|
+
/* The scrollbar is suppressed BELOW, at two classes — see that rule. */
|
|
528
|
+
/* THE HAIRLINE UNDER THE PLATE, and it is the EMBOSS — no new member.
|
|
529
|
+
Measured on `topbar.png` at native 2x, reading down a column through the
|
|
530
|
+
strip (x 560, 1000, 2100 all agree): the strip's plate fills device rows
|
|
531
|
+
4..47 at 28, then rows 48..49 are a flat 19 with no AA ramp, then the
|
|
532
|
+
bar's own 23 at 50 and the area seam's 21 at 51. Two device rows of one
|
|
533
|
+
value is 1 CSS px.
|
|
534
|
+
|
|
535
|
+
WHICH MEMBER IS 19? Not `boundary.area` (#151515, 21) and not
|
|
536
|
+
`boundary.divider` (#2e2e2e, 46) — the two this strip already borders.
|
|
537
|
+
It is the same line Blender lays under a WIDGET: at x 3000 in the same
|
|
538
|
+
frame, under a top-bar control on the same 23 backdrop, rows 46..47 read
|
|
539
|
+
19 as well. So this is `widget.emboss`'s own role — the 1 CSS px
|
|
540
|
+
translucent black under a raised thing — on a fifth backdrop, and the
|
|
541
|
+
rule that draws it already exists.
|
|
542
|
+
|
|
543
|
+
THE RESIDUE, stated rather than fitted away: our declared 0.142 (36/255)
|
|
544
|
+
composites over 23 to 20, one level lighter than Blender's 19. Adding
|
|
545
|
+
this backdrop to the four solved on `EditorTheme.color.widget.emboss`
|
|
546
|
+
makes the alpha system EMPTY — 23→19 needs α > 0.152 while 52→45 needs
|
|
547
|
+
α ≤ 0.1442 — so no single byte serves all five and the declared value
|
|
548
|
+
stays. This is the same +1 that docblock already names for a widget
|
|
549
|
+
sitting on a panel band.
|
|
550
|
+
|
|
551
|
+
A SECOND RESIDUE this measurement found and did NOT take: Blender's
|
|
552
|
+
strip plate is 44 device rows (22 CSS) with the active tab's 47 slab
|
|
553
|
+
INSET 2 device px at top and bottom; ours is 40 rows (20 CSS) with the
|
|
554
|
+
slab flush. The hairline is correct relative to its own plate in both,
|
|
555
|
+
so ours sits 1 CSS px higher in the bar than Blender's. That is the
|
|
556
|
+
plate's geometry, not this rule's. */
|
|
557
|
+
box-shadow: var(--vgai-widget-emboss-shadow);
|
|
558
|
+
}
|
|
559
|
+
/* NO SCROLLBAR, the way Blender's tab row has none: the strip is 22px of plate
|
|
560
|
+
and a bar across it eats the tabs.
|
|
561
|
+
|
|
562
|
+
THREE CLASSES, and the count is ARITHMETIC, not superstition. theme.css's
|
|
563
|
+
scrollbar policy is
|
|
564
|
+
`.vgai-editor-theme :where(*):not([data-vgai-world-surface], [data-vgai-world-surface] *)`:
|
|
565
|
+
`:where()` contributes nothing, but `:not()` takes the specificity of its most
|
|
566
|
+
specific ARGUMENT — `[data-vgai-world-surface] *` is (0,1,0) — so the whole
|
|
567
|
+
selector is (0,2,0), and it lands LATER in the cascade than this sheet. One
|
|
568
|
+
class lost; two classes TIED and lost; three wins.
|
|
569
|
+
|
|
570
|
+
MEASURED at each step, never reasoned: with one class and with two, the strip
|
|
571
|
+
computed `scrollbar-width: thin` and its `clientHeight` was 11 against a 22px
|
|
572
|
+
box — an 11px bar inside the plate, which re-centred the 20px tabs 5.5px too
|
|
573
|
+
high (tab y -3 at 1280 against 2.5 at 1728, where the row does not overflow
|
|
574
|
+
and no bar appears at all).
|
|
575
|
+
|
|
576
|
+
BOTH SPELLINGS: the standard property is what Chrome and Firefox honour, and
|
|
577
|
+
the WebKit pseudo-element is for engines that have only it — Chrome ignores
|
|
578
|
+
the pseudo-element once `scrollbar-width` is a keyword, which is why the
|
|
579
|
+
pseudo-element alone was never going to be enough. */
|
|
580
|
+
.vgai-project-header .vgai-project-header-left .vgai-workspace-tabs {
|
|
581
|
+
scrollbar-width: none;
|
|
582
|
+
}
|
|
583
|
+
.vgai-project-header .vgai-project-header-left .vgai-workspace-tabs::-webkit-scrollbar {
|
|
584
|
+
display: none;
|
|
585
|
+
}
|
|
586
|
+
.vgai-workspace-tab {
|
|
587
|
+
appearance: none;
|
|
588
|
+
border: 0;
|
|
589
|
+
margin: 0;
|
|
590
|
+
/* A TAB IS ITS OWN WIDTH. The strip scrolls now (above), and a shrinkable
|
|
591
|
+
tab would compress the row instead of letting it overflow — which is the
|
|
592
|
+
squeeze one level in, with the same reading: a workspace's slab is as wide
|
|
593
|
+
as its word. */
|
|
594
|
+
flex: 0 0 auto;
|
|
595
|
+
/* Blender's tab labels sit 9.5px in from each slab edge (measured: the
|
|
596
|
+
`Modeling` slab is 65px wide around a 46px word). */
|
|
597
|
+
height: var(--vgai-control-compact-height);
|
|
598
|
+
padding: 0 var(--vgai-space-5);
|
|
599
|
+
background: transparent;
|
|
600
|
+
/* An UNSELECTED workspace is quiet. Measured: Blender's inactive tab ink is
|
|
601
|
+
#979797 — the palette's `content/dim` (#969696) to within a channel step —
|
|
602
|
+
against #d8d8d8 for the menu words beside them. `content/muted` (#c2c2c2)
|
|
603
|
+
made every workspace read as loud as the menus. */
|
|
604
|
+
color: var(--vgai-content-dim);
|
|
605
|
+
font: inherit;
|
|
606
|
+
font-size: var(--vgai-font-base);
|
|
607
|
+
white-space: nowrap;
|
|
608
|
+
border-radius: var(--vgai-radius-sm) var(--vgai-radius-sm) 0 0;
|
|
609
|
+
cursor: default;
|
|
610
|
+
}
|
|
611
|
+
.vgai-workspace-tab:hover {
|
|
612
|
+
color: var(--vgai-content-primary);
|
|
613
|
+
}
|
|
614
|
+
.vgai-workspace-tab[aria-selected="true"] {
|
|
615
|
+
background: var(--vgai-surface-panel);
|
|
616
|
+
color: var(--vgai-content-primary);
|
|
617
|
+
}
|