@remotion/studio 4.0.504 → 4.0.506

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 (172) hide show
  1. package/dist/api/install-package.d.ts +2 -3
  2. package/dist/api/install-package.js +1 -3
  3. package/dist/api/visual-control.d.ts +3 -0
  4. package/dist/api/visual-control.js +3 -0
  5. package/dist/components/AssetSelectorItem.js +3 -3
  6. package/dist/components/AudioWaveform.d.ts +1 -1
  7. package/dist/components/AudioWaveform.js +36 -3
  8. package/dist/components/Canvas.js +2 -0
  9. package/dist/components/CompositionContextButton.d.ts +1 -1
  10. package/dist/components/CompositionContextButton.js +2 -2
  11. package/dist/components/CompositionSelector.js +3 -3
  12. package/dist/components/CompositionSelectorItem.js +5 -5
  13. package/dist/components/ConfigureDefaultEditorModal.d.ts +3 -1
  14. package/dist/components/ConfigureDefaultEditorModal.js +90 -32
  15. package/dist/components/ConfigureLicenseModal.d.ts +2 -1
  16. package/dist/components/ConfigureLicenseModal.js +40 -32
  17. package/dist/components/ConfirmationDialog.js +2 -2
  18. package/dist/components/ContextMenu.d.ts +5 -7
  19. package/dist/components/ContextMenu.js +54 -21
  20. package/dist/components/Editor.js +2 -0
  21. package/dist/components/EditorGuides/Guide.js +2 -2
  22. package/dist/components/EffectPickerModal.js +3 -3
  23. package/dist/components/GlobalKeybindings.js +3 -2
  24. package/dist/components/InlineAction.d.ts +1 -1
  25. package/dist/components/InlineAction.js +14 -13
  26. package/dist/components/InlineCaptionInspector.d.ts +2 -2
  27. package/dist/components/InlineDropdown.d.ts +4 -2
  28. package/dist/components/InlineDropdown.js +23 -6
  29. package/dist/components/InspectorOpenInEditor.d.ts +1 -0
  30. package/dist/components/InspectorOpenInEditor.js +33 -9
  31. package/dist/components/InspectorPanel/AlignmentControls.js +5 -2
  32. package/dist/components/InspectorPanel/CompositionInspector.js +15 -1
  33. package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +3 -3
  34. package/dist/components/InspectorPanel/EasingInspector.js +7 -4
  35. package/dist/components/InspectorPanel/KeyframeInspector.js +5 -1
  36. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +1 -1
  37. package/dist/components/InspectorPanel/common.d.ts +1 -0
  38. package/dist/components/InspectorPanel/common.js +25 -35
  39. package/dist/components/InspectorPanel/use-composition-actions.js +4 -1
  40. package/dist/components/InspectorSequenceSection.js +5 -5
  41. package/dist/components/InstallPackage.js +1 -1
  42. package/dist/components/Menu/MenuItem.js +16 -12
  43. package/dist/components/MenuBuildIndicator.js +12 -58
  44. package/dist/components/MenuCompositionName.js +3 -63
  45. package/dist/components/MenuToolbar.js +22 -2
  46. package/dist/components/ModalFooter.d.ts +1 -0
  47. package/dist/components/ModalFooter.js +6 -2
  48. package/dist/components/ModalHeader.js +1 -1
  49. package/dist/components/Modals.js +18 -7
  50. package/dist/components/ModalsProvider.js +5 -6
  51. package/dist/components/NewComposition/CodemodFooter.js +1 -1
  52. package/dist/components/NewComposition/DismissableModal.js +1 -1
  53. package/dist/components/NewComposition/InputDragger.d.ts +1 -0
  54. package/dist/components/NewComposition/InputDragger.js +5 -4
  55. package/dist/components/NewComposition/MenuContent.d.ts +1 -1
  56. package/dist/components/NewComposition/RenameStaticFile.js +1 -1
  57. package/dist/components/NewComposition/menu-typeahead.d.ts +1 -1
  58. package/dist/components/OverrideInputProps.js +1 -1
  59. package/dist/components/PlayPause.js +3 -2
  60. package/dist/components/PlaybackKeyboardShortcutsManager.js +7 -5
  61. package/dist/components/PlaybackRateSelector.js +3 -9
  62. package/dist/components/PreviewToolbar.js +7 -4
  63. package/dist/components/PreviewToolbarOverflowButton.js +4 -2
  64. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -1
  65. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -1
  66. package/dist/components/RenderButton.d.ts +3 -2
  67. package/dist/components/RenderButton.js +95 -43
  68. package/dist/components/RenderModal/RenderStatusModal.js +1 -1
  69. package/dist/components/RenderModal/ServerRenderModal.js +1 -1
  70. package/dist/components/RenderModal/WebRenderModal.js +3 -2
  71. package/dist/components/RenderQueue/RenderQueueError.js +1 -1
  72. package/dist/components/RenderQueue/RenderQueueItemStatus.js +1 -1
  73. package/dist/components/RenderQueue/RenderQueueProgressMessage.js +1 -1
  74. package/dist/components/RenderQueue/RenderQueueRepeat.js +1 -1
  75. package/dist/components/SelectedOutlineElement.js +10 -11
  76. package/dist/components/SelectedOutlineOverlay.js +67 -20
  77. package/dist/components/SettingsModal.d.ts +7 -0
  78. package/dist/components/SettingsModal.js +50 -0
  79. package/dist/components/SettingsModalFooter.d.ts +4 -0
  80. package/dist/components/SettingsModalFooter.js +46 -0
  81. package/dist/components/SidebarRenderButton.js +1 -1
  82. package/dist/components/SizeSelector.js +3 -9
  83. package/dist/components/SvgImportDialog.js +2 -2
  84. package/dist/components/TimeValue.js +1 -1
  85. package/dist/components/Timeline/Timeline.js +5 -4
  86. package/dist/components/Timeline/TimelineAssetField.js +1 -1
  87. package/dist/components/Timeline/TimelineDragHandler.js +6 -3
  88. package/dist/components/Timeline/TimelineEffectItem.js +6 -2
  89. package/dist/components/Timeline/TimelineEffectPropItem.js +11 -6
  90. package/dist/components/Timeline/TimelineExpandedKeyframeRow.d.ts +6 -6
  91. package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +32 -1
  92. package/dist/components/Timeline/TimelineExpandedRow.d.ts +4 -2
  93. package/dist/components/Timeline/TimelineExpandedRow.js +2 -2
  94. package/dist/components/Timeline/TimelineFontFamilyField.js +3 -1
  95. package/dist/components/Timeline/TimelineHeightContainer.d.ts +1 -0
  96. package/dist/components/Timeline/TimelineHeightContainer.js +2 -2
  97. package/dist/components/Timeline/TimelineInOutDragHandler.js +3 -3
  98. package/dist/components/Timeline/TimelineKeyframeControls.js +1 -0
  99. package/dist/components/Timeline/TimelineKeyframeEasingLine.d.ts +4 -2
  100. package/dist/components/Timeline/TimelineKeyframeEasingLine.js +30 -28
  101. package/dist/components/Timeline/TimelineList.d.ts +1 -0
  102. package/dist/components/Timeline/TimelineList.js +2 -3
  103. package/dist/components/Timeline/TimelineScaleField.js +1 -1
  104. package/dist/components/Timeline/TimelineSelection.js +1 -0
  105. package/dist/components/Timeline/TimelineSequence.js +34 -28
  106. package/dist/components/Timeline/TimelineSequenceItem.d.ts +3 -3
  107. package/dist/components/Timeline/TimelineSequenceItem.js +61 -56
  108. package/dist/components/Timeline/TimelineSequencePropItem.d.ts +10 -2
  109. package/dist/components/Timeline/TimelineSequencePropItem.js +64 -12
  110. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +2 -2
  111. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +39 -6
  112. package/dist/components/Timeline/TimelineTimeIndicators.js +36 -3
  113. package/dist/components/Timeline/TimelineVideoInfo.d.ts +1 -1
  114. package/dist/components/Timeline/TimelineVideoInfo.js +36 -3
  115. package/dist/components/Timeline/TimelineZoomControls.d.ts +2 -2
  116. package/dist/components/Timeline/TimelineZoomControls.js +39 -12
  117. package/dist/components/Timeline/reset-selected-timeline-props.js +1 -1
  118. package/dist/components/Timeline/should-subscribe-to-sequence-props.d.ts +1 -1
  119. package/dist/components/Timeline/timeline-asset-link.d.ts +2 -2
  120. package/dist/components/Timeline/timeline-asset-link.js +2 -2
  121. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +4 -0
  122. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.d.ts +1 -1
  123. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +7 -18
  124. package/dist/components/Timeline/use-timeline-asset-drop.js +1 -0
  125. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +1 -0
  126. package/dist/components/Timeline/use-timeline-expanded-tree.js +5 -0
  127. package/dist/components/Timeline/use-timeline-height.d.ts +2 -1
  128. package/dist/components/Timeline/use-timeline-height.js +23 -2
  129. package/dist/components/TimelineCombobox.d.ts +11 -0
  130. package/dist/components/TimelineCombobox.js +181 -0
  131. package/dist/components/TimelineInOutToggle.js +5 -1
  132. package/dist/components/TopPanel.js +22 -7
  133. package/dist/components/UpdateCheck.js +1 -1
  134. package/dist/components/effect-drag-and-drop.js +1 -1
  135. package/dist/components/handle-drop.d.ts +2 -1
  136. package/dist/components/handle-drop.js +12 -2
  137. package/dist/components/import-assets.d.ts +18 -6
  138. package/dist/components/import-assets.js +76 -32
  139. package/dist/components/selected-outline-types.d.ts +1 -1
  140. package/dist/esm/{chunk-43m68z1k.js → chunk-b49ec3nz.js} +12436 -11482
  141. package/dist/esm/internals.mjs +12436 -11482
  142. package/dist/esm/previewEntry.mjs +9671 -8717
  143. package/dist/esm/renderEntry.mjs +1 -1
  144. package/dist/helpers/client-id.d.ts +3 -1
  145. package/dist/helpers/client-id.js +21 -4
  146. package/dist/helpers/hoverable.d.ts +11 -0
  147. package/dist/helpers/hoverable.js +70 -0
  148. package/dist/helpers/inject-css.js +3 -0
  149. package/dist/helpers/install-required-package.d.ts +3 -3
  150. package/dist/helpers/install-required-package.js +1 -6
  151. package/dist/helpers/studio-fit-padding.d.ts +1 -1
  152. package/dist/helpers/studio-fit-padding.js +1 -1
  153. package/dist/helpers/timeline-layout.d.ts +2 -1
  154. package/dist/helpers/timeline-layout.js +5 -2
  155. package/dist/helpers/use-is-fullscreen.d.ts +1 -0
  156. package/dist/helpers/use-is-fullscreen.js +25 -0
  157. package/dist/helpers/use-menu-structure.js +26 -43
  158. package/dist/helpers/use-runtime-values.d.ts +11 -0
  159. package/dist/helpers/use-runtime-values.js +76 -0
  160. package/dist/icons/apps.d.ts +2 -0
  161. package/dist/icons/apps.js +7 -0
  162. package/dist/icons/browse-elements.d.ts +4 -0
  163. package/dist/icons/browse-elements.js +10 -0
  164. package/dist/icons/canvas-zoom.d.ts +10 -0
  165. package/dist/icons/canvas-zoom.js +21 -0
  166. package/dist/icons/playback-rate.d.ts +5 -0
  167. package/dist/icons/playback-rate.js +31 -0
  168. package/dist/icons/search.d.ts +5 -0
  169. package/dist/icons/search.js +10 -0
  170. package/dist/state/modals.d.ts +5 -6
  171. package/dist/state/modals.js +5 -3
  172. package/package.json +12 -12
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.TimelineExpandedKeyframeRow = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const studio_shared_1 = require("@remotion/studio-shared");
38
39
  const react_1 = __importStar(require("react"));
