@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,202 @@
1
+ // "THE STORYBOARD IS READY. MAKE THE VIDEO?": the question an MCP agent asks between planning a
2
+ // video and making it (state/agentQuestion.ts, store agentQuestions.ts),
3
+ // answered here instead of in the agent's chat. An on-demand chunk
4
+ // (app/lazySurfaces.tsx): the shell's gate mounts it only while a question is
5
+ // open on screen.
6
+ //
7
+ // One primary, "Make the video". "Ask for changes" opens a required note.
8
+ // "Open storyboard" closes the dialog onto the board, unanswered; the agent's
9
+ // status chip opens it again. Escape closes it unanswered too. A Viewer sees
10
+ // the actions locked, with VIEW_ONLY in the error line. An answer refused
11
+ // because the question closed meanwhile stays on screen with why.
12
+ //
13
+ // An export question's primary is "Export the video": its yes opens the
14
+ // Export dialog with the agent's choices (ExportDialog reads `exportAsk`),
15
+ // which reports the saved video. A studio server render reports here, when
16
+ // its job ends: the Export dialog may be closed by then, and this chunk,
17
+ // latched once that render starts (app/lazySurfaces.tsx), is still mounted.
18
+ import { useEffect, useState, useSyncExternalStore } from "react";
19
+ import { Dialog } from "@dailies-studio/ui";
20
+ import type { AgentQuestion } from "../../api.js";
21
+ import type { AgentExportAsk, AgentQuestionState } from "../../state/agentQuestion.js";
22
+ import { useShotEditor, useStore } from "../../state/context.js";
23
+ import type { ShotEditorState } from "../../state/types.js";
24
+ import { VIEW_ONLY } from "../../state/workspace.js";
25
+
26
+ /** The server's role says view only. Not `readOnly` alone: a version preview
27
+ * or a live-sync hold makes an editor read only too, and an answer writes no
28
+ * document. Under a hold the role is unknown here, so the server judges, and
29
+ * its refusal shows in the error line. */
30
+ export const viewerOf = (s: Pick<ShotEditorState, "versionPreview" | "readOnly" | "syncStatus" | "syncDeleted">): boolean =>
31
+ s.versionPreview !== null ? s.versionPreview.roleReadOnly : s.readOnly && (s.syncStatus?.hold ?? null) === null && s.syncDeleted === null;
32
+
33
+ /** Report an export ask's studio server render once its job ends: the file
34
+ * it wrote, or nothing (a failure or a cancel), and the next export reports
35
+ * instead. Once: a refused report keeps the ask without that render. */
36
+ function useServerExportReport(ask: AgentExportAsk | null): void {
37
+ const store = useStore();
38
+ const job = useShotEditor((s) => s.renderJob);
39
+ const name = useShotEditor((s) => s.name);
40
+ useEffect(() => {
41
+ if (ask?.serverJob === undefined || job === null || job.id !== ask.serverJob || job.phase === "running") return;
42
+ if (job.phase !== "done" || job.out === undefined || name === null) {
43
+ store.agentQuestion.exportOnServer(null);
44
+ return;
45
+ }
46
+ const out = job.out;
47
+ store.agentQuestion.reportVideo(ask, name, { where: "project", path: out }).catch((e: unknown) => {
48
+ store.reportError(`${out} was rendered, but telling the agent failed: ${e instanceof Error ? e.message : String(e)}`);
49
+ });
50
+ }, [ask, job, name, store]);
51
+ }
52
+
53
+ export function AgentQuestionDialog() {
54
+ const store = useStore();
55
+ const q = useSyncExternalStore(store.agentQuestion.subscribe, store.agentQuestion.getState);
56
+ const docId = useShotEditor((s) => s.doc?.id ?? null);
57
+ useServerExportReport(q.exportAsk);
58
+ const question = q.question;
59
+ // The chunk stays mounted once loaded (the shell's latch): the store's
60
+ // `open` is what shows it, over the question's own Project only. A closed
61
+ // question shows only with the refusal of this tab's answer.
62
+ if (!q.open || question === null || question.projectId !== docId || (question.status !== "open" && q.error === null)) return null;
63
+ // Keyed by the question, so a new ask never inherits a note or the
64
+ // changes view written for the one before.
65
+ return <QuestionBody key={question.id} q={q} question={question} />;
66
+ }
67
+
68
+ function QuestionBody({ q, question }: { q: AgentQuestionState; question: AgentQuestion }) {
69
+ const store = useStore();
70
+ const viewer = useShotEditor(viewerOf);
71
+ const rev = useShotEditor((s) => s.rev);
72
+ // The Project's name now: a rename since the question was read still posts
73
+ // to the right Project.
74
+ const name = useShotEditor((s) => s.name);
75
+ const [asking, setAsking] = useState(false);
76
+ const [note, setNote] = useState("");
77
+ const close = (): void => store.agentQuestion.hide();
78
+ const closed = question.status !== "open";
79
+ const locked = viewer || closed || q.sending;
80
+ const stale = !closed && rev !== null && rev !== question.boardRev;
81
+ const asked = new Date(question.askedAt).toLocaleTimeString(undefined, { hour: "numeric", minute: "2-digit" });
82
+ const who = question.askedBy.member === null ? question.askedBy.client : `${question.askedBy.client} for ${question.askedBy.member}`;
83
+
84
+ return (
85
+ <Dialog
86
+ open
87
+ size="wide"
88
+ className="agent-question"
89
+ // The question is the title ("The storyboard is ready. Make the
90
+ // video?"), so it is said once.
91
+ title={<span data-testid="agent-question-text">{question.question}</span>}
92
+ onClose={close}
93
+ actions={
94
+ closed ? (
95
+ <button type="button" className="btn is-primary" data-testid="agent-question-close" onClick={close}>
96
+ Close
97
+ </button>
98
+ ) : asking ? (
99
+ <>
100
+ <button type="button" className="btn" data-testid="agent-question-back" onClick={() => setAsking(false)}>
101
+ Back
102
+ </button>
103
+ <button
104
+ type="button"
105
+ className="btn is-primary"
106
+ data-testid="agent-question-send"
107
+ disabled={locked || name === null || note.trim() === ""}
108
+ onClick={() => {
109
+ if (name !== null) void store.agentQuestion.answer(name, "changes", note.trim());
110
+ }}
111
+ >
112
+ Send changes
113
+ </button>
114
+ </>
115
+ ) : (
116
+ <>
117
+ <button
118
+ type="button"
119
+ className="btn"
120
+ data-testid="agent-question-board"
121
+ onClick={() => {
122
+ close();
123
+ store.setStoryboardOpen(true);
124
+ }}
125
+ >
126
+ Open storyboard
127
+ </button>
128
+ <button
129
+ type="button"
130
+ className="btn"
131
+ data-testid="agent-question-changes"
132
+ disabled={locked}
133
+ onClick={() => setAsking(true)}
134
+ >
135
+ Ask for changes
136
+ </button>
137
+ <button
138
+ type="button"
139
+ className="btn is-primary"
140
+ data-testid="agent-question-yes"
141
+ disabled={locked || name === null}
142
+ onClick={() => {
143
+ if (name === null) return;
144
+ void store.agentQuestion.answer(name, "yes").then((taken) => {
145
+ // The export the agent asked for, with its choices.
146
+ if (taken && question.export !== undefined) store.setExportOpen(true);
147
+ });
148
+ }}
149
+ >
150
+ {question.export === undefined ? "Make the video" : "Export the video"}
151
+ </button>
152
+ </>
153
+ )
154
+ }
155
+ >
156
+ {/* The agent's lines, as text: never markup. */}
157
+ <pre className="agent-question-summary" data-testid="agent-question-summary">
158
+ {question.summary}
159
+ </pre>
160
+ <p className="agent-question-who">
161
+ Asked by {who} at {asked}
162
+ </p>
163
+ {stale ? (
164
+ <p className="agent-question-stale" data-testid="agent-question-stale">
165
+ The storyboard changed after this was asked. Your answer tells the agent to read it again.
166
+ </p>
167
+ ) : null}
168
+ {asking && !closed ? (
169
+ <label className="dialog-field">
170
+ <span className="dialog-label">What should change?</span>
171
+ <textarea
172
+ className="agent-question-note"
173
+ data-testid="agent-question-note"
174
+ rows={4}
175
+ maxLength={2048}
176
+ value={note}
177
+ disabled={viewer}
178
+ onChange={(e) => setNote(e.target.value)}
179
+ />
180
+ </label>
181
+ ) : null}
182
+ {viewer ? (
183
+ <p className="dialog-error" role="alert">
184
+ {VIEW_ONLY}
185
+ </p>
186
+ ) : q.error !== null ? (
187
+ <p className="dialog-error" role="alert" data-testid="agent-question-error">
188
+ {closed ? `${closedLine(question)} Your answer was not sent.` : q.error}
189
+ </p>
190
+ ) : null}
191
+ </Dialog>
192
+ );
193
+ }
194
+
195
+ /** What closed the question, said plainly. */
196
+ function closedLine(question: AgentQuestion): string {
197
+ if (question.status === "answered" && question.answer !== undefined) {
198
+ const yes = question.export === undefined ? "make the video" : "export the video";
199
+ return `${question.answer.by.name} answered first: ${question.answer.choice === "yes" ? yes : "asked for changes"}.`;
200
+ }
201
+ return "The agent closed this question.";
202
+ }
@@ -1,3 +1,8 @@
1
+ /* Wrapped in the `component-sheets` cascade layer: this sheet is imported by
2
+ the component that uses it, and under the /scene index's layer order it
3
+ ranks below the house widgets and the chrome, which is where its source
4
+ position always put it. Outside /scene the layer is simply its own. */
5
+ @layer component-sheets {
1
6
  /* Agent drawer: transcript, layer-tree + diff cards, BYOK setup, composer.
2
7
  Shares the motion editor's class vocabulary on purpose — the two panels
3
8
  render the same transcript model, and one visual language across chromes is
@@ -16,52 +21,53 @@
16
21
  .agent-title {
17
22
  display: flex;
18
23
  align-items: center;
19
- gap: 6px;
24
+ gap: var(--space-3);
20
25
  }
21
26
 
22
- .agent-title-label {
27
+ /* The panel's error strip: a well tinted toward --danger, not an alert
28
+ block. It wraps, because the message is the only way out of the state. */
29
+ .agent-panel .error-strip {
23
30
  flex: none;
24
- }
25
-
26
- .agent-models {
27
- display: flex;
28
- gap: 2px;
29
- flex: 1;
30
- min-width: 0;
31
+ padding: var(--space-2) var(--space-4);
32
+ background: var(--danger-bg);
33
+ color: var(--danger-ink);
34
+ font-size: var(--type-sm);
35
+ line-height: var(--leading-body);
36
+ overflow-wrap: anywhere;
31
37
  }
32
38
 
33
39
  /* ---------- BYOK setup ---------------------------------------------------- */
34
40
 
35
41
  .agent-setup {
36
- padding: 8px;
37
- border-bottom: 1px solid var(--border);
42
+ padding: var(--space-4);
43
+ border-bottom: 1px solid var(--line);
38
44
  flex: none;
39
45
  display: flex;
40
46
  flex-direction: column;
41
- gap: 6px;
47
+ gap: var(--space-3);
42
48
  }
43
49
 
44
50
  .agent-setup-blurb {
45
51
  margin: 0;
46
- color: var(--text-2);
47
- font-size: 12px;
48
- line-height: 1.5;
52
+ color: var(--ink-2);
53
+ font-size: var(--type-md);
54
+ line-height: var(--leading-body);
49
55
  }
50
56
 
51
57
  .agent-setup-row {
52
58
  display: flex;
53
- gap: 4px;
59
+ gap: var(--space-2);
54
60
  }
55
61
 
56
62
  .agent-key-input {
57
63
  flex: 1;
58
64
  min-width: 0;
59
- background: var(--bg-2);
60
- border: 1px solid var(--border);
61
- border-radius: var(--radius);
62
- color: var(--text-1);
63
- padding: 4px 6px;
64
- font: var(--mono);
65
+ background: var(--fill-rest);
66
+ border: 1px solid var(--line);
67
+ border-radius: var(--radius-md);
68
+ color: var(--ink-1);
69
+ padding: var(--space-2) var(--space-3);
70
+ font: var(--type-micro)/var(--leading-none) var(--font-mono);
65
71
  }
66
72
 
67
73
  /* ---------- transcript ----------------------------------------------------- */
@@ -70,48 +76,48 @@
70
76
  flex: 1;
71
77
  min-height: 0;
72
78
  overflow-y: auto;
73
- padding: 8px;
79
+ padding: var(--space-4);
74
80
  display: flex;
75
81
  flex-direction: column;
76
- gap: 6px;
82
+ gap: var(--space-3);
77
83
  }
