@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,5 +1,6 @@
1
- // The scene's camera, as five fields. Shown under the scene, when nothing is
2
- // selected.
1
+ // The scene's camera: where it looks, its lens, its zoom and its orbit. Shown
2
+ // in both contexts when nothing is selected, after the context's own section
3
+ // (see `CONTAINER_LAYOUT`).
3
4
  //
4
5
  // ── THE SAME TWO TRUTHS THE LAYER INSPECTOR FOLLOWS ─────────────────────
5
6
  //
@@ -12,48 +13,257 @@
12
13
  // onwards `cameraAt` is painting a shot's framing, so writing `scene.camera`
13
14
  // there would dirty the document and move nothing. That refusal is not written
14
15
  // here. It is `writeFraming`'s, reached through the store's `writeCamera`, the
15
- // same seam the frustum drag, the align and the fit all go through. This panel
16
- // is a keyboard frustum and deliberately has no opinion of its own.
17
- //
18
- // The two halves are coherent by construction rather than by care:
19
- // `shotOwningCamera` is null exactly when `cameraAt` returns `scene.camera`, so
20
- // whenever a base write is allowed the effective value IS the base.
21
- import { InspectorSection } from "@dailies-studio/ui";
22
- import { cameraAt, shotOwningCamera } from "@dailies-studio/shot/doc";
16
+ // same seam the gizmo drag, the align and the fit all go through. This panel
17
+ // is a keyboard gizmo and deliberately has no opinion of its own.
18
+ //
19
+ // ── AND IT SAYS WHAT A CHANGE WILL DO, BEFORE ONE IS MADE ───────────────
20
+ //
21
+ // `cameraWriteGate` is the fork's own answer, asked up front: held by which
22
+ // move, or edits which move, or adds one. The same sentence the error strip
23
+ // speaks after a refused drag, said here while the author is still reading.
24
+ //
25
+ // ── A DRAG HERE IS A STAGE DRAG ─────────────────────────────────────────
26
+ //
27
+ // The fields and the zoom slider scrub LIVE, through the stage's own
28
+ // framing lane (`onFramingGestureStart`/`End`): one gesture, one undo entry,
29
+ // and the same "a lane already open wins" refusal the gizmo gets. They used
30
+ // to commit only on release, so the stage did not move while the number did.
31
+ //
32
+ // ── ITS KEYS ARE ITS POSES ──────────────────────────────────────────────
33
+ //
34
+ // The camera has no property track: it animates through moves, and a move's
35
+ // two ends are the camera's keyframes (`cameraMarks`, the same marks the
36
+ // camera row draws). So each field's diamond reads those poses: KEYED when a
37
+ // pose sits at the playhead (a pose holds the whole framing, so every field
38
+ // lights together), ANIMATED when the field's value differs between poses,
39
+ // STATIC otherwise. A click on a keyed diamond removes the move that pose
40
+ // belongs to; a click anywhere else adds a move ending at the playhead
41
+ // (`addShotAtPlayhead`, the camera row's "+ shot"). A path's interior
42
+ // waypoint is read-only here, as it is on the row. While the transport plays
43
+ // the diamonds are disabled: their state is read off the held inspector frame
44
+ // while a press would add or remove a move at the live one.
45
+ //
46
+ // Each diamond sits INSIDE its field, the house in-field key, and it is the
47
+ // ACCENT, not `--kf`: `--kf` is a property keyframe on a track, and a camera
48
+ // pose is not one (model.ts says the same of its marks). The lens has no
49
+ // diamond at all: it is not part of a pose.
50
+ import { useEffect, useMemo, useRef } from "react";
51
+ import { InspectorSection, NumberField } from "@dailies-studio/ui";
52
+ import { cameraAt, cameraWriteGate, removeShot } from "@dailies-studio/shot/doc";
53
+ import type { Doc3D, Framing, Scene3D } from "@dailies-studio/shot/doc";
54
+ import type { ShotEditorStore } from "../../../state/store.js";
23
55
  import { useShotEditor, useStore } from "../../../state/context.js";