39
40
  const timeline_layout_1 = require("../../helpers/timeline-layout");
40
41
  const get_timeline_easing_segments_1 = require("./get-timeline-easing-segments");
@@ -65,4 +66,34 @@ const TimelineExpandedKeyframeRowUnmemoized = ({ height, keyframes, canEditEasin
65
66
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [showSeparator ? jsx_runtime_1.jsx("div", { style: rowSeparator }) : null, jsx_runtime_1.jsx("div", { style: { ...rowClipper, height, width: timelineWidth !== null && timelineWidth !== void 0 ? timelineWidth : undefined }, children: jsx_runtime_1.jsxs("div", { style: { ...row, height }, children: [rowHighlightBackground && timelineWidth !== null ? (jsx_runtime_1.jsx("div", { style: (0, TimelineSelection_1.getTimelineSelectedTrackHighlightStyle)(timelineWidth, rowHighlightBackground) })) : null, easingSegments.map((segment) => (jsx_runtime_1.jsx(TimelineKeyframeEasingLine_1.TimelineKeyframeEasingLine, { fromFrame: segment.fromFrame, toFrame: segment.toFrame, rowHeight: height, nodePathInfo: nodePathInfo, segmentIndex: segment.segmentIndex }, `${segment.segmentIndex}-${segment.fromFrame}-${segment.toFrame}`))), keyframes.map((keyframe) => (jsx_runtime_1.jsx(TimelineKeyframeDiamond_1.TimelineKeyframeDiamond, { frame: keyframe.frame, rowHeight: height, nodePathInfo: nodePathInfo }, keyframe.frame)))] }) })
66
67
  ] }));