78
84
 
79
85
  .agent-msg {
80
- border-radius: var(--radius);
81
- padding: 5px 8px;
82
- font-size: 12px;
83
- line-height: 1.5;
86
+ border-radius: var(--radius-md);
87
+ padding: var(--space-3) var(--space-4);
88
+ font-size: var(--type-md);
89
+ line-height: var(--leading-body);
84
90
  white-space: pre-wrap;
85
91
  overflow-wrap: anywhere;
86
92
  }
87
93
 
88
94
  .agent-msg-user {
89
95
  background: var(--accent-soft);
90
- color: var(--text-1);
96
+ color: var(--ink-1);
91
97
  align-self: flex-end;
92
98
  max-width: 90%;
93
99
  }
94
100
 
95
101
  .agent-msg-assistant {
96
- background: var(--bg-2);
97
- color: var(--text-1);
102
+ background: var(--fill-rest);
103
+ color: var(--ink-1);
98
104
  }
99
105
 
100
106
  .agent-msg-error {
101
- background: var(--bg-2);
107
+ background: var(--fill-rest);
102
108
  color: var(--danger);
103
109
  }
104
110
 
105
111
  .agent-msg-info {
106
- color: var(--text-3);
112
+ color: var(--ink-3);
107
113
  font-style: italic;
108
114
  }
