@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,138 @@
1
+ // THE KEYFRAME CONTEXT MENU, once.
2
+ //
3
+ // A right-click on a keyframe means the same thing in both faces of the dock —
4
+ // the rows' diamonds and the graph's circles — and the rules it has to obey are
5
+ // not obvious ones: a spring on a non-springable kind THROWS inside the sampler,
6
+ // a discrete track holds structurally so every tween is a no-op wearing a label,
7
+ // and the last key's ease governs no segment at all. Three rules, two call
8
+ // sites; written once so the two cannot answer differently.
9
+ import { EASE_PRESETS, groupEasePresets, matchPreset } from "@dailies-studio/timeline";
10
+ import type { EasePreset } from "@dailies-studio/timeline";
11
+ import { DISCRETE_KINDS, SPRINGABLE_KINDS } from "@dailies-studio/engine";
12
+ import type { Ease, TrackKind } from "@dailies-studio/engine";
13
+ import type { MenuEntry } from "@dailies-studio/ui";
14
+ import type { KeyframeSel } from "../../state/types.js";
15
+ import type { ShotEditorStore } from "../../state/store.js";
16
+ import { gateForViewer } from "../../state/menu.js";
17
+
18
+ /** The one key the pointer is on, as the menu needs to describe it. */
19
+ export interface MenuKey {
20
+ kind: TrackKind;
21
+ ease: Ease;
22
+ /** Is this the LAST key on its track? Then its ease is never sampled. */
23
+ last: boolean;
24
+ /** Does the track curve its path (`spatialInterp`)? Then no spring: the
25
+ * engine refuses a spring on a curved track. */
26
+ curved?: boolean;
27
+ }
28
+
29
+ /**
30
+ * Which keys a menu opened on `at` is about.
31
+ *
32
+ * IN THE SELECTION = the whole set. Right-clicking one of four selected keys to
33
+ * ease all four is the gesture every timeline has, and collapsing to one here
34
+ * would silently drop three. Outside it, the menu points at what the pointer
35
+ * points at — and the caller focuses that key, so a following Backspace
36
+ * addresses the same thing the menu did.
37
+ */
38
+ export function keyframeMenuTargets(
39
+ selection: readonly KeyframeSel[],
40
+ at: KeyframeSel,
41
+ ): readonly KeyframeSel[] {
42
+ const inSet = selection.some(
43
+ (k) =>
44
+ k.containerId === at.containerId &&
45
+ k.layerId === at.layerId &&
46
+ k.path === at.path &&
47
+ k.frame === at.frame,
48
+ );
49
+ return inSet ? selection : [at];
50
+ }
51
+
52
+ export function keyframeMenuEntries(args: {
53
+ store: ShotEditorStore;
54
+ key: MenuKey;
55
+ targets: readonly KeyframeSel[];
56
+ /** The track the menu opened on — "select all in this track" acts on it. */
57
+ at: KeyframeSel;
58
+ }): MenuEntry[] {
59
+ const { store, key, targets, at } = args;
60
+ const many = targets.length > 1;
61
+ const current = matchPreset(key.ease);
62
+ // ONLY WHAT THE ENGINE WILL SAMPLE, on `KeyframeEditor`'s rule (its own
63
+ // header states it): a spring on a non-springable kind THROWS inside
64
+ // `evaluateTrack`, so offering it here promises a document that refuses to
65
+ // play. Dropped rather than disabled, because `easeTrackError` means no valid
66
+ // track can already read as "spring" on such a kind — so removing the option
67
+ // can never leave the menu unable to show the current ease.
68
+ const springable = SPRINGABLE_KINDS.has(key.kind) && key.curved !== true;
69
+ // A discrete track holds STRUCTURALLY (`evaluateTrack` returns early on
70
+ // `DISCRETE_KINDS`), so every tween here is a no-op wearing a label. One
71
+ // disabled line says so instead of four buttons that do nothing.
72
+ const discrete = DISCRETE_KINDS.has(key.kind);
73
+ // THE LAST KEY'S EASE GOVERNS NO SEGMENT. Writing it is legal and utterly
74
+ // invisible, which is the silent inertness this lane refuses everywhere else —
75
+ // so the entries stay visible (the author can see which ease the key carries)
76
+ // and refuse with their reason on hover.
77
+ //
78
+ // SINGLE-KEY ONLY, and that is the whole of the rule: `key.last` describes the
79
+ // key the pointer landed on, and it cannot describe a SET. Over a selection it
80
+ // greyed out every preset because the author right-clicked the last member —
81
+ // which is the natural one to click after a left-to-right marquee, so easing a
82
+ // whole run was impossible from the obvious gesture.
83
+ const easeReason =
84
+ key.last && !many
85
+ ? "the last keyframe has no segment leaving it, so its ease is never sampled"
86
+ : null;
87
+ const presets = EASE_PRESETS.filter(
88
+ (p) => (springable || p.ease.type !== "spring") && (!discrete || p.ease.type === "hold"),
89
+ );
90
+ const action = (preset: EasePreset): MenuEntry => ({
91
+ kind: "action" as const,
92
+ id: `ease-${preset.id}`,
93
+ label: preset.label,
94
+ // WHICH ONE IS ON, in the shortcut column rather than as a check mark:
95
+ // `MenuEntry` has no checked state, and adding one to the shared menu for
96
+ // a single call site would be a widget feature paid for by one caller. The
97
+ // column is right-aligned dim text, which is exactly the register this
98
+ // belongs in. The "current" marker only means something for ONE key — over
99
+ // a set it would name whichever the pointer happened to be on.
100
+ ...(!many && current === preset.id ? { shortcut: "current" } : {}),
101
+ ...(easeReason === null ? {} : { disabled: true, title: easeReason }),
102
+ onSelect: () => store.setKeyframesEase(targets, preset.ease),
103
+ });
104
+ return gateForViewer(store.getState(), [
105
+ ...(discrete
106
+ ? [
107
+ {
108
+ kind: "action" as const,
109
+ id: "ease-discrete",
110
+ label: `a ${key.kind} track always holds`,
111
+ disabled: true,
112
+ onSelect: () => {},
113
+ },
114
+ ]
115
+ : []),
116
+ // The basic group stays flat where it always was; the named families fold
117
+ // into submenus, because ~25 top-level rows is not a menu anyone can scan.
118
+ ...groupEasePresets(presets).flatMap((g): MenuEntry[] =>
119
+ g.group === "basic"
120
+ ? g.presets.map(action)
121
+ : [{ kind: "submenu" as const, label: g.label, items: g.presets.map(action) }],
122
+ ),
123
+ { kind: "separator" as const },
124
+ {
125
+ kind: "action" as const,
126
+ id: "key-select-track",
127
+ label: "Select all keyframes in this track",
128
+ onSelect: () => store.selectTrackKeyframes(at.containerId, at.layerId, at.path),
129
+ },
130
+ {
131
+ kind: "action" as const,
132
+ id: "key-delete",
133
+ label: many ? `Delete ${targets.length} keyframes` : "Delete keyframe",
134
+ danger: true,
135
+ onSelect: () => store.deleteKeyframes(targets),
136
+ },
137
+ ]);
138
+ }
@@ -0,0 +1,49 @@
1
+ // THE TIMELINE'S NAME COLUMN IS THE LEFT COLUMN'S TRACK.
2
+ //
3
+ // The dock spans the shell's three column tracks, so its label column sits
4
+ // under the left column and has to be exactly as wide as the rail the grid
5
+ // DRAWS: the fitted width, not the stored one (a small window shrinks the rail
6
+ // first). `fitShell` is the same call App.tsx makes for `--rail-w`, so the two
7
+ // cannot disagree. A collapsed rail keeps its track, so collapse and Video
8
+ // never move a bar.
9
+ import { useCallback, useSyncExternalStore } from "react";
10
+ import { useStore } from "../../state/context.js";
11
+ import { fitShell } from "../../state/panelSize.js";
12
+ import type { ShellFit } from "../../state/panelSize.js";
13
+
14
+ type StoredSizes = Parameters<typeof fitShell>[2];
15
+
16
+ /** The label column's width for this window and these stored sizes. Read it
17
+ * from effects and handlers, which must never close over a stale width. */
18
+ export function labelWidthOf(stored: StoredSizes): number {
19
+ return fitShell(window.innerWidth, window.innerHeight, stored).railWidth;
20
+ }
21
+
22
+ /**
23
+ * One value of the shell's fitted tracks, for rendering.
24
+ *
25
+ * On the COLD channel plus the window's resize: the stored sizes are cold
26
+ * fields, so a playback tick never re-evaluates this, and the snapshot is a
27
+ * primitive, so a notification that leaves it unchanged renders nothing.
28
+ */
29
+ export function useShellFit<T extends number | boolean>(pick: (fit: ShellFit) => T): T {
30
+ const store = useStore();
31
+ const subscribe = useCallback(
32
+ (onChange: () => void) => {
33
+ const stop = store.subscribeCold(onChange);
34
+ window.addEventListener("resize", onChange);
35
+ return () => {
36
+ stop();
37
+ window.removeEventListener("resize", onChange);
38
+ };
39
+ },
40
+ [store],
41
+ );
42
+ const read = (): T => pick(fitShell(window.innerWidth, window.innerHeight, store.getState()));
43
+ return useSyncExternalStore(subscribe, read, read);
44
+ }
45
+
46
+ /** The label column's width, for rendering. */
47
+ export function useLabelWidth(): number {
48
+ return useShellFit((fit) => fit.railWidth);
49
+ }
@@ -0,0 +1,155 @@
1
+ // THE DOCK'S RUBBER BAND: which bars a dragged rectangle takes.
2
+ //
3
+ // ── WHY THE LOGIC IS HERE AND NOT IN THE COMPONENT ──────────────────────
4
+ //
5
+ // The same argument model.ts makes for every other piece of this lane's
6
+ // geometry: "does a bar that merely touches the edge of the box count" is a
7
+ // question about two rectangles, and a question about two rectangles should be
8
+ // answerable without mounting a timeline. `TimelineDock` measures, this decides,
9
+ // and the test fixture below the fold in timelineMarquee.test.ts is four boxes
10
+ // and no DOM.
11
+ //
12
+ // ── ONE COORDINATE SPACE, AND IT IS `.dock-tracks` ──────────────────────
13
+ //
14
+ // Every number in this file is in the track area's OWN content pixels: a client
15
+ // x less `.dock-tracks`'s left edge. Not client coordinates, and deliberately:
16
+ // the first write of a marquee's selection can move the playhead into another
17
+ // shot (`focusScene`), and the lane's follow effect then scrolls horizontally
18
+ // under a pointer that has not moved. In content space the box stays pinned to
19
+ // the frames it was drawn over while the lane slides beneath it, which is what
20
+ // an author who drew a box around two bars means. It is also what the painted
21
+ // rect wants, since `.dock-marquee` is absolutely positioned inside the same
22
+ // element.
23
+ //
24
+ // ── AND MEMBERSHIP IS DECIDED PER BAR, EVERY MOVE ───────────────────────
25
+ //
26
+ // Nothing here accumulates. `marqueeHits` is asked again on every move with the
27
+ // live box, so a bar the band reached and then retreated past is simply not in
28
+ // the answer any more. A banked set would make the gesture one-way: overshoot
29
+ // by one row and the only recovery is to release and start again.
30
+
31
+ /** A point in `.dock-tracks` content pixels. */
32
+ export interface MarqueePoint {
33
+ x: number;
34
+ y: number;
35
+ }
36
+
37
+ /** A box in `.dock-tracks` content pixels, edges normalised so `left <= right`
38
+ * and `top <= bottom`. */
39
+ export interface MarqueeRect {
40
+ left: number;
41
+ top: number;
42
+ right: number;
43
+ bottom: number;
44
+ }
45
+
46
+ /** One lifespan bar's box, with the two ids the selection needs. */
47
+ export interface MarqueeBar extends MarqueeRect {
48
+ layerId: string;
49
+ /** The container the row's layer lives in: a scene, or the open definition. */
50
+ sceneId: string;
51
+ }
52
+
53
+ /** What a gesture is selecting INTO, and inside which group.
54
+ *
55
+ * `add` is the selection frozen at the press, empty unless shift was held. It
56
+ * goes in front of the hits so a shift-marquee reads as an extension of what
57
+ * was already there rather than a reordering of it. */
58
+ export interface MarqueeScope {
59
+ sceneId: string;
60
+ add: readonly string[];
61
+ }
62
+
63
+ /** The box between the press and the pointer, whichever way the drag ran. */
64
+ export function rectBetween(from: MarqueePoint, to: MarqueePoint): MarqueeRect {
65
+ return {
66
+ left: Math.min(from.x, to.x),
67
+ top: Math.min(from.y, to.y),
68
+ right: Math.max(from.x, to.x),
69
+ bottom: Math.max(from.y, to.y),
70
+ };
71
+ }
72
+
73
+ /**
74
+ * The layer ids a box selects: every bar it touches, plus whatever it is adding
75
+ * to.
76
+ *
77
+ * ── TOUCHING COUNTS ─────────────────────────────────────────────────────
78
+ *
79
+ * The test is separation, not enclosure, and it is not strict: a band dragged
80
+ * up to a bar's edge has REACHED that bar, and no author can see the sub-pixel
81
+ * difference that a strict test would decide on. Enclosure is the other
82
+ * candidate and it is wrong for this lane: a bar can be wider than the dock, so
83
+ * "the box must contain it" would make the longest clips unselectable.
84
+ *
85
+ * ── AND THE SCOPE IS ONE SCENE GROUP ────────────────────────────────────
86
+ *
87
+ * Not a preference. `select` in store.ts orders the ids it is given against ONE
88
+ * container (the one `layerContainer()` names, then the playhead's scene) and
89
+ * DROPS everything that resolves in neither, so a list spanning two shots
90
+ * silently becomes a list of one shot's worth anyway. Better to decide that
91
+ * here, where the rule can be read, than to hand over a cross-shot list and
92
+ * discover which half survived. The group is the one the press began in, which
93
+ * is also the shot the caller pins with `focusScene` before it writes.
94
+ *
95
+ * Ids in `add` from another group are passed through untouched: they are the
96
+ * author's existing selection, not this box's business, and `select` is the one
97
+ * place that resolves a home.
98
+ */
99
+ export function marqueeHits(
100
+ rect: MarqueeRect,
101
+ bars: readonly MarqueeBar[],
102
+ scope: MarqueeScope,
103
+ ): string[] {
104
+ const out = [...scope.add];
105
+ const seen = new Set(out);
106
+ for (const bar of bars) {
107
+ if (bar.sceneId !== scope.sceneId) continue;
108
+ if (bar.right < rect.left || bar.left > rect.right) continue;
109
+ if (bar.bottom < rect.top || bar.top > rect.bottom) continue;
110
+ if (seen.has(bar.layerId)) continue;
111
+ seen.add(bar.layerId);
112
+ out.push(bar.layerId);
113
+ }
114
+ return out;
115
+ }
116
+
117
+ /**
118
+ * Every mounted lifespan bar's box, read off the DOM once at the press.
119
+ *
120
+ * THE DOM AND NOT THE MODEL, because the y here is flow layout: rows are 28 or
121
+ * 56 tall, a shot's disclosure adds a block of them, and past the window
122
+ * threshold spacers stand in for the rows that are not mounted. `TimelineDock`
123
+ * has prefix sums over exactly that (`groupHeights`), and rebuilding a second
124
+ * copy of them for this would be a second spelling of the layout that can drift
125
+ * from the first. The element positions cannot drift from themselves.
126
+ *
127
+ * ONCE, at the press: nothing in a marquee moves a row. The dock holds its
128
+ * collapse until the pointer is up (see `onPointerDownCapture` in
129
+ * TimelineDock), selection paints an outline rather than reflowing, and the
130
+ * boxes are content-relative so a follow scroll does not move them.
131
+ *
132
+ * ponytail: a row the virtual window has not mounted has no box and cannot be
133
+ * hit. There is no auto-scroll, so a box can only be drawn over rows that are
134
+ * on screen anyway; add the query per move if auto-scroll ever lands.
135
+ */
136
+ export function marqueeBars(tracks: HTMLElement): MarqueeBar[] {
137
+ const origin = tracks.getBoundingClientRect();
138
+ const out: MarqueeBar[] = [];
139
+ for (const row of tracks.querySelectorAll<HTMLElement>("[data-lifespan]")) {
140
+ const layerId = row.dataset["lifespan"];
141
+ const sceneId = row.dataset["rowScene"];
142
+ const bar = row.querySelector<HTMLElement>("[data-bar]");
143
+ if (layerId === undefined || sceneId === undefined || bar === null) continue;
144
+ const box = bar.getBoundingClientRect();
145
+ out.push({
146
+ layerId,
147
+ sceneId,
148
+ left: box.left - origin.left,
149
+ top: box.top - origin.top,
150
+ right: box.right - origin.left,
151
+ bottom: box.bottom - origin.top,
152
+ });
153
+ }
154
+ return out;
155
+ }