67
68
  };
68
- exports.TimelineExpandedKeyframeRow = react_1.default.memo(TimelineExpandedKeyframeRowUnmemoized);
69
+ const areTimelineExpandedKeyframeRowPropsEqual = (prevProps, nextProps) => {
70
+ if (prevProps.height !== nextProps.height ||
71
+ prevProps.canEditEasing !== nextProps.canEditEasing ||
72
+ prevProps.showSeparator !== nextProps.showSeparator ||
73
+ prevProps.keyframes.length !== nextProps.keyframes.length ||
74
+ prevProps.nodePathInfo.index !== nextProps.nodePathInfo.index ||
75
+ prevProps.nodePathInfo.numberOfSequencesWithThisNodePath !==
76
+ nextProps.nodePathInfo.numberOfSequencesWithThisNodePath ||
77
+ prevProps.nodePathInfo.supportsEffects !==
78
+ nextProps.nodePathInfo.supportsEffects ||
79
+ (0, studio_shared_1.stringifySequenceSubscriptionKey)(prevProps.nodePathInfo.sequenceSubscriptionKey) !==
80
+ (0, studio_shared_1.stringifySequenceSubscriptionKey)(nextProps.nodePathInfo.sequenceSubscriptionKey) ||
81
+ prevProps.nodePathInfo.auxiliaryKeys.length !==
82
+ nextProps.nodePathInfo.auxiliaryKeys.length) {
83
+ return false;
84
+ }
85
+ const prevVideoConfig = prevProps.nodePathInfo.sequenceSubscriptionKey.videoConfigValues;
86
+ const nextVideoConfig = nextProps.nodePathInfo.sequenceSubscriptionKey.videoConfigValues;
87
+ if (prevVideoConfig !== nextVideoConfig &&
88
+ (prevVideoConfig === null ||
89
+ nextVideoConfig === null ||
90
+ prevVideoConfig.durationInFrames !== nextVideoConfig.durationInFrames ||
91
+ prevVideoConfig.fps !== nextVideoConfig.fps ||
92
+ prevVideoConfig.height !== nextVideoConfig.height ||
93
+ prevVideoConfig.width !== nextVideoConfig.width)) {
94
+ return false;
95
+ }
96
+ return (prevProps.keyframes.every((keyframe, index) => keyframe.frame === nextProps.keyframes[index].frame) &&
97
+ prevProps.nodePathInfo.auxiliaryKeys.every((key, index) => key === nextProps.nodePathInfo.auxiliaryKeys[index]));
98
+ };
99
+ exports.TimelineExpandedKeyframeRow = react_1.default.memo(TimelineExpandedKeyframeRowUnmemoized, areTimelineExpandedKeyframeRowPropsEqual);
@@ -5,7 +5,7 @@ import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-s
5
5
  import type { TimelineTreeNode } from '../../helpers/timeline-layout';
6
6
  import type { GetIsExpanded } from '../ExpandedTracksProvider';
7
7
  import type { TimelineKeyframeControlsMode } from './TimelineKeyframeControls';
