@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.
Files changed (432) hide show
  1. package/dist/.vite/manifest.json +382 -0
  2. package/dist/assets/AgentPanel-CQejLbiX.js +2 -0
  3. package/dist/assets/AgentPanel-DJEphah0.css +1 -0
  4. package/dist/assets/AgentQuestionDialog-BqkD0kXF.js +1 -0
  5. package/dist/assets/CodeStudio-Dv4ihHpz.js +23 -0
  6. package/dist/assets/CommentsPanel-B4yhhT1T.js +1 -0
  7. package/dist/assets/ComponentLibraryRail-Ch_dsAru.js +1 -0
  8. package/dist/assets/ComponentStage-BRhRotyH.js +1 -0
  9. package/dist/assets/CurvePane-BjFVabKX.css +1 -0
  10. package/dist/assets/CurvePane-R22WzllJ.js +1 -0
  11. package/dist/assets/ExportDialog-CWLQWTmG.js +2 -0
  12. package/dist/assets/FontPicker-DWKaYL7F.js +1 -0
  13. package/dist/assets/FontPicker-v0IOIArM.css +1 -0
  14. package/dist/assets/GenerateDrawer-Bh3SqDKt.js +2 -0
  15. package/dist/assets/InsertDrawer-Ce1fod1L.js +1 -0
  16. package/dist/assets/LibraryBrowser-D9sEGz5w.js +2 -0
  17. package/dist/assets/MakeItYoursSection-CMO4319_.js +2 -0
  18. package/dist/assets/MaterialGraphCanvas-BFzl4wWR.js +23 -0
  19. package/dist/assets/MaterialGraphCanvas-BIUD59ik.css +1 -0
  20. package/dist/assets/MaterialWorkspace-CqTWqaRA.js +14 -0
  21. package/dist/assets/PreferencesDialog-CBf9_OoD.js +1 -0
  22. package/dist/assets/PresetsSection-CUEaoCVU.js +1 -0
  23. package/dist/assets/SoundHistory-BeS8EW1h.js +1 -0
  24. package/dist/assets/SoundMode-BmcZru3i.js +3 -0
  25. package/dist/assets/StockSounds-DdAUGRYK.js +1 -0
  26. package/dist/assets/TemplateFieldSection-CaeXpLFo.js +1 -0
  27. package/dist/assets/VersionHistoryPanel-CxG6XhNP.js +1 -0
  28. package/dist/assets/board-B88EPuLO.css +1 -0
  29. package/dist/assets/board-CL-he7SL.js +3 -0
  30. package/dist/assets/components-0oOSPN0l.js +1 -0
  31. package/dist/assets/googleFontRanges-gp32wJMo.js +1 -0
  32. package/dist/assets/googleFonts-BNon6M7X.js +1 -0
  33. package/dist/assets/iconsAndAliases-DL7gXP5j.js +1863 -0
  34. package/dist/assets/index-4F5NQmI8.css +1 -0
  35. package/dist/assets/index-BGHQGV5z.js +117 -0
  36. package/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  37. package/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  38. package/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  39. package/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  40. package/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  41. package/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  42. package/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  43. package/dist/assets/libraryModel-CpIwfFha.js +1 -0
  44. package/dist/assets/lucide-6iK64tTB.js +9319 -0
  45. package/dist/assets/motionStamp-CH-Hew4E.js +1 -0
  46. package/dist/assets/takeMeasure-Tdg0TxEi.js +1 -0
  47. package/dist/assets/webmcp-BsB9gxWC.js +2 -0
  48. package/dist/index.html +34 -3
  49. package/package.json +12 -9
  50. package/src/addFamilies.ts +66 -0
  51. package/src/api.ts +1631 -55
  52. package/src/app/App.tsx +977 -198
  53. package/src/app/lazyPanel.tsx +137 -0
  54. package/src/app/lazySurfaces.tsx +203 -0
  55. package/src/audio/index.tsx +41 -10
  56. package/src/audio/meter.ts +485 -0
  57. package/src/audio/meterMath.ts +273 -0
  58. package/src/audio/meterStore.ts +155 -0
  59. package/src/audio/offlineMix.ts +289 -0
  60. package/src/audio/preview.ts +928 -118
  61. package/src/bridge.ts +15 -5
  62. package/src/bridgeTypes.ts +1611 -36
  63. package/src/channels.ts +17 -32
  64. package/src/fonts/googleFonts.ts +4 -0
  65. package/src/hostApi.ts +174 -0
  66. package/src/icons.tsx +770 -0
  67. package/src/layerWords.ts +61 -0
  68. package/src/main.tsx +56 -4
  69. package/src/panels/ResizeHandle.tsx +33 -43
  70. package/src/panels/agent/AgentDots.tsx +36 -0
  71. package/src/panels/agent/AgentPanel.tsx +119 -43
  72. package/src/panels/agent/AgentQuestionDialog.tsx +202 -0
  73. package/src/panels/agent/agent.css +113 -97
  74. package/src/panels/agent/agentGate.ts +35 -0
  75. package/src/panels/code/CodeDefaultsPanel.tsx +345 -0
  76. package/src/panels/code/CodeStudio.tsx +373 -0
  77. package/src/panels/code/FileTree.tsx +265 -0
  78. package/src/panels/code/codeBufferGuard.ts +52 -0
  79. package/src/panels/code/codeParts.tsx +321 -0
  80. package/src/panels/comments/CommentComposer.tsx +239 -0
  81. package/src/panels/comments/CommentThread.tsx +346 -0
  82. package/src/panels/comments/CommentsPanel.tsx +336 -0
  83. package/src/panels/comments/InboxButton.tsx +131 -0
  84. package/src/panels/comments/MentionMenu.tsx +98 -0
  85. package/src/panels/comments/parts.tsx +171 -0
  86. package/src/panels/export/ExportDialog.tsx +919 -96
  87. package/src/panels/export/ExportScrim.tsx +57 -0
  88. package/src/panels/files/AssetsTab.tsx +656 -0
  89. package/src/panels/files/FilePanel.tsx +1466 -216
  90. package/src/panels/files/LayerMarks.tsx +40 -0
  91. package/src/panels/files/LeftColumn.tsx +37 -0
  92. package/src/panels/files/McpSection.tsx +690 -47
  93. package/src/panels/files/MissingAssetsNotice.tsx +60 -0
  94. package/src/panels/files/assetDrag.ts +79 -0
  95. package/src/panels/files/resourceParts.tsx +255 -0
  96. package/src/panels/fonts/FontPicker.tsx +762 -0
  97. package/src/panels/fonts/faceCache.ts +207 -0
  98. package/src/panels/fonts/fontPicker.css +271 -0
  99. package/src/panels/fonts/pickerModel.ts +265 -0
  100. package/src/panels/fonts/pickerRequest.ts +46 -0
  101. package/src/panels/header/AccountAvatar.tsx +76 -0
  102. package/src/panels/header/AgentChip.tsx +77 -0
  103. package/src/panels/header/AppMenu.tsx +213 -0
  104. package/src/panels/header/Header.tsx +564 -84
  105. package/src/panels/header/HistoryControls.tsx +31 -5
  106. package/src/panels/header/PresenceStack.tsx +329 -0
  107. package/src/panels/header/ProjectTitle.tsx +232 -0
  108. package/src/panels/header/ShareButton.tsx +59 -0
  109. package/src/panels/header/StatusBadges.tsx +358 -27
  110. package/src/panels/header/SyncDeletedDialog.tsx +88 -0
  111. package/src/panels/header/ZoomControls.tsx +46 -15
  112. package/src/panels/header/agentHandoff.ts +52 -0
  113. package/src/panels/header/leave.ts +26 -0
  114. package/src/panels/help/HelpSection.tsx +189 -163
  115. package/src/panels/insert/InsertDrawer.tsx +723 -0
  116. package/src/panels/insert/iconSet.ts +109 -0
  117. package/src/panels/inspector/ExposeDot.tsx +117 -0
  118. package/src/panels/inspector/FramingRows.tsx +314 -44
  119. package/src/panels/inspector/InspectorFooter.tsx +91 -0
  120. package/src/panels/inspector/InspectorHead.tsx +425 -0
  121. package/src/panels/inspector/InspectorPanel.tsx +408 -124
  122. package/src/panels/inspector/KeyframeDot.tsx +373 -0
  123. package/src/panels/inspector/KeyframeSection.tsx +257 -0
  124. package/src/panels/inspector/MarkerSection.tsx +55 -11
  125. package/src/panels/inspector/ParamRow.tsx +84 -53
  126. package/src/panels/inspector/RightColumn.tsx +152 -0
  127. package/src/panels/inspector/TimeSection.tsx +866 -0
  128. package/src/panels/inspector/animate/EaseControl.tsx +244 -0
  129. package/src/panels/inspector/animate/PresetsSection.tsx +135 -0
  130. package/src/panels/inspector/animate/ShotSection.tsx +562 -48
  131. package/src/panels/inspector/design/AlignRow.tsx +95 -31
  132. package/src/panels/inspector/design/AppearanceSection.tsx +118 -9
  133. package/src/panels/inspector/design/ClonerSection.tsx +323 -62
  134. package/src/panels/inspector/design/ComponentSection.tsx +50 -43
  135. package/src/panels/inspector/design/CornerSection.tsx +45 -14
  136. package/src/panels/inspector/design/DefinitionProps.tsx +315 -0
  137. package/src/panels/inspector/design/DefinitionSection.tsx +136 -0
  138. package/src/panels/inspector/design/DeviceSection.tsx +210 -0
  139. package/src/panels/inspector/design/FillSection.tsx +83 -51
  140. package/src/panels/inspector/design/FontField.tsx +196 -0
  141. package/src/panels/inspector/design/HtmlSection.tsx +23 -12
  142. package/src/panels/inspector/design/InstanceSection.tsx +373 -154
  143. package/src/panels/inspector/design/MaskSection.tsx +84 -0
  144. package/src/panels/inspector/design/MaterialSection.tsx +177 -0
  145. package/src/panels/inspector/design/MediaSection.tsx +273 -120
  146. package/src/panels/inspector/design/MeshSection.tsx +910 -82
  147. package/src/panels/inspector/design/PaintRows.tsx +550 -0
  148. package/src/panels/inspector/design/PlateStyleSection.tsx +177 -0
  149. package/src/panels/inspector/design/ShadowSection.tsx +221 -48
  150. package/src/panels/inspector/design/SplineFollowSection.tsx +235 -0
  151. package/src/panels/inspector/design/StrokeSection.tsx +228 -43
  152. package/src/panels/inspector/design/TemplateFieldSection.tsx +57 -0
  153. package/src/panels/inspector/design/TransformSection.tsx +244 -50
  154. package/src/panels/inspector/design/TypographySection.tsx +679 -110
  155. package/src/panels/inspector/layout.ts +295 -0
  156. package/src/panels/inspector/propValue.ts +199 -0
  157. package/src/panels/inspector/scene/CameraSection.tsx +232 -22
  158. package/src/panels/inspector/scene/EffectsSection.tsx +722 -71
  159. package/src/panels/inspector/scene/MakeItYoursSection.tsx +180 -0
  160. package/src/panels/inspector/scene/SceneDocSection.tsx +191 -0
  161. package/src/panels/inspector/scene/SceneSection.tsx +219 -44
  162. package/src/panels/inspector/scene/TransitionSection.tsx +523 -72
  163. package/src/panels/inspector/storyboard/StoryboardReferenceSection.tsx +593 -0
  164. package/src/panels/inspector/storyboard/VideoStill.tsx +120 -0
  165. package/src/panels/inspector/timeModel.ts +190 -0
  166. package/src/panels/inspector/useDocWrite.ts +438 -146
  167. package/src/panels/library/LibraryBrowser.tsx +435 -0
  168. package/src/panels/library/LibraryGrid.tsx +190 -0
  169. package/src/panels/library/LibraryPreviewPanel.tsx +349 -0
  170. package/src/panels/library/LibraryRail.tsx +84 -0
  171. package/src/panels/library/LibrarySoundPanel.tsx +293 -0
  172. package/src/panels/library/SoundHistory.tsx +245 -0
  173. package/src/panels/library/StockSounds.tsx +390 -0
  174. package/src/panels/library/libraryModel.ts +147 -0
  175. package/src/panels/library/stockSearch.ts +77 -0
  176. package/src/panels/maskMarks.tsx +117 -0
  177. package/src/panels/material/MaterialCommentNode.tsx +54 -0
  178. package/src/panels/material/MaterialGraphCanvas.tsx +861 -0
  179. package/src/panels/material/MaterialGraphMenu.tsx +45 -0
  180. package/src/panels/material/MaterialGroupNode.tsx +56 -0
  181. package/src/panels/material/MaterialLibrary.tsx +253 -0
  182. package/src/panels/material/MaterialNode.tsx +453 -0
  183. package/src/panels/material/MaterialNodePalette.tsx +349 -0
  184. package/src/panels/material/MaterialParameterControls.tsx +525 -0
  185. package/src/panels/material/MaterialRerouteNode.tsx +42 -0
  186. package/src/panels/material/MaterialWorkspace.tsx +501 -0
  187. package/src/panels/material/NodePreview.tsx +70 -0
  188. package/src/panels/material/flowModel.ts +441 -0
  189. package/src/panels/material/parameterValues.ts +231 -0
  190. package/src/panels/material/previewScheduler.ts +235 -0
  191. package/src/panels/material/reactFlow.css +6 -0
  192. package/src/panels/material/socketGlyph.ts +85 -0
  193. package/src/panels/material/viewportMemory.ts +58 -0
  194. package/src/panels/preferences/PreferencesDialog.tsx +215 -0
  195. package/src/panels/share/ShareComponentDialog.tsx +247 -0
  196. package/src/panels/stage/StageMenu.tsx +35 -5
  197. package/src/panels/stage/StagePanel.tsx +338 -23
  198. package/src/panels/stage/cellSlots.tsx +70 -0
  199. package/src/panels/storyboard/BoardCanvas.tsx +739 -0
  200. package/src/panels/storyboard/BoardCursors.tsx +158 -0
  201. package/src/panels/storyboard/BoardDropDialog.tsx +161 -0
  202. package/src/panels/storyboard/BoardPlan.tsx +42 -0
  203. package/src/panels/storyboard/ComponentSheet.tsx +187 -0
  204. package/src/panels/storyboard/ComponentStage.tsx +235 -0
  205. package/src/panels/storyboard/MiniSketch.tsx +173 -0
  206. package/src/panels/storyboard/PartPicker.tsx +64 -0
  207. package/src/panels/storyboard/PlanPanel.tsx +617 -0
  208. package/src/panels/storyboard/ReferencePreview.tsx +217 -0
  209. package/src/panels/storyboard/ShotBrief.tsx +360 -0
  210. package/src/panels/storyboard/ShotCard.tsx +251 -0
  211. package/src/panels/storyboard/StagePreview.tsx +348 -0
  212. package/src/panels/storyboard/StillThumbs.tsx +162 -0
  213. package/src/panels/storyboard/StoryboardView.tsx +79 -0
  214. package/src/panels/storyboard/board.css +1065 -0
  215. package/src/panels/storyboard/board.ts +12 -0
  216. package/src/panels/storyboard/boardClipboard.ts +111 -0
  217. package/src/panels/storyboard/boardOrder.ts +68 -0
  218. package/src/panels/storyboard/boardRows.tsx +425 -0
  219. package/src/panels/storyboard/liveCap.ts +90 -0
  220. package/src/panels/storyboard/plan.css +295 -0
  221. package/src/panels/storyboard/posterCache.ts +133 -0
  222. package/src/panels/storyboard/shotboard/ComponentPicker.tsx +373 -0
  223. package/src/panels/storyboard/shotboard/ImagePicker.tsx +145 -0
  224. package/src/panels/storyboard/shotboard/ShotBoard.tsx +292 -0
  225. package/src/panels/storyboard/shotboard/SketchCanvas.tsx +443 -0
  226. package/src/panels/storyboard/shotboard/SketchInspector.tsx +471 -0
  227. package/src/panels/storyboard/shotboard/SketchItem.tsx +240 -0
  228. package/src/panels/storyboard/shotboard/SketchLayers.tsx +130 -0
  229. package/src/panels/storyboard/shotboard/SketchPlay.tsx +108 -0
  230. package/src/panels/storyboard/shotboard/SketchStrip.tsx +178 -0
  231. package/src/panels/storyboard/shotboard/SketchToolFooter.tsx +99 -0
  232. package/src/panels/storyboard/shotboard/sketch.css +1392 -0
  233. package/src/panels/storyboard/shotboard/sketchModel.ts +219 -0
  234. package/src/panels/storyboard/storyboardDrop.ts +164 -0
  235. package/src/panels/studio/ComponentLibraryRail.tsx +346 -0
  236. package/src/panels/studio/ComponentSidePanel.tsx +355 -0
  237. package/src/panels/studio/ComponentStudio.tsx +243 -0
  238. package/src/panels/studio/ComponentsHome.tsx +318 -0
  239. package/src/panels/studio/ComponentsPreview.tsx +179 -0
  240. package/src/panels/studio/EveryUse.tsx +244 -0
  241. package/src/panels/studio/ThisUsePanel.tsx +679 -0
  242. package/src/panels/studio/componentParts.tsx +341 -0
  243. package/src/panels/studio/components.ts +6 -0
  244. package/src/panels/studio/newCodeComponent.ts +66 -0
  245. package/src/panels/timeline/AudioFxButton.tsx +290 -0
  246. package/src/panels/timeline/AudioLane.tsx +674 -85
  247. package/src/panels/timeline/BlockRow.tsx +154 -85
  248. package/src/panels/timeline/ChannelRow.tsx +378 -129
  249. package/src/panels/timeline/CurvePane.tsx +508 -0
  250. package/src/panels/timeline/Filmstrip.tsx +361 -0
  251. package/src/panels/timeline/GenerateDrawer.tsx +407 -0
  252. package/src/panels/timeline/KeyStretch.tsx +115 -0
  253. package/src/panels/timeline/LifespanRow.tsx +730 -47
  254. package/src/panels/timeline/MarkerLane.tsx +46 -8
  255. package/src/panels/timeline/PlayButton.tsx +91 -0
  256. package/src/panels/timeline/PropertyPicker.tsx +254 -0
  257. package/src/panels/timeline/ShotRow.tsx +400 -0
  258. package/src/panels/timeline/SoundMode.tsx +1406 -0
  259. package/src/panels/timeline/TimelineDock.tsx +2338 -272
  260. package/src/panels/timeline/TransportVolume.tsx +163 -0
  261. package/src/panels/timeline/beatRuler.ts +74 -0
  262. package/src/panels/timeline/curveModel.ts +500 -0
  263. package/src/panels/timeline/duckUnderVoice.ts +68 -0
  264. package/src/panels/timeline/keyframeMenu.ts +138 -0
  265. package/src/panels/timeline/labelWidth.ts +49 -0
  266. package/src/panels/timeline/marquee.ts +155 -0
  267. package/src/panels/timeline/model.ts +1860 -199
  268. package/src/panels/timeline/snap.ts +125 -43
  269. package/src/panels/timeline/staggerPreview.tsx +92 -0
  270. package/src/panels/timeline/takeMeasure.ts +72 -0
  271. package/src/panels/timeline/useLive.ts +48 -0
  272. package/src/panels/timeline/viewport.ts +234 -0
  273. package/src/panels/toolbar/BackChip.tsx +116 -0
  274. package/src/panels/toolbar/CameraViewBar.tsx +118 -49
  275. package/src/panels/toolbar/CanvasBar.tsx +117 -0
  276. package/src/panels/toolbar/InsertButton.tsx +38 -0
  277. package/src/panels/toolbar/IsolationTrail.tsx +156 -0
  278. package/src/panels/toolbar/PanelToggles.tsx +86 -0
  279. package/src/panels/toolbar/ShadingBar.tsx +119 -26
  280. package/src/panels/toolbar/ToolDockBar.tsx +329 -80
  281. package/src/panels/toolbar/ToolFooter.tsx +102 -0
  282. package/src/panels/toolbar/ViewModeBar.tsx +247 -38
  283. package/src/panels/toolbar/WorkPlaneBar.tsx +94 -0
  284. package/src/panels/toolbar/useAddRows.tsx +326 -0
  285. package/src/panels/toolbar/useDismiss.ts +122 -0
  286. package/src/panels/versions/VersionHistoryPanel.tsx +274 -0
  287. package/src/panels/versions/versionModel.ts +103 -0
  288. package/src/panels/virtualWindow.ts +271 -0
  289. package/src/shotTokens.css +151 -60
  290. package/src/stage/FrustumGizmo.tsx +504 -84
  291. package/src/stage/GridPlane.tsx +225 -16
  292. package/src/stage/NodePreviews.tsx +628 -0
  293. package/src/stage/PerfHud.tsx +437 -47
  294. package/src/stage/SplitRenderer.tsx +816 -169
  295. package/src/stage/StageApp.tsx +4274 -486
  296. package/src/stage/StageRootBoundary.tsx +114 -0
  297. package/src/stage/StageTools.tsx +651 -151
  298. package/src/stage/TransformGizmo.tsx +696 -0
  299. package/src/stage/adaptivePresentation.ts +145 -0
  300. package/src/stage/bridgeClient.ts +2522 -41
  301. package/src/stage/exportWorker.ts +9 -0
  302. package/src/stage/feed.ts +305 -14
  303. package/src/stage/fontPreview.ts +176 -0
  304. package/src/stage/frustumGeometry.ts +319 -1
  305. package/src/stage/furnitureTokens.ts +33 -0
  306. package/src/stage/gizmoMath.ts +508 -16
  307. package/src/stage/gpuTimer.ts +276 -0
  308. package/src/stage/instanceModules.ts +194 -33
  309. package/src/stage/interactions/move.ts +24 -5
  310. package/src/stage/isolation.ts +291 -33
  311. package/src/stage/jsSelfProfiler.ts +325 -0
  312. package/src/stage/main.tsx +116 -16
  313. package/src/stage/modalState.ts +222 -23
  314. package/src/stage/moduleEpoch.ts +60 -0
  315. package/src/stage/motionPathStage.ts +279 -0
  316. package/src/stage/motionPreview.ts +74 -0
  317. package/src/stage/overlays/Overlays.tsx +1112 -159
  318. package/src/stage/overlays/Rulers.tsx +495 -0
  319. package/src/stage/panes.ts +159 -10
  320. package/src/stage/project.ts +68 -3
  321. package/src/stage/renderScaleController.ts +730 -0
  322. package/src/stage/rulers.ts +129 -0
  323. package/src/stage/sceneExtent.ts +75 -0
  324. package/src/stage/shading.ts +20 -0
  325. package/src/stage/splineStage.ts +632 -0
  326. package/src/stage/stagePerformanceTelemetry.ts +717 -0
  327. package/src/stage/stageTheme.ts +36 -0
  328. package/src/stage/stageWarmup.ts +11 -0
  329. package/src/stage/textAutoSize.ts +124 -0
  330. package/src/stage/tier1Export.ts +641 -0
  331. package/src/stage/tokenColor.ts +14 -9
  332. package/src/stage/view.ts +56 -9
  333. package/src/stage/workingView.ts +277 -33
  334. package/src/state/accountPrefs.ts +261 -0
  335. package/src/state/agentActions.ts +173 -15
  336. package/src/state/agentActivity.ts +198 -0
  337. package/src/state/agentQuestion.ts +239 -0
  338. package/src/state/bootOpen.ts +42 -0
  339. package/src/state/cameraVerbs.ts +139 -0
  340. package/src/state/clientId.ts +6 -1
  341. package/src/state/comments.ts +1099 -0
  342. package/src/state/context.tsx +19 -1
  343. package/src/state/editorPrefs.ts +220 -0
  344. package/src/state/errorReports.ts +121 -0
  345. package/src/state/fieldWrite.ts +161 -0
  346. package/src/state/fontRecents.ts +70 -0
  347. package/src/state/fonts.ts +656 -0
  348. package/src/state/graphClipboard.ts +414 -0
  349. package/src/state/imageThumbs.ts +216 -0
  350. package/src/state/insert.ts +444 -67
  351. package/src/state/isolationTrail.ts +92 -0
  352. package/src/state/keyMoves.ts +134 -0
  353. package/src/state/keyframeClipboard.ts +177 -0
  354. package/src/state/keymap.ts +1153 -117
  355. package/src/state/layoutPrefs.ts +272 -0
  356. package/src/state/layouts.ts +205 -0
  357. package/src/state/measureMedia.ts +167 -0
  358. package/src/state/menu.ts +2341 -28
  359. package/src/state/motionStamp.ts +7 -0
  360. package/src/state/panelSize.ts +375 -5
  361. package/src/state/pendingChanges.ts +119 -0
  362. package/src/state/playHold.ts +78 -0
  363. package/src/state/playbackPreparation.ts +562 -0
  364. package/src/state/posterCapture.ts +242 -0
  365. package/src/state/presence.ts +254 -0
  366. package/src/state/projectComponents.ts +160 -0
  367. package/src/state/renderEvents.ts +298 -18
  368. package/src/state/runtimeErrors.ts +46 -0
  369. package/src/state/selection.ts +12 -0
  370. package/src/state/shortcuts.ts +1606 -0
  371. package/src/state/sketchGuide.ts +51 -0
  372. package/src/state/splineRefs.ts +87 -0
  373. package/src/state/stageHealth.ts +259 -0
  374. package/src/state/stageWatchdog.ts +47 -0
  375. package/src/state/stillStage.ts +330 -0
  376. package/src/state/stillThumbs.ts +474 -0
  377. package/src/state/store.ts +23591 -2982
  378. package/src/state/storyboardModel.ts +528 -0
  379. package/src/state/sync.ts +1257 -0
  380. package/src/state/syncCache.ts +159 -0
  381. package/src/state/triangles.ts +13 -0
  382. package/src/state/types.ts +1698 -55
  383. package/src/state/unsavedGuard.ts +49 -0
  384. package/src/state/viewMode.ts +200 -0
  385. package/src/state/webmcp.ts +1128 -0
  386. package/src/state/workspace.ts +1147 -0
  387. package/src/styles/assets-tab.css +304 -0
  388. package/src/styles/canvas.css +545 -0
  389. package/src/styles/comments.css +1435 -0
  390. package/src/styles/controls.css +162 -0
  391. package/src/styles/dialogs.css +390 -0
  392. package/src/styles/insert-drawer.css +586 -0
  393. package/src/styles/inspector-board.css +207 -0
  394. package/src/styles/inspector-object.css +486 -0
  395. package/src/styles/inspector-shot.css +252 -0
  396. package/src/styles/inspector.css +360 -0
  397. package/src/styles/left-column.css +1628 -0
  398. package/src/styles/library-preview.css +575 -0
  399. package/src/styles/library.css +512 -0
  400. package/src/styles/modes/code.css +569 -0
  401. package/src/styles/modes/component.css +1561 -0
  402. package/src/styles/modes/material.css +1201 -0
  403. package/src/styles/modes/storyboard.css +518 -0
  404. package/src/styles/share-component.css +49 -0
  405. package/src/styles/shell.css +653 -0
  406. package/src/styles/shot-brief.css +360 -0
  407. package/src/styles/states.css +76 -0
  408. package/src/styles/sync.css +380 -0
  409. package/src/styles/timeline-graph.css +384 -0
  410. package/src/styles/timeline-meters.css +89 -0
  411. package/src/styles/timeline-rows.css +1959 -0
  412. package/src/styles/timeline-sound.css +1003 -0
  413. package/src/styles/timeline.css +754 -0
  414. package/src/styles/tool-footer.css +525 -0
  415. package/src/styles/topbar.css +886 -0
  416. package/src/styles/versions.css +262 -0
  417. package/src/styles.css +72 -2921
  418. package/src/tools.ts +108 -23
  419. package/dist/assets/index-B7notge7.css +0 -1
  420. package/dist/assets/index-BBE6Ta9L.js +0 -52
  421. package/src/panels/files/icons.tsx +0 -118
  422. package/src/panels/header/DocSwitcher.tsx +0 -85
  423. package/src/panels/header/TransportBar.tsx +0 -86
  424. package/src/panels/inspector/animate/BlockTiming.tsx +0 -341
  425. package/src/panels/inspector/animate/DuringBlocks.tsx +0 -85
  426. package/src/panels/inspector/animate/InOutPresets.tsx +0 -57
  427. package/src/panels/inspector/animate/ResolvedChannels.tsx +0 -150
  428. package/src/panels/inspector/animate/useBlocks.ts +0 -43
  429. package/src/panels/material/MaterialPicker.tsx +0 -172
  430. package/src/panels/timeline/SceneStrip.tsx +0 -145
  431. package/src/panels/toolbar/AddMenu.tsx +0 -230
  432. 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
+ }