@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,345 @@
1
+ // THE PROPS, FROM CODE: a code component's defaults in the Components
2
+ // workspace's right panel (InspectorPanel's code branch renders
3
+ // `CodeSubjectHead` and the component actions over this).
4
+ //
5
+ // Every row is one contract key at its DEFAULT — the value `buildProps` gives
6
+ // every instance that has no opinion of its own. Editing a row edits the
7
+ // component's SOURCE, which is what squares this panel with the old header
8
+ // rule ("the way to change a code component's props is to change the code"):
9
+ // the rail does not bypass the code, it is a hand on it. A scrub crosses the
10
+ // bridge as a live preview override and touches nothing; the release commits
11
+ // through the defaults-persist route, the server splices the one literal, and
12
+ // the watcher pipeline carries the new default to the stage, this panel, and
13
+ // every placed instance without an override.
14
+ //
15
+ // TRY FIRST, SAVE ON PURPOSE. With "Apply to all instances" off (the
16
+ // default), an edit is only TRIED: `playComponentProp` holds it for the
17
+ // preview and nothing else changes. Ticking the box saves what was tried and
18
+ // makes later edits save as they happen (the source path above).
19
+ //
20
+ // NO DOCUMENT WRITES ANYWHERE IN THIS FILE. There is no KeyframeDot (a default
21
+ // is not a track) and no useDocWrite: the store verbs it calls write preview
22
+ // state and HTTP, never a document, so nothing here can land in a shot's undo
23
+ // stack. The head's Reset puts every default the author changed back to what
24
+ // it was before the first change (the store's `codeDefaultsBaseline`), through
25
+ // the same commit as a typed value.
26
+ import { useRef } from "react";
27
+ import { InspectorSection, PropRow, useConfirm } from "@dailies-studio/ui";
28
+ import type { ScrubHandlers } from "@dailies-studio/ui";
29
+ import { orderSpecs } from "@dailies-studio/contract";
30
+ import type { ControlSpec } from "@dailies-studio/contract";
31
+ import { valueEquals, type Value } from "@dailies-studio/engine";
32
+ import { instanceExportOf } from "@dailies-studio/shot/doc";
33
+ import { COMPONENT_ICON } from "../../icons.js";
34
+ import { useShotEditor, useStore } from "../../state/context.js";
35
+ import { codeSubjectRel } from "../../state/types.js";
36
+ import { dirtyCodeFileCount, discardBuffersMessage } from "./codeBufferGuard.js";
37
+ import { ApplyAllToggle, useNewPropKeys } from "../studio/componentParts.js";
38
+ import { coercePropValue, propEditOf, shownPropValue } from "../inspector/propValue.js";
39
+
40
+ /**
41
+ * The inspector's subject line in Code Studio: the component the stage is
42
+ * drawing, on `InspectorHead`'s markup and look. Its own component because
43
+ * `InspectorHead`'s ladder is about the document (a layer, a shot, the
44
+ * Project), and none of those is on screen here. No rename: a code
45
+ * component's name is its export, which is changed in the code.
46
+ */
47
+ export function CodeSubjectHead({ componentId }: { componentId: string }) {
48
+ // The NAME, a string, so the head re-renders only when it changes.
49
+ const name = useShotEditor(
50
+ (s) => s.library.find((r) => r.id === componentId)?.name ?? instanceExportOf(componentId),
51
+ );
52
+ return (
53
+ <div className="insp-head" data-testid="insp-head">
54
+ <span className="insp-head-icon is-component">{COMPONENT_ICON}</span>
55
+ <div className="insp-head-text">
56
+ <span className="insp-head-kind">Code component</span>
57
+ <span className="insp-head-name" title={name}>
58
+ {name}
59
+ </span>
60
+ </div>
61
+ </div>
62
+ );
63
+ }
64
+
65
+ export function CodeDefaultsPanel({ componentId }: { componentId: string }) {
66
+ const contract = useShotEditor((s) => s.contracts[componentId]);
67
+ const meta = useShotEditor((s) => s.contractDefaults[componentId]);
68
+ const error = useShotEditor((s) => s.codeDefaultsError);
69
+ // The owning Project, from the subject's own buffer (the server resolved it).
70
+ const owner = useShotEditor((s) => {
71
+ const rel = codeSubjectRel(s);
72
+ return (rel === null ? null : s.codeFiles[rel]?.generated?.docName) ?? null;
73
+ });
74
+ // KEYS THE LAST VERSION DID NOT HAVE: a prop just added in code gets the
75
+ // "New" badge until the next version records it.
76
+ const fresh = useNewPropKeys(contract === undefined ? [] : Object.keys(contract.keys));
77
+ // RESET'S TARGET, from the store: each changed default before its first
78
+ // change, recorded by the commit itself. A remount keeps it, and a prop
79
+ // added in code later is covered once it is changed here.
80
+ const baseline = useShotEditor((s) => s.codeDefaultsBaseline);
81
+ const applyAll = useShotEditor((s) => s.componentApplyAll);
82
+ const tried = useShotEditor((s) => Object.keys(s.componentPlay).length);
83
+ const viewer = useShotEditor((s) => s.readOnly);
84
+ const store = useStore();
85
+
86
+ // Quiet until the contract lands: the fetch was started by
87
+ // openCodeComponent and a spinner here would flash on every entry.
88
+ if (contract === undefined) return null;
89
+
90
+ const specs = orderSpecs(contract);
91
+ // Absent meta (still in flight, or an older server) fails OPEN: the rows
92
+ // render editable and `commitCodeDefault` re-checks everything the meta
93
+ // would have said, so the only cost is a later refusal instead of an
94
+ // earlier badge.
95
+ const writable = meta === undefined || meta.writable;
96
+ // Saving is only ever on when it can work; trying always can.
97
+ const saving = applyAll && writable && !viewer;
98
+ // Keys whose default moved off the baseline and can still be written.
99
+ const moved = specs
100
+ .filter((spec) => {
101
+ const was = baseline[spec.key];
102
+ // As the engine value the baseline holds: a curve's default is its
103
+ // decoded object here and its canonical JSON there.
104
+ const now = "default" in spec ? coercePropValue(spec, spec.default) : null;
105
+ return was !== undefined && now !== null && !valueEquals(was, now);
106
+ })
107
+ .filter((spec) => meta?.keys[spec.key]?.editable !== false)
108
+ .map((spec) => spec.key);
109
+ const reset = !saving ? (
110
+ <button
111
+ type="button"
112
+ className="props-head-reset"
113
+ data-testid="code-defaults-reset"
114
+ disabled={tried === 0}
115
+ title={tried === 0 ? "Nothing tried" : "Drop every tried value"}
116
+ onClick={() => store.resetComponentPlay()}
117
+ >
118
+ Reset
119
+ </button>
120
+ ) : (
121
+ <button
122
+ type="button"
123
+ className="props-head-reset"
124
+ data-testid="code-defaults-reset"
125
+ disabled={!writable || moved.length === 0}
126
+ title={moved.length === 0 ? "No default changed here" : "Put every changed default back to how it was"}
127
+ onClick={() => {
128
+ void (async () => {
129
+ for (const key of moved) {
130
+ const was = baseline[key];
131
+ if (was !== undefined) await store.commitCodeDefault(key, was);
132
+ }
133
+ })();
134
+ }}
135
+ >
136
+ Reset
137
+ </button>
138
+ );
139
+
140
+ return (
141
+ // The rows are PropRows, drawn by the ui widgets (widgets.css) exactly as
142
+ // every ControlSpec row is, and a button that is a row's control is the
143
+ // house row button: nothing here needs a section scope.
144
+ <InspectorSection title="Props · from code" action={reset}>
145
+ <ApplyAllToggle
146
+ disabled={!writable || viewer}
147
+ disabledReason={viewer ? "View only" : "Generated component: edit the Project instead."}
148
+ />
149
+ {!writable ? (
150
+ <GeneratedStrip docName={owner} className="insp-notice" testId="code-defaults-generated" />
151
+ ) : null}
152
+ {error !== null ? (
153
+ <div className="insp-inline-error" role="alert" data-testid="code-defaults-error">
154
+ {error}
155
+ </div>
156
+ ) : null}
157
+ {specs.length === 0 ? <div className="insp-notice">This component has no props.</div> : null}
158
+ {specs.map((spec) => {
159
+ const keyMeta = meta?.keys[spec.key];
160
+ // Trying writes nothing, so only a saving edit can be refused.
161
+ const readOnlyReason = !saving
162
+ ? null
163
+ : !writable
164
+ ? "Generated component: edit the Project instead."
165
+ : keyMeta !== undefined && !keyMeta.editable
166
+ ? keyMeta.reason
167
+ : null;
168
+ return (
169
+ <DefaultRow
170
+ key={spec.key}
171
+ spec={spec}
172
+ readOnlyReason={readOnlyReason}
173
+ isNew={fresh.includes(spec.key)}
174
+ saving={saving}
175
+ />
176
+ );
177
+ })}
178
+ {/* Said once, under the rows: what a saved value here is. */}
179
+ <p className="insp-note code-defaults-note" data-testid="code-defaults-intro">
180
+ A saved value here is the default in code. In a shot or on the board, a change only touches that use.
181
+ </p>
182
+ </InspectorSection>
183
+ );
184
+ }
185
+
186
+ /**
187
+ * One key. The row is the SAME `PropRow` a placed instance's props and one
188
+ * use's props render, so a default and an override can never be two
189
+ * different editors over one spec: only the write seams differ.
190
+ *
191
+ * A key whose SOURCE cannot take the edit (a computed default, a spread, a
192
+ * generated file) is READ-ONLY with the reason as its tooltip: the value it
193
+ * holds stays on screen in its own control, and nothing is offered that would
194
+ * fail. A slot or an event says "set in code", as it does everywhere.
195
+ */
196
+ function DefaultRow({
197
+ spec,
198
+ readOnlyReason,
199
+ isNew,
200
+ saving,
201
+ }: {
202
+ spec: ControlSpec;
203
+ readOnlyReason: string | null;
204
+ isNew: boolean;
205
+ /** "Apply to all instances" is on: edits save to source. Off = tried. */
206
+ saving: boolean;
207
+ }) {
208
+ const store = useStore();
209
+ const held = useShotEditor((s) => s.codePreviewProps[spec.key]);
210
+ const tried = useShotEditor((s) => s.componentPlay[spec.key]);
211
+ const fallback = "default" in spec ? spec.default : undefined;
212
+ // A tried value first (what the preview draws), then the held override
213
+ // while a gesture or an in-flight commit owns the key, then the contract's
214
+ // own default.
215
+ const value = tried ?? held ?? fallback;
216
+
217
+ // Every value crosses the contract's own coercion (`propValue.ts`): a curve
218
+ // or a gradient editor hands back its VALUE OBJECT, encoded here to the
219
+ // canonical JSON the bridge and the source both take, and a value the
220
+ // contract refuses writes nothing. A drag refuses by writing nothing: a
221
+ // per-pointermove React state write would re-render the rail sixty times a
222
+ // second to say what the typed path says once.
223
+ //
224
+ // TRYING: every move IS the edit, so a cancelled gesture puts back the
225
+ // value it started from.
226
+ const before = useRef<Value | undefined>(undefined);
227
+ const scrub: ScrubHandlers = saving
228
+ ? {
229
+ start: () => {},
230
+ move: (raw: unknown) => {
231
+ const next = coercePropValue(spec, raw);
232
+ if (next !== null) store.scrubCodeDefault(spec.key, next);
233
+ },
234
+ end: (commit: boolean) => store.endCodeDefaultScrub(commit),
235
+ }
236
+ : {
237
+ start: () => {
238
+ before.current = tried;
239
+ },
240
+ move: (raw: unknown) => {
241
+ const next = coercePropValue(spec, raw);
242
+ if (next !== null) store.playComponentProp(spec.key, next);
243
+ },
244
+ end: (commit: boolean) => {
245
+ if (!commit) store.playComponentProp(spec.key, before.current ?? null);
246
+ },
247
+ };
248
+ const commit = (raw: unknown): void => {
249
+ const edit = propEditOf(spec, raw, fallback);
250
+ if (edit.kind === "refused") {
251
+ store.reportError(edit.reason);
252
+ return;
253
+ }
254
+ // "No asset" over a default of none: drop what is tried, and the default
255
+ // (none) shows again. Saving it would write nothing new.
256
+ if (edit.kind === "clear") {
257
+ if (!saving) store.playComponentProp(spec.key, null);
258
+ return;
259
+ }
260
+ if (saving) void store.commitCodeDefault(spec.key, edit.value);
261
+ else store.playComponentProp(spec.key, edit.value);
262
+ };
263
+ // The spec's own description, then why the row cannot be edited, in the
264
+ // label's tooltip; the reason is the row's own tooltip too.
265
+ const description = [spec.description?.trim() ?? "", readOnlyReason ?? ""].filter((line) => line !== "").join("\n");
266
+
267
+ return (
268
+ <div className={`code-default${isNew ? " is-new" : ""}`} data-testid={`code-default-${spec.key}`}>
269
+ <PropRow
270
+ spec={spec}
271
+ value={shownPropValue(spec, value)}
272
+ commit={commit}
273
+ scrub={scrub}
274
+ // THE BLUE DOT: a value tried here, not saved.
275
+ changed={tried !== undefined}
276
+ changedLabel="Tried, not saved"
277
+ dotProps={{ "data-tried": spec.key }}
278
+ {...(description !== "" ? { description } : {})}
279
+ {...(readOnlyReason !== null ? { readOnly: true, rowProps: { title: readOnlyReason } } : {})}
280
+ />
281
+ {isNew ? (
282
+ // The badge is drawn in the label column (component.css); this copy is
283
+ // what a screen reader reads, once.
284
+ <span className="component-new-badge" data-testid="component-new-badge">
285
+ New
286
+ </span>
287
+ ) : null}
288
+ </div>
289
+ );
290
+ }
291
+
292
+ /**
293
+ * A generated file or component: who owns it, and the way there. Open Project
294
+ * leaves the code (asking first when a buffer is dirty, since leaving drops
295
+ * them all) and opens the owner. Without a resolved owner the copy stands alone.
296
+ *
297
+ * Here and not beside the editor in codeParts.tsx, because this panel loads
298
+ * with the shell and the editor does not.
299
+ */
300
+ export function GeneratedStrip({
301
+ docName,
302
+ className,
303
+ testId,
304
+ }: {
305
+ docName: string | null;
306
+ className: string;
307
+ testId: string;
308
+ }) {
309
+ const store = useStore();
310
+ const { confirm, dialog } = useConfirm();
311
+ const open = (name: string): void => {
312
+ const go = (): void => {
313
+ if (store.getState().codeComponent !== null) store.closeCodeComponent();
314
+ void store.openShot(name);
315
+ };
316
+ const count = dirtyCodeFileCount(store.getState().codeFiles);
317
+ if (count === 0) {
318
+ go();
319
+ return;
320
+ }
321
+ void confirm({
322
+ title: "Unsaved changes",
323
+ message: discardBuffersMessage(count),
324
+ confirmLabel: "Discard",
325
+ danger: true,
326
+ }).then((ok) => {
327
+ if (ok) go();
328
+ });
329
+ };
330
+ return (
331
+ <div className={className} data-testid={testId}>
332
+ {dialog}
333
+ <span>
334
+ {docName === null
335
+ ? "Generated from a Project. Edit the Project to change it."
336
+ : `Generated from the Project ${docName}. Edit the Project to change it.`}
337
+ </span>
338
+ {docName !== null ? (
339
+ <button type="button" className="btn" data-testid={`${testId}-open`} onClick={() => open(docName)}>
340
+ Open Project
341
+ </button>
342
+ ) : null}
343
+ </div>
344
+ );
345
+ }