@remotion/studio 4.0.527 → 4.0.529

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 (367) hide show
  1. package/dist/Studio.js +2 -0
  2. package/dist/components/AgentPrompt.js +3 -4
  3. package/dist/components/AppLaunchButton.d.ts +0 -1
  4. package/dist/components/AppLaunchButton.js +2 -5
  5. package/dist/components/AssetAudioVolume.js +2 -2
  6. package/dist/components/AssetSelectorItem.js +5 -5
  7. package/dist/components/AudioWaveform.d.ts +1 -0
  8. package/dist/components/AudioWaveform.js +10 -14
  9. package/dist/components/Button.d.ts +1 -1
  10. package/dist/components/Button.js +2 -2
  11. package/dist/components/CaptionInspector.js +1 -1
  12. package/dist/components/CaptionTextEditor.js +1 -1
  13. package/dist/components/CheckboardToggle.js +1 -1
  14. package/dist/components/CodeFrame.js +1 -1
  15. package/dist/components/CodingAgentButton.js +1 -1
  16. package/dist/components/ColorPicker/ColorPicker.d.ts +1 -1
  17. package/dist/components/ColorPicker/ColorPicker.js +2 -2
  18. package/dist/components/ColorPicker/ColorPickerPopup.js +1 -1
  19. package/dist/components/ColorPicker/checker.d.ts +1 -1
  20. package/dist/components/CompactExplanation.js +3 -3
  21. package/dist/components/CompositionSelectorItem.js +2 -2
  22. package/dist/components/ConfigSelect.js +1 -1
  23. package/dist/components/ConfigureDefaultEditorModal.js +2 -2
  24. package/dist/components/ControlButton.d.ts +0 -1
  25. package/dist/components/ControlButton.js +2 -2
  26. package/dist/components/CurrentAsset.js +4 -3
  27. package/dist/components/EditorRuler/Ruler.js +6 -3
  28. package/dist/components/EffectPickerModal.js +69 -43
  29. package/dist/components/ElementInstallConfirmation.js +3 -3
  30. package/dist/components/ElementLibrariesSettings.d.ts +2 -0
  31. package/dist/components/ElementLibrariesSettings.js +200 -0
  32. package/dist/components/ElementLibraryModal.js +1 -1
  33. package/dist/components/FramePersistor.js +3 -3
  34. package/dist/components/FullscreenToggle.js +1 -1
  35. package/dist/components/InitialCompositionLoader.js +5 -3
  36. package/dist/components/InlineAction.d.ts +2 -2
  37. package/dist/components/InlineAction.js +2 -3
  38. package/dist/components/InlineEditableTitle.d.ts +1 -1
  39. package/dist/components/InlineEditableTitle.js +3 -3
  40. package/dist/components/InspectorLocationCopy.js +1 -1
  41. package/dist/components/InspectorOpenInEditor.js +14 -3
  42. package/dist/components/InspectorPanel/AlignmentControls.js +31 -12
  43. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +1 -1
  44. package/dist/components/InspectorPanel/CompositionInspector.js +1 -5
  45. package/dist/components/InspectorPanel/CompositionMetadata.js +4 -4
  46. package/dist/components/InspectorPanel/EasingInspector.js +7 -3
  47. package/dist/components/InspectorPanel/ElementLibraryButton.js +3 -14
  48. package/dist/components/InspectorPanel/KeyframeEasingNavigator.js +6 -8
  49. package/dist/components/InspectorPanel/KeyframeInspector.js +29 -25
  50. package/dist/components/InspectorPanel/KeyframeSettings.js +16 -11
  51. package/dist/components/InspectorPanel/MultiSequenceField.js +1 -1
  52. package/dist/components/InspectorPanel/MultiSequenceInspector.js +2 -7
  53. package/dist/components/InspectorPanel/MultiSequenceNumberField.js +2 -2
  54. package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -1
  55. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +1 -1
  56. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +33 -14
  57. package/dist/components/InspectorPanel/SequenceWrapAction.d.ts +8 -0
  58. package/dist/components/InspectorPanel/SequenceWrapAction.js +143 -0
  59. package/dist/components/InspectorPanel/common.d.ts +6 -2
  60. package/dist/components/InspectorPanel/common.js +25 -9
  61. package/dist/components/InspectorPanel/easing-inspector-selection.d.ts +2 -1
  62. package/dist/components/InspectorPanel/easing-inspector-selection.js +4 -3
  63. package/dist/components/InspectorPanel/keyframe-inspector-frame.d.ts +2 -1
  64. package/dist/components/InspectorPanel/keyframe-inspector-frame.js +2 -2
  65. package/dist/components/InspectorSequenceSection.d.ts +1 -0
  66. package/dist/components/InspectorSequenceSection.js +12 -10
  67. package/dist/components/InspectorSourceLocation.js +2 -2
  68. package/dist/components/KeyboardShortcutsSettings.js +2 -2
  69. package/dist/components/LicenseKeyValidation.js +2 -2
  70. package/dist/components/LoopToggle.js +1 -1
  71. package/dist/components/Menu/MenuSubItem.js +4 -2
  72. package/dist/components/Menu/styles.d.ts +2 -2
  73. package/dist/components/MenuBuildIndicator.js +1 -1
  74. package/dist/components/MenuCompositionName.js +1 -1
  75. package/dist/components/Modals.js +7 -6
  76. package/dist/components/ModelManager.js +10 -9
  77. package/dist/components/MuteToggle.js +1 -1
  78. package/dist/components/NewComposition/CancelButton.js +10 -4
  79. package/dist/components/NewComposition/ComboBox.d.ts +1 -1
  80. package/dist/components/NewComposition/ComboBox.js +2 -2
  81. package/dist/components/NewComposition/DuplicateComposition.js +1 -1
  82. package/dist/components/NewComposition/InputDragger.d.ts +4 -2
  83. package/dist/components/NewComposition/InputDragger.js +29 -10
  84. package/dist/components/NewComposition/NewComposition.js +8 -7
  85. package/dist/components/NewComposition/RemInput.d.ts +1 -1
  86. package/dist/components/NewComposition/menu-typeahead.js +1 -1
  87. package/dist/components/OpenIssueButton.js +1 -1
  88. package/dist/components/OutlineToggle.js +1 -1
  89. package/dist/components/PlayPause.js +1 -1
  90. package/dist/components/PlaybackRateSelector.js +1 -1
  91. package/dist/components/PreviewToolbarOverflowButton.js +1 -1
  92. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -1
  93. package/dist/components/RenderButton.js +2 -4
  94. package/dist/components/RenderModal/InfoBubble.d.ts +1 -1
  95. package/dist/components/RenderModal/InfoBubble.js +2 -2
  96. package/dist/components/RenderModal/NumberSetting.js +1 -1
  97. package/dist/components/RenderModal/OptionExplainerBubble.js +2 -2
  98. package/dist/components/RenderModal/RenderModalAdvanced.js +2 -2
  99. package/dist/components/RenderModal/RenderModalAudio.js +2 -2
  100. package/dist/components/RenderModal/RenderModalBasic.js +3 -3
  101. package/dist/components/RenderModal/RenderModalEncoding.js +4 -4
  102. package/dist/components/RenderModal/RenderModalOutputName.js +1 -1
  103. package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +1 -1
  104. package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +1 -1
  105. package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +1 -1
  106. package/dist/components/RenderModal/SchemaEditor/ZodFieldValidation.js +1 -1
  107. package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
  108. package/dist/components/RenderModal/SchemaEditor/create-zod-values.js +1 -2
  109. package/dist/components/RenderModal/WebRenderModalAdvanced.js +2 -2
  110. package/dist/components/RenderModal/WebRenderModalAudio.js +2 -2
  111. package/dist/components/RenderModal/WebRenderModalBasic.js +3 -3
  112. package/dist/components/RenderModal/WebRenderModalPicture.js +2 -3
  113. package/dist/components/RenderQueue/CaptionQueueItem.js +14 -5
  114. package/dist/components/RenderQueue/CaptionQueueProcessor.js +30 -7
  115. package/dist/components/RenderQueue/QueueJobError.d.ts +8 -0
  116. package/dist/components/RenderQueue/QueueJobError.js +24 -0
  117. package/dist/components/RenderQueue/QueueJobErrorModal.d.ts +8 -0
  118. package/dist/components/RenderQueue/QueueJobErrorModal.js +63 -0
  119. package/dist/components/RenderQueue/RenderQueueError.js +1 -1
  120. package/dist/components/RenderQueue/RenderQueueItemCancelButton.d.ts +3 -1
  121. package/dist/components/RenderQueue/RenderQueueItemCancelButton.js +11 -4
  122. package/dist/components/RenderQueue/RenderQueueOutputName.js +1 -1
  123. package/dist/components/RenderQueue/RenderQueueProgressMessage.js +1 -1
  124. package/dist/components/RenderQueue/RenderQueueRepeat.d.ts +3 -1
  125. package/dist/components/RenderQueue/RenderQueueRepeat.js +20 -3
  126. package/dist/components/RenderQueue/VideoMattingQueueItem.js +24 -27
  127. package/dist/components/RenderQueue/VideoMattingQueueProcessor.js +68 -28
  128. package/dist/components/RenderQueue/caption-job-types.d.ts +3 -1
  129. package/dist/components/RenderQueue/context.d.ts +4 -0
  130. package/dist/components/RenderQueue/context.js +58 -8
  131. package/dist/components/RenderQueue/index.js +2 -3
  132. package/dist/components/RenderQueue/load-model-for-job.d.ts +2 -1
  133. package/dist/components/RenderQueue/load-model-for-job.js +5 -1
  134. package/dist/components/RenderQueue/video-matting-job-types.d.ts +13 -6
  135. package/dist/components/RenderingSettings.js +6 -6
  136. package/dist/components/RulersAndGuidesToggle.js +1 -1
  137. package/dist/components/SegmentedButton.d.ts +0 -2
  138. package/dist/components/SegmentedButton.js +6 -6
  139. package/dist/components/SelectedOutlineCropControls.js +2 -1
  140. package/dist/components/SelectedOutlineEditingHandles.js +9 -2
  141. package/dist/components/SelectedOutlineElement.js +9 -3
  142. package/dist/components/SelectedOutlineKeyboardControls.d.ts +2 -4
  143. package/dist/components/SelectedOutlineKeyboardControls.js +4 -22
  144. package/dist/components/SelectedOutlineOverlay.js +165 -106
  145. package/dist/components/SelectedOutlinePathPoints.d.ts +8 -0
  146. package/dist/components/SelectedOutlinePathPoints.js +457 -0
  147. package/dist/components/SelectedOutlinePolygon.js +21 -46
  148. package/dist/components/SelectedOutlineRenderer.d.ts +3 -5
  149. package/dist/components/SelectedOutlineRenderer.js +32 -136
  150. package/dist/components/SelectedOutlineTransformOriginHandle.js +3 -2
  151. package/dist/components/SelectedOutlineUvControls.js +12 -7
  152. package/dist/components/SettingsButton.js +1 -1
  153. package/dist/components/SettingsModal.js +30 -3
  154. package/dist/components/SettingsModalFooter.d.ts +1 -0
  155. package/dist/components/SettingsModalFooter.js +7 -3
  156. package/dist/components/ShowOutlinesProvider.js +1 -1
  157. package/dist/components/SizeSelector.js +1 -1
  158. package/dist/components/SkillsSettings.d.ts +0 -1
  159. package/dist/components/SkillsSettings.js +14 -15
  160. package/dist/components/SnappingToggle.js +1 -1
  161. package/dist/components/Splitter/SplitterElement.js +1 -2
  162. package/dist/components/StudioSettings.js +2 -2
  163. package/dist/components/TimeValue.js +2 -4
  164. package/dist/components/Timeline/EasingEditorModal.js +3 -3
  165. package/dist/components/Timeline/LoopedTimelineIndicators.d.ts +1 -0
  166. package/dist/components/Timeline/LoopedTimelineIndicators.js +7 -6
  167. package/dist/components/Timeline/TimelineArrayField.js +3 -3
  168. package/dist/components/Timeline/TimelineAssetField.js +3 -3
  169. package/dist/components/Timeline/TimelineClipboardKeybindings.js +0 -1
  170. package/dist/components/Timeline/TimelineColorField.js +3 -3
  171. package/dist/components/Timeline/TimelineDragHandler.js +3 -3
  172. package/dist/components/Timeline/TimelineDuplicateCount.js +1 -1
  173. package/dist/components/Timeline/TimelineEffectItem.js +1 -1
  174. package/dist/components/Timeline/TimelineEffectPropItem.d.ts +1 -0
  175. package/dist/components/Timeline/TimelineEffectPropItem.js +12 -5
  176. package/dist/components/Timeline/TimelineEnumField.js +1 -1
  177. package/dist/components/Timeline/TimelineExpandedRow.d.ts +1 -0
  178. package/dist/components/Timeline/TimelineExpandedRow.js +5 -4
  179. package/dist/components/Timeline/TimelineExpandedSection.d.ts +1 -0
  180. package/dist/components/Timeline/TimelineExpandedSection.js +2 -2
  181. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.d.ts +1 -0
  182. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +3 -1
  183. package/dist/components/Timeline/TimelineFieldLabel.js +1 -1
  184. package/dist/components/Timeline/TimelineFontFamilyField.js +14 -14
  185. package/dist/components/Timeline/TimelineFontWeightField.js +1 -1
  186. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +1 -0
  187. package/dist/components/Timeline/TimelineKeyframeControls.js +42 -31
  188. package/dist/components/Timeline/TimelineKeyframeDiamond.js +1 -1
  189. package/dist/components/Timeline/TimelineKeyframeEasingLine.js +1 -1
  190. package/dist/components/Timeline/TimelineLayerChildren.js +2 -2
  191. package/dist/components/Timeline/TimelineList.js +16 -8
  192. package/dist/components/Timeline/TimelineMediaInfo.js +1 -1
  193. package/dist/components/Timeline/TimelineNumberField.js +2 -4
  194. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +1 -1
  195. package/dist/components/Timeline/TimelineScaleField.js +1 -1
  196. package/dist/components/Timeline/TimelineSchemaField.js +2 -2
  197. package/dist/components/Timeline/TimelineSelection.d.ts +9 -9
  198. package/dist/components/Timeline/TimelineSelection.js +16 -9
  199. package/dist/components/Timeline/TimelineSequence.d.ts +3 -1
  200. package/dist/components/Timeline/TimelineSequence.js +40 -22
  201. package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
  202. package/dist/components/Timeline/TimelineSequenceItem.js +52 -24
  203. package/dist/components/Timeline/TimelineSequenceName.d.ts +1 -0
  204. package/dist/components/Timeline/TimelineSequenceName.js +38 -6
  205. package/dist/components/Timeline/TimelineSequencePropItem.d.ts +3 -0
  206. package/dist/components/Timeline/TimelineSequencePropItem.js +266 -27
  207. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +11 -13
  208. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +98 -77
  209. package/dist/components/Timeline/TimelineTextContentField.js +27 -4
  210. package/dist/components/Timeline/TimelineTimeIndicators.js +10 -5
  211. package/dist/components/Timeline/TimelineTrack.js +1 -1
  212. package/dist/components/Timeline/TimelineTrimTooltip.d.ts +11 -0
  213. package/dist/components/Timeline/TimelineTrimTooltip.js +41 -0
  214. package/dist/components/Timeline/TimelineVideoInfo.d.ts +1 -0
  215. package/dist/components/Timeline/TimelineVideoInfo.js +13 -10
  216. package/dist/components/Timeline/TimelineZoomControls.js +2 -2
  217. package/dist/components/Timeline/delete-selected-keyframe.js +22 -8
  218. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +1 -5
  219. package/dist/components/Timeline/delete-selected-timeline-item.js +7 -93
  220. package/dist/components/Timeline/get-animation-item-selection-for-frame.d.ts +2 -1
  221. package/dist/components/Timeline/get-animation-item-selection-for-frame.js +7 -5
  222. package/dist/components/Timeline/get-keyframed-sequence-drag-targets.d.ts +23 -0
  223. package/dist/components/Timeline/get-keyframed-sequence-drag-targets.js +57 -0
  224. package/dist/components/Timeline/get-node-keyframes.d.ts +2 -1
  225. package/dist/components/Timeline/get-node-keyframes.js +6 -4
  226. package/dist/components/Timeline/get-playback-rate-keyframe-changes.d.ts +21 -0
  227. package/dist/components/Timeline/get-playback-rate-keyframe-changes.js +142 -0
  228. package/dist/components/Timeline/get-sequence-split-menu-item.js +2 -2
  229. package/dist/components/Timeline/get-timeline-keyframes.d.ts +15 -2
  230. package/dist/components/Timeline/get-timeline-keyframes.js +44 -6
  231. package/dist/components/Timeline/keyframe-clipboard.js +17 -3
  232. package/dist/components/Timeline/split-selected-timeline-item.js +4 -1
  233. package/dist/components/Timeline/timeline-field-display-utils.js +1 -0
  234. package/dist/components/Timeline/timeline-field-row-layout.js +1 -0
  235. package/dist/components/Timeline/use-delete-timeline-items.js +17 -11
  236. package/dist/components/Timeline/use-expanded-track-keyframe-rows.d.ts +2 -1
  237. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +3 -1
  238. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +7 -3
  239. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +1 -1
  240. package/dist/components/Timeline/use-timeline-expanded-tree.js +3 -0
  241. package/dist/components/Timeline/use-timeline-keyframe-drag.js +28 -19
  242. package/dist/components/TimelineCombobox.d.ts +1 -1
  243. package/dist/components/TimelineCombobox.js +5 -6
  244. package/dist/components/TimelineInOutToggle.js +1 -1
  245. package/dist/components/Transcription/Models.js +1 -1
  246. package/dist/components/Transcription/TranscriptionModal.js +9 -7
  247. package/dist/components/Transcription/resample-media-to-16-khz.d.ts +2 -1
  248. package/dist/components/Transcription/resample-media-to-16-khz.js +20 -2
  249. package/dist/components/UndoRedoButtons.js +1 -1
  250. package/dist/components/UpdatesSettings.js +4 -2
  251. package/dist/components/VideoMatting/Models.js +1 -1
  252. package/dist/components/VideoMatting/VideoMattingModal.js +34 -51
  253. package/dist/components/VideoMatting/VideoMattingModalWithOptionalPackage.js +1 -1
  254. package/dist/components/WebMcp.js +22 -40
  255. package/dist/components/composition-drop-preview.js +1 -0
  256. package/dist/components/effect-drag-and-drop.d.ts +13 -5
  257. package/dist/components/effect-drag-and-drop.js +19 -4
  258. package/dist/components/get-open-in-menu-items.d.ts +2 -1
  259. package/dist/components/get-open-in-menu-items.js +17 -1
  260. package/dist/components/selected-outline-drag.d.ts +1 -6
  261. package/dist/components/selected-outline-drag.js +22 -6
  262. package/dist/components/selected-outline-geometry.d.ts +2 -18
  263. package/dist/components/selected-outline-measurement.d.ts +23 -41
  264. package/dist/components/selected-outline-measurement.js +14 -252
  265. package/dist/components/selected-outline-order.d.ts +4 -11
  266. package/dist/components/selected-outline-order.js +2 -254
  267. package/dist/components/selected-outline-snap.d.ts +1 -1
  268. package/dist/components/selected-outline-snap.js +2 -1
  269. package/dist/components/selected-outline-types.d.ts +20 -28
  270. package/dist/components/selected-outline-uv.d.ts +4 -4
  271. package/dist/components/selected-outline-uv.js +6 -111
  272. package/dist/components/sequence-props-api.js +0 -10
  273. package/dist/components/use-selected-outline-control-target.js +12 -21
  274. package/dist/components/wrap-jsx-node-api.d.ts +2 -0
  275. package/dist/components/wrap-jsx-node-api.js +13 -0
  276. package/dist/error-overlay/remotion-overlay/CompositionIdListItem.js +1 -1
  277. package/dist/error-overlay/remotion-overlay/OpenInEditor.js +46 -3
  278. package/dist/error-overlay/remotion-overlay/StackFrame.js +32 -3
  279. package/dist/esm/{CaptionQueueProcessor-npa6szn1.mjs → CaptionQueueProcessor-qj37c6r2.mjs} +63 -17
  280. package/dist/esm/LazyModels-rjsrgap5.mjs +12 -0
  281. package/dist/esm/LazyModels-rnbjx98t.mjs +12 -0
  282. package/dist/esm/{TranscriptionModal-79m5wgcj.mjs → TranscriptionModal-y7zeqj2d.mjs} +21 -21
  283. package/dist/esm/{VideoMattingModal-31pew0xj.mjs → VideoMattingModal-jzrkhah1.mjs} +51 -69
  284. package/dist/esm/{VideoMattingQueueProcessor-t1hgm2rm.mjs → VideoMattingQueueProcessor-4tkj0f4k.mjs} +69 -26
  285. package/dist/esm/{index-v4tr1bft.mjs → index-09txs1bj.mjs} +5 -0
  286. package/dist/esm/{index-e855w59j.mjs → index-19d05w9e.mjs} +3 -5
  287. package/dist/esm/index-24wge6y5.mjs +102 -0
  288. package/dist/esm/index-3qb54r5j.mjs +157 -0
  289. package/dist/esm/{index-n5gmcvhz.mjs → index-5ycb9e9q.mjs} +2 -4
  290. package/dist/esm/{index-s7qa3xbw.mjs → index-cakcjjy2.mjs} +7 -7
  291. package/dist/esm/{index-r1gr3j3a.mjs → index-dfy1t576.mjs} +50 -1
  292. package/dist/esm/{index-614tdz2q.mjs → index-f9hxt5yh.mjs} +3 -3
  293. package/dist/esm/{index-9x6e1dq0.mjs → index-hqxc6tzp.mjs} +40 -6
  294. package/dist/esm/{index-ac5550e7.mjs → index-jc22b2wb.mjs} +3 -3
  295. package/dist/esm/{index-5t2dwxsk.mjs → index-m01zjph7.mjs} +261 -25
  296. package/dist/esm/{index-ppspzgn9.mjs → index-m2a95v3p.mjs} +4904 -4951
  297. package/dist/esm/{index-9xxg6218.mjs → index-qve7mdfp.mjs} +19 -1
  298. package/dist/esm/{index-vxwg66ar.mjs → index-r9bj4tta.mjs} +47 -60
  299. package/dist/esm/{index-r0ejh5sy.mjs → index-vnc2wdfd.mjs} +44 -27
  300. package/dist/esm/{index-21hxsfaa.mjs → index-vtr5qzam.mjs} +6 -25
  301. package/dist/esm/{index-4zen9prq.mjs → index-x7kg7jqv.mjs} +6809 -5640
  302. package/dist/esm/index.mjs +4 -5
  303. package/dist/esm/internals.mjs +13 -13
  304. package/dist/esm/previewEntry.mjs +18 -15
  305. package/dist/esm/renderEntry.mjs +5 -1
  306. package/dist/helpers/calculate-timeline.d.ts +5 -1
  307. package/dist/helpers/calculate-timeline.js +1 -1
  308. package/dist/helpers/checkerboard-background.d.ts +2 -2
  309. package/dist/helpers/checkerboard-background.js +1 -1
  310. package/dist/helpers/colors.d.ts +131 -112
  311. package/dist/helpers/colors.js +121 -100
  312. package/dist/helpers/create-folder-tree.js +2 -1
  313. package/dist/helpers/editor-guide-selection.d.ts +1 -1
  314. package/dist/helpers/editor-ruler.js +23 -12
  315. package/dist/helpers/get-connected-compositions.d.ts +6 -1
  316. package/dist/helpers/get-connected-compositions.js +1 -1
  317. package/dist/helpers/get-sequence-double-click-action.js +1 -1
  318. package/dist/helpers/get-sequence-visible-range.d.ts +1 -1
  319. package/dist/helpers/get-sequence-visible-range.js +2 -5
  320. package/dist/helpers/get-timeline-nestedness.d.ts +1 -1
  321. package/dist/helpers/get-timeline-nestedness.js +1 -1
  322. package/dist/helpers/get-timeline-sequence-sort-key.d.ts +1 -1
  323. package/dist/helpers/get-timeline-sequence-sort-key.js +1 -1
  324. package/dist/helpers/hoverable.js +4 -4
  325. package/dist/helpers/inject-css.js +5 -7
  326. package/dist/helpers/prism-vsc-dark-plus.d.ts +1 -1
  327. package/dist/helpers/prism-vsc-dark-plus.js +52 -51
  328. package/dist/helpers/resolve-studio-color.d.ts +1 -0
  329. package/dist/helpers/resolve-studio-color.js +11 -0
  330. package/dist/helpers/studio-css-variables.d.ts +1 -0
  331. package/dist/helpers/studio-css-variables.js +104 -0
  332. package/dist/helpers/studio-pixel-ratio.d.ts +1 -0
  333. package/dist/helpers/studio-pixel-ratio.js +7 -0
  334. package/dist/helpers/timeline-node-path-key.d.ts +1 -1
  335. package/dist/helpers/timeline-node-path-key.js +2 -2
  336. package/dist/helpers/use-runtime-values.js +2 -28
  337. package/dist/hot-middleware-client/client.js +5 -3
  338. package/dist/icons/align-center-horizontal.js +2 -1
  339. package/dist/icons/align-left.js +2 -1
  340. package/dist/icons/align-right.js +2 -1
  341. package/dist/icons/{separation.d.ts → background-removal.d.ts} +1 -1
  342. package/dist/icons/background-removal.js +9 -0
  343. package/dist/icons/snowflake.js +1 -3
  344. package/dist/icons/{scissors.d.ts → split.d.ts} +1 -1
  345. package/dist/icons/split.js +8 -0
  346. package/dist/icons/trash.js +2 -2
  347. package/dist/icons/wrap.d.ts +4 -0
  348. package/dist/icons/wrap.js +10 -0
  349. package/dist/previewEntry.js +2 -0
  350. package/dist/renderEntry.js +2 -0
  351. package/dist/state/modals.d.ts +15 -1
  352. package/dist/state/timeline-sequence-hover.d.ts +6 -16
  353. package/dist/state/timeline-sequence-hover.js +6 -67
  354. package/package.json +20 -19
  355. package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.d.ts +0 -15
  356. package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.js +0 -31
  357. package/dist/esm/LazyModels-nh3c8h9p.mjs +0 -12
  358. package/dist/esm/LazyModels-rr5v8h5y.mjs +0 -12
  359. package/dist/esm/index-cw0pnpg5.mjs +0 -50
  360. package/dist/esm/index-k426ye99.mjs +0 -139
  361. package/dist/helpers/get-box-quads-polyfill-internals.d.ts +0 -82
  362. package/dist/helpers/get-box-quads-polyfill-internals.js +0 -2403
  363. package/dist/helpers/get-box-quads-ponyfill.d.ts +0 -10
  364. package/dist/helpers/get-box-quads-ponyfill.js +0 -23
  365. package/dist/icons/scissors.js +0 -8
  366. package/dist/icons/separation.js +0 -7
  367. /package/dist/esm/{resolve-composition-component-location-qrp05g62.mjs → resolve-composition-component-location-2hgf6g0a.mjs} +0 -0
