@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,754 @@
|
|
|
1
|
+
/* The timeline's FRAME: the dock grid and its cells, the head (transport, clock, view tools,
|
|
2
|
+
zoom), the ruler, the playhead and the overlay drawn through the tracks, the label-column
|
|
3
|
+
corner. The Rows mode's row kinds are in timeline-rows.css, the Graph mode's pane in
|
|
4
|
+
timeline-graph.css and the transport's volume popover in timeline-meters.css, imported
|
|
5
|
+
right after this file in the same layer. */
|
|
6
|
+
|
|
7
|
+
/* ---- timeline dock ------------------------------------------------------ */
|
|
8
|
+
/* THE BOTTOM ROW, edge to edge under all three columns, its seam on top. The
|
|
9
|
+
row's height is the dock's height: `--dock-row-h`, written by App.tsx from
|
|
10
|
+
the dragged size through `fitShell`, its head when collapsed and 0 with no
|
|
11
|
+
Project open.
|
|
12
|
+
|
|
13
|
+
A SUBGRID OF THE SHELL'S THREE COLUMN TRACKS: the name column under the
|
|
14
|
+
left column, the lane under the canvas and the right column. Sound mode
|
|
15
|
+
gives the right column to its mixer (`.dock-body.has-side`).
|
|
16
|
+
A collapsed column keeps its track, so collapse and Video never move a bar.
|
|
17
|
+
The head row is the dock head LESS the 1px seam above it, so a collapsed
|
|
18
|
+
row (exactly `DOCK_HEAD_H`) holds the whole head and clips nothing. */
|
|
19
|
+
.timeline-dock {
|
|
20
|
+
grid-column: edge-l / edge-r;
|
|
21
|
+
grid-row: main-b / edge-b;
|
|
22
|
+
display: grid;
|
|
23
|
+
grid-template-columns: subgrid;
|
|
24
|
+
grid-template-rows: calc(var(--dock-head-h) - 1px) minmax(0, 1fr);
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
/* THE PANEL GREY (founder call 2026-10-18, as the editor in the landing
|
|
27
|
+
hero draws it): the head band, the label column, the ruler and the lanes
|
|
28
|
+
sit on the columns' own ground. Timeline option A (Paper page 02) put
|
|
29
|
+
them on the stage's black well, and the editor read as all black. Every
|
|
30
|
+
opaque cover in the dock (the sticky label cells, the ruler, its corner)
|
|
31
|
+
and every hollow mark paints this same ground. */
|
|
32
|
+
background: var(--surface-panel);
|
|
33
|
+
border-top: 1px solid var(--line);
|
|
34
|
+
/* The trim handles' width, and the room the shot bar's open button leaves
|
|
35
|
+
for its handle. Optical geometry: a 7px target on a 1px edge. */
|
|
36
|
+
--dock-trim-w: 7px;
|
|
37
|
+
/* NOTHING IN THIS BOX IS TEXT TO SELECT. Every gesture in the dock is a drag
|
|
38
|
+
(the ruler scrub, a bar, a trim handle, a marker) and each one's
|
|
39
|
+
compatibility mousedown plants a selection anchor and then drags the focus
|
|
40
|
+
end with the pointer, so a scrub painted the ticks, the frame readout and
|
|
41
|
+
the layer names blue instead of seeking. `Ruler` cancels its own press,
|
|
42
|
+
which fixes the ruler; this covers every other drag in the dock and the
|
|
43
|
+
scene bar's double-click besides.
|
|
44
|
+
SCOPED HERE AND NOT ON `body`: the rail, the inspector and the agent
|
|
45
|
+
transcript hold prose an author copies. The dock's inputs are the Sound
|
|
46
|
+
tab's file picker (`hidden`) and range inputs, and a range input has no
|
|
47
|
+
selectable content, so nothing here needs a `user-select: text` hatch. */
|
|
48
|
+
user-select: none;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* A crash card takes the whole cell, not the first grid cell it lands in. */
|
|
52
|
+
.timeline-dock > .panel-crash {
|
|
53
|
+
grid-column: 1 / -1;
|
|
54
|
+
grid-row: 1 / -1;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* The head spans all three tracks and is a subgrid of them too, so each of
|
|
58
|
+
its cells stands over its own column. */
|
|
59
|
+
.dock-head {
|
|
60
|
+
grid-column: 1 / -1;
|
|
61
|
+
grid-row: 1;
|
|
62
|
+
display: grid;
|
|
63
|
+
grid-template-columns: subgrid;
|
|
64
|
+
border-bottom: 1px solid var(--line-soft);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* THE HEAD'S CHIPS ARE `.btn`: collapse, go to start, loop, Fit, + Shot, the
|
|
68
|
+
zoom steps and the speaker. The house recipe draws them, and nothing here
|
|
69
|
+
restates it. Play is the one exception, below. The glyphs are the shot
|
|
70
|
+
family's 24-grid strokes (icons.tsx), which carry no size of their own; the
|
|
71
|
+
transport's own three (start, play, the speaker) are the ui set's solid
|
|
72
|
+
12-grid glyphs, drawn at their 12px so they stay on the pixel grid. */
|
|
73
|
+
.dock-transport svg,
|
|
74
|
+
.dock-tools svg {
|
|
75
|
+
flex: none;
|
|
76
|
+
width: 16px;
|
|
77
|
+
height: 16px;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* THE LEFT CELL, under the label column: the collapse chevron and the view
|
|
81
|
+
switch on one band, 12 in from the seam and 8 apart. The panel's name is
|
|
82
|
+
gone: the switch says what this is. Its border continues the left column's
|
|
83
|
+
seam. */
|
|
84
|
+
.dock-title {
|
|
85
|
+
grid-column: 1;
|
|
86
|
+
container: dock-title / inline-size;
|
|
87
|
+
display: flex;
|
|
88
|
+
align-items: center;
|
|
89
|
+
gap: var(--space-4);
|
|
90
|
+
min-width: 0;
|
|
91
|
+
padding: 0 var(--space-6);
|
|
92
|
+
border-right: 1px solid var(--line);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.dock-title .dock-collapse {
|
|
96
|
+
flex: none;
|
|
97
|
+
width: 24px;
|
|
98
|
+
height: 24px;
|
|
99
|
+
color: var(--ink-2);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.dock-title svg {
|
|
103
|
+
flex: none;
|
|
104
|
+
width: 14px;
|
|
105
|
+
height: 14px;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* ROWS | GRAPH | SOUND: THE ONE SEGMENTED CONTROL (ui/widgets.css), track,
|
|
109
|
+
chips, hover, active tile and focus ring all shared. Only the chip width is
|
|
110
|
+
this column's: each chip sits at its words' width with 8px a side, so the
|
|
111
|
+
three and the chevron fit the 224px column. */
|
|
112
|
+
.dock-modes {
|
|
113
|
+
justify-self: start;
|
|
114
|
+
flex: 0 1 auto;
|
|
115
|
+
min-width: 0;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.dock-modes .segmented-item,
|
|
119
|
+
.dock-modes .segmented-item:first-child,
|
|
120
|
+
.dock-modes .segmented-item:last-child {
|
|
121
|
+
flex: 0 1 auto;
|
|
122
|
+
min-width: 0;
|
|
123
|
+
padding: 0 var(--space-4);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* A RAIL UNDER 224px (its floor is 168) cannot hold the chips at the house
|
|
127
|
+
inset, so the chevron moves to 6 from the seam and the gap drops to 4. A
|
|
128
|
+
container never styles itself, so the inset comes back as negative margins
|
|
129
|
+
on its children. Under 200px the chips give up their side padding too, and
|
|
130
|
+
share what is left: still wider than "Sound" at 500 down to the floor. */
|
|
131
|
+
@container dock-title (width < 224px) {
|
|
132
|
+
.dock-title .dock-collapse {
|
|
133
|
+
margin-inline-start: calc(var(--space-3) - var(--space-6));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.dock-title .dock-modes {
|
|
137
|
+
margin-inline-start: calc(var(--space-2) - var(--space-4));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@container dock-title (width < 200px) {
|
|
142
|
+
.dock-modes .segmented-item,
|
|
143
|
+
.dock-modes .segmented-item:first-child,
|
|
144
|
+
.dock-modes .segmented-item:last-child {
|
|
145
|
+
padding: 0 var(--space-1);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* THE VIEW, under the canvas, in three bands: the lead (Sound's tempo), the
|
|
150
|
+
transport in the middle, the view tools at the end. Grid and not flex, so
|
|
151
|
+
the transport sits on the CELL's centre whatever the two sides hold, and a
|
|
152
|
+
side never shrinks below its own content: when the cell is too narrow to
|
|
153
|
+
centre, the middle slides instead of a button being squeezed.
|
|
154
|
+
|
|
155
|
+
ONE LINE, ALWAYS. An inline-size container, because the canvas can be as
|
|
156
|
+
narrow as 640px: the container queries below take pieces away before
|
|
157
|
+
anything wraps, and `overflow: hidden` is only the backstop. */
|
|
158
|
+
.dock-view {
|
|
159
|
+
grid-column: 2 / -1;
|
|
160
|
+
container: dock-view / inline-size;
|
|
161
|
+
display: grid;
|
|
162
|
+
grid-template-columns: minmax(max-content, 1fr) auto minmax(max-content, 1fr);
|
|
163
|
+
align-items: center;
|
|
164
|
+
column-gap: var(--space-6);
|
|
165
|
+
min-width: 0;
|
|
166
|
+
padding: 0 var(--space-6);
|
|
167
|
+
overflow: hidden;
|
|
168
|
+
white-space: nowrap;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.dock-lead {
|
|
172
|
+
display: flex;
|
|
173
|
+
align-items: center;
|
|
174
|
+
gap: var(--space-5);
|
|
175
|
+
min-width: 0;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/* THE TRANSPORT: go to start, play, the speaker, the Project's loop, the
|
|
179
|
+
clock. 12 apart, the boards' transport. */
|
|
180
|
+
.dock-transport {
|
|
181
|
+
display: flex;
|
|
182
|
+
align-items: center;
|
|
183
|
+
gap: var(--space-6);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.dock-transport .dock-start {
|
|
187
|
+
color: var(--ink-2);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.dock-transport .dock-start svg,
|
|
191
|
+
.dock-transport .dock-mute svg {
|
|
192
|
+
width: 12px;
|
|
193
|
+
height: 12px;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/* PLAY, the head's one filled control: a 28px ink disc with the glyph cut out
|
|
197
|
+
in the dock's ground (the panel), so the verb an author reaches for most is the one
|
|
198
|
+
that stands out of the strip. Pause and a queued Play's cancel wear the same
|
|
199
|
+
disc (PlayButton.tsx). Hover and press mix the disc toward the ground, so
|
|
200
|
+
the states hold in both themes. Positioned, for a queued Play's ring. */
|
|
201
|
+
.dock-transport .dock-play {
|
|
202
|
+
position: relative;
|
|
203
|
+
width: 28px;
|
|
204
|
+
height: 28px;
|
|
205
|
+
padding: 0;
|
|
206
|
+
border: 0;
|
|
207
|
+
border-radius: var(--radius-full);
|
|
208
|
+
background: var(--ink-1);
|
|
209
|
+
color: var(--surface-panel);
|
|
210
|
+
transition:
|
|
211
|
+
background var(--dur-fast) var(--ease),
|
|
212
|
+
transform var(--dur-fast) var(--ease);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.dock-transport .dock-play:hover:not(:disabled) {
|
|
216
|
+
background: color-mix(in srgb, var(--ink-1) 82%, var(--surface-panel));
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.dock-transport .dock-play:active:not(:disabled) {
|
|
220
|
+
background: color-mix(in srgb, var(--ink-1) 68%, var(--surface-panel));
|
|
221
|
+
transform: scale(0.94);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.dock-transport .dock-play:focus-visible {
|
|
225
|
+
box-shadow: var(--focus-ring);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/* The glyph, a child: the ring's own svg sits inside `.play-ring`. */
|
|
229
|
+
.dock-transport .dock-play > svg {
|
|
230
|
+
width: 12px;
|
|
231
|
+
height: 12px;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/* The triangle's mass sits left of its box (its centroid is at 5.5 of 12),
|
|
235
|
+
so on the disc it reads off-centre. One pixel right puts it on the optical
|
|
236
|
+
centre. Pause and the cancel cross are symmetric and stay put. A refused
|
|
237
|
+
Play is idle too, only disabled. */
|
|
238
|
+
.dock-transport .dock-play[data-state="idle"] > svg {
|
|
239
|
+
transform: translateX(1px);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/* THE QUEUED PLAY'S RING, on both play controls (PlayButton.tsx): the font
|
|
243
|
+
field's ring (`.font-field-ring`, inspector-object.css, which turns it and
|
|
244
|
+
stills it for reduced motion) laid over the control, where each context
|
|
245
|
+
places it. It holds back 300ms, so a start that is ready at once never
|
|
246
|
+
flashes it, then lands the way a status chip does (`status-chip-in`): a
|
|
247
|
+
fade, or a plain step where motion is not wanted. It takes no press: the
|
|
248
|
+
control's own box is the target. */
|
|
249
|
+
.play-ring {
|
|
250
|
+
position: absolute;
|
|
251
|
+
pointer-events: none;
|
|
252
|
+
animation: status-chip-in 0s 300ms both;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.play-ring > .font-field-ring {
|
|
256
|
+
display: block;
|
|
257
|
+
width: 100%;
|
|
258
|
+
height: 100%;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
262
|
+
.play-ring {
|
|
263
|
+
animation-duration: var(--dur-fast);
|
|
264
|
+
animation-timing-function: var(--ease);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/* On the dock, 4px outside the disc: 36px across, the ring's own grid, so
|
|
269
|
+
its 1.5 stroke draws 1.5px. The 40px head holds it. */
|
|
270
|
+
.dock-transport .dock-play .play-ring {
|
|
271
|
+
inset: -4px;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/* THE CLOCK, the chrome's one playhead readout: always padded ("00:02.20"),
|
|
275
|
+
in the mono face, so it is a fixed slot that never jitters sideways on a
|
|
276
|
+
frame. The muted suffix says what it is measured against: the frame inside
|
|
277
|
+
a shot ("66 f"), the Project's length, or Sound's bar and beat. */
|
|
278
|
+
.dock-time {
|
|
279
|
+
display: flex;
|
|
280
|
+
align-items: baseline;
|
|
281
|
+
min-width: 0;
|
|
282
|
+
white-space: nowrap;
|
|
283
|
+
font: var(--type-md)/var(--leading-xs) var(--font-mono);
|
|
284
|
+
font-variant-numeric: var(--numeric);
|
|
285
|
+
color: var(--ink-1);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/* The suffix opens on its own space (kept by `pre`), so the text reads as
|
|
289
|
+
words to a screen reader and the gap is the mono face's one space. */
|
|
290
|
+
.dock-time-frame {
|
|
291
|
+
white-space: pre;
|
|
292
|
+
color: var(--ink-3);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/* THE VIEW TOOLS, at the end: Fit, + Shot, the zoom. 10 apart. */
|
|
296
|
+
.dock-tools {
|
|
297
|
+
justify-self: end;
|
|
298
|
+
display: flex;
|
|
299
|
+
align-items: center;
|
|
300
|
+
gap: var(--space-5);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/* Fit is a word, not a chip: plain 12 secondary on no ground. */
|
|
304
|
+
.dock-tools .dock-fit {
|
|
305
|
+
height: auto;
|
|
306
|
+
padding: 0;
|
|
307
|
+
border: 0;
|
|
308
|
+
background: transparent;
|
|
309
|
+
font-size: var(--type-md);
|
|
310
|
+
font-weight: var(--weight-regular);
|
|
311
|
+
color: var(--ink-2);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.dock-tools .dock-fit:hover:not(:disabled) {
|
|
315
|
+
background: transparent;
|
|
316
|
+
color: var(--ink-1);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/* The container measures the CONTENT box: the canvas less 24px of padding.
|
|
320
|
+
The Project and shot heads: below 860px the clock drops its suffix, below
|
|
321
|
+
760px the zoom keeps only its track. Sound's head carries the tempo, the
|
|
322
|
+
bar and beat, Library and Generate besides, so it gives the same pieces up
|
|
323
|
+
sooner, then Fit (its key, \, stays), then the zoom altogether. */
|
|
324
|
+
@container dock-view (width < 860px) {
|
|
325
|
+
.dock-time-frame {
|
|
326
|
+
display: none;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
@container dock-view (width < 760px) {
|
|
331
|
+
.dock-zoom-step {
|
|
332
|
+
display: none;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
@container dock-view (width < 1040px) {
|
|
337
|
+
.dock-view.is-sound .dock-time-frame {
|
|
338
|
+
display: none;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
@container dock-view (width < 960px) {
|
|
343
|
+
.dock-view.is-sound .dock-zoom-step {
|
|
344
|
+
display: none;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
@container dock-view (width < 880px) {
|
|
349
|
+
.dock-view.is-sound .dock-fit {
|
|
350
|
+
display: none;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
@container dock-view (width < 800px) {
|
|
355
|
+
.dock-view.is-sound .dock-zoom-group {
|
|
356
|
+
display: none;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/* The lane: the body row's full width, or its two left tracks while Sound
|
|
361
|
+
mode's mixer (or its Generate drawer) holds the right one. */
|
|
362
|
+
.dock-body {
|
|
363
|
+
grid-column: 1 / -1;
|
|
364
|
+
grid-row: 2;
|
|
365
|
+
display: flex;
|
|
366
|
+
flex-direction: column;
|
|
367
|
+
min-width: 0;
|
|
368
|
+
min-height: 0;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
.dock-body.has-side {
|
|
372
|
+
grid-column: 1 / 3;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/* THE `hidden` ATTRIBUTE ONLY WORKS IF THIS RULE EXISTS. `[hidden]
|
|
376
|
+
{ display: none }` is a USER-AGENT rule and the author `display: flex`
|
|
377
|
+
above outranks it, so a collapsed dock kept every row laid out.
|
|
378
|
+
`dockCollapse.test.tsx` asserts the attribute; sourceHygiene reads this. */
|
|
379
|
+
.dock-body[hidden] {
|
|
380
|
+
display: none;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
.dock-scroll {
|
|
384
|
+
overflow: auto;
|
|
385
|
+
min-height: 0;
|
|
386
|
+
padding-bottom: var(--space-3);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/* STICKY, because the dock scrolls vertically now: shot rows follow the
|
|
390
|
+
playhead up and down, and a time ruler that leaves with them takes the
|
|
391
|
+
answer to "where are we" with it. Above `.dock-overlay` (3) and the sticky
|
|
392
|
+
label cells (4); the playhead inside it keeps its own local stacking. */
|
|
393
|
+
/* A FLEX ROW, because the label column's corner is a real child rather than
|
|
394
|
+
`padding-left`: it is sticky-left like every label cell under it, so it
|
|
395
|
+
cannot be absolutely positioned inside a padding. */
|
|
396
|
+
.dock-ruler {
|
|
397
|
+
position: sticky;
|
|
398
|
+
top: 0;
|
|
399
|
+
z-index: 5;
|
|
400
|
+
background: var(--surface-panel);
|
|
401
|
+
height: 28px;
|
|
402
|
+
display: flex;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/* ── THE RULER'S OWN RULES ───────────────────────────────────────────────
|
|
406
|
+
*
|
|
407
|
+
* `Ruler` comes from @dailies-studio/timeline but its CSS lives in
|
|
408
|
+
* canvas-editor's LOCAL stylesheet, so this chrome rendered the component
|
|
409
|
+
* with no rules at all: every tick stacked at x=0 and the ruler read as the
|
|
410
|
+
* single run-on number "0102030405060". Restated here rather than moved into
|
|
411
|
+
* the shared sheet, because this lane's timeline is a BLOCK timeline and its
|
|
412
|
+
* ruler is shorter and quieter than the canvas dope sheet's. */
|
|
413
|
+
.tl-ruler {
|
|
414
|
+
position: relative;
|
|
415
|
+
height: 100%;
|
|
416
|
+
overflow: hidden;
|
|
417
|
+
cursor: ew-resize;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
.tl-tick {
|
|
421
|
+
position: absolute;
|
|
422
|
+
top: 0;
|
|
423
|
+
bottom: 0;
|
|
424
|
+
padding-left: var(--space-3);
|
|
425
|
+
font: var(--type-micro)/var(--leading-none) var(--font-sans);
|
|
426
|
+
font-variant-numeric: var(--numeric);
|
|
427
|
+
font-size: var(--type-micro);
|
|
428
|
+
line-height: 20px;
|
|
429
|
+
color: var(--ink-3);
|
|
430
|
+
pointer-events: none;
|
|
431
|
+
white-space: nowrap;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
.tl-tick::before {
|
|
435
|
+
content: "";
|
|
436
|
+
position: absolute;
|
|
437
|
+
left: 0;
|
|
438
|
+
bottom: 4px;
|
|
439
|
+
width: 1px;
|
|
440
|
+
height: 6px;
|
|
441
|
+
background: var(--line);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/* The stretch past the document's duration, which `Ruler` draws unconditionally
|
|
445
|
+
(`left` inline, from `durationFrames`). It was the one rule the restatement
|
|
446
|
+
above missed, so it laid out as an unstyled zero-size div and the region that
|
|
447
|
+
WILL NOT EXPORT looked exactly like the region that will. On this lane the
|
|
448
|
+
master strip runs to the last block, which is routinely past the end.
|
|
449
|
+
The ruler sits on the well, the darkest ground there is, so nothing can
|
|
450
|
+
fall back from it: the stretch past the end LIFTS toward the panel grey
|
|
451
|
+
instead, the colour of the chrome that is not the work. */
|
|
452
|
+
.tl-overhang {
|
|
453
|
+
position: absolute;
|
|
454
|
+
top: 0;
|
|
455
|
+
bottom: 0;
|
|
456
|
+
right: 0;
|
|
457
|
+
background: color-mix(in srgb, var(--surface-panel) 60%, transparent);
|
|
458
|
+
pointer-events: none;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
/* Isolation's lane is fitted to the object, so the shot's range can start
|
|
462
|
+
inside it: the stretch BEFORE the shot lifts the same way (`width` inline). */
|
|
463
|
+
.tl-overhang.is-before {
|
|
464
|
+
left: 0;
|
|
465
|
+
right: auto;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
/* ISOLATION'S MARKERS, as ruler ticks: their lane is hidden there, and a beat
|
|
469
|
+
to time against is still worth having. The marker lane's diamond, smaller,
|
|
470
|
+
just above the ruler's floor. A press falls through to the ruler's seek
|
|
471
|
+
(it bubbles to `.tl-ruler`); the pointer stays for the label's title. */
|
|
472
|
+
.dock-marker-tick {
|
|
473
|
+
position: absolute;
|
|
474
|
+
bottom: var(--space-2);
|
|
475
|
+
width: 6px;
|
|
476
|
+
height: 6px;
|
|
477
|
+
margin-left: -3px;
|
|
478
|
+
background: var(--marker-pin);
|
|
479
|
+
transform: rotate(45deg);
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/* THE DOCK'S TICKS (`dockRulerTicks`): three tiers on a seconds ladder, a
|
|
483
|
+
zero-width box per tick whose hairline stands up off the ruler's floor, 10,
|
|
484
|
+
6 and 3px tall by tier, in every context: the 28px ruler has no room for the
|
|
485
|
+
Project's old taller set. Only the major tier is labelled, 4px down, so the
|
|
486
|
+
label clears the major hairline beside it. `.tl-tick` above is the package
|
|
487
|
+
dope sheet's. */
|
|
488
|
+
.dock-tick {
|
|
489
|
+
position: absolute;
|
|
490
|
+
top: 0;
|
|
491
|
+
bottom: 0;
|
|
492
|
+
width: 0;
|
|
493
|
+
pointer-events: none;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
.dock-tick::before {
|
|
497
|
+
content: "";
|
|
498
|
+
position: absolute;
|
|
499
|
+
left: 0;
|
|
500
|
+
bottom: 0;
|
|
501
|
+
width: 1px;
|
|
502
|
+
height: 10px;
|
|
503
|
+
background: var(--line);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
.dock-tick[data-tier="1"]::before {
|
|
507
|
+
height: 6px;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
.dock-tick[data-tier="2"]::before {
|
|
511
|
+
height: 3px;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
.dock-tick-label {
|
|
515
|
+
position: absolute;
|
|
516
|
+
top: 4px;
|
|
517
|
+
left: var(--space-2);
|
|
518
|
+
font: var(--type-md)/var(--leading-xs) var(--font-numeric);
|
|
519
|
+
font-variant-numeric: var(--numeric);
|
|
520
|
+
color: var(--ink-3);
|
|
521
|
+
white-space: nowrap;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/* The last label reads INTO the lane from its tick, so it never runs off the
|
|
525
|
+
end of the strip it labels. */
|
|
526
|
+
.dock-tick-label.is-end {
|
|
527
|
+
left: auto;
|
|
528
|
+
right: var(--space-2);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/* THE PLAYHEAD IS A 1px ACCENT LINE, on the ruler and through the tracks, at
|
|
532
|
+
its frame by `translate` (`PlayheadLine`). It shared the cut marker's rule
|
|
533
|
+
once, which drew it as a 9px rotated square. */
|
|
534
|
+
.dock-playhead {
|
|
535
|
+
position: absolute;
|
|
536
|
+
top: 0;
|
|
537
|
+
bottom: 0;
|
|
538
|
+
left: 0;
|
|
539
|
+
width: 1px;
|
|
540
|
+
background: var(--playhead);
|
|
541
|
+
pointer-events: none;
|
|
542
|
+
z-index: 4;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/* THE RULER COPY WEARS THE HEAD (`.tl-playhead-chip`, @dailies-studio/
|
|
546
|
+
timeline's playhead.css): the line starts 5px down, so the 18px pill sits
|
|
547
|
+
5px off both edges of the 28px ruler and the line runs on below it. */
|
|
548
|
+
.dock-ruler .dock-playhead {
|
|
549
|
+
top: 5px;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
.dock-tracks {
|
|
553
|
+
display: flex;
|
|
554
|
+
flex-direction: column;
|
|
555
|
+
position: relative;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
/* One overlay for everything drawn THROUGH the tracks: the scene boundaries,
|
|
559
|
+
the snap guide and the playhead. It starts where the time area does and takes
|
|
560
|
+
no pointer events, so a boundary line can never eat a bar's drag. */
|
|
561
|
+
.dock-overlay {
|
|
562
|
+
position: absolute;
|
|
563
|
+
top: 0;
|
|
564
|
+
bottom: 0;
|
|
565
|
+
right: 0;
|
|
566
|
+
pointer-events: none;
|
|
567
|
+
z-index: 3;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
.dock-boundary {
|
|
571
|
+
position: absolute;
|
|
572
|
+
top: 0;
|
|
573
|
+
bottom: 0;
|
|
574
|
+
width: 1px;
|
|
575
|
+
background: var(--line);
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
/* Isolation's shot range through the rows: the ruler's overhang wash, carried
|
|
579
|
+
down, so a key the film never reaches is tinted where it sits. */
|
|
580
|
+
.dock-bounds-shade {
|
|
581
|
+
position: absolute;
|
|
582
|
+
top: 0;
|
|
583
|
+
bottom: 0;
|
|
584
|
+
background: color-mix(in srgb, var(--surface-panel) 40%, transparent);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/* THE WORK AREA, over the ruler: the window a press of Space will loop.
|
|
588
|
+
`WorkAreaBracket` (Header.tsx) says why the numbers come off `playbackWindow`
|
|
589
|
+
and not off `state.workArea`.
|
|
590
|
+
|
|
591
|
+
A BRACKET AND NOT A HIGHLIGHT. Two solid edges with a barely-there wash
|
|
592
|
+
between them, because the thing an author is checking is WHERE THE EDGES ARE
|
|
593
|
+
— they were just set with ⌥I and ⌥O — and a filled band over the ticks makes
|
|
594
|
+
the timecodes inside it harder to read than the ones outside, which is the
|
|
595
|
+
opposite of what a bracket is for.
|
|
596
|
+
|
|
597
|
+
POINTER-TRANSPARENT. `.tl-ruler` carries the seek-and-drag handler and this
|
|
598
|
+
sits on top of the stretch an author scrubs most; taking the press would make
|
|
599
|
+
the ruler dead exactly inside the region they are working in. */
|
|
600
|
+
.dock-work-area {
|
|
601
|
+
position: absolute;
|
|
602
|
+
top: 0;
|
|
603
|
+
bottom: 0;
|
|
604
|
+
border-left: 2px solid var(--accent);
|
|
605
|
+
border-right: 2px solid var(--accent);
|
|
606
|
+
background: color-mix(in srgb, var(--accent) 8%, transparent);
|
|
607
|
+
pointer-events: none;
|
|
608
|
+
/* Under the playhead (4) and over the ticks. */
|
|
609
|
+
z-index: 2;
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
/* The snap guide is the accent, and it only exists while a drag is ON a target
|
|
613
|
+
— a guide that showed for a drag that merely rounded would teach the author
|
|
614
|
+
that snapping is always on top of them. */
|
|
615
|
+
.dock-snap-guide {
|
|
616
|
+
position: absolute;
|
|
617
|
+
top: 0;
|
|
618
|
+
bottom: 0;
|
|
619
|
+
width: 1px;
|
|
620
|
+
background: var(--accent);
|
|
621
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 30%, transparent);
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
/* ---- the dock's label-column corner ------------------------------------- */
|
|
625
|
+
/* The ruler's first `labelWidth` pixels, over the label column: it NAMES what
|
|
626
|
+
the column lists (the entered shot, or the open definition), and in the
|
|
627
|
+
scene context it is the expand-all over the shots. The one way back out
|
|
628
|
+
lives in the canvas bar.
|
|
629
|
+
|
|
630
|
+
Sticky-left like every label cell below it, so it stays put while the lanes
|
|
631
|
+
scroll under the ruler, and on the same seam. */
|
|
632
|
+
.dock-corner {
|
|
633
|
+
position: sticky;
|
|
634
|
+
left: 0;
|
|
635
|
+
z-index: 6;
|
|
636
|
+
display: flex;
|
|
637
|
+
align-items: center;
|
|
638
|
+
height: 100%;
|
|
639
|
+
min-width: 0;
|
|
640
|
+
padding: 0 var(--space-7);
|
|
641
|
+
background-color: var(--surface-panel);
|
|
642
|
+
border-right: 1px solid var(--line);
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
/* The column's caps label: a shot's or a definition's name, cut short rather
|
|
646
|
+
than pushed past the seam. The same 11/16 caps as the Project's TRACKS. */
|
|
647
|
+
.dock-corner-label {
|
|
648
|
+
min-width: 0;
|
|
649
|
+
overflow: hidden;
|
|
650
|
+
text-overflow: ellipsis;
|
|
651
|
+
white-space: nowrap;
|
|
652
|
+
color: var(--ink-3);
|
|
653
|
+
text-transform: uppercase;
|
|
654
|
+
letter-spacing: var(--tracking-caps);
|
|
655
|
+
font: var(--weight-semibold) var(--type-sm)/var(--leading-xs) var(--font-sans);
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
/* In isolation the corner names the object: its kind's glyph, then its label
|
|
659
|
+
in the same caps. The glyph takes the label's ink. */
|
|
660
|
+
.dock-corner-iso {
|
|
661
|
+
display: flex;
|
|
662
|
+
align-items: center;
|
|
663
|
+
gap: var(--space-2);
|
|
664
|
+
min-width: 0;
|
|
665
|
+
color: var(--ink-3);
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
.dock-corner-iso svg {
|
|
669
|
+
flex: none;
|
|
670
|
+
width: 12px;
|
|
671
|
+
height: 12px;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
/* The Project's TRACKS head and the expand-all over the shots: the same caps
|
|
675
|
+
label, with the disclosure chevron every row under it uses. Quiet like a
|
|
676
|
+
column head, not a chip. */
|
|
677
|
+
.dock-summary {
|
|
678
|
+
display: flex;
|
|
679
|
+
align-items: center;
|
|
680
|
+
gap: var(--space-2);
|
|
681
|
+
min-width: 0;
|
|
682
|
+
height: 100%;
|
|
683
|
+
padding: 0;
|
|
684
|
+
font: var(--weight-semibold) var(--type-sm)/var(--leading-xs) var(--font-sans);
|
|
685
|
+
letter-spacing: var(--tracking-caps);
|
|
686
|
+
text-transform: uppercase;
|
|
687
|
+
color: var(--ink-3);
|
|
688
|
+
background: transparent;
|
|
689
|
+
border: 0;
|
|
690
|
+
cursor: pointer;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
.dock-summary:hover,
|
|
694
|
+
.dock-summary[aria-expanded="true"] {
|
|
695
|
+
color: var(--ink-1);
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
/* ---- re-homed here from other region files (the component that renders
|
|
699
|
+
these lives in this region) ------------------------------------------ */
|
|
700
|
+
|
|
701
|
+
/* Narrow, because what it conveys is a POSITION in a range rather than a
|
|
702
|
+
precise value, and the wheel is still there for anyone who wants to land
|
|
703
|
+
on a number. `flex: none` so a narrow canvas squeezes the verbs, not the
|
|
704
|
+
one track. */
|
|
705
|
+
.dock-zoom {
|
|
706
|
+
width: 96px;
|
|
707
|
+
flex: none;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
/* In the dock head it is a short track between its two ends (minus, track,
|
|
711
|
+
plus), 10 apart, and the ends step a tenth of the range. The track is a 2px
|
|
712
|
+
hairline and the thumb a 10px ink dot: a zoom is a position to glance at,
|
|
713
|
+
so it is drawn quieter than the shared scrub recipe (controls.css). */
|
|
714
|
+
.dock-zoom-group > .dock-zoom {
|
|
715
|
+
width: 72px;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
.dock-zoom-group > .dock-zoom::-webkit-slider-runnable-track {
|
|
719
|
+
height: 2px;
|
|
720
|
+
background: var(--line);
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
.dock-zoom-group > .dock-zoom::-webkit-slider-thumb {
|
|
724
|
+
width: 10px;
|
|
725
|
+
height: 10px;
|
|
726
|
+
margin-top: calc(-1 * var(--space-2));
|
|
727
|
+
background: var(--ink-1);
|
|
728
|
+
box-shadow: none;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
.dock-zoom-group > .dock-zoom::-moz-range-track {
|
|
732
|
+
height: 2px;
|
|
733
|
+
background: var(--line);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
.dock-zoom-group > .dock-zoom::-moz-range-thumb {
|
|
737
|
+
width: 10px;
|
|
738
|
+
height: 10px;
|
|
739
|
+
background: var(--ink-1);
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
.dock-zoom-group {
|
|
743
|
+
display: flex;
|
|
744
|
+
align-items: center;
|
|
745
|
+
gap: var(--space-5);
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
/* The two ends: ghost icon buttons, smaller than the head's 28 so the three
|
|
749
|
+
read as one control. */
|
|
750
|
+
.dock-zoom-group .dock-zoom-step {
|
|
751
|
+
width: 24px;
|
|
752
|
+
height: 24px;
|
|
753
|
+
color: var(--ink-2);
|
|
754
|
+
}
|