@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
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.TimelineSequence = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const canvas_1 = require("@remotion/canvas");
38
39
  const react_1 = __importStar(require("react"));
39
40
  const remotion_1 = require("remotion");
40
41
  const client_id_1 = require("../../helpers/client-id");
@@ -45,7 +46,7 @@ const get_timeline_sequence_layout_1 = require("../../helpers/get-timeline-seque
45
46
  const interactivity_enabled_1 = require("../../helpers/interactivity-enabled");
46
47
  const is_video_with_last_frame_hold_1 = require("../../helpers/is-video-with-last-frame-hold");
47
48
  const timeline_layout_1 = require("../../helpers/timeline-layout");
48
- const use_max_media_duration_1 = require("../../helpers/use-max-media-duration");
49
+ const use_media_metadata_1 = require("../../helpers/use-media-metadata");
49
50
  const modals_1 = require("../../state/modals");
50
51
  const AudioWaveform_1 = require("../AudioWaveform");
51
52
  const ConfirmationDialog_1 = require("../ConfirmationDialog");
@@ -55,6 +56,8 @@ const use_select_asset_1 = require("../use-select-asset");
55
56
  const disable_sequence_interactivity_1 = require("./disable-sequence-interactivity");
56
57
  const duplicate_selected_timeline_item_1 = require("./duplicate-selected-timeline-item");
57
58
  const get_sequence_context_menu_items_1 = require("./get-sequence-context-menu-items");
59
+ const get_sequence_split_menu_item_1 = require("./get-sequence-split-menu-item");
60
+ const get_timeline_media_start_frame_1 = require("./get-timeline-media-start-frame");
58
61
  const get_timeline_sequence_visible_layout_1 = require("./get-timeline-sequence-visible-layout");
59
62
  const imperative_state_1 = require("./imperative-state");
60
63
  const LoopedTimelineIndicators_1 = require("./LoopedTimelineIndicators");
@@ -66,6 +69,7 @@ const TimelineSequenceRightEdgeDragHandle_1 = require("./TimelineSequenceRightEd
66
69
  const TimelineVideoInfo_1 = require("./TimelineVideoInfo");
67
70
  const TimelineViewport_1 = require("./TimelineViewport");
68
71
  const TimelineWidthProvider_1 = require("./TimelineWidthProvider");
72
+ const use_asset_timeline_context_menu_1 = require("./use-asset-timeline-context-menu");
69
73
  const use_delete_timeline_items_1 = require("./use-delete-timeline-items");
70
74
  const use_open_sequence_in_apps_1 = require("./use-open-sequence-in-apps");
71
75
  const use_sequence_freeze_frame_menu_item_1 = require("./use-sequence-freeze-frame-menu-item");
@@ -115,8 +119,10 @@ const TimelineSequenceNegativeStartInner = ({ left, width, leftEdgeVisible, clip
115
119
  return (jsx_runtime_1.jsx("div", { style: outerStyle, children: jsx_runtime_1.jsx("div", { style: innerStyle }) }));
116
120
  };
117
121
  const TimelineSequenceNegativeStart = react_1.default.memo(TimelineSequenceNegativeStartInner);
118
- const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premount, postmount, negativeStart, leftEdgeVisible, negativeStartClipped, style, children, edgeDragHandles, nodePathInfo, sequenceFrameOffset, fromCanUpdate, frozenFrame, onMoveDragPointerDown, onPointerDownCapture, onDoubleClick, }) => {
122
+ const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premount, postmount, negativeStart, leftEdgeVisible, negativeStartClipped, style, children, edgeDragHandles, nodePathInfo, sequenceFrameOffset, fromCanUpdate, frozenFrame, onMoveDragPointerDown, onPointerDownCapture, onClick, }) => {
119
123
  var _a, _b, _c;
124
+ const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
125
+ const isAsset = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'asset';
120
126
  const ref = (0, react_1.useRef)(null);
121
127
  const { onSelect, selectable, selected, selectionItem } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
122
128
  (0, TimelineSelection_1.useTimelineMarqueeSelectableItem)(selectionItem, ref);
@@ -160,9 +166,9 @@ const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premount, po
160
166
  ...style,
161
167
  background: negativeStart ? colors_1.TRANSPARENT : style.background,
162
168
  border: negativeStart ? 'none' : style.border,
163
- opacity: selected ? 1 : 0.75,
169
+ opacity: selected || isAsset ? 1 : 0.75,
164
170
  };