@@ -75,6 +75,7 @@ const use_asset_timeline_context_menu_1 = require("./use-asset-timeline-context-
75
75
  const use_delete_timeline_items_1 = require("./use-delete-timeline-items");
76
76
  const use_open_sequence_in_apps_1 = require("./use-open-sequence-in-apps");
77
77
  const use_sequence_freeze_frame_menu_item_1 = require("./use-sequence-freeze-frame-menu-item");
78
+ const { getTimelineVisibleDuration, getTimelineVisibleStart } = canvas_1.CanvasInternals;
78
79
  const TimelineSequenceFn = ({ s, connectedCompositions, nodePathInfo, sequenceFrameOffset, cascadedStart, localStart, }) => {
79
80
  const windowWidth = (0, react_1.useContext)(TimelineWidthProvider_1.TimelineWidthContext);
80
81
  if (windowWidth === null) {
@@ -127,6 +128,7 @@ const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premount, po
127
128
  const isAsset = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'asset';
128
129
  const ref = (0, react_1.useRef)(null);
129
130
  const { onSelect, selectable, selected, selectionItem } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
131
+ const containsSelection = (0, TimelineSelection_1.useTimelineRowContainsSelection)(nodePathInfo);
130
132
  (0, TimelineSelection_1.useTimelineMarqueeSelectableItem)(selectionItem, ref);
131
133
  const onPointerDown = (0, react_1.useCallback)((e) => {
132
134
  if (e.button === 0) {
@@ -149,7 +151,7 @@ const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premount, po
149
151
  }, [fromCanUpdate, onMoveDragPointerDown, onSelect, selected]);
150
152
  const frame = (0, remotion_1.useCurrentFrame)();
151
153
  const relativeFrame = frame - s.from;
152
- const sequenceFrame = relativeFrame + sequenceFrameOffset;
154
+ const sequenceFrame = relativeFrame * s.sequencePlaybackRate + sequenceFrameOffset;
153
155
  const relativeFrameWithPremount = relativeFrame + ((_a = s.premountDisplay) !== null && _a !== void 0 ? _a : 0);
154
156
  const relativeFrameWithPostmount = relativeFrame - displayDurationInFrames;
155
157
  const roundedFrame = Math.round(sequenceFrame * 100) / 100;
@@ -168,9 +170,9 @@ const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premount, po
168
170
  ...style,
169
171
  background: negativeStart ? colors_1.TRANSPARENT : style.background,
170
172
  border: negativeStart ? 'none' : style.border,
171
- opacity: selected || isAsset ? 1 : 0.75,
173
+ opacity: selected || containsSelection || isAsset ? 1 : 0.75,
172
174
  };
173
- }, [isAsset, negativeStart, selected, style]);
175
+ }, [containsSelection, isAsset, negativeStart, selected, style]);
174
176
  const content = (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [premount ? (jsx_runtime_1.jsx("div", { style: {
175
177
  left: premount.left,
176
178
  width: premount.width,
@@ -205,7 +207,7 @@ const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premount, po
205
207
  display: 'flex',
206
208
  alignItems: 'center',
207
209
  }, children: jsx_runtime_1.jsx(TimelineSequenceFrame_1.TimelineSequenceFrame, { premounted: isPremounting, postmounted: isPostmounting ? s.duration - 1 : null, roundedFrame: roundedFrame, frozenFrame: frozenFrame }) })) : null] }));
