@remotion/studio 4.0.526 → 4.0.528

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 (309) hide show
  1. package/dist/components/AgentPrompt.js +1 -2
  2. package/dist/components/AudioWaveform.d.ts +1 -0
  3. package/dist/components/AudioWaveform.js +10 -14
  4. package/dist/components/Canvas.js +88 -26
  5. package/dist/components/CanvasCaptureDropHandler.js +63 -0
  6. package/dist/components/CanvasOrLoading.js +10 -2
  7. package/dist/components/CodeFrame.js +1 -1
  8. package/dist/components/ColorPicker/checker.d.ts +1 -1
  9. package/dist/components/CompositionSelectorItem.js +1 -0
  10. package/dist/components/CurrentAsset.js +4 -2
  11. package/dist/components/EditorRuler/Ruler.js +6 -3
  12. package/dist/components/EffectPickerModal.js +69 -43
  13. package/dist/components/ElementInstallConfirmation.js +3 -3
  14. package/dist/components/ElementLibrariesSettings.d.ts +2 -0
  15. package/dist/components/ElementLibrariesSettings.js +200 -0
  16. package/dist/components/InitialCompositionLoader.js +4 -2
  17. package/dist/components/InlineDropdown.js +26 -2
  18. package/dist/components/InlineEditableTitle.js +1 -0
  19. package/dist/components/InspectorOpenInEditor.js +13 -0
  20. package/dist/components/InspectorPanel/AlignmentControls.js +28 -9
  21. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +2 -1
  22. package/dist/components/InspectorPanel/CompositionInspector.js +3 -3
  23. package/dist/components/InspectorPanel/CompositionMetadata.js +4 -0
  24. package/dist/components/InspectorPanel/EasingInspector.js +6 -2
  25. package/dist/components/InspectorPanel/ElementLibraryButton.js +2 -1
  26. package/dist/components/InspectorPanel/KeyframeEasingNavigator.js +1 -1
  27. package/dist/components/InspectorPanel/KeyframeInspector.js +28 -24
  28. package/dist/components/InspectorPanel/MultiSequenceInspector.js +32 -1
  29. package/dist/components/InspectorPanel/MultiSequenceNumberField.js +1 -1
  30. package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -1
  31. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +70 -2
  32. package/dist/components/InspectorPanel/SequenceWrapAction.d.ts +8 -0
  33. package/dist/components/InspectorPanel/SequenceWrapAction.js +151 -0
  34. package/dist/components/InspectorPanel/common.js +1 -0
  35. package/dist/components/InspectorPanel/easing-inspector-selection.d.ts +2 -1
  36. package/dist/components/InspectorPanel/easing-inspector-selection.js +4 -3
  37. package/dist/components/InspectorPanel/keyframe-inspector-frame.d.ts +2 -1
  38. package/dist/components/InspectorPanel/keyframe-inspector-frame.js +2 -2
  39. package/dist/components/InspectorPanel/styles.js +2 -0
  40. package/dist/components/InspectorPanel/use-composition-actions.js +1 -0
  41. package/dist/components/InspectorSequenceSection.d.ts +1 -0
  42. package/dist/components/InspectorSequenceSection.js +7 -5
  43. package/dist/components/InspectorSourceLocation.js +3 -0
  44. package/dist/components/KeyboardShortcutsSettings.js +1 -1
  45. package/dist/components/Menu/styles.d.ts +2 -2
  46. package/dist/components/MenuBuildIndicator.js +1 -0
  47. package/dist/components/Modals.js +7 -6
  48. package/dist/components/ModelManager.js +10 -9
  49. package/dist/components/NewComposition/CancelButton.js +11 -5
  50. package/dist/components/NewComposition/InputDragger.d.ts +3 -1
  51. package/dist/components/NewComposition/InputDragger.js +28 -9
  52. package/dist/components/NewComposition/NewComposition.js +7 -6
  53. package/dist/components/NewComposition/RemInput.d.ts +1 -1
  54. package/dist/components/NewComposition/menu-typeahead.js +1 -1
  55. package/dist/components/Preview.js +4 -0
  56. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -0
  57. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -0
  58. package/dist/components/RadioButton.js +1 -0
  59. package/dist/components/RenderModal/DataEditor.js +4 -1
  60. package/dist/components/RenderModal/SchemaEditor/create-zod-values.js +1 -2
  61. package/dist/components/RenderModal/WebRenderModalPicture.js +1 -2
  62. package/dist/components/RenderQueue/CaptionQueueItem.js +19 -7
  63. package/dist/components/RenderQueue/CaptionQueueProcessor.js +65 -15
  64. package/dist/components/RenderQueue/QueueJobError.d.ts +8 -0
  65. package/dist/components/RenderQueue/QueueJobError.js +24 -0
  66. package/dist/components/RenderQueue/QueueJobErrorModal.d.ts +8 -0
  67. package/dist/components/RenderQueue/QueueJobErrorModal.js +63 -0
  68. package/dist/components/RenderQueue/RenderQueueItemCancelButton.d.ts +3 -1
  69. package/dist/components/RenderQueue/RenderQueueItemCancelButton.js +11 -4
  70. package/dist/components/RenderQueue/RenderQueueRepeat.d.ts +3 -1
  71. package/dist/components/RenderQueue/RenderQueueRepeat.js +20 -3
  72. package/dist/components/RenderQueue/VideoMattingQueueItem.js +25 -27
  73. package/dist/components/RenderQueue/VideoMattingQueueProcessor.js +68 -28
  74. package/dist/components/RenderQueue/caption-job-types.d.ts +9 -1
  75. package/dist/components/RenderQueue/context.d.ts +4 -0
  76. package/dist/components/RenderQueue/context.js +58 -8
  77. package/dist/components/RenderQueue/index.js +3 -3
  78. package/dist/components/RenderQueue/load-model-for-job.d.ts +2 -1
  79. package/dist/components/RenderQueue/load-model-for-job.js +5 -1
  80. package/dist/components/RenderQueue/video-matting-job-types.d.ts +13 -6
  81. package/dist/components/RendersTab.js +2 -0
  82. package/dist/components/SelectedOutlineCropControls.js +2 -1
  83. package/dist/components/SelectedOutlineEditingHandles.js +9 -2
  84. package/dist/components/SelectedOutlineElement.js +9 -3
  85. package/dist/components/SelectedOutlineKeyboardControls.d.ts +2 -4
  86. package/dist/components/SelectedOutlineKeyboardControls.js +4 -22
  87. package/dist/components/SelectedOutlineOverlay.js +152 -106
  88. package/dist/components/SelectedOutlinePathPoints.d.ts +8 -0
  89. package/dist/components/SelectedOutlinePathPoints.js +433 -0
  90. package/dist/components/SelectedOutlinePolygon.js +21 -46
  91. package/dist/components/SelectedOutlineRenderer.d.ts +3 -5
  92. package/dist/components/SelectedOutlineRenderer.js +32 -136
  93. package/dist/components/SelectedOutlineSnapIndicators.d.ts +6 -0
  94. package/dist/components/SelectedOutlineSnapIndicators.js +16 -12
  95. package/dist/components/SelectedOutlineTransformOriginHandle.js +3 -2
  96. package/dist/components/SelectedOutlineUvControls.js +12 -7
  97. package/dist/components/SequencePropsSubscriptionProvider.d.ts +3 -0
  98. package/dist/components/SequencePropsSubscriptionProvider.js +8 -6
  99. package/dist/components/SettingsModal.js +30 -3
  100. package/dist/components/SettingsModalFooter.d.ts +1 -0
  101. package/dist/components/SettingsModalFooter.js +7 -3
  102. package/dist/components/ShowOutlinesProvider.js +1 -1
  103. package/dist/components/SkillsSettings.d.ts +0 -1
  104. package/dist/components/SkillsSettings.js +13 -14
  105. package/dist/components/Splitter/SplitterElement.js +1 -2
  106. package/dist/components/TimeValue.js +1 -1
  107. package/dist/components/Timeline/LoopedTimelineIndicators.d.ts +1 -0
  108. package/dist/components/Timeline/LoopedTimelineIndicators.js +7 -6
  109. package/dist/components/Timeline/TimelineArrayField.js +1 -1
  110. package/dist/components/Timeline/TimelineClipboardKeybindings.js +0 -1
  111. package/dist/components/Timeline/TimelineColorField.js +1 -1
  112. package/dist/components/Timeline/TimelineDeleteKeybindings.js +6 -9
  113. package/dist/components/Timeline/TimelineDragHandler.js +1 -1
  114. package/dist/components/Timeline/TimelineEffectItem.js +1 -0
  115. package/dist/components/Timeline/TimelineEffectPropItem.d.ts +1 -0
  116. package/dist/components/Timeline/TimelineEffectPropItem.js +12 -5
  117. package/dist/components/Timeline/TimelineExpandArrowButton.js +1 -0
  118. package/dist/components/Timeline/TimelineExpandedRow.d.ts +1 -0
  119. package/dist/components/Timeline/TimelineExpandedRow.js +6 -4
  120. package/dist/components/Timeline/TimelineExpandedSection.d.ts +1 -0
  121. package/dist/components/Timeline/TimelineExpandedSection.js +2 -2
  122. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.d.ts +1 -0
  123. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +3 -1
  124. package/dist/components/Timeline/TimelineFieldLabel.js +1 -0
  125. package/dist/components/Timeline/TimelineFontFamilyField.js +12 -12
  126. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +1 -0
  127. package/dist/components/Timeline/TimelineKeyframeControls.js +40 -28
  128. package/dist/components/Timeline/TimelineLayerChildren.js +1 -1
  129. package/dist/components/Timeline/TimelineList.js +1 -1
  130. package/dist/components/Timeline/TimelineNumberField.js +2 -4
  131. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +1 -1
  132. package/dist/components/Timeline/TimelineSelection.d.ts +9 -9
  133. package/dist/components/Timeline/TimelineSelection.js +16 -9
  134. package/dist/components/Timeline/TimelineSequence.d.ts +3 -1
  135. package/dist/components/Timeline/TimelineSequence.js +65 -21
  136. package/dist/components/Timeline/TimelineSequenceFrame.js +1 -0
  137. package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
  138. package/dist/components/Timeline/TimelineSequenceItem.js +46 -8
  139. package/dist/components/Timeline/TimelineSequencePropItem.d.ts +3 -0
  140. package/dist/components/Timeline/TimelineSequencePropItem.js +262 -25
  141. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +11 -13
  142. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +98 -77
  143. package/dist/components/Timeline/TimelineTextContentField.js +27 -4
  144. package/dist/components/Timeline/TimelineTimeIndicators.js +10 -5
  145. package/dist/components/Timeline/TimelineTrack.js +1 -1
  146. package/dist/components/Timeline/TimelineTrimTooltip.d.ts +11 -0
  147. package/dist/components/Timeline/TimelineTrimTooltip.js +41 -0
  148. package/dist/components/Timeline/TimelineVideoInfo.d.ts +1 -0
  149. package/dist/components/Timeline/TimelineVideoInfo.js +13 -10
  150. package/dist/components/Timeline/TimelineViewport.d.ts +1 -0
  151. package/dist/components/Timeline/TimelineViewport.js +10 -1
  152. package/dist/components/Timeline/delete-selected-keyframe.js +22 -8
  153. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +1 -5
  154. package/dist/components/Timeline/delete-selected-timeline-item.js +9 -95
  155. package/dist/components/Timeline/get-animation-item-selection-for-frame.d.ts +2 -1
  156. package/dist/components/Timeline/get-animation-item-selection-for-frame.js +7 -5
  157. package/dist/components/Timeline/get-keyframed-sequence-drag-targets.d.ts +23 -0
  158. package/dist/components/Timeline/get-keyframed-sequence-drag-targets.js +57 -0
  159. package/dist/components/Timeline/get-node-keyframes.d.ts +2 -1
  160. package/dist/components/Timeline/get-node-keyframes.js +6 -4
  161. package/dist/components/Timeline/get-playback-rate-keyframe-changes.d.ts +21 -0
  162. package/dist/components/Timeline/get-playback-rate-keyframe-changes.js +142 -0
  163. package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +3 -1
  164. package/dist/components/Timeline/get-sequence-context-menu-items.js +13 -1
  165. package/dist/components/Timeline/get-timeline-keyframes.d.ts +15 -2
  166. package/dist/components/Timeline/get-timeline-keyframes.js +44 -6
  167. package/dist/components/Timeline/keyframe-clipboard.js +17 -3
  168. package/dist/components/Timeline/split-selected-timeline-item.d.ts +13 -10
  169. package/dist/components/Timeline/split-selected-timeline-item.js +61 -35
  170. package/dist/components/Timeline/timeline-field-display-utils.js +1 -0
  171. package/dist/components/Timeline/timeline-field-row-layout.js +1 -0
  172. package/dist/components/Timeline/use-delete-timeline-items.js +17 -11
  173. package/dist/components/Timeline/use-expanded-track-keyframe-rows.d.ts +2 -1
  174. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +3 -1
  175. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +7 -3
  176. package/dist/components/Timeline/use-timeline-keyframe-drag.js +28 -19
  177. package/dist/components/TimelineCombobox.js +1 -0
  178. package/dist/components/Transcription/Models.js +1 -1
  179. package/dist/components/Transcription/TranscriptionModal.js +18 -11
  180. package/dist/components/Transcription/TranscriptionModalWithOptionalWhisper.js +1 -1
  181. package/dist/components/Transcription/resample-media-to-16-khz.d.ts +2 -1
  182. package/dist/components/Transcription/resample-media-to-16-khz.js +20 -2
  183. package/dist/components/UpdatesSettings.js +2 -0
  184. package/dist/components/VideoMatting/Models.js +1 -1
  185. package/dist/components/VideoMatting/VideoMattingModal.js +30 -47
  186. package/dist/components/VideoMatting/VideoMattingModalWithOptionalPackage.js +1 -1
  187. package/dist/components/WebMcp.js +23 -40
  188. package/dist/components/composition-drop-preview.d.ts +9 -2
  189. package/dist/components/composition-drop-preview.js +8 -4
  190. package/dist/components/composition-menu-items.js +4 -4
  191. package/dist/components/delete-jsx-nodes-api.d.ts +2 -0
  192. package/dist/components/{delete-jsx-node-api.js → delete-jsx-nodes-api.js} +5 -5
  193. package/dist/components/effect-drag-and-drop.d.ts +13 -5
  194. package/dist/components/effect-drag-and-drop.js +19 -4
  195. package/dist/components/get-open-in-menu-items.d.ts +2 -1
  196. package/dist/components/get-open-in-menu-items.js +24 -8
  197. package/dist/components/keyboard-shortcuts.d.ts +4 -4
  198. package/dist/components/keyboard-shortcuts.js +3 -1
  199. package/dist/components/public-output-name.d.ts +1 -0
  200. package/dist/components/public-output-name.js +7 -3
  201. package/dist/components/selected-outline-drag.d.ts +1 -6
  202. package/dist/components/selected-outline-drag.js +22 -6
  203. package/dist/components/selected-outline-geometry.d.ts +2 -18
  204. package/dist/components/selected-outline-measurement.d.ts +23 -41
  205. package/dist/components/selected-outline-measurement.js +14 -252
  206. package/dist/components/selected-outline-order.d.ts +4 -11
  207. package/dist/components/selected-outline-order.js +2 -254
  208. package/dist/components/selected-outline-snap.d.ts +1 -1
  209. package/dist/components/selected-outline-snap.js +2 -1
  210. package/dist/components/selected-outline-types.d.ts +18 -28
  211. package/dist/components/selected-outline-uv.d.ts +4 -4
  212. package/dist/components/selected-outline-uv.js +6 -111
  213. package/dist/components/sequence-props-api.js +0 -10
  214. package/dist/components/use-selected-outline-control-target.js +12 -21
  215. package/dist/components/wrap-jsx-node-api.d.ts +2 -0
  216. package/dist/components/wrap-jsx-node-api.js +13 -0
  217. package/dist/error-overlay/remotion-overlay/OpenInEditor.js +45 -2
  218. package/dist/error-overlay/remotion-overlay/StackFrame.js +32 -3
  219. package/dist/esm/{CaptionQueueProcessor-k0yrm3dj.mjs → CaptionQueueProcessor-nr7hjcga.mjs} +96 -19
  220. package/dist/esm/LazyModels-ajkn7fs3.mjs +12 -0
  221. package/dist/esm/LazyModels-g1g7cf4e.mjs +12 -0
  222. package/dist/esm/{TranscriptionModal-ymnx1c7m.mjs → TranscriptionModal-e18bzbkb.mjs} +30 -22
  223. package/dist/esm/{VideoMattingModal-05vpczks.mjs → VideoMattingModal-5bz2s4rs.mjs} +47 -62
  224. package/dist/esm/{VideoMattingQueueProcessor-t1hgm2rm.mjs → VideoMattingQueueProcessor-4tkj0f4k.mjs} +69 -26
  225. package/dist/esm/{index-v4tr1bft.mjs → index-09txs1bj.mjs} +5 -0
  226. package/dist/esm/{index-4dsz9035.mjs → index-5ycb9e9q.mjs} +2 -4
  227. package/dist/esm/index-890dd9b3.mjs +768 -0
  228. package/dist/esm/{index-5bfxbpca.mjs → index-8nt6a0mw.mjs} +3 -3
  229. package/dist/esm/{index-5gd8k9yv.mjs → index-9q9w8v9p.mjs} +3 -3
  230. package/dist/esm/{index-x40wwfmt.mjs → index-c2wabcdt.mjs} +8 -6
  231. package/dist/esm/index-dfy1t576.mjs +129 -0
  232. package/dist/esm/index-dh3zk2hv.mjs +220 -0
  233. package/dist/esm/{index-0gewwxse.mjs → index-dpyss74p.mjs} +6179 -5011
  234. package/dist/esm/{index-9x6e1dq0.mjs → index-hqxc6tzp.mjs} +40 -6
  235. package/dist/esm/{index-cdy8v54v.mjs → index-qve7mdfp.mjs} +36 -539
  236. package/dist/esm/{index-eb5txqp6.mjs → index-s6qya2gg.mjs} +8 -88
  237. package/dist/esm/index-t7tbt980.mjs +103 -0
  238. package/dist/esm/{index-g7k2dvar.mjs → index-t7xnxdf8.mjs} +44 -26
  239. package/dist/esm/index-wqc43mw0.mjs +158 -0
  240. package/dist/esm/{index-bs39wngg.mjs → index-x6r9bn12.mjs} +5623 -6218
  241. package/dist/esm/{index-f97r9e2g.mjs → index-xac20sv4.mjs} +46 -57
  242. package/dist/esm/index.mjs +4 -4
  243. package/dist/esm/internals.mjs +13 -10
  244. package/dist/esm/previewEntry.mjs +18 -12
  245. package/dist/esm/renderEntry.mjs +5 -1
  246. package/dist/esm/{resolve-composition-component-location-bt2d6qxq.mjs → resolve-composition-component-location-2hgf6g0a.mjs} +1 -1
  247. package/dist/helpers/calculate-timeline.d.ts +5 -1
  248. package/dist/helpers/calculate-timeline.js +1 -1
  249. package/dist/helpers/checkerboard-background.d.ts +2 -2
  250. package/dist/helpers/colors.d.ts +132 -112
  251. package/dist/helpers/colors.js +117 -95
  252. package/dist/helpers/copy-text.js +1 -16
  253. package/dist/helpers/create-folder-tree.js +2 -1
  254. package/dist/helpers/editor-guide-selection.d.ts +1 -1
  255. package/dist/helpers/editor-ruler.js +23 -12
  256. package/dist/helpers/get-connected-compositions.d.ts +6 -1
  257. package/dist/helpers/get-connected-compositions.js +1 -1
  258. package/dist/helpers/get-sequence-double-click-action.js +1 -1
  259. package/dist/helpers/get-sequence-visible-range.d.ts +1 -1
  260. package/dist/helpers/get-sequence-visible-range.js +2 -5
  261. package/dist/helpers/get-timeline-nestedness.d.ts +1 -1
  262. package/dist/helpers/get-timeline-nestedness.js +1 -1
  263. package/dist/helpers/get-timeline-sequence-sort-key.d.ts +1 -1
  264. package/dist/helpers/get-timeline-sequence-sort-key.js +1 -1
  265. package/dist/helpers/hoverable.js +6 -5
  266. package/dist/helpers/inject-css.js +5 -7
  267. package/dist/helpers/open-in-editor.js +1 -1
  268. package/dist/helpers/prism-vsc-dark-plus.d.ts +1 -1
  269. package/dist/helpers/prism-vsc-dark-plus.js +52 -51
  270. package/dist/helpers/resolve-studio-color.d.ts +1 -0
  271. package/dist/helpers/resolve-studio-color.js +11 -0
  272. package/dist/helpers/studio-css-variables.d.ts +1 -0
  273. package/dist/helpers/studio-css-variables.js +105 -0
  274. package/dist/helpers/studio-pixel-ratio.d.ts +1 -0
  275. package/dist/helpers/studio-pixel-ratio.js +7 -0
  276. package/dist/helpers/studio-runtime-config.d.ts +1 -1
  277. package/dist/helpers/timeline-node-path-key.d.ts +1 -1
  278. package/dist/helpers/timeline-node-path-key.js +2 -2
  279. package/dist/helpers/use-keybinding.d.ts +1 -1
  280. package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -2
  281. package/dist/helpers/use-menu-structure.js +15 -9
  282. package/dist/helpers/use-runtime-values.js +2 -28
  283. package/dist/hot-middleware-client/client.js +5 -3
  284. package/dist/icons/align-center-horizontal.js +2 -1
  285. package/dist/icons/align-left.js +2 -1
  286. package/dist/icons/align-right.js +2 -1
  287. package/dist/icons/{separation.d.ts → background-removal.d.ts} +1 -1
  288. package/dist/icons/background-removal.js +9 -0
  289. package/dist/icons/wrap.d.ts +4 -0
  290. package/dist/icons/wrap.js +10 -0
  291. package/dist/previewEntry.js +2 -0
  292. package/dist/renderEntry.js +2 -0
  293. package/dist/state/modals.d.ts +20 -1
  294. package/dist/state/timeline-sequence-hover.d.ts +6 -16
  295. package/dist/state/timeline-sequence-hover.js +6 -67
  296. package/dist/state/timeline-zoom.js +4 -0
  297. package/package.json +20 -19
  298. package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.d.ts +0 -15
  299. package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.js +0 -31
  300. package/dist/components/delete-jsx-node-api.d.ts +0 -2
  301. package/dist/esm/LazyModels-mtggyjye.mjs +0 -11
  302. package/dist/esm/LazyModels-nk7py0zt.mjs +0 -11
  303. package/dist/esm/index-cw0pnpg5.mjs +0 -50
  304. package/dist/esm/index-k426ye99.mjs +0 -139
  305. package/dist/helpers/get-box-quads-polyfill-internals.d.ts +0 -82
  306. package/dist/helpers/get-box-quads-polyfill-internals.js +0 -2403
  307. package/dist/helpers/get-box-quads-ponyfill.d.ts +0 -10
  308. package/dist/helpers/get-box-quads-ponyfill.js +0 -23
  309. package/dist/icons/separation.js +0 -7
