@dailies-studio/shot-editor 0.1.0 → 0.2.0
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/dist/.vite/manifest.json +382 -0
- package/dist/assets/AgentPanel-CQejLbiX.js +2 -0
- package/dist/assets/AgentPanel-DJEphah0.css +1 -0
- package/dist/assets/AgentQuestionDialog-BqkD0kXF.js +1 -0
- package/dist/assets/CodeStudio-Dv4ihHpz.js +23 -0
- package/dist/assets/CommentsPanel-B4yhhT1T.js +1 -0
- package/dist/assets/ComponentLibraryRail-Ch_dsAru.js +1 -0
- package/dist/assets/ComponentStage-BRhRotyH.js +1 -0
- package/dist/assets/CurvePane-BjFVabKX.css +1 -0
- package/dist/assets/CurvePane-R22WzllJ.js +1 -0
- package/dist/assets/ExportDialog-CWLQWTmG.js +2 -0
- package/dist/assets/FontPicker-DWKaYL7F.js +1 -0
- package/dist/assets/FontPicker-v0IOIArM.css +1 -0
- package/dist/assets/GenerateDrawer-Bh3SqDKt.js +2 -0
- package/dist/assets/InsertDrawer-Ce1fod1L.js +1 -0
- package/dist/assets/LibraryBrowser-D9sEGz5w.js +2 -0
- package/dist/assets/MakeItYoursSection-CMO4319_.js +2 -0
- package/dist/assets/MaterialGraphCanvas-BFzl4wWR.js +23 -0
- package/dist/assets/MaterialGraphCanvas-BIUD59ik.css +1 -0
- package/dist/assets/MaterialWorkspace-CqTWqaRA.js +14 -0
- package/dist/assets/PreferencesDialog-CBf9_OoD.js +1 -0
- package/dist/assets/PresetsSection-CUEaoCVU.js +1 -0
- package/dist/assets/SoundHistory-BeS8EW1h.js +1 -0
- package/dist/assets/SoundMode-BmcZru3i.js +3 -0
- package/dist/assets/StockSounds-DdAUGRYK.js +1 -0
- package/dist/assets/TemplateFieldSection-CaeXpLFo.js +1 -0
- package/dist/assets/VersionHistoryPanel-CxG6XhNP.js +1 -0
- package/dist/assets/board-B88EPuLO.css +1 -0
- package/dist/assets/board-CL-he7SL.js +3 -0
- package/dist/assets/components-0oOSPN0l.js +1 -0
- package/dist/assets/googleFontRanges-gp32wJMo.js +1 -0
- package/dist/assets/googleFonts-BNon6M7X.js +1 -0
- package/dist/assets/iconsAndAliases-DL7gXP5j.js +1863 -0
- package/dist/assets/index-4F5NQmI8.css +1 -0
- package/dist/assets/index-BGHQGV5z.js +117 -0
- package/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/dist/assets/libraryModel-CpIwfFha.js +1 -0
- package/dist/assets/lucide-6iK64tTB.js +9319 -0
- package/dist/assets/motionStamp-CH-Hew4E.js +1 -0
- package/dist/assets/takeMeasure-Tdg0TxEi.js +1 -0
- package/dist/assets/webmcp-BsB9gxWC.js +2 -0
- package/dist/index.html +34 -3
- package/package.json +12 -9
- package/src/addFamilies.ts +66 -0
- package/src/api.ts +1631 -55
- package/src/app/App.tsx +977 -198
- package/src/app/lazyPanel.tsx +137 -0
- package/src/app/lazySurfaces.tsx +203 -0
- package/src/audio/index.tsx +41 -10
- package/src/audio/meter.ts +485 -0
- package/src/audio/meterMath.ts +273 -0
- package/src/audio/meterStore.ts +155 -0
- package/src/audio/offlineMix.ts +289 -0
- package/src/audio/preview.ts +928 -118
- package/src/bridge.ts +15 -5
- package/src/bridgeTypes.ts +1611 -36
- package/src/channels.ts +17 -32
- package/src/fonts/googleFonts.ts +4 -0
- package/src/hostApi.ts +174 -0
- package/src/icons.tsx +770 -0
- package/src/layerWords.ts +61 -0
- package/src/main.tsx +56 -4
- package/src/panels/ResizeHandle.tsx +33 -43
- package/src/panels/agent/AgentDots.tsx +36 -0
- package/src/panels/agent/AgentPanel.tsx +119 -43
- package/src/panels/agent/AgentQuestionDialog.tsx +202 -0
- package/src/panels/agent/agent.css +113 -97
- package/src/panels/agent/agentGate.ts +35 -0
- package/src/panels/code/CodeDefaultsPanel.tsx +345 -0
- package/src/panels/code/CodeStudio.tsx +373 -0
- package/src/panels/code/FileTree.tsx +265 -0
- package/src/panels/code/codeBufferGuard.ts +52 -0
- package/src/panels/code/codeParts.tsx +321 -0
- package/src/panels/comments/CommentComposer.tsx +239 -0
- package/src/panels/comments/CommentThread.tsx +346 -0
- package/src/panels/comments/CommentsPanel.tsx +336 -0
- package/src/panels/comments/InboxButton.tsx +131 -0
- package/src/panels/comments/MentionMenu.tsx +98 -0
- package/src/panels/comments/parts.tsx +171 -0
- package/src/panels/export/ExportDialog.tsx +919 -96
- package/src/panels/export/ExportScrim.tsx +57 -0
- package/src/panels/files/AssetsTab.tsx +656 -0
- package/src/panels/files/FilePanel.tsx +1466 -216
- package/src/panels/files/LayerMarks.tsx +40 -0
- package/src/panels/files/LeftColumn.tsx +37 -0
- package/src/panels/files/McpSection.tsx +690 -47
- package/src/panels/files/MissingAssetsNotice.tsx +60 -0
- package/src/panels/files/assetDrag.ts +79 -0
- package/src/panels/files/resourceParts.tsx +255 -0
- package/src/panels/fonts/FontPicker.tsx +762 -0
- package/src/panels/fonts/faceCache.ts +207 -0
- package/src/panels/fonts/fontPicker.css +271 -0
- package/src/panels/fonts/pickerModel.ts +265 -0
- package/src/panels/fonts/pickerRequest.ts +46 -0
- package/src/panels/header/AccountAvatar.tsx +76 -0
- package/src/panels/header/AgentChip.tsx +77 -0
- package/src/panels/header/AppMenu.tsx +213 -0
- package/src/panels/header/Header.tsx +564 -84
- package/src/panels/header/HistoryControls.tsx +31 -5
- package/src/panels/header/PresenceStack.tsx +329 -0
- package/src/panels/header/ProjectTitle.tsx +232 -0
- package/src/panels/header/ShareButton.tsx +59 -0
- package/src/panels/header/StatusBadges.tsx +358 -27
- package/src/panels/header/SyncDeletedDialog.tsx +88 -0
- package/src/panels/header/ZoomControls.tsx +46 -15
- package/src/panels/header/agentHandoff.ts +52 -0
- package/src/panels/header/leave.ts +26 -0
- package/src/panels/help/HelpSection.tsx +189 -163
- package/src/panels/insert/InsertDrawer.tsx +723 -0
- package/src/panels/insert/iconSet.ts +109 -0
- package/src/panels/inspector/ExposeDot.tsx +117 -0
- package/src/panels/inspector/FramingRows.tsx +314 -44
- package/src/panels/inspector/InspectorFooter.tsx +91 -0
- package/src/panels/inspector/InspectorHead.tsx +425 -0
- package/src/panels/inspector/InspectorPanel.tsx +408 -124
- package/src/panels/inspector/KeyframeDot.tsx +373 -0
- package/src/panels/inspector/KeyframeSection.tsx +257 -0
- package/src/panels/inspector/MarkerSection.tsx +55 -11
- package/src/panels/inspector/ParamRow.tsx +84 -53
- package/src/panels/inspector/RightColumn.tsx +152 -0
- package/src/panels/inspector/TimeSection.tsx +866 -0
- package/src/panels/inspector/animate/EaseControl.tsx +244 -0
- package/src/panels/inspector/animate/PresetsSection.tsx +135 -0
- package/src/panels/inspector/animate/ShotSection.tsx +562 -48
- package/src/panels/inspector/design/AlignRow.tsx +95 -31
- package/src/panels/inspector/design/AppearanceSection.tsx +118 -9
- package/src/panels/inspector/design/ClonerSection.tsx +323 -62
- package/src/panels/inspector/design/ComponentSection.tsx +50 -43
- package/src/panels/inspector/design/CornerSection.tsx +45 -14
- package/src/panels/inspector/design/DefinitionProps.tsx +315 -0
- package/src/panels/inspector/design/DefinitionSection.tsx +136 -0
- package/src/panels/inspector/design/DeviceSection.tsx +210 -0
- package/src/panels/inspector/design/FillSection.tsx +83 -51
- package/src/panels/inspector/design/FontField.tsx +196 -0
- package/src/panels/inspector/design/HtmlSection.tsx +23 -12
- package/src/panels/inspector/design/InstanceSection.tsx +373 -154
- package/src/panels/inspector/design/MaskSection.tsx +84 -0
- package/src/panels/inspector/design/MaterialSection.tsx +177 -0
- package/src/panels/inspector/design/MediaSection.tsx +273 -120
- package/src/panels/inspector/design/MeshSection.tsx +910 -82
- package/src/panels/inspector/design/PaintRows.tsx +550 -0
- package/src/panels/inspector/design/PlateStyleSection.tsx +177 -0
- package/src/panels/inspector/design/ShadowSection.tsx +221 -48
- package/src/panels/inspector/design/SplineFollowSection.tsx +235 -0
- package/src/panels/inspector/design/StrokeSection.tsx +228 -43
- package/src/panels/inspector/design/TemplateFieldSection.tsx +57 -0
- package/src/panels/inspector/design/TransformSection.tsx +244 -50
- package/src/panels/inspector/design/TypographySection.tsx +679 -110
- package/src/panels/inspector/layout.ts +295 -0
- package/src/panels/inspector/propValue.ts +199 -0
- package/src/panels/inspector/scene/CameraSection.tsx +232 -22
- package/src/panels/inspector/scene/EffectsSection.tsx +722 -71
- package/src/panels/inspector/scene/MakeItYoursSection.tsx +180 -0
- package/src/panels/inspector/scene/SceneDocSection.tsx +191 -0
- package/src/panels/inspector/scene/SceneSection.tsx +219 -44
- package/src/panels/inspector/scene/TransitionSection.tsx +523 -72
- package/src/panels/inspector/storyboard/StoryboardReferenceSection.tsx +593 -0
- package/src/panels/inspector/storyboard/VideoStill.tsx +120 -0
- package/src/panels/inspector/timeModel.ts +190 -0
- package/src/panels/inspector/useDocWrite.ts +438 -146
- package/src/panels/library/LibraryBrowser.tsx +435 -0
- package/src/panels/library/LibraryGrid.tsx +190 -0
- package/src/panels/library/LibraryPreviewPanel.tsx +349 -0
- package/src/panels/library/LibraryRail.tsx +84 -0
- package/src/panels/library/LibrarySoundPanel.tsx +293 -0
- package/src/panels/library/SoundHistory.tsx +245 -0
- package/src/panels/library/StockSounds.tsx +390 -0
- package/src/panels/library/libraryModel.ts +147 -0
- package/src/panels/library/stockSearch.ts +77 -0
- package/src/panels/maskMarks.tsx +117 -0
- package/src/panels/material/MaterialCommentNode.tsx +54 -0
- package/src/panels/material/MaterialGraphCanvas.tsx +861 -0
- package/src/panels/material/MaterialGraphMenu.tsx +45 -0
- package/src/panels/material/MaterialGroupNode.tsx +56 -0
- package/src/panels/material/MaterialLibrary.tsx +253 -0
- package/src/panels/material/MaterialNode.tsx +453 -0
- package/src/panels/material/MaterialNodePalette.tsx +349 -0
- package/src/panels/material/MaterialParameterControls.tsx +525 -0
- package/src/panels/material/MaterialRerouteNode.tsx +42 -0
- package/src/panels/material/MaterialWorkspace.tsx +501 -0
- package/src/panels/material/NodePreview.tsx +70 -0
- package/src/panels/material/flowModel.ts +441 -0
- package/src/panels/material/parameterValues.ts +231 -0
- package/src/panels/material/previewScheduler.ts +235 -0
- package/src/panels/material/reactFlow.css +6 -0
- package/src/panels/material/socketGlyph.ts +85 -0
- package/src/panels/material/viewportMemory.ts +58 -0
- package/src/panels/preferences/PreferencesDialog.tsx +215 -0
- package/src/panels/share/ShareComponentDialog.tsx +247 -0
- package/src/panels/stage/StageMenu.tsx +35 -5
- package/src/panels/stage/StagePanel.tsx +338 -23
- package/src/panels/stage/cellSlots.tsx +70 -0
- package/src/panels/storyboard/BoardCanvas.tsx +739 -0
- package/src/panels/storyboard/BoardCursors.tsx +158 -0
- package/src/panels/storyboard/BoardDropDialog.tsx +161 -0
- package/src/panels/storyboard/BoardPlan.tsx +42 -0
- package/src/panels/storyboard/ComponentSheet.tsx +187 -0
- package/src/panels/storyboard/ComponentStage.tsx +235 -0
- package/src/panels/storyboard/MiniSketch.tsx +173 -0
- package/src/panels/storyboard/PartPicker.tsx +64 -0
- package/src/panels/storyboard/PlanPanel.tsx +617 -0
- package/src/panels/storyboard/ReferencePreview.tsx +217 -0
- package/src/panels/storyboard/ShotBrief.tsx +360 -0
- package/src/panels/storyboard/ShotCard.tsx +251 -0
- package/src/panels/storyboard/StagePreview.tsx +348 -0
- package/src/panels/storyboard/StillThumbs.tsx +162 -0
- package/src/panels/storyboard/StoryboardView.tsx +79 -0
- package/src/panels/storyboard/board.css +1065 -0
- package/src/panels/storyboard/board.ts +12 -0
- package/src/panels/storyboard/boardClipboard.ts +111 -0
- package/src/panels/storyboard/boardOrder.ts +68 -0
- package/src/panels/storyboard/boardRows.tsx +425 -0
- package/src/panels/storyboard/liveCap.ts +90 -0
- package/src/panels/storyboard/plan.css +295 -0
- package/src/panels/storyboard/posterCache.ts +133 -0
- package/src/panels/storyboard/shotboard/ComponentPicker.tsx +373 -0
- package/src/panels/storyboard/shotboard/ImagePicker.tsx +145 -0
- package/src/panels/storyboard/shotboard/ShotBoard.tsx +292 -0
- package/src/panels/storyboard/shotboard/SketchCanvas.tsx +443 -0
- package/src/panels/storyboard/shotboard/SketchInspector.tsx +471 -0
- package/src/panels/storyboard/shotboard/SketchItem.tsx +240 -0
- package/src/panels/storyboard/shotboard/SketchLayers.tsx +130 -0
- package/src/panels/storyboard/shotboard/SketchPlay.tsx +108 -0
- package/src/panels/storyboard/shotboard/SketchStrip.tsx +178 -0
- package/src/panels/storyboard/shotboard/SketchToolFooter.tsx +99 -0
- package/src/panels/storyboard/shotboard/sketch.css +1392 -0
- package/src/panels/storyboard/shotboard/sketchModel.ts +219 -0
- package/src/panels/storyboard/storyboardDrop.ts +164 -0
- package/src/panels/studio/ComponentLibraryRail.tsx +346 -0
- package/src/panels/studio/ComponentSidePanel.tsx +355 -0
- package/src/panels/studio/ComponentStudio.tsx +243 -0
- package/src/panels/studio/ComponentsHome.tsx +318 -0
- package/src/panels/studio/ComponentsPreview.tsx +179 -0
- package/src/panels/studio/EveryUse.tsx +244 -0
- package/src/panels/studio/ThisUsePanel.tsx +679 -0
- package/src/panels/studio/componentParts.tsx +341 -0
- package/src/panels/studio/components.ts +6 -0
- package/src/panels/studio/newCodeComponent.ts +66 -0
- package/src/panels/timeline/AudioFxButton.tsx +290 -0
- package/src/panels/timeline/AudioLane.tsx +674 -85
- package/src/panels/timeline/BlockRow.tsx +154 -85
- package/src/panels/timeline/ChannelRow.tsx +378 -129
- package/src/panels/timeline/CurvePane.tsx +508 -0
- package/src/panels/timeline/Filmstrip.tsx +361 -0
- package/src/panels/timeline/GenerateDrawer.tsx +407 -0
- package/src/panels/timeline/KeyStretch.tsx +115 -0
- package/src/panels/timeline/LifespanRow.tsx +730 -47
- package/src/panels/timeline/MarkerLane.tsx +46 -8
- package/src/panels/timeline/PlayButton.tsx +91 -0
- package/src/panels/timeline/PropertyPicker.tsx +254 -0
- package/src/panels/timeline/ShotRow.tsx +400 -0
- package/src/panels/timeline/SoundMode.tsx +1406 -0
- package/src/panels/timeline/TimelineDock.tsx +2338 -272
- package/src/panels/timeline/TransportVolume.tsx +163 -0
- package/src/panels/timeline/beatRuler.ts +74 -0
- package/src/panels/timeline/curveModel.ts +500 -0
- package/src/panels/timeline/duckUnderVoice.ts +68 -0
- package/src/panels/timeline/keyframeMenu.ts +138 -0
- package/src/panels/timeline/labelWidth.ts +49 -0
- package/src/panels/timeline/marquee.ts +155 -0
- package/src/panels/timeline/model.ts +1860 -199
- package/src/panels/timeline/snap.ts +125 -43
- package/src/panels/timeline/staggerPreview.tsx +92 -0
- package/src/panels/timeline/takeMeasure.ts +72 -0
- package/src/panels/timeline/useLive.ts +48 -0
- package/src/panels/timeline/viewport.ts +234 -0
- package/src/panels/toolbar/BackChip.tsx +116 -0
- package/src/panels/toolbar/CameraViewBar.tsx +118 -49
- package/src/panels/toolbar/CanvasBar.tsx +117 -0
- package/src/panels/toolbar/InsertButton.tsx +38 -0
- package/src/panels/toolbar/IsolationTrail.tsx +156 -0
- package/src/panels/toolbar/PanelToggles.tsx +86 -0
- package/src/panels/toolbar/ShadingBar.tsx +119 -26
- package/src/panels/toolbar/ToolDockBar.tsx +329 -80
- package/src/panels/toolbar/ToolFooter.tsx +102 -0
- package/src/panels/toolbar/ViewModeBar.tsx +247 -38
- package/src/panels/toolbar/WorkPlaneBar.tsx +94 -0
- package/src/panels/toolbar/useAddRows.tsx +326 -0
- package/src/panels/toolbar/useDismiss.ts +122 -0
- package/src/panels/versions/VersionHistoryPanel.tsx +274 -0
- package/src/panels/versions/versionModel.ts +103 -0
- package/src/panels/virtualWindow.ts +271 -0
- package/src/shotTokens.css +151 -60
- package/src/stage/FrustumGizmo.tsx +504 -84
- package/src/stage/GridPlane.tsx +225 -16
- package/src/stage/NodePreviews.tsx +628 -0
- package/src/stage/PerfHud.tsx +437 -47
- package/src/stage/SplitRenderer.tsx +816 -169
- package/src/stage/StageApp.tsx +4274 -486
- package/src/stage/StageRootBoundary.tsx +114 -0
- package/src/stage/StageTools.tsx +651 -151
- package/src/stage/TransformGizmo.tsx +696 -0
- package/src/stage/adaptivePresentation.ts +145 -0
- package/src/stage/bridgeClient.ts +2522 -41
- package/src/stage/exportWorker.ts +9 -0
- package/src/stage/feed.ts +305 -14
- package/src/stage/fontPreview.ts +176 -0
- package/src/stage/frustumGeometry.ts +319 -1
- package/src/stage/furnitureTokens.ts +33 -0
- package/src/stage/gizmoMath.ts +508 -16
- package/src/stage/gpuTimer.ts +276 -0
- package/src/stage/instanceModules.ts +194 -33
- package/src/stage/interactions/move.ts +24 -5
- package/src/stage/isolation.ts +291 -33
- package/src/stage/jsSelfProfiler.ts +325 -0
- package/src/stage/main.tsx +116 -16
- package/src/stage/modalState.ts +222 -23
- package/src/stage/moduleEpoch.ts +60 -0
- package/src/stage/motionPathStage.ts +279 -0
- package/src/stage/motionPreview.ts +74 -0
- package/src/stage/overlays/Overlays.tsx +1112 -159
- package/src/stage/overlays/Rulers.tsx +495 -0
- package/src/stage/panes.ts +159 -10
- package/src/stage/project.ts +68 -3
- package/src/stage/renderScaleController.ts +730 -0
- package/src/stage/rulers.ts +129 -0
- package/src/stage/sceneExtent.ts +75 -0
- package/src/stage/shading.ts +20 -0
- package/src/stage/splineStage.ts +632 -0
- package/src/stage/stagePerformanceTelemetry.ts +717 -0
- package/src/stage/stageTheme.ts +36 -0
- package/src/stage/stageWarmup.ts +11 -0
- package/src/stage/textAutoSize.ts +124 -0
- package/src/stage/tier1Export.ts +641 -0
- package/src/stage/tokenColor.ts +14 -9
- package/src/stage/view.ts +56 -9
- package/src/stage/workingView.ts +277 -33
- package/src/state/accountPrefs.ts +261 -0
- package/src/state/agentActions.ts +173 -15
- package/src/state/agentActivity.ts +198 -0
- package/src/state/agentQuestion.ts +239 -0
- package/src/state/bootOpen.ts +42 -0
- package/src/state/cameraVerbs.ts +139 -0
- package/src/state/clientId.ts +6 -1
- package/src/state/comments.ts +1099 -0
- package/src/state/context.tsx +19 -1
- package/src/state/editorPrefs.ts +220 -0
- package/src/state/errorReports.ts +121 -0
- package/src/state/fieldWrite.ts +161 -0
- package/src/state/fontRecents.ts +70 -0
- package/src/state/fonts.ts +656 -0
- package/src/state/graphClipboard.ts +414 -0
- package/src/state/imageThumbs.ts +216 -0
- package/src/state/insert.ts +444 -67
- package/src/state/isolationTrail.ts +92 -0
- package/src/state/keyMoves.ts +134 -0
- package/src/state/keyframeClipboard.ts +177 -0
- package/src/state/keymap.ts +1153 -117
- package/src/state/layoutPrefs.ts +272 -0
- package/src/state/layouts.ts +205 -0
- package/src/state/measureMedia.ts +167 -0
- package/src/state/menu.ts +2341 -28
- package/src/state/motionStamp.ts +7 -0
- package/src/state/panelSize.ts +375 -5
- package/src/state/pendingChanges.ts +119 -0
- package/src/state/playHold.ts +78 -0
- package/src/state/playbackPreparation.ts +562 -0
- package/src/state/posterCapture.ts +242 -0
- package/src/state/presence.ts +254 -0
- package/src/state/projectComponents.ts +160 -0
- package/src/state/renderEvents.ts +298 -18
- package/src/state/runtimeErrors.ts +46 -0
- package/src/state/selection.ts +12 -0
- package/src/state/shortcuts.ts +1606 -0
- package/src/state/sketchGuide.ts +51 -0
- package/src/state/splineRefs.ts +87 -0
- package/src/state/stageHealth.ts +259 -0
- package/src/state/stageWatchdog.ts +47 -0
- package/src/state/stillStage.ts +330 -0
- package/src/state/stillThumbs.ts +474 -0
- package/src/state/store.ts +23591 -2982
- package/src/state/storyboardModel.ts +528 -0
- package/src/state/sync.ts +1257 -0
- package/src/state/syncCache.ts +159 -0
- package/src/state/triangles.ts +13 -0
- package/src/state/types.ts +1698 -55
- package/src/state/unsavedGuard.ts +49 -0
- package/src/state/viewMode.ts +200 -0
- package/src/state/webmcp.ts +1128 -0
- package/src/state/workspace.ts +1147 -0
- package/src/styles/assets-tab.css +304 -0
- package/src/styles/canvas.css +545 -0
- package/src/styles/comments.css +1435 -0
- package/src/styles/controls.css +162 -0
- package/src/styles/dialogs.css +390 -0
- package/src/styles/insert-drawer.css +586 -0
- package/src/styles/inspector-board.css +207 -0
- package/src/styles/inspector-object.css +486 -0
- package/src/styles/inspector-shot.css +252 -0
- package/src/styles/inspector.css +360 -0
- package/src/styles/left-column.css +1628 -0
- package/src/styles/library-preview.css +575 -0
- package/src/styles/library.css +512 -0
- package/src/styles/modes/code.css +569 -0
- package/src/styles/modes/component.css +1561 -0
- package/src/styles/modes/material.css +1201 -0
- package/src/styles/modes/storyboard.css +518 -0
- package/src/styles/share-component.css +49 -0
- package/src/styles/shell.css +653 -0
- package/src/styles/shot-brief.css +360 -0
- package/src/styles/states.css +76 -0
- package/src/styles/sync.css +380 -0
- package/src/styles/timeline-graph.css +384 -0
- package/src/styles/timeline-meters.css +89 -0
- package/src/styles/timeline-rows.css +1959 -0
- package/src/styles/timeline-sound.css +1003 -0
- package/src/styles/timeline.css +754 -0
- package/src/styles/tool-footer.css +525 -0
- package/src/styles/topbar.css +886 -0
- package/src/styles/versions.css +262 -0
- package/src/styles.css +72 -2921
- package/src/tools.ts +108 -23
- package/dist/assets/index-B7notge7.css +0 -1
- package/dist/assets/index-BBE6Ta9L.js +0 -52
- package/src/panels/files/icons.tsx +0 -118
- package/src/panels/header/DocSwitcher.tsx +0 -85
- package/src/panels/header/TransportBar.tsx +0 -86
- package/src/panels/inspector/animate/BlockTiming.tsx +0 -341
- package/src/panels/inspector/animate/DuringBlocks.tsx +0 -85
- package/src/panels/inspector/animate/InOutPresets.tsx +0 -57
- package/src/panels/inspector/animate/ResolvedChannels.tsx +0 -150
- package/src/panels/inspector/animate/useBlocks.ts +0 -43
- package/src/panels/material/MaterialPicker.tsx +0 -172
- package/src/panels/timeline/SceneStrip.tsx +0 -145
- package/src/panels/toolbar/AddMenu.tsx +0 -230
- package/src/stage/MoveGizmo.tsx +0 -411
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
/* The canvas bar: the docked row over the canvas cell, its pane groups, the way back, the zoom and the camera menu. */
|
|
2
|
+
|
|
3
|
+
/* ---- the canvas bar ----------------------------------------------------- */
|
|
4
|
+
/* One docked row along the top of the canvas cell (CanvasBar.tsx): the way
|
|
5
|
+
out, one group per pane on screen, then the stage's badges, a definition's
|
|
6
|
+
face switch and the zoom. It names the PLACE and how each pane is drawn;
|
|
7
|
+
the tools and the view track are the docked footer under the canvas.
|
|
8
|
+
|
|
9
|
+
ONE ROW, ALWAYS. `nowrap` turns the width into a real budget; a wrapped bar
|
|
10
|
+
grows downward over the picture. AND NO `overflow` on the bar: a clip is how
|
|
11
|
+
two menus once went silently dead. The bar has a give order instead (in
|
|
12
|
+
full below, with its measurements): the badges, the back label's cap, the
|
|
13
|
+
split's spare room, then, where the bar is crowded, the back label and the
|
|
14
|
+
zoom steps. No control shrinks, and no choice goes
|
|
15
|
+
(each dropped button stays on the View menu and its key), so the bar fits
|
|
16
|
+
the narrowest canvas `fitShell` makes at a 1024px window. Past the right
|
|
17
|
+
edge is the inspector, which paints over it.
|
|
18
|
+
|
|
19
|
+
Opaque and catching its own clicks: it is a docked cell, and a
|
|
20
|
+
`pointer-events: none` bar would hand every press in its empty half to the
|
|
21
|
+
stage iframe behind it.
|
|
22
|
+
|
|
23
|
+
Its padding and gap are named because the split arithmetic below reads
|
|
24
|
+
them: the camera group lands on the seam only if both are counted. The
|
|
25
|
+
padding is 12px a side, the tool footer's own (2026-10-13 design review:
|
|
26
|
+
Paper draws the bar at 14, off the spacing scale, and the footer at 12), so
|
|
27
|
+
the two docked rows of the canvas column start their controls on one line.
|
|
28
|
+
The bar is one `--panel-head-h` row (40) around 28px controls.
|
|
29
|
+
Every width in the give order below is the bar's CONTENT width, which is
|
|
30
|
+
what a container query measures: the bar less this padding a side. */
|
|
31
|
+
.control-strip {
|
|
32
|
+
--canvas-bar-pad: var(--space-6);
|
|
33
|
+
--canvas-bar-gap: var(--space-3);
|
|
34
|
+
/* A size container, for the narrow bar's give order below. The bar's width
|
|
35
|
+
is its grid track's, never its content's, so containment changes nothing
|
|
36
|
+
else, and every menu in it portals to the body. */
|
|
37
|
+
container: canvas-bar / inline-size;
|
|
38
|
+
grid-column: rail-r / insp-l;
|
|
39
|
+
grid-row: main-t / stage-t;
|
|
40
|
+
display: flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
flex-wrap: nowrap;
|
|
43
|
+
gap: var(--canvas-bar-gap);
|
|
44
|
+
padding: 0 var(--canvas-bar-pad);
|
|
45
|
+
background: var(--surface-panel);
|
|
46
|
+
border-bottom: 1px solid var(--line);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* A MODE'S BAR: the way back and its own verbs, portalled in
|
|
50
|
+
(cellSlots.tsx). The slot is the whole row, laid out like the bar itself;
|
|
51
|
+
empty in the stage workspace, where it takes no room. */
|
|
52
|
+
.canvas-bar-mode {
|
|
53
|
+
display: flex;
|
|
54
|
+
align-items: center;
|
|
55
|
+
flex: 1;
|
|
56
|
+
gap: var(--canvas-bar-gap);
|
|
57
|
+
min-width: 0;
|
|
58
|
+
height: 100%;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.canvas-bar-mode:empty {
|
|
62
|
+
display: none;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* THE PANELS MENU, last in every workspace (PanelToggles.tsx): one glyph and
|
|
66
|
+
a chevron that open the Layers / Timeline / Inspector checks (Paper 27, "7 ·
|
|
67
|
+
Canvas bar"). `flex: none`, because a control never shrinks. */
|
|
68
|
+
.panel-toggles {
|
|
69
|
+
display: flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
flex: none;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* Wider than the bar's 28px square (`.control-strip .tool-button` below): it
|
|
75
|
+
carries the chevron too. The extra class outranks that rule on specificity,
|
|
76
|
+
not on source order. */
|
|
77
|
+
.control-strip .tool-button.panel-menu-trigger,
|
|
78
|
+
.panel-menu-trigger {
|
|
79
|
+
width: auto;
|
|
80
|
+
height: var(--control-h);
|
|
81
|
+
gap: var(--space-2);
|
|
82
|
+
padding: 0 var(--space-3);
|
|
83
|
+
border-radius: var(--radius-sm);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.panel-menu-trigger > svg {
|
|
87
|
+
width: 16px;
|
|
88
|
+
height: 16px;
|
|
89
|
+
flex: none;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.panel-menu-trigger.is-open {
|
|
93
|
+
background: var(--line);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.panel-menu-caret {
|
|
97
|
+
display: inline-flex;
|
|
98
|
+
color: var(--ink-2);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.panel-menu-caret svg {
|
|
102
|
+
width: 12px;
|
|
103
|
+
height: 12px;
|
|
104
|
+
display: block;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* ONE CONTROL SIZE IN THE BAR: the house 28px. The pane triggers are
|
|
108
|
+
`.tool-button`s, whose base 36px square (tool-footer.css) is the menu row's;
|
|
109
|
+
here they are the bar's, the same 28px the docked footer draws. */
|
|
110
|
+
.control-strip .tool-button {
|
|
111
|
+
width: var(--control-h);
|
|
112
|
+
height: var(--control-h);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* ---- the lead: the way out and the first pane ----------------------------- */
|
|
116
|
+
/* `flex: none`: it holds controls, and a control never shrinks. Empty at the
|
|
117
|
+
Project level in the camera layout, where it would otherwise cost one gap. */
|
|
118
|
+
.canvas-bar-lead {
|
|
119
|
+
display: flex;
|
|
120
|
+
align-items: center;
|
|
121
|
+
gap: var(--canvas-bar-gap);
|
|
122
|
+
flex: none;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.canvas-bar-lead:empty {
|
|
126
|
+
display: none;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* THE SPLIT: the camera group starts ON THE SEAM, so each group sits over the
|
|
130
|
+
pane it acts on. `--split-x` is the seam in window coordinates (App writes
|
|
131
|
+
it on the shell); the bar's own left edge is the rail's track, or 0 with the
|
|
132
|
+
rail collapsed. The width is the room up to one gap short of the seam.
|
|
133
|
+
|
|
134
|
+
NO CONTROL IS EVER CLIPPED. The seam is where the camera group SHOULD start,
|
|
135
|
+
not a wall. Near the left end the lead never gets narrower than its own
|
|
136
|
+
controls (`min-width`), so it pushes the camera group right of the seam.
|
|
137
|
+
Near the right end, once the badges are gone, the lead gives up its spare
|
|
138
|
+
room (`flex-shrink`), so the camera group slides left before the zoom
|
|
139
|
+
slides under the inspector. */
|
|
140
|
+
.canvas-bar-lead.is-split {
|
|
141
|
+
--canvas-bar-x: var(--rail-w);
|
|
142
|
+
flex: 0 1 auto;
|
|
143
|
+
width: calc(var(--split-x) - var(--canvas-bar-x) - var(--canvas-bar-pad) - var(--canvas-bar-gap));
|
|
144
|
+
min-width: max-content;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.shell.is-rail-collapsed .canvas-bar-lead.is-split {
|
|
148
|
+
--canvas-bar-x: 0px;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* ---- a pane's group -------------------------------------------------------- */
|
|
152
|
+
.canvas-pane {
|
|
153
|
+
display: flex;
|
|
154
|
+
align-items: center;
|
|
155
|
+
gap: var(--space-3);
|
|
156
|
+
flex: none;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/* The pane's word, from LAYOUT_SPECS. The pane the zoom and the fit address
|
|
160
|
+
(`activePane`) is in accent ink; the other is quiet. Two classes against
|
|
161
|
+
one, so the active colour wins on specificity and not on source order. */
|
|
162
|
+
.canvas-pane-word {
|
|
163
|
+
font-size: var(--type-md);
|
|
164
|
+
font-weight: var(--weight-semibold);
|
|
165
|
+
white-space: nowrap;
|
|
166
|
+
color: var(--ink-2);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.canvas-pane.is-active .canvas-pane-word {
|
|
170
|
+
color: var(--accent-ink);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* A hairline between the way out and the first pane, the top bar's
|
|
174
|
+
`.header-sep` recipe. Only BETWEEN two things: at the Project level there is
|
|
175
|
+
no back chip, and the first group starts clean. */
|
|
176
|
+
.canvas-bar-lead > * + .canvas-pane::before,
|
|
177
|
+
.canvas-bar-lead:not(.is-split):not(:empty) + .canvas-pane::before {
|
|
178
|
+
content: "";
|
|
179
|
+
flex: none;
|
|
180
|
+
width: 1px;
|
|
181
|
+
height: 16px;
|
|
182
|
+
background: var(--line);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* In the split the camera group starts on the seam when the bar has room, so
|
|
186
|
+
its hairline runs the bar's full height and carries the seam the stage
|
|
187
|
+
draws up through the bar. It never shrinks: the lead is the part that
|
|
188
|
+
gives. */
|
|
189
|
+
.canvas-bar-lead.is-split + .canvas-pane {
|
|
190
|
+
align-self: stretch;
|
|
191
|
+
padding-left: var(--space-3);
|
|
192
|
+
border-left: 1px solid var(--line);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* ---- the stage's badges and the zoom, pushed right ------------------------- */
|
|
196
|
+
.stage-badges,
|
|
197
|
+
.zoom-controls {
|
|
198
|
+
display: flex;
|
|
199
|
+
align-items: center;
|
|
200
|
+
gap: var(--space-2);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/* THE BADGES ARE THE BAR'S SPRING. They take the room the controls leave
|
|
204
|
+
(`flex: 1 1 0`), which pushes the zoom to the end, and they are the first
|
|
205
|
+
thing to give. The row is one chip tall and clips, so a chip that does not
|
|
206
|
+
fit wraps onto a second line, out of sight. A badge goes whole: a half-cut
|
|
207
|
+
"60 fps" would read "0 fps". The empty `::before` starts every first line,
|
|
208
|
+
so even the first chip can wrap away (a flex line keeps its first item). */
|
|
209
|
+
.stage-badges {
|
|
210
|
+
flex: 1 1 0;
|
|
211
|
+
min-width: 0;
|
|
212
|
+
height: 22px;
|
|
213
|
+
flex-wrap: wrap;
|
|
214
|
+
justify-content: flex-end;
|
|
215
|
+
overflow: hidden;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.stage-badges::before {
|
|
219
|
+
content: "";
|
|
220
|
+
height: 100%;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/* The row's height is the chip's, from one number. */
|
|
224
|
+
.stage-badges .status-chip {
|
|
225
|
+
height: 100%;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/* ── THE GIVE ORDER, NARROWEST LAST ──────────────────────────────────────
|
|
229
|
+
1. The badges wrap away (`.stage-badges`, the spring).
|
|
230
|
+
2. Under 712px the back label caps at 120px (`.back-chip` below).
|
|
231
|
+
3. In the split, the lead gives its spare room (`.canvas-bar-lead.is-split`)
|
|
232
|
+
and the camera group slides left of the seam.
|
|
233
|
+
4. Under 656px, where the bar is crowded: the back chip keeps its chevron
|
|
234
|
+
and loses its label (the `aria-label` and `title` keep the
|
|
235
|
+
destination), and where the spline's Curve select is on screen the zoom
|
|
236
|
+
keeps its readout (the fit) and loses Zoom out / Zoom in, which stay on
|
|
237
|
+
the View menu, on their keys and on the wheel.
|
|
238
|
+
|
|
239
|
+
WHAT CROWDS THE BAR, measured in Chromium. Each width is the CONTENT the
|
|
240
|
+
bar needs with every control at its own width and the badges gone: the
|
|
241
|
+
controls and their gaps, the 12px padding a side not counted. The bar fits
|
|
242
|
+
from that content width up (its outer width is 24 more):
|
|
243
|
+
the Project, any layout 232 to 325
|
|
244
|
+
a shot: Camera 338, Video 304, 3D 304, split 396
|
|
245
|
+
a shot with the spline armed (the work plane, its plane and Curve
|
|
246
|
+
selects, adds 198 and is on screen only then):
|
|
247
|
+
3D 502, split 594
|
|
248
|
+
So with the view track in the footer, one case outgrows the narrowest
|
|
249
|
+
bar `fitShell` makes (592px at a 1024px window, 568 of content): the
|
|
250
|
+
split with the spline armed. Step 4 is keyed on the Curve select beside
|
|
251
|
+
the plane select, and measured at a 592px bar (568 of content) it leaves:
|
|
252
|
+
the split, spline armed 594 - 31 - 72 (the steps) 491
|
|
253
|
+
3D, spline armed 502 - 31 - 72 399
|
|
254
|
+
An open definition is not a case: it is the Components workspace, which
|
|
255
|
+
brings its own bar (modes/component.css).
|
|
256
|
+
Every other state keeps its label and its zoom steps at every width.
|
|
257
|
+
|
|
258
|
+
No choice goes at any width: every zoom step and way back stays one press
|
|
259
|
+
or one key away. The widths are the bar's own (`canvas-bar`), so a rail or
|
|
260
|
+
inspector drag gives exactly as a narrower window does. The state scopes
|
|
261
|
+
are `:has()` on the bar, read by descendants only (a container never
|
|
262
|
+
queries itself). */
|
|
263
|
+
@container canvas-bar (width < 656px) {
|
|
264
|
+
.control-strip:has(.work-plane-bar > .select + .select) .back-chip {
|
|
265
|
+
justify-content: center;
|
|
266
|
+
width: var(--control-h);
|
|
267
|
+
padding: 0;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.control-strip:has(.work-plane-bar > .select + .select) .back-chip .back-chip-label {
|
|
271
|
+
display: none;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.control-strip:has(.work-plane-bar > .select + .select) .zoom-controls .btn.is-icon {
|
|
275
|
+
display: none;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/* The isolation trail's levels between the shot and the current layer.
|
|
279
|
+
The shot crumb, the current layer and Done stay; Escape still climbs. */
|
|
280
|
+
.control-strip:has(.work-plane-bar > .select + .select) .iso-trail-step {
|
|
281
|
+
display: none;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.zoom-readout {
|
|
286
|
+
font-variant-numeric: var(--numeric);
|
|
287
|
+
min-width: 48px;
|
|
288
|
+
text-align: center;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/* ---- the way back ---------------------------------------------------------- */
|
|
292
|
+
/* First in the bar, where a back control goes in every editor that has one.
|
|
293
|
+
ACCENT INK: being inside something is a state, and the way out of a state
|
|
294
|
+
is signal rather than furniture. It is the one way back in the working
|
|
295
|
+
area; the timeline's corner only names where you are. */
|
|
296
|
+
.back-chip {
|
|
297
|
+
display: inline-flex;
|
|
298
|
+
align-items: center;
|
|
299
|
+
gap: var(--space-2);
|
|
300
|
+
height: var(--control-h);
|
|
301
|
+
max-width: 180px;
|
|
302
|
+
padding: 0 var(--space-3) 0 var(--space-1);
|
|
303
|
+
border: 0;
|
|
304
|
+
border-radius: var(--control-radius);
|
|
305
|
+
background: transparent;
|
|
306
|
+
font: inherit;
|
|
307
|
+
font-size: var(--type-md);
|
|
308
|
+
font-weight: var(--weight-medium);
|
|
309
|
+
white-space: nowrap;
|
|
310
|
+
overflow: hidden;
|
|
311
|
+
text-overflow: ellipsis;
|
|
312
|
+
color: var(--accent-ink);
|
|
313
|
+
cursor: pointer;
|
|
314
|
+
transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
.back-chip:hover {
|
|
318
|
+
color: var(--ink-1);
|
|
319
|
+
background: var(--fill-rest);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.back-chip:focus-visible {
|
|
323
|
+
outline: none;
|
|
324
|
+
box-shadow: var(--focus-ring);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.back-chip .tool-icon {
|
|
328
|
+
flex: none;
|
|
329
|
+
display: inline-flex;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/* The name gives, the chevron never does: a bare text node in a flex button
|
|
333
|
+
cannot ellipsize, so the label is its own box. */
|
|
334
|
+
.back-chip-label {
|
|
335
|
+
min-width: 0;
|
|
336
|
+
overflow: hidden;
|
|
337
|
+
text-overflow: ellipsis;
|
|
338
|
+
white-space: nowrap;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/* A NARROW BAR shortens the way back's label first. Inside a definition the
|
|
342
|
+
label is the shot's name, as long as an author makes it, and at the 180px
|
|
343
|
+
cap a definition's bar needs 697px of content (the give order above has the
|
|
344
|
+
sums). The cap holds it to 637 under 712, and step 4 takes the label whole
|
|
345
|
+
where even that does not fit. The cap is the give, so no control ever shrinks. */
|
|
346
|
+
@container canvas-bar (width < 712px) {
|
|
347
|
+
.back-chip {
|
|
348
|
+
max-width: 120px;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/* The isolation trail caps its crumbs the same way. */
|
|
352
|
+
.iso-crumb {
|
|
353
|
+
max-width: 96px;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
.back-chip .tool-icon svg {
|
|
358
|
+
width: 14px;
|
|
359
|
+
height: 14px;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/* ---- the isolation trail --------------------------------------------------- */
|
|
363
|
+
/* In place of the back chip while isolated (IsolationTrail.tsx): the shot,
|
|
364
|
+
the levels above, the isolated layer, then Done. Ancestors are quiet ink,
|
|
365
|
+
the current level is full ink, and Done carries the accent the back chip
|
|
366
|
+
carries: the way out of a state is signal. */
|
|
367
|
+
.iso-trail {
|
|
368
|
+
display: flex;
|
|
369
|
+
align-items: center;
|
|
370
|
+
gap: var(--space-1);
|
|
371
|
+
flex: none;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/* A separator and the crumb after it, one box so the give can drop both. */
|
|
375
|
+
.iso-trail-step {
|
|
376
|
+
display: contents;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
.iso-trail-sep {
|
|
380
|
+
flex: none;
|
|
381
|
+
display: inline-flex;
|
|
382
|
+
color: var(--ink-3);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.iso-trail-sep svg {
|
|
386
|
+
width: 12px;
|
|
387
|
+
height: 12px;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.iso-crumb {
|
|
391
|
+
display: inline-flex;
|
|
392
|
+
align-items: center;
|
|
393
|
+
gap: var(--space-2);
|
|
394
|
+
height: var(--control-h);
|
|
395
|
+
max-width: 140px;
|
|
396
|
+
padding: 0 var(--space-2);
|
|
397
|
+
border: 0;
|
|
398
|
+
border-radius: var(--control-radius);
|
|
399
|
+
background: transparent;
|
|
400
|
+
font: inherit;
|
|
401
|
+
font-size: var(--type-md);
|
|
402
|
+
font-weight: var(--weight-medium);
|
|
403
|
+
white-space: nowrap;
|
|
404
|
+
overflow: hidden;
|
|
405
|
+
text-overflow: ellipsis;
|
|
406
|
+
color: var(--ink-2);
|
|
407
|
+
cursor: pointer;
|
|
408
|
+
transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
button.iso-crumb:hover,
|
|
412
|
+
.iso-crumb.is-open {
|
|
413
|
+
color: var(--ink-1);
|
|
414
|
+
background: var(--fill-rest);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
.iso-crumb:focus-visible {
|
|
418
|
+
outline: none;
|
|
419
|
+
box-shadow: var(--focus-ring);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
.iso-crumb.is-current {
|
|
423
|
+
color: var(--ink-1);
|
|
424
|
+
font-weight: var(--weight-semibold);
|
|
425
|
+
cursor: default;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
.iso-crumb-icon {
|
|
429
|
+
flex: none;
|
|
430
|
+
display: inline-flex;
|
|
431
|
+
color: var(--ink-2);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
.iso-crumb-icon.is-component {
|
|
435
|
+
color: var(--accent-ink);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
.iso-crumb-icon svg {
|
|
439
|
+
width: 14px;
|
|
440
|
+
height: 14px;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
.iso-crumb-label {
|
|
444
|
+
min-width: 0;
|
|
445
|
+
overflow: hidden;
|
|
446
|
+
text-overflow: ellipsis;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
.iso-offscreen {
|
|
450
|
+
flex: none;
|
|
451
|
+
margin-left: var(--space-1);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
.iso-done {
|
|
455
|
+
flex: none;
|
|
456
|
+
color: var(--accent-ink);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/* ---- the working pane's controls ------------------------------------------- */
|
|
460
|
+
.shading-bar,
|
|
461
|
+
.camera-view-bar {
|
|
462
|
+
display: flex;
|
|
463
|
+
align-items: center;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/* The shading modes, in a `Popover` rather than a `.tool-flyout`. It portals
|
|
467
|
+
to <body>, and that is the point: `Popover` closes on an outside pointerdown
|
|
468
|
+
and on Escape, flips above the anchor when the window is too short below it,
|
|
469
|
+
and clamps itself off the left and right edges. `.tool-flyout` does none of
|
|
470
|
+
those — it can only be dismissed from inside itself.
|
|
471
|
+
`.popover` already paints the surface, radius and shadow, so this is the
|
|
472
|
+
flyout's LAYOUT only — the same 5px/2px rhythm as `.tool-flyout`, minus the
|
|
473
|
+
positioning and the panel the popover brings. */
|
|
474
|
+
.shading-menu {
|
|
475
|
+
display: flex;
|
|
476
|
+
flex-direction: column;
|
|
477
|
+
gap: var(--space-1);
|
|
478
|
+
padding: var(--pill-pad);
|
|
479
|
+
white-space: nowrap;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/* A menu row is a LABELLED row, so it sizes to its text — the same exception
|
|
483
|
+
`.tool-flyout .tool-button` makes, for the same reason: `.tool-button`'s
|
|
484
|
+
36px square is for an icon strip, and a label inside one overflows its own
|
|
485
|
+
background. */
|
|
486
|
+
.shading-menu .tool-button {
|
|
487
|
+
width: auto;
|
|
488
|
+
min-width: 36px;
|
|
489
|
+
justify-content: flex-start;
|
|
490
|
+
gap: var(--space-4);
|
|
491
|
+
padding: 0 var(--space-5);
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/* The construction plane and the curve basis are house `.select`s: the same
|
|
495
|
+
28px pill as the rest of the bar, chevron lane included. */
|
|
496
|
+
.work-plane-bar {
|
|
497
|
+
display: flex;
|
|
498
|
+
align-items: center;
|
|
499
|
+
gap: var(--space-2);
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/* ---- the camera menu ------------------------------------------------------- */
|
|
503
|
+
/* Armed follow is the GIZMO's yellow and not the accent: it is the same subject
|
|
504
|
+
as the frustum and the in-pane badge, and an accent wash here would say
|
|
505
|
+
"selected" about a mode.
|
|
506
|
+
|
|
507
|
+
`border`, not `border-color`: `.tool-button` carries `border: 0`, where
|
|
508
|
+
`border-color` paints nothing and the armed state would lose the outline the
|
|
509
|
+
wash is half of. The global `box-sizing: border-box` keeps the button
|
|
510
|
+
square with it. */
|
|
511
|
+
.camera-view-bar .tool-button.is-armed,
|
|
512
|
+
.camera-menu .tool-button.is-armed {
|
|
513
|
+
background: color-mix(in srgb, var(--frustum) 18%, transparent);
|
|
514
|
+
border: 1px solid color-mix(in srgb, var(--frustum) 50%, transparent);
|
|
515
|
+
color: var(--frustum);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/* The caption names the two cameras once, above the verbs. It WRAPS: the menu
|
|
519
|
+
inherits `.shading-menu`'s nowrap for its rows, and a sentence is not a row. */
|
|
520
|
+
.camera-menu-caption {
|
|
521
|
+
max-width: 280px;
|
|
522
|
+
margin-bottom: var(--space-2);
|
|
523
|
+
padding: var(--space-2) var(--space-5) var(--space-4);
|
|
524
|
+
border-bottom: 1px solid var(--line);
|
|
525
|
+
color: var(--ink-2);
|
|
526
|
+
font-size: var(--type-sm);
|
|
527
|
+
line-height: var(--leading-body);
|
|
528
|
+
white-space: normal;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
.camera-menu .tool-button {
|
|
532
|
+
width: 100%;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
.camera-menu .tool-button:disabled {
|
|
536
|
+
opacity: var(--opacity-disabled);
|
|
537
|
+
cursor: default;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
.camera-menu-key {
|
|
541
|
+
margin-left: auto;
|
|
542
|
+
padding-left: var(--space-7);
|
|
543
|
+
color: var(--ink-2);
|
|
544
|
+
font-size: var(--type-sm);
|
|
545
|
+
}
|