208
- 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: [
210
+ return (jsx_runtime_1.jsxs("div", { ref: ref, role: "group", [TimelineSelection_1.TIMELINE_MARQUEE_ITEM_ATTR]: true, style: actualStyle, "aria-label": 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: [
209
211
  jsx_runtime_1.jsx(TimelineSequenceNegativeStart, { left: negativeStart.left, width: negativeStart.width, leftEdgeVisible: leftEdgeVisible, clipped: negativeStartClipped }), jsx_runtime_1.jsx("div", { style: {
210
212
  background: style.background,
211
213
  border: style.border,
@@ -240,8 +242,8 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
240
242
  // If a duration is 1, it is essentially a still and it should have width 0
241
243
  // Some compositions may not be longer than their media duration,
242
244
  // if that is the case, it needs to be asynchronously determined
243
- var _a, _b, _c, _d, _e;
244
- var _f, _g, _h, _j, _k, _l, _m;
245
+ var _a, _b, _c, _d, _e, _f, _g, _h;
246
+ var _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
245
247
  const video = remotion_1.Internals.useVideo();
246
248
  const { sequences } = (0, react_1.useContext)(remotion_1.Internals.SequenceManager);
247
249
  const overrideIdToNodePathMappingsRef = (0, react_1.useContext)(SequencePropsSubscriptionProvider_1.OverrideIdToNodePathMappingsRefContext);
@@ -250,17 +252,30 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
250
252
  const dragAwareDoubleClick = (0, react_1.useMemo)(() => (0, drag_aware_double_click_1.createDragAwareDoubleClickTracker)(), []);
251
253
  const mediaMetadata = (0, use_media_metadata_1.useMediaMetadata)(s.type === 'audio' || s.type === 'video' ? s.src : null);
252
254
  const extendVideoLastFrame = (0, is_video_with_last_frame_hold_1.isVideoWithLastFrameHold)(s);
255
+ const mediaStartFrame = s.type === 'audio' || s.type === 'video'
256
+ ? (0, get_timeline_media_start_frame_1.getTimelineMediaStartFrame)({
257
+ startMediaFrom: s.startMediaFrom,
258
+ mediaFrameAtSequenceZero: s.mediaFrameAtSequenceZero,
259
+ sequenceFrameOffset,
260
+ playbackRate: s.playbackRate,
261
+ })
262
+ : 0;
263
+ const mediaLoopStartFrame = mediaStartFrame -
264
+ ((_j = (_a = s.loopDisplay) === null || _a === void 0 ? void 0 : _a.mediaOffsetInFrames) !== null && _j !== void 0 ? _j : 0) *
265
+ (s.type === 'audio' || s.type === 'video'
266
+ ? s.playbackRate * s.sequencePlaybackRate
267
+ : 0);
253
268
  const naturalMediaDuration = (s.type === 'audio' || s.type === 'video') &&
254
269
  mediaMetadata !== null &&
255
270
  s.playbackRate > 0
256
- ? Math.max(0, (mediaMetadata.duration * ((_f = video === null || video === void 0 ? void 0 : video.fps) !== null && _f !== void 0 ? _f : 30) -
271
+ ? Math.max(0, (mediaMetadata.duration * ((_k = video === null || video === void 0 ? void 0 : video.fps) !== null && _k !== void 0 ? _k : 30) -
257
272
  (0, get_timeline_media_start_frame_1.getTimelineMediaStartFrame)({
258
273
  startMediaFrom: s.startMediaFrom,
259
274
  mediaFrameAtSequenceZero: s.mediaFrameAtSequenceZero,
260
275
  sequenceFrameOffset,
261
276
  playbackRate: s.playbackRate,
262
277
  })) /
263
- s.playbackRate)
278
+ (s.playbackRate * s.sequencePlaybackRate))
264
279
  : null;
265
280
  const maxMediaDuration = s.type === 'sequence' || s.type === 'image' || extendVideoLastFrame
266
281
  ? Infinity
@@ -281,22 +296,22 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
281
296
  };
282
297
  }, [originalLocation]);
283
298
  const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
284
- const nodePath = (_g = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.sequenceSubscriptionKey) !== null && _g !== void 0 ? _g : null;
299
+ const nodePath = (_l = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.sequenceSubscriptionKey) !== null && _l !== void 0 ? _l : null;
285
300
  const propStatusesForOverride = (0, react_1.useMemo)(() => {
286
301
  return nodePath
287
302
  ? remotion_1.Internals.getPropStatusesCtx(propStatuses, nodePath)
288
303
  : undefined;
289
304
  }, [propStatuses, nodePath]);
290
305
  const durationCanUpdate = Boolean((0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
291
- ((_a = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames) === null || _a === void 0 ? void 0 : _a.status) === 'static');
306
+ ((_b = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames) === null || _b === void 0 ? void 0 : _b.status) === 'static');
292
307
  const durationCanResize = Boolean((0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
293
308
  (0, TimelineSequenceRightEdgeDragHandle_1.canResizeTimelineSequenceDuration)({
294
309
  status: propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames,
295
310
  }));
296
311
  const fromCanUpdate = Boolean((0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
297
- ((_b = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.from) === null || _b === void 0 ? void 0 : _b.status) === 'static');
312
+ ((_c = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.from) === null || _c === void 0 ? void 0 : _c.status) === 'static');
298
313
  const trimBeforeCanUpdate = Boolean((0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
299
- ((_c = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.trimBefore) === null || _c === void 0 ? void 0 : _c.status) === 'static');
314
+ ((_d = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.trimBefore) === null || _d === void 0 ? void 0 : _d.status) === 'static');
300
315
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
301
316
  const previewConnected = previewServerState.type === 'connected';
302
317
  const previewInteractive = previewConnected && (0, interactivity_enabled_1.isStudioInteractivityEnabled)();
@@ -359,7 +374,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
359
374
  const canHandleSequenceDoubleClick = connectedCompositions.length === 1 || canOpenSource;
360
375
  const canDeleteFromSource = Boolean(nodePath && (validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source));
361
376
  const deleteDisabled = !previewInteractive || !s.controls || !canDeleteFromSource;
362
- const isProgrammaticallyDuplicated = ((_h = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.numberOfSequencesWithThisNodePath) !== null && _h !== void 0 ? _h : 1) > 1;
377
+ const isProgrammaticallyDuplicated = ((_m = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.numberOfSequencesWithThisNodePath) !== null && _m !== void 0 ? _m : 1) > 1;
363
378
  const duplicateDisabled = deleteDisabled || isProgrammaticallyDuplicated;
364
379
  const disableInteractivityDisabled = !previewInteractive ||
365
380
  !s.showInTimeline ||
@@ -560,7 +575,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
560
575
  const { onPointerDown: onMoveDragPointerDown } = (0, TimelineSequenceRightEdgeDragHandle_1.useTimelineSequenceFromDrag)({
561
576
  nodePathInfo,
562
577
  windowWidth,
563
- timelineDurationInFrames: (_j = video === null || video === void 0 ? void 0 : video.durationInFrames) !== null && _j !== void 0 ? _j : 1,
578
+ timelineDurationInFrames: (_o = video === null || video === void 0 ? void 0 : video.durationInFrames) !== null && _o !== void 0 ? _o : 1,
564
579
  onDragEnd: dragAwareDoubleClick.endPointerGesture,
565
580
  });
566
581
  if (!video) {
@@ -622,7 +637,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
622
637
  }, [visibleLayout]);
623
638
  const showLeftBorderRadius = (visibleLayout === null || visibleLayout === void 0 ? void 0 : visibleLayout.leftEdgeVisible) === true &&
624
639
  localStart >= 0 &&
625
- ((_k = s.trimBefore) !== null && _k !== void 0 ? _k : 0) === 0 &&
640
+ ((_p = s.trimBefore) !== null && _p !== void 0 ? _p : 0) === 0 &&
626
641
  (s.type === 'sequence' ||
627
642
  s.type === 'image' ||
628
643
  (0, get_timeline_media_start_frame_1.getTimelineMediaStartFrame)({
@@ -642,15 +657,15 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
642
657
  Math.ceil(Math.min(s.duration, video.durationInFrames - s.from, maxMediaDuration !== null && maxMediaDuration !== void 0 ? maxMediaDuration : Infinity)) === Math.ceil(naturalMediaDuration);
643
658
  const parentSequence = sequences.find((candidate) => candidate.id === s.parent);
644
659
  const parentEnd = parentSequence
645
- ? (0, canvas_1.getTimelineVisibleStart)(parentSequence, sequences) +
646
- (0, canvas_1.getTimelineVisibleDuration)(parentSequence, sequences)
660
+ ? getTimelineVisibleStart(parentSequence, sequences) +
661
+ getTimelineVisibleDuration(parentSequence, sequences)
647
662
  : video.durationInFrames;
648
663
  const endsAtContainerBoundary = Math.ceil(s.from + displayDurationInFrames) >=
649
664
  Math.ceil(Math.min(parentEnd, video.durationInFrames));
650
665
  const hasImplicitMediaDuration = (s.type === 'audio' || s.type === 'video') &&
651
- ((_d = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames) === null || _d === void 0 ? void 0 : _d.status) === 'static' &&
666
+ ((_e = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames) === null || _e === void 0 ? void 0 : _e.status) === 'static' &&
652
667
  propStatusesForOverride.durationInFrames.codeValue === undefined;
653
- const durationInFramesCodeValue = ((_e = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames) === null || _e === void 0 ? void 0 : _e.status) === 'static'
668
+ const durationInFramesCodeValue = ((_f = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames) === null || _f === void 0 ? void 0 : _f.status) === 'static'
654
669
  ? propStatusesForOverride.durationInFrames.codeValue
655
670
  : null;
656
671
  const explicitDurationInFrames = typeof durationInFramesCodeValue === 'number' &&
@@ -664,7 +679,9 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
664
679
  displayDurationInFrames: s.duration,
665
680
  displayStart: s.from,
666
681
  effectiveMaxMediaDuration,
667
- explicitDurationInFrames,
682
+ explicitDurationInFrames: explicitDurationInFrames === null
683
+ ? null
684
+ : explicitDurationInFrames / s.sequencePlaybackRate,
668
685
  hasImplicitDuration: hasImplicitMediaDuration,
669
686
  naturalMediaDuration,
670
687
  timelineDurationInFrames: video.durationInFrames,
@@ -751,10 +768,11 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
751
768
  visibleLayout.leftEdgeVisible &&
752
769
  negativeStartWidth === 0 &&
753
770
  nodePathInfo &&
754
- 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 &&
771
+ validatedLocation ? (jsx_runtime_1.jsx(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceLeftEdgeDragHandle, { cursor: (0, TimelineSequenceRightEdgeDragHandle_1.isCascadingSequence)(s) ? 'ew-resize' : 'e-resize', nodePathInfo: nodePathInfo, windowWidth: windowWidth, timelineDurationInFrames: (_q = video.durationInFrames) !== null && _q !== void 0 ? _q : 1, initialEdgeFrame: s.from, fps: video.fps, onDragEnd: dragAwareDoubleClick.endPointerGesture, onSelect: onSelect, selected: selected })) : null, showRightEdgeDragHandle &&
755
772
  visibleLayout.rightEdgeVisible &&
756
773
  nodePathInfo &&
757
- 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 }))] }));
774
+ validatedLocation ? (jsx_runtime_1.jsx(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceRightEdgeDragHandle, { cursor: (0, TimelineSequenceRightEdgeDragHandle_1.isCascadingSequence)(s) ? 'ew-resize' : 'w-resize', nodePathInfo: nodePathInfo, mediaDurationDragLimits: mediaDurationDragLimits, windowWidth: windowWidth, timelineDurationInFrames: (_r = video.durationInFrames) !== null && _r !== void 0 ? _r : 1, initialEdgeFrame: s.from +
775
+ Math.max(0, Math.min(displayDurationInFrames, effectiveMaxMediaDuration !== null && effectiveMaxMediaDuration !== void 0 ? effectiveMaxMediaDuration : Infinity, video.durationInFrames - s.from)), fps: video.fps, 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: mediaLoopStartFrame, durationInFrames: s.duration, displayOffsetInFrames: mediaDisplayOffsetInFrames, displayDurationInFrames: mediaDisplayDurationInFrames, volume: s.volume, playbackRate: s.playbackRate * s.sequencePlaybackRate, loopDisplay: s.loopDisplay, loopDisplayOffsetInFrames: (_s = (_g = s.loopDisplay) === null || _g === void 0 ? void 0 : _g.phaseOffsetInFrames) !== null && _s !== void 0 ? _s : 0 }) })) : 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: mediaLoopStartFrame, sequenceFrameOffset: 0, playbackRate: s.playbackRate * s.sequencePlaybackRate, volume: s.volume, muted: s.muted, doesVolumeChange: s.doesVolumeChange, marginLeft: visibleLayout.media.left, loopDisplay: s.loopDisplay, loopDisplayOffsetInFrames: (_t = (_h = s.loopDisplay) === null || _h === void 0 ? void 0 : _h.phaseOffsetInFrames) !== null && _t !== void 0 ? _t : 0, 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, phase: s.loopDisplay.phaseOffsetInFrames / s.loopDisplay.durationInFrames, fullWidth: width, visibleOffset: visibleLayout.cropLeft, visibleWidth: visibleLayout.width }))] }));
758
776
  return previewConnected || window.remotion_isReadOnlyStudio ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: sequence })) : (sequence);
