@remotion/studio 4.0.521 → 4.0.523

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 (264) hide show
  1. package/dist/api/install-package.js +4 -2
  2. package/dist/components/AssetAudioVolume.d.ts +5 -0
  3. package/dist/components/AssetAudioVolume.js +33 -0
  4. package/dist/components/Canvas.js +5 -6
  5. package/dist/components/CanvasIfSizeIsAvailable.js +7 -0
  6. package/dist/components/CaptionInspector.js +74 -20
  7. package/dist/components/CheckboardToggle.js +8 -6
  8. package/dist/components/Checkbox.d.ts +1 -0
  9. package/dist/components/Checkbox.js +2 -2
  10. package/dist/components/CompositionContextButton.js +4 -1
  11. package/dist/components/CompositionSelectorItem.js +2 -2
  12. package/dist/components/ConfigureLicenseModal.js +1 -1
  13. package/dist/components/CopyButton.js +7 -14
  14. package/dist/components/CurrentAsset.js +40 -6
  15. package/dist/components/Editor.js +6 -5
  16. package/dist/components/EditorContent.js +1 -1
  17. package/dist/components/EditorContexts.js +3 -1
  18. package/dist/components/ElementInstallConfirmation.js +290 -136
  19. package/dist/components/FixComputedValueModal.js +56 -16
  20. package/dist/components/FullscreenToggle.js +9 -8
  21. package/dist/components/GlobalKeybindings.js +50 -49
  22. package/dist/components/HighlightedElementSource.d.ts +5 -0
  23. package/dist/components/HighlightedElementSource.js +78 -0
  24. package/dist/components/InspectorLocationCopy.js +10 -5
  25. package/dist/components/InspectorPanel/MultiSequenceField.d.ts +12 -0
  26. package/dist/components/InspectorPanel/MultiSequenceField.js +131 -0
  27. package/dist/components/InspectorPanel/MultiSequenceInspector.d.ts +8 -0
  28. package/dist/components/InspectorPanel/MultiSequenceInspector.js +102 -0
  29. package/dist/components/InspectorPanel/MultiSequenceNumberField.d.ts +9 -0
  30. package/dist/components/InspectorPanel/MultiSequenceNumberField.js +88 -0
  31. package/dist/components/InspectorPanel.js +4 -0
  32. package/dist/components/InspectorSequenceSection.js +64 -1
  33. package/dist/components/InstallPackage.js +4 -5
  34. package/dist/components/KeyboardShortcutsSettings.js +212 -33
  35. package/dist/components/MenuBuildIndicator.js +7 -2
  36. package/dist/components/MenuCompositionName.js +62 -6
  37. package/dist/components/MenuToolbar.js +7 -5
  38. package/dist/components/ModalContainer.d.ts +1 -0
  39. package/dist/components/ModalContainer.js +2 -2
  40. package/dist/components/Modals.js +3 -1
  41. package/dist/components/ModelManager.d.ts +16 -0
  42. package/dist/components/ModelManager.js +200 -0
  43. package/dist/components/ModelsSettings.d.ts +2 -0
  44. package/dist/components/ModelsSettings.js +133 -0
  45. package/dist/components/NewComposition/DismissableModal.d.ts +1 -0
  46. package/dist/components/NewComposition/DismissableModal.js +2 -2
  47. package/dist/components/NewComposition/InputDragger.d.ts +2 -2
  48. package/dist/components/NewComposition/InputDragger.js +6 -6
  49. package/dist/components/NewComposition/NewFolder.js +11 -8
  50. package/dist/components/NewComposition/RenameFolder.js +17 -10
  51. package/dist/components/OptionalPackageModal.d.ts +11 -0
  52. package/dist/components/OptionalPackageModal.js +155 -0
  53. package/dist/components/PlayPause.js +4 -8
  54. package/dist/components/PlaybackKeyboardShortcutsManager.js +3 -6
  55. package/dist/components/PreviewToolbarOverflowButton.js +11 -2
  56. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +5 -2
  57. package/dist/components/RadioButton.d.ts +1 -0
  58. package/dist/components/RadioButton.js +2 -2
  59. package/dist/components/RenderButton.js +5 -1
  60. package/dist/components/RenderModal/CliCopyButton.js +13 -27
  61. package/dist/components/RenderModal/NumberSetting.d.ts +6 -1
  62. package/dist/components/RenderModal/NumberSetting.js +2 -2
  63. package/dist/components/RenderModal/RenderModalBasic.js +1 -1
  64. package/dist/components/RenderModal/RenderModalOutputName.d.ts +3 -1
  65. package/dist/components/RenderModal/RenderModalOutputName.js +4 -4
  66. package/dist/components/RenderModal/SeparateAudioOption.js +1 -1
  67. package/dist/components/RenderModal/WebRenderModalBasic.js +1 -1
  68. package/dist/components/RenderQueue/CaptionQueueItem.d.ts +6 -0
  69. package/dist/components/RenderQueue/CaptionQueueItem.js +129 -0
  70. package/dist/components/RenderQueue/CaptionQueueProcessor.d.ts +1 -0
  71. package/dist/components/RenderQueue/CaptionQueueProcessor.js +110 -0
  72. package/dist/components/RenderQueue/CaptionQueueProcessorLoader.d.ts +2 -0
  73. package/dist/components/RenderQueue/CaptionQueueProcessorLoader.js +54 -0
  74. package/dist/components/RenderQueue/RenderQueueCopyToClipboard.js +7 -4
  75. package/dist/components/RenderQueue/RenderQueueItem.js +3 -3
  76. package/dist/components/RenderQueue/VideoMattingQueueItem.d.ts +6 -0
  77. package/dist/components/RenderQueue/VideoMattingQueueItem.js +129 -0
  78. package/dist/components/RenderQueue/VideoMattingQueueProcessor.d.ts +1 -0
  79. package/dist/components/RenderQueue/VideoMattingQueueProcessor.js +105 -0
  80. package/dist/components/RenderQueue/VideoMattingQueueProcessorLoader.d.ts +2 -0
  81. package/dist/components/RenderQueue/VideoMattingQueueProcessorLoader.js +54 -0
  82. package/dist/components/RenderQueue/caption-job-types.d.ts +47 -0
  83. package/dist/components/RenderQueue/caption-job-types.js +7 -0
  84. package/dist/components/RenderQueue/context.d.ts +16 -0
  85. package/dist/components/RenderQueue/context.js +224 -11
  86. package/dist/components/RenderQueue/index.js +34 -10
  87. package/dist/components/RenderQueue/item-style.d.ts +1 -0
  88. package/dist/components/RenderQueue/item-style.js +2 -1
  89. package/dist/components/RenderQueue/load-model-for-job.d.ts +11 -0
  90. package/dist/components/RenderQueue/load-model-for-job.js +14 -0
  91. package/dist/components/RenderQueue/video-matting-job-types.d.ts +38 -0
  92. package/dist/components/RenderQueue/video-matting-job-types.js +5 -0
  93. package/dist/components/RendersTab.js +4 -4
  94. package/dist/components/SegmentedControl.d.ts +2 -2
  95. package/dist/components/SegmentedControl.js +38 -13
  96. package/dist/components/SelectedOutlinePolygon.js +8 -2
  97. package/dist/components/SettingsButton.d.ts +4 -0
  98. package/dist/components/SettingsButton.js +49 -0
  99. package/dist/components/SettingsModal.d.ts +1 -1
  100. package/dist/components/SettingsModal.js +3 -1
  101. package/dist/components/ShowOutlinesProvider.js +12 -0
  102. package/dist/components/SidebarCollapserControls.js +21 -16
  103. package/dist/components/SizeSelector.js +10 -2
  104. package/dist/components/SkillsSettings.js +11 -8
  105. package/dist/components/SnappingToggle.js +5 -2
  106. package/dist/components/Splitter/SplitterContainer.js +63 -10
  107. package/dist/components/Splitter/SplitterContext.d.ts +3 -0
  108. package/dist/components/Splitter/SplitterContext.js +5 -1
  109. package/dist/components/Splitter/SplitterElement.js +11 -2
  110. package/dist/components/Splitter/SplitterHandle.d.ts +1 -0
  111. package/dist/components/Splitter/SplitterHandle.js +55 -25
  112. package/dist/components/Tabs/vertical.d.ts +1 -0
  113. package/dist/components/Tabs/vertical.js +2 -2
  114. package/dist/components/TimeValue.js +2 -3
  115. package/dist/components/Timeline/SequencePropsObserver.js +4 -0
  116. package/dist/components/Timeline/SubscribeToNodePaths.d.ts +2 -1
  117. package/dist/components/Timeline/SubscribeToNodePaths.js +2 -1
  118. package/dist/components/Timeline/Timeline.js +17 -46
  119. package/dist/components/Timeline/TimelineClipboardKeybindings.js +2 -4
  120. package/dist/components/Timeline/TimelineDeleteKeybindings.js +3 -18
  121. package/dist/components/Timeline/TimelineDragHandler.js +11 -6
  122. package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +1 -0
  123. package/dist/components/Timeline/TimelinePinchZoom.js +6 -30
  124. package/dist/components/Timeline/TimelinePlayCursorSyncer.js +1 -7
  125. package/dist/components/Timeline/TimelineRowChrome.js +11 -3
  126. package/dist/components/Timeline/TimelineSchemaField.js +8 -4
  127. package/dist/components/Timeline/TimelineSelection.d.ts +2 -0
  128. package/dist/components/Timeline/TimelineSelection.js +55 -2
  129. package/dist/components/Timeline/TimelineSequence.js +148 -25
  130. package/dist/components/Timeline/TimelineSequenceItem.d.ts +0 -1
  131. package/dist/components/Timeline/TimelineSequenceItem.js +220 -112
  132. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +35 -5
  133. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +233 -138
  134. package/dist/components/Timeline/TimelineSlider.js +1 -4
  135. package/dist/components/Timeline/TimelineTimeIndicators.js +1 -0
  136. package/dist/components/Timeline/TimelineWidthProvider.js +2 -5
  137. package/dist/components/Timeline/TimelineZoomControls.js +20 -20
  138. package/dist/components/Timeline/get-sequence-split-menu-item.d.ts +11 -0
  139. package/dist/components/Timeline/get-sequence-split-menu-item.js +55 -0
  140. package/dist/components/Timeline/use-asset-timeline-context-menu.d.ts +2 -0
  141. package/dist/components/Timeline/use-asset-timeline-context-menu.js +52 -0
  142. package/dist/components/Timeline/use-sequence-props-subscription.d.ts +3 -2
  143. package/dist/components/Timeline/use-sequence-props-subscription.js +4 -10
  144. package/dist/components/TimelineInOutToggle.js +20 -17
  145. package/dist/components/TopPanel.js +3 -19
  146. package/dist/components/Transcription/LazyModels.d.ts +1 -0
  147. package/dist/components/Transcription/LazyModels.js +5 -0
  148. package/dist/components/Transcription/Models.d.ts +6 -0
  149. package/dist/components/Transcription/Models.js +18 -0
  150. package/dist/components/Transcription/TranscriptionModal.d.ts +3 -0
  151. package/dist/components/Transcription/TranscriptionModal.js +428 -0
  152. package/dist/components/Transcription/TranscriptionModalWithOptionalWhisper.d.ts +5 -0
  153. package/dist/components/Transcription/TranscriptionModalWithOptionalWhisper.js +48 -0
  154. package/dist/components/Transcription/caption-output-name.d.ts +2 -0
  155. package/dist/components/Transcription/caption-output-name.js +10 -0
  156. package/dist/components/Transcription/resample-media-to-16-khz.d.ts +6 -0
  157. package/dist/components/Transcription/resample-media-to-16-khz.js +82 -0
  158. package/dist/components/Transcription/whisper-languages.d.ts +2 -0
  159. package/dist/components/Transcription/whisper-languages.js +104 -0
  160. package/dist/components/Transcription/whisper-webgpu-capability.d.ts +2 -0
  161. package/dist/components/Transcription/whisper-webgpu-capability.js +7 -0
  162. package/dist/components/UndoRedoButtons.js +13 -38
  163. package/dist/components/UpdatesSettings.js +17 -17
  164. package/dist/components/VideoMatting/LazyModels.d.ts +1 -0
  165. package/dist/components/VideoMatting/LazyModels.js +5 -0
  166. package/dist/components/VideoMatting/Models.d.ts +6 -0
  167. package/dist/components/VideoMatting/Models.js +18 -0
  168. package/dist/components/VideoMatting/VideoMattingModal.d.ts +3 -0
  169. package/dist/components/VideoMatting/VideoMattingModal.js +207 -0
  170. package/dist/components/VideoMatting/VideoMattingModalWithOptionalPackage.d.ts +5 -0
  171. package/dist/components/VideoMatting/VideoMattingModalWithOptionalPackage.js +46 -0
  172. package/dist/components/VideoMatting/video-matting-capability.d.ts +2 -0
  173. package/dist/components/VideoMatting/video-matting-capability.js +7 -0
  174. package/dist/components/WebMcp.js +439 -22
  175. package/dist/components/ZoomPersistor.js +6 -3
  176. package/dist/components/composition-menu-items.js +1 -1
  177. package/dist/components/import-assets.d.ts +3 -2
  178. package/dist/components/import-assets.js +5 -9
  179. package/dist/components/keyboard-shortcuts.d.ts +17 -1
  180. package/dist/components/keyboard-shortcuts.js +177 -89
  181. package/dist/components/public-output-name.d.ts +5 -0
  182. package/dist/components/public-output-name.js +60 -0
  183. package/dist/components/use-model-cache-status.d.ts +7 -0
  184. package/dist/components/use-model-cache-status.js +35 -0
  185. package/dist/esm/CaptionQueueProcessor-k0yrm3dj.mjs +211 -0
  186. package/dist/esm/HighlightedElementSource-jfc66k4p.mjs +1236 -0
  187. package/dist/esm/LazyModels-2trdm224.mjs +11 -0
  188. package/dist/esm/LazyModels-fjb5ckaq.mjs +11 -0
  189. package/dist/esm/TranscriptionModal-916jqhry.mjs +1011 -0
  190. package/dist/esm/VideoMattingModal-2tm79s9b.mjs +374 -0
  191. package/dist/esm/VideoMattingQueueProcessor-t1hgm2rm.mjs +109 -0
  192. package/dist/esm/index-1x7bsdh6.mjs +261 -0
  193. package/dist/esm/index-3hgr6gjx.mjs +41 -0
  194. package/dist/esm/index-5qddp5h7.mjs +36 -0
  195. package/dist/esm/index-5zrb1ft4.mjs +39 -0
  196. package/dist/esm/index-6cvm9a65.mjs +45923 -0
  197. package/dist/esm/index-7tt71e8n.mjs +36 -0
  198. package/dist/esm/index-9x6e1dq0.mjs +428 -0
  199. package/dist/esm/index-cw0pnpg5.mjs +50 -0
  200. package/dist/esm/index-czwvnn9g.mjs +35 -0
  201. package/dist/esm/index-hy4xcgty.mjs +1366 -0
  202. package/dist/esm/{chunk-je0h1bgt.js → index-jg13hf2g.mjs} +3 -1
  203. package/dist/esm/{chunk-6jf1natv.js → index-rcv7qkt5.mjs} +18 -1
  204. package/dist/esm/index-sgtmgc4h.mjs +423 -0
  205. package/dist/esm/index-te66vvrp.mjs +142 -0
  206. package/dist/esm/index-v4tr1bft.mjs +20 -0
  207. package/dist/esm/index-x7t2y7ws.mjs +54194 -0
  208. package/dist/esm/index-xhe2m2qr.mjs +1146 -0
  209. package/dist/esm/index.mjs +45 -933
  210. package/dist/esm/internals.mjs +13 -114127
  211. package/dist/esm/previewEntry.mjs +387 -114784
  212. package/dist/esm/renderEntry.mjs +3 -3
  213. package/dist/esm/{chunk-m0jqdbkr.js → resolve-composition-component-location-14148845.mjs} +1 -1
  214. package/dist/helpers/copy-text.js +1 -2
  215. package/dist/helpers/drag-aware-double-click.d.ts +2 -1
  216. package/dist/helpers/drag-aware-double-click.js +12 -1
  217. package/dist/helpers/get-asset-metadata.d.ts +1 -0
  218. package/dist/helpers/get-asset-metadata.js +4 -0
  219. package/dist/helpers/hoverable.js +8 -0
  220. package/dist/helpers/inject-css.js +2 -0
  221. package/dist/helpers/optional-package-dependencies.d.ts +3 -0
  222. package/dist/helpers/optional-package-dependencies.js +24 -0
  223. package/dist/helpers/pointer-session.d.ts +6 -0
  224. package/dist/helpers/pointer-session.js +36 -14
  225. package/dist/helpers/prism-tomorrow.d.ts +1 -0
  226. package/dist/helpers/prism-tomorrow.js +151 -0
  227. package/dist/helpers/sequence-node-path-mutations.js +11 -0
  228. package/dist/helpers/slugify-name.d.ts +1 -0
  229. package/dist/helpers/slugify-name.js +14 -0
  230. package/dist/helpers/studio-runtime-config.d.ts +1 -0
  231. package/dist/helpers/studio-runtime-config.js +6 -1
  232. package/dist/helpers/use-copy-feedback.d.ts +4 -0
  233. package/dist/helpers/use-copy-feedback.js +19 -0
  234. package/dist/helpers/use-keybinding.d.ts +9 -3
  235. package/dist/helpers/use-keybinding.js +8 -9
  236. package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -0
  237. package/dist/helpers/use-keyboard-shortcut-label.js +15 -0
  238. package/dist/helpers/use-menu-structure.js +58 -13
  239. package/dist/icons/copy.d.ts +5 -0
  240. package/dist/icons/copy.js +12 -0
  241. package/dist/icons/input-props.d.ts +1 -1
  242. package/dist/icons/input-props.js +2 -2
  243. package/dist/icons/models.d.ts +4 -0
  244. package/dist/icons/models.js +7 -0
  245. package/dist/icons/separation.d.ts +4 -0
  246. package/dist/icons/separation.js +7 -0
  247. package/dist/icons/transcription.d.ts +4 -0
  248. package/dist/icons/transcription.js +7 -0
  249. package/dist/icons/upload.js +1 -1
  250. package/dist/state/canvas-ref.d.ts +1 -0
  251. package/dist/state/canvas-ref.js +2 -1
  252. package/dist/state/modals.d.ts +14 -2
  253. package/dist/state/sidebar.d.ts +3 -0
  254. package/dist/state/sidebar.js +6 -1
  255. package/dist/state/timeline-zoom.d.ts +1 -1
  256. package/dist/state/timeline-zoom.js +3 -3
  257. package/dist/visual-controls/VisualControls.js +4 -0
  258. package/package.json +34 -20
  259. package/dist/components/UpdateCheck.d.ts +0 -1
  260. package/dist/components/UpdateCheck.js +0 -79
  261. package/dist/esm/chunk-emw4k5b0.js +0 -99527
  262. package/dist/esm/chunk-vkrvnx2h.js +0 -99378
  263. package/dist/helpers/use-max-media-duration.d.ts +0 -2
  264. package/dist/helpers/use-max-media-duration.js +0 -61
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.TimelineSequenceItem = exports.SEQUENCE_REORDER_MIME_TYPE = void 0;
36
+ exports.TimelineSequenceItem = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const react_1 = __importStar(require("react"));
39
39
  const remotion_1 = require("remotion");