8
- export declare const TimelineExpandedRow: React.FC<{
8
+ type TimelineExpandedRowProps = {
9
9
  readonly node: TimelineTreeNode;
10
10
  readonly depth: number;
11
11
  readonly nestedDepth: number;
@@ -17,4 +17,6 @@ export declare const TimelineExpandedRow: React.FC<{
17
17
  readonly schema: InteractivitySchema;
18
18
  readonly keyframeDisplayOffset: number;
19
19
  readonly keyframeControlsMode?: TimelineKeyframeControlsMode;
20
- }>;
20
+ };
21
+ export declare const TimelineExpandedRow: React.NamedExoticComponent<TimelineExpandedRowProps>;
22
+ export {};
@@ -21,7 +21,7 @@ const rowLabel = {
21
21
  color: colors_1.WHITE_ALPHA_80,
22
22
  userSelect: 'none',
23
23
  };
24
- const TimelineExpandedRow = ({ node, depth, nestedDepth, rowDepthBase, getIsExpanded, toggleTrack, validatedLocation, nodePath, schema, keyframeDisplayOffset, keyframeControlsMode, }) => {
24
+ const TimelineExpandedRowInner = ({ node, depth, nestedDepth, rowDepthBase, getIsExpanded, toggleTrack, validatedLocation, nodePath, schema, keyframeDisplayOffset, keyframeControlsMode, }) => {
25
25
  const rowDepth = (rowDepthBase !== null && rowDepthBase !== void 0 ? rowDepthBase : (0, timeline_row_layout_1.getExpandedRowDepth)({ nestedDepth, treeDepth: 0 })) + depth;
26
26
  const selection = (0, TimelineSelection_1.useTimelineRowSelection)(node.nodePathInfo);
27
27
  const labelStyle = react_1.default.useMemo(() => ({
@@ -60,4 +60,4 @@ const TimelineExpandedRow = ({ node, depth, nestedDepth, rowDepthBase, getIsExpa
60
60
  height: (0, timeline_layout_1.getTreeRowHeight)(node),
61
61
  }, selected: selection.selected, selectable: selection.selectable, selectionItem: selection.selectionItem, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection: false, outerHeight: null, children: jsx_runtime_1.jsx("span", { style: labelStyle, children: node.label }) }));
62
62
  };
63
- exports.TimelineExpandedRow = TimelineExpandedRow;
63
+ exports.TimelineExpandedRow = react_1.default.memo(TimelineExpandedRowInner);
@@ -343,7 +343,9 @@ const TimelineFontFamilyField = ({ field, propStatus, effectiveValue, onSave, on
343
343
  await onSave(option.value);
344
344
  return;
345
345
  }
346
- await (0, install_required_package_1.installRequiredPackages)(['@remotion/google-fonts']);
346
+ await (0, install_required_package_1.installRequiredPackages)([
347
+ { name: '@remotion/google-fonts', version: null },
348
+ ]);
347
349
  const googleFont = getGoogleFontSourceEdit({
348
350
  fontFamily: (_a = option.value) !== null && _a !== void 0 ? _a : option.label,
349
351
  importName: option.googleFontImportName,
@@ -3,5 +3,6 @@ import type { TimelineTrackData } from '../../helpers/get-timeline-sequence-sort
3
3
  export declare const TimelineHeightContainer: React.NamedExoticComponent<{
4
4
  readonly shown: TimelineTrackData[];
5
5
  readonly hasBeenCut: boolean;
6
+ readonly isStill: boolean;
6
7
  readonly children: React.ReactNode;
7
8
  }>;
@@ -45,8 +45,8 @@ const baseStyle = {
45
45
  overflowX: 'hidden',
46
46
  backgroundColor: TimelineSelection_1.TIMELINE_BACKGROUND,
47
47
  };
48
- const TimelineHeightContainerInner = ({ shown, hasBeenCut, children }) => {
49
- const height = (0, use_timeline_height_1.useTimelineHeight)({ shown, hasBeenCut });
48
+ const TimelineHeightContainerInner = ({ shown, hasBeenCut, isStill, children }) => {
49
+ const height = (0, use_timeline_height_1.useTimelineHeight)({ shown, hasBeenCut, isStill });
50
50
  const style = (0, react_1.useMemo)(() => ({ ...baseStyle, height }), [height]);
51
51
  return jsx_runtime_1.jsx("div", { style: style, children: children });
52
52
  };
@@ -302,7 +302,7 @@ const TimelineInOutDragHandlerInner = () => {
302
302
  (0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
303
303
  };
304
304
  }, []);
305
- const inContextMenu = (0, react_1.useMemo)(() => {
305
+ const getInContextMenuItems = (0, react_1.useCallback)(() => {
306
306
  return [
307
307
  {
308
308
  id: 'hide-in',
@@ -330,7 +330,7 @@ const TimelineInOutDragHandlerInner = () => {
330
330
  },
331
331
  ];
332
332
  }, [setInAndOutFrames, videoConfig.id]);
333
- const outContextMenu = (0, react_1.useMemo)(() => {
333
+ const getOutContextMenuItems = (0, react_1.useCallback)(() => {
334
334
  return [
335
335
  {
336
336
  id: 'hide-out',
@@ -358,6 +358,6 @@ const TimelineInOutDragHandlerInner = () => {
358
358
  },
359
359
  ];
360
360
  }, [setInAndOutFrames, videoConfig.id]);
361
- return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [inFrame !== null && (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: inContextMenu, onOpen: null, children: jsx_runtime_1.jsx(TimelineInOutPointerHandle_1.TimelineInOutPointerHandle, { type: "in", atFrame: inFrame, dragging: inOutDragging.dragging === 'in', onPointerDown: onInPointerDown }) })), outFrame !== null && (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: outContextMenu, onOpen: null, children: jsx_runtime_1.jsx(TimelineInOutPointerHandle_1.TimelineInOutPointerHandle, { type: "out", dragging: inOutDragging.dragging === 'out', atFrame: outFrame, onPointerDown: onOutPointerDown }) }))] }));
361
+ return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [inFrame !== null && (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getInContextMenuItems, children: jsx_runtime_1.jsx(TimelineInOutPointerHandle_1.TimelineInOutPointerHandle, { type: "in", atFrame: inFrame, dragging: inOutDragging.dragging === 'in', onPointerDown: onInPointerDown }) })), outFrame !== null && (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getOutContextMenuItems, children: jsx_runtime_1.jsx(TimelineInOutPointerHandle_1.TimelineInOutPointerHandle, { type: "out", dragging: inOutDragging.dragging === 'out', atFrame: outFrame, onPointerDown: onOutPointerDown }) }))] }));
362
362
  };
363
363
  const TimelineInOutDragHandlerInnerMemo = react_1.default.memo(TimelineInOutDragHandlerInner);
@@ -131,6 +131,7 @@ const resolveKeyframeControlTarget = ({ nodePathInfo, tracks, propStatuses, getD
131
131
  propStatuses,
132
132
  includeTextContent: false,
133
133
  includeSourceControls: false,
134
+ runtimeValues: null,
134
135
  });
135
136
  const fieldNode = findFieldNode(tree, (0, timeline_node_path_key_1.timelineNodePathInfoToKey)(nodePathInfo));
