@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,292 @@
1
+ // THE SHOT BOARD (Paper SB2-SB5): one planned shot's sketches, on the board.
2
+ // Double-clicking a shot lands here, and no Shot is made or entered.
3
+ //
4
+ // THE STUDIO'S ANATOMY IN 2D, in the board's canvas cell: Layers on the left
5
+ // (224), then the canvas bar (40), the paper on the dot desk with the sketch
6
+ // strip under it, and the tool footer (48). The right column is the shell's:
7
+ // the Plan with nothing selected, the item inspector with something selected
8
+ // (`boardRightPanel`, RightColumn). No timeline, no 3D, and no WebGL until
9
+ // Play (SketchPlay).
10
+ //
11
+ // bar ‹ Storyboard, the shot's number and name (a double press, F2,
12
+ // or Enter on the focused name renames it, `PartName`), its status,
13
+ // ‹ › to the shots either side; Play (Stop while it plays), Ask
14
+ // agent, and the one primary, Open in Studio.
15
+ // keys the sketch keys (`resolveShotBoardKey`, keymap.ts) are
16
+ // answered HERE, on the shot board's own element, and stopped, so
17
+ // an arrow pressed in the inspector moves nothing. Delete, ⌘D, ⌘A,
18
+ // Escape and the clipboard stay the board's (store, StoryboardView).
19
+ import { useEffect, useLayoutEffect, useRef, useState } from "react";
20
+ import type { KeyboardEvent as ReactKeyboardEvent } from "react";
21
+ import { framesToSeconds } from "@dailies-studio/engine";
22
+ import { findSketchItem, partFramesOf, sketchesOf } from "@dailies-studio/shot/doc";
23
+ import type { Doc3D, StoryboardPart3D } from "@dailies-studio/shot/doc";
24
+ import { CHEVRON_LEFT_ICON, CHEVRON_RIGHT_ICON, OPEN_ELSEWHERE_ICON, PLAY_ICON, SPARKLES_ICON } from "../../../icons.js";
25
+ import { useShotEditor, useStore } from "../../../state/context.js";
26
+ import { isEditable, resolveShotBoardKey } from "../../../state/keymap.js";
27
+ import type { SketchKeyAction } from "../../../state/keymap.js";
28
+ import { SHOT_STATUS_LABEL, buildPlannedPrompt, shotStatusOf, storyEntries } from "../../../state/storyboardModel.js";
29
+ import { agentGate, agentInEditor } from "../../agent/agentGate.js";
30
+ import { formatDuration } from "../../timeline/model.js";
31
+ import { PartName, partNumberOf } from "../PlanPanel.js";
32
+ import { ComponentPicker } from "./ComponentPicker.js";
33
+ import { ImagePicker } from "./ImagePicker.js";
34
+ import { SketchCanvas } from "./SketchCanvas.js";
35
+ import { SketchLayers } from "./SketchLayers.js";
36
+ import { SketchPlay } from "./SketchPlay.js";
37
+ import { SketchStrip } from "./SketchStrip.js";
38
+ import { SketchToolFooter } from "./SketchToolFooter.js";
39
+ import { fitPaperWidth } from "./sketchModel.js";
40
+ import "./sketch.css";
41
+ import { useBuildingParts } from "../../agent/AgentDots.js";
42
+
43
+ /** The desk's air round the paper, and what the strip under it takes: a
44
+ * 72px thumb, its label row and the gap above it (SB2). */
45
+ const DESK_PAD = 24;
46
+ const STRIP_H = 120;
47
+ /** The desk's size before it is measured (jsdom measures nothing). */
48
+ const DESK_FALLBACK = { width: 1280, height: 800 };
49
+
50
+ /** The badge tone each status reads in (G1 `.badge`). */
51
+ const STATUS_TONE = { planned: "", building: " is-building", built: " is-success" } as const;
52
+
53
+ /** The planned shots in playing order, for ‹ and ›. */
54
+ /** The board's cards in reading order, each as the id `openShotBoard` takes:
55
+ * the plan's id, or the Shot's id when no plan links it yet (opening it
56
+ * gives it one), so ‹ › never skips a card the board shows. */
57
+ export function partOrder(doc: Doc3D): string[] {
58
+ return storyEntries(doc).map((e) => (e.kind === "shot" ? (e.shot.part?.id ?? e.shot.sceneId) : e.part.id));
59
+ }
60
+
61
+ export function ShotBoard({ partId, rootRef }: { partId: string; rootRef?: (el: HTMLElement | null) => void }) {
62
+ const store = useStore();
63
+ const doc = useShotEditor((s) => s.doc);
64
+ const sketchId = useShotEditor((s) => s.storyboardSketch);
65
+ const tool = useShotEditor((s) => s.sketchTool);
66
+ const playing = useShotEditor((s) => s.sketchPlaying);
67
+ const [zoom, setZoom] = useState(1);
68
+ const [editing, setEditing] = useState<string | null>(null);
69
+ const [desk, setDesk] = useState<HTMLDivElement | null>(null);
70
+ const [deskSize, setDeskSize] = useState(DESK_FALLBACK);
71
+ const imageAnchor = useRef<HTMLButtonElement>(null);
72
+ const componentAnchor = useRef<HTMLButtonElement>(null);
73
+
74
+ // THE DESK'S SIZE, so the paper fits it at 100%.
75
+ useLayoutEffect(() => {
76
+ if (desk === null || typeof ResizeObserver === "undefined") return;
77
+ const measure = (): void => {
78
+ const { width, height } = desk.getBoundingClientRect();
79
+ if (width > 0 && height > 0) setDeskSize({ width, height });
80
+ };
81
+ measure();
82
+ const sized = new ResizeObserver(measure);
83
+ sized.observe(desk);
84
+ return () => sized.disconnect();
85
+ }, [desk]);
86
+
87
+ // A text editor open on an item that went (an undo, an agent) closes.
88
+ useEffect(() => {
89
+ if (editing !== null && (doc === null || findSketchItem(doc, editing) === null)) setEditing(null);
90
+ }, [doc, editing]);
91
+
92
+ const part = doc?.storyboard?.parts.find((p) => p.id === partId);
93
+ if (doc === null || part === undefined) return null;
94
+ const sketches = sketchesOf(doc, partId);
95
+ const sketch = sketches.find((s) => s.id === sketchId) ?? sketches[0];
96
+ const width = Math.round(fitPaperWidth(deskSize, doc.size, DESK_PAD, STRIP_H) * zoom);
97
+
98
+ const run = (action: SketchKeyAction): boolean => {
99
+ const state = store.getState();
100
+ switch (action.kind) {
101
+ case "sketchMove":
102
+ if (state.sketchSelection.length === 0) return false;
103
+ store.nudgeSketchItems(state.sketchSelection, action.dx, action.dy);
104
+ return true;
105
+ case "sketchRestack": {
106
+ const only = state.sketchSelection.length === 1 ? findSketchItem(doc, state.sketchSelection[0]!) : null;
107
+ if (only === null) return false;
108
+ store.restackSketchItem(only.item.id, only.index + action.by);
109
+ return true;
110
+ }
111
+ case "sketchEdit": {
112
+ const only = state.sketchSelection.length === 1 ? findSketchItem(doc, state.sketchSelection[0]!) : null;
113
+ if (only?.item.kind !== "text" || state.readOnly || state.sketchPlaying) return false;
114
+ setEditing(only.item.id);
115
+ return true;
116
+ }
117
+ case "sketchTool":
118
+ if (state.sketchPlaying) return false;
119
+ store.setSketchTool(action.tool);
120
+ return true;
121
+ }
122
+ };
123
+
124
+ const onKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>): void => {
125
+ const target = event.target as HTMLElement;
126
+ // A PORTAL'S KEY (a picker, the strip's menu) bubbles here through the
127
+ // React tree; an arrow on a picker tile must not move the sketch.
128
+ if (!event.currentTarget.contains(target)) return;
129
+ // Enter on a control presses the control; on the paper it edits text.
130
+ if (event.key === "Enter" && target.closest("button, [role=option], a") !== null) return;
131
+ const action = resolveShotBoardKey(event, { editing: isEditable(target), hasSelection: false, storyboard: true });
132
+ if (action === null || !action.kind.startsWith("sketch")) return;
133
+ if (!run(action as SketchKeyAction)) return;
134
+ event.preventDefault();
135
+ event.stopPropagation();
136
+ };
137
+
138
+ return (
139
+ <div
140
+ ref={rootRef}
141
+ className="shot-board"
142
+ tabIndex={-1}
143
+ data-testid="shot-board"
144
+ aria-label={`Shot board: ${part.label}`}
145
+ onKeyDown={onKeyDown}
146
+ >
147
+ <SketchLayers doc={doc} sketch={sketch} />
148
+ <div className="shot-board-main">
149
+ <ShotBoardBar doc={doc} part={part} empty={(sketch?.items.length ?? 0) === 0} />
150
+ <div ref={setDesk} className="sketch-desk" data-testid="sketch-desk">
151
+ <div className="sketch-desk-stack" style={{ width }}>
152
+ {playing && sketch !== undefined ? (
153
+ <SketchPlay doc={doc} partId={partId} sketch={sketch} width={width} />
154
+ ) : (
155
+ <SketchCanvas doc={doc} partId={partId} sketch={sketch} width={width} editing={editing} onEdit={setEditing} />
156
+ )}
157
+ <div className="sketch-desk-strip" inert={playing}>
158
+ <SketchStrip doc={doc} partId={partId} sketches={sketches} current={sketch?.id ?? null} />
159
+ </div>
160
+ </div>
161
+ </div>
162
+ <div className="sketch-footer-cell" inert={playing}>
163
+ <SketchToolFooter zoom={zoom} onZoom={setZoom} anchors={{ image: imageAnchor, component: componentAnchor }} />
164
+ </div>
165
+ </div>
166
+ <ImagePicker open={tool === "image" && !playing} anchor={imageAnchor} onClose={() => store.setSketchTool("select")} />
167
+ <ComponentPicker open={tool === "component" && !playing} anchor={componentAnchor} partId={partId} onClose={() => store.setSketchTool("select")} />
168
+ </div>
169
+ );
170
+ }
171
+
172
+ /** The canvas bar (SB2, SB5). */
173
+ function ShotBoardBar({ doc, part, empty }: { doc: Doc3D; part: StoryboardPart3D; empty: boolean }) {
174
+ const store = useStore();
175
+ const building = useBuildingParts();
176
+ const playing = useShotEditor((s) => s.sketchPlaying);
177
+ const credentials = useShotEditor((s) => s.agentCredentials);
178
+ const probeError = useShotEditor((s) => s.agentCredentialsError);
179
+ const gate = agentGate(credentials, probeError);
180
+ const order = partOrder(doc);
181
+ const at = order.indexOf(part.id);
182
+ const prev = at > 0 ? order[at - 1] : undefined;
183
+ const next = at >= 0 && at < order.length - 1 ? order[at + 1] : undefined;
184
+ const status = shotStatusOf(part, building);
185
+ // Play loops the sketches over the PLAN (`sketchStageDoc`), so the label
186
+ // says the plan's length; when a linked Shot runs another (`partFramesOf`,
187
+ // the length the card shows), it names both, as buildPlannedPrompt does.
188
+ const planned = formatDuration(framesToSeconds(part.durationFrames, doc.fps));
189
+ const shotFrames = partFramesOf(doc, part);
190
+ const loop =
191
+ shotFrames === part.durationFrames
192
+ ? `${planned} loop`
193
+ : `${planned} planned loop (its Shot runs ${formatDuration(framesToSeconds(shotFrames, doc.fps))})`;
194
+
195
+ return (
196
+ <header className="sketch-bar" data-testid="sketch-bar">
197
+ <div className="sketch-bar-group">
198
+ {/* A NARROW BAR (sketch.css, `@container sketch-bar`) hides the
199
+ words marked `sketch-bar-word`; each button keeps its name. */}
200
+ <button
201
+ type="button"
202
+ className="sketch-crumb"
203
+ data-testid="sketch-crumb"
204
+ aria-label="Storyboard"
205
+ title="Back to the Storyboard"
206
+ onClick={() => store.closeShotBoard()}
207
+ >
208
+ {CHEVRON_LEFT_ICON}
209
+ <span className="sketch-bar-word">Storyboard</span>
210
+ </button>
211
+ <span className="sketch-divider" aria-hidden="true" />
212
+ <div className="sketch-bar-title">
213
+ <span className="sketch-bar-number">{partNumberOf(doc, part.id)}</span>
214
+ {/* THE NAME RENAMES IN PLACE, the Plan panel head's way: a
215
+ double-click, F2, or Enter on the focused name. It is still the
216
+ shot board's heading, as the Plan head's name is its panel's. */}
217
+ <h2 className="sketch-bar-heading">
218
+ <PartName part={part} className="sketch-bar-name" testId="sketch-bar-name" />
219
+ </h2>
220
+ <span className={`badge${STATUS_TONE[status]}`}>{SHOT_STATUS_LABEL[status]}</span>
221
+ </div>
222
+ <div className="sketch-bar-nav">
223
+ <button
224
+ type="button"
225
+ className="sketch-icon-button"
226
+ aria-label="Previous shot"
227
+ disabled={prev === undefined}
228
+ onClick={() => prev !== undefined && store.openShotBoard(prev)}
229
+ >
230
+ {CHEVRON_LEFT_ICON}
231
+ </button>
232
+ <button
233
+ type="button"
234
+ className="sketch-icon-button"
235
+ aria-label="Next shot"
236
+ disabled={next === undefined}
237
+ onClick={() => next !== undefined && store.openShotBoard(next)}
238
+ >
239
+ {CHEVRON_RIGHT_ICON}
240
+ </button>
241
+ </div>
242
+ </div>
243
+ <div className="sketch-bar-group">
244
+ {playing ? (
245
+ <>
246
+ <span className="sketch-bar-playing">{`Playing · ${loop}`}</span>
247
+ <button type="button" className="btn is-active" data-testid="sketch-stop" onClick={() => store.setSketchPlaying(false)}>
248
+ <span className="sketch-stop-square" aria-hidden="true" />
249
+ Stop
250
+ <kbd className="sketch-stop-key">Esc</kbd>
251
+ </button>
252
+ </>
253
+ ) : (
254
+ <button
255
+ type="button"
256
+ className="btn"
257
+ data-testid="sketch-play-button"
258
+ disabled={empty}
259
+ aria-label="Play"
260
+ title={empty ? "Put something on the sketch to play it." : "Play the sketch in one stage"}
261
+ onClick={() => store.setSketchPlaying(true)}
262
+ >
263
+ {PLAY_ICON}
264
+ <span className="sketch-bar-word">Play</span>
265
+ </button>
266
+ )}
267
+ {agentInEditor() ? (
268
+ <button
269
+ type="button"
270
+ className="btn"
271
+ data-testid="sketch-ask-agent"
272
+ disabled={!gate.ready}
273
+ aria-label="Ask agent"
274
+ title={gate.ready ? "Ask the agent to build this shot from its sketches" : gate.title}
275
+ // THE BOARD'S BUILD for this one shot, so it reads Building; a shot
276
+ // already built or building is still asked, with no status change.
277
+ onClick={() => {
278
+ if (store.buildPlannedShots([part.id]).length === 0) store.openAgentWith(buildPlannedPrompt(doc, [part.id]));
279
+ }}
280
+ >
281
+ {SPARKLES_ICON}
282
+ <span className="sketch-bar-word">Ask agent</span>
283
+ </button>
284
+ ) : null}
285
+ <button type="button" className="btn is-primary" data-testid="sketch-open-studio" onClick={() => store.openPlannedShot(part.id)}>
286
+ Open in Studio
287
+ {OPEN_ELSEWHERE_ICON}
288
+ </button>
289
+ </div>
290
+ </header>
291
+ );
292
+ }