@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
@@ -1,4 +1,4 @@
1
- // One track: a layer's blocks, or the camera's shots, as INTERVALS.
1
+ // The camera row: one shot's camera moves, as INTERVALS.
2
2
  //
3
3
  // ── THE THREE DRAGS, AND WHY THEY WRITE DIFFERENT FIELDS ────────────────
4
4
  //
@@ -7,7 +7,7 @@
7
7
  // OUT writes `durationFrames`.
8
8
  //
9
9
  // One field for both edges is the classic version of this bug, and it makes a
10
- // left-trim slide the whole block. The document math is in
10
+ // left-trim slide the whole move. The document math is in
11
11
  // @dailies-studio/shot's timelineOps; this file only turns pixels into frames.
12
12
  //
13
13
  // ── SCENE-LOCAL BARS ON A MASTER STRIP ──────────────────────────────────
@@ -19,90 +19,101 @@
19
19
  // scenes — so that is the one place the offset crosses, and it crosses in one
20
20
  // expression that converts straight back.
21
21
  //
22
+ // `originFrames` is the SHOT CONTEXT's re-zero, and it is a second number
23
+ // rather than a smaller `offsetFrames` on purpose: it is subtracted in the
24
+ // `left` expression and NOWHERE else, so the snap conversion above still runs
25
+ // on true master frames. One number for both would make a snap inside a shot
26
+ // land `start` frames away from where the same drag lands outside it.
27
+ //
22
28
  // ── THE SPRING'S OUT HANDLE IS DISABLED, AND SAYS SO ────────────────────
23
29
  //
24
30
  // `clipProgress01`'s spring arm measures elapsed SECONDS, because a spring has
25
31
  // an intrinsic settle time. So dragging that edge changes where the window
26
32
  // CLIPS, not how fast the spring settles. That is correct physics and it is
27
- // still surprising, so the handle is disabled and the tail is drawn dashed —
28
- // the author sees the block continuing past its window rather than discovering
29
- // the rule by dragging.
33
+ // still surprising, so the handle is DRAWN AND DEAD — carrying the reason in
34
+ // its title — and the tail is drawn dashed. The author sees the move
35
+ // continuing past its window rather than discovering the rule by dragging, and
36
+ // sees why the one control that is missing is missing.
30
37
  import { frameToPx, startDrag } from "@dailies-studio/timeline";
31
38
  import type { PointerEvent as ReactPointerEvent } from "react";
39
+ import { ADD_ICON } from "../../icons.js";
32
40
  import { useShotEditor, useStore } from "../../state/context.js";
33
- import type { BlockBar, Lifespan } from "./model.js";
34
- import { CAMERA_ROW_ID, deadSpans, frameDelta } from "./model.js";
41
+ import type { BlockBar, CameraMark } from "./model.js";
42
+ import { CAMERA_ROW_ID, fitsBlockLabel, frameDelta, isLoadBearingMark, thinCameraMarks } from "./model.js";
35
43
  import type { SnapPress } from "./snap.js";
36
44
  import { isSnapSuppressed } from "./snap.js";
45
+ import { useLive } from "./useLive.js";
37
46
 
