@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,279 @@
1
+ // THE MOTION PATH ON SCREEN (gap 3): a `MotionPath` (parent-local design px)
2
+ // projected through the layer's live parent `matrixWorld` and one pane camera.
3
+ //
4
+ // It does NOT use `toScreen`, which divides by w and so mirrors a point behind
5
+ // the camera onto the screen. A path is a long line that can pass behind the
6
+ // eye in the working pane, so every segment is clipped against the near plane
7
+ // in VIEW space first, and a run that crosses it splits in two.
8
+ import { Matrix4, Vector3 } from "three";
9
+ import type { Camera } from "three";
10
+ import type { Vec3 } from "@dailies-studio/engine";
11
+ import type { MotionPath } from "@dailies-studio/shot/doc";
12
+
13
+ /** A key dot on screen. A key behind the camera is left out. */
14
+ export interface ScreenPathKey {
15
+ id: string;
16
+ frame: number;
17
+ x: number;
18
+ y: number;
19
+ /** The key sits under the playhead: drawn filled. */
20
+ current: boolean;
21
+ /** A bezier path's handle tips (schema v40), pane-local CSS px. Absent off
22
+ * the bezier arm, on the side no segment uses, or behind the camera. */
23
+ in?: { x: number; y: number };
24
+ out?: { x: number; y: number };
25
+ }
26
+
27
+ export interface ScreenMotionPath {
28
+ layerId: string;
29
+ /** The playhead is outside the layer's lifetime: the path draws dimmed. */
30
+ dim: boolean;
31
+ /** Flat `[x0, y0, x1, y1, ...]` polylines, pane-local CSS px. A `jump` run
32
+ * is a hold's step and draws dashed. */
33
+ runs: { jump: boolean; pts: number[] }[];
34
+ keys: ScreenPathKey[];
35
+ /** The current-frame tick: where the layer is, and the unit normal the
36
+ * tick is drawn along. Null off the path's frames or behind the camera. */
37
+ tick: { x: number; y: number; nx: number; ny: number } | null;
38
+ }
39
+
40
+ export interface MotionPathSample {
41
+ /** Where the layer is at the playhead, parent-local design px. */
42
+ now: Vec3;
43
+ /** Half a frame either side, for the tick's direction. */
44
+ before: Vec3;
45
+ after: Vec3;
46
+ }
47
+
48
+ /** A key counts as under the playhead within this many frames. */
49
+ const CURRENT_EPS = 1e-3;
50
+ /** How far in front of the near plane a clipped end is placed, in view units. */
51
+ const NEAR_PAD = 1e-4;
52
+
53
+ const _view = new Matrix4();
54
+ const _a = new Vector3();
55
+ const _b = new Vector3();
56
+ const _c = new Vector3();
57
+ const _d = new Vector3();
58
+
59
+ function cameraNear(cam: Camera): number {
60
+ const near = (cam as { near?: number }).near;
61
+ return typeof near === "number" && Number.isFinite(near) ? near : 0.1;
62
+ }
63
+
64
+ /** Design (+y down, +z away) parent-local into view space. */
65
+ function toView(p: Vec3, view: Matrix4, out: Vector3): Vector3 {
66
+ return out.set(p[0], -p[1], -p[2]).applyMatrix4(view);
67
+ }
68
+
69
+ /** View space to pane-local CSS px. Only for points in front of the near plane. */
70
+ function viewToScreen(v: Vector3, cam: Camera, width: number, height: number): [number, number] {
71
+ _c.copy(v).applyMatrix4(cam.projectionMatrix);
72
+ return [((_c.x + 1) / 2) * width, ((1 - _c.y) / 2) * height];
73
+ }
74
+
75
+ /** The matrix taking parent-local three coordinates into the camera's view. */
76
+ function viewOf(parentWorld: Matrix4, cam: Camera): Matrix4 {
77
+ return _view.multiplyMatrices(cam.matrixWorldInverse, parentWorld);
78
+ }
79
+
80
+ /**
81
+ * Projects one path into one pane. `sample` is null when the playhead is
82
+ * outside the path's frames (no tick, no current key is possible then).
83
+ */
84
+ export function projectMotionPath(
85
+ layerId: string,
86
+ path: MotionPath,
87
+ frame: number,
88
+ dim: boolean,
89
+ sample: MotionPathSample | null,
90
+ parentWorld: Matrix4,
91
+ cam: Camera,
92
+ width: number,
93
+ height: number,
94
+ ): ScreenMotionPath {
95
+ const view = viewOf(parentWorld, cam);
96
+ const limit = -cameraNear(cam) - NEAR_PAD;
97
+ const runs: ScreenMotionPath["runs"] = [];
98
+ for (const run of path.runs) {
99
+ let pts: number[] = [];
100
+ const flush = (): void => {
101
+ if (pts.length >= 4) runs.push({ jump: run.jump, pts });
102
+ pts = [];
103
+ };
104
+ for (let i = 0; i + 1 < run.points.length; i++) {
105
+ const a = toView(run.points[i]!, view, _a);
106
+ const b = toView(run.points[i + 1]!, view, _b);
107
+ const aIn = a.z <= limit;
108
+ const bIn = b.z <= limit;
109
+ if (!aIn && !bIn) {
110
+ flush();
111
+ continue;
112
+ }
113
+ // Clip the end that is behind the near plane onto it.
114
+ if (!aIn) a.lerp(b, (limit - a.z) / (b.z - a.z));
115
+ else if (!bIn) b.lerpVectors(a, b, (limit - a.z) / (b.z - a.z));
116
+ const sa = viewToScreen(a, cam, width, height);
117
+ if (pts.length === 0 || !aIn) {
118
+ if (!aIn) flush();
119
+ pts.push(sa[0], sa[1]);
120
+ }
121
+ const sb = viewToScreen(b, cam, width, height);
122
+ pts.push(sb[0], sb[1]);
123
+ if (!bIn) flush();
124
+ }
125
+ flush();
126
+ }
127
+
128
+ const keys: ScreenPathKey[] = [];
129
+ const tip = (p: Vec3, h: Vec3 | undefined): { x: number; y: number } | undefined => {
130
+ if (h === undefined) return undefined;
131
+ const v = toView([p[0] + h[0], p[1] + h[1], p[2] + h[2]], view, _b);
132
+ if (v.z > limit) return undefined;
133
+ const [x, y] = viewToScreen(v, cam, width, height);
134
+ return { x, y };
135
+ };
136
+ for (const key of path.keys) {
137
+ const v = toView(key.point, view, _a);
138
+ if (v.z > limit) continue;
139
+ const [x, y] = viewToScreen(v, cam, width, height);
140
+ const dot: ScreenPathKey = { id: key.id, frame: key.frame, x, y, current: Math.abs(key.frame - frame) < CURRENT_EPS };
141
+ const hIn = tip(key.point, key.spatialIn);
142
+ const hOut = tip(key.point, key.spatialOut);
143
+ if (hIn !== undefined) dot.in = hIn;
144
+ if (hOut !== undefined) dot.out = hOut;
145
+ keys.push(dot);
146
+ }
147
+
148
+ let tick: ScreenMotionPath["tick"] = null;
149
+ if (sample !== null && path.runs.length > 0) {
150
+ const v = toView(sample.now, view, _a);
151
+ if (v.z <= limit) {
152
+ const [x, y] = viewToScreen(v, cam, width, height);
153
+ const pb = toView(sample.before, view, _b);
154
+ const pa = toView(sample.after, view, _d);
155
+ let tx = 0;
156
+ let ty = 0;
157
+ if (pb.z <= limit && pa.z <= limit) {
158
+ const sb = viewToScreen(pb, cam, width, height);
159
+ const sa = viewToScreen(pa, cam, width, height);
160
+ tx = sa[0] - sb[0];
161
+ ty = sa[1] - sb[1];
162
+ }
163
+ const len = Math.hypot(tx, ty);
164
+ // A layer at rest has no direction; the tick stands upright.
165
+ tick = len < 1e-6 ? { x, y, nx: 0, ny: 1 } : { x, y, nx: -ty / len, ny: tx / len };
166
+ }
167
+ }
168
+ return { layerId, dim, runs, keys, tick };
169
+ }
170
+
171
+ /** The key dot nearest `(x, y)` within `radius` CSS px, across every path. */
172
+ export function motionPathKeyAt(
173
+ paths: readonly ScreenMotionPath[],
174
+ x: number,
175
+ y: number,
176
+ radius: number,
177
+ ): { layerId: string; keyId: string } | null {
178
+ let best: { layerId: string; keyId: string } | null = null;
179
+ let bestD = radius;
180
+ for (const path of paths) {
181
+ for (const key of path.keys) {
182
+ const d = Math.hypot(key.x - x, key.y - y);
183
+ // `<=` so the LATER path wins a tie: it draws on top.
184
+ if (d <= bestD) {
185
+ bestD = d;
186
+ best = { layerId: path.layerId, keyId: key.id };
187
+ }
188
+ }
189
+ }
190
+ return best;
191
+ }
192
+
193
+ /** How far a handle tip must stand from its dot, in CSS px, to be drawn and
194
+ * grabbed. Nearer, the dot wins the press: a corner's zero handles sit on it. */
195
+ export const PATH_HANDLE_MIN_PX = 6;
196
+
197
+ /** The selected key's handle tip nearest `(x, y)` within `radius` CSS px.
198
+ * Only the selected key shows handles, so only its handles answer. */
199
+ export function motionPathHandleAt(
200
+ paths: readonly ScreenMotionPath[],
201
+ selected: { layerId: string; keyId: string } | null,
202
+ x: number,
203
+ y: number,
204
+ radius: number,
205
+ ): { layerId: string; keyId: string; part: "in" | "out" } | null {
206
+ if (selected === null) return null;
207
+ const key = paths.find((p) => p.layerId === selected.layerId)?.keys.find((k) => k.id === selected.keyId);
208
+ if (key === undefined) return null;
209
+ let best: "in" | "out" | null = null;
210
+ let bestD = radius;
211
+ for (const part of ["in", "out"] as const) {
212
+ const h = key[part];
213
+ if (h === undefined || Math.hypot(h.x - key.x, h.y - key.y) < PATH_HANDLE_MIN_PX) continue;
214
+ const d = Math.hypot(h.x - x, h.y - y);
215
+ if (d <= bestD) {
216
+ bestD = d;
217
+ best = part;
218
+ }
219
+ }
220
+ return best === null ? null : { layerId: selected.layerId, keyId: selected.keyId, part: best };
221
+ }
222
+
223
+ /** Did any corner, key or tick move by more than half a CSS px, or appear? */
224
+ export function motionPathsMoved(
225
+ before: readonly ScreenMotionPath[],
226
+ after: readonly ScreenMotionPath[],
227
+ ): boolean {
228
+ if (before.length !== after.length) return true;
229
+ const far = (a: number, b: number | undefined): boolean => b === undefined || Math.abs(a - b) > 0.5;
230
+ return after.some((next, i) => {
231
+ const prev = before[i]!;
232
+ if (prev.layerId !== next.layerId || prev.dim !== next.dim) return true;
233
+ if (prev.runs.length !== next.runs.length || prev.keys.length !== next.keys.length) return true;
234
+ for (let r = 0; r < next.runs.length; r++) {
235
+ const a = prev.runs[r]!;
236
+ const b = next.runs[r]!;
237
+ if (a.jump !== b.jump || a.pts.length !== b.pts.length) return true;
238
+ if (b.pts.some((v, k) => far(v, a.pts[k]))) return true;
239
+ }
240
+ for (let k = 0; k < next.keys.length; k++) {
241
+ const a = prev.keys[k]!;
242
+ const b = next.keys[k]!;
243
+ if (a.id !== b.id || a.current !== b.current || far(b.x, a.x) || far(b.y, a.y)) return true;
244
+ for (const part of ["in", "out"] as const) {
245
+ const ha = a[part];
246
+ const hb = b[part];
247
+ if (ha === undefined || hb === undefined ? ha !== hb : far(hb.x, ha.x) || far(hb.y, ha.y)) return true;
248
+ }
249
+ }
250
+ if (prev.tick === null || next.tick === null) return prev.tick !== next.tick;
251
+ return (
252
+ far(next.tick.x, prev.tick.x) ||
253
+ far(next.tick.y, prev.tick.y) ||
254
+ Math.abs(next.tick.nx - prev.tick.nx) > 0.02 ||
255
+ Math.abs(next.tick.ny - prev.tick.ny) > 0.02
256
+ );
257
+ });
258
+ }
259
+
260
+ /** The target nearest `value` within `radius`, else `value` unchanged: ctrl's
261
+ * snap of a dragged key onto a neighbour's axis or the frame's centre line. */
262
+ export function snapToNearest(value: number, targets: readonly number[], radius: number): number {
263
+ let best = value;
264
+ let bestD = radius;
265
+ for (const t of targets) {
266
+ const d = Math.abs(t - value);
267
+ if (d <= bestD) {
268
+ bestD = d;
269
+ best = t;
270
+ }
271
+ }
272
+ return best;
273
+ }
274
+
275
+ /** Which component of a delta is largest: shift's axis lock keeps only it. */
276
+ export function dominantAxis(d: Vec3): 0 | 1 | 2 {
277
+ const [x, y, z] = d.map(Math.abs) as [number, number, number];
278
+ return x >= y && x >= z ? 0 : y >= z ? 1 : 2;
279
+ }
@@ -0,0 +1,74 @@
1
+ // THE MOTION PREVIEW (bridge v53): the Motion section's active preset drawn on
2
+ // some layers, without a document write.
3
+ //
4
+ // `motionPreviewDoc` derives the document the RUNTIME draws, and only the
5
+ // runtime, exactly as `fontPreviewDoc` does: picking, the overlays, health,
6
+ // coverage and every export keep the real one. It runs the very
7
+ // `stampMotionPreset` an apply runs, on the stage's own copy, so what a hover
8
+ // shows is what a pick writes. A preset that refuses on every layer derives
9
+ // nothing, and the runtime draws the document.
10
+ import { motionPreset, stampMotionPreset } from "@dailies-studio/shot/doc";
11
+ import type { Doc3D, MotionPresetRequest } from "@dailies-studio/shot/doc";
12
+ import type { Ease } from "@dailies-studio/engine";
13
+ import type { ShotMotionPreview } from "../bridgeTypes.js";
14
+
15
+ /** The most layers one preview stamps: a selection a person could make. */
16
+ export const MAX_MOTION_PREVIEW_LAYERS = 256;
17
+
18
+ /** The preview as the chrome sent it, checked field by field; null for one
19
+ * that names no known preset or no layer. */
20
+ export function sanitizeMotionPreview(raw: ShotMotionPreview | null): ShotMotionPreview | null {
21
+ if (raw === null || typeof raw !== "object") return null;
22
+ const { containerId, layerIds, request, contracts } = raw;
23
+ if (typeof containerId !== "string" || containerId.length === 0 || !Array.isArray(layerIds)) return null;
24
+ const ids = [...new Set((layerIds as unknown[]).filter((id): id is string => typeof id === "string" && id.length > 0))];
25
+ if (ids.length === 0 || request === null || typeof request !== "object") return null;
26
+ if (typeof request.preset !== "string" || motionPreset(request.preset) === null) return null;
27
+ const frames = (n: unknown, min: number): n is number => typeof n === "number" && Number.isInteger(n) && n >= min;
28
+ const ease = easeOf(request.ease);
29
+ const clean: MotionPresetRequest = {
30
+ preset: request.preset,
31
+ ...(frames(request.lengthFrames, 1) ? { lengthFrames: request.lengthFrames } : {}),
32
+ ...(frames(request.at, 0) ? { at: request.at } : {}),
33
+ ...(ease === null ? {} : { ease }),
34
+ };
35
+ return {
36
+ containerId,
37
+ layerIds: ids.slice(0, MAX_MOTION_PREVIEW_LAYERS),
38
+ request: clean,
39
+ ...(contracts !== null && typeof contracts === "object" ? { contracts } : {}),
40
+ };
41
+ }
42
+
43
+ /** An ease the engine can evaluate, or null: the shapes `easeWrite` admits. */
44
+ function easeOf(raw: unknown): Ease | null {
45
+ if (raw === null || typeof raw !== "object") return null;
46
+ const e = raw as Record<string, unknown>;
47
+ const finite = (n: unknown): n is number => typeof n === "number" && Number.isFinite(n);
48
+ if (e["type"] === "hold") return { type: "hold" };
49
+ if (e["type"] === "bezier" && Array.isArray(e["handles"]) && e["handles"].length === 4 && e["handles"].every(finite)) {
50
+ const [x1, y1, x2, y2] = e["handles"] as number[];
51
+ return { type: "bezier", handles: [x1!, y1!, x2!, y2!] };
52
+ }
53
+ if (e["type"] === "spring" && finite(e["stiffness"]) && finite(e["damping"]) && finite(e["mass"]) && e["stiffness"] > 0 && e["mass"] > 0 && e["damping"] >= 0) {
54
+ return { type: "spring", stiffness: e["stiffness"], damping: e["damping"], mass: e["mass"] };
55
+ }
56
+ return null;
57
+ }
58
+
59
+ /** The last derivation, so a render that asks again for the same document and
60
+ * preview does not stamp again (StageApp and the bridge both ask). */
61
+ let last: { doc: Doc3D; preview: ShotMotionPreview; out: Doc3D } | null = null;
62
+
63
+ /** The document the runtime draws while `preview` shows: `doc` itself when
64
+ * there is none, or when the stamp lands nothing. */
65
+ export function motionPreviewDoc(doc: Doc3D, preview: ShotMotionPreview | null): Doc3D {
66
+ if (preview === null) return doc;
67
+ if (last !== null && last.doc === doc && last.preview === preview) return last.out;
68
+ const contracts = preview.contracts;
69
+ const out = stampMotionPreset(doc, preview.containerId, preview.layerIds, preview.request, {
70
+ contractOf: (id) => contracts?.[id],
71
+ }).doc;
72
+ last = { doc, preview, out };
73
+ return out;
74
+ }