136
137
  if (fieldNode === null || fieldNode.field === null) {
@@ -4,10 +4,12 @@ export declare const getTimelineKeyframeEasingLineStyle: (selected: boolean) =>
4
4
  export declare const TimelineKeyframeEasingLineVisual: React.NamedExoticComponent<{
5
5
  readonly selected: boolean;
6
6
  }>;
7
- export declare const TimelineKeyframeEasingLine: React.NamedExoticComponent<{
7
+ type TimelineKeyframeEasingLineProps = {
8
8
  readonly fromFrame: number;
9
9
  readonly toFrame: number;
10
10
  readonly rowHeight: number;
11
11
  readonly nodePathInfo: SequenceNodePathInfo;
12
12
  readonly segmentIndex: number;
13
- }>;
13
+ };
14
+ export declare const TimelineKeyframeEasingLine: React.NamedExoticComponent<TimelineKeyframeEasingLineProps>;
15
+ export {};
@@ -77,10 +77,8 @@ const TimelineKeyframeEasingLineVisualUnmemoized = ({ selected }) => {
77
77
  return jsx_runtime_1.jsx("div", { style: lineStyle });
78
78
  };
79
79
  exports.TimelineKeyframeEasingLineVisual = react_1.default.memo(TimelineKeyframeEasingLineVisualUnmemoized);
80
- const TimelineKeyframeEasingLineUnmemoized = ({ fromFrame, toFrame, rowHeight, nodePathInfo, segmentIndex }) => {
80
+ const TimelineKeyframeEasingLineInteraction = ({ fromFrame, toFrame, nodePathInfo, segmentIndex, style }) => {
81
81
  const buttonRef = (0, react_1.useRef)(null);
82
- const videoConfig = (0, remotion_1.useVideoConfig)();
83
- const timelineWidth = (0, react_1.useContext)(TimelineWidthProvider_1.TimelineWidthContext);
84
82
  const { selected, onSelect, selectable, selectionItem } = (0, TimelineSelection_1.useTimelineEasingSelection)({
85
83
  nodePathInfo,
86
84
  fromFrame,
@@ -88,6 +86,10 @@ const TimelineKeyframeEasingLineUnmemoized = ({ fromFrame, toFrame, rowHeight, n
88
86
  segmentIndex,
89
87
  });
90
88
  (0, TimelineSelection_1.useTimelineMarqueeSelectableItem)(selectionItem, buttonRef);
89
+ const interactiveStyle = (0, react_1.useMemo)(() => ({
90
+ ...style,
91
+ pointerEvents: selectable ? 'auto' : 'none',
92
+ }), [selectable, style]);
91
93
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
92
94
  const sequencesRef = (0, react_1.useContext)(remotion_1.Internals.SequenceManagerRefContext);
93
95
  const propStatusesRef = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesRefContext);
@@ -120,7 +122,16 @@ const TimelineKeyframeEasingLineUnmemoized = ({ fromFrame, toFrame, rowHeight, n
120
122
  sequencesRef,
121
123
  setPropStatuses,
122
124
  ]);
123
- const contextMenuValues = (0, react_1.useMemo)(() => {
125
+ const getContextMenuItems = (0, react_1.useCallback)((event) => {
126
+ if (!selectable) {
127
+ return false;
128
+ }
129
+ if (!selected) {
130
+ onSelect({
131
+ shiftKey: event.shiftKey,
132
+ toggleKey: event.metaKey || event.ctrlKey,
133
+ });
134
+ }
124
135
  return [
125
136
  {
126
137
  type: 'item',
@@ -147,19 +158,20 @@ const TimelineKeyframeEasingLineUnmemoized = ({ fromFrame, toFrame, rowHeight, n
147
158
  value: preset.id,
148
159
  })),
149
160
  ];
150
- }, [previewServerState.type, updateEasing]);
151
- const onOpenContextMenu = (0, react_1.useCallback)((event) => {
152
- if (!selectable) {
153
- return false;
154
- }
155
- if (!selected) {
156
- onSelect({
157
- shiftKey: event.shiftKey,
158
- toggleKey: event.metaKey || event.ctrlKey,
159
- });
160
- }
161
- return contextMenuValues;
162
- }, [contextMenuValues, onSelect, selectable, selected]);
161
+ }, [onSelect, previewServerState.type, selectable, selected, updateEasing]);
162
+ const onPointerDown = (0, use_timeline_keyframe_drag_1.useTimelineEasingKeyframeDrag)({
163
+ onSelect,
164
+ selectable,
165
+ selected,
166
+ selectionItem,
167
+ });
168
+ return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
169
+ jsx_runtime_1.jsx("button", { ref: buttonRef, [TimelineSelection_1.TIMELINE_MARQUEE_ITEM_ATTR]: true, type: "button", style: interactiveStyle, title: `Easing from frame ${fromFrame} to ${toFrame}`, "aria-label": `Select easing from frame ${fromFrame} to ${toFrame}`, onPointerDown: selectable ? onPointerDown : undefined, children: jsx_runtime_1.jsx(exports.TimelineKeyframeEasingLineVisual, { selected: selected }) }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: buttonRef, getItems: getContextMenuItems })
170
+ ] }));
171
+ };
172
+ const TimelineKeyframeEasingLineUnmemoized = ({ fromFrame, toFrame, rowHeight, nodePathInfo, segmentIndex }) => {
173
+ const videoConfig = (0, remotion_1.useVideoConfig)();
174
+ const timelineWidth = (0, react_1.useContext)(TimelineWidthProvider_1.TimelineWidthContext);
163
175
  const style = (0, react_1.useMemo)(() => {
164
176
  if (timelineWidth === null) {
165
177
  return null;
@@ -174,29 +186,19 @@ const TimelineKeyframeEasingLineUnmemoized = ({ fromFrame, toFrame, rowHeight, n
174
186
  return {
175
187
  ...easingLineButton,
176
188
  left,
177
- pointerEvents: selectable ? 'auto' : 'none',
178
189
  top: rowHeight / 2,
179
190
  width,
180
191
  };
181
192
  }, [
182
193
  fromFrame,
183
194
  rowHeight,
184
- selectable,
185
195
  timelineWidth,
186
196
  toFrame,
187
197
  videoConfig.durationInFrames,
188
198
  ]);
189
- const onPointerDown = (0, use_timeline_keyframe_drag_1.useTimelineEasingKeyframeDrag)({
190
- onSelect,
191
- selectable,
192
- selected,
193
- selectionItem,
194
- });
195
199
  if (style === null) {
196
200
  return null;
197
201
  }
198
- return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
199
- jsx_runtime_1.jsx("button", { ref: buttonRef, [TimelineSelection_1.TIMELINE_MARQUEE_ITEM_ATTR]: true, type: "button", style: style, title: `Easing from frame ${fromFrame} to ${toFrame}`, "aria-label": `Select easing from frame ${fromFrame} to ${toFrame}`, onPointerDown: selectable ? onPointerDown : undefined, children: jsx_runtime_1.jsx(exports.TimelineKeyframeEasingLineVisual, { selected: selected }) }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: buttonRef, values: contextMenuValues, onOpen: onOpenContextMenu })
200
- ] }));
202
+ return (jsx_runtime_1.jsx(TimelineKeyframeEasingLineInteraction, { fromFrame: fromFrame, toFrame: toFrame, rowHeight: rowHeight, nodePathInfo: nodePathInfo, segmentIndex: segmentIndex, style: style }));
201
203
  };
202
204
  exports.TimelineKeyframeEasingLine = react_1.default.memo(TimelineKeyframeEasingLineUnmemoized);