@@ -43,6 +43,8 @@ const client_id_1 = require("../../helpers/client-id");
43
43
  const colors_1 = require("../../helpers/colors");
44
44
  const get_sequence_double_click_action_1 = require("../../helpers/get-sequence-double-click-action");
45
45
  const interactivity_enabled_1 = require("../../helpers/interactivity-enabled");
46
+ const is_current_selected_still_1 = require("../../helpers/is-current-selected-still");
47
+ const pointer_session_1 = require("../../helpers/pointer-session");
46
48
  const studio_runtime_config_1 = require("../../helpers/studio-runtime-config");
47
49
  const timeline_layout_1 = require("../../helpers/timeline-layout");
48
50
  const use_keybinding_1 = require("../../helpers/use-keybinding");
@@ -64,9 +66,12 @@ const use_select_asset_1 = require("../use-select-asset");
64
66
  const disable_sequence_interactivity_1 = require("./disable-sequence-interactivity");
65
67
  const duplicate_selected_timeline_item_1 = require("./duplicate-selected-timeline-item");
66
68
  const get_sequence_context_menu_items_1 = require("./get-sequence-context-menu-items");
69
+ const get_sequence_split_menu_item_1 = require("./get-sequence-split-menu-item");
67
70
  const imperative_state_1 = require("./imperative-state");
