@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,207 @@
1
+ // THE FONT PICKER'S FACES: one cache for the page, shared by the picker's rows
2
+ // and the Font field, so a family draws its name in its own face and the file
3
+ // is fetched once per page.
4
+ //
5
+ // - EVERY FACE REGISTERS UNDER A PRIVATE FAMILY ("dailies-gf-<id>",
6
+ // "dailies-ws-<hash8>", "dailies-pf-<hash8>"), never under the family's
7
+ // own name: a Google copy of "Inter" must not take over the chrome's Inter.
8
+ // A file's family is keyed by its bytes (the stores name a file
9
+ // `<hash8>-<name>`), so a reused asset id or another Project never draws
10
+ // one file's name in another file's glyphs.
11
+ // - ONLY A GOOGLE ROW CONTACTS JSDELIVR (Recent, Google Fonts). A family the
12
+ // Project holds draws from the Project's own file, a machine font from the
13
+ // computer, so selecting text fetches nothing from anyone (privacy.html:
14
+ // new text's Inter "contacts no one").
15
+ // - ONLY WHAT IS ON SCREEN LOADS. A row asks for its face while it is in the
16
+ // viewport (the picker mounts a few rows past each edge, and those ask for
17
+ // nothing), at most `MAX_LOADS` at once, in the order asked. An ask whose
18
+ // row scrolled away before its turn waits unstarted until a row asks
19
+ // again, so a fast scroll never queues the rows it passed ahead of the
20
+ // ones it stopped on.
21
+ // - NOTHING IS DELETED. A face stays in `document.fonts` for the page's life,
22
+ // so reopening the picker or scrolling back draws at once.
23
+ //
24
+ // Kept out of the picker's lazy chunk: the Font field draws through it too.
25
+ import { useEffect, useSyncExternalStore } from "react";
26
+ import type { Doc3D } from "@dailies-studio/shot/doc";
27
+ import { isGenericFontFamily, quoteFontFamily } from "@dailies-studio/shot/doc";
28
+ import { findGoogleFont, hasNonLatinDefault, previewFile } from "../../fonts/googleFonts.js";
29
+ import type { GoogleFontEntry } from "../../fonts/googleFonts.js";
30
+ import { workspaceFontUrl } from "../../api.js";
31
+ import type { WorkspaceFont } from "../../api.js";
32
+ import { fold } from "../../state/fontRecents.js";
33
+ import { chooseFace, projectFontFamilies, workspaceFacts } from "../../state/fonts.js";
34
+ import type { ProjectFontFamily } from "../../state/fonts.js";
35
+
36
+ /** What a family's name is drawn in. `url` null is a face this computer may
37
+ * have (a machine font): nothing loads, the stack names the family itself. */
38
+ export interface PreviewFace {
39
+ family: string;
40
+ url: string | null;
41
+ }
42
+
43
+ /** How a face stands: loading (queued or fetching), ready, or failed (drawn
44
+ * in the chrome's Inter). */
45
+ export type FaceStatus = "loading" | "ready" | "failed";
46
+
47
+ const MAX_LOADS = 4;
48
+
49
+ interface Entry {
50
+ face: PreviewFace;
51
+ status: "queued" | FaceStatus;
52
+ /** Mounted rows asking for it now. */
53
+ wants: number;
54
+ }
55
+
56
+ const entries = new Map<string, Entry>();
57
+ /** Unstarted asks, in the order asked. */
58
+ const queue: Entry[] = [];
59
+ let running = 0;
60
+ const listeners = new Set<() => void>();
61
+
62
+ function notify(): void {
63
+ for (const listener of listeners) listener();
64
+ }
65
+
66
+ function start(entry: Entry): void {
67
+ if (typeof FontFace === "undefined" || typeof document === "undefined" || document.fonts === undefined) {
68
+ entry.status = "failed";
69
+ return;
70
+ }
71
+ entry.status = "loading";
72
+ running++;
73
+ // Every weight maps to the one file, so a name is never drawn in a
74
+ // synthesized bold.
75
+ const face = new FontFace(entry.face.family, `url(${JSON.stringify(entry.face.url)})`, { weight: "1 1000" });
76
+ document.fonts.add(face);
77
+ face.load().then(
78
+ () => {
79
+ entry.status = "ready";
80
+ },
81
+ () => {
82
+ entry.status = "failed";
83
+ },
84
+ ).finally(() => {
85
+ running--;
86
+ pump();
87
+ notify();
88
+ });
89
+ }
90
+
91
+ function pump(): void {
92
+ while (running < MAX_LOADS) {
93
+ const at = queue.findIndex((entry) => entry.wants > 0);
94
+ if (at < 0) return;
95
+ start(queue.splice(at, 1)[0]!);
96
+ }
97
+ }
98
+
99
+ /** Hold `face` wanted while a row shows it; answers the release. */
100
+ function want(face: PreviewFace): () => void {
101
+ let entry = entries.get(face.family);
102
+ if (entry === undefined) {
103
+ entry = { face, status: face.url === null ? "ready" : "queued", wants: 0 };
104
+ entries.set(face.family, entry);
105
+ if (entry.status === "queued") queue.push(entry);
106
+ }
107
+ const held = entry;
108
+ held.wants++;
109
+ pump();
110
+ notify();
111
+ return () => {
112
+ held.wants--;
113
+ };
114
+ }
115
+
116
+ function subscribe(listener: () => void): () => void {
117
+ listeners.add(listener);
118
+ return () => {
119
+ listeners.delete(listener);
120
+ };
121
+ }
122
+
123
+ function statusOf(face: PreviewFace | null): FaceStatus | null {
124
+ if (face === null) return null;
125
+ if (face.url === null) return "ready";
126
+ const status = entries.get(face.family)?.status ?? "queued";
127
+ return status === "queued" ? "loading" : status;
128
+ }
129
+
130
+ /** `face`'s status while the calling row is mounted, asking for it to load;
131
+ * null for no face (the name is drawn in Inter). */
132
+ export function usePreviewFace(face: PreviewFace | null): FaceStatus | null {
133
+ const family = face?.family ?? null;
134
+ useEffect(() => {
135
+ if (face === null) return;
136
+ return want(face);
137
+ // One family is one file: the url never changes under it.
138
+ // eslint-disable-next-line react-hooks/exhaustive-deps
139
+ }, [family]);
140
+ return useSyncExternalStore(subscribe, () => statusOf(face), () => statusOf(face));
141
+ }
142
+
143
+ /** The CSS stack a ready face draws a name in, the chrome's Inter behind it.
144
+ * A generic keyword stays bare: a quoted "serif" names a family called
145
+ * serif, which no computer has, so the name would draw in Inter. */
146
+ export const faceStack = (face: PreviewFace): string =>
147
+ `${isGenericFontFamily(face.family) ? face.family.trim() : quoteFontFamily(face.family)}, var(--font-sans)`;
148
+
149
+ // ── WHICH FACE A FAMILY DRAWS IN ──────────────────────────────────────────
150
+
151
+ const assetUrl = (path: string): string => `/studio/assets/${encodeURIComponent(path)}`;
152
+
153
+ /** A Google family: its preview file (`previewFile`), or null for a family
154
+ * whose own face cannot spell its name (a non-Latin default), drawn in
155
+ * Inter with nothing fetched. */
156
+ export function googleFace(entry: GoogleFontEntry): PreviewFace | null {
157
+ const file = previewFile(entry);
158
+ return file === null ? null : { family: `dailies-gf-${entry.id}`, url: file.url };
159
+ }
160
+
161
+ /** A workspace family: its regular file, or the one nearest it. */
162
+ export function workspaceFace(fonts: readonly WorkspaceFont[]): PreviewFace | null {
163
+ if (fonts.length === 0) return null;
164
+ const font = chooseFace(fonts, workspaceFacts, 400, "normal").face;
165
+ return { family: `dailies-ws-${font.id.slice(0, 8)}`, url: workspaceFontUrl(font.id) };
166
+ }
167
+
168
+ /** A family the Project holds, from the Project's own file of its regular
169
+ * face (or the one nearest it): a catalog face's first file is its default
170
+ * subset's. A workspace copy shares the workspace row's face (the same
171
+ * bytes, the same `<hash8>`). A catalog copy draws in Inter while the
172
+ * catalog is not loaded and for a non-Latin default, since only the catalog
173
+ * says whether its default subset can spell its name. */
174
+ export function projectFace(
175
+ row: ProjectFontFamily,
176
+ assets: Doc3D["assets"],
177
+ catalog: readonly GoogleFontEntry[] | null,
178
+ ): PreviewFace | null {
179
+ if (row.pick.faces.length === 0) return null;
180
+ if (row.source === "catalog") {
181
+ if (catalog === null) return null;
182
+ const entry = findGoogleFont(catalog, row.family);
183
+ if (entry !== undefined && hasNonLatinDefault(entry)) return null;
184
+ }
185
+ const asset = assets[chooseFace(row.pick.faces, (face) => face, 400, "normal").face.fontAsset];
186
+ if (asset?.kind !== "font") return null;
187
+ const family = row.source === "workspace" ? `dailies-ws-${asset.path.slice(0, 8)}` : `dailies-pf-${asset.hash.slice(0, 8)}`;
188
+ return { family, url: assetUrl(asset.path) };
189
+ }
190
+
191
+ /** The face the Font field draws `family` in: the In this Project row's face,
192
+ * else the family itself, a machine font this computer may have (the face
193
+ * the stage draws). Null draws Inter.
194
+ *
195
+ * The families are grouped without the catalog: its 1,984-name map is what
196
+ * costs, and the field runs this on every edit while text is selected. Only
197
+ * the non-Latin check (`projectFace`) reads the catalog. */
198
+ export function familyFace(
199
+ doc: Doc3D,
200
+ family: string,
201
+ catalog: readonly GoogleFontEntry[] | null,
202
+ workspace: readonly WorkspaceFont[] | null,
203
+ ): PreviewFace | null {
204
+ const key = fold(family);
205
+ const row = projectFontFamilies(doc, null, workspace).families.find((f) => f.key === key);
206
+ return row === undefined ? { family, url: null } : projectFace(row, doc.assets, catalog);
207
+ }
@@ -0,0 +1,271 @@
1
+ @layer component-sheets {
2
+ /* THE FONT PICKER (FontPicker.tsx), a component sheet: it styles its own
3
+ classes and the layout around the house controls it holds (the search
4
+ field, the chips, the badge, the buttons, the drop zone, the empty
5
+ state), never those controls.
6
+
7
+ The surface is the house popover (`.popover`: the panel ground, the
8
+ strong edge, the control's corners, the popover shadow), a fixed 340
9
+ hung from the field's right edge, and the list is its only scroller.
10
+ Its frame's height is set inline, the room beside the field up to
11
+ min(560px, 70vh), and stays put while a search narrows the list. */
12
+ .font-picker {
13
+ width: 340px;
14
+ display: flex;
15
+ flex-direction: column;
16
+ overflow: hidden;
17
+ }
18
+
19
+ .font-picker-frame {
20
+ max-height: min(560px, 70vh);
21
+ min-height: 0;
22
+ display: flex;
23
+ flex-direction: column;
24
+ }
25
+
26
+ /* The row height is FONT_PICKER_ROW_H (FontPicker.tsx), which the list's
27
+ window arithmetic reads; the body also sets it inline from that constant,
28
+ so the inline value wins and the two cannot drift. */
29
+ .font-picker-body {
30
+ --font-picker-row-h: 32px;
31
+ flex: 1 1 auto;
32
+ min-height: 0;
33
+ display: flex;
34
+ flex-direction: column;
35
+ }
36
+
37
+ .font-picker-top {
38
+ flex: none;
39
+ display: flex;
40
+ flex-direction: column;
41
+ gap: var(--space-4);
42
+ padding: var(--space-4);
43
+ border-bottom: 1px solid var(--line-soft);
44
+ }
45
+
46
+ .font-picker-scroll {
47
+ flex: 1 1 auto;
48
+ min-height: 0;
49
+ overflow-y: auto;
50
+ overscroll-behavior: contain;
51
+ }
52
+
53
+ /* No padding and no margin: an item's top is its index times the row
54
+ height, which the scroll arithmetic and the window read. */
55
+ .font-picker-list {
56
+ margin: 0;
57
+ padding: 0;
58
+ list-style: none;
59
+ }
60
+
61
+ .font-picker-gap {
62
+ margin: 0;
63
+ padding: 0;
64
+ }
65
+
66
+ /* A section head is a list item of the row height, in the caps label. */
67
+ .font-picker-head {
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: space-between;
71
+ height: var(--font-picker-row-h);
72
+ padding: 0 var(--space-6);
73
+ }
74
+
75
+ .font-picker-num {
76
+ font-family: var(--font-numeric);
77
+ font-variant-numeric: var(--numeric);
78
+ }
79
+
80
+ .font-picker-note {
81
+ display: flex;
82
+ align-items: center;
83
+ gap: var(--space-4);
84
+ height: var(--font-picker-row-h);
85
+ padding: 0 var(--space-6);
86
+ font-size: var(--type-md);
87
+ line-height: var(--leading-xs);
88
+ color: var(--ink-3);
89
+ }
90
+
91
+ /* An option: the menu row's anatomy at the list's fixed height. The check
92
+ lane, the family in its own face, the tag. The active option (the
93
+ arrows' or the pointer's) wears the menu's quiet wash; its words keep
94
+ their ink. */
95
+ .font-picker-row {
96
+ display: flex;
97
+ align-items: center;
98
+ gap: var(--space-4);
99
+ height: var(--font-picker-row-h);
100
+ margin: 0 var(--space-3);
101
+ padding: 0 var(--space-4);
102
+ border-radius: var(--radius-sm);
103
+ color: var(--ink-1);
104
+ cursor: default;
105
+ user-select: none;
106
+ }
107
+
108
+ .font-picker-row.is-active {
109
+ background: var(--accent-quiet);
110
+ }
111
+
112
+ .font-picker-check {
113
+ flex: none;
114
+ display: inline-flex;
115
+ justify-content: center;
116
+ width: 16px;
117
+ color: var(--accent-ink);
118
+ }
119
+
120
+ .font-picker-check > svg {
121
+ width: 12px;
122
+ height: 12px;
123
+ }
124
+
125
+ .font-picker-name {
126
+ flex: 1;
127
+ min-width: 0;
128
+ overflow: hidden;
129
+ text-overflow: ellipsis;
130
+ white-space: nowrap;
131
+ font-size: var(--type-title);
132
+ line-height: var(--leading-md);
133
+ }
134
+
135
+ /* Its face still on its way: the name in Inter, in the third ink. */
136
+ .font-picker-row.is-loading .font-picker-name {
137
+ color: var(--ink-3);
138
+ }
139
+
140
+ .font-picker-count {
141
+ flex: none;
142
+ font-size: var(--type-sm);
143
+ line-height: var(--leading-xs);
144
+ color: var(--ink-3);
145
+ }
146
+
147
+ .font-picker-machine {
148
+ flex: none;
149
+ font-size: var(--type-sm);
150
+ line-height: var(--leading-xs);
151
+ color: var(--warn);
152
+ }
153
+
154
+ /* The loading ring: it turns only where motion is wanted, and stands still
155
+ otherwise, so the row says "loading" by its shape as well as its ink. */
156
+ .font-picker-spinner {
157
+ flex: none;
158
+ width: 10px;
159
+ height: 10px;
160
+ border: 1.5px solid var(--line-strong);
161
+ border-top-color: var(--ink-2);
162
+ border-radius: var(--radius-full);
163
+ }
164
+
165
+ @media (prefers-reduced-motion: no-preference) {
166
+ .font-picker-spinner {
167
+ animation: font-picker-turn 900ms linear infinite;
168
+ }
169
+ }
170
+
171
+ @keyframes font-picker-turn {
172
+ to {
173
+ transform: rotate(360deg);
174
+ }
175
+ }
176
+
177
+ .font-picker-foot {
178
+ flex: none;
179
+ display: flex;
180
+ align-items: center;
181
+ justify-content: space-between;
182
+ gap: var(--space-4);
183
+ padding: var(--space-2) var(--space-3) var(--space-2) var(--space-6);
184
+ border-top: 1px solid var(--line-soft);
185
+ }
186
+
187
+ .font-picker-keys {
188
+ display: inline-flex;
189
+ align-items: center;
190
+ gap: var(--space-2);
191
+ font-size: var(--type-sm);
192
+ line-height: var(--leading-xs);
193
+ color: var(--ink-3);
194
+ }
195
+
196
+ /* THE UPLOAD VIEW: Back and the title, the drop zone holding Choose file and
197
+ the accepted types, then the count, the reasons and the quiet lines. */
198
+ .font-picker-upload {
199
+ gap: var(--space-4);
200
+ padding: var(--space-4) var(--space-6) var(--space-6);
201
+ }
202
+
203
+ .font-picker-upload-head {
204
+ display: flex;
205
+ align-items: center;
206
+ gap: var(--space-4);
207
+ }
208
+
209
+ .font-picker-back > svg {
210
+ transform: rotate(180deg);
211
+ }
212
+
213
+ .font-picker-title {
214
+ font-size: var(--type-title);
215
+ line-height: var(--leading-md);
216
+ font-weight: var(--weight-medium);
217
+ color: var(--ink-1);
218
+ }
219
+
220
+ .font-picker-drop {
221
+ flex-direction: column;
222
+ }
223
+
224
+ /* Disabled with its reason under it: the words step down to the disabled
225
+ ink (Choose file dims itself, `aria-disabled`). */
226
+ .font-picker-drop.is-disabled > span {
227
+ color: var(--ink-disabled);
228
+ }
229
+
230
+ .font-picker-limits {
231
+ font-size: var(--type-sm);
232
+ line-height: var(--leading-xs);
233
+ }
234
+
235
+ .font-picker-line {
236
+ margin: 0;
237
+ font-size: var(--type-md);
238
+ line-height: var(--leading-xs);
239
+ color: var(--ink-2);
240
+ }
241
+
242
+ .font-picker-line.is-quiet {
243
+ color: var(--ink-3);
244
+ }
245
+
246
+ .font-picker-line.is-warn {
247
+ color: var(--warn);
248
+ }
249
+
250
+ .font-picker-retry {
251
+ align-self: flex-start;
252
+ }
253
+
254
+ .font-picker-manage {
255
+ align-self: flex-start;
256
+ font-size: var(--type-md);
257
+ line-height: var(--leading-xs);
258
+ color: var(--accent-ink);
259
+ text-decoration: none;
260
+ border-radius: var(--radius-xs);
261
+ }
262
+
263
+ .font-picker-manage:hover {
264
+ text-decoration: underline;
265
+ }
266
+
267
+ .font-picker-manage:focus-visible {
268
+ outline: none;
269
+ box-shadow: var(--focus-ring);
270
+ }
271
+ }