@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
|
@@ -38,6 +38,8 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
38
38
|
const react_1 = __importStar(require("react"));
|
|
39
39
|
const remotion_1 = require("remotion");
|
|
40
40
|
const colors_1 = require("../../helpers/colors");
|
|
41
|
+
const resolve_studio_color_1 = require("../../helpers/resolve-studio-color");
|
|
42
|
+
const studio_pixel_ratio_1 = require("../../helpers/studio-pixel-ratio");
|
|
41
43
|
const timeline_layout_1 = require("../../helpers/timeline-layout");
|
|
42
44
|
const render_frame_1 = require("../../state/render-frame");
|
|
43
45
|
const TimeValue_1 = require("../TimeValue");
|
|
@@ -215,8 +217,11 @@ const TimelineTimeIndicatorsInner = react_1.default.memo(({ windowWidth, duratio
|
|
|
215
217
|
(frameInterval * fps),
|
|
216
218
|
});
|
|
217
219
|
const draw = () => {
|
|
220
|
+
const computedStyle = getComputedStyle(canvas);
|
|
221
|
+
const tickColor = (0, resolve_studio_color_1.resolveStudioColor)(colors_1.WHITE_ALPHA_15, computedStyle);
|
|
222
|
+
const labelColor = (0, resolve_studio_color_1.resolveStudioColor)(colors_1.LIGHT_TEXT, computedStyle);
|
|
218
223
|
const { clientWidth: width, scrollLeft } = scrollable;
|
|
219
|
-
const pixelRatio =
|
|
224
|
+
const pixelRatio = (0, studio_pixel_ratio_1.getStudioPixelRatio)();
|
|
220
225
|
const canvasWidth = Math.ceil(width * pixelRatio);
|
|
221
226
|
const canvasHeight = exports.TIMELINE_TIME_INDICATOR_HEIGHT * pixelRatio;
|
|
222
227
|
if (canvas.width !== canvasWidth || canvas.height !== canvasHeight) {
|
|
@@ -228,7 +233,7 @@ const TimelineTimeIndicatorsInner = react_1.default.memo(({ windowWidth, duratio
|
|
|
228
233
|
context.resetTransform();
|
|
229
234
|
context.clearRect(0, 0, canvas.width, canvas.height);
|
|
230
235
|
context.scale(pixelRatio, pixelRatio);
|
|
231
|
-
context.fillStyle =
|
|
236
|
+
context.fillStyle = tickColor;
|
|
232
237
|
const firstFrame = Math.max(0, Math.floor((scrollLeft - timeline_layout_1.TIMELINE_PADDING) / frameInterval));
|
|
233
238
|
const lastFrame = Math.min(durationInFrames - 1, Math.ceil((scrollLeft + width - timeline_layout_1.TIMELINE_PADDING) / frameInterval));
|
|
234
239
|
const xForFrame = (frame) => Math.round(frameInterval * frame + timeline_layout_1.TIMELINE_PADDING - scrollLeft) + 0.5;
|
|
@@ -243,11 +248,11 @@ const TimelineTimeIndicatorsInner = react_1.default.memo(({ windowWidth, duratio
|
|
|
243
248
|
const frame = second * fps;
|
|
244
249
|
drawTick(frame, 15);
|
|
245
250
|
if (second > 0) {
|
|
246
|
-
context.fillStyle =
|
|
247
|
-
context.font = `${TICK_LABEL_FONT_SIZE}px ${
|
|
251
|
+
context.fillStyle = labelColor;
|
|
252
|
+
context.font = `${TICK_LABEL_FONT_SIZE}px ${computedStyle.fontFamily}`;
|
|
248
253
|
context.textBaseline = 'top';
|
|
249
254
|
context.fillText(showFrames ? `${Math.round(frame)}f` : (0, render_frame_1.renderFrame)(frame, fps), xForFrame(frame) + TICK_LABEL_MARGIN_LEFT, 7);
|
|
250
|
-
context.fillStyle =
|
|
255
|
+
context.fillStyle = tickColor;
|
|
251
256
|
}
|
|
252
257
|
}
|
|
253
258
|
const { minorTickEvery, mediumTickEvery } = tickScale;
|
|
@@ -66,6 +66,6 @@ const TimelineTrackUnmemoized = ({ track }) => {
|
|
|
66
66
|
getIsExpanded(track.nodePathInfo);
|
|
67
67
|
return (jsx_runtime_1.jsxs("div", { onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, children: [
|
|
68
68
|
jsx_runtime_1.jsxs("div", { style: layerStyle, children: [rowHighlightBackground && timelineWidth !== null ? (jsx_runtime_1.jsx("div", { style: (0, TimelineSelection_1.getTimelineSelectedTrackHighlightStyle)(timelineWidth, rowHighlightBackground) })) : null, jsx_runtime_1.jsx(TimelineSequence_1.TimelineSequence, { s: track.sequence, cascadedStart: track.cascadedStart, localStart: track.localStart, connectedCompositions: (_a = track.connectedCompositions) !== null && _a !== void 0 ? _a : emptyConnectedCompositions, nodePathInfo: track.nodePathInfo, sequenceFrameOffset: track.sequenceFrameOffset })
|
|
69
|
-
] }), showExpandedKeyframes && track.nodePathInfo ? (jsx_runtime_1.jsx(TimelineExpandedTrackKeyframes_1.TimelineExpandedTrackKeyframes, { sequence: track.sequence, nodePathInfo: track.nodePathInfo, keyframeDisplayOffset: track.keyframeDisplayOffset })) : null] }));
|
|
69
|
+
] }), showExpandedKeyframes && track.nodePathInfo ? (jsx_runtime_1.jsx(TimelineExpandedTrackKeyframes_1.TimelineExpandedTrackKeyframes, { sequence: track.sequence, nodePathInfo: track.nodePathInfo, keyframeDisplayOffset: track.keyframeDisplayOffset, keyframePlaybackRate: track.keyframePlaybackRate })) : null] }));
|
|
70
70
|
};
|
|
71
71
|
exports.TimelineTrack = react_1.default.memo(TimelineTrackUnmemoized);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type TimelineTrimTooltipState = {
|
|
3
|
+
readonly deltaFrames: number;
|
|
4
|
+
readonly edgeFrame: number;
|
|
5
|
+
readonly x: number;
|
|
6
|
+
readonly y: number;
|
|
7
|
+
};
|
|
8
|
+
export declare const TimelineTrimTooltip: React.FC<{
|
|
9
|
+
readonly state: TimelineTrimTooltipState;
|
|
10
|
+
readonly fps: number;
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TimelineTrimTooltip = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const react_dom_1 = require("react-dom");
|
|
7
|
+
const colors_1 = require("../../helpers/colors");
|
|
8
|
+
const render_frame_1 = require("../../state/render-frame");
|
|
9
|
+
const TimelineTickFormatProvider_1 = require("./TimelineTickFormatProvider");
|
|
10
|
+
const tooltip = {
|
|
11
|
+
backgroundColor: colors_1.BLACK_ALPHA_85,
|
|
12
|
+
borderRadius: 2,
|
|
13
|
+
boxSizing: 'border-box',
|
|
14
|
+
color: colors_1.WHITE,
|
|
15
|
+
fontSize: 11,
|
|
16
|
+
fontVariantNumeric: 'tabular-nums',
|
|
17
|
+
lineHeight: '14px',
|
|
18
|
+
padding: '4px 7px',
|
|
19
|
+
pointerEvents: 'none',
|
|
20
|
+
position: 'fixed',
|
|
21
|
+
textAlign: 'right',
|
|
22
|
+
whiteSpace: 'nowrap',
|
|
23
|
+
zIndex: 2147483647,
|
|
24
|
+
};
|
|
25
|
+
const TimelineTrimTooltip = ({ state, fps }) => {
|
|
26
|
+
const { showFrames } = (0, react_1.useContext)(TimelineTickFormatProvider_1.TimelineTickFormatContext);
|
|
27
|
+
const delta = Math.round(state.deltaFrames);
|
|
28
|
+
const edge = Math.max(0, Math.round(state.edgeFrame));
|
|
29
|
+
const format = (frame) => showFrames ? `${frame}f` : (0, render_frame_1.renderFrame)(frame, fps);
|
|
30
|
+
const deltaLabel = delta === 0
|
|
31
|
+
? format(0)
|
|
32
|
+
: `${delta < 0 ? '−' : '+'}${format(Math.abs(delta))}`;
|
|
33
|
+
const edgeLabel = format(edge);
|
|
34
|
+
const tooltipWidth = Math.max(82, Math.ceil(Math.max(deltaLabel.length, edgeLabel.length) * 7 + 14));
|
|
35
|
+
const left = Math.max(8, Math.min(state.x - tooltipWidth / 2, window.innerWidth - tooltipWidth - 8));
|
|
36
|
+
const top = Math.max(8, Math.min(state.y - 40, window.innerHeight - 44));
|
|
37
|
+
return (0, react_dom_1.createPortal)(jsx_runtime_1.jsxs("div", { "aria-hidden": "true", style: { ...tooltip, left, top, width: tooltipWidth }, "data-remotion-timeline-trim-tooltip": "true", children: [
|
|
38
|
+
jsx_runtime_1.jsx("div", { children: deltaLabel }), jsx_runtime_1.jsx("div", { style: { color: colors_1.LIGHT_TEXT }, children: edgeLabel })
|
|
39
|
+
] }), document.body);
|
|
40
|
+
};
|
|
41
|
+
exports.TimelineTrimTooltip = TimelineTrimTooltip;
|
|
@@ -14,6 +14,7 @@ export declare const TimelineVideoInfo: React.NamedExoticComponent<{
|
|
|
14
14
|
readonly muted: boolean;
|
|
15
15
|
readonly marginLeft: number;
|
|
16
16
|
readonly loopDisplay: LoopDisplay | undefined;
|
|
17
|
+
readonly loopDisplayOffsetInFrames: number;
|
|
17
18
|
readonly frozenMediaFrame: number | null;
|
|
18
19
|
readonly extendLastFrame: boolean;
|
|
19
20
|
}>;
|
|
@@ -39,6 +39,7 @@ const timeline_utils_1 = require("@remotion/timeline-utils");
|
|
|
39
39
|
const react_1 = __importStar(require("react"));
|
|
40
40
|
const remotion_1 = require("remotion");
|
|
41
41
|
const colors_1 = require("../../helpers/colors");
|
|
42
|
+
const studio_pixel_ratio_1 = require("../../helpers/studio-pixel-ratio");
|
|
42
43
|
const timeline_layout_1 = require("../../helpers/timeline-layout");
|
|
43
44
|
const AudioWaveform_1 = require("../AudioWaveform");
|
|
44
45
|
const get_timeline_media_start_frame_1 = require("./get-timeline-media-start-frame");
|
|
@@ -60,7 +61,7 @@ const filmstripContainerStyle = {
|
|
|
60
61
|
};
|
|
61
62
|
const MAX_FROZEN_FRAME_CACHE_DEVIATION = timeline_utils_1.WEBCODECS_TIMESCALE * 0.05;
|
|
62
63
|
const TimelineVideoInfoSegment = ({ src, visualizationWidth, startMediaFrom, mediaFrameAtSequenceZero, sequenceFrameOffset, durationInFrames, sourceOffsetInFrames, tiledLoop, playbackRate, volume, doesVolumeChange, muted, frozenMediaFrame, extendLastFrame, }) => {
|
|
63
|
-
var _a, _b;
|
|
64
|
+
var _a, _b, _c;
|
|
64
65
|
const { fps } = (0, remotion_1.useVideoConfig)();
|
|
65
66
|
const resolvedSrc = remotion_1.Internals.usePreload(src);
|
|
66
67
|
const ref = (0, react_1.useRef)(null);
|
|
@@ -83,7 +84,7 @@ const TimelineVideoInfoSegment = ({ src, visualizationWidth, startMediaFrom, med
|
|
|
83
84
|
return;
|
|
84
85
|
}
|
|
85
86
|
const controller = new AbortController();
|
|
86
|
-
const pixelRatio =
|
|
87
|
+
const pixelRatio = (0, studio_pixel_ratio_1.getStudioPixelRatio)();
|
|
87
88
|
const canvas = document.createElement('canvas');
|
|
88
89
|
canvas.width = Math.ceil(visualizationWidth * pixelRatio);
|
|
89
90
|
canvas.height = Math.ceil(timeline_layout_1.TIMELINE_LAYER_FILMSTRIP_HEIGHT * pixelRatio);
|
|
@@ -207,7 +208,8 @@ const TimelineVideoInfoSegment = ({ src, visualizationWidth, startMediaFrom, med
|
|
|
207
208
|
if (!pattern) {
|
|
208
209
|
return;
|
|
209
210
|
}
|
|
210
|
-
const phase = (tiledLoop.displayOffsetInFrames
|
|
211
|
+
const phase = ((tiledLoop.displayOffsetInFrames +
|
|
212
|
+
tiledLoop.loopDisplayOffsetInFrames) %
|
|
211
213
|
tiledLoop.loopDisplay.durationInFrames) *
|
|
212
214
|
((tiledLoop.loopWidth * pixelRatio) /
|
|
213
215
|
tiledLoop.loopDisplay.durationInFrames);
|
|
@@ -387,13 +389,11 @@ const TimelineVideoInfoSegment = ({ src, visualizationWidth, startMediaFrom, med
|
|
|
387
389
|
};
|
|
388
390
|
}, [visualizationWidth]);
|
|
389
391
|
return (jsx_runtime_1.jsxs("div", { style: segmentStyle, children: [
|
|
390
|
-
jsx_runtime_1.jsx("div", { ref: ref, style: filmstripStyle }), jsx_runtime_1.jsx("div", { style: audioStyle, children: jsx_runtime_1.jsx(AudioWaveform_1.AudioWaveform, { src: src, height: timeline_layout_1.TIMELINE_VIDEO_INFO_WAVEFORM_HEIGHT, visualizationWidth: audioWidth, startFrom: mediaStartFrame, durationInFrames: durationInFrames, displayOffsetInFrames: (_a = tiledLoop === null || tiledLoop === void 0 ? void 0 : tiledLoop.displayOffsetInFrames) !== null && _a !== void 0 ? _a : 0,
|
|
392
|
+
jsx_runtime_1.jsx("div", { ref: ref, style: filmstripStyle }), jsx_runtime_1.jsx("div", { style: audioStyle, children: jsx_runtime_1.jsx(AudioWaveform_1.AudioWaveform, { src: src, height: timeline_layout_1.TIMELINE_VIDEO_INFO_WAVEFORM_HEIGHT, visualizationWidth: audioWidth, startFrom: mediaStartFrame, durationInFrames: durationInFrames, displayOffsetInFrames: (_a = tiledLoop === null || tiledLoop === void 0 ? void 0 : tiledLoop.displayOffsetInFrames) !== null && _a !== void 0 ? _a : 0, loopDisplayOffsetInFrames: (_b = tiledLoop === null || tiledLoop === void 0 ? void 0 : tiledLoop.loopDisplayOffsetInFrames) !== null && _b !== void 0 ? _b : 0, displayDurationInFrames: (_c = tiledLoop === null || tiledLoop === void 0 ? void 0 : tiledLoop.displayDurationInFrames) !== null && _c !== void 0 ? _c : durationInFrames, volume: volume, doesVolumeChange: doesVolumeChange, muted: muted, playbackRate: playbackRate, loopDisplay: tiledLoop === null || tiledLoop === void 0 ? void 0 : tiledLoop.loopDisplay }) })
|
|
391
393
|
] }));
|
|
392
394
|
};
|
|
393
395
|
const getVisibleSegments = ({ displayDurationInFrames, displayOffsetInFrames, loopDisplay, }) => {
|
|
394
|
-
if (!loopDisplay ||
|
|
395
|
-
loopDisplay.numberOfTimes <= 1 ||
|
|
396
|
-
loopDisplay.durationInFrames <= 0) {
|
|
396
|
+
if (!loopDisplay || loopDisplay.durationInFrames <= 0) {
|
|
397
397
|
return [
|
|
398
398
|
{
|
|
399
399
|
key: 'single',
|
|
@@ -416,7 +416,7 @@ const getVisibleSegments = ({ displayDurationInFrames, displayOffsetInFrames, lo
|
|
|
416
416
|
};
|
|
417
417
|
});
|
|
418
418
|
};
|
|
419
|
-
const TimelineVideoInfoInner = ({ src, visualizationWidth, displayOffsetInFrames, displayDurationInFrames, startMediaFrom, mediaFrameAtSequenceZero, sequenceFrameOffset, playbackRate, volume, doesVolumeChange, muted, marginLeft, loopDisplay, frozenMediaFrame, extendLastFrame, }) => {
|
|
419
|
+
const TimelineVideoInfoInner = ({ src, visualizationWidth, displayOffsetInFrames, displayDurationInFrames, startMediaFrom, mediaFrameAtSequenceZero, sequenceFrameOffset, playbackRate, volume, doesVolumeChange, muted, marginLeft, loopDisplay, loopDisplayOffsetInFrames, frozenMediaFrame, extendLastFrame, }) => {
|
|
420
420
|
const pixelsPerFrame = visualizationWidth / displayDurationInFrames;
|
|
421
421
|
const loopWidth = loopDisplay
|
|
422
422
|
? loopDisplay.durationInFrames * pixelsPerFrame
|
|
@@ -431,12 +431,14 @@ const TimelineVideoInfoInner = ({ src, visualizationWidth, displayOffsetInFrames
|
|
|
431
431
|
return {
|
|
432
432
|
displayDurationInFrames,
|
|
433
433
|
displayOffsetInFrames,
|
|
434
|
+
loopDisplayOffsetInFrames,
|
|
434
435
|
loopDisplay,
|
|
435
436
|
loopWidth,
|
|
436
437
|
};
|
|
437
438
|
}, [
|
|
438
439
|
displayDurationInFrames,
|
|
439
440
|
displayOffsetInFrames,
|
|
441
|
+
loopDisplayOffsetInFrames,
|
|
440
442
|
loopDisplay,
|
|
441
443
|
loopWidth,
|
|
442
444
|
shouldTileLoop,
|
|
@@ -447,12 +449,13 @@ const TimelineVideoInfoInner = ({ src, visualizationWidth, displayOffsetInFrames
|
|
|
447
449
|
}
|
|
448
450
|
return getVisibleSegments({
|
|
449
451
|
displayDurationInFrames,
|
|
450
|
-
displayOffsetInFrames,
|
|
452
|
+
displayOffsetInFrames: displayOffsetInFrames + loopDisplayOffsetInFrames,
|
|
451
453
|
loopDisplay,
|
|
452
454
|
});
|
|
453
455
|
}, [
|
|
454
456
|
displayDurationInFrames,
|
|
455
457
|
displayOffsetInFrames,
|
|
458
|
+
loopDisplayOffsetInFrames,
|
|
456
459
|
loopDisplay,
|
|
457
460
|
shouldTileLoop,
|
|
458
461
|
]);
|
|
@@ -465,6 +468,6 @@ const TimelineVideoInfoInner = ({ src, visualizationWidth, displayOffsetInFrames
|
|
|
465
468
|
.slice(Math.max(0, Math.floor(segmentDisplayOffsetInFrames)), Math.min(values.length, Math.ceil(segmentDisplayOffsetInFrames + segmentDurationInFrames)))
|
|
466
469
|
.join(',');
|
|
467
470
|
};
|
|
468
|
-
return (jsx_runtime_1.jsx("div", { style: { display: 'flex', marginLeft, height: '100%' }, children: tiledLoop ? (jsx_runtime_1.jsx(TimelineVideoInfoSegment, { src: src, visualizationWidth: visualizationWidth, startMediaFrom: startMediaFrom, mediaFrameAtSequenceZero: mediaFrameAtSequenceZero, sequenceFrameOffset: sequenceFrameOffset, durationInFrames: tiledLoop.loopDisplay.durationInFrames, sourceOffsetInFrames: 0, tiledLoop: tiledLoop, playbackRate: playbackRate, volume: volume, doesVolumeChange: doesVolumeChange, muted: muted, frozenMediaFrame: frozenMediaFrame, extendLastFrame: extendLastFrame })) : (segments.map((segment) => (jsx_runtime_1.jsx(TimelineVideoInfoSegment, { src: src, visualizationWidth: segment.durationInFrames * pixelsPerFrame, startMediaFrom: startMediaFrom, mediaFrameAtSequenceZero: mediaFrameAtSequenceZero, sequenceFrameOffset: sequenceFrameOffset, durationInFrames: segment.durationInFrames, sourceOffsetInFrames: segment.sourceOffsetInFrames, tiledLoop: null, playbackRate: playbackRate, volume: getSegmentVolume(segment.
|
|
471
|
+
return (jsx_runtime_1.jsx("div", { style: { display: 'flex', marginLeft, height: '100%' }, children: tiledLoop ? (jsx_runtime_1.jsx(TimelineVideoInfoSegment, { src: src, visualizationWidth: visualizationWidth, startMediaFrom: startMediaFrom, mediaFrameAtSequenceZero: mediaFrameAtSequenceZero, sequenceFrameOffset: sequenceFrameOffset, durationInFrames: tiledLoop.loopDisplay.durationInFrames, sourceOffsetInFrames: 0, tiledLoop: tiledLoop, playbackRate: playbackRate, volume: volume, doesVolumeChange: doesVolumeChange, muted: muted, frozenMediaFrame: frozenMediaFrame, extendLastFrame: extendLastFrame })) : (segments.map((segment) => (jsx_runtime_1.jsx(TimelineVideoInfoSegment, { src: src, visualizationWidth: segment.durationInFrames * pixelsPerFrame, startMediaFrom: startMediaFrom, mediaFrameAtSequenceZero: mediaFrameAtSequenceZero, sequenceFrameOffset: sequenceFrameOffset, durationInFrames: segment.durationInFrames, sourceOffsetInFrames: segment.sourceOffsetInFrames, tiledLoop: null, playbackRate: playbackRate, volume: getSegmentVolume(segment.displayOffsetInFrames - loopDisplayOffsetInFrames, segment.durationInFrames), doesVolumeChange: doesVolumeChange, muted: muted, frozenMediaFrame: frozenMediaFrame, extendLastFrame: extendLastFrame }, segment.key)))) }));
|
|
469
472
|
};
|
|
470
473
|
exports.TimelineVideoInfo = react_1.default.memo(TimelineVideoInfoInner);
|
|
@@ -4,6 +4,7 @@ type TimelineRenderWindow = {
|
|
|
4
4
|
readonly width: number;
|
|
5
5
|
};
|
|
6
6
|
export declare const TimelineViewportContext: React.Context<TimelineRenderWindow | null>;
|
|
7
|
+
export declare const syncTimelineViewport: () => void;
|
|
7
8
|
export declare const getTimelineRenderWindow: (scrollable: HTMLDivElement) => TimelineRenderWindow;
|
|
8
9
|
export declare const TimelineViewportProvider: React.FC<{
|
|
9
10
|
readonly children: React.ReactNode;
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TimelineViewportProvider = exports.getTimelineRenderWindow = exports.TimelineViewportContext = void 0;
|
|
3
|
+
exports.TimelineViewportProvider = exports.getTimelineRenderWindow = exports.syncTimelineViewport = exports.TimelineViewportContext = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
exports.TimelineViewportContext = (0, react_1.createContext)(null);
|
|
7
|
+
let updateTimelineViewport = null;
|
|
8
|
+
const syncTimelineViewport = () => {
|
|
9
|
+
updateTimelineViewport === null || updateTimelineViewport === void 0 ? void 0 : updateTimelineViewport();
|
|
10
|
+
};
|
|
11
|
+
exports.syncTimelineViewport = syncTimelineViewport;
|
|
7
12
|
const getTimelineRenderWindow = (scrollable) => {
|
|
8
13
|
const viewportWidth = scrollable.clientWidth;
|
|
9
14
|
if (viewportWidth === 0) {
|
|
@@ -41,6 +46,7 @@ const TimelineViewportProvider = ({ children, scrollable }) => {
|
|
|
41
46
|
(0, react_1.useLayoutEffect)(() => {
|
|
42
47
|
let element = null;
|
|
43
48
|
let resizeObserver = null;
|
|
49
|
+
updateTimelineViewport = update;
|
|
44
50
|
const animationFrame = requestAnimationFrame(() => {
|
|
45
51
|
element = scrollable.current;
|
|
46
52
|
if (!element) {
|
|
@@ -52,6 +58,9 @@ const TimelineViewportProvider = ({ children, scrollable }) => {
|
|
|
52
58
|
element.addEventListener('scroll', update);
|
|
53
59
|
});
|
|
54
60
|
return () => {
|
|
61
|
+
if (updateTimelineViewport === update) {
|
|
62
|
+
updateTimelineViewport = null;
|
|
63
|
+
}
|
|
55
64
|
cancelAnimationFrame(animationFrame);
|
|
56
65
|
resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
|
|
57
66
|
element === null || element === void 0 ? void 0 : element.removeEventListener('scroll', update);
|
|
@@ -19,7 +19,7 @@ const getValueWhenLastKeyframeDeleted = ({ propStatus, playheadSourceFrame, }) =
|
|
|
19
19
|
};
|
|
20
20
|
const getSelectedKeyframeDeletion = ({ nodePathInfo, frame, sequences, overrideIdsToNodePaths, propStatuses, timelinePosition, }) => {
|
|
21
21
|
var _a;
|
|
22
|
-
var _b, _c, _d;
|
|
22
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
23
23
|
const field = (0, parse_keyframe_field_from_node_path_1.parseKeyframeFieldFromNodePath)(nodePathInfo.auxiliaryKeys);
|
|
24
24
|
if (field === null) {
|
|
25
25
|
return null;
|
|
@@ -51,9 +51,16 @@ const getSelectedKeyframeDeletion = ({ nodePathInfo, frame, sequences, overrideI
|
|
|
51
51
|
const effectKeyframeDisplayOffset = (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
52
52
|
propStatus: effectPropStatus,
|
|
53
53
|
keyframeDisplayOffset: (_c = track === null || track === void 0 ? void 0 : track.keyframeDisplayOffset) !== null && _c !== void 0 ? _c : 0,
|
|
54
|
+
keyframePlaybackRate: (_d = track === null || track === void 0 ? void 0 : track.keyframePlaybackRate) !== null && _d !== void 0 ? _d : 1,
|
|
54
55
|
});
|
|
55
|
-
const effectSourceFrame =
|
|
56
|
-
|
|
56
|
+
const effectSourceFrame = (0, get_timeline_keyframes_1.getKeyframeSourceFrame)({
|
|
57
|
+
displayFrame: frame,
|
|
58
|
+
keyframeDisplayOffset: effectKeyframeDisplayOffset,
|
|
59
|
+
keyframePlaybackRate: (_e = track === null || track === void 0 ? void 0 : track.keyframePlaybackRate) !== null && _e !== void 0 ? _e : 1,
|
|
60
|
+
propStatus: effectPropStatus,
|
|
61
|
+
});
|
|
62
|
+
const effectPlayheadSourceFrame = (timelinePosition - effectKeyframeDisplayOffset) *
|
|
63
|
+
((_f = track === null || track === void 0 ? void 0 : track.keyframePlaybackRate) !== null && _f !== void 0 ? _f : 1);
|
|
57
64
|
const effectValueWhenLastKeyframeDeleted = getValueWhenLastKeyframeDeleted({
|
|
58
65
|
propStatus: effectPropStatus,
|
|
59
66
|
playheadSourceFrame: effectPlayheadSourceFrame,
|
|
@@ -71,13 +78,20 @@ const getSelectedKeyframeDeletion = ({ nodePathInfo, frame, sequences, overrideI
|
|
|
71
78
|
}
|
|
72
79
|
const sequencePropStatus = (_a = remotion_1.Internals.getPropStatusesCtx(propStatuses, nodePath)) === null || _a === void 0 ? void 0 : _a[field.fieldKey];
|
|
73
80
|
const keyframeDisplayOffset = (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
74
|
-
propStatus: sequencePropStatus,
|
|
75
|
-
keyframeDisplayOffset: (
|
|
81
|
+
propStatus: sequencePropStatus !== null && sequencePropStatus !== void 0 ? sequencePropStatus : null,
|
|
82
|
+
keyframeDisplayOffset: (_g = track === null || track === void 0 ? void 0 : track.keyframeDisplayOffset) !== null && _g !== void 0 ? _g : 0,
|
|
83
|
+
keyframePlaybackRate: (_h = track === null || track === void 0 ? void 0 : track.keyframePlaybackRate) !== null && _h !== void 0 ? _h : 1,
|
|
84
|
+
});
|
|
85
|
+
const sourceFrame = (0, get_timeline_keyframes_1.getKeyframeSourceFrame)({
|
|
86
|
+
displayFrame: frame,
|
|
87
|
+
keyframeDisplayOffset,
|
|
88
|
+
keyframePlaybackRate: (_j = track === null || track === void 0 ? void 0 : track.keyframePlaybackRate) !== null && _j !== void 0 ? _j : 1,
|
|
89
|
+
propStatus: sequencePropStatus !== null && sequencePropStatus !== void 0 ? sequencePropStatus : null,
|
|
76
90
|
});
|
|
77
|
-
const
|
|
78
|
-
|
|
91
|
+
const playheadSourceFrame = (timelinePosition - keyframeDisplayOffset) *
|
|
92
|
+
((_k = track === null || track === void 0 ? void 0 : track.keyframePlaybackRate) !== null && _k !== void 0 ? _k : 1);
|
|
79
93
|
const sequenceValueWhenLastKeyframeDeleted = getValueWhenLastKeyframeDeleted({
|
|
80
|
-
propStatus: sequencePropStatus,
|
|
94
|
+
propStatus: sequencePropStatus !== null && sequencePropStatus !== void 0 ? sequencePropStatus : null,
|
|
81
95
|
playheadSourceFrame,
|
|
82
96
|
});
|
|
83
97
|
return {
|
|
@@ -3,12 +3,8 @@ import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-s
|
|
|
3
3
|
import type { ConfirmationDialogFunction } from '../ConfirmationDialog-types';
|
|
4
4
|
import type { SetPropStatuses } from './save-sequence-prop';
|
|
5
5
|
export declare const deleteSequencesFromSource: (nodePathInfos: SequenceNodePathInfo[], confirm: ConfirmationDialogFunction) => Promise<boolean>;
|
|
6
|
-
export declare const getTimelineSelectionAfterDeletingItems: ({ selections,
|
|
6
|
+
export declare const getTimelineSelectionAfterDeletingItems: ({ selections, }: {
|
|
7
7
|
readonly selections: readonly import("@remotion/canvas").CanvasSelectionItem[];
|
|
8
|
-
readonly sequences?: TSequence[] | undefined;
|
|
9
|
-
readonly overrideIdsToNodePaths?: OverrideIdToNodePaths | undefined;
|
|
10
|
-
readonly propStatuses?: PropStatuses | undefined;
|
|
11
|
-
readonly timelinePosition?: number | undefined;
|
|
12
8
|
}) => readonly import("@remotion/canvas").CanvasSelectionItem[];
|
|
13
9
|
export declare const deleteSelectedTimelineItems: ({ selections, sequences, overrideIdsToNodePaths, setPropStatuses, clientId, confirm, propStatuses, timelinePosition, }: {
|
|
14
10
|
selections: readonly import("@remotion/canvas").CanvasSelectionItem[];
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.deleteSelectedTimelineItems = exports.getTimelineSelectionAfterDeletingItems = exports.deleteSequencesFromSource = void 0;
|
|
4
|
-
const remotion_1 = require("remotion");
|
|
5
4
|
const browser_studio_operations_1 = require("../../helpers/browser-studio-operations");
|
|
6
|
-
const
|
|
5
|
+
const delete_jsx_nodes_api_1 = require("../delete-jsx-nodes-api");
|
|
7
6
|
const effect_operations_api_1 = require("../effect-operations-api");
|
|
8
7
|
const NotificationCenter_1 = require("../Notifications/NotificationCenter");
|
|
9
8
|
const delete_selected_keyframe_1 = require("./delete-selected-keyframe");
|
|
10
|
-
const find_track_for_node_path_info_1 = require("./find-track-for-node-path-info");
|
|
11
|
-
const get_easing_selection_after_keyframe_delete_1 = require("./get-easing-selection-after-keyframe-delete");
|
|
12
|
-
const get_timeline_keyframes_1 = require("./get-timeline-keyframes");
|
|
13
|
-
const parse_keyframe_field_from_node_path_1 = require("./parse-keyframe-field-from-node-path");
|
|
14
9
|
const TimelineSelection_1 = require("./TimelineSelection");
|
|
15
|
-
const update_selected_easing_1 = require("./update-selected-easing");
|
|
16
10
|
const confirmDeletingDuplicatedSequences = (nodePathInfos, confirm) => {
|
|
17
11
|
const duplicatedNodePathInfos = nodePathInfos.filter((nodePathInfo) => nodePathInfo.numberOfSequencesWithThisNodePath > 1);
|
|
18
12
|
if (duplicatedNodePathInfos.length === 0) {
|
|
@@ -39,7 +33,7 @@ const deleteSequencesFromSource = async (nodePathInfos, confirm) => {
|
|
|
39
33
|
if (!(await confirmDeletingDuplicatedSequences(nodePathInfos, confirm))) {
|
|
40
34
|
return false;
|
|
41
35
|
}
|
|
42
|
-
return (0,
|
|
36
|
+
return (0, delete_jsx_nodes_api_1.deleteJsxNodes)({
|
|
43
37
|
nodes: nodePathInfos.map((nodePathInfo) => {
|
|
44
38
|
const nodePath = nodePathInfo.sequenceSubscriptionKey;
|
|
45
39
|
return {
|
|
@@ -111,95 +105,15 @@ const getSequenceSelectionAfterDeletingEffect = (selection) => {
|
|
|
111
105
|
},
|
|
112
106
|
};
|
|
113
107
|
};
|
|
114
|
-
const
|
|
115
|
-
var _a;
|
|
116
|
-
if (sequences === undefined ||
|
|
117
|
-
overrideIdsToNodePaths === undefined ||
|
|
118
|
-
propStatuses === undefined ||
|
|
119
|
-
timelinePosition === undefined) {
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
const keyframeSelections = selections.filter(isKeyframeSelection);
|
|
123
|
-
if (keyframeSelections.length !== 1) {
|
|
124
|
-
return null;
|
|
125
|
-
}
|
|
126
|
-
const [selection] = keyframeSelections;
|
|
127
|
-
if (!selection) {
|
|
128
|
-
return null;
|
|
129
|
-
}
|
|
130
|
-
const field = (0, parse_keyframe_field_from_node_path_1.parseKeyframeFieldFromNodePath)(selection.nodePathInfo.auxiliaryKeys);
|
|
131
|
-
if (field === null) {
|
|
132
|
-
return null;
|
|
133
|
-
}
|
|
134
|
-
const track = (0, find_track_for_node_path_info_1.findTrackForNodePathInfo)({
|
|
135
|
-
sequences,
|
|
136
|
-
overrideIdsToNodePaths,
|
|
137
|
-
nodePathInfo: selection.nodePathInfo,
|
|
138
|
-
});
|
|
139
|
-
if (!track || !track.sequence.controls) {
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
|
-
const nodePath = selection.nodePathInfo.sequenceSubscriptionKey;
|
|
143
|
-
if (field.type === 'sequence') {
|
|
144
|
-
const sequencePropStatus = (_a = remotion_1.Internals.getPropStatusesCtx(propStatuses, nodePath)) === null || _a === void 0 ? void 0 : _a[field.fieldKey];
|
|
145
|
-
if ((sequencePropStatus === null || sequencePropStatus === void 0 ? void 0 : sequencePropStatus.status) !== 'keyframed' ||
|
|
146
|
-
!(0, update_selected_easing_1.canEditEasingForInterpolationFunction)(sequencePropStatus.interpolationFunction)) {
|
|
147
|
-
return null;
|
|
148
|
-
}
|
|
149
|
-
return (0, get_easing_selection_after_keyframe_delete_1.getEasingSelectionAfterKeyframeDelete)({
|
|
150
|
-
deletedSourceFrames: [
|
|
151
|
-
selection.frame -
|
|
152
|
-
(0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
153
|
-
propStatus: sequencePropStatus,
|
|
154
|
-
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
155
|
-
}),
|
|
156
|
-
],
|
|
157
|
-
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
158
|
-
nodePathInfo: selection.nodePathInfo,
|
|
159
|
-
propStatus: sequencePropStatus,
|
|
160
|
-
timelinePosition,
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
const effectStatus = remotion_1.Internals.getEffectPropStatusesCtx({
|
|
164
|
-
propStatuses,
|
|
165
|
-
nodePath,
|
|
166
|
-
effectIndex: field.effectIndex,
|
|
167
|
-
});
|
|
168
|
-
const effectPropStatus = effectStatus.type === 'can-update-effect'
|
|
169
|
-
? effectStatus.props[field.fieldKey]
|
|
170
|
-
: null;
|
|
171
|
-
if ((effectPropStatus === null || effectPropStatus === void 0 ? void 0 : effectPropStatus.status) !== 'keyframed' ||
|
|
172
|
-
!(0, update_selected_easing_1.canEditEasingForInterpolationFunction)(effectPropStatus.interpolationFunction)) {
|
|
173
|
-
return null;
|
|
174
|
-
}
|
|
175
|
-
return (0, get_easing_selection_after_keyframe_delete_1.getEasingSelectionAfterKeyframeDelete)({
|
|
176
|
-
deletedSourceFrames: [
|
|
177
|
-
selection.frame -
|
|
178
|
-
(0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
179
|
-
propStatus: effectPropStatus,
|
|
180
|
-
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
181
|
-
}),
|
|
182
|
-
],
|
|
183
|
-
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
184
|
-
nodePathInfo: selection.nodePathInfo,
|
|
185
|
-
propStatus: effectPropStatus,
|
|
186
|
-
timelinePosition,
|
|
187
|
-
});
|
|
188
|
-
};
|
|
189
|
-
const getTimelineSelectionAfterDeletingItems = ({ selections, sequences, overrideIdsToNodePaths, propStatuses, timelinePosition, }) => {
|
|
190
|
-
const easingSelection = getEasingSelectionAfterDeletingKeyframes({
|
|
191
|
-
selections,
|
|
192
|
-
sequences,
|
|
193
|
-
overrideIdsToNodePaths,
|
|
194
|
-
propStatuses,
|
|
195
|
-
timelinePosition,
|
|
196
|
-
});
|
|
197
|
-
if (easingSelection !== null) {
|
|
198
|
-
return [easingSelection];
|
|
199
|
-
}
|
|
108
|
+
const getTimelineSelectionAfterDeletingItems = ({ selections, }) => {
|
|
200
109
|
const nextSelections = new Map();
|
|
201
110
|
for (const selection of selections) {
|
|
202
|
-
|
|
111
|
+
if (selection.type === 'easing') {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const nextSelection = selection.type === 'keyframe'
|
|
115
|
+
? (0, TimelineSelection_1.getTimelineSelectionFromNodePathInfo)(selection.nodePathInfo)
|
|
116
|
+
: getSequenceSelectionAfterDeletingEffect(selection);
|
|
203
117
|
if (!nextSelection) {
|
|
204
118
|
return [];
|
|
205
119
|
}
|
|
@@ -8,9 +8,10 @@ type AnimationItemSelection = Extract<TimelineSelection, {
|
|
|
8
8
|
type AnimationKeyframe = {
|
|
9
9
|
readonly frame: number;
|
|
10
10
|
};
|
|
11
|
-
export declare const getAnimationItemSelectionForSourceFrame: ({ includeEasings, keyframeDisplayOffset, keyframes, nodePathInfo, sourceFrame, }: {
|
|
11
|
+
export declare const getAnimationItemSelectionForSourceFrame: ({ includeEasings, keyframeDisplayOffset, keyframePlaybackRate, keyframes, nodePathInfo, sourceFrame, }: {
|
|
12
12
|
readonly includeEasings: boolean;
|
|
13
13
|
readonly keyframeDisplayOffset: number;
|
|
14
|
+
readonly keyframePlaybackRate: number;
|
|
14
15
|
readonly keyframes: readonly AnimationKeyframe[];
|
|
15
16
|
readonly nodePathInfo: SequenceNodePathInfo;
|
|
16
17
|
readonly sourceFrame: number;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getAnimationItemSelectionForSourceFrame = void 0;
|
|
4
|
-
const getKeyframeSelection = ({ keyframe, keyframeDisplayOffset, nodePathInfo, }) => {
|
|
4
|
+
const getKeyframeSelection = ({ keyframe, keyframeDisplayOffset, keyframePlaybackRate, nodePathInfo, }) => {
|
|
5
5
|
return {
|
|
6
6
|
type: 'keyframe',
|
|
7
7
|
nodePathInfo,
|
|
8
|
-
frame: keyframe.frame + keyframeDisplayOffset,
|
|
8
|
+
frame: keyframe.frame / keyframePlaybackRate + keyframeDisplayOffset,
|
|
9
9
|
};
|
|
10
10
|
};
|
|
11
|
-
const getAnimationItemSelectionForSourceFrame = ({ includeEasings, keyframeDisplayOffset, keyframes, nodePathInfo, sourceFrame, }) => {
|
|
11
|
+
const getAnimationItemSelectionForSourceFrame = ({ includeEasings, keyframeDisplayOffset, keyframePlaybackRate, keyframes, nodePathInfo, sourceFrame, }) => {
|
|
12
12
|
const firstKeyframe = keyframes[0];
|
|
13
13
|
if (!firstKeyframe) {
|
|
14
14
|
return null;
|
|
@@ -19,6 +19,7 @@ const getAnimationItemSelectionForSourceFrame = ({ includeEasings, keyframeDispl
|
|
|
19
19
|
return getKeyframeSelection({
|
|
20
20
|
keyframe,
|
|
21
21
|
keyframeDisplayOffset,
|
|
22
|
+
keyframePlaybackRate,
|
|
22
23
|
nodePathInfo,
|
|
23
24
|
});
|
|
24
25
|
}
|
|
@@ -33,8 +34,8 @@ const getAnimationItemSelectionForSourceFrame = ({ includeEasings, keyframeDispl
|
|
|
33
34
|
return {
|
|
34
35
|
type: 'easing',
|
|
35
36
|
nodePathInfo,
|
|
36
|
-
fromFrame: keyframe.frame + keyframeDisplayOffset,
|
|
37
|
-
toFrame: nextKeyframe.frame + keyframeDisplayOffset,
|
|
37
|
+
fromFrame: keyframe.frame / keyframePlaybackRate + keyframeDisplayOffset,
|
|
38
|
+
toFrame: nextKeyframe.frame / keyframePlaybackRate + keyframeDisplayOffset,
|
|
38
39
|
segmentIndex: i,
|
|
39
40
|
};
|
|
40
41
|
}
|
|
@@ -43,6 +44,7 @@ const getAnimationItemSelectionForSourceFrame = ({ includeEasings, keyframeDispl
|
|
|
43
44
|
return getKeyframeSelection({
|
|
44
45
|
keyframe: sourceFrame < firstKeyframe.frame ? firstKeyframe : lastKeyframe,
|
|
45
46
|
keyframeDisplayOffset,
|
|
47
|
+
keyframePlaybackRate,
|
|
46
48
|
nodePathInfo,
|
|
47
49
|
});
|
|
48
50
|
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CanUpdateSequencePropStatusKeyframed, InteractivitySchema, PropStatuses, SequencePropsSubscriptionKey, TSequence } from 'remotion';
|
|
2
|
+
export type TimelineSequenceKeyframeDragTarget = {
|
|
3
|
+
readonly parentPlaybackRate: number;
|
|
4
|
+
readonly fileName: string;
|
|
5
|
+
readonly fieldKey: string;
|
|
6
|
+
readonly isDescendant: boolean;
|
|
7
|
+
readonly nodePath: SequencePropsSubscriptionKey;
|
|
8
|
+
readonly schema: InteractivitySchema;
|
|
9
|
+
readonly status: CanUpdateSequencePropStatusKeyframed;
|
|
10
|
+
};
|
|
11
|
+
export type TimelineSequenceEffectKeyframeDragTarget = TimelineSequenceKeyframeDragTarget & {
|
|
12
|
+
readonly effectIndex: number;
|
|
13
|
+
};
|
|
14
|
+
export declare const getKeyframedSequenceDragTargets: ({ nodePath, sequence, sequences, propStatuses, isDescendant, }: {
|
|
15
|
+
readonly nodePath: SequencePropsSubscriptionKey;
|
|
16
|
+
readonly sequence: TSequence;
|
|
17
|
+
readonly sequences: TSequence[];
|
|
18
|
+
readonly propStatuses: PropStatuses;
|
|
19
|
+
readonly isDescendant: boolean;
|
|
20
|
+
}) => {
|
|
21
|
+
readonly effectKeyframes: TimelineSequenceEffectKeyframeDragTarget[];
|
|
22
|
+
readonly sequenceKeyframes: TimelineSequenceKeyframeDragTarget[];
|
|
23
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getKeyframedSequenceDragTargets = void 0;
|
|
4
|
+
const canvas_1 = require("@remotion/canvas");
|
|
5
|
+
const remotion_1 = require("remotion");
|
|
6
|
+
const { getParentSequencePlaybackRate } = canvas_1.CanvasInternals;
|
|
7
|
+
const getKeyframedSequenceDragTargets = ({ nodePath, sequence, sequences, propStatuses, isDescendant, }) => {
|
|
8
|
+
var _a;
|
|
9
|
+
const status = propStatuses[remotion_1.Internals.makeSequencePropsSubscriptionKey(nodePath)];
|
|
10
|
+
if (status === null || status === undefined || !status.canUpdate) {
|
|
11
|
+
return { effectKeyframes: [], sequenceKeyframes: [] };
|
|
12
|
+
}
|
|
13
|
+
const sequenceSchema = (_a = sequence.controls) === null || _a === void 0 ? void 0 : _a.schema;
|
|
14
|
+
const sequenceKeyframes = sequenceSchema === undefined
|
|
15
|
+
? []
|
|
16
|
+
: Object.entries(status.props).flatMap(([fieldKey, propStatus]) => propStatus.status === 'keyframed' &&
|
|
17
|
+
(!isDescendant || propStatus.keyframeDisplayOffsetAdjustment !== null)
|
|
18
|
+
? [
|
|
19
|
+
{
|
|
20
|
+
parentPlaybackRate: getParentSequencePlaybackRate(sequence, sequences),
|
|
21
|
+
fileName: nodePath.absolutePath,
|
|
22
|
+
fieldKey,
|
|
23
|
+
isDescendant,
|
|
24
|
+
nodePath,
|
|
25
|
+
schema: sequenceSchema,
|
|
26
|
+
status: propStatus,
|
|
27
|
+
},
|
|
28
|
+
]
|
|
29
|
+
: []);
|
|
30
|
+
const effectKeyframes = status.effects.flatMap((effectStatus) => {
|
|
31
|
+
var _a;
|
|
32
|
+
if (!effectStatus.canUpdate) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
const effectSchema = (_a = sequence.effects[effectStatus.effectIndex]) === null || _a === void 0 ? void 0 : _a.schema;
|
|
36
|
+
if (effectSchema === undefined) {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
return Object.entries(effectStatus.props).flatMap(([fieldKey, propStatus]) => propStatus.status === 'keyframed' &&
|
|
40
|
+
(!isDescendant || propStatus.keyframeDisplayOffsetAdjustment !== null)
|
|
41
|
+
? [
|
|
42
|
+
{
|
|
43
|
+
effectIndex: effectStatus.effectIndex,
|
|
44
|
+
parentPlaybackRate: getParentSequencePlaybackRate(sequence, sequences),
|
|
45
|
+
fileName: nodePath.absolutePath,
|
|
46
|
+
fieldKey,
|
|
47
|
+
isDescendant,
|
|
48
|
+
nodePath,
|
|
49
|
+
schema: effectSchema,
|
|
50
|
+
status: propStatus,
|
|
51
|
+
},
|
|
52
|
+
]
|
|
53
|
+
: []);
|
|
54
|
+
});
|
|
55
|
+
return { effectKeyframes, sequenceKeyframes };
|
|
56
|
+
};
|
|
57
|
+
exports.getKeyframedSequenceDragTargets = getKeyframedSequenceDragTargets;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type GetDragOverrides, type GetEffectDragOverrides, type PropStatuses, type SequencePropsSubscriptionKey } from 'remotion';
|
|
2
2
|
import type { TimelineTreeNode } from '../../helpers/timeline-layout';
|
|
3
|
-
export declare const getNodeKeyframes: ({ node, nodePath, propStatuses, keyframeDisplayOffset, getDragOverrides, getEffectDragOverrides, timelinePosition, }: {
|
|
3
|
+
export declare const getNodeKeyframes: ({ node, nodePath, propStatuses, keyframeDisplayOffset, keyframePlaybackRate, getDragOverrides, getEffectDragOverrides, timelinePosition, }: {
|
|
4
4
|
node: TimelineTreeNode;
|
|
5
5
|
nodePath: SequencePropsSubscriptionKey;
|
|
6
6
|
propStatuses: PropStatuses;
|
|
7
7
|
keyframeDisplayOffset: number;
|
|
8
|
+
keyframePlaybackRate: number;
|
|
8
9
|
getDragOverrides: GetDragOverrides;
|
|
9
10
|
getEffectDragOverrides: GetEffectDragOverrides;
|
|
10
11
|
timelinePosition: number;
|