68
71
  const save_sequence_prop_1 = require("./save-sequence-prop");
69
72
  const timeline_asset_link_1 = require("./timeline-asset-link");
73
+ const timeline_refs_1 = require("./timeline-refs");
74
+ const timeline_scroll_logic_1 = require("./timeline-scroll-logic");
70
75
  const TimelineDuplicateCount_1 = require("./TimelineDuplicateCount");
71
76
  const TimelineExpandArrowButton_1 = require("./TimelineExpandArrowButton");
72
77
  const TimelineExpandedSection_1 = require("./TimelineExpandedSection");
@@ -76,6 +81,8 @@ const TimelineMediaInfo_1 = require("./TimelineMediaInfo");
76
81
  const TimelineRowChrome_1 = require("./TimelineRowChrome");
77
82
  const TimelineSelection_1 = require("./TimelineSelection");
78
83
  const TimelineSequenceName_1 = require("./TimelineSequenceName");
84
+ const TimelineTimeIndicators_1 = require("./TimelineTimeIndicators");
85
+ const use_asset_timeline_context_menu_1 = require("./use-asset-timeline-context-menu");
79
86
  const use_delete_timeline_items_1 = require("./use-delete-timeline-items");
80
87
  const use_open_sequence_in_apps_1 = require("./use-open-sequence-in-apps");
