@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,346 @@
1
+ // THE COMPONENTS LEFT COLUMN (C1, C5): a search over both sections, the "All
2
+ // components" row (the home, with its count), THIS PROJECT (its Studio-made
3
+ // definitions, the code files made for it, then the code components it uses)
4
+ // with the way a new one is made, YOUR LIBRARY (code made for no Project,
5
+ // Dailies Library installs and what someone added, each with where it comes
6
+ // from), and Browse Community at the foot. Three only (D8): a dom code
7
+ // component is listed with the reason it never opens.
8
+ //
9
+ // It shows in the docked left column's mode slot (CodeStudio.tsx and
10
+ // ComponentsPreview.tsx portal it there; a definition's Edit tab shows its
11
+ // layers instead). New opens an inline row in the column, never a popover
12
+ // over the stage. The search may be the caller's (`query`, `onQuery`), so
13
+ // the home's field and this one filter together. ONE FIELD ON SCREEN: with
14
+ // no component open the home's bar carries the search, so this column leaves
15
+ // its own out.
16
+ import { useEffect, useMemo, useState } from "react";
17
+ import type { ReactNode } from "react";
18
+ import { IconCode } from "@dailies-studio/ui";
19
+ import type { Doc3D } from "@dailies-studio/shot/doc";
20
+ import { dailiesHost } from "../../hostApi.js";
21
+ import { COMPONENT_ICON, CUBE_ICON } from "../../icons.js";
22
+ import { useShotEditor, useStore } from "../../state/context.js";
23
+ import type { ComponentsSelection } from "../../state/types.js";
24
+ import {
25
+ componentsListOf,
26
+ libraryComponentsOf,
27
+ libraryEntryName,
28
+ libraryHomeLabel,
29
+ sameComponent,
30
+ } from "../../state/workspace.js";
31
+ import type { LibraryEntry } from "../../state/workspace.js";
32
+ import { useCodeBufferGuard } from "../code/codeBufferGuard.js";
33
+ import { communityBrowseHref } from "../share/ShareComponentDialog.js";
34
+
35
+ /** Why Browse Community is off on a local studio. */
36
+ export const COMMUNITY_HOSTED_ONLY = "Community is part of the hosted studio.";
37
+
38
+ export function ComponentLibraryRail(props: {
39
+ doc: Doc3D;
40
+ current: ComponentsSelection | null;
41
+ query?: string;
42
+ onQuery?: (q: string) => void;
43
+ }) {
44
+ const store = useStore();
45
+ const library = useShotEditor((s) => s.library);
46
+ const workspace = useShotEditor((s) => s.workspaceComponents);
47
+ const homes = useShotEditor((s) => s.componentHomes);
48
+ const readOnly = useShotEditor((s) => s.readOnly);
49
+ // Picking a definition in place of a code component drops its buffers, so
50
+ // unsaved text there asks first. Another code component keeps them.
51
+ const { guard, dialog } = useCodeBufferGuard();
52
+ const [ownQuery, setOwnQuery] = useState("");
53
+ const query = props.query ?? ownQuery;
54
+ const setQuery = props.onQuery ?? setOwnQuery;
55
+ const [making, setMaking] = useState(false);
56
+ const [newName, setNewName] = useState("");
57
+ const needle = query.trim().toLowerCase();
58
+ // The open subject is marked where it lists, in either section. A file
59
+ // just made lists under This project from the press (`createCodeComponent`
60
+ // links it), so the subject needs no row of its own.
61
+ const rows = useMemo(() => componentsListOf(props.doc, library), [props.doc, library]);
62
+ const mine = useMemo(
63
+ () => libraryComponentsOf(props.doc, library, workspace, homes, rows),
64
+ [props.doc, library, workspace, homes, rows],
65
+ );
66
+ const matches = (name: string): boolean => needle.length === 0 || name.toLowerCase().includes(needle);
67
+ const listed = rows.filter((r) => matches(r.name));
68
+ const libraryListed = mine.filter((entry) => matches(libraryEntryName(entry)));
69
+ const hosted = dailiesHost() !== undefined;
70
+
71
+ // The workspace's list and its homes are the store's, read once per visit;
72
+ // the Project's own list needs nothing from them.
73
+ useEffect(() => {
74
+ void store.refreshWorkspaceComponents();
75
+ }, [store]);
76
+
77
+ const make = (kind: "studio" | "code"): void => {
78
+ const name = newName.trim() === "" ? "Component" : newName.trim();
79
+ setMaking(false);
80
+ setNewName("");
81
+ if (kind === "studio") guard(() => store.createEmptyComponent(name));
82
+ else guard(() => void store.newCodeComponent(name));
83
+ };
84
+
85
+ return (
86
+ <section className="component-library" aria-label="Components">
87
+ {dialog}
88
+ {/* No keydown guard here and none needed: the keymap asks
89
+ `isEditable(target)` before it resolves anything, so a field anywhere
90
+ in the chrome already keeps every single-letter verb. With no
91
+ component open the home's bar has the one search field. */}
92
+ {props.current === null ? null : (
93
+ <label className="file-search components-search">
94
+ <input
95
+ type="search"
96
+ value={query}
97
+ placeholder="Search components"
98
+ aria-label="Search components"
99
+ data-testid="studio-search"
100
+ onChange={(e) => setQuery(e.target.value)}
101
+ />
102
+ </label>
103
+ )}
104
+ <div className="rail-scroll">
105
+ <ul className="components-list is-home">
106
+ <ComponentItem
107
+ kind="home"
108
+ name="All components"
109
+ count={rows.length + mine.length}
110
+ current={props.current === null}
111
+ testId="components-all"
112
+ title="Every component of this Project and your library"
113
+ disabled={false}
114
+ onOpen={() => guard(() => void store.openComponents())}
115
+ />
116
+ </ul>
117
+ <div className="components-section-head" data-testid="components-project-head">
118
+ <h2 className="components-section-title">This project</h2>
119
+ <button
120
+ type="button"
121
+ className="components-section-action"
122
+ data-testid="studio-new-component"
123
+ aria-label="New component"
124
+ aria-expanded={making}
125
+ disabled={readOnly}
126
+ title="New component"
127
+ onClick={() => setMaking((m) => !m)}
128
+ >
129
+ New
130
+ </button>
131
+ </div>
132
+ {making ? (
133
+ <form
134
+ className="components-new-row"
135
+ data-testid="components-new-row"
136
+ onSubmit={(e) => {
137
+ e.preventDefault();
138
+ make("studio");
139
+ }}
140
+ >
141
+ <input
142
+ className="components-new-name"
143
+ data-testid="components-new-name"
144
+ aria-label="New component name"
145
+ placeholder="Component"
146
+ value={newName}
147
+ autoFocus
148
+ onChange={(e) => setNewName(e.target.value)}
149
+ onKeyDown={(e) => {
150
+ if (e.key !== "Escape") return;
151
+ e.stopPropagation();
152
+ setMaking(false);
153
+ }}
154
+ />
155
+ <button type="submit" className="btn" data-testid="components-new-studio" title="A Studio-made component">
156
+ 3D
157
+ </button>
158
+ <button
159
+ type="button"
160
+ className="btn"
161
+ data-testid="components-new-code"
162
+ title="A code component from the three starter"
163
+ onClick={() => make("code")}
164
+ >
165
+ Code
166
+ </button>
167
+ </form>
168
+ ) : null}
169
+ <ul className="components-list" data-testid="studio-def-list">
170
+ {listed.map((r) => {
171
+ const sel = r.sel;
172
+ const current = sameComponent(sel, props.current);
173
+ return (
174
+ <ComponentItem
175
+ key={sel.kind === "studio" ? sel.def : sel.module}
176
+ kind={sel.kind}
177
+ name={r.name}
178
+ current={current}
179
+ testId={r.refusal === null ? undefined : "components-row-unsupported"}
180
+ title={r.refusal ?? r.name}
181
+ disabled={r.refusal !== null}
182
+ onOpen={() => {
183
+ if (r.refusal !== null) {
184
+ store.reportError(r.refusal);
185
+ return;
186
+ }
187
+ // SWAPS THE SUBJECT AND STAYS on the tab already showing.
188
+ if (sel.kind === "studio") guard(() => void store.selectComponent(sel));
189
+ else void store.selectComponent(sel);
190
+ }}
191
+ />
192
+ );
193
+ })}
194
+ </ul>
195
+ {listed.length === 0 && needle.length > 0 ? (
196
+ <p className="insp-empty">No component matches “{query.trim()}”.</p>
197
+ ) : null}
198
+ <div className="components-section-head is-library" data-testid="components-library-head">
199
+ <h2 className="components-section-title">Your library</h2>
200
+ <span className="components-section-count" data-testid="components-library-count">
201
+ {mine.length}
202
+ </span>
203
+ </div>
204
+ <ul className="components-list" data-testid="components-library-list">
205
+ {libraryListed.map((entry) => {
206
+ if (entry.kind === "studio") {
207
+ const c = entry.component;
208
+ return (
209
+ <ComponentItem
210
+ key={c.id}
211
+ kind="studio"
212
+ name={c.name}
213
+ author={libraryHomeLabel(entry)}
214
+ current={false}
215
+ title={workspaceRowTitle(entry)}
216
+ disabled={false}
217
+ trailing={
218
+ <button
219
+ type="button"
220
+ className="components-use-here"
221
+ data-testid="components-use-here"
222
+ disabled={readOnly}
223
+ title={`Copy ${c.name} into this Project, linked to its recorded version`}
224
+ onClick={() => guard(() => void store.addLibraryComponent(c.id))}
225
+ >
226
+ Use here
227
+ </button>
228
+ }
229
+ />
230
+ );
231
+ }
232
+ const { module, refusal } = entry;
233
+ return (
234
+ <ComponentItem
235
+ key={module}
236
+ kind="code"
237
+ name={entry.name}
238
+ author={libraryHomeLabel(entry)}
239
+ current={sameComponent({ kind: "code", module }, props.current)}
240
+ testId={refusal === null ? undefined : "components-row-unsupported"}
241
+ title={refusal ?? workspaceRowTitle(entry)}
242
+ disabled={refusal !== null}
243
+ onOpen={() => {
244
+ if (refusal !== null) {
245
+ store.reportError(refusal);
246
+ return;
247
+ }
248
+ guard(() => void store.openCodeComponent(module));
249
+ }}
250
+ />
251
+ );
252
+ })}
253
+ </ul>
254
+ {workspace !== null && mine.length === 0 ? (
255
+ <p className="insp-empty">
256
+ Code made for no Project, Dailies Library installs and components you add to your library show here.
257
+ </p>
258
+ ) : null}
259
+ </div>
260
+ <div className="components-rail-footer">
261
+ <button
262
+ type="button"
263
+ className="components-browse"
264
+ data-testid="components-browse"
265
+ disabled={!hosted}
266
+ title={hosted ? "Open Community in a new tab" : COMMUNITY_HOSTED_ONLY}
267
+ onClick={() => window.open(communityBrowseHref(), "_blank", "noopener")}
268
+ >
269
+ <span>Browse Community</span>
270
+ <span className="components-browse-arrow" aria-hidden="true">
271
+ →
272
+ </span>
273
+ </button>
274
+ </div>
275
+ </section>
276
+ );
277
+ }
278
+
279
+ /** One 28-high row: the icon tile, the name (and a workspace row's home), the
280
+ * kind tag (or the home row's count), then a trailing verb. No live
281
+ * thumbnails: the one shared canvas is rendering the subject beside this
282
+ * list. */
283
+ function ComponentItem(props: {
284
+ kind: "studio" | "code" | "home";
285
+ name: string;
286
+ author?: string;
287
+ count?: number;
288
+ current: boolean;
289
+ title: string;
290
+ disabled: boolean;
291
+ testId?: string | undefined;
292
+ onOpen?: () => void;
293
+ trailing?: ReactNode;
294
+ }) {
295
+ const body = (
296
+ <>
297
+ <span className="components-item-tile" aria-hidden="true">
298
+ {props.kind === "code" ? <IconCode /> : props.kind === "home" ? COMPONENT_ICON : CUBE_ICON}
299
+ </span>
300
+ <span className="components-item-name">{props.name}</span>
301
+ {props.author === undefined ? null : <span className="components-item-author">{props.author}</span>}
302
+ {props.kind === "home" ? (
303
+ <span className="components-section-count">{props.count}</span>
304
+ ) : (
305
+ <span className="components-item-kind">{props.kind === "code" ? "CODE" : "3D"}</span>
306
+ )}
307
+ </>
308
+ );
309
+ return (
310
+ <li className={`components-item${props.current ? " is-current" : ""}`} data-testid={props.testId}>
311
+ {props.onOpen === undefined ? (
312
+ <span className="components-item-main" title={props.title}>
313
+ {body}
314
+ </span>
315
+ ) : (
316
+ <button
317
+ type="button"
318
+ className="components-item-main"
319
+ aria-current={props.current}
320
+ aria-disabled={props.disabled || undefined}
321
+ title={props.title}
322
+ onClick={props.onOpen}
323
+ >
324
+ {body}
325
+ </button>
326
+ )}
327
+ {props.trailing}
328
+ </li>
329
+ );
330
+ }
331
+
332
+ /** A Your library row's title: what a press does, where the component comes
333
+ * from and, once the workspace recorded it, the day it first did, so an
334
+ * author can tell when a component arrived. The rail and the home's cards
335
+ * say the same. */
336
+ export function workspaceRowTitle(entry: LibraryEntry): string {
337
+ const recorded = entry.kind === "code" ? entry.recorded : entry.component;
338
+ const day =
339
+ recorded === undefined
340
+ ? null
341
+ : new Date(recorded.createdAt).toLocaleDateString(undefined, { day: "numeric", month: "short", year: "numeric" });
342
+ const facts = day === null ? libraryHomeLabel(entry) : `${libraryHomeLabel(entry)} · recorded ${day}`;
343
+ return entry.kind === "code"
344
+ ? `Open ${entry.name} · ${facts}`
345
+ : `${entry.component.name} · ${facts}. Use here adds a copy to this Project`;
346
+ }