@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,349 @@
1
+ // The Add-node list, at the cursor.
2
+ //
3
+ // ── WHY IT MOVED OFF THE TOOLBAR ────────────────────────────────────────
4
+ //
5
+ // v1 pinned it under a button in the canvas's top-left corner. Every node
6
+ // therefore arrived in the top-left corner too, and the author's next gesture
7
+ // was always the same: drag it to where they had been looking. A palette that
8
+ // opens where the pointer is, and drops the node there, removes that gesture
9
+ // entirely — which is why every node editor an author has used works this way.
10
+ // The bar's Add node button came back as the DISCOVERABLE opener only: it asks
11
+ // with no point, like Tab, so its node lands in the middle, not the corner.
12
+ //
13
+ // ── THE FOUR OPENERS, AND WHY THE WIRE DROP IS THE IMPORTANT ONE ────────
14
+ //
15
+ // Tab / ⇧A / the bar's Add node — the keymap's `graphPalette` or
16
+ // `openMaterialPalette(null)`, with no point, so the node lands wherever
17
+ // the canvas considers the middle.
18
+ // Double-click on empty pane — the point is the pointer.
19
+ // A WIRE DROPPED IN EMPTY SPACE — the point is where it was let go, and the
20
+ // palette is FILTERED to the kinds that could actually take that wire, then
21
+ // auto-wires the one that is picked (`addMaterialNode`'s `from`).
22
+ //
23
+ // The wire drop is the one that makes a graph fast to build: "I want something that
24
+ // eats this vec3" is the question an author actually has, and answering it by
25
+ // listing 114 kinds and letting them find out by being refused is the failure
26
+ // this filter removes.
27
+ import { useEffect, useMemo, useRef, useState } from "react";
28
+ import {
29
+ MATERIAL_GRAPH_GENERATORS,
30
+ MATERIAL_GRAPH_NODE_SPECS,
31
+ socketAccepts,
32
+ } from "@dailies-studio/shot/doc";
33
+ import type {
34
+ MaterialGraphNodeCategory,
35
+ MaterialGraphNodeKind,
36
+ MaterialGraphNodeSpec,
37
+ MaterialGraphResolvedType,
38
+ MaterialGraphSocketSpec,
39
+ } from "@dailies-studio/shot/doc";
40
+ import { useStore } from "../../state/context.js";
41
+ import type { MaterialPaletteRequest, MaterialPaletteSource } from "../../state/types.js";
42
+
43
+ /** Shelf order. A category this build does not know cannot exist (the union is
44
+ * closed), so this is a total ordering rather than a preference with a
45
+ * fallback — but the sort still appends an unlisted one rather than dropping
46
+ * it, because a vanished node is a worse bug than a misplaced shelf. */
47
+ const CATEGORY_ORDER: readonly MaterialGraphNodeCategory[] = [
48
+ "input",
49
+ "source",
50
+ "geometry",
51
+ "uv",
52
+ "math",
53
+ "vector",
54
+ "construct",
55
+ "logic",
56
+ "color",
57
+ "noise",
58
+ "generator",
59
+ "texture",
60
+ "function",
61
+ "editor",
62
+ "output",
63
+ ];
64
+
65
+ const CATEGORY_LABELS: Record<MaterialGraphNodeCategory, string> = {
66
+ source: "Surface",
67
+ input: "Input",
68
+ geometry: "Geometry",
69
+ math: "Math",
70
+ vector: "Vector",
71
+ construct: "Construct",
72
+ logic: "Logic",
73
+ color: "Colour",
74
+ noise: "Noise",
75
+ generator: "Materials",
76
+ uv: "UV",
77
+ texture: "Texture",
78
+ function: "Function",
79
+ editor: "Editor",
80
+ output: "Output",
81
+ };
82
+
83
+ /**
84
+ * The kinds a palette may ever offer.
85
+ *
86
+ * The output node is excluded because a graph has exactly one and already has
87
+ * it. The three FUNCTION kinds are excluded because each is half of a boundary
88
+ * that Collapse and Expand create together — one added on its own is a card
89
+ * whose sockets name a signature nothing declared. `group` is excluded because
90
+ * a box with nothing in it is not a thing an author wants; Group acts on a
91
+ * selection. Every one of those is also refused by `addMaterialNode`, so this
92
+ * is the menu agreeing with the door rather than a second rule.
93
+ */
94
+ const HIDDEN: ReadonlySet<MaterialGraphNodeKind> = new Set<MaterialGraphNodeKind>([
95
+ "subgraph",
96
+ "fn-input",
97
+ "fn-output",
98
+ "group",
99
+ ]);
100
+
101
+ export interface MaterialPaletteRow {
102
+ kind: MaterialGraphNodeKind;
103
+ label: string;
104
+ category: MaterialGraphNodeCategory;
105
+ /** Set only on the synthesised generator rows: which of the tsl-textures
106
+ * materials the `tsl-texture` card this row adds should run. */
107
+ generator?: string;
108
+ }
109
+
110
+ /**
111
+ * `tsl-texture` is skipped here because the loop below offers it FORTY TIMES
112
+ * OVER, once per generator. Bare, it would be a card whose sockets appear only
113
+ * after the author works out that a dropdown decides them — the opposite of
114
+ * what a palette is for. Unlike `HIDDEN`, this is not a kind the door refuses;
115
+ * it is a kind that arrives by a better row.
116
+ */
117
+ function offerable(spec: MaterialGraphNodeSpec): boolean {
118
+ return spec.category !== "output" && !HIDDEN.has(spec.kind) && spec.kind !== "tsl-texture";
119
+ }
120
+
121
+ /** Does any of a row's searchable text contain what was typed? */
122
+ function matches(needle: string, terms: readonly (string | undefined)[]): boolean {
123
+ return (
124
+ needle === "" || terms.some((term) => term !== undefined && term.toLowerCase().includes(needle))
125
+ );
126
+ }
127
+
128
+ /**
129
+ * Could a wire held at `from` land on these sockets at all?
130
+ *
131
+ * Takes the SOCKETS rather than the spec, because a generator row's sockets are
132
+ * its generator's parameter list — the `tsl-texture` spec's own inputs are
133
+ * empty until a generator is named, and judging forty rows by that would offer
134
+ * every one of them to a wire none of them could take.
135
+ *
136
+ * `"numeric"` on either side is the GENERIC and matches anything that is not a
137
+ * texture handle: `socketAccepts` takes a RESOLVED type as its second argument
138
+ * and `numeric` is not one, so asking it directly would be a type error dressed
139
+ * up as a filter that hid every generic node.
140
+ */
141
+ function acceptsWire(
142
+ io: { inputs: readonly MaterialGraphSocketSpec[]; outputs: readonly MaterialGraphSocketSpec[] },
143
+ from: MaterialPaletteSource,
144
+ ): boolean {
145
+ const generic = from.type === "numeric";
146
+ if (from.side === "source") {
147
+ // The author holds an OUTPUT and wants something to feed.
148
+ return io.inputs.some((input) =>
149
+ generic
150
+ ? input.type !== "texture"
151
+ : socketAccepts(input.type, from.type as MaterialGraphResolvedType, input.accepts),
152
+ );
153
+ }
154
+ // The author holds an INPUT and wants something to produce.
155
+ return io.outputs.some((output) => {
156
+ if (output.type === "numeric") return from.type !== "texture";
157
+ if (generic) return output.type !== "texture";
158
+ return socketAccepts(from.type, output.type as MaterialGraphResolvedType);
159
+ });
160
+ }
161
+
162
+ /**
163
+ * The list, filtered. A pure function so `materialPalette.test.tsx` can check
164
+ * both halves — the keyword search and the socket filter — without a canvas.
165
+ *
166
+ * Search matches the LABEL, the kind's own id, its category and its declared
167
+ * keywords. The keywords are what an author would type: `1-x` finds One Minus,
168
+ * `voronoi` finds Worley, `if` finds Select.
169
+ *
170
+ * The second loop is the tsl-textures library. It is ONE node kind carrying a
171
+ * `generator` field, but an author looking for marble types "marble" and not
172
+ * "texture generator", so the palette synthesises a row per material and the
173
+ * pick carries the name through to the door. Each row also answers to the
174
+ * kind's own terms, so "procedural" still surfaces the whole shelf.
175
+ */
176
+ export function materialPaletteRows(
177
+ query: string,
178
+ from?: MaterialPaletteSource,
179
+ ): MaterialPaletteRow[] {
180
+ const needle = query.trim().toLowerCase();
181
+ const rows: MaterialPaletteRow[] = [];
182
+ for (const spec of Object.values(MATERIAL_GRAPH_NODE_SPECS)) {
183
+ if (!offerable(spec)) continue;
184
+ if (from !== undefined && !acceptsWire(spec, from)) continue;
185
+ if (!matches(needle, [spec.label, spec.kind, spec.category, ...(spec.keywords ?? [])])) continue;
186
+ rows.push({ kind: spec.kind, label: spec.label, category: spec.category });
187
+ }
188
+ const tsl = MATERIAL_GRAPH_NODE_SPECS["tsl-texture"];
189
+ for (const [generator, entry] of Object.entries(MATERIAL_GRAPH_GENERATORS)) {
190
+ if (from !== undefined && !acceptsWire({ inputs: entry.inputs, outputs: tsl.outputs }, from)) {
191
+ continue;
192
+ }
193
+ if (
194
+ !matches(needle, [
195
+ entry.label,
196
+ generator,
197
+ tsl.label,
198
+ tsl.category,
199
+ ...(entry.keywords ?? []),
200
+ ...(tsl.keywords ?? []),
201
+ ])
202
+ ) {
203
+ continue;
204
+ }
205
+ rows.push({ kind: "tsl-texture", label: entry.label, category: tsl.category, generator });
206
+ }
207
+ return rows.sort((a, b) => {
208
+ const ai = CATEGORY_ORDER.indexOf(a.category);
209
+ const bi = CATEGORY_ORDER.indexOf(b.category);
210
+ const ao = ai < 0 ? CATEGORY_ORDER.length : ai;
211
+ const bo = bi < 0 ? CATEGORY_ORDER.length : bi;
212
+ return ao === bo ? a.label.localeCompare(b.label) : ao - bo;
213
+ });
214
+ }
215
+
216
+ export interface MaterialNodePaletteProps {
217
+ materialId: string;
218
+ path: readonly string[];
219
+ request: MaterialPaletteRequest;
220
+ /** Where the list sits, in CLIENT px — the canvas converts the request's
221
+ * graph point, because only it knows the viewport transform. */
222
+ screenAt: { x: number; y: number };
223
+ /** Where the picked node lands, in GRAPH px. */
224
+ graphAt: readonly [number, number];
225
+ }
226
+
227
+ export function MaterialNodePalette({
228
+ materialId,
229
+ path,
230
+ request,
231
+ screenAt,
232
+ graphAt,
233
+ }: MaterialNodePaletteProps) {
234
+ const store = useStore();
235
+ const [query, setQuery] = useState("");
236
+ const [active, setActive] = useState(0);
237
+ const listRef = useRef<HTMLDivElement | null>(null);
238
+ const rows = useMemo(() => materialPaletteRows(query, request.from), [query, request.from]);
239
+
240
+ // A new request is a new palette. `materialPalette` is a fresh-identity
241
+ // mailbox, so this fires on the second Tab at the same point too — which is
242
+ // what makes re-opening feel like re-opening rather than like nothing.
243
+ useEffect(() => {
244
+ setQuery("");
245
+ setActive(0);
246
+ }, [request]);
247
+
248
+ useEffect(() => {
249
+ setActive((current) => (current >= rows.length ? Math.max(0, rows.length - 1) : current));
250
+ }, [rows.length]);
251
+
252
+ // The active row scrolled into view, so holding ArrowDown walks the list
253
+ // rather than walking off the bottom of it.
254
+ useEffect(() => {
255
+ const row = listRef.current?.querySelector<HTMLElement>("[data-active='true']");
256
+ // jsdom implements no `scrollIntoView`, and a runtime guard here is cheaper
257
+ // than a stub every suite that mounts a palette would have to install.
258
+ if (typeof row?.scrollIntoView === "function") row.scrollIntoView({ block: "nearest" });
259
+ }, [active]);
260
+
261
+ const pick = (row: MaterialPaletteRow): void => {
262
+ store.addMaterialNode(
263
+ materialId,
264
+ path,
265
+ row.kind,
266
+ [graphAt[0], graphAt[1]],
267
+ request.from,
268
+ row.generator,
269
+ );
270
+ };
271
+
272
+ let shelf: MaterialGraphNodeCategory | null = null;
273
+ return (
274
+ <div
275
+ className="material-node-palette nodrag nowheel"
276
+ role="dialog"
277
+ aria-label="Add shader node"
278
+ data-testid="material-node-palette"
279
+ style={{ left: `${screenAt.x}px`, top: `${screenAt.y}px` }}
280
+ >
281
+ <input
282
+ autoFocus
283
+ type="search"
284
+ className="material-node-search"
285
+ value={query}
286
+ placeholder={request.from === undefined ? "Search nodes" : "Search nodes that fit"}
287
+ aria-label="Search shader nodes"
288
+ onChange={(event) => setQuery(event.currentTarget.value)}
289
+ onKeyDown={(event) => {
290
+ if (event.key === "ArrowDown") {
291
+ event.preventDefault();
292
+ setActive((current) => (rows.length === 0 ? 0 : (current + 1) % rows.length));
293
+ } else if (event.key === "ArrowUp") {
294
+ event.preventDefault();
295
+ setActive((current) => (rows.length === 0 ? 0 : (current - 1 + rows.length) % rows.length));
296
+ } else if (event.key === "Enter") {
297
+ event.preventDefault();
298
+ const row = rows[active];
299
+ if (row !== undefined) pick(row);
300
+ } else if (event.key === "Escape") {
301
+ // STOPPED HERE. The shell's keymap listens on `window`, and letting
302
+ // Escape reach it would run the whole material ladder — closing the
303
+ // palette AND dropping the selection behind it, two rungs for one
304
+ // press.
305
+ event.preventDefault();
306
+ event.stopPropagation();
307
+ store.closeMaterialPalette();
308
+ }
309
+ }}
310
+ />
311
+ <div className="material-node-palette-scroll" ref={listRef}>
312
+ {rows.length === 0 ? (
313
+ <p className="material-empty-copy">
314
+ {request.from === undefined
315
+ ? `No node matches “${query.trim()}”.`
316
+ : "No node takes that connection."}
317
+ </p>
318
+ ) : (
319
+ rows.map((row, index) => {
320
+ const heading = row.category === shelf ? null : (
321
+ <h3 key={`shelf-${row.category}`}>{CATEGORY_LABELS[row.category]}</h3>
322
+ );
323
+ shelf = row.category;
324
+ return (
325
+ <div className="material-node-category" key={row.generator ?? row.kind}>
326
+ {heading}
327
+ <button
328
+ type="button"
329
+ data-active={index === active}
330
+ className={index === active ? "is-active" : ""}
331
+ // POINTER-DOWN, not click. The search field has focus and a
332
+ // click fires after the blur, which is one more chance for
333
+ // the palette to close under the cursor before the pick lands.
334
+ onPointerDown={(event) => {
335
+ event.preventDefault();
336
+ pick(row);
337
+ }}
338
+ onMouseEnter={() => setActive(index)}
339
+ >
340
+ <span>{row.label}</span>
341
+ </button>
342
+ </div>
343
+ );
344
+ })
345
+ )}
346
+ </div>
347
+ </div>
348
+ );
349
+ }