@remotion/studio 4.0.527 → 4.0.528
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AgentPrompt.js +1 -2
- package/dist/components/AudioWaveform.d.ts +1 -0
- package/dist/components/AudioWaveform.js +10 -14
- package/dist/components/CodeFrame.js +1 -1
- package/dist/components/ColorPicker/checker.d.ts +1 -1
- package/dist/components/CurrentAsset.js +3 -2
- package/dist/components/EditorRuler/Ruler.js +6 -3
- package/dist/components/EffectPickerModal.js +69 -43
- package/dist/components/ElementInstallConfirmation.js +3 -3
- package/dist/components/ElementLibrariesSettings.d.ts +2 -0
- package/dist/components/ElementLibrariesSettings.js +200 -0
- package/dist/components/InitialCompositionLoader.js +3 -1
- package/dist/components/InspectorOpenInEditor.js +13 -0
- package/dist/components/InspectorPanel/AlignmentControls.js +28 -9
- package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +1 -1
- package/dist/components/InspectorPanel/EasingInspector.js +6 -2
- package/dist/components/InspectorPanel/ElementLibraryButton.js +1 -1
- package/dist/components/InspectorPanel/KeyframeEasingNavigator.js +1 -1
- package/dist/components/InspectorPanel/KeyframeInspector.js +28 -24
- package/dist/components/InspectorPanel/MultiSequenceNumberField.js +1 -1
- package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -1
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +30 -2
- package/dist/components/InspectorPanel/SequenceWrapAction.d.ts +8 -0
- package/dist/components/InspectorPanel/SequenceWrapAction.js +151 -0
- package/dist/components/InspectorPanel/easing-inspector-selection.d.ts +2 -1
- package/dist/components/InspectorPanel/easing-inspector-selection.js +4 -3
- package/dist/components/InspectorPanel/keyframe-inspector-frame.d.ts +2 -1
- package/dist/components/InspectorPanel/keyframe-inspector-frame.js +2 -2
- package/dist/components/InspectorSequenceSection.d.ts +1 -0
- package/dist/components/InspectorSequenceSection.js +7 -5
- package/dist/components/KeyboardShortcutsSettings.js +1 -1
- package/dist/components/Menu/styles.d.ts +2 -2
- package/dist/components/Modals.js +7 -6
- package/dist/components/ModelManager.js +10 -9
- package/dist/components/NewComposition/CancelButton.js +10 -4
- package/dist/components/NewComposition/InputDragger.d.ts +3 -1
- package/dist/components/NewComposition/InputDragger.js +28 -9
- package/dist/components/NewComposition/NewComposition.js +7 -6
- package/dist/components/NewComposition/RemInput.d.ts +1 -1
- package/dist/components/NewComposition/menu-typeahead.js +1 -1
- package/dist/components/Preview.js +3 -2
- package/dist/components/RenderModal/SchemaEditor/create-zod-values.js +1 -2
- package/dist/components/RenderModal/WebRenderModalPicture.js +1 -2
- package/dist/components/RenderQueue/CaptionQueueItem.js +14 -5
- package/dist/components/RenderQueue/CaptionQueueProcessor.js +30 -7
- package/dist/components/RenderQueue/QueueJobError.d.ts +8 -0
- package/dist/components/RenderQueue/QueueJobError.js +24 -0
- package/dist/components/RenderQueue/QueueJobErrorModal.d.ts +8 -0
- package/dist/components/RenderQueue/QueueJobErrorModal.js +63 -0
- package/dist/components/RenderQueue/RenderQueueItemCancelButton.d.ts +3 -1
- package/dist/components/RenderQueue/RenderQueueItemCancelButton.js +11 -4
- package/dist/components/RenderQueue/RenderQueueRepeat.d.ts +3 -1
- package/dist/components/RenderQueue/RenderQueueRepeat.js +20 -3
- package/dist/components/RenderQueue/VideoMattingQueueItem.js +24 -27
- package/dist/components/RenderQueue/VideoMattingQueueProcessor.js +68 -28
- package/dist/components/RenderQueue/caption-job-types.d.ts +3 -1
- package/dist/components/RenderQueue/context.d.ts +4 -0
- package/dist/components/RenderQueue/context.js +58 -8
- package/dist/components/RenderQueue/index.js +2 -3
- package/dist/components/RenderQueue/load-model-for-job.d.ts +2 -1
- package/dist/components/RenderQueue/load-model-for-job.js +5 -1
- package/dist/components/RenderQueue/video-matting-job-types.d.ts +13 -6
- package/dist/components/SelectedOutlineCropControls.js +2 -1
- package/dist/components/SelectedOutlineEditingHandles.js +9 -2
- package/dist/components/SelectedOutlineElement.js +9 -3
- package/dist/components/SelectedOutlineKeyboardControls.d.ts +2 -4
- package/dist/components/SelectedOutlineKeyboardControls.js +4 -22
- package/dist/components/SelectedOutlineOverlay.js +152 -106
- package/dist/components/SelectedOutlinePathPoints.d.ts +8 -0
- package/dist/components/SelectedOutlinePathPoints.js +433 -0
- package/dist/components/SelectedOutlinePolygon.js +21 -46
- package/dist/components/SelectedOutlineRenderer.d.ts +3 -5
- package/dist/components/SelectedOutlineRenderer.js +32 -136
- package/dist/components/SelectedOutlineTransformOriginHandle.js +3 -2
- package/dist/components/SelectedOutlineUvControls.js +12 -7
- package/dist/components/SettingsModal.js +30 -3
- package/dist/components/SettingsModalFooter.d.ts +1 -0
- package/dist/components/SettingsModalFooter.js +7 -3
- package/dist/components/ShowOutlinesProvider.js +1 -1
- package/dist/components/SkillsSettings.d.ts +0 -1
- package/dist/components/SkillsSettings.js +13 -14
- package/dist/components/Splitter/SplitterElement.js +1 -2
- package/dist/components/TimeValue.js +1 -1
- package/dist/components/Timeline/LoopedTimelineIndicators.d.ts +1 -0
- package/dist/components/Timeline/LoopedTimelineIndicators.js +7 -6
- package/dist/components/Timeline/TimelineArrayField.js +1 -1
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +0 -1
- package/dist/components/Timeline/TimelineColorField.js +1 -1
- package/dist/components/Timeline/TimelineDragHandler.js +1 -1
- package/dist/components/Timeline/TimelineEffectPropItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineEffectPropItem.js +12 -5
- package/dist/components/Timeline/TimelineExpandedRow.d.ts +1 -0
- package/dist/components/Timeline/TimelineExpandedRow.js +5 -4
- package/dist/components/Timeline/TimelineExpandedSection.d.ts +1 -0
- package/dist/components/Timeline/TimelineExpandedSection.js +2 -2
- package/dist/components/Timeline/TimelineExpandedTrackKeyframes.d.ts +1 -0
- package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +3 -1
- package/dist/components/Timeline/TimelineFontFamilyField.js +12 -12
- package/dist/components/Timeline/TimelineKeyframeControls.d.ts +1 -0
- package/dist/components/Timeline/TimelineKeyframeControls.js +39 -28
- package/dist/components/Timeline/TimelineLayerChildren.js +1 -1
- package/dist/components/Timeline/TimelineList.js +1 -1
- package/dist/components/Timeline/TimelineNumberField.js +2 -4
- package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +1 -1
- package/dist/components/Timeline/TimelineSelection.d.ts +9 -9
- package/dist/components/Timeline/TimelineSelection.js +16 -9
- package/dist/components/Timeline/TimelineSequence.d.ts +3 -1
- package/dist/components/Timeline/TimelineSequence.js +39 -21
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequenceItem.js +18 -8
- package/dist/components/Timeline/TimelineSequencePropItem.d.ts +3 -0
- package/dist/components/Timeline/TimelineSequencePropItem.js +262 -25
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +11 -13
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +98 -77
- package/dist/components/Timeline/TimelineTextContentField.js +27 -4
- package/dist/components/Timeline/TimelineTimeIndicators.js +10 -5
- package/dist/components/Timeline/TimelineTrack.js +1 -1
- package/dist/components/Timeline/TimelineTrimTooltip.d.ts +11 -0
- package/dist/components/Timeline/TimelineTrimTooltip.js +41 -0
- package/dist/components/Timeline/TimelineVideoInfo.d.ts +1 -0
- package/dist/components/Timeline/TimelineVideoInfo.js +13 -10
- package/dist/components/Timeline/delete-selected-keyframe.js +22 -8
- package/dist/components/Timeline/delete-selected-timeline-item.d.ts +1 -5
- package/dist/components/Timeline/delete-selected-timeline-item.js +7 -93
- package/dist/components/Timeline/get-animation-item-selection-for-frame.d.ts +2 -1
- package/dist/components/Timeline/get-animation-item-selection-for-frame.js +7 -5
- package/dist/components/Timeline/get-keyframed-sequence-drag-targets.d.ts +23 -0
- package/dist/components/Timeline/get-keyframed-sequence-drag-targets.js +57 -0
- package/dist/components/Timeline/get-node-keyframes.d.ts +2 -1
- package/dist/components/Timeline/get-node-keyframes.js +6 -4
- package/dist/components/Timeline/get-playback-rate-keyframe-changes.d.ts +21 -0
- package/dist/components/Timeline/get-playback-rate-keyframe-changes.js +142 -0
- package/dist/components/Timeline/get-timeline-keyframes.d.ts +15 -2
- package/dist/components/Timeline/get-timeline-keyframes.js +44 -6
- package/dist/components/Timeline/keyframe-clipboard.js +17 -3
- package/dist/components/Timeline/split-selected-timeline-item.js +4 -1
- package/dist/components/Timeline/timeline-field-display-utils.js +1 -0
- package/dist/components/Timeline/timeline-field-row-layout.js +1 -0
- package/dist/components/Timeline/use-delete-timeline-items.js +17 -11
- package/dist/components/Timeline/use-expanded-track-keyframe-rows.d.ts +2 -1
- package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +3 -1
- package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +7 -3
- package/dist/components/Timeline/use-timeline-keyframe-drag.js +28 -19
- package/dist/components/Transcription/Models.js +1 -1
- package/dist/components/Transcription/TranscriptionModal.js +3 -1
- package/dist/components/Transcription/resample-media-to-16-khz.d.ts +2 -1
- package/dist/components/Transcription/resample-media-to-16-khz.js +20 -2
- package/dist/components/UpdatesSettings.js +2 -0
- package/dist/components/VideoMatting/Models.js +1 -1
- package/dist/components/VideoMatting/VideoMattingModal.js +30 -47
- package/dist/components/VideoMatting/VideoMattingModalWithOptionalPackage.js +1 -1
- package/dist/components/WebMcp.js +22 -40
- package/dist/components/composition-drop-preview.js +1 -0
- package/dist/components/effect-drag-and-drop.d.ts +13 -5
- package/dist/components/effect-drag-and-drop.js +19 -4
- package/dist/components/get-open-in-menu-items.d.ts +2 -1
- package/dist/components/get-open-in-menu-items.js +17 -1
- package/dist/components/selected-outline-drag.d.ts +1 -6
- package/dist/components/selected-outline-drag.js +22 -6
- package/dist/components/selected-outline-geometry.d.ts +2 -18
- package/dist/components/selected-outline-measurement.d.ts +23 -41
- package/dist/components/selected-outline-measurement.js +14 -252
- package/dist/components/selected-outline-order.d.ts +4 -11
- package/dist/components/selected-outline-order.js +2 -254
- package/dist/components/selected-outline-snap.d.ts +1 -1
- package/dist/components/selected-outline-snap.js +2 -1
- package/dist/components/selected-outline-types.d.ts +18 -28
- package/dist/components/selected-outline-uv.d.ts +4 -4
- package/dist/components/selected-outline-uv.js +6 -111
- package/dist/components/sequence-props-api.js +0 -10
- package/dist/components/use-selected-outline-control-target.js +12 -21
- package/dist/components/wrap-jsx-node-api.d.ts +2 -0
- package/dist/components/wrap-jsx-node-api.js +13 -0
- package/dist/error-overlay/remotion-overlay/OpenInEditor.js +45 -2
- package/dist/error-overlay/remotion-overlay/StackFrame.js +32 -3
- package/dist/esm/{CaptionQueueProcessor-npa6szn1.mjs → CaptionQueueProcessor-nr7hjcga.mjs} +63 -17
- package/dist/esm/LazyModels-ajkn7fs3.mjs +12 -0
- package/dist/esm/LazyModels-g1g7cf4e.mjs +12 -0
- package/dist/esm/{TranscriptionModal-79m5wgcj.mjs → TranscriptionModal-e18bzbkb.mjs} +15 -15
- package/dist/esm/{VideoMattingModal-31pew0xj.mjs → VideoMattingModal-5bz2s4rs.mjs} +47 -65
- package/dist/esm/{VideoMattingQueueProcessor-t1hgm2rm.mjs → VideoMattingQueueProcessor-4tkj0f4k.mjs} +69 -26
- package/dist/esm/{index-v4tr1bft.mjs → index-09txs1bj.mjs} +5 -0
- package/dist/esm/{index-n5gmcvhz.mjs → index-5ycb9e9q.mjs} +2 -4
- package/dist/esm/{index-5t2dwxsk.mjs → index-890dd9b3.mjs} +259 -21
- package/dist/esm/{index-ac5550e7.mjs → index-8nt6a0mw.mjs} +3 -3
- package/dist/esm/{index-614tdz2q.mjs → index-9q9w8v9p.mjs} +3 -3
- package/dist/esm/{index-s7qa3xbw.mjs → index-c2wabcdt.mjs} +6 -6
- package/dist/esm/{index-r1gr3j3a.mjs → index-dfy1t576.mjs} +50 -1
- package/dist/esm/{index-21hxsfaa.mjs → index-dh3zk2hv.mjs} +6 -25
- package/dist/esm/{index-4zen9prq.mjs → index-dpyss74p.mjs} +6563 -5485
- package/dist/esm/{index-9x6e1dq0.mjs → index-hqxc6tzp.mjs} +40 -6
- package/dist/esm/{index-9xxg6218.mjs → index-qve7mdfp.mjs} +19 -1
- package/dist/esm/{index-e855w59j.mjs → index-s6qya2gg.mjs} +3 -5
- package/dist/esm/index-t7tbt980.mjs +103 -0
- package/dist/esm/{index-r0ejh5sy.mjs → index-t7xnxdf8.mjs} +44 -26
- package/dist/esm/index-wqc43mw0.mjs +158 -0
- package/dist/esm/{index-ppspzgn9.mjs → index-x6r9bn12.mjs} +4026 -4761
- package/dist/esm/{index-vxwg66ar.mjs → index-xac20sv4.mjs} +44 -57
- package/dist/esm/index.mjs +4 -5
- package/dist/esm/internals.mjs +13 -13
- package/dist/esm/previewEntry.mjs +18 -15
- package/dist/esm/renderEntry.mjs +5 -1
- package/dist/helpers/calculate-timeline.d.ts +5 -1
- package/dist/helpers/calculate-timeline.js +1 -1
- package/dist/helpers/checkerboard-background.d.ts +2 -2
- package/dist/helpers/colors.d.ts +132 -112
- package/dist/helpers/colors.js +117 -95
- package/dist/helpers/create-folder-tree.js +2 -1
- package/dist/helpers/editor-guide-selection.d.ts +1 -1
- package/dist/helpers/editor-ruler.js +23 -12
- package/dist/helpers/get-connected-compositions.d.ts +6 -1
- package/dist/helpers/get-connected-compositions.js +1 -1
- package/dist/helpers/get-sequence-double-click-action.js +1 -1
- package/dist/helpers/get-sequence-visible-range.d.ts +1 -1
- package/dist/helpers/get-sequence-visible-range.js +2 -5
- package/dist/helpers/get-timeline-nestedness.d.ts +1 -1
- package/dist/helpers/get-timeline-nestedness.js +1 -1
- package/dist/helpers/get-timeline-sequence-sort-key.d.ts +1 -1
- package/dist/helpers/get-timeline-sequence-sort-key.js +1 -1
- package/dist/helpers/hoverable.js +4 -4
- package/dist/helpers/inject-css.js +5 -7
- package/dist/helpers/prism-vsc-dark-plus.d.ts +1 -1
- package/dist/helpers/prism-vsc-dark-plus.js +52 -51
- package/dist/helpers/resolve-studio-color.d.ts +1 -0
- package/dist/helpers/resolve-studio-color.js +11 -0
- package/dist/helpers/studio-css-variables.d.ts +1 -0
- package/dist/helpers/studio-css-variables.js +105 -0
- package/dist/helpers/studio-pixel-ratio.d.ts +1 -0
- package/dist/helpers/studio-pixel-ratio.js +7 -0
- package/dist/helpers/timeline-node-path-key.d.ts +1 -1
- package/dist/helpers/timeline-node-path-key.js +2 -2
- package/dist/helpers/use-runtime-values.js +2 -28
- package/dist/hot-middleware-client/client.js +5 -3
- package/dist/icons/align-center-horizontal.js +2 -1
- package/dist/icons/align-left.js +2 -1
- package/dist/icons/align-right.js +2 -1
- package/dist/icons/{separation.d.ts → background-removal.d.ts} +1 -1
- package/dist/icons/background-removal.js +9 -0
- package/dist/icons/wrap.d.ts +4 -0
- package/dist/icons/wrap.js +10 -0
- package/dist/previewEntry.js +2 -0
- package/dist/renderEntry.js +2 -0
- package/dist/state/modals.d.ts +15 -1
- package/dist/state/timeline-sequence-hover.d.ts +6 -16
- package/dist/state/timeline-sequence-hover.js +6 -67
- package/package.json +20 -19
- package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.d.ts +0 -15
- package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.js +0 -31
- package/dist/esm/LazyModels-nh3c8h9p.mjs +0 -12
- package/dist/esm/LazyModels-rr5v8h5y.mjs +0 -12
- package/dist/esm/index-cw0pnpg5.mjs +0 -50
- package/dist/esm/index-k426ye99.mjs +0 -139
- package/dist/helpers/get-box-quads-polyfill-internals.d.ts +0 -82
- package/dist/helpers/get-box-quads-polyfill-internals.js +0 -2403
- package/dist/helpers/get-box-quads-ponyfill.d.ts +0 -10
- package/dist/helpers/get-box-quads-ponyfill.js +0 -23
- package/dist/icons/separation.js +0 -7
- /package/dist/esm/{resolve-composition-component-location-qrp05g62.mjs → resolve-composition-component-location-2hgf6g0a.mjs} +0 -0
|
@@ -7,18 +7,19 @@ const LoopedIndicator_1 = require("./LoopedIndicator");
|
|
|
7
7
|
const row = {
|
|
8
8
|
overflow: 'hidden',
|
|
9
9
|
};
|
|
10
|
-
const LoopedTimelineIndicator = ({ loops, fullWidth, visibleOffset, visibleWidth }) => {
|
|
11
|
-
if (loops <= 1 || fullWidth <= 0 || visibleWidth <= 0) {
|
|
10
|
+
const LoopedTimelineIndicator = ({ loops, phase, fullWidth, visibleOffset, visibleWidth }) => {
|
|
11
|
+
if (loops + phase <= 1 || fullWidth <= 0 || visibleWidth <= 0) {
|
|
12
12
|
return null;
|
|
13
13
|
}
|
|
14
14
|
const loopWidth = fullWidth / loops;
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
15
|
+
const phaseWidth = phase * loopWidth;
|
|
16
|
+
const lastBoundaryIndex = Math.ceil(loops + phase) - 1;
|
|
17
|
+
const firstVisibleBoundaryIndex = Math.max(1, Math.floor((visibleOffset + phaseWidth) / loopWidth));
|
|
18
|
+
const lastVisibleBoundaryIndex = Math.min(lastBoundaryIndex, Math.ceil((visibleOffset + visibleWidth + phaseWidth) / loopWidth));
|
|
18
19
|
const visibleBoundaryCount = Math.max(0, lastVisibleBoundaryIndex - firstVisibleBoundaryIndex + 1);
|
|
19
20
|
const boundaries = new Array(visibleBoundaryCount)
|
|
20
21
|
.fill(true)
|
|
21
|
-
.map((_, index) => (firstVisibleBoundaryIndex + index) * loopWidth);
|
|
22
|
+
.map((_, index) => (firstVisibleBoundaryIndex + index) * loopWidth - phaseWidth);
|
|
22
23
|
return (jsx_runtime_1.jsx(remotion_1.Internals.AbsoluteFillElement, { style: row, children: boundaries.map((boundary) => {
|
|
23
24
|
return (jsx_runtime_1.jsx("div", { style: {
|
|
24
25
|
position: 'absolute',
|
|
@@ -560,7 +560,6 @@ const TimelineClipboardKeybindings = () => {
|
|
|
560
560
|
}
|
|
561
561
|
const nextSelection = (0, delete_selected_timeline_item_1.getTimelineSelectionAfterDeletingItems)({
|
|
562
562
|
selections: selectedItems,
|
|
563
|
-
propStatuses,
|
|
564
563
|
});
|
|
565
564
|
if (nextSelection.length === 0) {
|
|
566
565
|
clearSelection();
|
|
@@ -31,7 +31,7 @@ const TimelineColorField = ({ field, effectiveValue, propStatus, onSave, onDragV
|
|
|
31
31
|
const currentValue = typeof effectiveValue === 'string'
|
|
32
32
|
? effectiveValue
|
|
33
33
|
: field.fieldSchema.type === 'color'
|
|
34
|
-
? ((_a = field.fieldSchema.default) !== null && _a !== void 0 ? _a :
|
|
34
|
+
? ((_a = field.fieldSchema.default) !== null && _a !== void 0 ? _a : '#000')
|
|
35
35
|
: '';
|
|
36
36
|
const onChange = (0, react_1.useCallback)((next) => {
|
|
37
37
|
onDragValueChange(next);
|
|
@@ -122,7 +122,7 @@ const TimelineDragHandlerInner = () => {
|
|
|
122
122
|
shouldApplyCssTransforms: true,
|
|
123
123
|
});
|
|
124
124
|
const { isHighestContext } = (0, z_index_1.useZIndex)();
|
|
125
|
-
const setFrame = remotion_1.Internals.
|
|
125
|
+
const setFrame = remotion_1.Internals.Timeline.useTimelineSeekFrame();
|
|
126
126
|
const width = (0, timeline_scroll_logic_1.getTimelineContentWidth)();
|
|
127
127
|
const left = (_a = size === null || size === void 0 ? void 0 : size.left) !== null && _a !== void 0 ? _a : 0;
|
|
128
128
|
const [dragging, setDragging] = (0, react_1.useState)({
|
|
@@ -18,6 +18,7 @@ export declare const TimelineEffectPropItem: React.FC<{
|
|
|
18
18
|
readonly nodePath: SequencePropsSubscriptionKey;
|
|
19
19
|
readonly nodePathInfo: SequenceNodePathInfo;
|
|
20
20
|
readonly keyframeDisplayOffset: number;
|
|
21
|
+
readonly keyframePlaybackRate: number;
|
|
21
22
|
readonly keyframeControlsMode: TimelineKeyframeControlsMode;
|
|
22
23
|
readonly revealInInspector: boolean;
|
|
23
24
|
readonly runtimeValueStore: RuntimeValueStore | null;
|
|
@@ -228,11 +228,16 @@ const TimelineEffectPropValue = ({ field, nodePath, validatedLocation, sourceFra
|
|
|
228
228
|
return (jsx_runtime_1.jsx(TimelineSchemaField_1.TimelineFieldValue, { field: field, propStatus: propStatus, onSave: onSave, onDragValueChange: onDragValueChange, onDragEnd: onDragEnd, effectiveValue: effectiveValue, scaleLockNodePath: null }));
|
|
229
229
|
};
|
|
230
230
|
exports.TimelineEffectPropValue = TimelineEffectPropValue;
|
|
231
|
-
const TimelineEffectPropValueAtCurrentFrame = ({ field, nodePath, validatedLocation, keyframeDisplayOffset, runtimeValueStore, }) => {
|
|
231
|
+
const TimelineEffectPropValueAtCurrentFrame = ({ field, nodePath, validatedLocation, keyframeDisplayOffset, keyframePlaybackRate, propStatus, runtimeValueStore, }) => {
|
|
232
232
|
const timelinePosition = remotion_1.Internals.Timeline.useTimelinePosition();
|
|
233
|
-
return (jsx_runtime_1.jsx(exports.TimelineEffectPropValue, { field: field, nodePath: nodePath, validatedLocation: validatedLocation, sourceFrame:
|
|
233
|
+
return (jsx_runtime_1.jsx(exports.TimelineEffectPropValue, { field: field, nodePath: nodePath, validatedLocation: validatedLocation, sourceFrame: (0, get_timeline_keyframes_1.getKeyframeSourceFrame)({
|
|
234
|
+
displayFrame: timelinePosition,
|
|
235
|
+
keyframeDisplayOffset,
|
|
236
|
+
keyframePlaybackRate,
|
|
237
|
+
propStatus,
|
|
238
|
+
}), runtimeValueStore: runtimeValueStore }));
|
|
234
239
|
};
|
|
235
|
-
const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath, nodePathInfo, keyframeDisplayOffset, keyframeControlsMode, revealInInspector, runtimeValueStore, }) => {
|
|
240
|
+
const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath, nodePathInfo, keyframeDisplayOffset, keyframePlaybackRate, keyframeControlsMode, revealInInspector, runtimeValueStore, }) => {
|
|
236
241
|
var _a;
|
|
237
242
|
var _b;
|
|
238
243
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
@@ -241,6 +246,7 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
|
|
|
241
246
|
const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
|
|
242
247
|
const { getEffectDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
243
248
|
const selection = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo, revealInInspector);
|
|
249
|
+
const containsSelection = (0, TimelineSelection_1.useTimelineRowContainsSelection)(nodePathInfo);
|
|
244
250
|
const style = (0, react_1.useMemo)(() => {
|
|
245
251
|
return field.typeName === 'text-content'
|
|
246
252
|
? fieldRowBase
|
|
@@ -257,6 +263,7 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
|
|
|
257
263
|
const resolvedKeyframeDisplayOffset = (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
258
264
|
propStatus,
|
|
259
265
|
keyframeDisplayOffset,
|
|
266
|
+
keyframePlaybackRate,
|
|
260
267
|
});
|
|
261
268
|
const dragOverrideValue = (0, react_1.useMemo)(() => {
|
|
262
269
|
const overrides = getEffectDragOverrides(nodePath, field.effectIndex);
|
|
@@ -273,7 +280,7 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
|
|
|
273
280
|
propStatus,
|
|
274
281
|
selected: selection.selected,
|
|
275
282
|
keyframable,
|
|
276
|
-
})) ? (jsx_runtime_1.jsx(TimelineKeyframeControls_1.TimelineKeyframeControls, { fieldKey: field.key, propStatus: propStatus, nodePath: nodePath, fileName: validatedLocation.source, keyframeDisplayOffset: keyframeDisplayOffset, defaultValue: field.fieldSchema.default, dragOverrideValue: dragOverrideValue, schema: field.effectSchema, effectIndex: field.effectIndex, nodePathInfo: nodePathInfo, mode: keyframeControlsMode })) : null;
|
|
283
|
+
})) ? (jsx_runtime_1.jsx(TimelineKeyframeControls_1.TimelineKeyframeControls, { fieldKey: field.key, propStatus: propStatus, nodePath: nodePath, fileName: validatedLocation.source, keyframeDisplayOffset: keyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate, defaultValue: field.fieldSchema.default, dragOverrideValue: dragOverrideValue, schema: field.effectSchema, effectIndex: field.effectIndex, nodePathInfo: nodePathInfo, mode: keyframeControlsMode })) : null;
|
|
277
284
|
const canResetToDefault = (0, react_1.useMemo)(() => {
|
|
278
285
|
if (!propStatus || propStatus.status === 'computed') {
|
|
279
286
|
return false;
|
|
@@ -361,7 +368,7 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
|
|
|
361
368
|
property: field.key,
|
|
362
369
|
}).catch(() => undefined);
|
|
363
370
|
}, [canOpenInEditor, defaultEditorId, field.key, validatedLocation]);
|
|
364
|
-
const row = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {}), keyframeControls: keyframeControls, arrow: jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}), style: style, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, onDoubleClick: onPropertyDoubleClick, showSelectedBackground: true, containsSelection:
|
|
371
|
+
const row = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {}), keyframeControls: keyframeControls, arrow: jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}), style: style, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, onDoubleClick: onPropertyDoubleClick, showSelectedBackground: true, containsSelection: containsSelection, outerHeight: null, children: jsx_runtime_1.jsx(TimelineFieldRowContent_1.TimelineFieldRowContent, { field: field, rowDepth: rowDepth, selected: selection.selected || containsSelection, children: jsx_runtime_1.jsx(TimelineEffectPropValueAtCurrentFrame, { field: field, nodePath: nodePath, validatedLocation: validatedLocation, keyframeDisplayOffset: resolvedKeyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate, propStatus: propStatus, runtimeValueStore: runtimeValueStore }) }) }));
|
|
365
372
|
return jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: row });
|
|
366
373
|
};
|
|
367
374
|
exports.TimelineEffectPropItem = TimelineEffectPropItem;
|
|
@@ -16,6 +16,7 @@ type TimelineExpandedRowProps = {
|
|
|
16
16
|
readonly nodePath: SequencePropsSubscriptionKey;
|
|
17
17
|
readonly schema: InteractivitySchema;
|
|
18
18
|
readonly keyframeDisplayOffset: number;
|
|
19
|
+
readonly keyframePlaybackRate: number;
|
|
19
20
|
readonly keyframeControlsMode: TimelineKeyframeControlsMode;
|
|
20
21
|
};
|
|
21
22
|
export declare const TimelineExpandedRow: React.NamedExoticComponent<TimelineExpandedRowProps>;
|
|
@@ -22,10 +22,11 @@ const rowLabel = {
|
|
|
22
22
|
userSelect: 'none',
|
|
23
23
|
WebkitUserSelect: 'none',
|
|
24
24
|
};
|
|
25
|
-
const TimelineExpandedRowInner = ({ node, depth, nestedDepth, rowDepthBase, getIsExpanded, toggleTrack, validatedLocation, nodePath, schema, keyframeDisplayOffset, keyframeControlsMode, }) => {
|
|
25
|
+
const TimelineExpandedRowInner = ({ node, depth, nestedDepth, rowDepthBase, getIsExpanded, toggleTrack, validatedLocation, nodePath, schema, keyframeDisplayOffset, keyframePlaybackRate, keyframeControlsMode, }) => {
|
|
26
26
|
const rowDepth = (rowDepthBase !== null && rowDepthBase !== void 0 ? rowDepthBase : (0, timeline_row_layout_1.getExpandedRowDepth)({ nestedDepth, treeDepth: 0 })) + depth;
|
|
27
27
|
const isInspector = keyframeControlsMode === 'inspector';
|
|
28
28
|
const selection = (0, TimelineSelection_1.useTimelineRowSelection)(node.nodePathInfo);
|
|
29
|
+
const containsSelection = (0, TimelineSelection_1.useTimelineRowContainsSelection)(node.nodePathInfo);
|
|
29
30
|
const labelStyle = react_1.default.useMemo(() => ({
|
|
30
31
|
...rowLabel,
|
|
31
32
|
...(0, TimelineSelection_1.getTimelineSelectedLabelStyle)(selection.selected, true),
|
|
@@ -47,14 +48,14 @@ const TimelineExpandedRowInner = ({ node, depth, nestedDepth, rowDepthBase, getI
|
|
|
47
48
|
const isExpanded = getIsExpanded(node.nodePathInfo);
|
|
48
49
|
return (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {}), arrow: jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowButton, { isExpanded: isExpanded, onClick: () => toggleTrack(node.nodePathInfo), label: `${node.label} section`, disabled: false }), style: {
|
|
49
50
|
height: timeline_layout_1.TREE_GROUP_ROW_HEIGHT,
|
|
50
|
-
}, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection:
|
|
51
|
+
}, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection: containsSelection, outerHeight: null, children: jsx_runtime_1.jsx("span", { style: labelStyle, children: node.label }) }));
|
|
51
52
|
}
|
|
52
53
|
if (node.field) {
|
|
53
54
|
if (node.field.kind === 'effect-field') {
|
|
54
|
-
return (jsx_runtime_1.jsx(TimelineEffectPropItem_1.TimelineEffectPropItem, { field: node.field, validatedLocation: validatedLocation, rowDepth: isInspector ? rowDepth - 1 : rowDepth, nodePath: nodePath, nodePathInfo: node.nodePathInfo, keyframeDisplayOffset: keyframeDisplayOffset, keyframeControlsMode: keyframeControlsMode, revealInInspector: !isInspector, runtimeValueStore: node.runtimeValueStore }));
|
|
55
|
+
return (jsx_runtime_1.jsx(TimelineEffectPropItem_1.TimelineEffectPropItem, { field: node.field, validatedLocation: validatedLocation, rowDepth: isInspector ? rowDepth - 1 : rowDepth, nodePath: nodePath, nodePathInfo: node.nodePathInfo, keyframeDisplayOffset: keyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate, keyframeControlsMode: keyframeControlsMode, revealInInspector: !isInspector, runtimeValueStore: node.runtimeValueStore }));
|
|
55
56
|
}
|
|
56
57
|
if (node.field.kind === 'sequence-field') {
|
|
57
|
-
return (jsx_runtime_1.jsx(TimelineSequencePropItem_1.TimelineSequencePropItem, { field: node.field, validatedLocation: validatedLocation, rowDepth: rowDepth, nodePath: nodePath, nodePathInfo: node.nodePathInfo, schema: schema, keyframeDisplayOffset: keyframeDisplayOffset, keyframeControlsMode: keyframeControlsMode, runtimeValue: node.runtimeValue }));
|
|
58
|
+
return (jsx_runtime_1.jsx(TimelineSequencePropItem_1.TimelineSequencePropItem, { field: node.field, validatedLocation: validatedLocation, rowDepth: rowDepth, nodePath: nodePath, nodePathInfo: node.nodePathInfo, schema: schema, keyframeDisplayOffset: keyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate, keyframeControlsMode: keyframeControlsMode, runtimeValue: node.runtimeValue }));
|
|
58
59
|
}
|
|
59
60
|
throw new Error('Unexpected field kind: ' + JSON.stringify(node.field));
|
|
60
61
|
}
|
|
@@ -55,7 +55,7 @@ const separator = {
|
|
|
55
55
|
height: 0,
|
|
56
56
|
borderBottom: `1px solid ${colors_1.TIMELINE_TRACK_SEPARATOR}`,
|
|
57
57
|
};
|
|
58
|
-
const TimelineExpandedSection = ({ sequence, validatedLocation, nodePathInfo, nestedDepth, keyframeDisplayOffset, }) => {
|
|
58
|
+
const TimelineExpandedSection = ({ sequence, validatedLocation, nodePathInfo, nestedDepth, keyframeDisplayOffset, keyframePlaybackRate, }) => {
|
|
59
59
|
const { filteredTree, getIsExpanded, toggleTrack } = (0, use_timeline_expanded_tree_1.useTimelineExpandedTree)({
|
|
60
60
|
sequence,
|
|
61
61
|
nodePathInfo,
|
|
@@ -79,7 +79,7 @@ const TimelineExpandedSection = ({ sequence, validatedLocation, nodePathInfo, ne
|
|
|
79
79
|
return null;
|
|
80
80
|
}
|
|
81
81
|
return (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowSelectedBackgroundContext.Provider, { value: TimelineSelection_1.TIMELINE_EXPANDED_SELECTED_BACKGROUND, children: jsx_runtime_1.jsx("div", { style: style, children: flat.map(({ node, depth }, i) => {
|
|
82
|
-
return (jsx_runtime_1.jsxs(react_1.default.Fragment, { children: [i > 0 ? jsx_runtime_1.jsx("div", { style: separator }) : null, jsx_runtime_1.jsx(TimelineExpandedRow_1.TimelineExpandedRow, { node: node, depth: depth, nestedDepth: nestedDepth, getIsExpanded: getIsExpanded, toggleTrack: toggleTrack, validatedLocation: validatedLocation, nodePath: nodePathInfo.sequenceSubscriptionKey, schema: schema, keyframeDisplayOffset: keyframeDisplayOffset, keyframeControlsMode: "timeline" })
|
|
82
|
+
return (jsx_runtime_1.jsxs(react_1.default.Fragment, { children: [i > 0 ? jsx_runtime_1.jsx("div", { style: separator }) : null, jsx_runtime_1.jsx(TimelineExpandedRow_1.TimelineExpandedRow, { node: node, depth: depth, nestedDepth: nestedDepth, getIsExpanded: getIsExpanded, toggleTrack: toggleTrack, validatedLocation: validatedLocation, nodePath: nodePathInfo.sequenceSubscriptionKey, schema: schema, keyframeDisplayOffset: keyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate, keyframeControlsMode: "timeline" })
|
|
83
83
|
] }, JSON.stringify(node.nodePathInfo)));
|
|
84
84
|
}) }) }));
|
|
85
85
|
};
|
|
@@ -5,6 +5,7 @@ type TimelineExpandedTrackKeyframesProps = {
|
|
|
5
5
|
readonly sequence: TSequence;
|
|
6
6
|
readonly nodePathInfo: SequenceNodePathInfo;
|
|
7
7
|
readonly keyframeDisplayOffset: number;
|
|
8
|
+
readonly keyframePlaybackRate: number;
|
|
8
9
|
};
|
|
9
10
|
export declare const TimelineExpandedTrackKeyframes: React.NamedExoticComponent<TimelineExpandedTrackKeyframesProps>;
|
|
10
11
|
export {};
|
|
@@ -9,17 +9,19 @@ const react_1 = __importDefault(require("react"));
|
|
|
9
9
|
const are_sequence_node_path_infos_equal_1 = require("../../helpers/are-sequence-node-path-infos-equal");
|
|
10
10
|
const TimelineExpandedKeyframeRow_1 = require("./TimelineExpandedKeyframeRow");
|
|
11
11
|
const use_expanded_track_keyframe_rows_1 = require("./use-expanded-track-keyframe-rows");
|
|
12
|
-
const TimelineExpandedTrackKeyframesInner = ({ nodePathInfo, sequence, keyframeDisplayOffset }) => {
|
|
12
|
+
const TimelineExpandedTrackKeyframesInner = ({ nodePathInfo, sequence, keyframeDisplayOffset, keyframePlaybackRate }) => {
|
|
13
13
|
const { rows, expandedHeight } = (0, use_expanded_track_keyframe_rows_1.useExpandedTrackKeyframeRows)({
|
|
14
14
|
sequence,
|
|
15
15
|
nodePathInfo,
|
|
16
16
|
keyframeDisplayOffset,
|
|
17
|
+
keyframePlaybackRate,
|
|
17
18
|
});
|
|
18
19
|
return (jsx_runtime_1.jsx("div", { style: { height: expandedHeight }, children: rows.map((row, index) => (jsx_runtime_1.jsx(TimelineExpandedKeyframeRow_1.TimelineExpandedKeyframeRow, { height: row.height, keyframes: row.keyframes, canEditEasing: row.canEditEasing, nodePathInfo: row.nodePathInfo, showSeparator: index > 0 }, row.rowKey))) }));
|
|
19
20
|
};
|
|
20
21
|
const areTimelineExpandedTrackKeyframesPropsEqual = (first, second) => {
|
|
21
22
|
var _a, _b, _c, _d;
|
|
22
23
|
return (first.keyframeDisplayOffset === second.keyframeDisplayOffset &&
|
|
24
|
+
first.keyframePlaybackRate === second.keyframePlaybackRate &&
|
|
23
25
|
((_a = first.sequence.controls) === null || _a === void 0 ? void 0 : _a.schema) === ((_b = second.sequence.controls) === null || _b === void 0 ? void 0 : _b.schema) &&
|
|
24
26
|
((_c = first.sequence.controls) === null || _c === void 0 ? void 0 : _c.runtimeValues) ===
|
|
25
27
|
((_d = second.sequence.controls) === null || _d === void 0 ? void 0 : _d.runtimeValues) &&
|
|
@@ -22,9 +22,9 @@ const ROW_HEIGHT = 30;
|
|
|
22
22
|
const LIST_HEIGHT = 280;
|
|
23
23
|
const OVERSCAN = 10;
|
|
24
24
|
const POPOVER_WIDTH = 280;
|
|
25
|
-
const CLEAR_HOVER =
|
|
26
|
-
const INPUT_BORDER_COLOR_UNHOVERED =
|
|
27
|
-
const INPUT_BORDER_COLOR_HOVERED =
|
|
25
|
+
const CLEAR_HOVER = colors_1.WHITE_ALPHA_06;
|
|
26
|
+
const INPUT_BORDER_COLOR_UNHOVERED = colors_1.BLACK_ALPHA_60;
|
|
27
|
+
const INPUT_BORDER_COLOR_HOVERED = colors_1.WHITE_ALPHA_05;
|
|
28
28
|
const googleFonts = google_fonts_list_1.GOOGLE_FONTS_LIST.map((font) => ({
|
|
29
29
|
id: `google-${font.importName}`,
|
|
30
30
|
fontFamily: font.fontFamily,
|
|
@@ -67,7 +67,7 @@ const triggerStyle = {
|
|
|
67
67
|
borderWidth: 1,
|
|
68
68
|
borderStyle: 'solid',
|
|
69
69
|
maxWidth: 140,
|
|
70
|
-
color:
|
|
70
|
+
color: colors_1.WHITE,
|
|
71
71
|
userSelect: 'none',
|
|
72
72
|
WebkitUserSelect: 'none',
|
|
73
73
|
};
|
|
@@ -83,17 +83,17 @@ const popover = {
|
|
|
83
83
|
position: 'fixed',
|
|
84
84
|
width: POPOVER_WIDTH,
|
|
85
85
|
backgroundColor: colors_1.BACKGROUND,
|
|
86
|
-
color:
|
|
86
|
+
color: colors_1.WHITE,
|
|
87
87
|
userSelect: 'none',
|
|
88
88
|
WebkitUserSelect: 'none',
|
|
89
|
-
border:
|
|
89
|
+
border: `1px solid ${colors_1.WHITE_ALPHA_08}`,
|
|
90
90
|
};
|
|
91
91
|
const searchInput = {
|
|
92
92
|
boxSizing: 'border-box',
|
|
93
93
|
width: '100%',
|
|
94
94
|
backgroundColor: colors_1.INPUT_BACKGROUND,
|
|
95
|
-
border:
|
|
96
|
-
color:
|
|
95
|
+
border: colors_1.BORDER_WHITE_ALPHA_12,
|
|
96
|
+
color: colors_1.WHITE,
|
|
97
97
|
fontSize: 12,
|
|
98
98
|
outline: 'none',
|
|
99
99
|
padding: '6px 8px',
|
|
@@ -113,8 +113,8 @@ const optionButton = {
|
|
|
113
113
|
height: ROW_HEIGHT,
|
|
114
114
|
width: '100%',
|
|
115
115
|
border: 'none',
|
|
116
|
-
background:
|
|
117
|
-
color:
|
|
116
|
+
background: colors_1.TRANSPARENT,
|
|
117
|
+
color: colors_1.WHITE,
|
|
118
118
|
display: 'flex',
|
|
119
119
|
alignItems: 'center',
|
|
120
120
|
padding: '0 8px',
|
|
@@ -136,7 +136,7 @@ const optionSource = {
|
|
|
136
136
|
};
|
|
137
137
|
const errorText = {
|
|
138
138
|
padding: '6px 8px',
|
|
139
|
-
color:
|
|
139
|
+
color: colors_1.FONT_FAMILY_ERROR_COLOR,
|
|
140
140
|
fontSize: 10,
|
|
141
141
|
};
|
|
142
142
|
const portalStyle = ({ size, }) => {
|
|
@@ -520,7 +520,7 @@ const TimelineFontFamilyField = ({ field, propStatus, effectiveValue, onSave, on
|
|
|
520
520
|
? CLEAR_HOVER
|
|
521
521
|
: isSelected
|
|
522
522
|
? colors_1.SELECTED_BACKGROUND
|
|
523
|
-
:
|
|
523
|
+
: colors_1.TRANSPARENT,
|
|
524
524
|
}, onPointerEnter: () => setHighlightedIndex(actualIndex), onPointerDown: (event) => {
|
|
525
525
|
event.preventDefault();
|
|
526
526
|
event.stopPropagation();
|
|
@@ -21,6 +21,7 @@ export declare const TimelineKeyframeControls: React.FC<{
|
|
|
21
21
|
readonly nodePath: SequencePropsSubscriptionKey;
|
|
22
22
|
readonly fileName: string;
|
|
23
23
|
readonly keyframeDisplayOffset: number;
|
|
24
|
+
readonly keyframePlaybackRate: number;
|
|
24
25
|
readonly defaultValue: unknown;
|
|
25
26
|
readonly dragOverrideValue: DragOverrideValue | undefined;
|
|
26
27
|
readonly schema: InteractivitySchema;
|
|
@@ -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;
|
|
@@ -155,15 +153,22 @@ const resolveKeyframeControlTarget = ({ nodePathInfo, tracks, propStatuses, getD
|
|
|
155
153
|
propStatus: sequenceSelectedPropStatus,
|
|
156
154
|
nodePath,
|
|
157
155
|
fileName: nodePath.absolutePath,
|
|
156
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
158
157
|
keyframeDisplayOffset: (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
159
158
|
propStatus: sequenceSelectedPropStatus,
|
|
160
159
|
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
160
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
161
161
|
}),
|
|
162
|
-
sourceFrame:
|
|
163
|
-
|
|
162
|
+
sourceFrame: (0, get_timeline_keyframes_1.getKeyframeSourceFrame)({
|
|
163
|
+
displayFrame: timelinePosition,
|
|
164
|
+
propStatus: sequenceSelectedPropStatus,
|
|
165
|
+
keyframeDisplayOffset: (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
164
166
|
propStatus: sequenceSelectedPropStatus,
|
|
165
167
|
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
168
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
166
169
|
}),
|
|
170
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
171
|
+
}),
|
|
167
172
|
defaultValue: fieldNode.field.fieldSchema.default,
|
|
168
173
|
dragOverrideValue: ((_c = getDragOverrides(nodePath)) !== null && _c !== void 0 ? _c : {})[fieldNode.field.key],
|
|
169
174
|
schema: track.sequence.controls.schema,
|
|
@@ -187,15 +192,22 @@ const resolveKeyframeControlTarget = ({ nodePathInfo, tracks, propStatuses, getD
|
|
|
187
192
|
propStatus: effectSelectedPropStatus,
|
|
188
193
|
nodePath,
|
|
189
194
|
fileName: nodePath.absolutePath,
|
|
195
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
190
196
|
keyframeDisplayOffset: (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
191
197
|
propStatus: effectSelectedPropStatus,
|
|
192
198
|
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
199
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
193
200
|
}),
|
|
194
|
-
sourceFrame:
|
|
195
|
-
|
|
201
|
+
sourceFrame: (0, get_timeline_keyframes_1.getKeyframeSourceFrame)({
|
|
202
|
+
displayFrame: timelinePosition,
|
|
203
|
+
propStatus: effectSelectedPropStatus,
|
|
204
|
+
keyframeDisplayOffset: (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
196
205
|
propStatus: effectSelectedPropStatus,
|
|
197
206
|
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
207
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
198
208
|
}),
|
|
209
|
+
keyframePlaybackRate: track.keyframePlaybackRate,
|
|
210
|
+
}),
|
|
199
211
|
defaultValue: fieldNode.field.fieldSchema.default,
|
|
200
212
|
dragOverrideValue: getEffectDragOverrides(nodePath, fieldNode.field.effectIndex)[fieldNode.field.key],
|
|
201
213
|
schema: fieldNode.field.effectSchema,
|
|
@@ -315,10 +327,10 @@ const shouldShowTimelineKeyframeNavigation = ({ propStatus, selected, }) => {
|
|
|
315
327
|
return isKeyframedStatus(propStatus);
|
|
316
328
|
};
|
|
317
329
|
exports.shouldShowTimelineKeyframeNavigation = shouldShowTimelineKeyframeNavigation;
|
|
318
|
-
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', }) => {
|
|
319
331
|
const videoConfig = (0, remotion_1.useVideoConfig)();
|
|
320
332
|
const timelinePosition = remotion_1.Internals.Timeline.useTimelinePosition();
|
|
321
|
-
const setFrame = remotion_1.Internals.
|
|
333
|
+
const setFrame = remotion_1.Internals.Timeline.useTimelineSeekFrame();
|
|
322
334
|
const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
323
335
|
const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
|
|
324
336
|
const { getDragOverrides, getEffectDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
@@ -332,9 +344,15 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
332
344
|
const resolvedKeyframeDisplayOffset = (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
|
|
333
345
|
propStatus,
|
|
334
346
|
keyframeDisplayOffset,
|
|
347
|
+
keyframePlaybackRate,
|
|
335
348
|
});
|
|
336
|
-
const jsxFrame =
|
|
337
|
-
|
|
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]);
|
|
338
356
|
const hasKeyframeAtCurrentFrame = (0, react_1.useMemo)(() => {
|
|
339
357
|
if (!isKeyframedStatus(propStatus)) {
|
|
340
358
|
return false;
|
|
@@ -374,6 +392,7 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
374
392
|
nodePath,
|
|
375
393
|
fileName,
|
|
376
394
|
keyframeDisplayOffset: resolvedKeyframeDisplayOffset,
|
|
395
|
+
keyframePlaybackRate,
|
|
377
396
|
sourceFrame: jsxFrame,
|
|
378
397
|
defaultValue,
|
|
379
398
|
dragOverrideValue,
|
|
@@ -387,6 +406,7 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
387
406
|
fileName,
|
|
388
407
|
jsxFrame,
|
|
389
408
|
resolvedKeyframeDisplayOffset,
|
|
409
|
+
keyframePlaybackRate,
|
|
390
410
|
nodePath,
|
|
391
411
|
nodePathInfo,
|
|
392
412
|
propStatus,
|
|
@@ -453,19 +473,13 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
453
473
|
const change = getDeleteChange(target);
|
|
454
474
|
return change === null ? [] : [{ target, change }];
|
|
455
475
|
});
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
(0,
|
|
461
|
-
?
|
|
462
|
-
|
|
463
|
-
keyframeDisplayOffset: singleDeleteTarget.target.keyframeDisplayOffset,
|
|
464
|
-
nodePathInfo: singleDeleteTarget.target.nodePathInfo,
|
|
465
|
-
propStatus: singleDeleteTarget.target.propStatus,
|
|
466
|
-
timelinePosition,
|
|
467
|
-
})
|
|
468
|
-
: 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 });
|
|
469
483
|
const deleteChanges = deleteTargets.map(({ change }) => change);
|
|
470
484
|
await (0, call_delete_keyframe_1.callDeleteKeyframes)({
|
|
471
485
|
sequenceKeyframes: deleteChanges.filter((change) => !hasEffectIndex(change)),
|
|
@@ -473,9 +487,6 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
473
487
|
setPropStatuses,
|
|
474
488
|
clientId,
|
|
475
489
|
});
|
|
476
|
-
if (mode === 'timeline' && easingSelection !== null) {
|
|
477
|
-
selectItems([easingSelection], { reveal: true });
|
|
478
|
-
}
|
|
479
490
|
return;
|
|
480
491
|
}
|
|
481
492
|
const addChanges = keyframeToggleTargets.flatMap((target) => {
|
|
@@ -499,7 +510,8 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
499
510
|
selectItems(addChanges.map(({ target }) => ({
|
|
500
511
|
type: 'keyframe',
|
|
501
512
|
nodePathInfo: target.nodePathInfo,
|
|
502
|
-
frame: target.sourceFrame
|
|
513
|
+
frame: target.sourceFrame / target.keyframePlaybackRate +
|
|
514
|
+
target.keyframeDisplayOffset,
|
|
503
515
|
})), { reveal: true });
|
|
504
516
|
}
|
|
505
517
|
}, [
|
|
@@ -511,7 +523,6 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
511
523
|
mode,
|
|
512
524
|
selectItems,
|
|
513
525
|
setPropStatuses,
|
|
514
|
-
timelinePosition,
|
|
515
526
|
]);
|
|
516
527
|
const previousDisabled = previousDisplayFrame === null;
|
|
517
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';
|