@remotion/studio 4.0.527 → 4.0.528
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AgentPrompt.js +1 -2
- package/dist/components/AudioWaveform.d.ts +1 -0
- package/dist/components/AudioWaveform.js +10 -14
- package/dist/components/CodeFrame.js +1 -1
- package/dist/components/ColorPicker/checker.d.ts +1 -1
- package/dist/components/CurrentAsset.js +3 -2
- package/dist/components/EditorRuler/Ruler.js +6 -3
- package/dist/components/EffectPickerModal.js +69 -43
- package/dist/components/ElementInstallConfirmation.js +3 -3
- package/dist/components/ElementLibrariesSettings.d.ts +2 -0
- package/dist/components/ElementLibrariesSettings.js +200 -0
- package/dist/components/InitialCompositionLoader.js +3 -1
- package/dist/components/InspectorOpenInEditor.js +13 -0
- package/dist/components/InspectorPanel/AlignmentControls.js +28 -9
- package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +1 -1
- package/dist/components/InspectorPanel/EasingInspector.js +6 -2
- package/dist/components/InspectorPanel/ElementLibraryButton.js +1 -1
- package/dist/components/InspectorPanel/KeyframeEasingNavigator.js +1 -1
- package/dist/components/InspectorPanel/KeyframeInspector.js +28 -24
- package/dist/components/InspectorPanel/MultiSequenceNumberField.js +1 -1
- package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -1
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +30 -2
- package/dist/components/InspectorPanel/SequenceWrapAction.d.ts +8 -0
- package/dist/components/InspectorPanel/SequenceWrapAction.js +151 -0
- package/dist/components/InspectorPanel/easing-inspector-selection.d.ts +2 -1
- package/dist/components/InspectorPanel/easing-inspector-selection.js +4 -3
- package/dist/components/InspectorPanel/keyframe-inspector-frame.d.ts +2 -1
- package/dist/components/InspectorPanel/keyframe-inspector-frame.js +2 -2
- package/dist/components/InspectorSequenceSection.d.ts +1 -0
- package/dist/components/InspectorSequenceSection.js +7 -5
- package/dist/components/KeyboardShortcutsSettings.js +1 -1
- package/dist/components/Menu/styles.d.ts +2 -2
- package/dist/components/Modals.js +7 -6
- package/dist/components/ModelManager.js +10 -9
- package/dist/components/NewComposition/CancelButton.js +10 -4
- package/dist/components/NewComposition/InputDragger.d.ts +3 -1
- package/dist/components/NewComposition/InputDragger.js +28 -9
- package/dist/components/NewComposition/NewComposition.js +7 -6
- package/dist/components/NewComposition/RemInput.d.ts +1 -1
- package/dist/components/NewComposition/menu-typeahead.js +1 -1
- package/dist/components/Preview.js +3 -2
- package/dist/components/RenderModal/SchemaEditor/create-zod-values.js +1 -2
- package/dist/components/RenderModal/WebRenderModalPicture.js +1 -2
- package/dist/components/RenderQueue/CaptionQueueItem.js +14 -5
- package/dist/components/RenderQueue/CaptionQueueProcessor.js +30 -7
- package/dist/components/RenderQueue/QueueJobError.d.ts +8 -0
- package/dist/components/RenderQueue/QueueJobError.js +24 -0
- package/dist/components/RenderQueue/QueueJobErrorModal.d.ts +8 -0
- package/dist/components/RenderQueue/QueueJobErrorModal.js +63 -0
- package/dist/components/RenderQueue/RenderQueueItemCancelButton.d.ts +3 -1
- package/dist/components/RenderQueue/RenderQueueItemCancelButton.js +11 -4
- package/dist/components/RenderQueue/RenderQueueRepeat.d.ts +3 -1
- package/dist/components/RenderQueue/RenderQueueRepeat.js +20 -3
- package/dist/components/RenderQueue/VideoMattingQueueItem.js +24 -27
- package/dist/components/RenderQueue/VideoMattingQueueProcessor.js +68 -28
- package/dist/components/RenderQueue/caption-job-types.d.ts +3 -1
- package/dist/components/RenderQueue/context.d.ts +4 -0
- package/dist/components/RenderQueue/context.js +58 -8
- package/dist/components/RenderQueue/index.js +2 -3
- package/dist/components/RenderQueue/load-model-for-job.d.ts +2 -1
- package/dist/components/RenderQueue/load-model-for-job.js +5 -1
- package/dist/components/RenderQueue/video-matting-job-types.d.ts +13 -6
- package/dist/components/SelectedOutlineCropControls.js +2 -1
- package/dist/components/SelectedOutlineEditingHandles.js +9 -2
- package/dist/components/SelectedOutlineElement.js +9 -3
- package/dist/components/SelectedOutlineKeyboardControls.d.ts +2 -4
- package/dist/components/SelectedOutlineKeyboardControls.js +4 -22
- package/dist/components/SelectedOutlineOverlay.js +152 -106
- package/dist/components/SelectedOutlinePathPoints.d.ts +8 -0
- package/dist/components/SelectedOutlinePathPoints.js +433 -0
- package/dist/components/SelectedOutlinePolygon.js +21 -46
- package/dist/components/SelectedOutlineRenderer.d.ts +3 -5
- package/dist/components/SelectedOutlineRenderer.js +32 -136
- package/dist/components/SelectedOutlineTransformOriginHandle.js +3 -2
- package/dist/components/SelectedOutlineUvControls.js +12 -7
- package/dist/components/SettingsModal.js +30 -3
- package/dist/components/SettingsModalFooter.d.ts +1 -0
- package/dist/components/SettingsModalFooter.js +7 -3
- package/dist/components/ShowOutlinesProvider.js +1 -1
- package/dist/components/SkillsSettings.d.ts +0 -1
- package/dist/components/SkillsSettings.js +13 -14
- package/dist/components/Splitter/SplitterElement.js +1 -2
- package/dist/components/TimeValue.js +1 -1
- package/dist/components/Timeline/LoopedTimelineIndicators.d.ts +1 -0
- package/dist/components/Timeline/LoopedTimelineIndicators.js +7 -6
- package/dist/components/Timeline/TimelineArrayField.js +1 -1
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +0 -1
- package/dist/components/Timeline/TimelineColorField.js +1 -1
- package/dist/components/Timeline/TimelineDragHandler.js +1 -1
- package/dist/components/Timeline/TimelineEffectPropItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineEffectPropItem.js +12 -5
- package/dist/components/Timeline/TimelineExpandedRow.d.ts +1 -0
- package/dist/components/Timeline/TimelineExpandedRow.js +5 -4
- package/dist/components/Timeline/TimelineExpandedSection.d.ts +1 -0
- package/dist/components/Timeline/TimelineExpandedSection.js +2 -2
- package/dist/components/Timeline/TimelineExpandedTrackKeyframes.d.ts +1 -0
- package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +3 -1
- package/dist/components/Timeline/TimelineFontFamilyField.js +12 -12
- package/dist/components/Timeline/TimelineKeyframeControls.d.ts +1 -0
- package/dist/components/Timeline/TimelineKeyframeControls.js +39 -28
- package/dist/components/Timeline/TimelineLayerChildren.js +1 -1
- package/dist/components/Timeline/TimelineList.js +1 -1
- package/dist/components/Timeline/TimelineNumberField.js +2 -4
- package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +1 -1
- package/dist/components/Timeline/TimelineSelection.d.ts +9 -9
- package/dist/components/Timeline/TimelineSelection.js +16 -9
- package/dist/components/Timeline/TimelineSequence.d.ts +3 -1
- package/dist/components/Timeline/TimelineSequence.js +39 -21
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequenceItem.js +18 -8
- package/dist/components/Timeline/TimelineSequencePropItem.d.ts +3 -0
- package/dist/components/Timeline/TimelineSequencePropItem.js +262 -25
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +11 -13
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +98 -77
- package/dist/components/Timeline/TimelineTextContentField.js +27 -4
- package/dist/components/Timeline/TimelineTimeIndicators.js +10 -5
- package/dist/components/Timeline/TimelineTrack.js +1 -1
- package/dist/components/Timeline/TimelineTrimTooltip.d.ts +11 -0
- package/dist/components/Timeline/TimelineTrimTooltip.js +41 -0
- package/dist/components/Timeline/TimelineVideoInfo.d.ts +1 -0
- package/dist/components/Timeline/TimelineVideoInfo.js +13 -10
- package/dist/components/Timeline/delete-selected-keyframe.js +22 -8
- package/dist/components/Timeline/delete-selected-timeline-item.d.ts +1 -5
- package/dist/components/Timeline/delete-selected-timeline-item.js +7 -93
- package/dist/components/Timeline/get-animation-item-selection-for-frame.d.ts +2 -1
- package/dist/components/Timeline/get-animation-item-selection-for-frame.js +7 -5
- package/dist/components/Timeline/get-keyframed-sequence-drag-targets.d.ts +23 -0
- package/dist/components/Timeline/get-keyframed-sequence-drag-targets.js +57 -0
- package/dist/components/Timeline/get-node-keyframes.d.ts +2 -1
- package/dist/components/Timeline/get-node-keyframes.js +6 -4
- package/dist/components/Timeline/get-playback-rate-keyframe-changes.d.ts +21 -0
- package/dist/components/Timeline/get-playback-rate-keyframe-changes.js +142 -0
- package/dist/components/Timeline/get-timeline-keyframes.d.ts +15 -2
- package/dist/components/Timeline/get-timeline-keyframes.js +44 -6
- package/dist/components/Timeline/keyframe-clipboard.js +17 -3
- package/dist/components/Timeline/split-selected-timeline-item.js +4 -1
- package/dist/components/Timeline/timeline-field-display-utils.js +1 -0
- package/dist/components/Timeline/timeline-field-row-layout.js +1 -0
- package/dist/components/Timeline/use-delete-timeline-items.js +17 -11
- package/dist/components/Timeline/use-expanded-track-keyframe-rows.d.ts +2 -1
- package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +3 -1
- package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +7 -3
- package/dist/components/Timeline/use-timeline-keyframe-drag.js +28 -19
- package/dist/components/Transcription/Models.js +1 -1
- package/dist/components/Transcription/TranscriptionModal.js +3 -1
- package/dist/components/Transcription/resample-media-to-16-khz.d.ts +2 -1
- package/dist/components/Transcription/resample-media-to-16-khz.js +20 -2
- package/dist/components/UpdatesSettings.js +2 -0
- package/dist/components/VideoMatting/Models.js +1 -1
- package/dist/components/VideoMatting/VideoMattingModal.js +30 -47
- package/dist/components/VideoMatting/VideoMattingModalWithOptionalPackage.js +1 -1
- package/dist/components/WebMcp.js +22 -40
- package/dist/components/composition-drop-preview.js +1 -0
- package/dist/components/effect-drag-and-drop.d.ts +13 -5
- package/dist/components/effect-drag-and-drop.js +19 -4
- package/dist/components/get-open-in-menu-items.d.ts +2 -1
- package/dist/components/get-open-in-menu-items.js +17 -1
- package/dist/components/selected-outline-drag.d.ts +1 -6
- package/dist/components/selected-outline-drag.js +22 -6
- package/dist/components/selected-outline-geometry.d.ts +2 -18
- package/dist/components/selected-outline-measurement.d.ts +23 -41
- package/dist/components/selected-outline-measurement.js +14 -252
- package/dist/components/selected-outline-order.d.ts +4 -11
- package/dist/components/selected-outline-order.js +2 -254
- package/dist/components/selected-outline-snap.d.ts +1 -1
- package/dist/components/selected-outline-snap.js +2 -1
- package/dist/components/selected-outline-types.d.ts +18 -28
- package/dist/components/selected-outline-uv.d.ts +4 -4
- package/dist/components/selected-outline-uv.js +6 -111
- package/dist/components/sequence-props-api.js +0 -10
- package/dist/components/use-selected-outline-control-target.js +12 -21
- package/dist/components/wrap-jsx-node-api.d.ts +2 -0
- package/dist/components/wrap-jsx-node-api.js +13 -0
- package/dist/error-overlay/remotion-overlay/OpenInEditor.js +45 -2
- package/dist/error-overlay/remotion-overlay/StackFrame.js +32 -3
- package/dist/esm/{CaptionQueueProcessor-npa6szn1.mjs → CaptionQueueProcessor-nr7hjcga.mjs} +63 -17
- package/dist/esm/LazyModels-ajkn7fs3.mjs +12 -0
- package/dist/esm/LazyModels-g1g7cf4e.mjs +12 -0
- package/dist/esm/{TranscriptionModal-79m5wgcj.mjs → TranscriptionModal-e18bzbkb.mjs} +15 -15
- package/dist/esm/{VideoMattingModal-31pew0xj.mjs → VideoMattingModal-5bz2s4rs.mjs} +47 -65
- package/dist/esm/{VideoMattingQueueProcessor-t1hgm2rm.mjs → VideoMattingQueueProcessor-4tkj0f4k.mjs} +69 -26
- package/dist/esm/{index-v4tr1bft.mjs → index-09txs1bj.mjs} +5 -0
- package/dist/esm/{index-n5gmcvhz.mjs → index-5ycb9e9q.mjs} +2 -4
- package/dist/esm/{index-5t2dwxsk.mjs → index-890dd9b3.mjs} +259 -21
- package/dist/esm/{index-ac5550e7.mjs → index-8nt6a0mw.mjs} +3 -3
- package/dist/esm/{index-614tdz2q.mjs → index-9q9w8v9p.mjs} +3 -3
- package/dist/esm/{index-s7qa3xbw.mjs → index-c2wabcdt.mjs} +6 -6
- package/dist/esm/{index-r1gr3j3a.mjs → index-dfy1t576.mjs} +50 -1
- package/dist/esm/{index-21hxsfaa.mjs → index-dh3zk2hv.mjs} +6 -25
- package/dist/esm/{index-4zen9prq.mjs → index-dpyss74p.mjs} +6563 -5485
- package/dist/esm/{index-9x6e1dq0.mjs → index-hqxc6tzp.mjs} +40 -6
- package/dist/esm/{index-9xxg6218.mjs → index-qve7mdfp.mjs} +19 -1
- package/dist/esm/{index-e855w59j.mjs → index-s6qya2gg.mjs} +3 -5
- package/dist/esm/index-t7tbt980.mjs +103 -0
- package/dist/esm/{index-r0ejh5sy.mjs → index-t7xnxdf8.mjs} +44 -26
- package/dist/esm/index-wqc43mw0.mjs +158 -0
- package/dist/esm/{index-ppspzgn9.mjs → index-x6r9bn12.mjs} +4026 -4761
- package/dist/esm/{index-vxwg66ar.mjs → index-xac20sv4.mjs} +44 -57
- package/dist/esm/index.mjs +4 -5
- package/dist/esm/internals.mjs +13 -13
- package/dist/esm/previewEntry.mjs +18 -15
- package/dist/esm/renderEntry.mjs +5 -1
- package/dist/helpers/calculate-timeline.d.ts +5 -1
- package/dist/helpers/calculate-timeline.js +1 -1
- package/dist/helpers/checkerboard-background.d.ts +2 -2
- package/dist/helpers/colors.d.ts +132 -112
- package/dist/helpers/colors.js +117 -95
- package/dist/helpers/create-folder-tree.js +2 -1
- package/dist/helpers/editor-guide-selection.d.ts +1 -1
- package/dist/helpers/editor-ruler.js +23 -12
- package/dist/helpers/get-connected-compositions.d.ts +6 -1
- package/dist/helpers/get-connected-compositions.js +1 -1
- package/dist/helpers/get-sequence-double-click-action.js +1 -1
- package/dist/helpers/get-sequence-visible-range.d.ts +1 -1
- package/dist/helpers/get-sequence-visible-range.js +2 -5
- package/dist/helpers/get-timeline-nestedness.d.ts +1 -1
- package/dist/helpers/get-timeline-nestedness.js +1 -1
- package/dist/helpers/get-timeline-sequence-sort-key.d.ts +1 -1
- package/dist/helpers/get-timeline-sequence-sort-key.js +1 -1
- package/dist/helpers/hoverable.js +4 -4
- package/dist/helpers/inject-css.js +5 -7
- package/dist/helpers/prism-vsc-dark-plus.d.ts +1 -1
- package/dist/helpers/prism-vsc-dark-plus.js +52 -51
- package/dist/helpers/resolve-studio-color.d.ts +1 -0
- package/dist/helpers/resolve-studio-color.js +11 -0
- package/dist/helpers/studio-css-variables.d.ts +1 -0
- package/dist/helpers/studio-css-variables.js +105 -0
- package/dist/helpers/studio-pixel-ratio.d.ts +1 -0
- package/dist/helpers/studio-pixel-ratio.js +7 -0
- package/dist/helpers/timeline-node-path-key.d.ts +1 -1
- package/dist/helpers/timeline-node-path-key.js +2 -2
- package/dist/helpers/use-runtime-values.js +2 -28
- package/dist/hot-middleware-client/client.js +5 -3
- package/dist/icons/align-center-horizontal.js +2 -1
- package/dist/icons/align-left.js +2 -1
- package/dist/icons/align-right.js +2 -1
- package/dist/icons/{separation.d.ts → background-removal.d.ts} +1 -1
- package/dist/icons/background-removal.js +9 -0
- package/dist/icons/wrap.d.ts +4 -0
- package/dist/icons/wrap.js +10 -0
- package/dist/previewEntry.js +2 -0
- package/dist/renderEntry.js +2 -0
- package/dist/state/modals.d.ts +15 -1
- package/dist/state/timeline-sequence-hover.d.ts +6 -16
- package/dist/state/timeline-sequence-hover.js +6 -67
- package/package.json +20 -19
- package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.d.ts +0 -15
- package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.js +0 -31
- package/dist/esm/LazyModels-nh3c8h9p.mjs +0 -12
- package/dist/esm/LazyModels-rr5v8h5y.mjs +0 -12
- package/dist/esm/index-cw0pnpg5.mjs +0 -50
- package/dist/esm/index-k426ye99.mjs +0 -139
- package/dist/helpers/get-box-quads-polyfill-internals.d.ts +0 -82
- package/dist/helpers/get-box-quads-polyfill-internals.js +0 -2403
- package/dist/helpers/get-box-quads-ponyfill.d.ts +0 -10
- package/dist/helpers/get-box-quads-ponyfill.js +0 -23
- package/dist/icons/separation.js +0 -7
- /package/dist/esm/{resolve-composition-component-location-qrp05g62.mjs → resolve-composition-component-location-2hgf6g0a.mjs} +0 -0
|
@@ -27,6 +27,7 @@ const timeline_refs_1 = require("./timeline-refs");
|
|
|
27
27
|
const timeline_scroll_logic_1 = require("./timeline-scroll-logic");
|
|
28
28
|
const TimelineClipboardKeybindings_1 = require("./TimelineClipboardKeybindings");
|
|
29
29
|
const TimelineDeleteKeybindings_1 = require("./TimelineDeleteKeybindings");
|
|
30
|
+
const { EMPTY_CANVAS_SELECTION, getCanvasSelectionAfterInteraction, getCanvasSequenceSelectionKey, useCanvasSelectionController, } = canvas_1.CanvasInternals;
|
|
30
31
|
exports.TIMELINE_SELECTED_BACKGROUND = colors_1.TIMELINE_SELECTED_BACKGROUND_COLOR;
|
|
31
32
|
exports.TIMELINE_EXPANDED_SELECTED_BACKGROUND = colors_1.BACKGROUND;
|
|
32
33
|
exports.TIMELINE_HOVER_BACKGROUND = colors_1.WHITE_ALPHA_05;
|
|
@@ -81,8 +82,8 @@ const shouldSelectTimelineRowOnPointerDown = ({ selected, shiftKey, metaKey, ctr
|
|
|
81
82
|
return (!selected || (0, exports.isTimelineSelectionModifierEvent)({ shiftKey, metaKey, ctrlKey }));
|
|
82
83
|
};
|
|
83
84
|
exports.shouldSelectTimelineRowOnPointerDown = shouldSelectTimelineRowOnPointerDown;
|
|
84
|
-
exports.EMPTY_TIMELINE_SELECTION_STATE =
|
|
85
|
-
exports.getTimelineSelectionAfterInteraction =
|
|
85
|
+
exports.EMPTY_TIMELINE_SELECTION_STATE = EMPTY_CANVAS_SELECTION;
|
|
86
|
+
exports.getTimelineSelectionAfterInteraction = getCanvasSelectionAfterInteraction;
|
|
86
87
|
const getAvailableTimelineSelectionState = ({ availableKeys, availableItemsByKey, state, }) => {
|
|
87
88
|
if (state.selectedItems.length === 0 && state.anchor === null) {
|
|
88
89
|
return state;
|
|
@@ -292,6 +293,11 @@ const nodePathDescendsFrom = (descendant, ancestor) => {
|
|
|
292
293
|
}
|
|
293
294
|
return ancestor.auxiliaryKeys.every((key, i) => descendant.auxiliaryKeys[i] === key);
|
|
294
295
|
};
|
|
296
|
+
const timelineRowContainsSelection = (nodePathInfo, selection) => selection.type !== 'guide' &&
|
|
297
|
+
(nodePathDescendsFrom(selection.nodePathInfo, nodePathInfo) ||
|
|
298
|
+
((selection.type === 'keyframe' || selection.type === 'easing') &&
|
|
299
|
+
(0, timeline_node_path_key_1.timelineNodePathInfoToKey)(selection.nodePathInfo) ===
|
|
300
|
+
(0, timeline_node_path_key_1.timelineNodePathInfoToKey)(nodePathInfo)));
|
|
295
301
|
const getSelectableTimelineSequenceSelections = (tracks) => {
|
|
296
302
|
return tracks.flatMap((track) => {
|
|
297
303
|
if (track.nodePathInfo === null ||
|
|
@@ -377,6 +383,7 @@ const getSelectableTimelineItems = ({ getDragOverrides, getEffectDragOverrides,
|
|
|
377
383
|
nodePath: nodePathInfo.sequenceSubscriptionKey,
|
|
378
384
|
propStatuses,
|
|
379
385
|
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
386
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
380
387
|
getDragOverrides,
|
|
381
388
|
getEffectDragOverrides,
|
|
382
389
|
timelinePosition,
|
|
@@ -405,7 +412,7 @@ const getSelectableTimelineItems = ({ getDragOverrides, getEffectDragOverrides,
|
|
|
405
412
|
});
|
|
406
413
|
};
|
|
407
414
|
exports.getSelectableTimelineItems = getSelectableTimelineItems;
|
|
408
|
-
exports.getTimelineSequenceSelectionKey =
|
|
415
|
+
exports.getTimelineSequenceSelectionKey = getCanvasSequenceSelectionKey;
|
|
409
416
|
const TimelineSelectAllKeybindings = ({ timeline }) => {
|
|
410
417
|
const keybindings = (0, use_keybinding_1.useKeybinding)();
|
|
411
418
|
const { canSelect } = (0, exports.useTimelineSelection)();
|
|
@@ -539,7 +546,8 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
539
546
|
(previewServerState.type === 'connected' ||
|
|
540
547
|
window.remotion_isReadOnlyStudio);
|
|
541
548
|
const keyframeOperationsAvailable = (0, browser_studio_operations_1.canUseKeyframeOperations)();
|
|
542
|
-
const
|
|
549
|
+
const effectOperationsAvailable = (0, browser_studio_operations_1.canUseEffectOperations)();
|
|
550
|
+
const selectionController = useCanvasSelectionController();
|
|
543
551
|
const selectionState = (0, canvas_1.useCanvasSelection)(selectionController);
|
|
544
552
|
const selectionScope = (0, react_1.useRef)(null);
|
|
545
553
|
const marqueeSelectableItems = (0, react_1.useRef)(new Map());
|
|
@@ -558,7 +566,8 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
558
566
|
const canSelectItem = (0, react_1.useCallback)((item) => canSelect &&
|
|
559
567
|
(!window.remotion_isReadOnlyStudio ||
|
|
560
568
|
keyframeOperationsAvailable ||
|
|
561
|
-
item.type === 'sequence')
|
|
569
|
+
(effectOperationsAvailable && item.type === 'sequence-effect') ||
|
|
570
|
+
item.type === 'sequence'), [canSelect, effectOperationsAvailable, keyframeOperationsAvailable]);
|
|
562
571
|
const availableSelectionState = selectionScope.current === timelineSelectionScope
|
|
563
572
|
? selectionState
|
|
564
573
|
: exports.EMPTY_TIMELINE_SELECTION_STATE;
|
|
@@ -713,8 +722,7 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
713
722
|
selectionController.clear();
|
|
714
723
|
}, [selectionController]);
|
|
715
724
|
const containsSelection = (0, react_1.useCallback)((nodePathInfo) => {
|
|
716
|
-
return availableSelectedItems.some((selected) => selected
|
|
717
|
-
nodePathDescendsFrom(selected.nodePathInfo, nodePathInfo));
|
|
725
|
+
return availableSelectedItems.some((selected) => timelineRowContainsSelection(nodePathInfo, selected));
|
|
718
726
|
}, [availableSelectedItems]);
|
|
719
727
|
const remapSelectionNodePaths = (0, react_1.useCallback)((mutations) => {
|
|
720
728
|
const remapItem = (item) => {
|
|
@@ -1111,8 +1119,7 @@ const useTimelineRowContainsSelection = (nodePathInfo) => {
|
|
|
1111
1119
|
}
|
|
1112
1120
|
return selectionContext
|
|
1113
1121
|
.getSnapshot()
|
|
1114
|
-
.selectedItems.some((selected) => selected
|
|
1115
|
-
nodePathDescendsFrom(selected.nodePathInfo, nodePathInfo));
|
|
1122
|
+
.selectedItems.some((selected) => timelineRowContainsSelection(nodePathInfo, selected));
|
|
1116
1123
|
}, [nodePathInfo, selectionContext]);
|
|
1117
1124
|
return (0, use_sync_external_store_1.useSyncExternalStore)(selectionContext.subscribe, getContainsSelection, getContainsSelection);
|
|
1118
1125
|
};
|
|
@@ -2,7 +2,9 @@ import React from 'react';
|
|
|
2
2
|
import type { TSequence } from 'remotion';
|
|
3
3
|
import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
|
|
4
4
|
export declare const TimelineSequence: React.NamedExoticComponent<{
|
|
5
|
-
readonly s: TSequence
|
|
5
|
+
readonly s: TSequence & {
|
|
6
|
+
loopDisplay: import("@remotion/canvas").TimelineLoopDisplay | undefined;
|
|
7
|
+
};
|
|
6
8
|
readonly connectedCompositions: readonly import("remotion").AnyComposition[];
|
|
7
9
|
readonly nodePathInfo: SequenceNodePathInfo | null;
|
|
8
10
|
readonly sequenceFrameOffset: number;
|
|
@@ -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,
|
|
@@ -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
|
|
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 * ((
|
|
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 = (
|
|
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
|
-
((
|
|
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
|
-
((
|
|
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
|
-
((
|
|
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 = ((
|
|
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: (
|
|
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
|
-
((
|
|
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
|
-
?
|
|
646
|
-
|
|
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
|
-
((
|
|
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 = ((
|
|
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: (
|
|
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, {
|
|
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;
|
|
@@ -173,7 +173,7 @@ const getSequencePointerDropTargetAtPoint = ({ clientX, clientY, }) => {
|
|
|
173
173
|
return null;
|
|
174
174
|
};
|
|
175
175
|
const SEQUENCE_REORDER_POINTER_THRESHOLD = 3;
|
|
176
|
-
const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions, nestedDepth, sequence, nodePathInfo, keyframeDisplayOffset, sequenceFrameOffset, siblingIndex, numberOfHiddenDuplicates, showProvisionalVisibilityToggle, }) => {
|
|
176
|
+
const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions, nestedDepth, sequence, nodePathInfo, keyframeDisplayOffset, keyframePlaybackRate, sequenceFrameOffset, siblingIndex, numberOfHiddenDuplicates, showProvisionalVisibilityToggle, }) => {
|
|
177
177
|
var _a, _b;
|
|
178
178
|
var _c, _d, _e;
|
|
179
179
|
const nodePath = (_c = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.sequenceSubscriptionKey) !== null && _c !== void 0 ? _c : null;
|
|
@@ -195,6 +195,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
195
195
|
const selectComposition = (0, InitialCompositionLoader_1.useSelectComposition)();
|
|
196
196
|
const deleteTimelineItems = (0, use_delete_timeline_items_1.useDeleteTimelineItems)();
|
|
197
197
|
const { onSelect, selectable, selected, selectedItems, selectItem } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
|
|
198
|
+
const { selectItems } = (0, TimelineSelection_1.useTimelineSelection)();
|
|
198
199
|
const selectedSequenceNodePathInfos = (0, react_1.useMemo)(() => {
|
|
199
200
|
if (!selected ||
|
|
200
201
|
selectedItems.length < 2 ||
|
|
@@ -775,7 +776,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
775
776
|
const onAddEffect = (0, react_1.useCallback)(() => {
|
|
776
777
|
if (!canAddEffect ||
|
|
777
778
|
previewServerState.type !== 'connected' ||
|
|
778
|
-
|
|
779
|
+
nodePathInfo === null ||
|
|
779
780
|
!(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) {
|
|
780
781
|
return;
|
|
781
782
|
}
|
|
@@ -783,13 +784,15 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
783
784
|
type: 'add-effect',
|
|
784
785
|
clientId: previewServerState.clientId,
|
|
785
786
|
fileName: validatedLocation.source,
|
|
786
|
-
|
|
787
|
+
nodePathInfo,
|
|
788
|
+
selectItems,
|
|
787
789
|
});
|
|
788
790
|
}, [
|
|
789
791
|
canAddEffect,
|
|
790
|
-
|
|
792
|
+
nodePathInfo,
|
|
791
793
|
previewServerState,
|
|
792
794
|
setSelectedModal,
|
|
795
|
+
selectItems,
|
|
793
796
|
validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
|
|
794
797
|
]);
|
|
795
798
|
const onCrop = (0, react_1.useCallback)(() => {
|
|
@@ -1041,7 +1044,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
1041
1044
|
const onEffectDrop = (0, react_1.useCallback)(async (e) => {
|
|
1042
1045
|
if (!canDropEffect ||
|
|
1043
1046
|
previewServerState.type !== 'connected' ||
|
|
1044
|
-
|
|
1047
|
+
nodePathInfo === null ||
|
|
1045
1048
|
validatedLocation === null ||
|
|
1046
1049
|
!(0, effect_drag_and_drop_1.hasEffectDragType)(e.dataTransfer)) {
|
|
1047
1050
|
return;
|
|
@@ -1062,10 +1065,17 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
1062
1065
|
await (0, effect_drag_and_drop_1.addEffectFromDragData)({
|
|
1063
1066
|
dragData,
|
|
1064
1067
|
fileName: validatedLocation.source,
|
|
1065
|
-
|
|
1068
|
+
nodePathInfo,
|
|
1066
1069
|
clientId: previewServerState.clientId,
|
|
1070
|
+
selectItems,
|
|
1067
1071
|
});
|
|
1068
|
-
}, [
|
|
1072
|
+
}, [
|
|
1073
|
+
canDropEffect,
|
|
1074
|
+
nodePathInfo,
|
|
1075
|
+
previewServerState,
|
|
1076
|
+
selectItems,
|
|
1077
|
+
validatedLocation,
|
|
1078
|
+
]);
|
|
1069
1079
|
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
1080
|
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
1081
|
] })) : 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: [
|
|
@@ -1086,6 +1096,6 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
1086
1096
|
isExpanded &&
|
|
1087
1097
|
hasExpandableContent &&
|
|
1088
1098
|
nodePathInfo &&
|
|
1089
|
-
validatedLocation ? (jsx_runtime_1.jsx(TimelineExpandedSection_1.TimelineExpandedSection, { sequence: sequence, validatedLocation: validatedLocation, nodePathInfo: nodePathInfo, nestedDepth: nestedDepth, keyframeDisplayOffset: keyframeDisplayOffset })) : null] }));
|
|
1099
|
+
validatedLocation ? (jsx_runtime_1.jsx(TimelineExpandedSection_1.TimelineExpandedSection, { sequence: sequence, validatedLocation: validatedLocation, nodePathInfo: nodePathInfo, nestedDepth: nestedDepth, keyframeDisplayOffset: keyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate })) : null] }));
|
|
1090
1100
|
};
|
|
1091
1101
|
exports.TimelineSequenceItem = react_1.default.memo(TimelineSequenceItemInner);
|
|
@@ -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
|
}>;
|