@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
@@ -4,88 +4,282 @@
4
4
  // Every readout is the layer AS PAINTED at the playhead and every commit goes
5
5
  // through `setEffectiveField`, so the number typed is the number drawn. See
6
6
  // ../useDocWrite.ts for why both halves are required.
7
- import { InspectorRow, InspectorSection, NumberField, PropertyGrid } from "@dailies-studio/ui";
7
+ //
8
+ // The THIRD half — a drag — is `useTransformScrub` below, and it lives here
9
+ // because it is the seam's bracket plus this section's own vocabulary. Every
10
+ // other section that edits a transform field imports it from here.
11
+ import { InspectorRow, InspectorSection, NumberField, Toggle } from "@dailies-studio/ui";
12
+ import type { ScrubHandlers } from "@dailies-studio/ui";
13
+ import type { ReactNode } from "react";
14
+ import { MAX_LAYER_SIZE, containerFrame, setLayerTrackSpatial } from "@dailies-studio/shot/doc";
8
15
  import type { TransformField } from "@dailies-studio/shot/doc";
9
- import { useSelectionValue, useTransformWrite } from "../useDocWrite.js";
16
+ import { useStore } from "../../../state/context.js";
17
+ import { readField, typeTransformField } from "../../../state/fieldWrite.js";
18
+ import { authoringFrame } from "../../../state/viewMode.js";
19
+ import { KeyframeDot } from "../KeyframeDot.js";
20
+ import {
21
+ useScrub,
22
+ useSelectedLayers,
23
+ useSelectionScrub,
24
+ useSelectionValue,
25
+ useTransformWrite,
26
+ } from "../useDocWrite.js";
10
27
  import { AlignRow } from "./AlignRow.js";
11
28
 
29
+ /** What keys together with each box's diamond, for its tooltip: a track is
30
+ * per vector (see `Pair`). */
31
+ const POSITION_PARTS = ["X", "Y", "Z"] as const;
32
+ const SIZE_PARTS = ["W", "H"] as const;
33
+ const TILT_PARTS = ["Tilt X", "Tilt Y"] as const;
34
+
12
35
  export function TransformSection() {
13
36
  return (
14
- <InspectorSection title="Transform" persistKey="shot:transform">
37
+ <InspectorSection className="insp-object" title="Transform" persistKey="shot:transform">
15
38
  {/* Above the fields, the way Raylight leads its Position section: the
16
39
  alignment buttons are how a layout actually gets made, and the
17
40
  numbers are how it gets adjusted afterwards. */}
18
41
  <AlignRow />
19
- <PropertyGrid>
20
- <Field field="x" label="X" unit="px" />
21
- <Field field="y" label="Y" unit="px" />
22
- <Field field="w" label="W" unit="px" min={1} />
23
- <Field field="h" label="H" unit="px" min={1} />
24
- {/* Depth is the field that makes this lane 3D, so it sits with the
25
- position rather than in a section of its own. */}
26
- <Field field="z" label="Z" unit="px" />
27
- <Field field="roll" label="Roll" unit="°" step={1} />
28
- <Field field="tiltX" label="Tilt X" unit="°" step={1} min={-180} max={180} />
29
- <Field field="tiltY" label="Tilt Y" unit="°" step={1} min={-180} max={180} />
30
- </PropertyGrid>
42
+ {/* EVERY BOX CARRIES THE DIAMOND OF THE TRACK IT SHOWS, inside it: X
43
+ and Y each carry Position's (see `Pair` for why one track lights
44
+ two boxes). The expose pin publishes the whole track, so only a
45
+ vector's first box carries it (`pin={false}` on the rest). */}
46
+ <Pair>
47
+ <Field field="x" label="X" name="Position X" unit="px" keyPath="transform.position" parts={POSITION_PARTS} />
48
+ <Field field="y" label="Y" name="Position Y" unit="px" keyPath="transform.position" parts={POSITION_PARTS} pin={false} />
49
+ </Pair>
50
+ <PathCurveRows />
51
+ {/* `MAX_LAYER_SIZE` is where the write path saturates (`setEffectiveField`),
52
+ so the field says the ceiling before the document answers with it. */}
53
+ <Pair>
54
+ <Field field="w" label="W" name="Layer width" unit="px" min={1} max={MAX_LAYER_SIZE} keyPath="transform.size" parts={SIZE_PARTS} />
55
+ <Field field="h" label="H" name="Layer height" unit="px" min={1} max={MAX_LAYER_SIZE} keyPath="transform.size" parts={SIZE_PARTS} pin={false} />
56
+ </Pair>
57
+ {/* Depth is the field that makes this lane 3D, so it sits with the
58
+ position rather than in a section of its own. Its TRACK is the
59
+ position vec3, so the Z box carries Position's diamond, lit with
60
+ X's and Y's (and X's box holds Position's one pin); Roll beside it
61
+ carries its own. One diamond for the pair keyed Roll only, beside a
62
+ Z it did not key. */}
63
+ <Pair>
64
+ <Field field="z" label="Z" name="Position Z" unit="px" keyPath="transform.position" parts={POSITION_PARTS} pin={false} />
65
+ <Field field="roll" label="Roll" unit="°" step={1} keyPath="transform.rollDeg" />
66
+ </Pair>
67
+ <Pair>
68
+ <Field field="tiltX" label="Tilt X" unit="°" step={1} min={-180} max={180} keyPath="transform.tilt" parts={TILT_PARTS} />
69
+ <Field field="tiltY" label="Tilt Y" unit="°" step={1} min={-180} max={180} keyPath="transform.tilt" parts={TILT_PARTS} pin={false} />
70
+ </Pair>
31
71
  </InspectorSection>
32
72
  );
33
73
  }
