@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,60 +1,124 @@
1
1
  // The align/distribute grid, the first thing in Raylight's Position section.
2
2
  //
3
- // Six alignments then two distributions, in two rows of four — the same order
4
- // and grouping every design tool uses, so the muscle memory transfers.
3
+ // Two rows of five, one per axis: row 1 works on x (left, centre, right,
4
+ // distribute, flip horizontal), row 2 on y. Every tooltip names its key, so the
5
+ // grid teaches the chords.
5
6
  //
6
7
  // The icons are inline SVG rather than glyphs: the whole point of this control
7
8
  // is that you recognise it without reading it, and no font ships a
8
9
  // distribute-horizontally character.
9
- import { ALIGN_MODES } from "@dailies-studio/shot/doc";
10
- import type { AlignMode } from "@dailies-studio/shot/doc";
10
+ import { useLocked } from "@dailies-studio/ui";
11
+ import { ALIGN_LABELS, DISTRIBUTE_MODES, MIN_DISTRIBUTE } from "@dailies-studio/shot/doc";
12
+ import type { AlignMode, FlipAxis } from "@dailies-studio/shot/doc";
11
13
  import { useShotEditor, useStore } from "../../../state/context.js";
14
+ import { shortcutHint } from "../../../state/shortcuts.js";
12
15
  import { useSelectedLayers } from "../useDocWrite.js";
13
16
 
14
- /** Label and icon geometry per mode. `satisfies` so a new ALIGN_MODES entry
15
- * without a row here is a compile error rather than a blank button. */
16
- const SPEC = {
17
- left: { label: "Align left", bar: [2, 2, 1.6, 12], marks: [[4, 3.5, 8, 3], [4, 9.5, 5, 3]] },
18
- hcenter: { label: "Align horizontal centres", bar: [7.2, 2, 1.6, 12], marks: [[3, 3.5, 10, 3], [4.5, 9.5, 7, 3]] },
19
- right: { label: "Align right", bar: [12.4, 2, 1.6, 12], marks: [[4, 3.5, 8, 3], [7, 9.5, 5, 3]] },
20
- top: { label: "Align top", bar: [2, 2, 12, 1.6], marks: [[3.5, 4, 3, 8], [9.5, 4, 3, 5]] },
21
- vcenter: { label: "Align vertical centres", bar: [2, 7.2, 12, 1.6], marks: [[3.5, 3, 3, 10], [9.5, 4.5, 3, 7]] },
22
- bottom: { label: "Align bottom", bar: [2, 12.4, 12, 1.6], marks: [[3.5, 4, 3, 8], [9.5, 7, 3, 5]] },
23
- hdistribute: { label: "Distribute horizontally", bar: null, marks: [[2, 4, 3, 8], [6.5, 4, 3, 8], [11, 4, 3, 8]] },
24
- vdistribute: { label: "Distribute vertically", bar: null, marks: [[4, 2, 8, 3], [4, 6.5, 8, 3], [4, 11, 8, 3]] },
25
- } as const satisfies Record<AlignMode, { label: string; bar: readonly number[] | null; marks: ReadonlyArray<readonly number[]> }>;
17
+ /** Icon path per mode, the design's own 24-grid strokes: a rule for the edge
18
+ * or axis being matched and two bars that sit against it, or three bars for
19
+ * a distribution. `satisfies` so a new ALIGN_MODES entry without a row here is
20
+ * a compile error rather than a blank button. Drawn at this chrome's 1.5
21
+ * stroke (the design shows 1.4), so the grid reads as the same family as
22
+ * every other 24-grid glyph in the shot editor.
23
+ *
24
+ * The LABEL comes from `ALIGN_LABELS` in packages/shot: the app menu names
25
+ * these modes too, and a mode with two names is two controls the author
26
+ * cannot tell apart. */
27
+ const PATHS = {
28
+ left: "M5 3V21M8 7H20V10H8M8 14H16V17H8",
29
+ hcenter: "M12 3V21M5 7H19V10H5M8 14H16V17H8",
30
+ right: "M19 3V21M4 7H16V10H4M8 14H16V17H8",
31
+ top: "M3 5H21M7 8V20H10V8M14 8V16H17V8",
32
+ vcenter: "M3 12H21M7 5V19H10V5M14 8V16H17V8",
33
+ bottom: "M3 19H21M7 4V16H10V4M14 8V16H17V8",
34
+ hdistribute: "M3 4V20M21 4V20M7 8V16M12 5V19M17 8V16",
35
+ vdistribute: "M4 3H20M4 21H20M8 7H16M5 12H19M8 17H16",
36
+ } as const satisfies Record<AlignMode, string>;
37
+
38
+ /** The flip glyphs: a dashed mirror line between two facing triangles. */
39
+ const FLIP_PATHS = {
40
+ x: "M12 3V5M12 9V11M12 15V17M12 21V21M9 6L3 18H9ZM15 6L21 18H15Z",
41
+ y: "M3 12H5M9 12H11M15 12H17M21 12H21M6 9L18 3V9ZM6 15L18 21V15Z",
42
+ } as const satisfies Record<FlipAxis, string>;
43
+
44
+ const FLIP_LABELS = { x: "Flip horizontal", y: "Flip vertical" } as const satisfies Record<FlipAxis, string>;
45
+
46
+ type Cell = { kind: "align"; mode: AlignMode } | { kind: "flip"; axis: FlipAxis };
47
+
48
+ /** One row per axis. A new align mode has to be placed here by hand; the
49
+ * grid test counts the buttons. */
50
+ const ROWS: readonly (readonly Cell[])[] = (
51
+ [
52
+ ["left", "hcenter", "right", "hdistribute", "x"],
53
+ ["top", "vcenter", "bottom", "vdistribute", "y"],
54
+ ] as const
55
+ ).map((row) =>
56
+ row.map((id): Cell => (id === "x" || id === "y" ? { kind: "flip", axis: id } : { kind: "align", mode: id })),
57
+ );
58
+
59
+ function Glyph({ d }: { d: string }) {
60
+ return (
61
+ <svg
62
+ viewBox="0 0 24 24"
63
+ fill="none"
64
+ stroke="currentColor"
65
+ strokeWidth={1.5}
66
+ strokeLinecap="round"
67
+ strokeLinejoin="round"
68
+ aria-hidden="true"
69
+ >
70
+ <path d={d} />
71
+ </svg>
72
+ );
73
+ }
26
74
 