759
777
  };
760
778
  exports.TimelineSequence = react_1.default.memo(TimelineSequenceFn);
@@ -8,6 +8,7 @@ export declare const TimelineSequenceItem: React.NamedExoticComponent<{
8
8
  readonly nestedDepth: number;
9
9
  readonly nodePathInfo: SequenceNodePathInfo | null;
10
10
  readonly keyframeDisplayOffset: number;
11
+ readonly keyframePlaybackRate: number;
11
12
  readonly sequenceFrameOffset: number;
12
13
  readonly siblingIndex: number;
13
14
  readonly numberOfHiddenDuplicates: number;
@@ -108,31 +108,53 @@ const effectDropHighlight = {
108
108
  outline: colors_1.BORDER_TIMELINE_DROP_BLUE,
109
109
  outlineOffset: -1,
110
110
  };
111
- const TimelineSequenceExpandArrowInner = ({ disabled, isExpanded, nodePathInfo, selectedItems, sequence }) => {
111
+ const TimelineSequenceLabelInner = ({ disabled, isExpanded, nodePathInfo, selectedItems, sequence, canHaveExpandableContent, displayName, fallbackDisplayName, selected, containsSelection, editing, onCancelEditing, onSaveName, numberOfHiddenDuplicates, }) => {
112
112
  const { toggleTrack } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksSetterContext);
113
113
  const hasExpandableContent = (0, use_timeline_expanded_tree_1.useTimelineSequenceHasExpandableContent)({
114
114
  sequence,
115
115
  nodePathInfo,
116
116
  selectedItems,
117
117
  });
118
- const onToggleExpand = (0, react_1.useCallback)(() => toggleTrack(nodePathInfo), [nodePathInfo, toggleTrack]);
119
- if (!hasExpandableContent) {
120
- return jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {});
121
- }
122
- return (jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowButton, { isExpanded: isExpanded, onClick: onToggleExpand, label: "track properties", disabled: disabled }));
118
+ const showChevronSlot = canHaveExpandableContent && nodePathInfo !== null;
119
+ const showChevron = showChevronSlot && hasExpandableContent;
120
+ const onToggleExpand = (0, react_1.useCallback)(() => {
121
+ if (nodePathInfo !== null) {
122
+ toggleTrack(nodePathInfo);
123
+ }
124
+ }, [nodePathInfo, toggleTrack]);
125
+ return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
126
+ jsx_runtime_1.jsx(TimelineSequenceName_1.TimelineSequenceName, { displayName: displayName, fallbackDisplayName: fallbackDisplayName, selected: selected, containsSelection: containsSelection, editing: editing, onCancelEditing: onCancelEditing, onSaveName: onSaveName, chevronSlot: showChevronSlot && !editing && numberOfHiddenDuplicates === 0
127
+ ? showChevron
128
+ ? 'occupied'
129
+ : 'empty'
130
+ : 'none' }), numberOfHiddenDuplicates > 0 ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
131
+ jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(TimelineDuplicateCount_1.TimelineDuplicateCount, { count: numberOfHiddenDuplicates })
132
+ ] })) : null, showChevronSlot ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
133
+ jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), showChevron ? (jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowButton, { isExpanded: isExpanded, onClick: onToggleExpand, label: "track properties", disabled: disabled })) : (jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}))] })) : null] }));
123
134
  };
