@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,330 @@
1
+ // An editor stage kept offscreen, that stills are drawn on: the hosted MCP
2
+ // surface's `screenshot_shot` (plan C4), and the board's app-drawn stills
3
+ // (stillThumbs.ts) on both lanes.
4
+ //
5
+ // A still of a saved Project is drawn the way the storyboard's "Frame from
6
+ // Shot" is: the stage's own `captureFrame` (bridge v32), which flips into
7
+ // export framing, snapshots the frame in the draw and scales it. The author's
8
+ // stage is never used for it: loading another document there would swap what
9
+ // they are looking at. This stage is its own `/shot-stage.html`, served as the
10
+ // author's is (hosted, under the Service Worker, so the Project's components
11
+ // import), and connected with handlers that ignore everything but its
12
+ // readiness.
13
+ //
14
+ // ONE PER TAB, because each stage is a WebGL context. Hosted, the code host
15
+ // owns it (browser-host boot.ts), feeds its loads the module epochs, and lends
16
+ // it to the chrome through `DailiesHost.captureStill`; it is never the stage
17
+ // `stageLoaded` tracks and reloads. Locally the chrome opens its own
18
+ // (`tabStillStage`), whose loads need nothing: Vite serves the modules.
19
+ //
20
+ // Offscreen, never hidden: a `display: none` frame does not render, and the
21
+ // capture waits on a drawn frame. It is closed after `idleMs` without a
22
+ // capture, freeing its GPU context.
23
+ //
24
+ // The stage says it is ready ONCE, when its canvas comes up with the first
25
+ // document, and never for a later `loadDoc`. So a stage is kept only for the
26
+ // Project it opened on, at that size: the next still of it loads the newer
27
+ // document and captures (the capture waits on its own drawn frame), and a
28
+ // still of another Project, or at another size, opens a fresh stage.
29
+ //
30
+ // Every await on the stage races its reload (stageWatchdog.ts): a reload kills
31
+ // the realm the bridge's promises live in, and one that never settled would
32
+ // hold the queue for good. A capture abandoned through its signal rejects and
33
+ // keeps the stage; a first document still coming up keeps coming up for the
34
+ // next capture.
35
+ //
36
+ // A BACKGROUND capture (a thumbnail) steps aside for any other: it is refused
37
+ // while another waits, and abandoned when one arrives, so a relayed agent
38
+ // still never queues behind thumbnails (store mcpRelay.ts gives it 90 s).
39
+ import type { Doc3D } from "@dailies-studio/shot/doc";
40
+ import { connectStage } from "../bridge.js";
41
+ import type { ShotBridgeHandlers, ShotStageBridge, ShotStageInfo } from "../bridgeTypes.js";
42
+ import { dailiesHost } from "../hostApi.js";
43
+ import { raceStage } from "./stageWatchdog.js";
44
+
45
+ export interface StillStageDeps {
46
+ readonly document: Document;
47
+ /** After each load of the stage document: says whether the stage may be
48
+ * connected (false: it is being reloaded, and the next load follows).
49
+ * Hosted, it posts the module epoch and checks the Service Worker controls
50
+ * the document; locally it answers true. */
51
+ loaded(stage: Window): boolean;
52
+ readonly idleMs?: number;
53
+ /** How long a loaded document may take to come up on the stage. */
54
+ readonly readyMs?: number;
55
+ }
56
+
57
+ export interface StillCaptureOptions {
58
+ /** Default png. */
59
+ readonly format?: "png" | "webp";
60
+ /** Abandons the capture: it rejects, and the stage is kept. */
61
+ readonly signal?: AbortSignal;
62
+ /** Steps aside for any other capture: refused while one waits, abandoned
63
+ * when one arrives. Either way it rejects with `stillYielded` true. */
64
+ readonly background?: boolean;
65
+ }
66
+
67
+ export interface StillStage {
68
+ /** One still of `doc` at master `frame`, `width` by `height`. One at a
69
+ * time. */
70
+ capture(doc: Doc3D, frame: number, width: number, height: number, options?: StillCaptureOptions): Promise<Blob>;
71
+ }
72
+
73
+ /** Whether a capture rejected because it stepped aside for another. A shape
74
+ * test, since the error may come from another realm. */
75
+ export function stillYielded(error: unknown): boolean {
76
+ return typeof error === "object" && error !== null && (error as { yielded?: unknown }).yielded === true;
77
+ }
78
+
79
+ const yieldedError = (): Error => Object.assign(new Error("the still stepped aside for another capture"), { yielded: true });
80
+
81
+ const CANCELLED = "the still was cancelled";
82
+
83
+ // `still=1`: the stage measures its canvas by hand while the page is hidden
84
+ // (StageApp's `measureWhenHidden`), where no ResizeObserver is delivered.
85
+ const STAGE_URL = "/shot-stage.html?theme=dark&still=1";
86
+
87
+ interface Open {
88
+ readonly iframe: HTMLIFrameElement;
89
+ readonly bridge: ShotStageBridge;
90
+ /** False once the stage document reloaded: its bridge is dead. */
91
+ live: boolean;
92
+ /** The first document's readiness, null before the first load. */
93
+ shown: Promise<void> | null;
94
+ /** Settled by the stage's next `onReady` or `onError`. */
95
+ next: { ready: (info: ShotStageInfo) => void; failed: (message: string) => void } | null;
96
+ }
97
+
98
+ /** `work`, or a rejection once `signal` aborts. */
99
+ function orCancelled<T>(work: Promise<T>, signal: AbortSignal): Promise<T> {
100
+ return new Promise<T>((resolve, reject) => {
101
+ const onAbort = (): void => reject(new Error(CANCELLED));
102
+ signal.addEventListener("abort", onAbort, { once: true });
103
+ if (signal.aborted) onAbort();
104
+ work.then(resolve, reject).finally(() => signal.removeEventListener("abort", onAbort));
105
+ });
106
+ }
107
+
108
+ /** How long a loaded document may take to come up on the still stage. Long
109
+ * enough for a glyph face the page is still baking (the stage holds its
110
+ * readiness until the face loads), and inside the object's wait for a
111
+ * capture (store mcpRelay.ts RELAY_CAPTURE_TIMEOUT_MS), so this names the
112
+ * stall rather than the object timing the call out. */
113
+ export const STILL_READY_MS = 75_000;
114
+
115
+ export function createStillStage(deps: StillStageDeps): StillStage {
116
+ const idleMs = deps.idleMs ?? 60_000;
117
+ const readyMs = deps.readyMs ?? STILL_READY_MS;
118
+ let open: Promise<Open> | null = null;
119
+ /** What the open stage was opened for (`keyOf`). */
120
+ let openKey = "";
121
+ let queue: Promise<unknown> = Promise.resolve();
122
+ let idle: ReturnType<typeof setTimeout> | undefined;
123
+ /** Captures that are not background, queued or running. */
124
+ let others = 0;
125
+ /** Background captures, queued or running, each abandoned when another
126
+ * capture arrives. */
127
+ const yielding = new Set<{ controller: AbortController; yielded: boolean }>();
128
+ const keyOf = (doc: Doc3D): string => `${doc.id}:${doc.size.width}x${doc.size.height}`;
129
+
130
+ function close(): void {
131
+ const closing = open;
132
+ open = null;
133
+ void closing?.then(
134
+ (held) => {
135
+ // A reloaded stage's bridge belongs to a dead realm.
136
+ try {
137
+ held.bridge.dispose();
138
+ } catch {}
139
+ held.iframe.remove();
140
+ },
141
+ () => {},
142
+ );
143
+ }
144
+
145
+ async function start(width: number, height: number, reloaded: (held: Open) => void): Promise<Open> {
146
+ const iframe = deps.document.createElement("iframe");
147
+ iframe.title = "Dailies still stage";
148
+ iframe.tabIndex = -1;
149
+ iframe.setAttribute("aria-hidden", "true");
150
+ Object.assign(iframe.style, {
151
+ position: "fixed",
152
+ left: "-100000px",
153
+ top: "0",
154
+ width: `${width}px`,
155
+ height: `${height}px`,
156
+ border: "0",
157
+ pointerEvents: "none",
158
+ });
159
+ const loaded = new Promise<void>((resolve) => {
160
+ const onLoad = (): void => {
161
+ const stage = iframe.contentWindow;
162
+ if (stage === null || !deps.loaded(stage)) return;
163
+ iframe.removeEventListener("load", onLoad);
164
+ resolve();
165
+ };
166
+ iframe.addEventListener("load", onLoad);
167
+ });
168
+ iframe.src = STAGE_URL;
169
+ deps.document.body.appendChild(iframe);
170
+ try {
171
+ await loaded;
172
+ const held: { next: Open["next"] } = { next: null };
173
+ // Every handler but readiness is the author's chrome's business.
174
+ const handlers = new Proxy({} as ShotBridgeHandlers, {
175
+ get: (_target, key) =>
176
+ key === "onReady"
177
+ ? (info: ShotStageInfo) => held.next?.ready(info)
178
+ : key === "onError"
179
+ ? (message: string) => held.next?.failed(message)
180
+ : () => {},
181
+ });
182
+ const bridge = await connectStage(iframe, handlers);
183
+ const out: Open = {
184
+ iframe,
185
+ bridge,
186
+ live: true,
187
+ shown: null,
188
+ get next() {
189
+ return held.next;
190
+ },
191
+ set next(value) {
192
+ held.next = value;
193
+ },
194
+ };
195
+ // Any later load is a reload (a Vite full reload, a crashed document).
196
+ iframe.addEventListener("load", () => {
197
+ out.live = false;
198
+ reloaded(out);
199
+ });
200
+ return out;
201
+ } catch (error) {
202
+ iframe.remove();
203
+ throw error;
204
+ }
205
+ }
206
+
207
+ async function captureNow(
208
+ doc: Doc3D,
209
+ frame: number,
210
+ width: number,
211
+ height: number,
212
+ format: "png" | "webp",
213
+ signal: AbortSignal,
214
+ ): Promise<Blob> {
215
+ // Abandoned while it waited its turn: the stage is not touched.
216
+ if (signal.aborted) throw new Error(CANCELLED);
217
+ clearTimeout(idle);
218
+ if (open !== null && openKey !== keyOf(doc)) close();
219
+ if (open === null) {
220
+ const opening = start(doc.size.width, doc.size.height, () => {
221
+ if (open === opening) close();
222
+ });
223
+ open = opening;
224
+ openKey = keyOf(doc);
225
+ // One that failed to open is not kept, even when the capture that
226
+ // opened it was abandoned and no longer waits on it.
227
+ opening.catch(() => {
228
+ if (open === opening) open = null;
229
+ });
230
+ }
231
+ const opened = open;
232
+ try {
233
+ const held = await orCancelled(opened, signal);
234
+ const watch = {
235
+ stage: () => (held.live ? held.bridge : null),
236
+ bridgeAtStart: held.bridge,
237
+ signal,
238
+ reloaded: "the still stage reloaded while it drew",
239
+ cancelled: CANCELLED,
240
+ };
241
+ try {
242
+ if (held.shown === null) {
243
+ held.shown = new Promise<void>((resolve, reject) => {
244
+ const timer = setTimeout(
245
+ () => settle(new Error(`the stage did not show the Project within ${readyMs / 1000} s`)),
246
+ readyMs,
247
+ );
248
+ const settle = (error?: Error): void => {
249
+ clearTimeout(timer);
250
+ held.next = null;
251
+ if (error === undefined) resolve();
252
+ else reject(error);
253
+ };
254
+ held.next = { ready: () => settle(), failed: (message) => settle(new Error(message)) };
255
+ });
256
+ // A first document that never came up closes the stage, also when
257
+ // its capture was abandoned: the next still opens a fresh one
258
+ // rather than inheriting this failure.
259
+ held.shown.catch(() => {
260
+ if (open === opened) close();
261
+ });
262
+ }
263
+ // The newer document lands before the capture, which waits on a
264
+ // frame drawn from it. Before the first has shown, it is the one the
265
+ // stage comes up with.
266
+ held.bridge.loadDoc(doc);
267
+ await raceStage(held.shown, watch);
268
+ return await raceStage(held.bridge.captureFrame({ frame, width, height, format, signal }), watch);
269
+ } catch (error) {
270
+ // A stage that failed is not kept for the next still. One abandoned
271
+ // is.
272
+ if (!signal.aborted && open === opened) close();
273
+ throw error;
274
+ }
275
+ } finally {
276
+ idle = setTimeout(close, idleMs);
277
+ }
278
+ }
279
+
280
+ return {
281
+ capture(doc, frame, width, height, options = {}) {
282
+ const background = options.background === true;
283
+ if (background && others > 0) return Promise.reject(yieldedError());
284
+ const controller = new AbortController();
285
+ const outer = options.signal;
286
+ const forward = (): void => controller.abort();
287
+ if (outer?.aborted === true) controller.abort();
288
+ else outer?.addEventListener("abort", forward, { once: true });
289
+ const mine = { controller, yielded: false };
290
+ if (background) {
291
+ yielding.add(mine);
292
+ } else {
293
+ others += 1;
294
+ for (const other of yielding) {
295
+ other.yielded = true;
296
+ other.controller.abort();
297
+ }
298
+ }
299
+ const run = queue
300
+ .then(() => captureNow(doc, frame, width, height, options.format ?? "png", controller.signal))
301
+ .catch((error: unknown) => {
302
+ throw mine.yielded ? yieldedError() : error;
303
+ })
304
+ .finally(() => {
305
+ outer?.removeEventListener("abort", forward);
306
+ if (background) yielding.delete(mine);
307
+ else others -= 1;
308
+ });
309
+ queue = run.catch(() => {});
310
+ return run;
311
+ },
312
+ };
313
+ }
314
+
315
+ let tabStage: StillStage | undefined;
316
+
317
+ /**
318
+ * This tab's still stage. Hosted, the code host's, because a stage the chrome
319
+ * opened itself would import none of the Project's modules. Locally, the
320
+ * chrome's own, opened on first use.
321
+ */
322
+ export function tabStillStage(): StillStage {
323
+ if (tabStage !== undefined) return tabStage;
324
+ const host = dailiesHost();
325
+ tabStage =
326
+ host === undefined
327
+ ? createStillStage({ document, loaded: () => true })
328
+ : { capture: host.captureStill.bind(host) };
329
+ return tabStage;
330
+ }