24
- import { FramingRows } from "../FramingRows.js";
25
- import { useInspectorFrame } from "../useDocWrite.js";
56
+ import { SECTION_ICONS } from "../../../icons.js";
57
+ import { FRAMING_KEYS, FramingRows } from "../FramingRows.js";
58
+ import type { CameraKeys, FramingScrub } from "../FramingRows.js";
59
+ import { cameraMarks } from "../../timeline/model.js";
60
+ import { useInspectorFrame, useScrub } from "../useDocWrite.js";
61
+ import { patchScene } from "./SceneSection.js";
62
+
63
+ /**
64
+ * The camera's gesture bracket over the store's framing lane.
65
+ *
66
+ * THE LANE IS OPENED ON THE FIRST MOVE, not on the press: a press that never
67
+ * moves (a click to focus, a slider tap on the thumb) then opens nothing. If
68
+ * the lane refuses (another drag holds the history), the gesture writes
69
+ * nothing live and its last value is committed as one plain edit at the end,
70
+ * so the author's number still lands rather than vanishing.
71
+ *
72
+ * Stable for the store's lifetime, and the gesture is a ref, so the widgets
73
+ * reading these at pointer time always see the one gesture in flight.
74
+ */
75
+ function useCameraScrub(store: ShotEditorStore): FramingScrub {
76
+ const gesture = useRef<{ open: boolean | null; last: Partial<Framing> | null } | null>(null);
77
+ // A section unmounted mid-drag (the subject changed under the pointer)
78
+ // must not leave the lane open: the next stage drag would be refused.
79
+ useEffect(
80
+ () => () => {
81
+ if (gesture.current?.open === true) store.stageHandlers.onFramingGestureEnd(false);
82
+ gesture.current = null;
83
+ },
84
+ [store],
85
+ );
86
+ return useMemo(() => {
87
+ const move = (patch: Partial<Framing>): void => {
88
+ const g = gesture.current;
89
+ if (g === null) return;
90
+ g.last = { ...g.last, ...patch };
91
+ if (g.open === null) g.open = store.stageHandlers.onFramingGestureStart();
92
+ if (g.open) store.setSceneCamera(patch);
93
+ };
94
+ const end = (commit: boolean): void => {
95
+ const g = gesture.current;
96
+ gesture.current = null;
97
+ if (g === null) return;
98
+ if (g.open === true) store.stageHandlers.onFramingGestureEnd(commit);
99
+ else if (commit && g.last !== null) store.setSceneCamera(g.last);
100
+ };
101
+ return {
102
+ start: () => {
103
+ gesture.current = { open: null, last: null };
104
+ },
105
+ move,
106
+ end,
107
+ commit: (patch) => {
108
+ if (gesture.current === null) {
109
+ store.setSceneCamera(patch);
110
+ return;
111
+ }
112
+ move(patch);
113
+ end(true);
114
+ },
115
+ };
116
+ }, [store]);
117
+ }
118
+
119
+ /** Why the diamonds are disabled while the transport runs, as their tooltip. */
120
+ const PLAYING_ACTION = "Pause playback to add or remove a camera move.";
121
+
122
+ /**
123
+ * The diamonds' data for the scene at a scene-local frame. Pure, so the rule
124
+ * is testable without a store: `remove` is handed the id of the move to drop
125
+ * and `add` adds one at the playhead.
126
+ */
127
+ export function cameraKeys(
128
+ doc: Doc3D,
129
+ scene: Scene3D,
130
+ sceneFrame: number,
131
+ actions: { add(): void; remove(shotId: string): void },
132
+ ): { keys: CameraKeys; count: number } {
133
+ const marks = cameraMarks(scene, doc.fps);
134
+ const poses = marks.map((mark) => cameraAt(scene, mark.frame, doc.fps, doc.size));
135
+ const animated = new Set(
136
+ FRAMING_KEYS.filter((key) => poses.some((pose) => (pose[key] ?? 0) !== (poses[0]![key] ?? 0))),
137
+ );
138
+ const here = marks.find((mark) => mark.frame === sceneFrame);
139
+ const shot = here === undefined ? undefined : scene.shots.find((s) => here.id.startsWith(`${s.id}:`));
140
+ let action: string;
141
+ let toggle: (() => void) | null;
142
+ if (here === undefined) {
143
+ action = "Click to add a camera move ending at the playhead.";
144
+ toggle = actions.add;
145
+ } else if (here.kind === "waypoint" || shot === undefined) {
146
+ action = "A path waypoint is read-only here: edit its pose in the move's waypoint rows.";
147
+ toggle = null;
148
+ } else {
149
+ action = `Click to remove the camera move “${shot.label}”.`;
150
+ toggle = () => actions.remove(shot.id);
151
+ }
152
+ return {
153
+ count: marks.length,
154
+ keys: {
155
+ stateOf: (key) => (here !== undefined ? "keyed" : animated.has(key) ? "animated" : "static"),
156
+ animatedOf: (key) => animated.has(key),
157
+ action,
158
+ toggle,
159
+ },
160
+ };
161
+ }
26
162
 