38
47
  export function BlockRow({
39
48
  label,
40
49
  sceneId,
41
- layerId,
42
- depth,
43
50
  bars,
44
51
  ppf,
45
52
  labelWidth,
46
53
  offsetFrames = 0,
47
- lifespan,
54
+ originFrames = 0,
48
55
  beginSnap,
49
56
  onAdd,
50
- addLabel,
57
+ marks,
51
58
  }: {
52
59
  label: string;
53
60
  /** WHICH SCENE this row's bars live in. Read from the row and never from
54
61
  * `state.sceneId`: the dock shows every scene at once, so the row under the
55
62
  * pointer is routinely not the one the playhead is in. */
56
63
  sceneId: string;
57
- layerId: string;
58
- depth: number;
59
64
  bars: readonly BlockBar[];
60
65
  ppf: number;
61
66
  labelWidth: number;
62
- /** The scene's master start. Drawing only — see the header. */
67
+ /** The scene's master start. Drawing AND the snap conversion — see the header. */
63
68
  offsetFrames?: number;
64
- /** The owning layer's lifespan, when it has one. A block outside it is kept
65
- * and drawn dead rather than deleted. Absent on the camera row, which has no
66
- * layer and therefore no lifespan. */
67
- lifespan?: Lifespan;
69
+ /** The shot context's re-zero. DRAWING ONLY — see the header. */
70
+ originFrames?: number;
68
71
  beginSnap?: SnapPress;
69
- /** Give the row a create button in its label cell. Only the camera row has
70
- * one: a layer's blocks are added from the Animate palette, which is where
71
- * the author picks WHICH preset, and a bare "+" there would have to guess. */
72
+ /** Give the row a create button in its label cell. */
72
73
  onAdd?: () => void;
73
- addLabel?: string;
74
+ /**
75
+ * READ-ONLY marks drawn over the bars: the camera's poses (P4).
76
+ *
77
+ * Read-only is the point, not a shortcut: a camera pose is not stored
78
+ * anywhere a mark could write to. It is `shot.from`/`shot.to`, which the
79
+ * inspector edits, and a path's waypoints, which only the agent can replace.
80
+ */
81
+ marks?: readonly CameraMark[];
74
82
  }) {
75
83
  const store = useStore();
76
- const selectedLayer = useShotEditor((s) => s.selection.includes(layerId));
77
- const selectedBlock = useShotEditor((s) => s.selectedBlock);
84
+ const selectedMove = useShotEditor((s) => s.selectedMove);
85
+ // Preferences > Timeline > Camera move labels. Read once per row, not per bar.
86
+ const labels = useShotEditor((s) => s.blockLabels) === "fit";
78
87
 
79
88
  return (
80
- <div
81
- className={`block-row${selectedLayer ? " is-selected" : ""}`}
82
- data-track={layerId}
83
- data-row-scene={sceneId}
84
- >
89
+ <div className="block-row is-camera" data-track={CAMERA_ROW_ID} data-row-scene={sceneId}>
85
90
  {/* A CELL rather than a wide button, because the add control has to sit
86
91
  beside the name and a button inside a button is not markup a browser
87
92
  will keep. */}
88
93
  <div className="block-row-label-cell" style={{ width: labelWidth }}>
94
+ {/* THE CAMERA ROW WEARS ITS MARK: a hollow square, the shot's own eye
95
+ rather than one of its contents. */}
96
+ <span className="camera-swatch" aria-hidden="true" />
89
97
  <button
90
98
  type="button"
91
99
  className="block-row-label"
92
- style={{ paddingLeft: 8 + depth * 12 }}
93
- onClick={() => {
94
- // NAVIGATE FIRST when the row belongs to another scene: the stage
95
- // shows one scene, and `select` orders within the current one — so
96
- // without this the selection resolves to empty and nothing happens.
97
- store.focusScene(sceneId);
98
- if (layerId !== CAMERA_ROW_ID) store.select([layerId]);
99
- }}
100
+ // NAVIGATE when the row belongs to another scene: the stage shows one
101
+ // scene, and the camera row is that scene's.
102
+ onClick={() => store.focusScene(sceneId)}
100
103
  >
101
104
  {label}
102
105
  </button>
106
+ {/* How many marks the camera holds, at the label's end. */}
107
+ {marks === undefined ? null : <span className="camera-keyed">{marks.length} keyed</span>}
103
108
  {onAdd !== undefined && (
104
- <button type="button" className="block-row-add" onClick={onAdd}>
105
- {addLabel ?? "+"}
109
+ <button
110
+ type="button"
111
+ className="btn is-icon is-ghost block-row-add"
112
+ aria-label="Add camera move"
113
+ title="Add a camera move at the playhead"
114
+ onClick={onAdd}
115
+ >
116
+ {ADD_ICON}
106
117
  </button>
107
118
  )}
108
119
  </div>
@@ -113,19 +124,50 @@ export function BlockRow({
113
124
  bar={bar}
114
125
  ppf={ppf}
115
126
  offsetFrames={offsetFrames}
116
- lifespan={lifespan}
127
+ originFrames={originFrames}
117
128
  beginSnap={beginSnap}
118
- sceneId={sceneId}
119
- selected={selectedBlock?.blockId === bar.id}
129
+ labels={labels}
130
+ selected={selectedMove?.sceneId === sceneId && selectedMove.shotId === bar.id}
120
131
  onSelect={() => {
121
132
  store.focusScene(sceneId);
122
- store.selectBlock({ sceneId, layerId: bar.layerId, blockId: bar.id });
133
+ store.selectMove({ sceneId, shotId: bar.id });
123
134
  }}
124
- onDrag={(edge, toFrame) => store.dragBlock(sceneId, bar.layerId, bar.id, edge, toFrame)}
135
+ onDrag={(edge, toFrame) => store.dragMove(sceneId, bar.id, edge, toFrame)}
125
136
  onDragEnd={(commit) => store.endBlockDrag(commit)}
126
137
  onDragStart={() => store.beginBlockDrag()}
127
138
  />
128
139
  ))}
140
+ {/* AFTER the bars, so a pose sitting on a bar's edge — which is where
141
+ every one of them sits — reads as being on top of it rather than
142
+ half-swallowed. `pointer-events: none` in the CSS: these are a
143
+ reading, and a mark that ate the press would take the bar's own
144
+ trim handle away. */}
145
+ {(marks === undefined ? undefined : thinCameraMarks(marks, ppf))?.map((mark) => (
146
+ <span
147
+ key={mark.id}
148
+ className={`camera-key is-${mark.kind}`}
149
+ style={{ left: frameToPx(mark.frame + offsetFrames - originFrames, ppf) }}
150
+ data-camera-key={mark.id}
151
+ // The MARK's id, never its frame: a cut puts two marks on one frame
152
+ // (a move's end and the next move's differing start), and a frame
153
+ // key would name both.
154
+ data-testid={`camera-key-${mark.id}`}
155
+ title={mark.title}
156
+ // ── ONE OF THESE FOUR IS NOT DECORATION ────────────────────────
157
+ //
158
+ // A pose, a chain and a waypoint each restate something the bars
159
+ // beside them already say, so they are hidden from assistive tech
160
+ // — a twenty-move camera row would otherwise announce forty marks.
161
+ //
162
+ // A BREAK is the exception and has to be exposed: the rig
163
+ // discontinuity exists nowhere else in this row, and hiding the one
164
+ // mark that carries new information is how an accessibility default
165
+ // quietly becomes an omission.
166
+ {...(isLoadBearingMark(mark)
167
+ ? { role: "img", "aria-label": mark.title }
168
+ : { "aria-hidden": "true" as const })}
169
+ />
170
+ ))}
129
171
  </div>
130
172
  </div>
131
173
  );
