@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,525 @@
|
|
|
1
|
+
/* The tool footer: the docked row under the canvas cell, the tool buttons, groups and flyouts, the shot's metadata and the view track. */
|
|
2
|
+
|
|
3
|
+
/* ---- the tool footer ---------------------------------------------------- */
|
|
4
|
+
/* THE TOOLS ARE DOCKED. They rode a floating pill over the bottom of the
|
|
5
|
+
picture; the Paper redesign gives them a row of their own under the canvas
|
|
6
|
+
cell, on the panel ground with a hairline on top, and nothing floats over
|
|
7
|
+
the stage any more. The row has two halves pushed apart: the tools (or, in
|
|
8
|
+
the Project context, the shot under the playhead) on the left and the view
|
|
9
|
+
track on the right (ToolFooter.tsx).
|
|
10
|
+
|
|
11
|
+
A GRID TRACK, NOT A MEASURED BOX. The row is `foot-t / main-b` in the
|
|
12
|
+
shell's grid (shell.css), so the footer follows every dock drag and
|
|
13
|
+
collapse with no arithmetic, and the canvas cell above it ends at its top
|
|
14
|
+
edge. The track is 0 until `.shell.has-tool-footer` opens it, and App mounts
|
|
15
|
+
this box in the same commit, so the two cannot disagree for a frame.
|
|
16
|
+
|
|
17
|
+
ON THE FLOAT TIER, not the panel tier, although it is docked: its flyouts
|
|
18
|
+
open UPWARD over the canvas cell, and they have to paint over the scrims
|
|
19
|
+
(`--z-scrim`) and the canvas cell's mode content, which sit above the panel
|
|
20
|
+
tier. A positioned box with a z-index is also what paints it above the
|
|
21
|
+
fixed stage iframe at all, which every docked cell needs.
|
|
22
|
+
|
|
23
|
+
It is one of the boxes `measureInset` reads (`insetPanels` in
|
|
24
|
+
App.tsx), so the stage frames the picture above it. */
|
|
25
|
+
.tool-footer {
|
|
26
|
+
grid-column: rail-r / insp-l;
|
|
27
|
+
grid-row: foot-t / main-b;
|
|
28
|
+
position: relative;
|
|
29
|
+
z-index: var(--z-float);
|
|
30
|
+
min-width: 0;
|
|
31
|
+
min-height: 0;
|
|
32
|
+
display: flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
justify-content: space-between;
|
|
35
|
+
/* The least air between the two halves when the row is full. */
|
|
36
|
+
gap: var(--space-7);
|
|
37
|
+
/* A size container, for the view track's give order (below). The footer's
|
|
38
|
+
width is its grid track's, never its content's, so containment changes
|
|
39
|
+
nothing else: the flyouts are absolutely positioned inside their own
|
|
40
|
+
anchors and the view menu portals to the body. */
|
|
41
|
+
container: tool-footer / inline-size;
|
|
42
|
+
/* THE ROW NEVER WRAPS, the canvas bar's rule and the canvas bar's reason:
|
|
43
|
+
the failure is vertical, and a second row is a row the track has no
|
|
44
|
+
height for. The view track gives way instead, and the tools never do
|
|
45
|
+
(the give order below). NO `overflow`: the flyouts hang out of the top of
|
|
46
|
+
this box, and a clip would cut them off (sourceHygiene pins both
|
|
47
|
+
halves). */
|
|
48
|
+
flex-wrap: nowrap;
|
|
49
|
+
/* Paper's 12px a side (2026-10-13 design review), which the canvas bar
|
|
50
|
+
shares so the column's two docked rows start on one line. The row is
|
|
51
|
+
`--tool-footer-h` (48) around 28px tools and the 28px view track. */
|
|
52
|
+
padding: 0 var(--space-6);
|
|
53
|
+
background: var(--surface-panel);
|
|
54
|
+
border-top: 1px solid var(--line);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* NO SURFACE OF ITS OWN: the footer is the surface. A row inside it. */
|
|
58
|
+
.tool-dock {
|
|
59
|
+
display: flex;
|
|
60
|
+
align-items: center;
|
|
61
|
+
gap: var(--space-2);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* 36px, not 32, and full-strength ink rather than --text-dim. This is the
|
|
65
|
+
BASE recipe, shared with the canvas bar's pane triggers and the menus that
|
|
66
|
+
drop off them (canvas.css), which size it for their own row. The footer
|
|
67
|
+
sizes it and inks it below. */
|
|
68
|
+
.tool-button {
|
|
69
|
+
display: inline-flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
justify-content: center;
|
|
72
|
+
width: 36px;
|
|
73
|
+
height: 36px;
|
|
74
|
+
font: inherit;
|
|
75
|
+
font-size: var(--type-lg);
|
|
76
|
+
color: var(--ink-1);
|
|
77
|
+
background: transparent;
|
|
78
|
+
border: 0;
|
|
79
|
+
border-radius: var(--radius-md);
|
|
80
|
+
cursor: pointer;
|
|
81
|
+
transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* THE FOOTER'S BUTTONS ARE THE HOUSE CONTROL: 28px squares with the small
|
|
85
|
+
radius and a 16px glyph, which is Paper's footer and the canvas bar's own
|
|
86
|
+
control size, so the two docked rows of the canvas column draw one control.
|
|
87
|
+
BEFORE `.is-labelled` and `.tool-flyout .tool-button`, which tie it on
|
|
88
|
+
specificity and must win their widths.
|
|
89
|
+
|
|
90
|
+
IDLE IS --ink-2, Paper's footer stroke: a row of nine full-ink glyphs read
|
|
91
|
+
as nine pressed controls, and the armed wash had nothing quiet to stand out
|
|
92
|
+
from. Hover, focus and an open menu lift to --ink-1 (below, and the base
|
|
93
|
+
hover), and the armed tool takes the accent ink.
|
|
94
|
+
|
|
95
|
+
BOTH COLOUR RULES ARE `:where()`-WRAPPED so they stay at this rule's
|
|
96
|
+
specificity, which `.is-armed` ties and beats by coming later: a plain
|
|
97
|
+
`:focus-visible` here would turn a focused armed tool back to ink. And the
|
|
98
|
+
idle dim skips the flyouts' rows, which are a MENU's labelled rows and read
|
|
99
|
+
at full ink like every other menu. */
|
|
100
|
+
.tool-footer .tool-button {
|
|
101
|
+
width: var(--control-h);
|
|
102
|
+
height: var(--control-h);
|
|
103
|
+
border-radius: var(--radius-xs);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.tool-footer .tool-button:where(:not(.tool-flyout *)) {
|
|
107
|
+
color: var(--ink-2);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.tool-footer .tool-button:where(:focus-visible, [aria-expanded="true"]) {
|
|
111
|
+
color: var(--ink-1);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.tool-footer .tool-icon svg {
|
|
115
|
+
width: 16px;
|
|
116
|
+
height: 16px;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.tool-button:hover:not(:disabled) {
|
|
120
|
+
background: var(--fill-rest);
|
|
121
|
+
color: var(--ink-1);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* A tool the current layout cannot arm (see `toolRefusal`). Both halves matter:
|
|
125
|
+
the dim says it is dead, and `:not(:disabled)` on the hover above is what
|
|
126
|
+
stops it lifting under the pointer and promising otherwise. */
|
|
127
|
+
.tool-button:disabled {
|
|
128
|
+
opacity: var(--opacity-disabled);
|
|
129
|
+
cursor: default;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* The armed tool is a soft accent wash, not a solid slab. A saturated fill on
|
|
133
|
+
a small button next to eight neutral ones reads as an error badge. */
|
|
134
|
+
.tool-button.is-armed {
|
|
135
|
+
background: var(--accent-soft);
|
|
136
|
+
color: var(--accent-ink);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* Animate mode is a MODE, not a tool, so it gets the warm colour rather than
|
|
140
|
+
the accent — the whole point is that it does not look like an armed tool. */
|
|
141
|
+
.tool-button.tool-animate[aria-pressed="true"] {
|
|
142
|
+
background: color-mix(in srgb, var(--accent-warm) 16%, transparent);
|
|
143
|
+
color: var(--accent-warm);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* A control that carries its own WORD. Animate is the one left: it is a MODE
|
|
147
|
+
rather than one of the mutually-exclusive tools, and a mode has to say so at
|
|
148
|
+
rest — an armed `⏺` among the glyphs said nothing. Add went back to a bare
|
|
149
|
+
icon with a caret, because a menu announces itself by opening. Auto width so
|
|
150
|
+
the label sizes it; the row's height is the footer's control height. */
|
|
151
|
+
.tool-button.is-labelled {
|
|
152
|
+
width: auto;
|
|
153
|
+
min-width: 36px;
|
|
154
|
+
gap: var(--space-3);
|
|
155
|
+
padding: 0 var(--space-4);
|
|
156
|
+
font-size: var(--type-md);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/* The word's glyph is 14px, Paper's Animate mark: a 16px record dot beside
|
|
160
|
+
the word outweighed it. After `.tool-footer .tool-icon svg`, which it must
|
|
161
|
+
beat. */
|
|
162
|
+
.tool-footer .tool-button.is-labelled .tool-icon svg {
|
|
163
|
+
width: 14px;
|
|
164
|
+
height: 14px;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* ── THE DOCK IS GROUPS, NOT TEN BUTTONS ────────────────────────────────
|
|
168
|
+
A flat run of ten icons says every one of them is the same kind of thing,
|
|
169
|
+
and they are not: two of them say what a press MEANS (pick, move), six of
|
|
170
|
+
them make something, one is a menu and the last is a mode. The groups are
|
|
171
|
+
named for a screen reader and gapped as one run; the ONE rule, before the
|
|
172
|
+
mode, is Paper's footer (ToolDockBar.tsx). The grouping is data, see
|
|
173
|
+
`ToolSpec.group`, so a new tool joins a group rather than landing wherever
|
|
174
|
+
the JSX happened to put it. */
|
|
175
|
+
.tool-group {
|
|
176
|
+
display: flex;
|
|
177
|
+
align-items: center;
|
|
178
|
+
gap: var(--space-2);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/* Paper's rule: 1px by 20px, which is the 28px row less 4px each end. The
|
|
182
|
+
buttons either side carry their own air, so the margin is only the pixel
|
|
183
|
+
that keeps the rule off them. */
|
|
184
|
+
.tool-separator {
|
|
185
|
+
width: 1px;
|
|
186
|
+
align-self: stretch;
|
|
187
|
+
margin: var(--space-2) 1px;
|
|
188
|
+
background: var(--line);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/* A button that opens something as well as doing something: the shapes
|
|
192
|
+
trigger and Add. A corner triangle rather than a chevron beside the glyph,
|
|
193
|
+
which is the toolbar convention (Figma, Illustrator) and costs no width in
|
|
194
|
+
a row that has none to give. */
|
|
195
|
+
.tool-button.has-caret {
|
|
196
|
+
position: relative;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.tool-caret {
|
|
200
|
+
position: absolute;
|
|
201
|
+
right: 3px;
|
|
202
|
+
bottom: 3px;
|
|
203
|
+
width: 0;
|
|
204
|
+
height: 0;
|
|
205
|
+
border-left: 4px solid transparent;
|
|
206
|
+
border-bottom: 4px solid currentColor;
|
|
207
|
+
opacity: 0.55;
|
|
208
|
+
pointer-events: none;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.tool-flyout-anchor {
|
|
212
|
+
position: relative;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* THE FLYOUT OPENS TOWARDS THE ROOM. The base rule is DOWNWARD, for an anchor
|
|
216
|
+
near the top of the window: an upward flyout there has ~64px of viewport
|
|
217
|
+
above it and the page cannot scroll, so every row past the first two sat
|
|
218
|
+
above y=0 and was unreachable by mouse. `.tool-footer` inverts it below.
|
|
219
|
+
|
|
220
|
+
The max-height + scroll is for a flyout whose row count is data-driven
|
|
221
|
+
(devices from the registry, components from the live library). */
|
|
222
|
+
.tool-flyout {
|
|
223
|
+
position: absolute;
|
|
224
|
+
top: calc(100% + 8px);
|
|
225
|
+
left: 0;
|
|
226
|
+
display: flex;
|
|
227
|
+
flex-direction: column;
|
|
228
|
+
gap: var(--space-1);
|
|
229
|
+
padding: var(--pill-pad);
|
|
230
|
+
border-radius: var(--radius-md);
|
|
231
|
+
white-space: nowrap;
|
|
232
|
+
z-index: 1;
|
|
233
|
+
max-height: calc(100vh - 140px);
|
|
234
|
+
overflow-y: auto;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/* ── AND UPWARD OUT OF THE FOOTER ──────────────────────────────────────────
|
|
238
|
+
The mirror of the rule above, and the same argument: open towards the room.
|
|
239
|
+
Under the footer is the timeline, so a menu that opens down is a menu drawn
|
|
240
|
+
over the dock. Up is the whole picture.
|
|
241
|
+
|
|
242
|
+
`top: auto` is not optional. `top` and `bottom` both set on an absolutely
|
|
243
|
+
positioned box stretches it between the two rather than letting the content
|
|
244
|
+
size it, so the flyout would be as tall as the viewport with its rows pinned
|
|
245
|
+
to the bottom of that box.
|
|
246
|
+
|
|
247
|
+
── AND THE CAP IS MEASURED FROM THIS BAR, NOT FROM THE VIEWPORT ─────────
|
|
248
|
+
THE BUG THIS EXISTS TO STOP, caught in a browser and not by a test: the Add
|
|
249
|
+
menu's row count is data-driven (devices from the registry, 2D documents,
|
|
250
|
+
every component in the live library) and it renders 689px tall. Capped at
|
|
251
|
+
`100vh - 200px` it was ALLOWED to be 689px tall. And it opens upward from a
|
|
252
|
+
bar that is itself ~550px down the window, so its top landed at y=-141 and
|
|
253
|
+
the first rows were above the viewport with no way to scroll to them. That
|
|
254
|
+
is the same unreachable-menu failure the base rule above was written for,
|
|
255
|
+
arrived at from the opposite direction.
|
|
256
|
+
|
|
257
|
+
The room above this bar is the canvas cell: the window less the two bars,
|
|
258
|
+
the bottom row and this footer, all four of them real track sizes. Less
|
|
259
|
+
32px of air: the flyout's 8px gap, and 24px so a full menu does not sit
|
|
260
|
+
flush against the canvas bar.
|
|
261
|
+
|
|
262
|
+
── AND THE GAP IS FROM THE FOOTER'S EDGE, NOT THE TRIGGER'S ──────────────
|
|
263
|
+
The anchor is the 28px trigger, centred in the 48px row, so `100% + 8px`
|
|
264
|
+
alone ended the menu 2px INSIDE the footer, over its hairline and the row
|
|
265
|
+
it opened from. The half of the row the trigger leaves is added back, so
|
|
266
|
+
the menu ends 8px above the footer and lives wholly over the canvas cell,
|
|
267
|
+
where the cap above already assumes it is (dockedShellE2e pins it). The
|
|
268
|
+
folded view menu does the same sum from its 28px picker (ViewModeBar.tsx),
|
|
269
|
+
so every menu the footer opens ends on one line. */
|
|
270
|
+
.tool-footer .tool-flyout {
|
|
271
|
+
top: auto;
|
|
272
|
+
bottom: calc(100% + 8px + (var(--tool-footer-h) - var(--control-h)) / 2);
|
|
273
|
+
max-height: calc(100vh - var(--topbar-h) - var(--panel-head-h) - var(--dock-row-h) - var(--tool-footer-h) - 32px);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/* THE TOOLBAR ON TOP flips it back DOWN, over the canvas cell, which is now
|
|
277
|
+
below the footer. The same gap from the footer's edge and the same cap: the
|
|
278
|
+
room is still the canvas cell's height. */
|
|
279
|
+
.shell.tool-footer-top .tool-footer .tool-flyout {
|
|
280
|
+
top: calc(100% + 8px + (var(--tool-footer-h) - var(--control-h)) / 2);
|
|
281
|
+
bottom: auto;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/* The dock's SVG glyphs — CSS-sized like every other appearance of the set
|
|
285
|
+
(the icons.tsx rule: never by attributes). currentColor rides the button's
|
|
286
|
+
own states, so armed/disabled tint the icon for free. */
|
|
287
|
+
.tool-icon {
|
|
288
|
+
display: inline-flex;
|
|
289
|
+
align-items: center;
|
|
290
|
+
justify-content: center;
|
|
291
|
+
}
|
|
292
|
+
.tool-icon svg {
|
|
293
|
+
width: 18px;
|
|
294
|
+
height: 18px;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/* A flyout row is a LABELLED row, so it sizes to its text. The footer's 28px
|
|
298
|
+
square is for the dock's icon row, and a label inside one overflows its own
|
|
299
|
+
background. The 36px height is restated because `.tool-footer .tool-button`
|
|
300
|
+
ties this rule on specificity and would hand a menu row the icon row's
|
|
301
|
+
height. */
|
|
302
|
+
.tool-flyout .tool-button {
|
|
303
|
+
width: auto;
|
|
304
|
+
min-width: 36px;
|
|
305
|
+
height: 36px;
|
|
306
|
+
justify-content: flex-start;
|
|
307
|
+
gap: var(--space-4);
|
|
308
|
+
padding: 0 var(--space-5);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/* ---- the Project context's left half: the shot under the playhead ---------- */
|
|
312
|
+
/* Where the tools are inside a shot (ToolFooter.tsx): the shot's name over
|
|
313
|
+
its number, length and rate. Paper's two lines: the name at 13/18 and 600
|
|
314
|
+
in primary ink, the facts in mono 12/16 at 400 in secondary ink, 4px
|
|
315
|
+
apart. The block gives before the view track does: it is the one thing in
|
|
316
|
+
the row that can, and a long shot name ellipsizes rather than pushing the
|
|
317
|
+
track under the inspector. */
|
|
318
|
+
.shot-meta {
|
|
319
|
+
display: flex;
|
|
320
|
+
flex-direction: column;
|
|
321
|
+
gap: var(--space-2);
|
|
322
|
+
flex: 0 1 auto;
|
|
323
|
+
min-width: 0;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.shot-meta-name,
|
|
327
|
+
.shot-meta-line {
|
|
328
|
+
overflow: hidden;
|
|
329
|
+
text-overflow: ellipsis;
|
|
330
|
+
white-space: nowrap;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
.shot-meta-name {
|
|
334
|
+
font-size: var(--type-lg);
|
|
335
|
+
line-height: var(--leading-sm);
|
|
336
|
+
font-weight: var(--weight-semibold);
|
|
337
|
+
color: var(--ink-1);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
.shot-meta-line {
|
|
341
|
+
font-family: var(--font-mono);
|
|
342
|
+
font-size: var(--type-md);
|
|
343
|
+
line-height: var(--leading-xs);
|
|
344
|
+
font-weight: var(--weight-regular);
|
|
345
|
+
color: var(--ink-2);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/* ---- the view track: the footer's right half -------------------------------- */
|
|
349
|
+
/* 3D | Split | Camera, then the Clean view eye (ViewModeBar.tsx), 8px apart,
|
|
350
|
+
Paper's footer since the 2026-10-13 design review. The WRAPPER is only the
|
|
351
|
+
row: the layouts' `SegmentedControl` is the track, and the eye is a square
|
|
352
|
+
of its own on the same control ground. `margin-left: auto` keeps the row at
|
|
353
|
+
the right edge when the left half renders nothing (no shot under the
|
|
354
|
+
playhead).
|
|
355
|
+
|
|
356
|
+
The layouts are THE ONE SEGMENTED CONTROL (ui/widgets.css): the 28px
|
|
357
|
+
track on the control fill, 24px chips 2px apart, the flat lit tile and the
|
|
358
|
+
2px accent focus ring all come from the house recipe. Only the chip width
|
|
359
|
+
is the footer's: each chip sits at its glyph and word, not an equal share.
|
|
360
|
+
|
|
361
|
+
Every rule is scoped by `.tool-footer`, so the canvas bar's and the
|
|
362
|
+
inspector's `.segmented` rules never meet these. */
|
|
363
|
+
.tool-footer .view-mode-bar {
|
|
364
|
+
display: flex;
|
|
365
|
+
align-items: center;
|
|
366
|
+
flex: none;
|
|
367
|
+
margin-left: auto;
|
|
368
|
+
gap: var(--space-4);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/* The track. `flex: none` overrides the house `flex: 1`, which is for the
|
|
372
|
+
inspector rows `.segmented` was drawn for. */
|
|
373
|
+
.tool-footer .view-mode-bar .segmented {
|
|
374
|
+
flex: none;
|
|
375
|
+
align-items: center;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/* A chip sized by its content: glyph and word 6px apart (the `.btn` gap),
|
|
379
|
+
12px a side (the house chip). */
|
|
380
|
+
.tool-footer .view-mode-bar .segmented .segmented-item {
|
|
381
|
+
flex: none;
|
|
382
|
+
width: auto;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/* A GLYPH HAS TO BE GIVEN A SIZE. Every icon in this set is a bare
|
|
386
|
+
`svg viewBox`, sized by CSS or not at all; the pill once drew a switch here
|
|
387
|
+
as two 0x0 glyphs, correct, announced and invisible. 14px in the chips,
|
|
388
|
+
Paper's; the eye's is 16, below. */
|
|
389
|
+
.tool-footer .view-mode-bar .view-chip-icon {
|
|
390
|
+
display: inline-flex;
|
|
391
|
+
flex: none;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
.tool-footer .view-mode-bar .view-chip-icon svg {
|
|
395
|
+
width: 14px;
|
|
396
|
+
height: 14px;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/* CLEAN VIEW: Paper's eye, a 28px square on the track's ground with the
|
|
400
|
+
field radius, the track's own box, so it reads as the track's neighbour and
|
|
401
|
+
not one of its chips.
|
|
402
|
+
Pressed is the armed tool's soft accent wash, the footer's one "on" look. */
|
|
403
|
+
.tool-footer .clean-view-toggle {
|
|
404
|
+
display: inline-flex;
|
|
405
|
+
align-items: center;
|
|
406
|
+
justify-content: center;
|
|
407
|
+
flex: none;
|
|
408
|
+
width: var(--control-h);
|
|
409
|
+
height: var(--control-h);
|
|
410
|
+
padding: 0;
|
|
411
|
+
border: 0;
|
|
412
|
+
border-radius: var(--field-radius);
|
|
413
|
+
background: var(--surface-secondary);
|
|
414
|
+
color: var(--ink-2);
|
|
415
|
+
cursor: pointer;
|
|
416
|
+
transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
.tool-footer .clean-view-toggle:hover {
|
|
420
|
+
background: var(--fill-rest);
|
|
421
|
+
color: var(--ink-1);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
.tool-footer .clean-view-toggle:focus-visible {
|
|
425
|
+
outline: none;
|
|
426
|
+
box-shadow: var(--focus-ring);
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
.tool-footer .clean-view-toggle[aria-pressed="true"] {
|
|
430
|
+
background: var(--accent-soft);
|
|
431
|
+
color: var(--accent-ink);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
.tool-footer .clean-view-toggle .view-chip-icon svg {
|
|
435
|
+
width: 16px;
|
|
436
|
+
height: 16px;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/* THE FOLDED TRACK: one labelled chip on the track's ground, naming the
|
|
440
|
+
layout on screen, with the three a press away. Hidden until the footer runs
|
|
441
|
+
short (below). Auto width, because `.tool-footer .tool-button` is the 28px
|
|
442
|
+
glyph square. Primary ink: it names the current state, as a lit chip does. */
|
|
443
|
+
.tool-footer .view-mode-bar .view-picker {
|
|
444
|
+
display: none;
|
|
445
|
+
width: auto;
|
|
446
|
+
height: var(--control-h);
|
|
447
|
+
padding: 0 var(--space-5);
|
|
448
|
+
gap: var(--space-3);
|
|
449
|
+
border-radius: var(--field-radius);
|
|
450
|
+
background: var(--surface-secondary);
|
|
451
|
+
font-size: var(--type-md);
|
|
452
|
+
color: var(--ink-1);
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/* ── THE GIVE ORDER: FULL, THEN COMPACT, THEN FOLDED ────────────────────────
|
|
456
|
+
The tools never fold, and neither does the eye. The track is what gives,
|
|
457
|
+
in two steps:
|
|
458
|
+
1. COMPACT: 3D and Camera drop their glyphs and keep their words; Split is
|
|
459
|
+
a word already.
|
|
460
|
+
2. FOLDED: the track goes, and the one picker names the layout on screen,
|
|
461
|
+
the three a press away (its menu opens upward, over the canvas,
|
|
462
|
+
ViewModeBar.tsx).
|
|
463
|
+
|
|
464
|
+
Measured in Chromium (the widths are the widest case of each; the lit
|
|
465
|
+
chip is a flat tile and costs no width):
|
|
466
|
+
the tools row (ToolDockBar) 409.3 (377.3 + Comment)
|
|
467
|
+
the full track 205.7 (Split lit)
|
|
468
|
+
the compact track 165.7 (Split lit)
|
|
469
|
+
the folded picker on its ground 64.3 ("Camera")
|
|
470
|
+
the Clean view eye, after an 8px gap 36
|
|
471
|
+
the metadata block, "Shot 01 · 0:02 · 30 fps" 151.8 (its line)
|
|
472
|
+
Each sum below is the left half, the 16px gap, the track and the eye:
|
|
473
|
+
with the tools full fits from 667.0, compact from 627.0, folded from 525.6
|
|
474
|
+
with the shot full fits from 409.5, compact from 369.5
|
|
475
|
+
The thresholds round those up to the next 4px. They are the footer's
|
|
476
|
+
CONTENT width (a container query measures the content box), which is the
|
|
477
|
+
column less the footer's 12px padding a side:
|
|
478
|
+
window footer content with the tools in the Project
|
|
479
|
+
1024 592 568 folded full
|
|
480
|
+
1280 776 752 full full
|
|
481
|
+
1366 862 838 full full
|
|
482
|
+
1440 912 888 full full
|
|
483
|
+
1600 1072 1048 full full
|
|
484
|
+
So the full track holds from a 1280 window in every layout, and only a
|
|
485
|
+
rail or inspector dragged wide compacts it there. At 1024, the narrowest
|
|
486
|
+
column `fitShell` makes, the folded row is 526 in 568, and the smallest
|
|
487
|
+
canvas a drag can reach (`CANVAS_MIN`, 640, 616 of content) folds it too.
|
|
488
|
+
|
|
489
|
+
The shot's metadata gives first and the track only after: the block
|
|
490
|
+
ellipsizes (`min-width: 0`), so in the Project the track compacts only once
|
|
491
|
+
the facts line could not show whole. The scopes are `:has()` on the footer,
|
|
492
|
+
read by its descendants (a container never queries itself). With neither
|
|
493
|
+
half on the left (no shot under the playhead) the track is alone and fits
|
|
494
|
+
any column `fitShell` makes. */
|
|
495
|
+
@container tool-footer (width < 668px) {
|
|
496
|
+
.tool-footer:has(.tool-dock) .view-mode-bar .layout-switch .view-chip-icon {
|
|
497
|
+
display: none;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
@container tool-footer (width < 412px) {
|
|
502
|
+
.tool-footer:has(.shot-meta) .view-mode-bar .layout-switch .view-chip-icon {
|
|
503
|
+
display: none;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
@container tool-footer (width < 628px) {
|
|
508
|
+
.tool-footer:has(.tool-dock) .view-mode-bar .segmented {
|
|
509
|
+
display: none;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
.tool-footer:has(.tool-dock) .view-mode-bar .view-picker {
|
|
513
|
+
display: inline-flex;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
@container tool-footer (width < 372px) {
|
|
518
|
+
.tool-footer:has(.shot-meta) .view-mode-bar .segmented {
|
|
519
|
+
display: none;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
.tool-footer:has(.shot-meta) .view-mode-bar .view-picker {
|
|
523
|
+
display: inline-flex;
|
|
524
|
+
}
|
|
525
|
+
}
|