124
- const areTimelineSequenceExpandArrowPropsEqual = (first, second) => {
135
+ const TimelineSequenceLabel = react_1.default.memo(TimelineSequenceLabelInner, (first, second) => {
125
136
  var _a, _b, _c, _d;
126
- return (first.disabled === second.disabled &&
137
+ return first.disabled === second.disabled &&
127
138
  first.isExpanded === second.isExpanded &&
128
139
  first.selectedItems === second.selectedItems &&
140
+ first.canHaveExpandableContent === second.canHaveExpandableContent &&
141
+ first.displayName === second.displayName &&
142
+ first.fallbackDisplayName === second.fallbackDisplayName &&
143
+ first.selected === second.selected &&
144
+ first.containsSelection === second.containsSelection &&
145
+ first.editing === second.editing &&
146
+ first.onCancelEditing === second.onCancelEditing &&
147
+ first.onSaveName === second.onSaveName &&
148
+ first.numberOfHiddenDuplicates === second.numberOfHiddenDuplicates &&
129
149
  ((_a = first.sequence.controls) === null || _a === void 0 ? void 0 : _a.schema) === ((_b = second.sequence.controls) === null || _b === void 0 ? void 0 : _b.schema) &&
130
150
  ((_c = first.sequence.controls) === null || _c === void 0 ? void 0 : _c.runtimeValues) ===
131
151
  ((_d = second.sequence.controls) === null || _d === void 0 ? void 0 : _d.runtimeValues) &&
132
152
  first.sequence.effects === second.sequence.effects &&
133
- (0, are_sequence_node_path_infos_equal_1.areSequenceNodePathInfosEqual)(first.nodePathInfo, second.nodePathInfo));
134
- };
135
- const TimelineSequenceExpandArrow = react_1.default.memo(TimelineSequenceExpandArrowInner, areTimelineSequenceExpandArrowPropsEqual);
153
+ (first.nodePathInfo === second.nodePathInfo ||
154
+ (first.nodePathInfo !== null &&
155
+ second.nodePathInfo !== null &&
156
+ (0, are_sequence_node_path_infos_equal_1.areSequenceNodePathInfosEqual)(first.nodePathInfo, second.nodePathInfo)));
157
+ });
136
158
  const sequenceReorderWrapper = {
137
159
  position: 'relative',
138
160
  };