@@ -135,10 +177,10 @@ function BlockBarView({
135
177
  bar,
136
178
  ppf,
137
179
  offsetFrames,
138
- lifespan,
180
+ originFrames,
139
181
  beginSnap,
140
- sceneId,
141
182
  selected,
183
+ labels,
142
184
  onSelect,
143
185
  onDragStart,
144
186
  onDrag,
@@ -147,18 +189,39 @@ function BlockBarView({
147
189
  bar: BlockBar;
148
190
  ppf: number;
149
191
  offsetFrames: number;
150
- lifespan: Lifespan | undefined;
192
+ originFrames: number;
151
193
  beginSnap: SnapPress | undefined;
152
- sceneId: string;
153
194
  selected: boolean;
195
+ /** The Camera move labels pref: false draws no label on any bar. */
196
+ labels: boolean;
154
197
  onSelect(): void;
155
198
  onDragStart(): void;
156
199
  onDrag(edge: "body" | "in" | "out", toFrame: number): void;
157
200
  onDragEnd(commit: boolean): void;
158
201
  }) {
159
- const left = frameToPx(bar.frame + offsetFrames, ppf);
202
+ // ── WHERE THE BAR IS, IN LANE FRAMES ───────────────────────────────────
203
+ //
204
+ // Named once and used twice: `left` is drawn from it and `useLive` compares
205
+ // the clock against it. Two spellings of one position is how a highlight
206
+ // ends up a bar to the left of the bar it is highlighting.
207
+ const startLane = bar.frame + offsetFrames - originFrames;
208
+ const live = useLive(startLane, startLane + bar.durationFrames, originFrames);
209
+ const left = frameToPx(startLane, ppf);
210
+ // ── THE FLOOR, AND WHAT IT COSTS ────────────────────────────────────────
211
+ //
212
+ // 4px so a one-frame move stays visible and grabbable. It is the ONLY floor
213
+ // now: `.block-bar` used to carry `padding: 0 8px`, which under border-box
214
+ // put a second, invisible 18px floor under every bar and made short moves
215
+ // overdraw their neighbours. The inset lives on `.block-label` for that
216
+ // reason.
217
+ //
218
+ // Below about 4px per frame this floor is wider than the gap to the next
219
+ // move, so a dense run overlaps by a pixel or two. That is deliberate and
220
+ // it is the only honest choice left: at that zoom the space per move is
221
+ // genuinely smaller than the smallest visible mark, so the alternative is
222
+ // a move that renders sub-pixel and disappears. Being slightly wide is
223
+ // recoverable by zooming in; being invisible is not.
160
224
  const width = Math.max(4, frameToPx(bar.durationFrames, ppf));
161
- const dead = deadSpans(bar, lifespan);
162
225
 
163
226
  const drag =
164
227
  (edge: "body" | "in" | "out") =>
@@ -173,11 +236,9 @@ function BlockBarView({
173
236
  // through would be unusable.
174
237
  const startFrame = bar.frame;
175
238
  const startEnd = bar.frame + bar.durationFrames;
176
- // THIS BAR, not this layer: only the two edges under the pointer are
177
- // frozen, so the block can still land on its own siblings and on its
178
- // layer's lifespan. LifespanRow passes no blockId, because there the whole
179
- // layer is what moves.
180
- const snap = beginSnap?.({ sceneId, layerId: bar.layerId, blockId: bar.id }, isSnapSuppressed(e));
239
+ // Nothing to exclude: a camera move's edges are not snap targets, so the
240
+ // bar cannot catch on itself.
241
+ const snap = beginSnap?.(undefined, isSnapSuppressed(e));
181
242
  const place = (anchor: number, delta: number): number =>
182
243
  snap === undefined ? anchor + delta : snap(anchor + delta + offsetFrames) - offsetFrames;
183
244
  onDragStart();
@@ -195,48 +256,56 @@ function BlockBarView({
195
256
 
196
257
  return (
197
258
  <div
198
- className={`block-bar slot-${bar.slot}${selected ? " is-selected" : ""}${dead.length > 0 ? " is-clipped" : ""}`}
259
+ className={`block-bar${live ? " is-live" : ""}${selected ? " is-selected" : ""}`}
199
260
  style={{ left, width }}
200
261
  data-block={bar.id}
201
- data-clipped={dead.length > 0 ? "true" : undefined}
202
262
  onPointerDown={drag("body")}
203
- title={
204
- `${bar.preset} · ${bar.slot} · ${bar.frame}–${bar.frame + bar.durationFrames}` +
205
- (dead.length > 0 ? " · outside the layer's lifespan, so this part never plays" : "")
206
- }
263
+ title={`${bar.label} · ${bar.frame}–${bar.frame + bar.durationFrames}`}
207
264
  >
208
- {/* KEPT, NOT DELETED. Shortening a lifespan past a block is a trim, not a
209
- request to throw the block away — refusal over corruption applies to
210
- the editor too. The part that can never play is greyed in place, so the
211
- author can see exactly how far to pull the edge back. */}
212
- {dead.map((span) => (
213
- <span
214
- key={span.from}
215
- className="block-dead"
216
- aria-hidden="true"
217
- style={{ left: frameToPx(span.from - bar.frame, ppf), width: frameToPx(span.to - span.from, ppf) }}
218
- />
219
- ))}
220
265
  <span
221
266
  className="block-handle block-handle-in"
222
267
  data-handle="in"
223
268
  onPointerDown={drag("in")}
224
269
  aria-hidden="true"
225
270
  />
226
- <span className="block-label">{bar.preset}</span>
271
+ {/* ONLY WHEN THE WHOLE WORD FITS. See `fitsBlockLabel`: a bar is as wide
272
+ as its move is long, so on a dense row the label used to be handed
273
+ the two or three pixels left after the inset and drew a sliver of a
274
+ letter. The `title` above carries the kind for every bar, fitted or
275
+ not, so this hides a name that could not be read rather than a fact.
276
+ The Camera move labels pref turns them all off; the title stays. */}
277
+ {labels && fitsBlockLabel(width, bar.label) ? <span className="block-label">{bar.label}</span> : null}
227
278
  {bar.spring ? (
228
- // The settle tail: the block keeps moving past its own window, which is
229
- // what a spring does and what the disabled handle is about.
279
+ // The settle tail: the move keeps going past its own window, which is
280
+ // what a spring does and what the dead handle beside it is about.
230
281
  <span className="block-spring-tail" aria-hidden="true" />
231
- ) : (
232
- <span
233
- className="block-handle block-handle-out"
234
- data-handle="out"
235
- onPointerDown={drag("out")}
236
- aria-hidden="true"
237
- />
238
- )}
282
+ ) : null}
283
+ {/* DRAWN EVEN WHEN IT DOES NOTHING. A spring's out edge omitted outright
284
+ teaches an author nothing: the affordance every other bar has simply
285
+ is not there, and the rule behind that is invisible. It is drawn dead
286
+ with the reason in its title instead, and the press is swallowed
287
+ rather than left to bubble — reaching the bar's body drag would MOVE
288
+ the move, which is the one thing someone pulling an out handle
289
+ certainly did not ask for. */}
290
+ <span
291
+ className={`block-handle block-handle-out${bar.spring ? " is-disabled" : ""}`}
292
+ data-handle="out"
293
+ data-disabled={bar.spring ? "true" : undefined}
294
+ onPointerDown={
295
+ bar.spring
296
+ ? (e) => {
297
+ e.preventDefault();
298
+ e.stopPropagation();
299
+ }
300
+ : drag("out")
301
+ }
302
+ title={
303
+ bar.spring
304
+ ? "A spring settles in its own time, so this edge would only clip the window rather than shorten the motion"
305
+ : undefined
306
+ }
307
+ aria-hidden="true"
308
+ />
239
309
  </div>
240
310
  );
241
311
  }
242
-