27
75
  export function AlignRow() {
28
76
  const store = useStore();
29
77
  const layers = useSelectedLayers();
30
78
  const doc = useShotEditor((s) => s.doc);
79
+ // Every cell moves layers, so a viewer's panel disables the whole grid.
80
+ const locked = useLocked();
31
81
  if (doc === null || layers.length === 0) return null;
32
82
 
33
83
  return (
34
- <div className="align-grid" role="group" aria-label="Align and distribute" data-testid="align-row">
35
- {ALIGN_MODES.map((mode) => {
36
- const spec = SPEC[mode];
84
+ <div className="align-grid" role="group" aria-label="Align, distribute and flip" data-testid="align-row">
85
+ {ROWS.flat().map((cell) => {
86
+ if (cell.kind === "flip") {
87
+ const label = FLIP_LABELS[cell.axis];
88
+ return (
89
+ <button
90
+ key={`flip-${cell.axis}`}
91
+ type="button"
92
+ className="align-button"
93
+ aria-label={label}
94
+ title={`${label}${shortcutHint(`layer.flip.${cell.axis}`)}`}
95
+ disabled={locked}
96
+ onClick={() => store.flipSelection(cell.axis)}
97
+ >
98
+ <Glyph d={FLIP_PATHS[cell.axis]} />
99
+ </button>
100
+ );
101
+ }
102
+ const { mode } = cell;
37
103
  // Distribute needs three. Disabled rather than hidden: a control that
38
104
  // vanishes teaches nothing, and the tooltip says what is missing.
39
- const needsThree = spec.bar === null && layers.length < 3;
105
+ const needsThree = DISTRIBUTE_MODES.has(mode) && layers.length < MIN_DISTRIBUTE;
106
+ const label = ALIGN_LABELS[mode];
40
107
  return (
41
108
  <button
42
109
  key={mode}
43
110
  type="button"
44
111
  className="align-button"
45
- aria-label={spec.label}
46
- title={needsThree ? `${spec.label} — needs 3 or more layers` : spec.label}
47
- disabled={needsThree}
112
+ aria-label={label}
113
+ title={
114
+ needsThree
115
+ ? `${label}: needs ${MIN_DISTRIBUTE} or more layers`
116
+ : `${label}${shortcutHint(`layout.align.${mode}`)}`
117
+ }
118
+ disabled={locked || needsThree}
48
119
  onClick={() => store.alignSelection(mode)}
49
120
  >
50
- <svg width="16" height="16" viewBox="0 0 16 16" aria-hidden="true">
51
- {spec.bar !== null && (
52
- <rect x={spec.bar[0]} y={spec.bar[1]} width={spec.bar[2]} height={spec.bar[3]} className="align-icon-rule" />
53
- )}
54
- {spec.marks.map((m, i) => (
55
- <rect key={i} x={m[0]} y={m[1]} width={m[2]} height={m[3]} rx="1" className="align-icon-box" />
56
- ))}
57
- </svg>
121
+ <Glyph d={PATHS[mode]} />
58
122
  </button>
59
123
  );
60
124
  })}
@@ -1,20 +1,105 @@
1
- // Opacity, visibility and lock.
1
+ // Opacity, blur, visibility and lock.
2
2
  //
3
- // Opacity is a MULTIPLICATIVE channel, so typing into it divides the block's
4
- // delta out — and at a delta of zero there is no base that renders at the value
5
- // asked for, which `setEffectiveField` refuses by name rather than guessing.
3
+ // Visible and Locked read the whole selection. One that disagrees reads Mixed
4
+ // (a third state, not the first layer's), and a press turns the switch ON for
5
+ // every layer: the one policy every inspector switch keeps, so a Mixed row
6
+ // lands somewhere in one press.
7
+ import { useRef } from "react";
8
+ import { BLUR_PX_MAX, containerFrame } from "@dailies-studio/shot/doc";
9
+ import type { Doc3D, Layer3D } from "@dailies-studio/shot/doc";
6
10
  import { InspectorRow, InspectorSection, NumberField, Toggle } from "@dailies-studio/ui";
7
- import { useSelectionValue, useSelectionWrite, useTransformWrite } from "../useDocWrite.js";
11
+ import type { ScrubHandlers } from "@dailies-studio/ui";
12
+ import { useStore } from "../../../state/context.js";
13
+ import { writeSelection } from "../../../state/fieldWrite.js";
14
+ import { authoringFrame } from "../../../state/viewMode.js";
15
+ import { KeyframeDot } from "../KeyframeDot.js";
16
+ import { useScrub, useSelectionValue, useSelectionWrite, useTransformWrite } from "../useDocWrite.js";
17
+ import { useTransformScrub } from "./TransformSection.js";
18
+
19
+ /** A typed or dragged radius held to the field's range, 0 for garbage. */
20
+ const clampBlur = (px: number): number => (Number.isFinite(px) ? Math.min(BLUR_PX_MAX, Math.max(0, px)) : 0);
21
+
22
+ /**
23
+ * `layer` blurred by `px` (schema v47), clamped to the field's range. 0
24
+ * removes the field, so an unblurred layer keeps no step in the render plan,
25
+ * unless the layer keys `blurPx`: there 0 is a value to key, and a removed
26
+ * field would read to the router as the property gone, taking the animation
27
+ * with it. The same layer for a no-op, so a typed no-op costs no undo entry.
28
+ */
29
+ export function withBlur(layer: Layer3D, px: number): Layer3D {
30
+ const next = clampBlur(px);
31
+ if (next === 0 && layer.tracks?.["blurPx"] === undefined) {
32
+ if (layer.blurPx === undefined) return layer;
33
+ const { blurPx: _sharp, ...rest } = layer;
34
+ return rest as Layer3D;
35
+ }
36
+ return layer.blurPx === next ? layer : { ...layer, blurPx: next };
37
+ }
38
+
39
+ /**
40
+ * The Blur field's write over `ids`, as ONE document change: `withBlur`
41
+ * through `writeSelection`, which keys a layer that animates `blurPx` at
42
+ * `frame` (Animate mode's keys included).
43
+ */
44
+ export function writeBlur(
45
+ doc: Doc3D,
46
+ containerId: string,
47
+ ids: readonly string[],
48
+ px: number,
49
+ frame: number,
50
+ ): { doc: Doc3D; refusal: string | null } {
51
+ const value = clampBlur(px);
52
+ return writeSelection(doc, containerId, ids, (layer) => withBlur(layer, value), frame);
53
+ }
54
+
55
+ /** `writeBlur` over the LIVE selection at the frame the inspector writes at:
56
+ * `useSelectionWrite`'s and `useSelectionScrub`'s reads, with the blur's own
57
+ * write, and a refusal named once (at the commit, or the drag's release). */
58
+ function useBlurWrite(): { commit: (px: number) => void; scrub: ScrubHandlers } {
59
+ const store = useStore();
60
+ const refusal = useRef<string | null>(null);
61
+ const run = (doc: Doc3D, px: number): Doc3D => {
62
+ const s = store.getState();
63
+ const container = s.editingDef ?? s.sceneId;
64
+ if (container === null) return doc;
65
+ const out = writeBlur(doc, container, s.selection, px, containerFrame(doc, container, authoringFrame(s)));
66
+ refusal.current = out.refusal;
67
+ return out.doc;
68
+ };
69
+ const say = (ran: boolean): void => {
70
+ if (ran && refusal.current !== null) store.reportError(refusal.current);
71
+ refusal.current = null;
72
+ };
73
+ const scrub = useScrub((doc, raw) => run(doc, Number(raw)));
74
+ return {
75
+ commit: (px) => say(store.edit((doc) => run(doc, px))),
76
+ scrub: {
77
+ ...scrub,
78
+ end: (commit) => {
79
+ scrub.end(commit);
80
+ say(commit);
81
+ },
82
+ },
83
+ };
84
+ }
8
85
 
9
86
  export function AppearanceSection() {
10
87
  const write = useSelectionWrite();
11
88
  const writeTransform = useTransformWrite();
89
+ // Opacity is a TransformField, so its drag is the transform grid's drag — it
90
+ // just arrives as a PERCENT, which is why both halves divide by 100 rather
91
+ // than only the commit one.
92
+ const scrub = useTransformScrub("opacity");
12
93
  const opacity = useSelectionValue((_l, effective) => Math.round(effective.opacity * 100));
94
+ // The resolved radius, so a keyed blur reads the value at the playhead.
95
+ const blur = useSelectionValue((layer) => layer.blurPx ?? 0);
96
+ const blurWrite = useBlurWrite();
97
+ const blurScrub = blurWrite.scrub;
13
98
  const hidden = useSelectionValue((layer) => layer.hidden === true);
14
99
  const locked = useSelectionValue((layer) => layer.locked === true);
15
100
 
16
101
  return (
17
- <InspectorSection title="Appearance" persistKey="shot:appearance">
102
+ <InspectorSection className="insp-object" title="Appearance" persistKey="shot:appearance">
18
103
  <InspectorRow>
19
104
  <NumberField
20
105
  value={opacity.value ?? 100}
@@ -25,23 +110,47 @@ export function AppearanceSection() {
25
110
  min={0}
26
111
  max={100}
27
112
  step={1}
113
+ trailing={<KeyframeDot path="transform.opacity" />}
28
114
  onCommit={(next) => writeTransform("opacity", next / 100)}
115
+ onScrubStart={scrub.start}
116
+ onScrub={(next) => scrub.move(next / 100)}
117
+ onScrubEnd={scrub.end}
118
+ />
119
+ </InspectorRow>
120
+ <InspectorRow>
121
+ <NumberField
122
+ value={blur.value ?? 0}
123
+ mixed={blur.mixed}
124
+ label="Blur"
125
+ ariaLabel="Blur"
126
+ unit="px"
127
+ title="A gaussian blur of the whole layer, children included: the radius in design px"
128
+ min={0}
129
+ max={BLUR_PX_MAX}
130
+ step={1}
131
+ trailing={<KeyframeDot path="blurPx" />}
132
+ onCommit={blurWrite.commit}
133
+ onScrubStart={blurScrub.start}
134
+ onScrub={blurScrub.move}
135
+ onScrubEnd={blurScrub.end}
29
136
  />
30
137
  </InspectorRow>
31
138
  <InspectorRow label="Visible">
32
139
  <Toggle
33
140
  checked={hidden.value !== true}
141
+ mixed={hidden.mixed}
34
142
  ariaLabel="Visible"
35
143
  onChange={(next) => write((layer) => ({ ...layer, hidden: !next }))}
36
144
  />
37
145
  </InspectorRow>
38
146
  <InspectorRow label="Locked">
39
- {/* Written through `useSelectionWrite`, which SKIPS locked layers — so
40
- unlocking has to bypass it or a lock would be one-way. */}
147
+ {/* Visible and Locked are the two fields `lockRefuses` lets through,
148
+ so both work on a locked layer. */}
41
149
  <Toggle
42
150
  checked={locked.value === true}
151
+ mixed={locked.mixed}
43
152
  ariaLabel="Locked"
44
- onChange={(next) => write((layer) => ({ ...layer, locked: next }), { includeLocked: true })}
153
+ onChange={(next) => write((layer) => ({ ...layer, locked: next }))}
45
154
  />
46
155
  </InspectorRow>
47
156
  </InspectorSection>