109
115
 
110
116
  .agent-tool {
111
- color: var(--text-3);
112
- font: var(--mono);
113
- font-size: 11px;
114
- padding-left: 8px;
117
+ color: var(--ink-3);
118
+ font: var(--type-micro)/var(--leading-none) var(--font-mono);
119
+ font-size: var(--type-sm);
120
+ padding-left: var(--space-4);
115
121
  }
116
122
  .agent-tool::before {
117
123
  content: "⚙ ";
@@ -129,9 +135,9 @@
129
135
  /* ---------- proposal cards ------------------------------------------------- */
130
136
 
131
137
  .agent-card {
132
- border: 1px solid var(--border);
133
- border-radius: var(--radius);
134
- background: var(--bg-1);
138
+ border: 1px solid var(--line);
139
+ border-radius: var(--radius-md);
140
+ background: var(--surface-panel);
135
141
  overflow: hidden;
136
142
  flex: none;
137
143
  }
@@ -142,10 +148,10 @@
142
148
  .agent-card-head {
143
149
  display: flex;
144
150
  align-items: center;
145
- gap: 6px;
146
- padding: 4px 6px;
147
- border-bottom: 1px solid var(--border);
148
- background: var(--bg-2);
151
+ gap: var(--space-3);
152
+ padding: var(--space-2) var(--space-3);
153
+ border-bottom: 1px solid var(--line);
154
+ background: var(--fill-rest);
149
155
  }
150
156
 
151
157
  .agent-card-path {
@@ -154,28 +160,28 @@
154
160
  overflow: hidden;
155
161
  text-overflow: ellipsis;
156
162
  white-space: nowrap;
157
- color: var(--text-1);
163
+ color: var(--ink-1);
158
164
  }
159
165
  /* File cards address a path; canvas cards address an intent sentence. */
160
166
  .agent-card:not(.agent-card-canvas) .agent-card-path {
161
- font: var(--mono);
167
+ font: var(--type-micro)/var(--leading-none) var(--font-mono);
162
168
  }
163
169
 
164
170
  .agent-card-status {
165
171
  flex: none;
166
- font-size: 11px;
172
+ font-size: var(--type-sm);
167
173
  text-transform: uppercase;
168
- letter-spacing: 0.04em;
174
+ letter-spacing: var(--tracking-caps);
169
175
  }
170
176
  .agent-card-status.is-applied {
171
- color: var(--accent);
177
+ color: var(--accent-ink);
172
178
  }
173
179
  .agent-card-status.is-stale,
174
180
  .agent-card-status.is-failed {
175
181
  color: var(--danger);
176
182
  }
177
183
  .agent-card-status.is-applying {
178
- color: var(--text-2);
184
+ color: var(--ink-2);
179
185
  }
180
186
 
181
187
  /* ---------- canvas card: doc + layer/track counts + the layer tree -------- */
@@ -184,16 +190,16 @@
184
190
  display: flex;
185
191
  align-items: center;
186
192
  flex-wrap: wrap;
187
- gap: 4px;
188
- padding: 4px 8px;
189
- font-size: 11px;
190
- color: var(--text-3);
193
+ gap: var(--space-2);
194
+ padding: var(--space-2) var(--space-4);
195
+ font-size: var(--type-sm);
196
+ color: var(--ink-3);
191
197
  }