34
74
 
75
+ /**
76
+ * Two fields side by side, each its own box with its diamond inside it.
77
+ *
78
+ * A TRACK IS PER VECTOR, not per component: `transform.position` carries x, y
79
+ * and z in one vec3, so keying any of them keys all three. That is the
80
+ * schema's own shape (one writer per FIELD, which is why validate refuses
81
+ * `transform.position` beside `transform.position.z`). So every box that
82
+ * shows a part of the vector carries the VECTOR's diamond, the same state in
83
+ * each, and a press in any of them keys the whole vector; the tooltip says
84
+ * which parts key together, so the Y box's diamond never reads as Y's own.
85
+ */
86
+ function Pair({ children }: { children: ReactNode }) {
87
+ return (
88
+ <InspectorRow>
89
+ <div className="insp-vec">{children}</div>
90
+ </InspectorRow>
91
+ );
92
+ }
93
+
94
+ /** The tension a path takes when "Curved path" turns on. */
95
+ const DEFAULT_TENSION = 0.5;
96
+
97
+ /**
98
+ * "Curved path" (gap 3): the Position track's `spatialInterp`, which bends the
99
+ * motion path through the keys while each key's ease keeps the timing.
100
+ *
101
+ * A splineFollow layer's path is the spline, so it gets a note instead. With
102
+ * no Position keys there is no path to curve: the switch is disabled and says
103
+ * why. Over a multi-selection that disagrees each switch reads Mixed, and a
104
+ * press turns it on for every layer, in one undo step (the one policy every
105
+ * switch in the inspector keeps).
106
+ */
107
+ function PathCurveRows() {
108
+ const store = useStore();
109
+ const layers = useSelectedLayers();
110
+ // THE TENSION'S DRAG HALF, over the same op the typed value takes, on every
111
+ // selected layer, re-derived from the gesture's base on each capture. The
112
+ // ids are read live, as `useSelectionScrub` reads them.
113
+ const tensionScrub = useScrub((doc, raw) => {
114
+ const s = store.getState();
115
+ const container = s.editingDef ?? s.sceneId;
116
+ if (container === null) return doc;
117
+ let next = doc;
118
+ for (const id of s.selection) {
119
+ next = setLayerTrackSpatial(next, container, id, "transform.position", {
120
+ type: "catmull-rom",
121
+ tension: Number(raw),
122
+ }).doc;
123
+ }
124
+ return next;
125
+ });
126
+ if (layers.length === 0) return null;
127
+ if (layers.some((l) => l.splineFollow !== undefined)) {
128
+ return <p className="insp-note">Path follows the spline.</p>;
129
+ }
130
+ const tracks = layers.map((l) => l.tracks?.["transform.position"]);
131
+ const keyed = tracks.every((t) => t !== undefined && t.keyframes.length > 0);
132
+ const curves = tracks.map((t) => t?.spatialInterp);
133
+ const on = keyed && curves.every((c) => c !== undefined);
134
+ const curvedMixed = keyed && !on && curves.some((c) => c !== undefined);
135
+ // Bezier handles (schema v40) replace the tension: the curve is then the
136
+ // handles, dragged on the stage.
137
+ const handles = on && curves.every((c) => c?.type === "bezier");
138
+ const handlesMixed = on && !handles && curves.some((c) => c?.type === "bezier");
139
+ const tensioned = on && curves.every((c) => c?.type === "catmull-rom");
140
+ const tensions = curves.map((c) => (c?.type === "catmull-rom" ? (c.tension ?? 0) : 0));
141
+ const ids = layers.map((l) => l.id);
142
+ return (
143
+ <>
144
+ <InspectorRow label="Curved path">
145
+ <Toggle
146
+ checked={on}
147
+ mixed={curvedMixed}
148
+ disabled={!keyed}
149
+ ariaLabel="Curved path"
150
+ onChange={(next) =>
151
+ store.setPathCurve(ids, next ? { type: "catmull-rom", tension: DEFAULT_TENSION } : null)
152
+ }
153
+ />
154
+ </InspectorRow>
155
+ {keyed ? null : <p className="insp-note">Key Position to curve its path.</p>}
156
+ {on ? (
157
+ <InspectorRow label="Path handles">
158
+ <Toggle
159
+ checked={handles}
160
+ mixed={handlesMixed}
161
+ ariaLabel="Path handles"
162
+ onChange={(next) =>
163
+ store.setPathCurve(ids, next ? { type: "bezier" } : { type: "catmull-rom", tension: DEFAULT_TENSION })
164
+ }
165
+ />
166
+ </InspectorRow>
167
+ ) : null}
168
+ {handles ? <p className="insp-note">Press a path dot to drag its handles.</p> : null}
169
+ {tensioned ? (
170
+ // The explanation is the ROW's tooltip: an unlabelled row puts it on
171
+ // the row itself (InspectorRow), where it used to be dropped.
172
+ <InspectorRow labelTitle="0 is the roundest curve, 1 runs straight through the keys">
173
+ <NumberField
174
+ value={tensions[0]!}
175
+ mixed={tensions.some((t) => t !== tensions[0])}
176
+ label="Tension"
177
+ ariaLabel="Path tension"
178
+ min={0}
179
+ max={1}
180
+ step={0.05}
181
+ precision={2}
182
+ onCommit={(tension) => store.setPathCurve(ids, { type: "catmull-rom", tension })}
183
+ onScrubStart={tensionScrub.start}
184
+ onScrub={tensionScrub.move}
185
+ onScrubEnd={tensionScrub.end}
186
+ />
187
+ </InspectorRow>
188
+ ) : null}
189
+ </>
190
+ );
191
+ }
192
+
193
+ /**
194
+ * `useTransformWrite`'s DRAG half.
195
+ *
196
+ * Without it a NumberField still commits once at release — the seam's own
197
+ * fallback — but the STAGE does not move until the pointer comes up, so
198
+ * dragging W is a number that changes over a picture that does not. Live is the
199
+ * whole reason a drag handle exists.
200
+ *
201
+ * It lives here rather than at the seam because it is the seam PLUS this lane's
202
+ * transform vocabulary: the typed path's own builder (`typeTransformField`),
203
+ * re-derived from the gesture's base on every capture. With Animate on, the
204
+ * scrub's commit records the result as keys (`noteChange`), so one drag leaves
205
+ * one key per field rather than one per pointermove.
206
+ *
207
+ * Exported for AppearanceSection: `opacity` is a TransformField like every
208
+ * other, it just does not live in this grid.
209
+ */
210
+ export function useTransformScrub(field: TransformField): ScrubHandlers {
211
+ const store = useStore();
212
+ return useSelectionScrub((layer, raw) => {
213
+ const s = store.getState();
214
+ const doc = s.doc;
215
+ const container = s.editingDef ?? s.sceneId;
216
+ if (doc === null || container === null) return layer;
217
+ // The frame is read LIVE, exactly as the typed path reads it: compensating
218
+ // against the inspector's coalesced frame would land the value up to 100ms
219
+ // of playhead away from where the stage is drawing it.
220
+ //
221
+ // AND ON THE CONTAINER'S OWN CLOCK. This used to read `sceneLocalFrame` off
222
+ // `s.sceneId` unconditionally — but `sceneId` stays set while a definition
223
+ // is open (it follows the playhead), so dragging W inside a component
224
+ // compensated against master-derived time while the def stage drew
225
+ // `defFrame`. The typed path next door already took this branch; the drag
226
+ // half did not, so the same edit did two different things depending on
227
+ // whether the author typed it or dragged it.
228
+ const at = containerFrame(doc, container, authoringFrame(s));
229
+ return typeTransformField(layer, field, raw as number, at, doc.fps);
230
+ });
231
+ }
232
+
233
+ /** One field box, carrying the diamond of the track it shows (`keyPath`);
234
+ * its row comes from the `Pair` around it. */
35
235
  function Field({
36
236
  field,
37
237
  label,
238
+ name = label,
38
239
  unit,
39
240
  step = 1,
40
241
  min,
41
242
  max,
243
+ keyPath,
244
+ parts,
245
+ pin = true,
42
246
  }: {
43
247
  field: TransformField;
44
248
  label: string;
249
+ /** The full name: the accessible name, and the text above the pill when
250
+ * Field labels is Named. Defaults to the glyph when that is already a word. */
251
+ name?: string;
45
252
  unit?: string;
46
253
  step?: number;
47
254
  min?: number;
48
255
  max?: number;
256
+ /** The track this box's value belongs to: the vector's, for a part of one. */
257
+ keyPath: string;
258
+ /** The vector's parts, which key together. */
259
+ parts?: readonly string[];
260
+ /** False for a vector's later boxes: its first box carries the one pin. */
261
+ pin?: boolean;
49
262
  }) {
50
263
  const write = useTransformWrite();
264
+ const scrub = useTransformScrub(field);
51
265
  const { value, mixed } = useSelectionValue((_layer, effective) => readField(effective, field));
52
266
  if (value === undefined) return null;
53
267
  return (
54
- <InspectorRow>
55
- <NumberField
56
- value={value}
57
- mixed={mixed}
58
- label={label}
59
- ariaLabel={label}
60
- {...(unit === undefined ? {} : { unit })}
61
- step={step}
62
- {...(min === undefined ? {} : { min })}
63
- {...(max === undefined ? {} : { max })}
64
- onCommit={(next) => write(field, next)}
65
- />
66
- </InspectorRow>
268
+ <NumberField
269
+ value={value}
270
+ mixed={mixed}
271
+ label={label}
272
+ ariaLabel={name}
273
+ {...(unit === undefined ? {} : { unit })}
274
+ step={step}
275
+ {...(min === undefined ? {} : { min })}
276
+ {...(max === undefined ? {} : { max })}
277
+ trailing={<KeyframeDot path={keyPath} pin={pin} {...(parts === undefined ? {} : { parts })} />}
278
+ onCommit={(next) => write(field, next)}
279
+ onScrubStart={scrub.start}
280
+ onScrub={scrub.move}
281
+ onScrubEnd={scrub.end}
282
+ />
67
283
  );
68
284
  }
69
285
 
70
- function readField(t: { position: readonly number[]; size: readonly number[]; tilt: readonly number[]; rollDeg: number; opacity: number }, field: TransformField): number {
71
- switch (field) {
72
- case "x":
73
- return t.position[0]!;
74
- case "y":
75
- return t.position[1]!;
76
- case "z":
77
- return t.position[2]!;
78
- case "w":
79
- return t.size[0]!;
80
- case "h":
81
- return t.size[1]!;
82
- case "tiltX":
83
- return t.tilt[0]!;
84
- case "tiltY":
85
- return t.tilt[1]!;
86
- case "roll":
87
- return t.rollDeg;
88
- case "opacity":
89
- return t.opacity;
90
- }
91
- }