@remotion/studio 4.0.526 → 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/Canvas.js +88 -26
- package/dist/components/CanvasCaptureDropHandler.js +63 -0
- package/dist/components/CanvasOrLoading.js +10 -2
- package/dist/components/CodeFrame.js +1 -1
- package/dist/components/ColorPicker/checker.d.ts +1 -1
- package/dist/components/CompositionSelectorItem.js +1 -0
- package/dist/components/CurrentAsset.js +4 -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 +4 -2
- package/dist/components/InlineDropdown.js +26 -2
- package/dist/components/InlineEditableTitle.js +1 -0
- package/dist/components/InspectorOpenInEditor.js +13 -0
- package/dist/components/InspectorPanel/AlignmentControls.js +28 -9
- package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +2 -1
- package/dist/components/InspectorPanel/CompositionInspector.js +3 -3
- package/dist/components/InspectorPanel/CompositionMetadata.js +4 -0
- package/dist/components/InspectorPanel/EasingInspector.js +6 -2
- package/dist/components/InspectorPanel/ElementLibraryButton.js +2 -1
- package/dist/components/InspectorPanel/KeyframeEasingNavigator.js +1 -1
- package/dist/components/InspectorPanel/KeyframeInspector.js +28 -24
- package/dist/components/InspectorPanel/MultiSequenceInspector.js +32 -1
- package/dist/components/InspectorPanel/MultiSequenceNumberField.js +1 -1
- package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -1
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +70 -2
- package/dist/components/InspectorPanel/SequenceWrapAction.d.ts +8 -0
- package/dist/components/InspectorPanel/SequenceWrapAction.js +151 -0
- package/dist/components/InspectorPanel/common.js +1 -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/InspectorPanel/styles.js +2 -0
- package/dist/components/InspectorPanel/use-composition-actions.js +1 -0
- package/dist/components/InspectorSequenceSection.d.ts +1 -0
- package/dist/components/InspectorSequenceSection.js +7 -5
- package/dist/components/InspectorSourceLocation.js +3 -0
- package/dist/components/KeyboardShortcutsSettings.js +1 -1
- package/dist/components/Menu/styles.d.ts +2 -2
- package/dist/components/MenuBuildIndicator.js +1 -0
- package/dist/components/Modals.js +7 -6
- package/dist/components/ModelManager.js +10 -9
- package/dist/components/NewComposition/CancelButton.js +11 -5
- 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 +4 -0
- package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -0
- package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -0
- package/dist/components/RadioButton.js +1 -0
- package/dist/components/RenderModal/DataEditor.js +4 -1
- 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 +19 -7
- package/dist/components/RenderQueue/CaptionQueueProcessor.js +65 -15
- 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 +25 -27
- package/dist/components/RenderQueue/VideoMattingQueueProcessor.js +68 -28
- package/dist/components/RenderQueue/caption-job-types.d.ts +9 -1
- package/dist/components/RenderQueue/context.d.ts +4 -0
- package/dist/components/RenderQueue/context.js +58 -8
- package/dist/components/RenderQueue/index.js +3 -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/RendersTab.js +2 -0
- 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/SelectedOutlineSnapIndicators.d.ts +6 -0
- package/dist/components/SelectedOutlineSnapIndicators.js +16 -12
- package/dist/components/SelectedOutlineTransformOriginHandle.js +3 -2
- package/dist/components/SelectedOutlineUvControls.js +12 -7
- package/dist/components/SequencePropsSubscriptionProvider.d.ts +3 -0
- package/dist/components/SequencePropsSubscriptionProvider.js +8 -6
- 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/TimelineDeleteKeybindings.js +6 -9
- package/dist/components/Timeline/TimelineDragHandler.js +1 -1
- package/dist/components/Timeline/TimelineEffectItem.js +1 -0
- package/dist/components/Timeline/TimelineEffectPropItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineEffectPropItem.js +12 -5
- package/dist/components/Timeline/TimelineExpandArrowButton.js +1 -0
- package/dist/components/Timeline/TimelineExpandedRow.d.ts +1 -0
- package/dist/components/Timeline/TimelineExpandedRow.js +6 -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/TimelineFieldLabel.js +1 -0
- package/dist/components/Timeline/TimelineFontFamilyField.js +12 -12
- package/dist/components/Timeline/TimelineKeyframeControls.d.ts +1 -0
- package/dist/components/Timeline/TimelineKeyframeControls.js +40 -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 +65 -21
- package/dist/components/Timeline/TimelineSequenceFrame.js +1 -0
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequenceItem.js +46 -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/TimelineViewport.d.ts +1 -0
- package/dist/components/Timeline/TimelineViewport.js +10 -1
- 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 +9 -95
- 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-sequence-context-menu-items.d.ts +3 -1
- package/dist/components/Timeline/get-sequence-context-menu-items.js +13 -1
- 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.d.ts +13 -10
- package/dist/components/Timeline/split-selected-timeline-item.js +61 -35
- 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/TimelineCombobox.js +1 -0
- package/dist/components/Transcription/Models.js +1 -1
- package/dist/components/Transcription/TranscriptionModal.js +18 -11
- package/dist/components/Transcription/TranscriptionModalWithOptionalWhisper.js +1 -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 +23 -40
- package/dist/components/composition-drop-preview.d.ts +9 -2
- package/dist/components/composition-drop-preview.js +8 -4
- package/dist/components/composition-menu-items.js +4 -4
- package/dist/components/delete-jsx-nodes-api.d.ts +2 -0
- package/dist/components/{delete-jsx-node-api.js → delete-jsx-nodes-api.js} +5 -5
- 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 +24 -8
- package/dist/components/keyboard-shortcuts.d.ts +4 -4
- package/dist/components/keyboard-shortcuts.js +3 -1
- package/dist/components/public-output-name.d.ts +1 -0
- package/dist/components/public-output-name.js +7 -3
- 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-k0yrm3dj.mjs → CaptionQueueProcessor-nr7hjcga.mjs} +96 -19
- package/dist/esm/LazyModels-ajkn7fs3.mjs +12 -0
- package/dist/esm/LazyModels-g1g7cf4e.mjs +12 -0
- package/dist/esm/{TranscriptionModal-ymnx1c7m.mjs → TranscriptionModal-e18bzbkb.mjs} +30 -22
- package/dist/esm/{VideoMattingModal-05vpczks.mjs → VideoMattingModal-5bz2s4rs.mjs} +47 -62
- 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-4dsz9035.mjs → index-5ycb9e9q.mjs} +2 -4
- package/dist/esm/index-890dd9b3.mjs +768 -0
- package/dist/esm/{index-5bfxbpca.mjs → index-8nt6a0mw.mjs} +3 -3
- package/dist/esm/{index-5gd8k9yv.mjs → index-9q9w8v9p.mjs} +3 -3
- package/dist/esm/{index-x40wwfmt.mjs → index-c2wabcdt.mjs} +8 -6
- package/dist/esm/index-dfy1t576.mjs +129 -0
- package/dist/esm/index-dh3zk2hv.mjs +220 -0
- package/dist/esm/{index-0gewwxse.mjs → index-dpyss74p.mjs} +6179 -5011
- package/dist/esm/{index-9x6e1dq0.mjs → index-hqxc6tzp.mjs} +40 -6
- package/dist/esm/{index-cdy8v54v.mjs → index-qve7mdfp.mjs} +36 -539
- package/dist/esm/{index-eb5txqp6.mjs → index-s6qya2gg.mjs} +8 -88
- package/dist/esm/index-t7tbt980.mjs +103 -0
- package/dist/esm/{index-g7k2dvar.mjs → index-t7xnxdf8.mjs} +44 -26
- package/dist/esm/index-wqc43mw0.mjs +158 -0
- package/dist/esm/{index-bs39wngg.mjs → index-x6r9bn12.mjs} +5623 -6218
- package/dist/esm/{index-f97r9e2g.mjs → index-xac20sv4.mjs} +46 -57
- package/dist/esm/index.mjs +4 -4
- package/dist/esm/internals.mjs +13 -10
- package/dist/esm/previewEntry.mjs +18 -12
- package/dist/esm/renderEntry.mjs +5 -1
- package/dist/esm/{resolve-composition-component-location-bt2d6qxq.mjs → resolve-composition-component-location-2hgf6g0a.mjs} +1 -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/copy-text.js +1 -16
- 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 +6 -5
- package/dist/helpers/inject-css.js +5 -7
- package/dist/helpers/open-in-editor.js +1 -1
- 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/studio-runtime-config.d.ts +1 -1
- 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-keybinding.d.ts +1 -1
- package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -2
- package/dist/helpers/use-menu-structure.js +15 -9
- 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 +20 -1
- package/dist/state/timeline-sequence-hover.d.ts +6 -16
- package/dist/state/timeline-sequence-hover.js +6 -67
- package/dist/state/timeline-zoom.js +4 -0
- 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/components/delete-jsx-node-api.d.ts +0 -2
- package/dist/esm/LazyModels-mtggyjye.mjs +0 -11
- package/dist/esm/LazyModels-nk7py0zt.mjs +0 -11
- 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
|
@@ -13,7 +13,6 @@ const timeline_node_path_key_1 = require("../../helpers/timeline-node-path-key")
|
|
|
13
13
|
const ExpandedTracksProvider_1 = require("../ExpandedTracksProvider");
|
|
14
14
|
const call_add_keyframe_1 = require("./call-add-keyframe");
|
|
15
15
|
const call_delete_keyframe_1 = require("./call-delete-keyframe");
|
|
16
|
-
const get_easing_selection_after_keyframe_delete_1 = require("./get-easing-selection-after-keyframe-delete");
|
|
17
16
|
const get_keyframe_navigation_1 = require("./get-keyframe-navigation");
|
|
18
17
|
const get_timeline_keyframes_1 = require("./get-timeline-keyframes");
|
|
19
18
|
const normalize_font_weight_for_keyframe_1 = require("./normalize-font-weight-for-keyframe");
|
|
@@ -21,7 +20,6 @@ const timeline_scroll_logic_1 = require("./timeline-scroll-logic");
|
|
|
21
20
|
const TimelineKeyframeDiamondIcon_1 = require("./TimelineKeyframeDiamondIcon");
|
|
22
21
|
const TimelineKeyframeTracksContext_1 = require("./TimelineKeyframeTracksContext");
|
|
23
22
|
const TimelineSelection_1 = require("./TimelineSelection");
|
|
24
|
-
const update_selected_easing_1 = require("./update-selected-easing");
|
|
25
23
|
const NAV_BUTTON_SIZE = 14;
|
|
26
24
|
const INSPECTOR_NAV_BUTTON_WIDTH = NAV_BUTTON_SIZE / 2;
|
|
27
25
|
const INSPECTOR_PREVIOUS_BUTTON_EXTRA_GAP = 1;
|
|
@@ -52,6 +50,7 @@ const navButtonStyle = {
|
|
|
52
50
|
outline: 'none',
|
|
53
51
|
padding: 0,
|
|
54
52
|
userSelect: 'none',
|
|
53
|
+
WebkitUserSelect: 'none',
|
|
55
54
|
width: NAV_BUTTON_SIZE,
|
|
56
55
|
};
|
|
57
56
|
const inspectorNavButtonStyle = {
|
|
@@ -154,15 +153,22 @@ const resolveKeyframeControlTarget = ({ nodePathInfo, tracks, propStatuses, getD
|
|
|
154
153
|
propStatus: sequenceSelectedPropStatus,
|
|
155
154
|
nodePath,
|
|
156
155
|
fileName: nodePath.absolutePath,
|
|
156
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
157
157
|
keyframeDisplayOffset: (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
158
158
|
propStatus: sequenceSelectedPropStatus,
|
|
159
159
|
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
160
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
160
161
|
}),
|
|
161
|
-
sourceFrame:
|
|
162
|
-
|
|
162
|
+
sourceFrame: (0, get_timeline_keyframes_1.getKeyframeSourceFrame)({
|
|
163
|
+
displayFrame: timelinePosition,
|
|
164
|
+
propStatus: sequenceSelectedPropStatus,
|
|
165
|
+
keyframeDisplayOffset: (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
163
166
|
propStatus: sequenceSelectedPropStatus,
|
|
164
167
|
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
168
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
165
169
|
}),
|
|
170
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
171
|
+
}),
|
|
166
172
|
defaultValue: fieldNode.field.fieldSchema.default,
|
|
167
173
|
dragOverrideValue: ((_c = getDragOverrides(nodePath)) !== null && _c !== void 0 ? _c : {})[fieldNode.field.key],
|
|
168
174
|
schema: track.sequence.controls.schema,
|
|
@@ -186,15 +192,22 @@ const resolveKeyframeControlTarget = ({ nodePathInfo, tracks, propStatuses, getD
|
|
|
186
192
|
propStatus: effectSelectedPropStatus,
|
|
187
193
|
nodePath,
|
|
188
194
|
fileName: nodePath.absolutePath,
|
|
195
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
189
196
|
keyframeDisplayOffset: (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
190
197
|
propStatus: effectSelectedPropStatus,
|
|
191
198
|
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
199
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
192
200
|
}),
|
|
193
|
-
sourceFrame:
|
|
194
|
-
|
|
201
|
+
sourceFrame: (0, get_timeline_keyframes_1.getKeyframeSourceFrame)({
|
|
202
|
+
displayFrame: timelinePosition,
|
|
203
|
+
propStatus: effectSelectedPropStatus,
|
|
204
|
+
keyframeDisplayOffset: (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
195
205
|
propStatus: effectSelectedPropStatus,
|
|
196
206
|
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
207
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
197
208
|
}),
|
|
209
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
210
|
+
}),
|
|
198
211
|
defaultValue: fieldNode.field.fieldSchema.default,
|
|
199
212
|
dragOverrideValue: getEffectDragOverrides(nodePath, fieldNode.field.effectIndex)[fieldNode.field.key],
|
|
200
213
|
schema: fieldNode.field.effectSchema,
|
|
@@ -314,10 +327,10 @@ const shouldShowTimelineKeyframeNavigation = ({ propStatus, selected, }) => {
|
|
|
314
327
|
return isKeyframedStatus(propStatus);
|
|
315
328
|
};
|
|
316
329
|
exports.shouldShowTimelineKeyframeNavigation = shouldShowTimelineKeyframeNavigation;
|
|
317
|
-
const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, keyframeDisplayOffset, defaultValue, dragOverrideValue, schema, effectIndex, nodePathInfo, mode = 'timeline', }) => {
|
|
330
|
+
const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, keyframeDisplayOffset, keyframePlaybackRate, defaultValue, dragOverrideValue, schema, effectIndex, nodePathInfo, mode = 'timeline', }) => {
|
|
318
331
|
const videoConfig = (0, remotion_1.useVideoConfig)();
|
|
319
332
|
const timelinePosition = remotion_1.Internals.Timeline.useTimelinePosition();
|
|
320
|
-
const setFrame = remotion_1.Internals.
|
|
333
|
+
const setFrame = remotion_1.Internals.Timeline.useTimelineSeekFrame();
|
|
321
334
|
const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
322
335
|
const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
|
|
323
336
|
const { getDragOverrides, getEffectDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
@@ -331,9 +344,15 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
331
344
|
const resolvedKeyframeDisplayOffset = (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
332
345
|
propStatus,
|
|
333
346
|
keyframeDisplayOffset,
|
|
347
|
+
keyframePlaybackRate,
|
|
334
348
|
});
|
|
335
|
-
const jsxFrame =
|
|
336
|
-
|
|
349
|
+
const jsxFrame = (0, get_timeline_keyframes_1.getKeyframeSourceFrame)({
|
|
350
|
+
displayFrame: timelinePosition,
|
|
351
|
+
keyframeDisplayOffset: resolvedKeyframeDisplayOffset,
|
|
352
|
+
keyframePlaybackRate,
|
|
353
|
+
propStatus,
|
|
354
|
+
});
|
|
355
|
+
const keyframes = (0, react_1.useMemo)(() => (0, get_timeline_keyframes_1.getTimelineKeyframes)(propStatus, keyframeDisplayOffset, keyframePlaybackRate), [propStatus, keyframeDisplayOffset, keyframePlaybackRate]);
|
|
337
356
|
const hasKeyframeAtCurrentFrame = (0, react_1.useMemo)(() => {
|
|
338
357
|
if (!isKeyframedStatus(propStatus)) {
|
|
339
358
|
return false;
|
|
@@ -373,6 +392,7 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
373
392
|
nodePath,
|
|
374
393
|
fileName,
|
|
375
394
|
keyframeDisplayOffset: resolvedKeyframeDisplayOffset,
|
|
395
|
+
keyframePlaybackRate,
|
|
376
396
|
sourceFrame: jsxFrame,
|
|
377
397
|
defaultValue,
|
|
378
398
|
dragOverrideValue,
|
|
@@ -386,6 +406,7 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
386
406
|
fileName,
|
|
387
407
|
jsxFrame,
|
|
388
408
|
resolvedKeyframeDisplayOffset,
|
|
409
|
+
keyframePlaybackRate,
|
|
389
410
|
nodePath,
|
|
390
411
|
nodePathInfo,
|
|
391
412
|
propStatus,
|
|
@@ -452,19 +473,13 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
452
473
|
const change = getDeleteChange(target);
|
|
453
474
|
return change === null ? [] : [{ target, change }];
|
|
454
475
|
});
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
(0,
|
|
460
|
-
?
|
|
461
|
-
|
|
462
|
-
keyframeDisplayOffset: singleDeleteTarget.target.keyframeDisplayOffset,
|
|
463
|
-
nodePathInfo: singleDeleteTarget.target.nodePathInfo,
|
|
464
|
-
propStatus: singleDeleteTarget.target.propStatus,
|
|
465
|
-
timelinePosition,
|
|
466
|
-
})
|
|
467
|
-
: null;
|
|
476
|
+
if (deleteTargets.length === 0) {
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
selectItems(deleteTargets.flatMap(({ target }) => {
|
|
480
|
+
const propertySelection = (0, TimelineSelection_1.getTimelineSelectionFromNodePathInfo)(target.nodePathInfo);
|
|
481
|
+
return propertySelection === null ? [] : [propertySelection];
|
|
482
|
+
}), { reveal: true });
|
|
468
483
|
const deleteChanges = deleteTargets.map(({ change }) => change);
|
|
469
484
|
await (0, call_delete_keyframe_1.callDeleteKeyframes)({
|
|
470
485
|
sequenceKeyframes: deleteChanges.filter((change) => !hasEffectIndex(change)),
|
|
@@ -472,9 +487,6 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
472
487
|
setPropStatuses,
|
|
473
488
|
clientId,
|
|
474
489
|
});
|
|
475
|
-
if (mode === 'timeline' && easingSelection !== null) {
|
|
476
|
-
selectItems([easingSelection], { reveal: true });
|
|
477
|
-
}
|
|
478
490
|
return;
|
|
479
491
|
}
|
|
480
492
|
const addChanges = keyframeToggleTargets.flatMap((target) => {
|
|
@@ -498,7 +510,8 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
498
510
|
selectItems(addChanges.map(({ target }) => ({
|
|
499
511
|
type: 'keyframe',
|
|
500
512
|
nodePathInfo: target.nodePathInfo,
|
|
501
|
-
frame: target.sourceFrame
|
|
513
|
+
frame: target.sourceFrame / target.keyframePlaybackRate +
|
|
514
|
+
target.keyframeDisplayOffset,
|
|
502
515
|
})), { reveal: true });
|
|
503
516
|
}
|
|
504
517
|
}, [
|
|
@@ -510,7 +523,6 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
510
523
|
mode,
|
|
511
524
|
selectItems,
|
|
512
525
|
setPropStatuses,
|
|
513
|
-
timelinePosition,
|
|
514
526
|
]);
|
|
515
527
|
const previousDisabled = previousDisplayFrame === null;
|
|
516
528
|
const nextDisabled = nextDisplayFrame === null;
|
|
@@ -129,6 +129,6 @@ const TimelineLayerChildrenToggle = ({ sequence }) => {
|
|
|
129
129
|
border: 'none',
|
|
130
130
|
padding: 0,
|
|
131
131
|
cursor: 'default',
|
|
132
|
-
}, children: jsx_runtime_1.jsx(TimelineCollapseToggle_1.TimelineCollapseToggle, { collapsed: isCollapsed, color:
|
|
132
|
+
}, children: jsx_runtime_1.jsx(TimelineCollapseToggle_1.TimelineCollapseToggle, { collapsed: isCollapsed, color: colors_1.CURRENT_COLOR }) }));
|
|
133
133
|
};
|
|
134
134
|
exports.TimelineLayerChildrenToggle = TimelineLayerChildrenToggle;
|
|
@@ -19,7 +19,7 @@ const TimelineListTrack = react_1.default.memo(({ row }) => {
|
|
|
19
19
|
var _a;
|
|
20
20
|
var _b, _c;
|
|
21
21
|
const { afterDropLineOffset, siblingIndex, track } = row;
|
|
22
|
-
return (jsx_runtime_1.jsx(TimelineSequenceItem_1.TimelineSequenceItem, { afterDropLineOffset: afterDropLineOffset, siblingIndex: siblingIndex, connectedCompositions: (_b = track.connectedCompositions) !== null && _b !== void 0 ? _b : noConnectedCompositions, nestedDepth: track.depth, sequence: track.sequence, nodePathInfo: track.nodePathInfo, keyframeDisplayOffset: track.keyframeDisplayOffset, sequenceFrameOffset: track.sequenceFrameOffset, numberOfHiddenDuplicates: Math.max(0, ((_c = (_a = track.displayGroup) === null || _a === void 0 ? void 0 : _a.numberOfSequences) !== null && _c !== void 0 ? _c : 1) - 1), showProvisionalVisibilityToggle: track.nodePathInfo === null && track.displayGroup !== null }));
|
|
22
|
+
return (jsx_runtime_1.jsx(TimelineSequenceItem_1.TimelineSequenceItem, { afterDropLineOffset: afterDropLineOffset, siblingIndex: siblingIndex, connectedCompositions: (_b = track.connectedCompositions) !== null && _b !== void 0 ? _b : noConnectedCompositions, nestedDepth: track.depth, sequence: track.sequence, nodePathInfo: track.nodePathInfo, keyframeDisplayOffset: track.keyframeDisplayOffset, keyframePlaybackRate: track.keyframePlaybackRate, sequenceFrameOffset: track.sequenceFrameOffset, numberOfHiddenDuplicates: Math.max(0, ((_c = (_a = track.displayGroup) === null || _a === void 0 ? void 0 : _a.numberOfSequences) !== null && _c !== void 0 ? _c : 1) - 1), showProvisionalVisibilityToggle: track.nodePathInfo === null && track.displayGroup !== null }));
|
|
23
23
|
});
|
|
24
24
|
const TimelineList = () => {
|
|
25
25
|
const { rows, tracksEnd, virtualItems } = (0, TimelineVirtualization_1.useTimelineVirtualization)();
|
|
@@ -39,9 +39,7 @@ const TimelineNumberField = ({ field, effectiveValue, onSave, onDragValueChange,
|
|
|
39
39
|
const step = field.fieldSchema.type === 'font-weight' && currentValue % 100 === 0
|
|
40
40
|
? 100
|
|
41
41
|
: (configuredStep !== null && configuredStep !== void 0 ? configuredStep : 1);
|
|
42
|
-
const
|
|
43
|
-
field.group === 'crop' ||
|
|
44
|
-
('kind' in field && field.kind === 'effect-field');
|
|
42
|
+
const integerOnly = field.fieldSchema.type === 'number' && field.fieldSchema.integer === true;
|
|
45
43
|
const formatter = (0, react_1.useCallback)((v) => {
|
|
46
44
|
return (0, timeline_field_display_utils_1.formatTimelineFieldValueForDisplay)({
|
|
47
45
|
fieldSchema: field.fieldSchema,
|
|
@@ -56,6 +54,6 @@ const TimelineNumberField = ({ field, effectiveValue, onSave, onDragValueChange,
|
|
|
56
54
|
? ((_b = field.fieldSchema.max) !== null && _b !== void 0 ? _b : Infinity)
|
|
57
55
|
: field.fieldSchema.type === 'font-weight'
|
|
58
56
|
? 1000
|
|
59
|
-
: Infinity, step: step, dragSensitivity: field.fieldSchema.type === 'font-weight' && step === 100 ? 0.1 : 1, formatter: formatter, rightAlign: false, allowStepMismatch:
|
|
57
|
+
: Infinity, step: step, dragSensitivity: field.fieldSchema.type === 'font-weight' && step === 100 ? 0.1 : 1, formatter: formatter, rightAlign: false, allowStepMismatch: true, integerOnly: integerOnly }));
|
|
60
58
|
};
|
|
61
59
|
exports.TimelineNumberField = TimelineNumberField;
|
|
@@ -62,7 +62,7 @@ const TimelinePrimitiveFieldValue = ({ field, onSave, onDragValueChange, onDragE
|
|
|
62
62
|
if (field.typeName === 'enum') {
|
|
63
63
|
return (jsx_runtime_1.jsx("span", { style: inlineWrapper, children: jsx_runtime_1.jsx(TimelineEnumField_1.TimelineEnumField, { effectiveValue: effectiveValue, field: field, onDragEnd: onDragEnd, onDragValueChange: onDragValueChange, onSave: onSave, propStatus: propStatus }) }));
|
|
64
64
|
}
|
|
65
|
-
if (field.typeName === 'text-content') {
|
|
65
|
+
if (field.typeName === 'text-content' || field.typeName === 'svg-path') {
|
|
66
66
|
return (jsx_runtime_1.jsx(TimelineTextContentField_1.TimelineTextContentField, { effectiveValue: effectiveValue, field: field, nodePath: scaleLockNodePath, onDragEnd: onDragEnd, onDragValueChange: onDragValueChange, onSave: onSave, propStatus: propStatus }));
|
|
67
67
|
}
|
|
68
68
|
if (field.typeName === 'font-family') {
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { CanvasSelectionInteraction, CanvasSelectionItem, CanvasSelectionSnapshot } from '@remotion/canvas';
|
|
2
2
|
import { type SequenceNodePathMutation } from '@remotion/studio-shared';
|
|
3
3
|
import React, { type CSSProperties } from 'react';
|
|
4
4
|
import { type GetDragOverrides, type GetEffectDragOverrides, type PropStatuses } from 'remotion';
|
|
5
5
|
import type { SequenceNodePathInfo, TimelineTrackData } from '../../helpers/get-timeline-sequence-sort-key';
|
|
6
6
|
import { type GetIsExpanded } from '../ExpandedTracksProvider';
|
|
7
|
-
export declare const TIMELINE_SELECTED_BACKGROUND = "
|
|
8
|
-
export declare const TIMELINE_EXPANDED_SELECTED_BACKGROUND = "
|
|
9
|
-
export declare const TIMELINE_HOVER_BACKGROUND = "
|
|
10
|
-
export declare const TIMELINE_SELECTED_LABEL_BACKGROUND = "
|
|
11
|
-
export declare const TIMELINE_SELECTED_LABEL_TEXT = "black";
|
|
7
|
+
export declare const TIMELINE_SELECTED_BACKGROUND = "var(--remotion-studio-timeline-selected-background-color)";
|
|
8
|
+
export declare const TIMELINE_EXPANDED_SELECTED_BACKGROUND = "var(--remotion-studio-background)";
|
|
9
|
+
export declare const TIMELINE_HOVER_BACKGROUND = "var(--remotion-studio-white-alpha-05)";
|
|
10
|
+
export declare const TIMELINE_SELECTED_LABEL_BACKGROUND = "var(--remotion-studio-timeline-selected-label-background-color)";
|
|
11
|
+
export declare const TIMELINE_SELECTED_LABEL_TEXT = "var(--remotion-studio-black)";
|
|
12
12
|
export declare const TIMELINE_SELECTED_LABEL_HORIZONTAL_PADDING = 2;
|
|
13
13
|
export declare const getTimelineSelectedLabelStyle: (selected: boolean, subcategory: boolean) => CSSProperties;
|
|
14
|
-
export declare const getTimelineColor: (selected: boolean, subcategory: boolean) => "black" | "
|
|
14
|
+
export declare const getTimelineColor: (selected: boolean, subcategory: boolean) => "var(--remotion-studio-black)" | "var(--remotion-studio-white-alpha-80)";
|
|
15
15
|
export declare const getTimelineSelectedTrackHighlightStyle: (timelineWidth: number, backgroundColor?: string) => CSSProperties;
|
|
16
16
|
export declare const getTimelineRowHighlightBackground: ({ showSelectedBackground, selected, containsSelection, hovered, selectedBackground, }: {
|
|
17
17
|
readonly showSelectedBackground: boolean;
|
|
@@ -20,8 +20,8 @@ export declare const getTimelineRowHighlightBackground: ({ showSelectedBackgroun
|
|
|
20
20
|
readonly hovered: boolean;
|
|
21
21
|
readonly selectedBackground: string;
|
|
22
22
|
}) => string | undefined;
|
|
23
|
-
export declare const TIMELINE_BACKGROUND = "
|
|
24
|
-
export declare const TIMELINE_TICKS_BACKGROUND = "
|
|
23
|
+
export declare const TIMELINE_BACKGROUND = "var(--remotion-studio-timeline-background-color)";
|
|
24
|
+
export declare const TIMELINE_TICKS_BACKGROUND = "var(--remotion-studio-background)";
|
|
25
25
|
export type TimelineSelection = CanvasSelectionItem;
|
|
26
26
|
export type TimelineEasingSelection = Extract<TimelineSelection, {
|
|
27
27
|
type: 'easing';
|
|
@@ -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;
|
|
@@ -52,6 +52,7 @@ const AudioWaveform_1 = require("../AudioWaveform");
|
|
|
52
52
|
const ConfirmationDialog_1 = require("../ConfirmationDialog");
|
|
53
53
|
const ContextMenu_1 = require("../ContextMenu");
|
|
54
54
|
const InitialCompositionLoader_1 = require("../InitialCompositionLoader");
|
|
55
|
+
const SequencePropsSubscriptionProvider_1 = require("../SequencePropsSubscriptionProvider");
|
|
55
56
|
const use_select_asset_1 = require("../use-select-asset");
|
|
56
57
|
const disable_sequence_interactivity_1 = require("./disable-sequence-interactivity");
|
|
57
58
|
const duplicate_selected_timeline_item_1 = require("./duplicate-selected-timeline-item");
|
|
@@ -61,6 +62,7 @@ const get_timeline_media_start_frame_1 = require("./get-timeline-media-start-fra
|
|
|
61
62
|
const get_timeline_sequence_visible_layout_1 = require("./get-timeline-sequence-visible-layout");
|
|
62
63
|
const imperative_state_1 = require("./imperative-state");
|
|
63
64
|
const LoopedTimelineIndicators_1 = require("./LoopedTimelineIndicators");
|
|
65
|
+
const split_selected_timeline_item_1 = require("./split-selected-timeline-item");
|
|
64
66
|
const timeline_asset_link_1 = require("./timeline-asset-link");
|
|
65
67
|
const TimelineImageInfo_1 = require("./TimelineImageInfo");
|
|
66
68
|
const TimelineSelection_1 = require("./TimelineSelection");
|
|
@@ -73,6 +75,7 @@ const use_asset_timeline_context_menu_1 = require("./use-asset-timeline-context-
|
|
|
73
75
|
const use_delete_timeline_items_1 = require("./use-delete-timeline-items");
|
|
74
76
|
const use_open_sequence_in_apps_1 = require("./use-open-sequence-in-apps");
|
|
75
77
|
const use_sequence_freeze_frame_menu_item_1 = require("./use-sequence-freeze-frame-menu-item");
|
|
78
|
+
const { getTimelineVisibleDuration, getTimelineVisibleStart } = canvas_1.CanvasInternals;
|
|
76
79
|
const TimelineSequenceFn = ({ s, connectedCompositions, nodePathInfo, sequenceFrameOffset, cascadedStart, localStart, }) => {
|
|
77
80
|
const windowWidth = (0, react_1.useContext)(TimelineWidthProvider_1.TimelineWidthContext);
|
|
78
81
|
if (windowWidth === null) {
|
|
@@ -125,6 +128,7 @@ const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premount, po
|
|
|
125
128
|
const isAsset = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'asset';
|
|
126
129
|
const ref = (0, react_1.useRef)(null);
|
|
127
130
|
const { onSelect, selectable, selected, selectionItem } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
|
|
131
|
+
const containsSelection = (0, TimelineSelection_1.useTimelineRowContainsSelection)(nodePathInfo);
|
|
128
132
|
(0, TimelineSelection_1.useTimelineMarqueeSelectableItem)(selectionItem, ref);
|
|
129
133
|
const onPointerDown = (0, react_1.useCallback)((e) => {
|
|
130
134
|
if (e.button === 0) {
|
|
@@ -147,7 +151,7 @@ const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premount, po
|
|
|
147
151
|
}, [fromCanUpdate, onMoveDragPointerDown, onSelect, selected]);
|
|
148
152
|
const frame = (0, remotion_1.useCurrentFrame)();
|
|
149
153
|
const relativeFrame = frame - s.from;
|
|
150
|
-
const sequenceFrame = relativeFrame + sequenceFrameOffset;
|
|
154
|
+
const sequenceFrame = relativeFrame * s.sequencePlaybackRate + sequenceFrameOffset;
|
|
151
155
|
const relativeFrameWithPremount = relativeFrame + ((_a = s.premountDisplay) !== null && _a !== void 0 ? _a : 0);
|
|
152
156
|
const relativeFrameWithPostmount = relativeFrame - displayDurationInFrames;
|
|
153
157
|
const roundedFrame = Math.round(sequenceFrame * 100) / 100;
|
|
@@ -166,9 +170,9 @@ const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premount, po
|
|
|
166
170
|
...style,
|
|
167
171
|
background: negativeStart ? colors_1.TRANSPARENT : style.background,
|
|
168
172
|
border: negativeStart ? 'none' : style.border,
|
|
169
|
-
opacity: selected || isAsset ? 1 : 0.75,
|
|
173
|
+
opacity: selected || containsSelection || isAsset ? 1 : 0.75,
|
|
170
174
|
};
|
|
171
|
-
}, [isAsset, negativeStart, selected, style]);
|
|
175
|
+
}, [containsSelection, isAsset, negativeStart, selected, style]);
|
|
172
176
|
const content = (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [premount ? (jsx_runtime_1.jsx("div", { style: {
|
|
173
177
|
left: premount.left,
|
|
174
178
|
width: premount.width,
|
|
@@ -238,26 +242,40 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
238
242
|
// If a duration is 1, it is essentially a still and it should have width 0
|
|
239
243
|
// Some compositions may not be longer than their media duration,
|
|
240
244
|
// if that is the case, it needs to be asynchronously determined
|
|
241
|
-
var _a, _b, _c, _d, _e;
|
|
242
|
-
var
|
|
245
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
246
|
+
var _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
243
247
|
const video = remotion_1.Internals.useVideo();
|
|
244
248
|
const { sequences } = (0, react_1.useContext)(remotion_1.Internals.SequenceManager);
|
|
249
|
+
const overrideIdToNodePathMappingsRef = (0, react_1.useContext)(SequencePropsSubscriptionProvider_1.OverrideIdToNodePathMappingsRefContext);
|
|
245
250
|
const renderWindow = (0, react_1.useContext)(TimelineViewport_1.TimelineViewportContext);
|
|
246
251
|
const mediaDurationDragLimitsRegistry = (0, react_1.useContext)(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceMediaDurationDragLimitsContext);
|
|
247
252
|
const dragAwareDoubleClick = (0, react_1.useMemo)(() => (0, drag_aware_double_click_1.createDragAwareDoubleClickTracker)(), []);
|
|
248
253
|
const mediaMetadata = (0, use_media_metadata_1.useMediaMetadata)(s.type === 'audio' || s.type === 'video' ? s.src : null);
|
|
249
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);
|
|
250
268
|
const naturalMediaDuration = (s.type === 'audio' || s.type === 'video') &&
|
|
251
269
|
mediaMetadata !== null &&
|
|
252
270
|
s.playbackRate > 0
|
|
253
|
-
? 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) -
|
|
254
272
|
(0, get_timeline_media_start_frame_1.getTimelineMediaStartFrame)({
|
|
255
273
|
startMediaFrom: s.startMediaFrom,
|
|
256
274
|
mediaFrameAtSequenceZero: s.mediaFrameAtSequenceZero,
|
|
257
275
|
sequenceFrameOffset,
|
|
258
276
|
playbackRate: s.playbackRate,
|
|
259
277
|
})) /
|
|
260
|
-
s.playbackRate)
|
|
278
|
+
(s.playbackRate * s.sequencePlaybackRate))
|
|
261
279
|
: null;
|
|
262
280
|
const maxMediaDuration = s.type === 'sequence' || s.type === 'image' || extendVideoLastFrame
|
|
263
281
|
? Infinity
|
|
@@ -278,22 +296,22 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
278
296
|
};
|
|
279
297
|
}, [originalLocation]);
|
|
280
298
|
const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
|
|
281
|
-
const nodePath = (
|
|
299
|
+
const nodePath = (_l = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.sequenceSubscriptionKey) !== null && _l !== void 0 ? _l : null;
|
|
282
300
|
const propStatusesForOverride = (0, react_1.useMemo)(() => {
|
|
283
301
|
return nodePath
|
|
284
302
|
? remotion_1.Internals.getPropStatusesCtx(propStatuses, nodePath)
|
|
285
303
|
: undefined;
|
|
286
304
|
}, [propStatuses, nodePath]);
|
|
287
305
|
const durationCanUpdate = Boolean((0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
|
|
288
|
-
((
|
|
306
|
+
((_b = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames) === null || _b === void 0 ? void 0 : _b.status) === 'static');
|
|
289
307
|
const durationCanResize = Boolean((0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
|
|
290
308
|
(0, TimelineSequenceRightEdgeDragHandle_1.canResizeTimelineSequenceDuration)({
|
|
291
309
|
status: propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames,
|
|
292
310
|
}));
|
|
293
311
|
const fromCanUpdate = Boolean((0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
|
|
294
|
-
((
|
|
312
|
+
((_c = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.from) === null || _c === void 0 ? void 0 : _c.status) === 'static');
|
|
295
313
|
const trimBeforeCanUpdate = Boolean((0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
|
|
296
|
-
((
|
|
314
|
+
((_d = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.trimBefore) === null || _d === void 0 ? void 0 : _d.status) === 'static');
|
|
297
315
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
298
316
|
const previewConnected = previewServerState.type === 'connected';
|
|
299
317
|
const previewInteractive = previewConnected && (0, interactivity_enabled_1.isStudioInteractivityEnabled)();
|
|
@@ -356,7 +374,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
356
374
|
const canHandleSequenceDoubleClick = connectedCompositions.length === 1 || canOpenSource;
|
|
357
375
|
const canDeleteFromSource = Boolean(nodePath && (validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source));
|
|
358
376
|
const deleteDisabled = !previewInteractive || !s.controls || !canDeleteFromSource;
|
|
359
|
-
const isProgrammaticallyDuplicated = ((
|
|
377
|
+
const isProgrammaticallyDuplicated = ((_m = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.numberOfSequencesWithThisNodePath) !== null && _m !== void 0 ? _m : 1) > 1;
|
|
360
378
|
const duplicateDisabled = deleteDisabled || isProgrammaticallyDuplicated;
|
|
361
379
|
const disableInteractivityDisabled = !previewInteractive ||
|
|
362
380
|
!s.showInTimeline ||
|
|
@@ -377,6 +395,26 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
377
395
|
}
|
|
378
396
|
(0, duplicate_selected_timeline_item_1.duplicateSequencesFromSource)(selectedSequenceNodePathInfos, confirm).catch(() => undefined);
|
|
379
397
|
}, [confirm, previewInteractive, selectedSequenceNodePathInfos]);
|
|
398
|
+
const onSplitSelectedSequences = (0, react_1.useCallback)(() => {
|
|
399
|
+
var _a;
|
|
400
|
+
if (!previewInteractive || selectedSequenceNodePathInfos === null) {
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
(_a = (0, split_selected_timeline_item_1.splitSelectedTimelineItems)({
|
|
404
|
+
selections: selectedItems,
|
|
405
|
+
sequences,
|
|
406
|
+
overrideIdsToNodePaths: overrideIdToNodePathMappingsRef.current,
|
|
407
|
+
propStatuses,
|
|
408
|
+
splitFrame: (0, imperative_state_1.getCurrentFrame)(),
|
|
409
|
+
})) === null || _a === void 0 ? void 0 : _a.catch(() => undefined);
|
|
410
|
+
}, [
|
|
411
|
+
overrideIdToNodePathMappingsRef,
|
|
412
|
+
previewInteractive,
|
|
413
|
+
propStatuses,
|
|
414
|
+
selectedItems,
|
|
415
|
+
selectedSequenceNodePathInfos,
|
|
416
|
+
sequences,
|
|
417
|
+
]);
|
|
380
418
|
const onDeleteSequenceFromSource = (0, react_1.useCallback)(() => {
|
|
381
419
|
if (!(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source) ||
|
|
382
420
|
!nodePath ||
|
|
@@ -433,8 +471,10 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
433
471
|
return (0, get_sequence_context_menu_items_1.getMultiSequenceContextMenuItems)({
|
|
434
472
|
deleteDisabled: !previewInteractive,
|
|
435
473
|
duplicateDisabled: !previewInteractive,
|
|
474
|
+
splitDisabled: !previewInteractive,
|
|
436
475
|
onDeleteSelectedSequences,
|
|
437
476
|
onDuplicateSelectedSequences,
|
|
477
|
+
onSplitSelectedSequences,
|
|
438
478
|
});
|
|
439
479
|
}
|
|
440
480
|
const splitMenuItem = (0, get_sequence_split_menu_item_1.getSequenceSplitMenuItem)({
|
|
@@ -513,6 +553,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
513
553
|
onDisableSequenceInteractivity,
|
|
514
554
|
onDuplicateSequenceFromSource,
|
|
515
555
|
onDuplicateSelectedSequences,
|
|
556
|
+
onSplitSelectedSequences,
|
|
516
557
|
openInCodingAgent,
|
|
517
558
|
openInEditor,
|
|
518
559
|
originalLocation,
|
|
@@ -534,7 +575,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
534
575
|
const { onPointerDown: onMoveDragPointerDown } = (0, TimelineSequenceRightEdgeDragHandle_1.useTimelineSequenceFromDrag)({
|
|
535
576
|
nodePathInfo,
|
|
536
577
|
windowWidth,
|
|
537
|
-
timelineDurationInFrames: (
|
|
578
|
+
timelineDurationInFrames: (_o = video === null || video === void 0 ? void 0 : video.durationInFrames) !== null && _o !== void 0 ? _o : 1,
|
|
538
579
|
onDragEnd: dragAwareDoubleClick.endPointerGesture,
|
|
539
580
|
});
|
|
540
581
|
if (!video) {
|
|
@@ -596,7 +637,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
596
637
|
}, [visibleLayout]);
|
|
597
638
|
const showLeftBorderRadius = (visibleLayout === null || visibleLayout === void 0 ? void 0 : visibleLayout.leftEdgeVisible) === true &&
|
|
598
639
|
localStart >= 0 &&
|
|
599
|
-
((
|
|
640
|
+
((_p = s.trimBefore) !== null && _p !== void 0 ? _p : 0) === 0 &&
|
|
600
641
|
(s.type === 'sequence' ||
|
|
601
642
|
s.type === 'image' ||
|
|
602
643
|
(0, get_timeline_media_start_frame_1.getTimelineMediaStartFrame)({
|
|
@@ -616,15 +657,15 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
616
657
|
Math.ceil(Math.min(s.duration, video.durationInFrames - s.from, maxMediaDuration !== null && maxMediaDuration !== void 0 ? maxMediaDuration : Infinity)) === Math.ceil(naturalMediaDuration);
|
|
617
658
|
const parentSequence = sequences.find((candidate) => candidate.id === s.parent);
|
|
618
659
|
const parentEnd = parentSequence
|
|
619
|
-
?
|
|
620
|
-
|
|
660
|
+
? getTimelineVisibleStart(parentSequence, sequences) +
|
|
661
|
+
getTimelineVisibleDuration(parentSequence, sequences)
|
|
621
662
|
: video.durationInFrames;
|
|
622
663
|
const endsAtContainerBoundary = Math.ceil(s.from + displayDurationInFrames) >=
|
|
623
664
|
Math.ceil(Math.min(parentEnd, video.durationInFrames));
|
|
624
665
|
const hasImplicitMediaDuration = (s.type === 'audio' || s.type === 'video') &&
|
|
625
|
-
((
|
|
666
|
+
((_e = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames) === null || _e === void 0 ? void 0 : _e.status) === 'static' &&
|
|
626
667
|
propStatusesForOverride.durationInFrames.codeValue === undefined;
|
|
627
|
-
const durationInFramesCodeValue = ((
|
|
668
|
+
const durationInFramesCodeValue = ((_f = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.durationInFrames) === null || _f === void 0 ? void 0 : _f.status) === 'static'
|
|
628
669
|
? propStatusesForOverride.durationInFrames.codeValue
|
|
629
670
|
: null;
|
|
630
671
|
const explicitDurationInFrames = typeof durationInFramesCodeValue === 'number' &&
|
|
@@ -638,7 +679,9 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
638
679
|
displayDurationInFrames: s.duration,
|
|
639
680
|
displayStart: s.from,
|
|
640
681
|
effectiveMaxMediaDuration,
|
|
641
|
-
explicitDurationInFrames
|
|
682
|
+
explicitDurationInFrames: explicitDurationInFrames === null
|
|
683
|
+
? null
|
|
684
|
+
: explicitDurationInFrames / s.sequencePlaybackRate,
|
|
642
685
|
hasImplicitDuration: hasImplicitMediaDuration,
|
|
643
686
|
naturalMediaDuration,
|
|
644
687
|
timelineDurationInFrames: video.durationInFrames,
|
|
@@ -725,10 +768,11 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
725
768
|
visibleLayout.leftEdgeVisible &&
|
|
726
769
|
negativeStartWidth === 0 &&
|
|
727
770
|
nodePathInfo &&
|
|
728
|
-
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 &&
|
|
729
772
|
visibleLayout.rightEdgeVisible &&
|
|
730
773
|
nodePathInfo &&
|
|
731
|
-
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 }))] }));
|
|
732
776
|
return previewConnected || window.remotion_isReadOnlyStudio ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: sequence })) : (sequence);
|
|
733
777
|
};
|
|
734
778
|
exports.TimelineSequence = react_1.default.memo(TimelineSequenceFn);
|