@@ -476,6 +476,7 @@ const WebMcp = () => {
476
476
  model: model.name,
477
477
  noRepeatNgramSize,
478
478
  outName: outputPath,
479
+ target: null,
479
480
  repetitionPenalty,
480
481
  requestInit: null,
481
482
  src,
@@ -488,9 +489,9 @@ const WebMcp = () => {
488
489
  },
489
490
  }, { signal: controller.signal }),
490
491
  modelContext.registerTool({
491
- name: 'separate_video_layers',
492
- title: 'Separate Studio video layers',
493
- description: 'Separate a video asset from the public folder into background and foreground WebM files and add the work to the Jobs queue. If assetPath is omitted, the asset currently open in Studio is used.',
492
+ name: 'remove_video_background',
493
+ title: 'Remove video background',
494
+ description: 'Remove the background from a video asset in the public folder and add the work to the Jobs queue. If assetPath is omitted, the asset currently open in Studio is used.',
494
495
  inputSchema: {
495
496
  type: 'object',
496
497
  properties: {
@@ -498,13 +499,9 @@ const WebMcp = () => {
498
499
  type: 'string',
499
500
  description: 'Optional path relative to public/. Defaults to the asset currently open in Studio.',
500
501
  },
501
- baseOutputPath: {
502
- type: 'string',
503
- description: 'Optional background output path relative to public/.',
504
- },
505
- foregroundOutputPath: {
502
+ outputPath: {
506
503
  type: 'string',
507
- description: 'Optional foreground output path relative to public/.',
504
+ description: 'Optional transparent video output path relative to public/.',
508
505
  },
509
506
  model: {
510
507
  type: 'string',
@@ -512,8 +509,8 @@ const WebMcp = () => {
512
509
  },
513
510
  audio: {
514
511
  type: 'string',
515
- enum: ['base', 'foreground', 'both', 'none'],
516
- default: 'base',
512
+ enum: ['keep', 'none'],
513
+ default: 'keep',
517
514
  },
518
515
  videoBitrate: {
519
516
  oneOf: [
@@ -531,7 +528,7 @@ const WebMcp = () => {
531
528
  annotations: { readOnlyHint: false },
532
529
  execute: async (input) => {
533
530
  var _a;
534
- var _b, _c, _d, _e, _f, _g, _h;
531
+ var _b, _c, _d, _e, _f;
535
532
  if (!(0, OptionalPackageModal_1.isOptionalPackageInstalled)(video_matting_capability_1.VIDEO_MATTING_PACKAGE)) {
536
533
  return missingOptionalPackageResult(video_matting_capability_1.VIDEO_MATTING_PACKAGE);
537
534
  }
@@ -541,7 +538,7 @@ const WebMcp = () => {
541
538
  staticFiles: staticFilesRef.current,
542
539
  });
543
540
  if ((0, get_preview_file_type_1.getPreviewFileType)(assetPath) !== 'video') {
544
- throw new Error('The separation asset must be a video.');
541
+ throw new Error('The input asset must be a video.');
545
542
  }
546
543
  const videoMatting = await Promise.resolve().then(() => __importStar(require('@remotion/video-matting')));
547
544
  const modelName = (_b = input.model) !== null && _b !== void 0 ? _b : 'ben2-base';
@@ -554,12 +551,9 @@ const WebMcp = () => {
554
551
  if (!model) {
555
552
  throw new Error(`Unknown video matting model: ${modelName}.`);
556
553
  }
557
- const audio = (_c = input.audio) !== null && _c !== void 0 ? _c : 'base';
558
- if (audio !== 'base' &&
559
- audio !== 'foreground' &&
560
- audio !== 'both' &&
561
- audio !== 'none') {
562
- throw new Error('audio must be base, foreground, both, or none.');
554
+ const audio = (_c = input.audio) !== null && _c !== void 0 ? _c : 'keep';
555
+ if (audio !== 'keep' && audio !== 'none') {
556
+ throw new Error('audio must be keep or none.');
563
557
  }
564
558
  const videoBitrate = (_d = input.videoBitrate) !== null && _d !== void 0 ? _d : 'very-high';
565
559
  if ((typeof videoBitrate !== 'number' ||
@@ -575,39 +569,28 @@ const WebMcp = () => {
575
569
  const src = (0, remotion_1.staticFile)(assetPath);
576
570
  const displayName = (_e = assetPath.split('/').at(-1)) !== null && _e !== void 0 ? _e : assetPath;
577
571
  const baseName = (0, public_output_name_1.getDefaultOutputBaseName)(src, displayName, 'video');
578
- const baseOutputPath = (_f = input.baseOutputPath) !== null && _f !== void 0 ? _f : `${baseName}-base.webm`;
579
- const foregroundOutputPath = (_g = input.foregroundOutputPath) !== null && _g !== void 0 ? _g : `${baseName}-foreground.webm`;
580
- if (typeof baseOutputPath !== 'string' ||
581
- typeof foregroundOutputPath !== 'string') {
582
- throw new Error('Output paths must be strings.');
572
+ const outputPath = (_f = input.outputPath) !== null && _f !== void 0 ? _f : `${baseName}-no-background.webm`;
573
+ if (typeof outputPath !== 'string') {
574
+ throw new Error('Output path must be a string.');
583
575
  }
584
- const baseError = (0, public_output_name_1.validatePublicOutputName)({
585
- extension: '.webm',
586
- outName: baseOutputPath,
587
- });
588
- const foregroundError = (0, public_output_name_1.validatePublicOutputName)({
576
+ const outputError = (0, public_output_name_1.validatePublicOutputName)({
589
577
  extension: '.webm',
590
- outName: foregroundOutputPath,
578
+ outName: outputPath,
591
579
  });
592
- if (baseError !== null || foregroundError !== null) {
593
- throw new Error((_h = baseError !== null && baseError !== void 0 ? baseError : foregroundError) !== null && _h !== void 0 ? _h : 'Invalid output path.');
594
- }
595
- if (baseOutputPath.normalize('NFC').toLowerCase() ===
596
- foregroundOutputPath.normalize('NFC').toLowerCase()) {
597
- throw new Error('Background and foreground outputs must be different.');
580
+ if (outputError !== null) {
581
+ throw new Error(outputError);
598
582
  }
599
583
  const jobId = addVideoMattingJob({
600
584
  audio,
601
- baseOutName: baseOutputPath,
602
585
  displayName,
603
- foregroundOutName: foregroundOutputPath,
586
+ outName: outputPath,
604
587
  model,
605
588
  src,
589
+ target: null,
606
590
  videoBitrate,
607
591
  });
608
592
  return {
609
- baseOutputPath,
610
- foregroundOutputPath,
593
+ outputPath,
611
594
  jobId,
612
595
  success: true,
613
596
  };
@@ -1,5 +1,7 @@
1
1
  import type { PreviewSize } from 'remotion';
2
+ import type { Guide } from '../state/editor-guides';
2
3
  import { type InsertElementDropPosition } from './import-assets';
4
+ import { type SelectedOutlineSnapPoint } from './selected-outline-snap';
3
5
  type Dimensions = {
4
6
  readonly width: number;
5
7
  readonly height: number;
@@ -11,6 +13,7 @@ type CanvasSize = {
11
13
  export type CompositionDropPreview = {
12
14
  readonly compositionDimensions: Dimensions;
13
15
  readonly dropPosition: InsertElementDropPosition;
16
+ readonly snapPoints: readonly SelectedOutlineSnapPoint[];
14
17
  };
15
18
  export type CompositionDropPreviewBox = {
16
19
  readonly left: number;
@@ -18,12 +21,16 @@ export type CompositionDropPreviewBox = {
18
21
  readonly width: number;
19
22
  readonly height: number;
20
23
  };
21
- export declare const snapCompositionDropPosition: ({ compositionDimensions, destinationDimensions, dropPosition, scale, }: {
24
+ export declare const snapCompositionDropPosition: ({ compositionDimensions, destinationDimensions, dropPosition, guides, scale, }: {
22
25
  readonly compositionDimensions: Dimensions;
23
26
  readonly destinationDimensions: Dimensions;
24
27
  readonly dropPosition: InsertElementDropPosition;
28
+ readonly guides: readonly Guide[];
25
29
  readonly scale: number;
26
- }) => InsertElementDropPosition;
30
+ }) => {
31
+ readonly dropPosition: InsertElementDropPosition;
32
+ readonly snapPoints: readonly SelectedOutlineSnapPoint[];
33
+ };
27
34
  export declare const getCompositionDropPreviewBox: ({ canvasSize, destinationDimensions, preview, previewSize, }: {
28
35
  readonly canvasSize: CanvasSize;
29
36
  readonly destinationDimensions: Dimensions;
@@ -4,7 +4,7 @@ exports.getCompositionDropPreviewBox = exports.snapCompositionDropPosition = voi
4
4
  const studio_fit_padding_1 = require("../helpers/studio-fit-padding");
5
5
  const import_assets_1 = require("./import-assets");
6
6
  const selected_outline_snap_1 = require("./selected-outline-snap");
7
- const snapCompositionDropPosition = ({ compositionDimensions, destinationDimensions, dropPosition, scale, }) => {
7
+ const snapCompositionDropPosition = ({ compositionDimensions, destinationDimensions, dropPosition, guides, scale, }) => {
8
8
  var _a, _b;
9
9
  const left = dropPosition.centerX - compositionDimensions.width / 2;
10
10
  const top = dropPosition.centerY - compositionDimensions.height / 2;
@@ -14,6 +14,7 @@ const snapCompositionDropPosition = ({ compositionDimensions, destinationDimensi
14
14
  key: 'composition-drop-preview',
15
15
  dimensions: compositionDimensions,
16
16
  uncroppedPoints: null,
17
+ path: null,
17
18
  points: [
18
19
  { x: left * scale, y: top * scale },
19
20
  { x: right * scale, y: top * scale },
@@ -31,12 +32,15 @@ const snapCompositionDropPosition = ({ compositionDimensions, destinationDimensi
31
32
  targets: (0, selected_outline_snap_1.getSelectedOutlineSnapTargets)({
32
33
  compositionHeight: destinationDimensions.height,
33
34
  compositionWidth: destinationDimensions.width,
34
- guides: [],
35
+ guides,
35
36
  }),
36
37
  });
37
38
  return {
38
- centerX: dropPosition.centerX + ((_a = snap.snapOffsetX) !== null && _a !== void 0 ? _a : 0),
39
- centerY: dropPosition.centerY + ((_b = snap.snapOffsetY) !== null && _b !== void 0 ? _b : 0),
39
+ dropPosition: {
40
+ centerX: dropPosition.centerX + ((_a = snap.snapOffsetX) !== null && _a !== void 0 ? _a : 0),
41
+ centerY: dropPosition.centerY + ((_b = snap.snapOffsetY) !== null && _b !== void 0 ? _b : 0),
42
+ },
43
+ snapPoints: snap.activeSnapPoints,
40
44
  };
41
45
  };
42
46
  exports.snapCompositionDropPosition = snapCompositionDropPosition;
@@ -176,7 +176,7 @@ const getCompositionMenuItems = ({ composition, connectionStatus, resolvedLocati
176
176
  (0, get_git_menu_item_1.openGitSource)({ folder: false, location: resolvedLocation });
177
177
  }
178
178
  },
179
- quickSwitcherLabel: `Open composition in ${defaultOpenInName}`,
179
+ quickSwitcherLabel: `Composition: Open in ${defaultOpenInName}`,
180
180
  subMenu: null,
181
181
  type: 'item',
182
182
  value: defaultOpenInTarget === 'editor'
@@ -194,7 +194,7 @@ const getCompositionMenuItems = ({ composition, connectionStatus, resolvedLocati
194
194
  label: 'Open composition in...',
195
195
  leftItem: null,
196
196
  onClick: () => undefined,
197
- quickSwitcherLabel: null,
197
+ quickSwitcherLabel: 'Composition',
198
198
  subMenu: {
199
199
  items: compositionOpenInMenuItems,
200
200
  leaveLeftSpace: true,
@@ -220,7 +220,7 @@ const getCompositionMenuItems = ({ composition, connectionStatus, resolvedLocati
220
220
  openComponentInGitSource().catch(() => undefined);
221
221
  }
222
222
  },
223
- quickSwitcherLabel: `Open composition component in ${defaultOpenInName}`,
223
+ quickSwitcherLabel: `Component: Open in ${defaultOpenInName}`,
224
224
  subMenu: null,
225
225
  type: 'item',
226
226
  value: defaultOpenInTarget === 'editor'
@@ -238,7 +238,7 @@ const getCompositionMenuItems = ({ composition, connectionStatus, resolvedLocati
238
238
  label: 'Open component in...',
239
239
  leftItem: null,
240
240
  onClick: () => undefined,
241
- quickSwitcherLabel: null,
241
+ quickSwitcherLabel: 'Component',
242
242
  subMenu: {
243
243
  items: componentOpenInMenuItems,
244
244
  leaveLeftSpace: true,
@@ -0,0 +1,2 @@
1
+ import type { DeleteJsxNodesRequest, DeleteJsxNodesResponse } from '@remotion/studio-shared';
2
+ export declare const deleteJsxNodes: (request: DeleteJsxNodesRequest) => Promise<DeleteJsxNodesResponse>;
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deleteJsxNode = void 0;
3
+ exports.deleteJsxNodes = void 0;
4
4
  const browser_studio_operations_1 = require("../helpers/browser-studio-operations");
5
5
  const call_api_1 = require("./call-api");
6
- const deleteJsxNode = (request) => {
6
+ const deleteJsxNodes = (request) => {
7
7
  const browserStudioOperations = (0, browser_studio_operations_1.getBrowserStudioOperations)();
8
8
  return browserStudioOperations
9
- ? browserStudioOperations.deleteJsxNode(request)
10
- : (0, call_api_1.callApi)('/api/delete-jsx-node', request);
9
+ ? browserStudioOperations.deleteJsxNodes(request)
10
+ : (0, call_api_1.callApi)('/api/delete-jsx-nodes', request);
11
11
  };
12
- exports.deleteJsxNode = deleteJsxNode;
12
+ exports.deleteJsxNodes = deleteJsxNodes;
@@ -1,18 +1,26 @@
1
1
  import { type EffectDragData } from '@remotion/studio-protocol';
2
2
  import { type EffectDefinition } from '@remotion/studio-shared';
3
- import type { SequencePropsSubscriptionKey } from 'remotion';
3
+ import type { SequenceNodePathInfo } from '../helpers/get-timeline-sequence-sort-key';
4
4
  export declare const hasEffectDragType: (dataTransfer: DataTransfer) => boolean;
5
5
  export declare const hasExplicitEffectDragType: (dataTransfer: DataTransfer) => boolean;
6
6
  export declare const getEffectDragData: (dataTransfer: DataTransfer) => EffectDragData | null;
7
- export declare const addEffectFromDragData: ({ clientId, dragData, fileName, nodePath, }: {
7
+ export declare const addEffectFromDragData: ({ clientId, dragData, fileName, nodePathInfo, selectItems, }: {
8
8
  readonly clientId: string;
9
9
  readonly dragData: EffectDragData;
10
10
  readonly fileName: string;
11
- readonly nodePath: SequencePropsSubscriptionKey;
11
+ readonly nodePathInfo: SequenceNodePathInfo;
12
+ readonly selectItems: (items: readonly import("@remotion/canvas").CanvasSelectionItem[], options?: {
13
+ readonly reveal?: boolean | undefined;
14
+ readonly revealInInspector?: boolean | undefined;
15
+ } | undefined) => void;
12
16
  }) => Promise<void>;
13
- export declare const addEffectToSequence: ({ clientId, effect, fileName, nodePath, }: {
17
+ export declare const addEffectToSequence: ({ clientId, effect, fileName, nodePathInfo, selectItems, }: {
14
18
  readonly clientId: string;
15
19
  readonly effect: EffectDefinition;
16
20
  readonly fileName: string;
17
- readonly nodePath: SequencePropsSubscriptionKey;
21
+ readonly nodePathInfo: SequenceNodePathInfo;
22
+ readonly selectItems: (items: readonly import("@remotion/canvas").CanvasSelectionItem[], options?: {
23
+ readonly reveal?: boolean | undefined;
24
+ readonly revealInInspector?: boolean | undefined;
25
+ } | undefined) => void;
18
26
  }) => Promise<void>;
@@ -22,16 +22,17 @@ const getEffectDragData = (dataTransfer) => {
22
22
  return (parsed === null || parsed === void 0 ? void 0 : parsed.type) === 'effect' ? parsed.data : null;
23
23
  };
24
24
  exports.getEffectDragData = getEffectDragData;
25
- const addEffectFromDragData = ({ clientId, dragData, fileName, nodePath, }) => {
25
+ const addEffectFromDragData = ({ clientId, dragData, fileName, nodePathInfo, selectItems, }) => {
26
26
  return (0, exports.addEffectToSequence)({
27
27
  clientId,
28
28
  effect: dragData.effect,
29
29
  fileName,
30
- nodePath,
30
+ nodePathInfo,
31
+ selectItems,
31
32
  });
32
33
  };
33
34
  exports.addEffectFromDragData = addEffectFromDragData;
34
- const addEffectToSequence = async ({ clientId, effect, fileName, nodePath, }) => {
35
+ const addEffectToSequence = async ({ clientId, effect, fileName, nodePathInfo, selectItems, }) => {
35
36
  try {
36
37
  const requiredPackage = (0, studio_shared_1.getRequiredPackageForEffectImportPath)(effect.importPath);
37
38
  if ((0, browser_studio_operations_1.getBrowserStudioEffectOperations)() === null) {
@@ -39,7 +40,7 @@ const addEffectToSequence = async ({ clientId, effect, fileName, nodePath, }) =>
39
40
  }
40
41
  const result = await (0, effect_operations_api_1.addEffect)({
41
42
  fileName,
42
- sequenceNodePath: nodePath,
43
+ sequenceNodePath: nodePathInfo.sequenceSubscriptionKey,
43
44
  effectName: effect.name,
44
45
  effectImportPath: effect.importPath,
45
46
  effectConfig: effect.config,
@@ -47,7 +48,21 @@ const addEffectToSequence = async ({ clientId, effect, fileName, nodePath, }) =>
47
48
  });
48
49
  if (!result.success) {
49
50
  (0, NotificationCenter_1.showNotification)(result.reason, 4000);
51
+ return;
50
52
  }
53
+ selectItems([
54
+ {
55
+ type: 'sequence-effect',
56
+ nodePathInfo: {
57
+ ...nodePathInfo,
58
+ sequenceSubscriptionKey: {
59
+ ...nodePathInfo.sequenceSubscriptionKey,
60
+ nodePath: result.insertedEffect.nodePath,
61
+ },
62
+ },
63
+ i: result.insertedEffect.effectIndex,
64
+ },
65
+ ], { revealInInspector: true });
51
66
  }
52
67
  catch (err) {
53
68
  (0, NotificationCenter_1.showNotification)(err.message, 4000);
@@ -4,7 +4,7 @@ export declare const getConfigureDefaultAppsMenuItems: ({ hasPreviousItems, onCo
4
4
  readonly hasPreviousItems: boolean;
5
5
  readonly onConfigureApps: (() => void) | null;
6
6
  }) => ComboboxValue[];
7
- export declare const getOpenInMenuItems: ({ canOpenDesktopApps, codingAgentInfo, editorDisabled, editorInfo, excludeCodingAgentId, excludeEditorId, excludeGitSource, fileManagerDisabled, folder, gitSourceDisabled, onConfigureApps, onOpenInCodingAgent, onOpenInEditor, onOpenInFileExplorer, onOpenInGitClient, onOpenInGitSource, onOpenInTerminal, }: {
7
+ export declare const getOpenInMenuItems: ({ canOpenDesktopApps, codingAgentInfo, editorDisabled, editorInfo, excludeCodingAgentId, excludeEditorId, excludeGitSource, fileManagerDisabled, folder, gitSourceDisabled, onConfigureApps, onCopyPath, onOpenInCodingAgent, onOpenInEditor, onOpenInFileExplorer, onOpenInGitClient, onOpenInGitSource, onOpenInTerminal, }: {
8
8
  readonly canOpenDesktopApps: boolean;
9
9
  readonly codingAgentInfo: GetDefaultCodingAgentInfoResponse | null;
10
10
  readonly editorDisabled: boolean;
@@ -16,6 +16,7 @@ export declare const getOpenInMenuItems: ({ canOpenDesktopApps, codingAgentInfo,
16
16
  readonly folder: boolean;
17
17
  readonly gitSourceDisabled: boolean;
18
18
  readonly onConfigureApps: (() => void) | null;
19
+ readonly onCopyPath?: (() => void) | undefined;
19
20
  readonly onOpenInCodingAgent: (codingAgentId: "claude-code" | "codex" | "copilot" | "cursor", codingAgentName: string) => void;
20
21
  readonly onOpenInEditor: (editorId: EditorPickerId) => void;
21
22
  readonly onOpenInFileExplorer: () => void;
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getOpenInMenuItems = exports.getConfigureDefaultAppsMenuItems = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const no_react_1 = require("remotion/no-react");
6
+ const colors_1 = require("../helpers/colors");
6
7
  const get_file_manager_name_1 = require("../helpers/get-file-manager-name");
8
+ const clipboard_1 = require("../icons/clipboard");
7
9
  const editor_1 = require("../icons/editor");
8
10
  const finder_1 = require("../icons/finder");
9
11
  const git_client_1 = require("../icons/git-client");
@@ -16,6 +18,7 @@ const menuLabel = {
16
18
  fontSize: 13,
17
19
  lineHeight: '16px',
18
20
  };
21
+ const copyIcon = { height: 16, width: 16 };
19
22
  const getConfigureDefaultAppsMenuItems = ({ hasPreviousItems, onConfigureApps, }) => {
20
23
  if (!onConfigureApps) {
21
24
  return [];
@@ -30,7 +33,7 @@ const getConfigureDefaultAppsMenuItems = ({ hasPreviousItems, onConfigureApps, }
30
33
  label: jsx_runtime_1.jsx("span", { style: menuLabel, children: "Configure default apps..." }),
31
34
  leftItem: null,
32
35
  onClick: onConfigureApps,
33
- quickSwitcherLabel: null,
36
+ quickSwitcherLabel: 'Configure default apps...',
34
37
  subMenu: null,
35
38
  type: 'item',
36
39
  value: 'change-default-apps',
@@ -38,7 +41,7 @@ const getConfigureDefaultAppsMenuItems = ({ hasPreviousItems, onConfigureApps, }
38
41
  ];
39
42
  };
40
43
  exports.getConfigureDefaultAppsMenuItems = getConfigureDefaultAppsMenuItems;
41
- const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisabled, editorInfo, excludeCodingAgentId, excludeEditorId, excludeGitSource, fileManagerDisabled, folder, gitSourceDisabled, onConfigureApps, onOpenInCodingAgent, onOpenInEditor, onOpenInFileExplorer, onOpenInGitClient, onOpenInGitSource, onOpenInTerminal, }) => {
44
+ const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisabled, editorInfo, excludeCodingAgentId, excludeEditorId, excludeGitSource, fileManagerDisabled, folder, gitSourceDisabled, onConfigureApps, onCopyPath, onOpenInCodingAgent, onOpenInEditor, onOpenInFileExplorer, onOpenInGitClient, onOpenInGitSource, onOpenInTerminal, }) => {
42
45
  var _a, _b, _c, _d;
43
46
  const showFinder = canOpenDesktopApps && window.remotion_fileSystemPlatform === 'darwin';
44
47
  const fileManagerName = (0, get_file_manager_name_1.getFileManagerName)(window.remotion_fileSystemPlatform);
@@ -55,7 +58,7 @@ const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisable
55
58
  onOpenInEditor(editor.id);
56
59
  }
57
60
  },
58
- quickSwitcherLabel: null,
61
+ quickSwitcherLabel: `Open in ${editor.name}`,
59
62
  subMenu: null,
60
63
  type: 'item',
61
64
  value: editor.id,
@@ -68,7 +71,7 @@ const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisable
68
71
  label: jsx_runtime_1.jsx("span", { style: menuLabel, children: codingAgent.name }),
69
72
  leftItem: jsx_runtime_1.jsx(CodingAgentIcon_1.CodingAgentIcon, { codingAgentId: codingAgent.id, size: 18 }),
70
73
  onClick: () => onOpenInCodingAgent(codingAgent.id, codingAgent.nameWithType),
71
- quickSwitcherLabel: null,
74
+ quickSwitcherLabel: `Open in ${codingAgent.nameWithType}`,
72
75
  subMenu: null,
73
76
  type: 'item',
74
77
  value: `coding-agent-${codingAgent.id}`,
@@ -91,7 +94,7 @@ const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisable
91
94
  onOpenInGitSource();
92
95
  }
93
96
  },
94
- quickSwitcherLabel: null,
97
+ quickSwitcherLabel: 'Open in GitHub.com',
95
98
  subMenu: null,
96
99
  type: 'item',
97
100
  value: 'github',
@@ -111,12 +114,25 @@ const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisable
111
114
  onOpenInFileExplorer();
112
115
  }
113
116
  },
114
- quickSwitcherLabel: null,
117
+ quickSwitcherLabel: `Open in ${fileManagerName}`,
115
118
  subMenu: null,
116
119
  type: 'item',
117
120
  value: 'file-explorer',
118
121
  }
119
122
  : null,
123
+ onCopyPath
124
+ ? {
125
+ id: 'copy-path',
126
+ keyHint: null,
127
+ label: jsx_runtime_1.jsx("span", { style: menuLabel, children: "Copy path" }),
128
+ leftItem: jsx_runtime_1.jsx(clipboard_1.ClipboardIcon, { color: colors_1.LIGHT_TEXT, style: copyIcon }),
129
+ onClick: onCopyPath,
130
+ quickSwitcherLabel: 'Copy path',
131
+ subMenu: null,
132
+ type: 'item',
133
+ value: 'copy-path',
134
+ }
135
+ : null,
120
136
  ].filter(no_react_1.NoReactInternals.truthy);
121
137
  const hasCategorizedApps = editors.length > 0 ||
122
138
  codingAgents.length > 0 ||
@@ -156,7 +172,7 @@ const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisable
156
172
  label: jsx_runtime_1.jsx("span", { style: menuLabel, children: terminal.name }),
157
173
  leftItem: jsx_runtime_1.jsx(terminal_1.TerminalIcon, { terminalId: terminal.id, size: 18 }),
158
174
  onClick: () => onOpenInTerminal === null || onOpenInTerminal === void 0 ? void 0 : onOpenInTerminal(terminal.id),
159
- quickSwitcherLabel: null,
175
+ quickSwitcherLabel: `Open in ${terminal.name}`,
160
176
  subMenu: null,
161
177
  type: 'item',
162
178
  value: `terminal-${terminal.id}`,
@@ -176,7 +192,7 @@ const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisable
176
192
  label: jsx_runtime_1.jsx("span", { style: menuLabel, children: gitClient.name }),
177
193
  leftItem: jsx_runtime_1.jsx(git_client_1.GitClientIcon, { gitClientId: gitClient.id, size: 18 }),
178
194
  onClick: () => onOpenInGitClient(gitClient.id),
179
- quickSwitcherLabel: null,
195
+ quickSwitcherLabel: `Open in ${gitClient.name}`,
180
196
  subMenu: null,
181
197
  type: 'item',
182
198
  value: `git-client-${gitClient.id}`,
@@ -12,15 +12,15 @@ export type KeyboardShortcutGroup = {
12
12
  export declare const defaultKeyboardShortcuts: Record<StudioKeyboardShortcutAction, readonly StudioKeyboardShortcut[]>;
13
13
  export declare const keyboardShortcutGroups: readonly KeyboardShortcutGroup[];
14
14
  export declare const askAIKeyboardShortcutGroup: KeyboardShortcutGroup;
15
- export declare const getKeyboardShortcutsForAction: (action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut", configured?: Partial<Record<"askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut", StudioKeyboardShortcutValue>> | null) => readonly StudioKeyboardShortcut[];
15
+ export declare const getKeyboardShortcutsForAction: (action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "splitSequences" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut", configured?: Partial<Record<"askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "splitSequences" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut", StudioKeyboardShortcutValue>> | null) => readonly StudioKeyboardShortcut[];
16
16
  export declare const keyboardEventMatchesShortcut: ({ event, shortcut: value, }: {
17
17
  readonly event: KeyboardEvent;
18
18
  readonly shortcut: StudioKeyboardShortcut;
19
19
  }) => boolean;
20
20
  export declare const keyboardShortcutsOverlap: (first: StudioKeyboardShortcut, second: StudioKeyboardShortcut) => boolean;
21
- export declare const keyboardEventMatchesAction: (event: KeyboardEvent, action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut") => boolean;
21
+ export declare const keyboardEventMatchesAction: (event: KeyboardEvent, action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "splitSequences" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut") => boolean;
22
22
  export declare const formatKeyboardShortcut: (value: StudioKeyboardShortcut) => readonly string[];
23
23
  export declare const formatKeyboardShortcutForAria: (value: StudioKeyboardShortcut) => string;
24
- export declare const getKeyboardShortcutLabel: (action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut") => string;
25
- export declare const getKeyboardShortcutAriaKeyShortcuts: (action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut") => string;
24
+ export declare const getKeyboardShortcutLabel: (action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "splitSequences" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut") => string;
25
+ export declare const getKeyboardShortcutAriaKeyShortcuts: (action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "splitSequences" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut") => string;
26
26
  export declare const shortcutFromKeyboardEvent: (event: KeyboardEvent) => StudioKeyboardShortcut | null;
@@ -45,7 +45,8 @@ exports.defaultKeyboardShortcuts = {
45
45
  selectOpacityProp: [{ key: 't' }],
46
46
  selectRotateProp: [{ key: 'r', shift: false }],
47
47
  selectScaleProp: [{ key: 's' }],
48
- duplicateSequences: [{ key: 'd', commandOrControl: true }],
48
+ duplicateSequences: [{ key: 'd', commandOrControl: true, shift: false }],
49
+ splitSequences: [{ key: 'd', commandOrControl: true, shift: true }],
49
50
  copyEffectsAndValues: [{ key: 'c', commandOrControl: true }],
50
51
  cutEffects: [{ key: 'x', commandOrControl: true }],
51
52
  deleteSelection: [{ key: 'Backspace' }, { key: 'Delete' }],
@@ -136,6 +137,7 @@ exports.keyboardShortcutGroups = [
136
137
  shortcut('Select rotate prop', 'selectRotateProp'),
137
138
  shortcut('Select scale prop', 'selectScaleProp'),
138
139
  shortcut('Duplicate sequences', 'duplicateSequences'),
140
+ shortcut('Split sequences at playhead', 'splitSequences'),
139
141
  shortcut('Copy effects / values', 'copyEffectsAndValues'),
140
142
  shortcut('Cut effects', 'cutEffects'),
141
143
  fixedShortcut('Paste effects / values', [[is_mac_1.isMac ? '⌘' : 'Ctrl', 'V']], 'Handled by the browser clipboard event'),
@@ -1,3 +1,4 @@
1
+ export declare const getMediaFileName: (src: string, displayName: string) => string;
1
2
  export declare const getDefaultOutputBaseName: (src: string, displayName: string, fallbackName: string) => string;
2
3
  export declare const validatePublicOutputName: ({ extension, outName, }: {
3
4
  extension: string;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validatePublicOutputName = exports.getDefaultOutputBaseName = void 0;
3
+ exports.validatePublicOutputName = exports.getDefaultOutputBaseName = exports.getMediaFileName = void 0;
4
4
  const invalidCharacters = ['?', '*', '+', ':', '%'];
5
- const getDefaultOutputBaseName = (src, displayName, fallbackName) => {
5
+ const getMediaFileName = (src, displayName) => {
6
6
  var _a;
7
7
  let pathname = displayName;
8
8
  if (!/^(data|blob):/i.test(src.trimStart())) {
@@ -24,7 +24,11 @@ const getDefaultOutputBaseName = (src, displayName, fallbackName) => {
24
24
  catch (_c) {
25
25
  // Keep the encoded name if it contains an invalid escape sequence.
26
26
  }
27
- return (decoded
27
+ return decoded;
28
+ };
29
+ exports.getMediaFileName = getMediaFileName;
30
+ const getDefaultOutputBaseName = (src, displayName, fallbackName) => {
31
+ return ((0, exports.getMediaFileName)(src, displayName)
28
32
  .replace(/\.[^/.]+$/, '')
29
33
  .replace(/[^a-zA-Z0-9-_ ]/g, '-')
30
34
  .trim()
@@ -198,12 +198,7 @@ export declare const snapSelectedOutlineUv: ({ point, points, thresholdPx, uv, }
198
198
  }) => UvCoordinate;
199
199
  export declare const selectedOutlineTransformOriginSnapThresholdPx = 10;
200
200
  export declare const snapSelectedOutlineTransformOriginUv: ({ crop, point, points, thresholdPx, uv, }: {
201
- readonly crop: {
202
- readonly left: number;
203
- readonly right: number;
204
- readonly top: number;
205
- readonly bottom: number;
206
- } | null;
201
+ readonly crop: import("@remotion/canvas").CanvasOutlineCrop | null;
207
202
  readonly point: OutlinePoint;
208
203
  readonly points: readonly [OutlinePoint, OutlinePoint, OutlinePoint, OutlinePoint];
209
204
  readonly thresholdPx: number | null;