@@ -2,4 +2,5 @@ import React from 'react';
2
2
  import type { TimelineTrackData } from '../../helpers/get-timeline-sequence-sort-key';
3
3
  export declare const TimelineList: React.FC<{
4
4
  readonly timeline: TimelineTrackData[];
5
+ readonly showTimePadding: boolean;
5
6
  }>;
@@ -16,9 +16,8 @@ const TimelineListTrack = ({ nestedTrack }) => {
16
16
  const { track, children, siblingIndex } = nestedTrack;
17
17
  return (jsx_runtime_1.jsx("div", { children: jsx_runtime_1.jsx(TimelineSequenceItem_1.TimelineSequenceItem, { siblingIndex: siblingIndex, connectedCompositions: (_a = track.connectedCompositions) !== null && _a !== void 0 ? _a : [], nestedDepth: track.depth, sequence: track.sequence, nodePathInfo: track.nodePathInfo, keyframeDisplayOffset: track.keyframeDisplayOffset, sequenceFrameOffset: track.sequenceFrameOffset, children: children.map((child) => (jsx_runtime_1.jsx(TimelineListTrack, { nestedTrack: child }, child.track.sequence.id))) }) }));
18
18
  };
19
- const TimelineList = ({ timeline }) => {
19
+ const TimelineList = ({ timeline, showTimePadding }) => {
20
20
  const nestedTimeline = (0, react_1.useMemo)(() => (0, nest_timeline_tracks_1.nestTimelineTracks)(timeline), [timeline]);
21
- return (jsx_runtime_1.jsxs("div", { style: container, children: [
22
- jsx_runtime_1.jsx(TimelineTimeIndicators_1.TimelineTimePadding, {}), nestedTimeline.map((nestedTrack) => (jsx_runtime_1.jsx(TimelineListTrack, { nestedTrack: nestedTrack }, nestedTrack.track.sequence.id)))] }));
21
+ return (jsx_runtime_1.jsxs("div", { style: container, children: [showTimePadding ? jsx_runtime_1.jsx(TimelineTimeIndicators_1.TimelineTimePadding, {}) : null, nestedTimeline.map((nestedTrack) => (jsx_runtime_1.jsx(TimelineListTrack, { nestedTrack: nestedTrack }, nestedTrack.track.sequence.id)))] }));
23
22
  };
24
23
  exports.TimelineList = TimelineList;
@@ -308,7 +308,7 @@ const TimelineScaleField = ({ field, propStatus, effectiveValue, onSave, onDragV
308
308
  });
309
309
  }, [field.key, linked, scaleLockNodePath, setScaleLockState]);
310
310
  return (jsx_runtime_1.jsxs("span", { style: containerStyle, children: [
311
- jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragX !== null && dragX !== void 0 ? dragX : codeX, style: leftDraggerStyle, status: "ok", small: true, onValueChange: onXChange, onValueChangeEnd: onXChangeEnd, onTextChange: onXTextChange, min: min, max: max, step: step, formatter: formatter, rightAlign: false }), jsx_runtime_1.jsx("div", { style: gapStyle }), jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragY !== null && dragY !== void 0 ? dragY : codeY, style: rightDraggerStyle, status: "ok", small: true, onValueChange: onYChange, onValueChangeEnd: onYChangeEnd, onTextChange: onYTextChange, min: min, max: max, step: step, formatter: formatter, rightAlign: false }), jsx_runtime_1.jsx(LinkToggle, { linked: linked, onToggle: onToggleLink })
311
+ jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragX !== null && dragX !== void 0 ? dragX : codeX, style: leftDraggerStyle, status: "ok", small: true, onValueChange: onXChange, onValueChangeEnd: onXChangeEnd, onTextChange: onXTextChange, min: min, max: max, step: step, formatter: formatter, rightAlign: false, allowStepMismatch: true }), jsx_runtime_1.jsx("div", { style: gapStyle }), jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragY !== null && dragY !== void 0 ? dragY : codeY, style: rightDraggerStyle, status: "ok", small: true, onValueChange: onYChange, onValueChangeEnd: onYChangeEnd, onTextChange: onYTextChange, min: min, max: max, step: step, formatter: formatter, rightAlign: false, allowStepMismatch: true }), jsx_runtime_1.jsx(LinkToggle, { linked: linked, onToggle: onToggleLink })
312
312
  ] }));
313
313
  };
314
314
  exports.TimelineScaleField = TimelineScaleField;
@@ -448,6 +448,7 @@ const getSelectableTimelineItems = ({ getDragOverrides, getEffectDragOverrides,
448
448
  propStatuses,
449
449
  includeTextContent: false,
450
450
  includeSourceControls: false,
451
+ runtimeValues: null,
451
452
  });