@@ -173,7 +195,7 @@ const getSequencePointerDropTargetAtPoint = ({ clientX, clientY, }) => {
173
195
  return null;
174
196
  };
175
197
  const SEQUENCE_REORDER_POINTER_THRESHOLD = 3;
176
- const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions, nestedDepth, sequence, nodePathInfo, keyframeDisplayOffset, sequenceFrameOffset, siblingIndex, numberOfHiddenDuplicates, showProvisionalVisibilityToggle, }) => {
198
+ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions, nestedDepth, sequence, nodePathInfo, keyframeDisplayOffset, keyframePlaybackRate, sequenceFrameOffset, siblingIndex, numberOfHiddenDuplicates, showProvisionalVisibilityToggle, }) => {
177
199
  var _a, _b;
178
200
  var _c, _d, _e;
179
201
  const nodePath = (_c = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.sequenceSubscriptionKey) !== null && _c !== void 0 ? _c : null;
@@ -195,6 +217,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
195
217
  const selectComposition = (0, InitialCompositionLoader_1.useSelectComposition)();
196
218
  const deleteTimelineItems = (0, use_delete_timeline_items_1.useDeleteTimelineItems)();
197
219
  const { onSelect, selectable, selected, selectedItems, selectItem } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
220
+ const { selectItems } = (0, TimelineSelection_1.useTimelineSelection)();
198
221
  const selectedSequenceNodePathInfos = (0, react_1.useMemo)(() => {
199
222
  if (!selected ||
200
223
  selectedItems.length < 2 ||
@@ -775,7 +798,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
775
798
  const onAddEffect = (0, react_1.useCallback)(() => {
776
799
  if (!canAddEffect ||
777
800
  previewServerState.type !== 'connected' ||
778
- !nodePath ||
801
+ nodePathInfo === null ||
779
802
  !(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) {
780
803
  return;
781
804
  }
@@ -783,13 +806,15 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
783
806
  type: 'add-effect',
784
807
  clientId: previewServerState.clientId,
785
808
  fileName: validatedLocation.source,
786
- nodePath,
809
+ nodePathInfo,
810
+ selectItems,
787
811
  });
788
812
  }, [
789
813
  canAddEffect,
790
- nodePath,
814
+ nodePathInfo,
791
815
  previewServerState,
792
816
  setSelectedModal,
817
+ selectItems,
793
818
  validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
794
819
  ]);
795
820
  const onCrop = (0, react_1.useCallback)(() => {
@@ -1041,7 +1066,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
1041
1066
  const onEffectDrop = (0, react_1.useCallback)(async (e) => {
1042
1067
  if (!canDropEffect ||
1043
1068
  previewServerState.type !== 'connected' ||
1044
- nodePath === null ||
1069
+ nodePathInfo === null ||
1045
1070
  validatedLocation === null ||
1046
1071
  !(0, effect_drag_and_drop_1.hasEffectDragType)(e.dataTransfer)) {
1047
1072
  return;
@@ -1062,17 +1087,20 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
1062
1087
  await (0, effect_drag_and_drop_1.addEffectFromDragData)({
1063
1088
  dragData,
1064
1089
  fileName: validatedLocation.source,
1065
- nodePath,
1090
+ nodePathInfo,
1066
1091
  clientId: previewServerState.clientId,
1092
+ selectItems,
1067
1093
  });
1068
- }, [canDropEffect, nodePath, previewServerState, validatedLocation]);
1094
+ }, [
1095
+ canDropEffect,
1096
+ nodePathInfo,
1097
+ previewServerState,
1098
+ selectItems,
1099
+ validatedLocation,
1100
+ ]);
1069
1101
  const trackRow = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: nestedDepth, eye: showVisibilityToggle ? (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEye, { type: sequence.type === 'audio' ? 'speaker' : 'eye', hidden: isItemHidden, onInvoked: canToggleVisibility ? onToggleVisibility : null })) : (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {})), arrow: jsx_runtime_1.jsx(TimelineLayerChildren_1.TimelineLayerChildrenToggle, { sequence: sequence }), style: rowStyle, selected: selected, selectable: selectable, onSelect: onSelect, showSelectedBackground: true, containsSelection: containsSelection, hovered: hovered, outerHeight: outerHeight, onDragLeave: canDropEffect ? onEffectDragLeave : undefined, onDragOver: canDropEffect ? onEffectDragOver : undefined, onDrop: canDropEffect ? onEffectDrop : undefined, onDoubleClick: canHandleSequenceDoubleClick ? onSequenceDoubleClick : undefined, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, children: jsx_runtime_1.jsxs("div", { style: labelContainerStyle, children: [connectedCompositions.length > 0 ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
1070
1102
  jsx_runtime_1.jsx(CompositionOrStillIcon_1.CompositionOrStillIcon, { color: (0, TimelineSelection_1.getTimelineColor)(false, false), composition: connectedCompositions[0], style: connectedCompositionIconStyle }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 })
1071
- ] })) : null, jsx_runtime_1.jsx(TimelineSequenceName_1.TimelineSequenceName, { displayName: timelineDisplayName, fallbackDisplayName: fallbackDisplayName, selected: selected, containsSelection: containsSelection, editing: isRenaming, onCancelEditing: onCancelRenaming, onSaveName: onSaveName }), numberOfHiddenDuplicates > 0 ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
1072
- jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(TimelineDuplicateCount_1.TimelineDuplicateCount, { count: numberOfHiddenDuplicates })
1073
- ] })) : null, hasExpandableContent && nodePathInfo !== null ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
1074
- jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(TimelineSequenceExpandArrow, { disabled: !previewInteractive, isExpanded: isExpanded, nodePathInfo: nodePathInfo, selectedItems: selectedItems, sequence: sequence })
1075
- ] })) : null, mediaSrc ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
1103
+ ] })) : null, jsx_runtime_1.jsx(TimelineSequenceLabel, { displayName: timelineDisplayName, fallbackDisplayName: fallbackDisplayName, selected: selected, containsSelection: containsSelection, editing: isRenaming, onCancelEditing: onCancelRenaming, onSaveName: onSaveName, numberOfHiddenDuplicates: numberOfHiddenDuplicates, canHaveExpandableContent: hasExpandableContent, disabled: !previewInteractive, isExpanded: isExpanded, nodePathInfo: nodePathInfo, selectedItems: selectedItems, sequence: sequence }), mediaSrc ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
1076
1104
  jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }),