81
88
  const use_rename_sequence_1 = require("./use-rename-sequence");
@@ -99,8 +106,6 @@ const effectDropHighlight = {
99
106
  outline: colors_1.BORDER_TIMELINE_DROP_BLUE,
100
107
  outlineOffset: -1,
101
108
  };
102
- exports.SEQUENCE_REORDER_MIME_TYPE = 'application/remotion-sequence-reorder';
103
- let currentSequenceDrag = null;
104
109
  const TimelineSequenceExpandArrowInner = ({ disabled, isExpanded, nodePathInfo, sequence }) => {
105
110
  const { toggleTrack } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksSetterContext);
106
111
  const hasExpandableContent = (0, use_timeline_expanded_tree_1.useTimelineSequenceHasExpandableContent)({
@@ -146,39 +151,24 @@ const sequenceReorderAfterLine = {
146
151
  ...sequenceReorderLineBase,
147
152
  top: -1,
148
153
  };
149
- const hasSequenceReorderDragType = (dataTransfer) => {
150
- return Array.from(dataTransfer.types).includes(exports.SEQUENCE_REORDER_MIME_TYPE);
151
- };
152
- const isSequenceReorderDrag = (dataTransfer) => {
153
- return (currentSequenceDrag !== null || hasSequenceReorderDragType(dataTransfer));
154
+ const getDestinationIndex = ({ fromIndex, insertionIndex, }) => {
155
+ return insertionIndex > fromIndex ? insertionIndex - 1 : insertionIndex;
154
156
  };
155
- const getSequenceReorderDragData = (dataTransfer) => {
156
- if (currentSequenceDrag) {
157
- return currentSequenceDrag;
158
- }
159
- const value = dataTransfer.getData(exports.SEQUENCE_REORDER_MIME_TYPE);
160
- if (!value) {
161
- return null;
162
- }
163
- try {
164
- const parsed = JSON.parse(value);
165
- if (typeof parsed.nodePathKey === 'string' &&
166
- typeof parsed.siblingIndex === 'number' &&
167
- (typeof parsed.parentId === 'string' || parsed.parentId === null) &&
168
- typeof parsed.fileName === 'string' &&
169
- parsed.nodePath &&
170
- Array.isArray(parsed.nodePath.nodePath)) {
171
- return parsed;
157
+ const sequencePointerDropTargets = new Map();
158
+ const getSequencePointerDropTargetAtPoint = ({ clientX, clientY, }) => {
159
+ for (const element of document.elementsFromPoint(clientX, clientY)) {
160
+ let current = element;
161
+ while (current) {
162
+ const dropTarget = sequencePointerDropTargets.get(current);
163
+ if (dropTarget) {
164
+ return dropTarget;
165
+ }
166
+ current = current.parentElement;
172
167
  }
173
168
  }
174
- catch (_a) {
175
- return null;
176
- }
177
169
  return null;
178
170
  };
179
- const getDestinationIndex = ({ fromIndex, insertionIndex, }) => {
180
- return insertionIndex > fromIndex ? insertionIndex - 1 : insertionIndex;
181
- };
171
+ const SEQUENCE_REORDER_POINTER_THRESHOLD = 3;
182
172
  const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions, nestedDepth, sequence, nodePathInfo, keyframeDisplayOffset, sequenceFrameOffset, siblingIndex, }) => {
183
173
  var _a, _b;
184
174
  var _c, _d, _e, _f;
@@ -187,12 +177,14 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
187
177
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
188
178
  const previewConnected = previewServerState.type === 'connected';
189
179
  const previewInteractive = previewConnected && (0, interactivity_enabled_1.isStudioInteractivityEnabled)();
180
+ const isStill = (0, is_current_selected_still_1.useIsStill)();
190
181
  const canMutateEffects = previewConnected && (0, interactivity_enabled_1.isStudioSelectionEnabled)() && (0, browser_studio_operations_1.canUseEffectOperations)();
191
182
  const { getIsExpanded } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksGetterContext);
192
183
  const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
193
184
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
194
185
  const { isHighestContext } = (0, use_keybinding_1.useKeybinding)();
195
186
  const selectAsset = (0, use_select_asset_1.useSelectAsset)();
187
+ const assetContextMenu = (0, use_asset_timeline_context_menu_1.useAssetTimelineContextMenu)();
196
188
  const selectComposition = (0, InitialCompositionLoader_1.useSelectComposition)();
197
189
  const deleteTimelineItems = (0, use_delete_timeline_items_1.useDeleteTimelineItems)();
198
190
  const { onSelect, selectable, selected } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
@@ -209,6 +201,9 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
209
201
  const [effectDropHovered, setEffectDropHovered] = (0, react_1.useState)(false);
210
202
  const [isRenaming, setIsRenaming] = (0, react_1.useState)(false);
211
203
  const [sequenceDropIndicator, setSequenceDropIndicator] = (0, react_1.useState)(null);
204
+ const sequenceReorderWrapperRef = (0, react_1.useRef)(null);
205
+ const stopSequencePointerSession = (0, react_1.useRef)(null);
206
+ const suppressNextClick = (0, react_1.useRef)(false);
212
207
  const { canOpenInEditor, canConfigureApps, codingAgentInfo, editorInfo, openInCodingAgent, openInEditor, originalLocation, } = (0, use_open_sequence_in_apps_1.useOpenSequenceInApps)(sequence);
213
208
  const validatedLocation = (0, react_1.useMemo)(() => {
214
209
  var _a;
@@ -306,11 +301,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
306
301
  setPropStatuses,
307
302
  validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
308
303
  ]);
309
- const getSequenceDropTarget = (0, react_1.useCallback)((e) => {
310
- const dragData = getSequenceReorderDragData(e.dataTransfer);
311
- if (!dragData) {
312
- return null;
313
- }
304
+ const getSequenceDropTarget = (0, react_1.useCallback)((clientY, dragData) => {
314
305
  if (!nodePath || !nodePathKey || !(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) {
315
306
  return {
316
307
  type: 'invalid',
@@ -336,8 +327,12 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
336
327
  reason: 'Sequences can only be reordered with direct JSX siblings.',
337
328
  };
338
329
  }
339
- const rect = e.currentTarget.getBoundingClientRect();
340
- const before = e.clientY < rect.top + rect.height / 2;
330
+ const element = sequenceReorderWrapperRef.current;
331
+ if (!element) {
332
+ return null;
333
+ }
334
+ const rect = element.getBoundingClientRect();
335
+ const before = clientY < rect.top + rect.height / 2;
341
336
  const insertionIndex = before ? siblingIndex : siblingIndex + 1;
342
337
  const toIndex = getDestinationIndex({
343
338
  fromIndex: dragData.siblingIndex,
@@ -362,78 +357,13 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
362
357
  siblingIndex,
363
358
  validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
364
359
  ]);
365
- const onSequenceDragStart = (0, react_1.useCallback)((e) => {
366
- if (!canReorderSequence ||
367
- !nodePath ||
368
- !nodePathKey ||
369
- !(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) {
370
- e.preventDefault();
371
- return;
372
- }
373
- const dragData = {
374
- nodePath,
375
- nodePathKey,
376
- siblingIndex,
377
- parentId,
378
- fileName: validatedLocation.source,
379
- };
380
- currentSequenceDrag = dragData;
381
- e.dataTransfer.effectAllowed = 'move';
382
- e.dataTransfer.setData(exports.SEQUENCE_REORDER_MIME_TYPE, JSON.stringify(dragData));
383
- e.stopPropagation();
384
- }, [
385
- canReorderSequence,
386
- nodePath,
387
- nodePathKey,
388
- parentId,
389
- siblingIndex,
390
- validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
391
- ]);
392
- const onSequenceDragEnd = (0, react_1.useCallback)(() => {
393
- currentSequenceDrag = null;
394
- setSequenceDropIndicator(null);
395
- }, []);
396
- const onSequenceDragOver = (0, react_1.useCallback)((e) => {
397
- if (!hasSequenceReorderDragType(e.dataTransfer)) {
398
- return;
399
- }
400
- const dropTarget = getSequenceDropTarget(e);
401
- if (!dropTarget) {
402
- setSequenceDropIndicator(null);
403
- return;
404
- }
405
- if (dropTarget.type === 'invalid') {
406
- setSequenceDropIndicator(null);
407
- e.dataTransfer.dropEffect = 'none';
408
- return;
409
- }
410
- e.preventDefault();
411
- e.stopPropagation();
412
- e.dataTransfer.dropEffect = 'move';
413
- setSequenceDropIndicator(dropTarget.position);
414
- }, [getSequenceDropTarget]);
415
- const onSequenceDragLeave = (0, react_1.useCallback)((e) => {
416
- if (e.currentTarget.contains(e.relatedTarget)) {
417
- return;
418
- }
419
- setSequenceDropIndicator(null);
420
- }, []);
421
- const onSequenceDrop = (0, react_1.useCallback)(async (e) => {
360
+ const reorderSequenceFromPointer = (0, react_1.useCallback)(async (dropTarget) => {
422
361
  if (!canReorderSequence ||
423
362
  previewServerState.type !== 'connected' ||
424
363
  !nodePath ||
425
364
  !(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) {
426
365
  return;
427
366
  }
428
- const dropTarget = getSequenceDropTarget(e);
429
- if (!dropTarget || dropTarget.type === 'invalid') {
430
- setSequenceDropIndicator(null);
431
- return;
432
- }
433
- e.preventDefault();
434
- e.stopPropagation();
435
- setSequenceDropIndicator(null);
436
- currentSequenceDrag = null;
437
367
  try {
438
368
  const result = await (0, reorder_sequence_api_1.reorderSequence)({
439
369
  fileName: validatedLocation.source,
@@ -451,11 +381,178 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
451
381
  }
452
382
  }, [
453
383
  canReorderSequence,
454
- getSequenceDropTarget,
455
384
  nodePath,
456
385
  previewServerState,
457
386
  validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
458
387
  ]);
388
+ (0, react_1.useEffect)(() => {
389
+ const element = sequenceReorderWrapperRef.current;
390
+ if (!element || !canHandleSequenceDrag) {
391
+ return;
392
+ }
393
+ const pointerDropTarget = {
394
+ getDropTarget: getSequenceDropTarget,
395
+ reorder: (dropTarget) => {
396
+ reorderSequenceFromPointer(dropTarget).catch(() => undefined);
397
+ },
398
+ setDropIndicator: setSequenceDropIndicator,
399
+ };
400
+ sequencePointerDropTargets.set(element, pointerDropTarget);
401
+ return () => {
402
+ sequencePointerDropTargets.delete(element);
403
+ };
404
+ }, [
405
+ canHandleSequenceDrag,
406
+ getSequenceDropTarget,
407
+ reorderSequenceFromPointer,
408
+ ]);
409
+ (0, react_1.useEffect)(() => {
410
+ return () => {
411
+ var _a;
412
+ return (_a = stopSequencePointerSession.current) === null || _a === void 0 ? void 0 : _a.call(stopSequencePointerSession);
413
+ };
414
+ }, []);
415
+ const onSequencePointerDown = (0, react_1.useCallback)((e) => {
416
+ var _a;
417
+ if (!(e.target instanceof Element)) {
418
+ return;
419
+ }
420
+ if (e.button !== 0 ||
421
+ !e.isPrimary ||
422
+ e.target.closest('[data-remotion-sequence-reorder-row]') !==
423
+ e.currentTarget ||
424
+ e.target.closest('button, input, textarea, select, [contenteditable="true"], [data-timeline-layer-eye]') ||
425
+ !canReorderSequence ||
426
+ !nodePath ||
427
+ !nodePathKey ||
428
+ !(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) {
429
+ return;
430
+ }
431
+ (_a = stopSequencePointerSession.current) === null || _a === void 0 ? void 0 : _a.call(stopSequencePointerSession);
432
+ const dragData = {
433
+ fileName: validatedLocation.source,
434
+ nodePath,
435
+ nodePathKey,
436
+ parentId,
437
+ siblingIndex,
438
+ };
439
+ const sourceElement = e.currentTarget;
440
+ const sourceRect = sourceElement.getBoundingClientRect();
441
+ const startX = e.clientX;
442
+ const startY = e.clientY;
443
+ let currentClientY = startY;
444
+ let dragPreview = null;
445
+ let activeDropTarget = null;
446
+ let activeDrop = null;
447
+ let didDrag = false;
448
+ let previousUserSelect = '';
449
+ let previousWebkitUserSelect = '';
450
+ const updateDropTarget = (clientY) => {
451
+ var _a;
452
+ const pointerDropTarget = getSequencePointerDropTargetAtPoint({
453
+ clientX: startX,
454
+ clientY,
455
+ });
456
+ const dropTarget = pointerDropTarget === null || pointerDropTarget === void 0 ? void 0 : pointerDropTarget.getDropTarget(clientY, dragData);
457
+ if (activeDropTarget !== pointerDropTarget) {
458
+ activeDropTarget === null || activeDropTarget === void 0 ? void 0 : activeDropTarget.setDropIndicator(null);
459
+ }
460
+ activeDropTarget = pointerDropTarget;
461
+ activeDrop = (dropTarget === null || dropTarget === void 0 ? void 0 : dropTarget.type) === 'valid' ? dropTarget : null;
462
+ activeDropTarget === null || activeDropTarget === void 0 ? void 0 : activeDropTarget.setDropIndicator((_a = activeDrop === null || activeDrop === void 0 ? void 0 : activeDrop.position) !== null && _a !== void 0 ? _a : null);
463
+ };
464
+ const verticalScroll = timeline_refs_1.timelineVerticalScroll.current;
465
+ const autoScroll = (0, timeline_scroll_logic_1.startTimelineEdgeAutoScroll)({
466
+ includeHorizontal: false,
467
+ includeVertical: true,
468
+ verticalTopOffset: isStill ? 0 : TimelineTimeIndicators_1.TIMELINE_TIME_INDICATOR_HEIGHT,
469
+ onTick: (directions) => {
470
+ if (directions.y === null || !verticalScroll) {
471
+ return;
472
+ }
473
+ verticalScroll.scrollTop +=
474
+ directions.y === 'up'
475
+ ? -timeline_scroll_logic_1.EDGE_SCROLL_VERTICAL_INCREMENT
476
+ : timeline_scroll_logic_1.EDGE_SCROLL_VERTICAL_INCREMENT;
477
+ updateDropTarget(currentClientY);
478
+ },
479
+ });
480
+ stopSequencePointerSession.current = (0, pointer_session_1.startCapturedPointerSession)({
481
+ captureTarget: sourceElement,
482
+ event: e.nativeEvent,
483
+ onMove: (pointerEvent) => {
484
+ currentClientY = pointerEvent.clientY;
485
+ if (!didDrag &&
486
+ Math.hypot(pointerEvent.clientX - startX, pointerEvent.clientY - startY) < SEQUENCE_REORDER_POINTER_THRESHOLD) {
487
+ return;
488
+ }
489
+ if (!didDrag) {
490
+ didDrag = true;
491
+ previousUserSelect = document.body.style.userSelect;
492
+ previousWebkitUserSelect = document.body.style.webkitUserSelect;
493
+ document.body.style.userSelect = 'none';
494
+ document.body.style.webkitUserSelect = 'none';
495
+ dragPreview = sourceElement.cloneNode(true);
496
+ dragPreview.setAttribute('aria-hidden', 'true');
497
+ dragPreview.setAttribute('data-remotion-sequence-reorder-preview', 'true');
498
+ dragPreview.removeAttribute('data-remotion-sequence-reorder-row');
499
+ Object.assign(dragPreview.style, {
500
+ height: `${sourceRect.height}px`,
501
+ left: `${sourceRect.left}px`,
502
+ margin: '0',
503
+ opacity: '0.8',
504
+ pointerEvents: 'none',
505
+ position: 'fixed',
506
+ top: `${sourceRect.top}px`,
507
+ width: `${sourceRect.width}px`,
508
+ zIndex: '2147483647',
509
+ });
510
+ document.body.appendChild(dragPreview);
511
+ }
512
+ pointerEvent.preventDefault();
513
+ dragPreview.style.transform = `translate3d(0, ${pointerEvent.clientY - startY}px, 0)`;
514
+ updateDropTarget(pointerEvent.clientY);
515
+ autoScroll.update({ clientX: startX, clientY: pointerEvent.clientY });
516
+ },
517
+ onEnd: (reason, pointerEvent) => {
518
+ if (reason === 'pointerup' && pointerEvent && didDrag) {
519
+ updateDropTarget(pointerEvent.clientY);
520
+ }
521
+ autoScroll.stop();
522
+ activeDropTarget === null || activeDropTarget === void 0 ? void 0 : activeDropTarget.setDropIndicator(null);
523
+ dragPreview === null || dragPreview === void 0 ? void 0 : dragPreview.remove();
524
+ stopSequencePointerSession.current = null;
525
+ if (!didDrag) {
526
+ return;
527
+ }
528
+ document.body.style.userSelect = previousUserSelect;
529
+ document.body.style.webkitUserSelect = previousWebkitUserSelect;
530
+ suppressNextClick.current = true;
531
+ setTimeout(() => {
532
+ suppressNextClick.current = false;
533
+ }, 0);
534
+ if (reason === 'pointerup' && pointerEvent && activeDrop) {
535
+ activeDropTarget === null || activeDropTarget === void 0 ? void 0 : activeDropTarget.reorder(activeDrop);
536
+ }
537
+ },
538
+ });
539
+ }, [
540
+ canReorderSequence,
541
+ isStill,
542
+ nodePath,
543
+ nodePathKey,
544
+ parentId,
545
+ siblingIndex,
546
+ validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
547
+ ]);
548
+ const onSequenceClickCapture = (0, react_1.useCallback)((e) => {
549
+ if (!suppressNextClick.current) {
550
+ return;
551
+ }
552
+ e.preventDefault();
553
+ e.stopPropagation();
554
+ suppressNextClick.current = false;
555
+ }, []);
459
556
  const mediaSrc = sequence.type === 'audio' ||
460
557
  sequence.type === 'video' ||
461
558
  sequence.type === 'image'
@@ -694,6 +791,9 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
694
791
  }, [canRotate, nodePathInfo, selectItem, setManuallyEnabled]);
695
792
  const getContextMenuItems = (0, react_1.useCallback)(() => {
696
793
  var _a;
794
+ if (assetContextMenu !== null) {
795
+ return assetContextMenu;
796
+ }
697
797
  if (selectable && !selected) {
698
798
  onSelect({ shiftKey: false, toggleKey: false });
699
799
  }
@@ -705,6 +805,14 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
705
805
  onDuplicateSelectedSequences,
706
806
  });
707
807
  }
808
+ const splitMenuItem = (0, get_sequence_split_menu_item_1.getSequenceSplitMenuItem)({
809
+ nodePathInfo,
810
+ sequence,
811
+ propStatuses: propStatusesForOverride,
812
+ splitFrame: (0, imperative_state_1.getCurrentFrame)(),
813
+ canEditSource: previewInteractive && Boolean(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source),
814
+ hasMultipleSelection: selected && selectedItems.length > 1,
815
+ });
708
816
  const freezeFrameMenuItem = (0, use_sequence_freeze_frame_menu_item_1.getSequenceFreezeFrameMenuItem)({
709
817
  clientId: previewInteractive && previewServerState.type === 'connected'
710
818
  ? previewServerState.clientId
@@ -820,11 +928,13 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
820
928
  subMenu: null,
821
929
  value: 'rename-sequence',
822
930
  },
931
+ ...(splitMenuItem ? [splitMenuItem] : []),
823
932
  ...(freezeFrameMenuItem ? [freezeFrameMenuItem] : []),
824
933
  ]
825
934
  : [],
826
935
  });
827
936
  }, [
937
+ assetContextMenu,
828
938
  canAddEffect,
829
939
  canCrop,
830
940
  canRotate,
@@ -839,7 +949,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
839
949
  isProgrammaticallyDuplicated,
840
950
  mediaSrc,
841
951
  nodePath,
842
- nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.supportsEffects,
952
+ nodePathInfo,
843
953
  onAddEffect,
844
954
  onCrop,
845
955
  onRotate,
@@ -859,6 +969,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
859
969
  selectAsset,
860
970
  selectable,
861
971
  selected,
972
+ selectedItems.length,
862
973
  selectedSequenceNodePathInfos,
863
974
  sequence,
864
975
  sequenceFrameOffset,
@@ -880,9 +991,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
880
991
  };
881
992
  }, [sequenceDropIndicator]);
882
993
  const onEffectDragOver = (0, react_1.useCallback)((e) => {
883
- if (!canDropEffect ||
884
- isSequenceReorderDrag(e.dataTransfer) ||
885
- !(0, effect_drag_and_drop_1.hasEffectDragType)(e.dataTransfer)) {
994
+ if (!canDropEffect || !(0, effect_drag_and_drop_1.hasEffectDragType)(e.dataTransfer)) {
886
995
  return;
887
996
  }
888
997
  e.preventDefault();
@@ -900,7 +1009,6 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
900
1009
  previewServerState.type !== 'connected' ||
901
1010
  nodePath === null ||
902
1011
  validatedLocation === null ||
903
- isSequenceReorderDrag(e.dataTransfer) ||
904
1012
  !(0, effect_drag_and_drop_1.hasEffectDragType)(e.dataTransfer)) {
905
1013
  return;
906
1014
  }
@@ -935,11 +1043,11 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
935
1043
  " ",
936
1044
  jsx_runtime_1.jsx(TimelineMediaInfo_1.TimelineMediaInfo, { src: mediaSrc })
937
1045
  ] })) : null] }) }));