165
- }, [negativeStart, selected, style]);
171
+ }, [isAsset, negativeStart, selected, style]);
166
172
  const content = (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [premount ? (jsx_runtime_1.jsx("div", { style: {
167
173
  left: premount.left,
168
174
  width: premount.width,
@@ -197,7 +203,7 @@ const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premount, po
197
203
  display: 'flex',
198
204
  alignItems: 'center',
199
205
  }, children: jsx_runtime_1.jsx(TimelineSequenceFrame_1.TimelineSequenceFrame, { premounted: isPremounting, postmounted: isPostmounting ? s.duration - 1 : null, roundedFrame: roundedFrame, frozenFrame: frozenFrame }) })) : null] }));
200
- return (jsx_runtime_1.jsxs("div", { ref: ref, [TimelineSelection_1.TIMELINE_MARQUEE_ITEM_ATTR]: true, style: actualStyle, title: s.displayName, onPointerDownCapture: onPointerDownCapture, onPointerDown: selectable ? onPointerDown : undefined, onDoubleClick: onDoubleClick, children: [negativeStart ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
206
+ return (jsx_runtime_1.jsxs("div", { ref: ref, [TimelineSelection_1.TIMELINE_MARQUEE_ITEM_ATTR]: true, style: actualStyle, title: s.displayName, onPointerDownCapture: onPointerDownCapture, onPointerDown: selectable ? onPointerDown : undefined, onClick: onClick !== null && onClick !== void 0 ? onClick : undefined, children: [negativeStart ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
201
207
  jsx_runtime_1.jsx(TimelineSequenceNegativeStart, { left: negativeStart.left, width: negativeStart.width, leftEdgeVisible: leftEdgeVisible, clipped: negativeStartClipped }), jsx_runtime_1.jsx("div", { style: {
202
208
  background: style.background,
203
209
  border: style.border,
@@ -232,14 +238,31 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
232
238
  // If a duration is 1, it is essentially a still and it should have width 0
233
239
  // Some compositions may not be longer than their media duration,
234
240
  // if that is the case, it needs to be asynchronously determined
235
- var _a, _b, _c;
236
- var _d, _e, _f, _g, _h, _j, _k;
241
+ var _a, _b, _c, _d, _e;
242
+ var _f, _g, _h, _j, _k, _l, _m;
237
243
  const video = remotion_1.Internals.useVideo();
244
+ const { sequences } = (0, react_1.useContext)(remotion_1.Internals.SequenceManager);
238
245
  const renderWindow = (0, react_1.useContext)(TimelineViewport_1.TimelineViewportContext);
246
+ const mediaDurationDragLimitsRegistry = (0, react_1.useContext)(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceMediaDurationDragLimitsContext);
239
247
  const dragAwareDoubleClick = (0, react_1.useMemo)(() => (0, drag_aware_double_click_1.createDragAwareDoubleClickTracker)(), []);
240
- const maxMediaDuration = (0, use_max_media_duration_1.useMaxMediaDuration)(s, (_d = video === null || video === void 0 ? void 0 : video.fps) !== null && _d !== void 0 ? _d : 30);
241
- const effectiveMaxMediaDuration = s.loopDisplay ? null : maxMediaDuration;
248
+ const mediaMetadata = (0, use_media_metadata_1.useMediaMetadata)(s.type === 'audio' || s.type === 'video' ? s.src : null);
242
249
  const extendVideoLastFrame = (0, is_video_with_last_frame_hold_1.isVideoWithLastFrameHold)(s);
250
+ const naturalMediaDuration = (s.type === 'audio' || s.type === 'video') &&
251
+ mediaMetadata !== null &&
252
+ s.playbackRate > 0
253
+ ? Math.max(0, (mediaMetadata.duration * ((_f = video === null || video === void 0 ? void 0 : video.fps) !== null && _f !== void 0 ? _f : 30) -
254
+ (0, get_timeline_media_start_frame_1.getTimelineMediaStartFrame)({
255
+ startMediaFrom: s.startMediaFrom,
256
+ mediaFrameAtSequenceZero: s.mediaFrameAtSequenceZero,
257
+ sequenceFrameOffset,
258
+ playbackRate: s.playbackRate,
259
+ })) /
260
+ s.playbackRate)
261
+ : null;
262
+ const maxMediaDuration = s.type === 'sequence' || s.type === 'image' || extendVideoLastFrame
263
+ ? Infinity
264
+ : naturalMediaDuration;
265
+ const effectiveMaxMediaDuration = s.loopDisplay ? null : maxMediaDuration;
243
266
  const { canOpenInEditor, canConfigureApps, codingAgentInfo, editorInfo, openInCodingAgent, openInEditor, originalLocation, } = (0, use_open_sequence_in_apps_1.useOpenSequenceInApps)(s);
244
267
  const validatedLocation = (0, react_1.useMemo)(() => {
245
268
  var _a;
@@ -255,7 +278,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
255
278
  };
256
279
  }, [originalLocation]);
257
280
  const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
258
- const nodePath = (_e = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.sequenceSubscriptionKey) !== null && _e !== void 0 ? _e : null;
281
+ const nodePath = (_g = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.sequenceSubscriptionKey) !== null && _g !== void 0 ? _g : null;
259
282
  const propStatusesForOverride = (0, react_1.useMemo)(() => {
260
283
  return nodePath
261
284
  ? remotion_1.Internals.getPropStatusesCtx(propStatuses, nodePath)
@@ -265,7 +288,6 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
265
288
  ((_a = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames) === null || _a === void 0 ? void 0 : _a.status) === 'static');
266
289
  const durationCanResize = Boolean((0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
267
290
  (0, TimelineSequenceRightEdgeDragHandle_1.canResizeTimelineSequenceDuration)({
268
- sequence: s,
269
291
  status: propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames,
270
292
  }));
271
293
  const fromCanUpdate = Boolean((0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
@@ -278,6 +300,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
278
300
  const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
279
301
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
280
302
  const selectAsset = (0, use_select_asset_1.useSelectAsset)();
303
+ const assetContextMenu = (0, use_asset_timeline_context_menu_1.useAssetTimelineContextMenu)();
281
304
  const selectComposition = (0, InitialCompositionLoader_1.useSelectComposition)();
282
305
  const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
283
306
  const deleteTimelineItems = (0, use_delete_timeline_items_1.useDeleteTimelineItems)();
@@ -291,7 +314,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
291
314
  }
292
315
  return selectedItems.flatMap((item) => item.type === 'sequence' ? [item.nodePathInfo] : []);
293
316
  }, [selected, selectedItems]);
294
- const onSequenceDoubleClick = (0, react_1.useCallback)((e) => {
317
+ const performSequenceDoubleClick = (0, react_1.useCallback)((e) => {
295
318
  if ((0, TimelineSelection_1.isTimelineSelectionModifierEvent)(e)) {
296
319
  e.stopPropagation();
297
320
  return;
@@ -325,10 +348,16 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
325
348
  selectComposition,
326
349
  sequenceFrameOffset,
327
350
  ]);
351
+ const onSequenceClick = (0, react_1.useCallback)((e) => {
352
+ if (!dragAwareDoubleClick.acceptClickAsDoubleClick(e)) {
353
+ return;
354
+ }
355
+ performSequenceDoubleClick(e);
356
+ }, [dragAwareDoubleClick, performSequenceDoubleClick]);
328
357
  const canHandleSequenceDoubleClick = connectedCompositions.length === 1 || canOpenInEditor;
329
358
  const canDeleteFromSource = Boolean(nodePath && (validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source));
330
359
  const deleteDisabled = !previewInteractive || !s.controls || !canDeleteFromSource;
331
- const isProgrammaticallyDuplicated = ((_f = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.numberOfSequencesWithThisNodePath) !== null && _f !== void 0 ? _f : 1) > 1;
360
+ const isProgrammaticallyDuplicated = ((_h = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.numberOfSequencesWithThisNodePath) !== null && _h !== void 0 ? _h : 1) > 1;
332
361
  const duplicateDisabled = deleteDisabled || isProgrammaticallyDuplicated;
333
362
  const disableInteractivityDisabled = !previewInteractive ||
334
363
  !s.showInTimeline ||
@@ -395,6 +424,9 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
395
424
  ]);
396
425
  const getContextMenuItems = (0, react_1.useCallback)(() => {
397
426
  var _a;
427
+ if (assetContextMenu !== null) {
428
+ return assetContextMenu;
429
+ }
398
430
  if (selectable && !selected) {
399
431
  onSelect({ shiftKey: false, toggleKey: false });
400
432
  }
@@ -406,6 +438,14 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
406
438
  onDuplicateSelectedSequences,
407
439
  });
408
440
  }
441
+ const splitMenuItem = (0, get_sequence_split_menu_item_1.getSequenceSplitMenuItem)({
442
+ nodePathInfo,
443
+ sequence: s,
444
+ propStatuses: propStatusesForOverride,
445
+ splitFrame: (0, imperative_state_1.getCurrentFrame)(),
446
+ canEditSource: previewInteractive && Boolean(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source),
447
+ hasMultipleSelection: selected && selectedItems.length > 1,
448
+ });
409
449
  const freezeFrameMenuItem = (0, use_sequence_freeze_frame_menu_item_1.getSequenceFreezeFrameMenuItem)({
410
450
  clientId: previewInteractive && previewServerState.type === 'connected'
411
451
  ? previewServerState.clientId
@@ -447,11 +487,15 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
447
487
  originalLocation,
448
488
  selectAsset,
449
489
  sequence: s,
450
- sourceActions: (0, interactivity_enabled_1.isStudioInteractivityEnabled)() && freezeFrameMenuItem
451
- ? [freezeFrameMenuItem]
490
+ sourceActions: (0, interactivity_enabled_1.isStudioInteractivityEnabled)()
491
+ ? [
492
+ ...(splitMenuItem ? [splitMenuItem] : []),
493
+ ...(freezeFrameMenuItem ? [freezeFrameMenuItem] : []),
494
+ ]
452
495
  : [],
453
496
  });
454
497
  }, [
498
+ assetContextMenu,
455
499
  canOpenInEditor,
456
500
  canConfigureApps,
457
501
  codingAgentInfo,
@@ -462,6 +506,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
462
506
  isProgrammaticallyDuplicated,
463
507
  mediaSrc,
464
508
  nodePath,
509
+ nodePathInfo,
465
510
  onSelect,
466
511
  onDeleteSequenceFromSource,
467
512
  onDeleteSelectedSequences,
@@ -478,6 +523,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
478
523
  selectAsset,
479
524
  selectable,
480
525
  selected,
526
+ selectedItems.length,
481
527
  selectedSequenceNodePathInfos,
482
528
  sequenceFrameOffset,
483
529
  setPropStatuses,
@@ -488,7 +534,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
488
534
  const { onPointerDown: onMoveDragPointerDown } = (0, TimelineSequenceRightEdgeDragHandle_1.useTimelineSequenceFromDrag)({
489
535
  nodePathInfo,
490
536
  windowWidth,
491
- timelineDurationInFrames: (_g = video === null || video === void 0 ? void 0 : video.durationInFrames) !== null && _g !== void 0 ? _g : 1,
537
+ timelineDurationInFrames: (_j = video === null || video === void 0 ? void 0 : video.durationInFrames) !== null && _j !== void 0 ? _j : 1,
492
538
  onDragEnd: dragAwareDoubleClick.endPointerGesture,
493
539
  });
494
540
  if (!video) {
@@ -502,7 +548,8 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
502
548
  durationInFrames: displayDurationInFrames,
503
549
  startFrom: s.loopDisplay ? s.from + s.loopDisplay.startOffset : s.from,
504
550
  cascadedStart,
505
- startFromMedia: s.type === 'sequence' || s.type === 'image' ? 0 : s.startMediaFrom,
551
+ // The media duration cap already accounts for trimming and playback speed.
552
+ startFromMedia: 0,
506
553
  maxMediaDuration: effectiveMaxMediaDuration,
507
554
  video,
508
555
  windowWidth,
@@ -549,7 +596,76 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
549
596
  }, [visibleLayout]);
550
597
  const showLeftBorderRadius = (visibleLayout === null || visibleLayout === void 0 ? void 0 : visibleLayout.leftEdgeVisible) === true &&
551
598
  localStart >= 0 &&
552
- ((_h = s.trimBefore) !== null && _h !== void 0 ? _h : 0) === 0;
599
+ ((_k = s.trimBefore) !== null && _k !== void 0 ? _k : 0) === 0 &&
600
+ (s.type === 'sequence' ||
601
+ s.type === 'image' ||
602
+ (0, get_timeline_media_start_frame_1.getTimelineMediaStartFrame)({
603
+ startMediaFrom: s.startMediaFrom,
604
+ mediaFrameAtSequenceZero: s.mediaFrameAtSequenceZero,
605
+ sequenceFrameOffset,
606
+ playbackRate: s.playbackRate,
607
+ }) === 0);
608
+ // Compare frame boundaries: fractional media durations still occupy the last frame.
609
+ const endsAtNaturalMediaDuration = !s.loopDisplay &&
610
+ s.frozenFrame === null &&
611
+ (s.type === 'audio' || s.type === 'video') &&
612
+ s.frozenMediaFrame === null &&
613
+ naturalMediaDuration !== null &&
614
+ Number.isFinite(naturalMediaDuration) &&
615
+ naturalMediaDuration > 0 &&
616
+ Math.ceil(Math.min(s.duration, video.durationInFrames - s.from, maxMediaDuration !== null && maxMediaDuration !== void 0 ? maxMediaDuration : Infinity)) === Math.ceil(naturalMediaDuration);
617
+ const parentSequence = sequences.find((candidate) => candidate.id === s.parent);
618
+ const parentEnd = parentSequence
619
+ ? (0, canvas_1.getTimelineVisibleStart)(parentSequence, sequences) +
620
+ (0, canvas_1.getTimelineVisibleDuration)(parentSequence, sequences)
621
+ : video.durationInFrames;
622
+ const endsAtContainerBoundary = Math.ceil(s.from + displayDurationInFrames) >=
623
+ Math.ceil(Math.min(parentEnd, video.durationInFrames));
624
+ const hasImplicitMediaDuration = (s.type === 'audio' || s.type === 'video') &&
625
+ ((_d = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames) === null || _d === void 0 ? void 0 : _d.status) === 'static' &&
626
+ propStatusesForOverride.durationInFrames.codeValue === undefined;
627
+ const durationInFramesCodeValue = ((_e = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames) === null || _e === void 0 ? void 0 : _e.status) === 'static'
628
+ ? propStatusesForOverride.durationInFrames.codeValue
629
+ : null;
630
+ const explicitDurationInFrames = typeof durationInFramesCodeValue === 'number' &&
631
+ Number.isFinite(durationInFramesCodeValue)
632
+ ? durationInFramesCodeValue
633
+ : null;
634
+ const isMedia = s.type === 'audio' || s.type === 'video';
635
+ const mediaDurationDragLimits = isMedia
636
+ ? (0, TimelineSequenceRightEdgeDragHandle_1.getTimelineSequenceMediaDurationDragLimits)({
637
+ cascadedStart,
638
+ displayDurationInFrames: s.duration,
639
+ displayStart: s.from,
640
+ effectiveMaxMediaDuration,
641
+ explicitDurationInFrames,
642
+ hasImplicitDuration: hasImplicitMediaDuration,
643
+ naturalMediaDuration,
644
+ timelineDurationInFrames: video.durationInFrames,
645
+ })
646
+ : null;
647
+ const mediaDurationDragSelectionKey = nodePathInfo
648
+ ? (0, TimelineSelection_1.getTimelineSequenceSelectionKey)(nodePathInfo)
649
+ : null;
650
+ (0, react_1.useEffect)(() => {
651
+ if (mediaDurationDragLimitsRegistry === null ||
652
+ mediaDurationDragSelectionKey === null ||
653
+ !isMedia) {
654
+ return;
655
+ }
656
+ const registry = mediaDurationDragLimitsRegistry.current;
657
+ registry.set(mediaDurationDragSelectionKey, mediaDurationDragLimits);
658
+ return () => {
659
+ registry.delete(mediaDurationDragSelectionKey);
660
+ };
661
+ }, [
662
+ isMedia,
663
+ mediaDurationDragLimits,
664
+ mediaDurationDragLimitsRegistry,
665
+ mediaDurationDragSelectionKey,
666
+ ]);
667
+ const showRightBorderRadius = (visibleLayout === null || visibleLayout === void 0 ? void 0 : visibleLayout.rightEdgeVisible) === true &&
668
+ (endsAtContainerBoundary || endsAtNaturalMediaDuration);
553
669
  const style = (0, react_1.useMemo)(() => {
554
670
  var _a, _b;
555
671
  return {
@@ -567,8 +683,8 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
567
683
  : colors_1.TRANSPARENT,
568
684
  borderTopLeftRadius: showLeftBorderRadius ? 2 : 0,
569
685
  borderBottomLeftRadius: showLeftBorderRadius ? 2 : 0,
570
- borderTopRightRadius: (visibleLayout === null || visibleLayout === void 0 ? void 0 : visibleLayout.rightEdgeVisible) ? 2 : 0,
571
- borderBottomRightRadius: (visibleLayout === null || visibleLayout === void 0 ? void 0 : visibleLayout.rightEdgeVisible) ? 2 : 0,
686
+ borderTopRightRadius: showRightBorderRadius ? 2 : 0,
687
+ borderBottomRightRadius: showRightBorderRadius ? 2 : 0,
572
688
  position: 'absolute',
573
689
  height: (0, timeline_layout_1.getTimelineLayerHeight)(s.type),
574
690
  marginLeft: (_a = visibleLayout === null || visibleLayout === void 0 ? void 0 : visibleLayout.marginLeft) !== null && _a !== void 0 ? _a : 0,
@@ -577,11 +693,18 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
577
693
  // Edge handles extend outside the layer; media is clipped separately.
578
694
  overflow: 'visible',
579
695
  };
580
- }, [negativeStartClipped, s.type, showLeftBorderRadius, visibleLayout]);
696
+ }, [
697
+ negativeStartClipped,
698
+ s.type,
699
+ showLeftBorderRadius,
700
+ showRightBorderRadius,
701
+ visibleLayout,
702
+ ]);
581
703
  const showRightEdgeDragHandle = (0, TimelineSequenceRightEdgeDragHandle_1.isTimelineSequenceDurationDraggable)(s) &&
582
704
  nodePath !== null &&
583
705
  validatedLocation !== null &&
584
- durationCanResize;
706
+ durationCanResize &&
707
+ (!isMedia || mediaDurationDragLimits !== null);
585
708
  const showLeftEdgeDragHandle = (0, TimelineSequenceRightEdgeDragHandle_1.isTimelineSequenceLeftEdgeDraggable)(s) &&
586
709
  nodePath !== null &&
587
710
  validatedLocation !== null &&
@@ -598,14 +721,14 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
598
721
  const mediaDisplayDurationInFrames = visibleLayout.media
599
722
  ? visibleLayout.media.width / frameIncrement
600
723
  : 0;
601
- const sequence = (jsx_runtime_1.jsxs(TimelineSequenceCurrentFrame, { s: s, displayDurationInFrames: displayDurationInFrames, premount: visibleLayout.premount, postmount: visibleLayout.postmount, negativeStart: visibleLayout.negativeStart, leftEdgeVisible: visibleLayout.leftEdgeVisible, negativeStartClipped: negativeStartClipped, style: style, nodePathInfo: nodePathInfo, sequenceFrameOffset: sequenceFrameOffset, fromCanUpdate: fromCanUpdate, frozenFrame: frozenFrame, onMoveDragPointerDown: onMoveDragPointerDown, onPointerDownCapture: dragAwareDoubleClick.beginPointerGesture, edgeDragHandles: jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [showLeftEdgeDragHandle &&
724
+ const sequence = (jsx_runtime_1.jsxs(TimelineSequenceCurrentFrame, { s: s, displayDurationInFrames: displayDurationInFrames, premount: visibleLayout.premount, postmount: visibleLayout.postmount, negativeStart: visibleLayout.negativeStart, leftEdgeVisible: visibleLayout.leftEdgeVisible, negativeStartClipped: negativeStartClipped, style: style, nodePathInfo: nodePathInfo, sequenceFrameOffset: sequenceFrameOffset, fromCanUpdate: fromCanUpdate, frozenFrame: frozenFrame, onMoveDragPointerDown: onMoveDragPointerDown, onPointerDownCapture: dragAwareDoubleClick.beginPointerGesture, onClick: canHandleSequenceDoubleClick ? onSequenceClick : null, edgeDragHandles: jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [showLeftEdgeDragHandle &&
602
725
  visibleLayout.leftEdgeVisible &&
603
726
  negativeStartWidth === 0 &&
604
727
  nodePathInfo &&
605
- validatedLocation ? (jsx_runtime_1.jsx(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceLeftEdgeDragHandle, { nodePathInfo: nodePathInfo, windowWidth: windowWidth, timelineDurationInFrames: (_j = video.durationInFrames) !== null && _j !== void 0 ? _j : 1, onDragEnd: dragAwareDoubleClick.endPointerGesture })) : null, showRightEdgeDragHandle &&
728
+ validatedLocation ? (jsx_runtime_1.jsx(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceLeftEdgeDragHandle, { nodePathInfo: nodePathInfo, windowWidth: windowWidth, timelineDurationInFrames: (_l = video.durationInFrames) !== null && _l !== void 0 ? _l : 1, onDragEnd: dragAwareDoubleClick.endPointerGesture, onSelect: onSelect, selected: selected })) : null, showRightEdgeDragHandle &&
606
729
  visibleLayout.rightEdgeVisible &&
607
730
  nodePathInfo &&
608
- validatedLocation ? (jsx_runtime_1.jsx(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceRightEdgeDragHandle, { nodePathInfo: nodePathInfo, windowWidth: windowWidth, timelineDurationInFrames: (_k = video.durationInFrames) !== null && _k !== void 0 ? _k : 1, onDragEnd: dragAwareDoubleClick.endPointerGesture })) : null] }), onDoubleClick: canHandleSequenceDoubleClick ? onSequenceDoubleClick : undefined, children: [s.type === 'audio' && visibleLayout.media ? (jsx_runtime_1.jsx("div", { style: mediaVisualizationStyle, children: jsx_runtime_1.jsx(AudioWaveform_1.AudioWaveform, { src: s.src, height: timeline_layout_1.TIMELINE_LAYER_HEIGHT_AUDIO, doesVolumeChange: s.doesVolumeChange, muted: s.muted, visualizationWidth: visibleLayout.media.width, startFrom: s.startMediaFrom, durationInFrames: s.duration, displayOffsetInFrames: mediaDisplayOffsetInFrames, displayDurationInFrames: mediaDisplayDurationInFrames, volume: s.volume, playbackRate: s.playbackRate, loopDisplay: s.loopDisplay }) })) : null, s.type === 'video' && visibleLayout.media ? (jsx_runtime_1.jsx(TimelineVideoInfo_1.TimelineVideoInfo, { src: s.src, visualizationWidth: visibleLayout.media.width, displayOffsetInFrames: mediaDisplayOffsetInFrames, displayDurationInFrames: mediaDisplayDurationInFrames, startMediaFrom: s.startMediaFrom, mediaFrameAtSequenceZero: s.mediaFrameAtSequenceZero, sequenceFrameOffset: sequenceFrameOffset, playbackRate: s.playbackRate, volume: s.volume, muted: s.muted, doesVolumeChange: s.doesVolumeChange, marginLeft: visibleLayout.media.left, loopDisplay: s.loopDisplay, frozenMediaFrame: s.frozenMediaFrame, extendLastFrame: extendVideoLastFrame })) : null, s.type === 'image' && visibleLayout.media ? (jsx_runtime_1.jsx("div", { style: mediaVisualizationStyle, children: jsx_runtime_1.jsx(TimelineImageInfo_1.TimelineImageInfo, { src: s.src, offsetInPixels: visibleLayout.media.offset }) })) : null, s.loopDisplay === undefined ? null : (jsx_runtime_1.jsx(LoopedTimelineIndicators_1.LoopedTimelineIndicator, { loops: s.loopDisplay.numberOfTimes, fullWidth: width, visibleOffset: visibleLayout.cropLeft, visibleWidth: visibleLayout.width }))] }));
731
+ validatedLocation ? (jsx_runtime_1.jsx(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceRightEdgeDragHandle, { nodePathInfo: nodePathInfo, mediaDurationDragLimits: mediaDurationDragLimits, windowWidth: windowWidth, timelineDurationInFrames: (_m = video.durationInFrames) !== null && _m !== void 0 ? _m : 1, onDragEnd: dragAwareDoubleClick.endPointerGesture, onSelect: onSelect, selected: selected })) : null] }), children: [s.type === 'audio' && visibleLayout.media ? (jsx_runtime_1.jsx("div", { style: mediaVisualizationStyle, children: jsx_runtime_1.jsx(AudioWaveform_1.AudioWaveform, { src: s.src, height: timeline_layout_1.TIMELINE_LAYER_HEIGHT_AUDIO, doesVolumeChange: s.doesVolumeChange, muted: s.muted, visualizationWidth: visibleLayout.media.width, startFrom: s.startMediaFrom, durationInFrames: s.duration, displayOffsetInFrames: mediaDisplayOffsetInFrames, displayDurationInFrames: mediaDisplayDurationInFrames, volume: s.volume, playbackRate: s.playbackRate, loopDisplay: s.loopDisplay }) })) : null, s.type === 'video' && visibleLayout.media ? (jsx_runtime_1.jsx(TimelineVideoInfo_1.TimelineVideoInfo, { src: s.src, visualizationWidth: visibleLayout.media.width, displayOffsetInFrames: mediaDisplayOffsetInFrames, displayDurationInFrames: mediaDisplayDurationInFrames, startMediaFrom: s.startMediaFrom, mediaFrameAtSequenceZero: s.mediaFrameAtSequenceZero, sequenceFrameOffset: sequenceFrameOffset, playbackRate: s.playbackRate, volume: s.volume, muted: s.muted, doesVolumeChange: s.doesVolumeChange, marginLeft: visibleLayout.media.left, loopDisplay: s.loopDisplay, frozenMediaFrame: s.frozenMediaFrame, extendLastFrame: extendVideoLastFrame })) : null, s.type === 'image' && visibleLayout.media ? (jsx_runtime_1.jsx("div", { style: mediaVisualizationStyle, children: jsx_runtime_1.jsx(TimelineImageInfo_1.TimelineImageInfo, { src: s.src, offsetInPixels: visibleLayout.media.offset }) })) : null, s.loopDisplay === undefined ? null : (jsx_runtime_1.jsx(LoopedTimelineIndicators_1.LoopedTimelineIndicator, { loops: s.loopDisplay.numberOfTimes, fullWidth: width, visibleOffset: visibleLayout.cropLeft, visibleWidth: visibleLayout.width }))] }));
609
732
  return previewConnected || window.remotion_isReadOnlyStudio ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: sequence })) : (sequence);
610
733
  };
611
734
  exports.TimelineSequence = react_1.default.memo(TimelineSequenceFn);
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { TSequence } from 'remotion';
3
3
  import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
4
- export declare const SEQUENCE_REORDER_MIME_TYPE = "application/remotion-sequence-reorder";
5
4
  export declare const TimelineSequenceItem: React.NamedExoticComponent<{
6
5
  readonly afterDropLineOffset: number;
7
6
  readonly sequence: TSequence;