1077
1105
  " ",
1078
1106
  jsx_runtime_1.jsx(TimelineMediaInfo_1.TimelineMediaInfo, { src: mediaSrc })
@@ -1086,6 +1114,6 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
1086
1114
  isExpanded &&
1087
1115
  hasExpandableContent &&
1088
1116
  nodePathInfo &&
1089
- validatedLocation ? (jsx_runtime_1.jsx(TimelineExpandedSection_1.TimelineExpandedSection, { sequence: sequence, validatedLocation: validatedLocation, nodePathInfo: nodePathInfo, nestedDepth: nestedDepth, keyframeDisplayOffset: keyframeDisplayOffset })) : null] }));
1117
+ validatedLocation ? (jsx_runtime_1.jsx(TimelineExpandedSection_1.TimelineExpandedSection, { sequence: sequence, validatedLocation: validatedLocation, nodePathInfo: nodePathInfo, nestedDepth: nestedDepth, keyframeDisplayOffset: keyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate })) : null] }));
1090
1118
  };
1091
1119
  exports.TimelineSequenceItem = react_1.default.memo(TimelineSequenceItemInner);
@@ -7,4 +7,5 @@ export declare const TimelineSequenceName: React.FC<{
7
7
  readonly editing: boolean;
8
8
  readonly onCancelEditing: () => void;
9
9
  readonly onSaveName: (name: string) => Promise<void>;
10
+ readonly chevronSlot: 'none' | 'empty' | 'occupied';
10
11
  }>;