452
453
  const filteredTree = (0, timeline_expanded_filter_1.filterTimelineExpandedTree)({
453
454
  nodes: tree,
@@ -59,6 +59,7 @@ const disable_sequence_interactivity_1 = require("./disable-sequence-interactivi
59
59
  const duplicate_selected_timeline_item_1 = require("./duplicate-selected-timeline-item");
60
60
  const get_sequence_context_menu_items_1 = require("./get-sequence-context-menu-items");
61
61
  const get_timeline_media_visualization_layout_1 = require("./get-timeline-media-visualization-layout");
62
+ const imperative_state_1 = require("./imperative-state");
62
63
  const LoopedTimelineIndicators_1 = require("./LoopedTimelineIndicators");
63
64
  const timeline_asset_link_1 = require("./timeline-asset-link");
64
65
  const TimelineImageInfo_1 = require("./TimelineImageInfo");
@@ -158,7 +159,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
158
159
  // Some compositions may not be longer than their media duration,
159
160
  // if that is the case, it needs to be asynchronously determined
160
161
  var _a, _b, _c;
161
- var _d, _e, _f, _g, _h, _j;
162
+ var _d, _e, _f, _g, _h;
162
163
  const video = remotion_1.Internals.useVideo();
163
164
  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);
164
165
  const effectiveMaxMediaDuration = s.loopDisplay ? null : maxMediaDuration;
@@ -200,7 +201,6 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
200
201
  const previewInteractive = previewConnected && (0, interactivity_enabled_1.isStudioInteractivityEnabled)();
201
202
  const editorInfo = (0, use_default_editor_info_1.useDefaultEditorInfo)((0, use_default_editor_info_1.canUseEditorPicker)(previewConnected));
202
203
  const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
203
- const timelinePosition = remotion_1.Internals.Timeline.useTimelinePosition();
204
204
  const selectAsset = (0, use_select_asset_1.useSelectAsset)();
205
205
  const selectComposition = (0, InitialCompositionLoader_1.useSelectComposition)();
206
206
  const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
@@ -233,6 +233,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
233
233
  }
234
234
  e.stopPropagation();
235
235
  if (action === 'open-connected-composition') {
236
+ const timelinePosition = (0, imperative_state_1.getCurrentFrame)();
236
237
  selectComposition(connectedCompositions[0], true, (0, get_sequence_double_click_action_1.getConnectedCompositionFrame)({
237
238
  timelinePosition,
238
239
  sequence: s,
@@ -248,7 +249,6 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
248
249
  s,
249
250
  selectComposition,
250
251
  sequenceFrameOffset,
251
- timelinePosition,
252
252
  ]);
253
253
  const canHandleSequenceDoubleClick = connectedCompositions.length === 1 || canOpenInEditor;
254
254
  const canDeleteFromSource = Boolean(nodePath && (validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source));
@@ -261,7 +261,6 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
261
261
  const mediaSrc = s.type === 'audio' || s.type === 'video' || s.type === 'image'
262
262
  ? s.src
263
263
  : null;
264
- const assetLinkInfo = (0, react_1.useMemo)(() => (mediaSrc ? (0, timeline_asset_link_1.getTimelineAssetLinkInfo)(mediaSrc) : null), [mediaSrc]);
265
264
  const onDuplicateSequenceFromSource = (0, react_1.useCallback)(() => {
266
265
  if (!(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source) || !nodePathInfo || duplicateDisabled) {
267
266
  return;
@@ -327,21 +326,25 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
327
326
  setPropStatuses,
328
327
  validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
329
328
  ]);
330
- const freezeFrameMenuItem = (0, use_sequence_freeze_frame_menu_item_1.useSequenceFreezeFrameMenuItem)({
331
- clientId: previewInteractive && previewServerState.type === 'connected'
332
- ? previewServerState.clientId
333
- : null,
334
- nodePath,
335
- propStatusesForOverride,
336
- sequence: s,
337
- sequenceFrameOffset,
338
- setPropStatuses,
339
- timelinePosition,
340
- validatedSource: (_f = validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source) !== null && _f !== void 0 ? _f : null,
341
- });
342
- const contextMenuValues = (0, react_1.useMemo)(() => {
329
+ const getContextMenuItems = (0, react_1.useCallback)(() => {
330
+ var _a;
331
+ if (selectable) {
332
+ onSelect({ shiftKey: false, toggleKey: false });
333
+ }
334
+ const freezeFrameMenuItem = (0, use_sequence_freeze_frame_menu_item_1.getSequenceFreezeFrameMenuItem)({
335
+ clientId: previewInteractive && previewServerState.type === 'connected'
336
+ ? previewServerState.clientId
337
+ : null,
338
+ nodePath,
339
+ propStatusesForOverride,
340
+ sequence: s,
341
+ sequenceFrameOffset,
342
+ setPropStatuses,
343
+ timelinePosition: (0, imperative_state_1.getCurrentFrame)(),
344
+ validatedSource: (_a = validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source) !== null && _a !== void 0 ? _a : null,
345
+ });
343
346
  return (0, get_sequence_context_menu_items_1.getSequenceContextMenuItems)({
344
- assetLinkInfo,
347
+ assetLinkInfo: mediaSrc ? (0, timeline_asset_link_1.getTimelineAssetLinkInfo)(mediaSrc) : null,
345
348
  canOpenInEditor,
346
349
  deleteDisabled,
347
350
  disableInteractivityDisabled,
@@ -361,32 +364,35 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
361
364
  : [],
362
365
  });
363
366
  }, [
364
- assetLinkInfo,
365
367
  canOpenInEditor,
366
368
  deleteDisabled,
367
369
  disableInteractivityDisabled,
368
370
  duplicateDisabled,
369
371
  editorInfo,
370
372
  fileLocation,
371
- freezeFrameMenuItem,
373
+ mediaSrc,
374
+ nodePath,
375
+ onSelect,
372
376
  onDeleteSequenceFromSource,
373
377
  onDisableSequenceInteractivity,
374
378
  onDuplicateSequenceFromSource,
375
379
  openInEditor,
376
380
  originalLocation,
381
+ previewInteractive,
382
+ previewServerState,
383
+ propStatusesForOverride,
377
384
  s,
378
385
  selectAsset,
386
+ selectable,
387
+ sequenceFrameOffset,
388
+ setPropStatuses,
389
+ validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
379
390
  ]);
380
- const onContextMenuOpen = (0, react_1.useCallback)(() => {
381
- if (selectable) {
382
- onSelect({ shiftKey: false, toggleKey: false });
383
- }
384
- }, [onSelect, selectable]);
385
391
  const { frozenFrame } = s;
386
392
  const { onPointerDown: onMoveDragPointerDown } = (0, TimelineSequenceRightEdgeDragHandle_1.useTimelineSequenceFromDrag)({
387
393
  nodePathInfo,
388
394
  windowWidth,
389
- timelineDurationInFrames: (_g = video === null || video === void 0 ? void 0 : video.durationInFrames) !== null && _g !== void 0 ? _g : 1,
395
+ timelineDurationInFrames: (_f = video === null || video === void 0 ? void 0 : video.durationInFrames) !== null && _f !== void 0 ? _f : 1,
390
396
  });
391
397
  if (!video) {
392
398
  throw new TypeError('Expected video config');
@@ -458,7 +464,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
458
464
  if (maxMediaDuration === null && !s.loopDisplay) {
459
465
  return null;
460
466
  }
461
- const sequence = (jsx_runtime_1.jsxs(TimelineSequenceCurrentFrame, { s: s, displayDurationInFrames: displayDurationInFrames, premountWidth: premountWidth, postmountWidth: postmountWidth, style: style, nodePathInfo: nodePathInfo, sequenceFrameOffset: sequenceFrameOffset, fromCanUpdate: fromCanUpdate, frozenFrame: frozenFrame, onMoveDragPointerDown: onMoveDragPointerDown, onDoubleClick: canHandleSequenceDoubleClick ? onSequenceDoubleClick : undefined, children: [s.type === 'audio' ? (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, visualizationWidth: mediaVisualizationLayout.width, startFrom: s.startMediaFrom, durationInFrames: s.duration, volume: s.volume, playbackRate: s.playbackRate, loopDisplay: s.loopDisplay }) })) : null, s.type === 'video' ? (jsx_runtime_1.jsx(TimelineVideoInfo_1.TimelineVideoInfo, { src: s.src, visualizationWidth: width, naturalWidth: naturalWidth, startMediaFrom: s.startMediaFrom, mediaFrameAtSequenceZero: s.mediaFrameAtSequenceZero, sequenceFrameOffset: sequenceFrameOffset, durationInFrames: s.duration, playbackRate: s.playbackRate, volume: s.volume, doesVolumeChange: s.doesVolumeChange, premountWidth: premountWidth !== null && premountWidth !== void 0 ? premountWidth : 0, postmountWidth: postmountWidth !== null && postmountWidth !== void 0 ? postmountWidth : 0, loopDisplay: s.loopDisplay, frozenMediaFrame: s.frozenMediaFrame, extendLastFrame: extendVideoLastFrame })) : null, s.type === 'image' ? (jsx_runtime_1.jsx("div", { style: mediaVisualizationStyle, children: jsx_runtime_1.jsx(TimelineImageInfo_1.TimelineImageInfo, { src: s.src, visualizationWidth: mediaVisualizationLayout.width }) })) : null, s.loopDisplay === undefined ? null : (jsx_runtime_1.jsx(LoopedTimelineIndicators_1.LoopedTimelineIndicator, { loops: s.loopDisplay.numberOfTimes })), showLeftEdgeDragHandle && nodePathInfo && validatedLocation ? (jsx_runtime_1.jsx(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceLeftEdgeDragHandle, { nodePathInfo: nodePathInfo, windowWidth: windowWidth, timelineDurationInFrames: (_h = video.durationInFrames) !== null && _h !== void 0 ? _h : 1 })) : null, showRightEdgeDragHandle && nodePathInfo && validatedLocation ? (jsx_runtime_1.jsx(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceRightEdgeDragHandle, { nodePathInfo: nodePathInfo, windowWidth: windowWidth, timelineDurationInFrames: (_j = video.durationInFrames) !== null && _j !== void 0 ? _j : 1 })) : null] }));
462
- return previewConnected || window.remotion_isReadOnlyStudio ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: contextMenuValues, onOpen: onContextMenuOpen, children: sequence })) : (sequence);
467
+ const sequence = (jsx_runtime_1.jsxs(TimelineSequenceCurrentFrame, { s: s, displayDurationInFrames: displayDurationInFrames, premountWidth: premountWidth, postmountWidth: postmountWidth, style: style, nodePathInfo: nodePathInfo, sequenceFrameOffset: sequenceFrameOffset, fromCanUpdate: fromCanUpdate, frozenFrame: frozenFrame, onMoveDragPointerDown: onMoveDragPointerDown, onDoubleClick: canHandleSequenceDoubleClick ? onSequenceDoubleClick : undefined, children: [s.type === 'audio' ? (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, visualizationWidth: mediaVisualizationLayout.width, startFrom: s.startMediaFrom, durationInFrames: s.duration, volume: s.volume, playbackRate: s.playbackRate, loopDisplay: s.loopDisplay }) })) : null, s.type === 'video' ? (jsx_runtime_1.jsx(TimelineVideoInfo_1.TimelineVideoInfo, { src: s.src, visualizationWidth: width, naturalWidth: naturalWidth, startMediaFrom: s.startMediaFrom, mediaFrameAtSequenceZero: s.mediaFrameAtSequenceZero, sequenceFrameOffset: sequenceFrameOffset, durationInFrames: s.duration, playbackRate: s.playbackRate, volume: s.volume, doesVolumeChange: s.doesVolumeChange, premountWidth: premountWidth !== null && premountWidth !== void 0 ? premountWidth : 0, postmountWidth: postmountWidth !== null && postmountWidth !== void 0 ? postmountWidth : 0, loopDisplay: s.loopDisplay, frozenMediaFrame: s.frozenMediaFrame, extendLastFrame: extendVideoLastFrame })) : null, s.type === 'image' ? (jsx_runtime_1.jsx("div", { style: mediaVisualizationStyle, children: jsx_runtime_1.jsx(TimelineImageInfo_1.TimelineImageInfo, { src: s.src, visualizationWidth: mediaVisualizationLayout.width }) })) : null, s.loopDisplay === undefined ? null : (jsx_runtime_1.jsx(LoopedTimelineIndicators_1.LoopedTimelineIndicator, { loops: s.loopDisplay.numberOfTimes })), showLeftEdgeDragHandle && nodePathInfo && validatedLocation ? (jsx_runtime_1.jsx(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceLeftEdgeDragHandle, { nodePathInfo: nodePathInfo, windowWidth: windowWidth, timelineDurationInFrames: (_g = video.durationInFrames) !== null && _g !== void 0 ? _g : 1 })) : null, showRightEdgeDragHandle && nodePathInfo && validatedLocation ? (jsx_runtime_1.jsx(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceRightEdgeDragHandle, { nodePathInfo: nodePathInfo, windowWidth: windowWidth, timelineDurationInFrames: (_h = video.durationInFrames) !== null && _h !== void 0 ? _h : 1 })) : null] }));
468
+ return previewConnected || window.remotion_isReadOnlyStudio ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: sequence })) : (sequence);
463
469
  };
464
470
  exports.TimelineSequence = react_1.default.memo(TimelineSequenceFn);
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
- import type { _InternalTypes, TSequence } from 'remotion';
2
+ import type { TSequence } from 'remotion';
3
3
  import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
4
- export declare const TimelineSequenceItem: React.FC<{
4
+ export declare const TimelineSequenceItem: React.NamedExoticComponent<{
5
5
  readonly children: React.ReactNode;
6
6
  readonly sequence: TSequence;
7
- readonly connectedCompositions: readonly _InternalTypes['AnyComposition'][];
7
+ readonly connectedCompositions: readonly import("remotion").AnyComposition[];
8
8
  readonly nestedDepth: number;
9
9
  readonly nodePathInfo: SequenceNodePathInfo | null;
10
10
  readonly keyframeDisplayOffset: number;