192
198
 
193
199
  .agent-card-doc {
194
- color: var(--text-2);
195
- font: var(--mono);
196
- font-size: 11px;
200
+ color: var(--ink-2);
201
+ font: var(--type-micro)/var(--leading-none) var(--font-mono);
202
+ font-size: var(--type-sm);
197
203
  }
198
204
 
199
205
  .agent-card-count::before {
@@ -202,16 +208,16 @@
202
208
 
203
209
  .agent-tree {
204
210
  margin: 0;
205
- padding: 4px 0;
211
+ padding: var(--space-2) 0;
206
212
  max-height: 260px;
207
213
  overflow: auto;
208
- font: var(--mono);
209
- font-size: 11px;
210
- line-height: 1.45;
211
- color: var(--text-2);
214
+ font: var(--type-micro)/var(--leading-none) var(--font-mono);
215
+ font-size: var(--type-sm);
216
+ line-height: var(--leading-body);
217
+ color: var(--ink-2);
212
218
  }
213
219
  .agent-tree-line {
214
- padding: 0 8px;
220
+ padding: 0 var(--space-4);
215
221
  white-space: pre;
216
222
  }
217
223
 
@@ -219,36 +225,42 @@
219
225
 
220
226
  .agent-diff {
221
227
  margin: 0;
222
- padding: 4px 0;
228
+ padding: var(--space-2) 0;
223
229
  max-height: 260px;
224
230
  overflow: auto;
225
- font: var(--mono);
226
- font-size: 11px;
227
- line-height: 1.45;
231
+ font: var(--type-micro)/var(--leading-none) var(--font-mono);
232
+ font-size: var(--type-sm);
233
+ line-height: var(--leading-body);
228
234
  }
229
235
  .agent-diff > div {
230
- padding: 0 8px;
236
+ padding: 0 var(--space-4);
231
237
  white-space: pre;
232
238
  }
239
+ /* The diff hues are the palette's own --success / --danger, mixed rather than
240
+ restated: the tint is the colour at low alpha, and the ink is the same colour
241
+ lifted toward the page's white so it stays readable at 11px on a dark row.
242
+ The two literal greens and reds that used to sit here were neither token, so
243
+ the one place in this chrome that shows an ADD and a REMOVE spoke a palette
244
+ nothing else in the product used. */
233
245
  .agent-diff-add {
234
- background: rgba(64, 160, 96, 0.16);
235
- color: #7fd79f;
246
+ background: color-mix(in srgb, var(--success) 16%, transparent);
247
+ color: color-mix(in srgb, var(--success) 60%, var(--ink-1));
236
248
  }
237
249
  .agent-diff-del {
238
- background: rgba(200, 72, 72, 0.14);
239
- color: #e79a9a;
250
+ background: color-mix(in srgb, var(--danger) 14%, transparent);
251
+ color: color-mix(in srgb, var(--danger) 60%, var(--ink-1));
240
252
  }
241
253
  .agent-diff-hunk {
242
- color: var(--text-3);
254
+ color: var(--ink-3);
243
255
  }
244
256
  .agent-diff-ctx {
245
- color: var(--text-2);
257
+ color: var(--ink-2);
246
258
  }
247
259
 
248
260
  .agent-card-note {
249
- padding: 4px 8px;
250
- color: var(--text-3);
251
- font-size: 11px;
261
+ padding: var(--space-2) var(--space-4);
262
+ color: var(--ink-3);
263
+ font-size: var(--type-sm);
252
264
  }
253
265
 
254
266
  .agent-card-error {
@@ -259,64 +271,68 @@
259
271
  /* "Applied, but the generated component was not updated" — not a failure (the
260
272
  document is saved), so not the error red; loud enough to be read. */
261
273
  .agent-card-warning {
262
- color: var(--warn, #e0a33e);
274
+ color: var(--warn);
263
275
  white-space: normal;
264
276
  }
265
277
 
278
+ /* "Copy prompt": the Add motion prompt, for pasting into another agent. */
279
+ .agent-copy-prompt {
280
+ margin: 0 var(--space-4) var(--space-2);
281
+ }
282
+
266
283
  /* ---------- footer --------------------------------------------------------- */
267
284
 
268
285
  .agent-strip {
269
286
  flex: none;
270
287
  display: flex;
271
288
  align-items: center;
272
- gap: 8px;
289
+ gap: var(--space-4);
273
290
  }
274
291
 
292
+ /* Wraps beside Retry: a probe error cut to one line could not be read. */
275
293
  .agent-strip-msg {
276
294
  flex: 1;
277
295
  min-width: 0;
278
- overflow: hidden;
279
- text-overflow: ellipsis;
280
- white-space: nowrap;
281
296
  }
282
297
 
283
298
  .agent-cost {
284
299
  flex: none;
285
- padding: 2px 8px;
286
- color: var(--text-3);
287
- font-size: 11px;
300
+ padding: var(--space-1) var(--space-4);
301
+ color: var(--ink-3);
302
+ font-size: var(--type-sm);
288
303
  text-align: right;
289
304
  }
290
305
 
291
306
  .agent-composer {
292
307
  display: flex;
293
308
  align-items: flex-end;
294
- gap: 4px;
295
- padding: 8px;
296
- border-top: 1px solid var(--border);
309
+ gap: var(--space-2);
310
+ padding: var(--space-4);
311
+ border-top: 1px solid var(--line);
297
312
  flex: none;
298
313
  flex-wrap: wrap;
299
314
  }
300
315
 
301
316
  .agent-pin {
302
317
  flex: 0 0 100%;
303
- color: var(--text-3);
304
- font-size: 11px;
318
+ color: var(--ink-3);
319
+ font-size: var(--type-sm);
305
320
  }
306
321
 
307
322
  .agent-input {
308
323
  flex: 1;
309
324
  min-width: 0;
310
325
  resize: none;
311
- background: var(--bg-2);
312
- border: 1px solid var(--border);
313
- border-radius: var(--radius);
314
- color: var(--text-1);
315
- padding: 5px 7px;
326
+ background: var(--fill-rest);
327
+ border: 1px solid var(--line);
328
+ border-radius: var(--radius-md);
329
+ color: var(--ink-1);
330
+ padding: var(--space-3) var(--space-4);
316
331
  font: inherit;
317
- font-size: 12px;
318
- line-height: 1.4;
332
+ font-size: var(--type-md);
333
+ line-height: var(--leading-body);
319
334
  }
320
335
  .agent-input:focus {
321
336
  outline: 1px solid var(--accent);
322
337
  }
338
+ }
@@ -0,0 +1,35 @@
1
+ // Whether the agent can be opened, and the words for it.
2
+ //
3
+ // The credentials probe is the only thing that says this server has an agent
4
+ // lane at all: a `null` answer means the route has not replied, and the drawer
5
+ // would open onto a composer it disables itself. A server that answers with NO
6
+ // KEY still opens, because the drawer's key form is the only place a key can
7
+ // be entered. The right column's Agent tab and the header's Agent button both
8
+ // gate on this, so the two can never disagree.
9
+ import type { AgentCredentialsInfo } from "@dailies-studio/agent-client";
10
+
11
+ export interface AgentGate {
12
+ /** False until the probe answers. */
13
+ ready: boolean;
14
+ /** The reason while not ready, otherwise what opening it offers. */
15
+ title: string;
16
+ }
17
+
18
+ /**
19
+ * THE EDITOR'S OWN AGENT IS HIDDEN (KAN-34) until it runs on Dailies credits:
20
+ * agents connect from outside, over MCP (the header's Agent chip). Every door
21
+ * to the drawer asks this first: its tab, View > Agent, Build planned shots,
22
+ * Add motion, the shot board's and the comments' Ask agent, and the probe.
23
+ * `?agent` in the page URL brings it all back, which is how its tests reach it.
24
+ */
25
+ export function agentInEditor(): boolean {
26
+ return typeof window !== "undefined" && new URLSearchParams(window.location.search).has("agent");
27
+ }
28
+
29
+ export function agentGate(credentials: AgentCredentialsInfo | null, probeError: string | null): AgentGate {
30
+ if (credentials === null) return { ready: false, title: probeError ?? "Checking for the agent backend…" };
31
+ return {
32
+ ready: true,
33
+ title: credentials.configured ? "Agent: describe the scene you want" : "Agent: add an API key to start",
34
+ };
35
+ }