@@ -8,13 +8,16 @@ const TimelineSelection_1 = require("./TimelineSelection");
8
8
  const MAX_DISPLAY_NAME_LENGTH = 1000;
9
9
  const MAX_RENAME_INPUT_WIDTH = 240;
10
10
  const RENAME_INPUT_CLASS_NAME = 'remotion-timeline-sequence-name-input';
11
+ const LABEL_FONT_FAMILY = 'Arial, Helvetica, sans-serif';
12
+ // 4px gap + 12px chevron + 4px chevron margin.
13
+ const CHEVRON_SLOT_WIDTH = 20;
11
14
  const getTruncatedDisplayName = (displayName) => {
12
15
  if (displayName.length > MAX_DISPLAY_NAME_LENGTH) {
13
16
  return displayName.slice(0, MAX_DISPLAY_NAME_LENGTH) + '...';
14
17
  }
15
18
  return displayName;
16
19
  };
17
- const TimelineSequenceName = ({ displayName, fallbackDisplayName, selected, containsSelection, editing, onCancelEditing, onSaveName, }) => {
20
+ const TimelineSequenceName = ({ displayName, fallbackDisplayName, selected, containsSelection, editing, onCancelEditing, onSaveName, chevronSlot, }) => {
18
21
  const inputRef = (0, react_1.useRef)(null);
19
22
  const [draftName, setDraftName] = (0, react_1.useState)(displayName);
20
23
  const cancelNextBlurRef = (0, react_1.useRef)(false);
@@ -25,11 +28,12 @@ const TimelineSequenceName = ({ displayName, fallbackDisplayName, selected, cont
25
28
  ...(0, TimelineSelection_1.getTimelineSelectedLabelStyle)(selected, false),
26
29
  display: 'inline-flex',
27
30
  flexShrink: 1,
28
- fontFamily: 'inherit',
31
+ fontFamily: LABEL_FONT_FAMILY,
29
32
  fontSize: 12,
30
33
  lineHeight: 'normal',
31
34
  minWidth: 0,
32
- overflow: 'hidden',
35
+ overflow: chevronSlot === 'none' ? 'hidden' : 'visible',
36
+ position: chevronSlot === 'none' ? undefined : 'relative',
33
37
  whiteSpace: 'nowrap',
34
38
  textOverflow: 'ellipsis',
35
39
  color: (0, TimelineSelection_1.getTimelineColor)(selected, false),
@@ -40,14 +44,14 @@ const TimelineSequenceName = ({ displayName, fallbackDisplayName, selected, cont
40
44
  ? `inset 0 0 0 2px ${TimelineSelection_1.TIMELINE_SELECTED_LABEL_BACKGROUND}`
41
45
  : undefined,
42
46
  };
43
- }, [selected, containsSelection]);
47
+ }, [selected, containsSelection, chevronSlot]);
44
48
  const inputStyle = (0, react_1.useMemo)(() => {
45
49
  return {
46
50
  ...style,
47
51
  background: colors_1.TRANSPARENT,
48
52
  border: 0,
49
53
  color: (0, TimelineSelection_1.getTimelineColor)(false, false),
50
- fontFamily: 'inherit',
54
+ fontFamily: LABEL_FONT_FAMILY,
51
55
  fontSize: 12,
52
56
  outline: 'none',
53
57
  paddingBottom: 0,
@@ -101,6 +105,34 @@ const TimelineSequenceName = ({ displayName, fallbackDisplayName, selected, cont
101
105
  jsx_runtime_1.jsx("style", { children: `.${RENAME_INPUT_CLASS_NAME}::selection { background: ${colors_1.WHITE_ALPHA_72}; color: ${colors_1.BLACK}; }` }), jsx_runtime_1.jsx("input", { ref: inputRef, className: RENAME_INPUT_CLASS_NAME, value: draftName, onChange: (e) => setDraftName(e.target.value), onBlur: onBlur, onKeyDown: onKeyDown, size: Math.max(1, draftName.length), style: inputStyle })
102
106
  ] }));
103
107
  }
104
- return (jsx_runtime_1.jsx("div", { title: text, style: style, children: text }));
108
+ if (chevronSlot !== 'none') {
109
+ // Keep the name's flex width fixed while its visible text uses the empty slot.
110
+ return (jsx_runtime_1.jsx("div", { className: "remotion-timeline-sequence-name-measure", "data-name": text, title: text, style: {
111
+ ...style,
112
+ backgroundColor: undefined,
113
+ boxShadow: undefined,
114
+ clipPath: chevronSlot === 'occupied' ? 'inset(0)' : undefined,
115
+ }, children: jsx_runtime_1.jsx("div", { style: {
116
+ ...(0, TimelineSelection_1.getTimelineSelectedLabelStyle)(selected, false),
117
+ alignItems: 'center',
118
+ boxShadow: style.boxShadow,
119
+ boxSizing: 'border-box',
120
+ color: (0, TimelineSelection_1.getTimelineColor)(selected, false),
121
+ display: 'inline-flex',
122
+ fontFamily: LABEL_FONT_FAMILY,
123
+ fontSize: 12,
124
+ height: '100%',
125
+ left: 0,
126
+ lineHeight: 'normal',
127
+ maxWidth: `calc(100% + ${CHEVRON_SLOT_WIDTH}px)`,
128
+ overflow: 'hidden',
129
+ position: 'absolute',
130
+ textOverflow: 'ellipsis',
131
+ top: 0,
132
+ whiteSpace: 'nowrap',
133
+ width: 'max-content',
134
+ }, children: text }) }));
135
+ }
136
+ return (jsx_runtime_1.jsx("div", { role: "group", "aria-label": text, style: style, children: text }));
105
137
  };
106
138
  exports.TimelineSequenceName = TimelineSequenceName;
@@ -14,9 +14,11 @@ type TimelineSequenceKeyframedValueBaseProps = {
14
14
  type TimelineSequenceKeyframedValueProps = TimelineSequenceKeyframedValueBaseProps & ({
15
15
  readonly sourceFrame: number;
16
16
  readonly keyframeDisplayOffset?: never;
17
+ readonly keyframePlaybackRate?: never;
17
18
  } | {
18
19
  readonly sourceFrame?: never;
19
20
  readonly keyframeDisplayOffset: number;
21
+ readonly keyframePlaybackRate: number;
20
22
  });
21
23
  export declare const TimelineSequenceKeyframedValue: React.NamedExoticComponent<TimelineSequenceKeyframedValueProps>;
22
24
  export declare const TimelineSequencePropItem: React.FC<{
@@ -27,6 +29,7 @@ export declare const TimelineSequencePropItem: React.FC<{
27
29
  readonly nodePathInfo: SequenceNodePathInfo;
28
30
  readonly schema: InteractivitySchema;
29
31
  readonly keyframeDisplayOffset: number;
32
+ readonly keyframePlaybackRate: number;
30
33
  readonly keyframeControlsMode: TimelineKeyframeControlsMode;
31
34
  readonly runtimeValue: unknown;
32
35
  }>;