938
- const draggableTrackRow = canHandleSequenceDrag ? (jsx_runtime_1.jsxs("div", { draggable: canReorderSequence, onDragStart: onSequenceDragStart, onDragEnd: onSequenceDragEnd, onDragOver: onSequenceDragOver, onDragLeave: onSequenceDragLeave, onDrop: onSequenceDrop, style: sequenceReorderWrapper, children: [sequenceReorderLineStyle ? (jsx_runtime_1.jsx("div", { style: sequenceReorderLineStyle })) : null, trackRow, sequenceDropIndicator === 'after' ? (jsx_runtime_1.jsx("div", { style: {
1046
+ const reorderableTrackRow = canHandleSequenceDrag ? (jsx_runtime_1.jsxs("div", { ref: sequenceReorderWrapperRef, "data-remotion-sequence-reorder-row": true, onClickCapture: onSequenceClickCapture, onPointerDownCapture: onSequencePointerDown, style: sequenceReorderWrapper, children: [sequenceReorderLineStyle ? (jsx_runtime_1.jsx("div", { style: sequenceReorderLineStyle })) : null, trackRow, sequenceDropIndicator === 'after' ? (jsx_runtime_1.jsx("div", { style: {
939
1047
  ...sequenceReorderAfterLineWrapper,
940
1048
  top: afterDropLineOffset,
941
1049
  }, children: jsx_runtime_1.jsx("div", { style: sequenceReorderAfterLine }) })) : null] })) : (trackRow);
942
- return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [previewConnected || window.remotion_isReadOnlyStudio ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: draggableTrackRow })) : (draggableTrackRow), previewConnected &&
1050
+ return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [previewConnected || window.remotion_isReadOnlyStudio ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: reorderableTrackRow })) : (reorderableTrackRow), previewConnected &&
943
1051
  (0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
944
1052
  isExpanded &&
945
1053
  hasExpandableContent &&
@@ -4,9 +4,28 @@ import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-s
4
4
  import type { MoveEffectKeyframeChange, MoveSequenceKeyframeChange } from './call-move-keyframe';
5
5
  import { type SaveSequencePropChange } from './save-sequence-prop';
6
6
  export declare const timelineSequenceFromDragSnapThresholdPx = 10;
7
+ export type TimelineSequenceMediaDurationDragLimits = {
8
+ readonly initialDuration: number;
9
+ readonly maximumDuration: number;
10
+ };
11
+ export declare const TimelineSequenceMediaDurationDragLimitsContext: React.Context<React.RefObject<Map<string, TimelineSequenceMediaDurationDragLimits | null>> | null>;
12
+ export declare const TimelineSequenceMediaDurationDragLimitsProvider: React.FC<{
13
+ readonly children: React.ReactNode;
14
+ }>;
15
+ export declare const getTimelineSequenceMediaDurationDragLimits: ({ cascadedStart, displayDurationInFrames, displayStart, effectiveMaxMediaDuration, explicitDurationInFrames, hasImplicitDuration, naturalMediaDuration, timelineDurationInFrames, }: {
16
+ readonly cascadedStart: number;
17
+ readonly displayDurationInFrames: number;
18
+ readonly displayStart: number;
19
+ readonly effectiveMaxMediaDuration: number | null;
20
+ readonly explicitDurationInFrames: number | null;
21
+ readonly hasImplicitDuration: boolean;
22
+ readonly naturalMediaDuration: number | null;
23
+ readonly timelineDurationInFrames: number;
24
+ }) => TimelineSequenceMediaDurationDragLimits | null;
7
25
  export type TimelineSequenceDurationDragTarget = {
8
26
  readonly fileName: string;
9
27
  readonly initialDuration: number;
28
+ readonly maximumDuration: number;
10
29
  readonly minimumDuration: number;
11
30
  readonly nodePath: SequencePropsSubscriptionKey;
12
31
  readonly schema: InteractivitySchema;
@@ -24,6 +43,8 @@ export type TimelineSequenceLeftEdgeDragTarget = {
24
43
  };
25
44
  export type TimelineSequenceFromDragTarget = {
26
45
  readonly canSnapToTimelineStart: boolean;
46
+ readonly minimumDeltaFrames: number;
47
+ readonly initialTimelineStart: number;
27
48
  readonly effectKeyframes: TimelineSequenceEffectKeyframeDragTarget[];
28
49
  readonly fileName: string;
29
50
  readonly initialFrom: number;
@@ -44,14 +65,14 @@ type TimelineSequenceEffectKeyframeDragTarget = TimelineSequenceKeyframeDragTarg
44
65
  export declare const isTransitionSeriesSequence: (sequence: TSequence) => boolean;
45
66
  export declare const isCascadingSequence: (sequence: TSequence) => boolean;
46
67
  export declare const isTimelineSequenceDurationDraggable: (sequence: TSequence) => boolean;
47
- export declare const canResizeTimelineSequenceDuration: ({ sequence, status, }: {
48
- readonly sequence: TSequence;
68
+ export declare const canResizeTimelineSequenceDuration: ({ status, }: {
49
69
  readonly status: CanUpdateSequencePropStatus | undefined;
50
70
  }) => boolean;
51
71
  export declare const isTimelineSequenceLeftEdgeDraggable: (sequence: TSequence) => boolean;
52
- export declare const getTimelineSequenceDurationDragValue: ({ initialDuration, deltaFrames, minimumDuration, }: {
72
+ export declare const getTimelineSequenceDurationDragValue: ({ initialDuration, deltaFrames, maximumDuration, minimumDuration, }: {
53
73
  readonly initialDuration: number;
54
74
  readonly deltaFrames: number;
75
+ readonly maximumDuration: number;
55
76
  readonly minimumDuration?: number | undefined;
56
77
  }) => number;
57
78
  export declare const getTimelineSequenceLeftEdgeDragDelta: ({ initialDuration, initialTrimBefore, deltaFrames, playbackRate, minimumDuration, }: {
@@ -85,8 +106,9 @@ export declare const getTimelineSequenceFromDragValue: ({ initialFrom, deltaFram
85
106
  readonly initialFrom: number;
86
107
  readonly deltaFrames: number;
87
108
  }) => number;
88
- export declare const getTimelineSequenceFromDragDelta: ({ deltaFrames, pxPerFrame, snappingEnabled, targets, }: {
109
+ export declare const getTimelineSequenceFromDragDelta: ({ deltaFrames, timelineDurationInFrames, pxPerFrame, snappingEnabled, targets, }: {
89
110
  readonly deltaFrames: number;
111
+ readonly timelineDurationInFrames: number;
90
112
  readonly pxPerFrame: number;
91
113
  readonly snappingEnabled: boolean;
92
114
  readonly targets: readonly TimelineSequenceFromDragTarget[];
@@ -102,12 +124,15 @@ export declare const getTimelineSequenceFromDragKeyframeMoves: ({ targets, delta
102
124
  readonly effectKeyframes: MoveEffectKeyframeChange[];
103
125
  readonly sequenceKeyframes: MoveSequenceKeyframeChange[];
104
126
  };
105
- export declare const getTimelineSequenceDurationDragTargets: ({ draggedNodePathInfo, selectedItems, sequences, overrideIdsToNodePaths, propStatuses, }: {
127
+ export declare const getTimelineSequenceDurationDragTargets: ({ draggedNodePathInfo, draggedSequenceMediaDurationDragLimits, selectedSequenceMediaDurationDragLimits, selectedItems, sequences, overrideIdsToNodePaths, propStatuses, timelineDurationInFrames, }: {
106
128
  readonly draggedNodePathInfo: SequenceNodePathInfo;
129
+ readonly draggedSequenceMediaDurationDragLimits: TimelineSequenceMediaDurationDragLimits | null;
130
+ readonly selectedSequenceMediaDurationDragLimits: ReadonlyMap<string, TimelineSequenceMediaDurationDragLimits | null> | null;
107
131
  readonly selectedItems: readonly import("@remotion/canvas").CanvasSelectionItem[];
108
132
  readonly sequences: TSequence[];
109
133
  readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
110
134
  readonly propStatuses: PropStatuses;
135
+ readonly timelineDurationInFrames: number;
111
136
  }) => TimelineSequenceDurationDragTarget[] | null;
112
137
  export declare const getTimelineSequenceLeftEdgeDragTargets: ({ draggedNodePathInfo, selectedItems, sequences, overrideIdsToNodePaths, propStatuses, }: {
113
138
  readonly draggedNodePathInfo: SequenceNodePathInfo;
@@ -128,6 +153,8 @@ export declare const TimelineSequenceLeftEdgeDragHandle: React.NamedExoticCompon
128
153
  readonly windowWidth: number;
129
154
  readonly timelineDurationInFrames: number;
130
155
  readonly onDragEnd: (wasDragged: boolean) => void;
156
+ readonly onSelect: (interaction?: import("@remotion/canvas").CanvasSelectionInteraction | undefined) => void;
157
+ readonly selected: boolean;
131
158
  }>;
132
159
  export declare const useTimelineSequenceFromDrag: ({ nodePathInfo, windowWidth, timelineDurationInFrames, onDragEnd, }: {
133
160
  readonly nodePathInfo: SequenceNodePathInfo | null;
@@ -139,8 +166,11 @@ export declare const useTimelineSequenceFromDrag: ({ nodePathInfo, windowWidth,
139
166
  };
140
167
  export declare const TimelineSequenceRightEdgeDragHandle: React.NamedExoticComponent<{
141
168
  readonly nodePathInfo: SequenceNodePathInfo;
169
+ readonly mediaDurationDragLimits: TimelineSequenceMediaDurationDragLimits | null;
142
170
  readonly windowWidth: number;
143
171
  readonly timelineDurationInFrames: number;
144
172
  readonly onDragEnd: (wasDragged: boolean) => void;
173
+ readonly onSelect: (interaction?: import("@remotion/canvas").CanvasSelectionInteraction | undefined) => void;
174
+ readonly selected: boolean;
145
175
  }>;
146
176
  export {};