27
163
  export function CameraSection() {
28
164
  const store = useStore();
29
165
  const doc = useShotEditor((s) => s.doc);
30
166
  const animate = useShotEditor((s) => s.animateMode);
167
+ const driver = useShotEditor((s) => s.cameraDriver);
168
+ const playing = useShotEditor((s) => s.playing);
31
169
  const { sceneId, sceneFrame } = useInspectorFrame();
170
+ const scrub = useCameraScrub(store);
171
+ // The lens writes the SCENE, so it rides the scene's scrub and its one
172
+ // patch op rather than the framing lane. The scene is read live per capture,
173
+ // for `SceneSection`'s reason.
174
+ const dragLens = useScrub((d, raw) => {
175
+ const id = store.getState().sceneId;
176
+ return id === null ? d : patchScene(d, id, raw as Partial<Scene3D>, store.getState().frame);
177
+ });
32
178
  if (doc === null || sceneId === null) return null;
33
179
  const scene = doc.scenesById[sceneId];
34
180
  if (scene === undefined) return null;
35
181
 
36
- // Only worth saying with animate OFF: with it on the same write authors a
37
- // move instead of being refused, so naming the owner would be a warning about
38
- // something that is not going to happen.
39
- const owner = animate ? null : shotOwningCamera(scene, sceneFrame);
182
+ const gate = cameraWriteGate(scene, sceneFrame, animate);
183
+ const { keys, count } = cameraKeys(doc, scene, sceneFrame, {
184
+ add: () => store.addShotAtPlayhead(sceneId),
185
+ remove: (shotId) => store.edit((d) => removeShot(d, sceneId, shotId)),
186
+ });
40
187
 
41
188
  return (
42
- <InspectorSection title="Camera" persistKey="shot:camera">
189
+ // No section scope: the camera's rows keep the rhythm and the fields every
190
+ // other section keeps because both are the house's (widgets.css).
191
+ <InspectorSection
192
+ title="Camera"
193
+ icon={SECTION_ICONS.camera}
194
+ note={count > 0 ? <span className="camera-field-key-count">· {count} keyed</span> : undefined}
195
+ persistKey="shot:camera"
196
+ >
197
+ {driver !== null && (
198
+ <span className="insp-notice" data-testid="camera-driven-by">
199
+ Camera driven by {driver}. The framing below has no effect while it is.
200
+ </span>
201
+ )}
43
202
  <FramingRows
44
- framing={cameraAt(scene, sceneFrame, doc.fps)}
203
+ framing={cameraAt(scene, sceneFrame, doc.fps, doc.size)}
45
204
  name="Camera"
46
- onCommit={(patch) => store.setSceneCamera(patch)}
205
+ scrub={scrub}
206
+ zoomSlider
207
+ keys={playing ? { ...keys, toggle: null, action: PLAYING_ACTION } : keys}
208
+ fov={
209
+ // THE ONLY CONTROL ON PARALLAX STRENGTH. A wide fov puts the camera
210
+ // close, so a depth offset changes scale a lot; a long lens puts it
211
+ // far and the same offset barely registers (resolve.ts's
212
+ // planeDistance). Moved here from the Shot section: it is the
213
+ // camera's lens, whatever object stores it.
214
+ //
215
+ // Its name starts with the word in its box, so a speech command and
216
+ // a screen reader use the word the author reads. No diamond: the
217
+ // lens is the scene's, not a pose's, and a dead diamond would only
218
+ // claim it keys.
219
+ <NumberField
220
+ value={scene.fovDeg}
221
+ label="FOV"
222
+ ariaLabel="FOV, field of view"
223
+ unit="°"
224
+ min={5}
225
+ max={120}
226
+ step={1}
227
+ title="The lens. A wide field of view puts the camera close, so depth changes scale a lot; a long lens puts it far, and the same depth barely registers"
228
+ onScrubStart={dragLens.start}
229
+ onScrub={(fovDeg) => dragLens.move({ fovDeg } satisfies Partial<Scene3D>)}
230
+ onScrubEnd={dragLens.end}
231
+ onCommit={(fovDeg) => {
232
+ store.edit((d) => patchScene(d, sceneId, { fovDeg }, store.getState().frame));
233
+ }}
234
+ />
235
+ }
47
236
  />
48
- {owner !== null && (
237
+ {gate.kind === "held" && gate.shot !== undefined && (
49
238
  // The fields stay LIVE. Typing into one produces the refusal by name in
50
239
  // the error strip, which is how the author learns the rule; a disabled
51
240
  // field would only teach them that the panel is broken.
52
- <span className="insp-dim" data-testid="camera-held-by">
53
- Held by the camera move “{owner.label}” from frame {owner.frame}. Turn on Animate (⇧A) to author the
241
+ // `insp-notice` and NOT `insp-dim`: the dim face is the MONO NUMERAL
242
+ // one and it sets `white-space: nowrap`, so this two-sentence
243
+ // explanation was laid out as a single line and clipped at the rail's
244
+ // edge, so the author saw "Held by the camera move" and none of the two
245
+ // ways out of it. `insp-dim` is for a value or a unit; a sentence
246
+ // wraps.
247
+ <span className="insp-notice" data-testid="camera-held-by">
248
+ Held by the camera move “{gate.shot.label}” from frame {gate.shot.frame}. Turn on Animate (⇧A) to author the
54
249
  move, or put the playhead before it.
55
250
  </span>
56
251
  )}
252
+ {gate.kind === "free" && gate.writes === "editsMove" && gate.shot !== undefined && (
253
+ <span className="insp-notice" data-testid="camera-edits-move">
254
+ Animate is on: a change here edits the end of the camera move “{gate.shot.label}”.
255
+ </span>
256
+ )}
257
+ {gate.kind === "free" && gate.writes === "newMove" && (
258
+ <span className="insp-notice" data-testid="camera-new-move">
259
+ Animate is on: a change here adds a camera move ending at the playhead.
260
+ </span>
261
+ )}
262
+ {(gate.kind === "derived" || gate.kind === "shaped" || gate.kind === "tooEarly") && (
263
+ <span className="insp-notice" data-testid="camera-gate">
264
+ {gate.refusal}
265
+ </span>
266
+ )}
57
267
  </InspectorSection>
58
268
  );
59
269
  }