@remotion/studio 4.0.499 → 4.0.500
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/AssetSelector.js +8 -6
- package/dist/components/AssetSelectorItem.d.ts +24 -0
- package/dist/components/AssetSelectorItem.js +113 -80
- package/dist/components/CompositionSelector.js +2 -32
- package/dist/components/ControlButton.js +1 -0
- package/dist/components/ExplorerPanel.js +2 -1
- package/dist/components/ExplorerPanelRef.d.ts +2 -0
- package/dist/components/GlobalKeybindings.js +7 -1
- package/dist/components/InlineAction.d.ts +2 -1
- package/dist/components/InlineAction.js +2 -2
- package/dist/components/InlineDropdown.d.ts +1 -1
- package/dist/components/InlineDropdown.js +3 -2
- package/dist/components/InspectorPanel/AlignmentControls.d.ts +2 -2
- package/dist/components/InspectorPanel/AlignmentControls.js +5 -2
- package/dist/components/InspectorPanel/CompositionInspector.js +8 -7
- package/dist/components/InspectorPanel/CompositionMetadata.js +170 -57
- package/dist/components/InspectorPanel/ConnectedCompositionsSection.d.ts +2 -2
- package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -3
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +7 -7
- package/dist/components/InspectorPanel/common.d.ts +17 -4
- package/dist/components/InspectorPanel/common.js +60 -6
- package/dist/components/InspectorPanel/use-composition-actions.js +1 -0
- package/dist/components/InspectorPanel/use-track-for-selection.d.ts +1 -1
- package/dist/components/InspectorSequenceSection.js +43 -19
- package/dist/components/KeyboardShortcutsExplainer.js +4 -2
- package/dist/components/Menu/MenuItem.js +2 -1
- package/dist/components/MenuCompositionName.js +30 -7
- package/dist/components/MenuToolbar.d.ts +0 -1
- package/dist/components/MenuToolbar.js +8 -7
- package/dist/components/MobilePanel.d.ts +2 -1
- package/dist/components/MobilePanel.js +29 -25
- package/dist/components/ModalContainer.d.ts +1 -0
- package/dist/components/ModalContainer.js +2 -2
- package/dist/components/Modals.js +1 -1
- package/dist/components/NewComposition/DismissableModal.d.ts +1 -0
- package/dist/components/NewComposition/DismissableModal.js +2 -2
- package/dist/components/NewComposition/InputDragger.d.ts +7 -0
- package/dist/components/NewComposition/InputDragger.js +119 -8
- package/dist/components/OutlineToggle.d.ts +1 -3
- package/dist/components/OutlineToggle.js +2 -2
- package/dist/components/PreviewToolbar.js +10 -4
- package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.d.ts +7 -0
- package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +44 -0
- package/dist/components/QuickSwitcher/NoResults.d.ts +1 -1
- package/dist/components/QuickSwitcher/NoResults.js +1 -0
- package/dist/components/QuickSwitcher/QuickSwitcher.d.ts +5 -0
- package/dist/components/QuickSwitcher/QuickSwitcher.js +6 -2
- package/dist/components/QuickSwitcher/QuickSwitcherContent.d.ts +5 -0
- package/dist/components/QuickSwitcher/QuickSwitcherContent.js +76 -12
- package/dist/components/QuickSwitcher/QuickSwitcherResult.d.ts +4 -0
- package/dist/components/QuickSwitcher/QuickSwitcherResult.js +11 -8
- package/dist/components/QuickSwitcher/asset-search.d.ts +9 -0
- package/dist/components/QuickSwitcher/asset-search.js +42 -0
- package/dist/components/SelectedOutlineCropControls.d.ts +8 -0
- package/dist/components/SelectedOutlineCropControls.js +299 -0
- package/dist/components/SelectedOutlineElement.js +83 -43
- package/dist/components/SelectedOutlineOverlay.d.ts +2 -2
- package/dist/components/SelectedOutlineOverlay.js +130 -8
- package/dist/components/SequencePropsSubscriptionProvider.d.ts +2 -0
- package/dist/components/SequencePropsSubscriptionProvider.js +31 -3
- package/dist/components/SidebarCollapserControls.d.ts +3 -1
- package/dist/components/SidebarCollapserControls.js +34 -29
- package/dist/components/SnappingToggle.d.ts +1 -3
- package/dist/components/SnappingToggle.js +2 -2
- package/dist/components/Timeline/TimelineAssetField.d.ts +9 -1
- package/dist/components/Timeline/TimelineAssetField.js +52 -100
- package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +7 -3
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +65 -38
- package/dist/components/Timeline/TimelineColorField.js +20 -1
- package/dist/components/Timeline/TimelineEffectPropItem.js +8 -77
- package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +1 -0
- package/dist/components/Timeline/TimelineHeightContainer.d.ts +2 -2
- package/dist/components/Timeline/TimelineKeyframeTracksContext.d.ts +3 -3
- package/dist/components/Timeline/TimelineList.d.ts +2 -2
- package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +7 -1
- package/dist/components/Timeline/TimelineSelection.d.ts +5 -5
- package/dist/components/Timeline/TimelineSelection.js +8 -6
- package/dist/components/Timeline/TimelineSequence.js +1 -5
- package/dist/components/Timeline/TimelineSequenceItem.js +57 -10
- package/dist/components/Timeline/TimelineSequencePropItem.js +27 -75
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +0 -1
- package/dist/components/Timeline/TimelineTrack.d.ts +2 -2
- package/dist/components/Timeline/TimelineTracks.d.ts +2 -2
- package/dist/components/Timeline/find-track-for-node-path-info.d.ts +1 -1
- package/dist/components/Timeline/get-sequence-context-menu-items.js +14 -12
- package/dist/components/Timeline/reset-selected-timeline-props.js +18 -10
- package/dist/components/Timeline/save-effect-prop.d.ts +10 -0
- package/dist/components/Timeline/save-effect-prop.js +52 -1
- package/dist/components/Timeline/should-show-track-in-timeline.d.ts +2 -2
- package/dist/components/Timeline/timeline-asset-link.js +17 -1
- package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.d.ts +4 -0
- package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +9 -3
- package/dist/components/Timeline/use-timeline-height.d.ts +2 -2
- package/dist/components/TopPanel.js +2 -2
- package/dist/components/UndoRedoButtons.js +27 -5
- package/dist/components/composition-drop-preview.js +1 -0
- package/dist/components/menu-toolbar-height.d.ts +1 -0
- package/dist/components/menu-toolbar-height.js +4 -0
- package/dist/components/selected-outline-drag.d.ts +41 -4
- package/dist/components/selected-outline-drag.js +179 -2
- package/dist/components/selected-outline-geometry.d.ts +1 -0
- package/dist/components/selected-outline-measurement.d.ts +11 -0
- package/dist/components/selected-outline-measurement.js +64 -3
- package/dist/components/selected-outline-types.d.ts +44 -1
- package/dist/components/selected-outline-types.js +21 -1
- package/dist/error-overlay/remotion-overlay/Overlay.js +3 -3
- package/dist/error-overlay/remotion-overlay/ShortcutHint.js +2 -3
- package/dist/esm/{chunk-pk1zwsn1.js → chunk-dr1y1vm3.js} +8417 -7127
- package/dist/esm/internals.mjs +8417 -7127
- package/dist/esm/previewEntry.mjs +51241 -49953
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/calculate-timeline.d.ts +2 -2
- package/dist/helpers/calculate-timeline.js +8 -28
- package/dist/helpers/get-timeline-sequence-sort-key.d.ts +3 -10
- package/dist/helpers/get-timeline-sequence-sort-key.js +5 -13
- package/dist/helpers/interactivity-enabled.d.ts +1 -0
- package/dist/helpers/interactivity-enabled.js +7 -2
- package/dist/helpers/is-mac.d.ts +1 -0
- package/dist/helpers/is-mac.js +4 -0
- package/dist/helpers/open-in-editor.d.ts +5 -1
- package/dist/helpers/open-in-editor.js +15 -1
- package/dist/helpers/sort-by-nonce-history.js +97 -19
- package/dist/helpers/use-keybinding.js +2 -3
- package/dist/helpers/use-menu-structure.js +10 -1
- package/dist/icons/caret.d.ts +1 -0
- package/dist/icons/caret.js +2 -2
- package/dist/icons/pen.d.ts +5 -0
- package/dist/icons/pen.js +8 -0
- package/dist/state/modals.d.ts +5 -0
- package/package.json +12 -12
- package/dist/helpers/get-timeline-sequence-hash.d.ts +0 -6
- package/dist/helpers/get-timeline-sequence-hash.js +0 -33
|
@@ -43,6 +43,7 @@ const TimelineKeyframeEasingLine_1 = require("./TimelineKeyframeEasingLine");
|
|
|
43
43
|
const TimelineSelection_1 = require("./TimelineSelection");
|
|
44
44
|
const TimelineWidthProvider_1 = require("./TimelineWidthProvider");
|
|
45
45
|
const row = {
|
|
46
|
+
overflow: 'hidden',
|
|
46
47
|
position: 'relative',
|
|
47
48
|
};
|
|
48
49
|
const rowSeparator = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type {
|
|
2
|
+
import type { TimelineTrackData } from '../../helpers/get-timeline-sequence-sort-key';
|
|
3
3
|
export declare const TimelineHeightContainer: React.NamedExoticComponent<{
|
|
4
|
-
readonly shown:
|
|
4
|
+
readonly shown: TimelineTrackData[];
|
|
5
5
|
readonly hasBeenCut: boolean;
|
|
6
6
|
readonly children: React.ReactNode;
|
|
7
7
|
}>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type {
|
|
2
|
+
import type { TimelineTrackData } from '../../helpers/get-timeline-sequence-sort-key';
|
|
3
3
|
export declare const TimelineKeyframeTracksProvider: React.FC<{
|
|
4
|
-
readonly tracks: readonly
|
|
4
|
+
readonly tracks: readonly TimelineTrackData[];
|
|
5
5
|
readonly children: React.ReactNode;
|
|
6
6
|
}>;
|
|
7
|
-
export declare const useTimelineKeyframeTracks: () => readonly
|
|
7
|
+
export declare const useTimelineKeyframeTracks: () => readonly TimelineTrackData[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type {
|
|
2
|
+
import type { TimelineTrackData } from '../../helpers/get-timeline-sequence-sort-key';
|
|
3
3
|
export declare const TimelineList: React.FC<{
|
|
4
|
-
readonly timeline:
|
|
4
|
+
readonly timeline: TimelineTrackData[];
|
|
5
5
|
}>;
|
|
@@ -17,6 +17,12 @@ const TimelineUvCoordinateField_1 = require("./TimelineUvCoordinateField");
|
|
|
17
17
|
const inlineWrapper = {
|
|
18
18
|
fontSize: 12,
|
|
19
19
|
};
|
|
20
|
+
const assetInlineWrapper = {
|
|
21
|
+
...inlineWrapper,
|
|
22
|
+
display: 'flex',
|
|
23
|
+
flex: 1,
|
|
24
|
+
minWidth: 0,
|
|
25
|
+
};
|
|
20
26
|
const isTimelinePrimitiveFieldInfo = (field) => {
|
|
21
27
|
return field.typeName !== 'array' && field.fieldSchema.type !== 'array';
|
|
22
28
|
};
|
|
@@ -60,7 +66,7 @@ const TimelinePrimitiveFieldValue = ({ field, onSave, onDragValueChange, onDragE
|
|
|
60
66
|
return (jsx_runtime_1.jsx("span", { style: inlineWrapper, children: jsx_runtime_1.jsx(TimelineFontFamilyField_1.TimelineFontFamilyField, { effectiveValue: effectiveValue, field: field, onDragEnd: onDragEnd, onDragValueChange: onDragValueChange, onSave: onSave, propStatus: propStatus }) }));
|
|
61
67
|
}
|
|
62
68
|
if (field.typeName === 'asset') {
|
|
63
|
-
return (jsx_runtime_1.jsx("span", { style:
|
|
69
|
+
return (jsx_runtime_1.jsx("span", { style: assetInlineWrapper, children: jsx_runtime_1.jsx(TimelineAssetField_1.TimelineAssetField, { effectiveValue: effectiveValue, field: field, onDragEnd: onDragEnd, onDragValueChange: onDragValueChange, onSave: onSave, propStatus: propStatus }) }));
|
|
64
70
|
}
|
|
65
71
|
throw new Error(`Unsupported field type: ${field.typeName}`);
|
|
66
72
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { type CSSProperties } from 'react';
|
|
2
2
|
import { type GetDragOverrides, type GetEffectDragOverrides, type PropStatuses } from 'remotion';
|
|
3
|
-
import type { SequenceNodePathInfo,
|
|
3
|
+
import type { SequenceNodePathInfo, TimelineTrackData } from '../../helpers/get-timeline-sequence-sort-key';
|
|
4
4
|
import { type GetIsExpanded } from '../ExpandedTracksProvider';
|
|
5
5
|
export declare const TIMELINE_SELECTED_BACKGROUND = "#3B3F42";
|
|
6
6
|
export declare const TIMELINE_SELECTED_LABEL_BACKGROUND = "#B0B0B0";
|
|
@@ -145,23 +145,23 @@ type TimelineSelectionOptions = {
|
|
|
145
145
|
};
|
|
146
146
|
export declare const getTimelineSelectionFromNodePathInfo: (nodePathInfo: SequenceNodePathInfo | null) => TimelineSelection | null;
|
|
147
147
|
export declare const getTimelineSelectionKey: (item: TimelineSelection) => string;
|
|
148
|
-
export declare const getSelectableTimelineSequenceSelections: (tracks: readonly Pick<
|
|
148
|
+
export declare const getSelectableTimelineSequenceSelections: (tracks: readonly Pick<TimelineTrackData, "nodePathInfo">[]) => TimelineSelection[];
|
|
149
149
|
export declare const getSelectableTimelineItems: ({ getDragOverrides, getEffectDragOverrides, getIsExpanded, propStatuses, selectedItems, timeline, timelinePosition, }: {
|
|
150
150
|
readonly getDragOverrides: GetDragOverrides;
|
|
151
151
|
readonly getEffectDragOverrides: GetEffectDragOverrides;
|
|
152
152
|
readonly getIsExpanded: GetIsExpanded;
|
|
153
153
|
readonly propStatuses: PropStatuses;
|
|
154
154
|
readonly selectedItems: readonly TimelineSelection[];
|
|
155
|
-
readonly timeline: readonly
|
|
155
|
+
readonly timeline: readonly TimelineTrackData[];
|
|
156
156
|
readonly timelinePosition: number;
|
|
157
157
|
}) => TimelineSelection[];
|
|
158
158
|
export declare const getTimelineSequenceSelectionKey: (nodePathInfo: SequenceNodePathInfo) => string;
|
|
159
159
|
export declare const TimelineSelectAllKeybindings: React.FC<{
|
|
160
|
-
readonly timeline: readonly
|
|
160
|
+
readonly timeline: readonly TimelineTrackData[];
|
|
161
161
|
}>;
|
|
162
162
|
export declare const TimelineSelectableItemsProvider: React.FC<{
|
|
163
163
|
readonly children: React.ReactNode;
|
|
164
|
-
readonly timeline: readonly
|
|
164
|
+
readonly timeline: readonly TimelineTrackData[];
|
|
165
165
|
}>;
|
|
166
166
|
export declare const TimelineSelectionProvider: React.FC<{
|
|
167
167
|
readonly children: React.ReactNode;
|
|
@@ -595,9 +595,9 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
595
595
|
const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
596
596
|
const timelineSelectionScope = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'composition' ? canvasContent.compositionId : null;
|
|
597
597
|
const { expandParentTracks } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksSetterContext);
|
|
598
|
-
const canSelect = (0, interactivity_enabled_1.
|
|
599
|
-
previewServerState.type === 'connected'
|
|
600
|
-
|
|
598
|
+
const canSelect = (0, interactivity_enabled_1.isStudioSelectionEnabled)() &&
|
|
599
|
+
(previewServerState.type === 'connected' ||
|
|
600
|
+
window.remotion_isReadOnlyStudio);
|
|
601
601
|
const [selectedItems, setSelectedItems] = (0, react_1.useState)([]);
|
|
602
602
|
const selectionAnchor = (0, react_1.useRef)(null);
|
|
603
603
|
const selectionScope = (0, react_1.useRef)(null);
|
|
@@ -614,7 +614,8 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
614
614
|
setSelectedItems([]);
|
|
615
615
|
}
|
|
616
616
|
}, [canSelect]);
|
|
617
|
-
const canSelectItem = (0, react_1.useCallback)((
|
|
617
|
+
const canSelectItem = (0, react_1.useCallback)((item) => canSelect &&
|
|
618
|
+
(!window.remotion_isReadOnlyStudio || item.type === 'sequence'), [canSelect]);
|
|
618
619
|
const getCurrentAvailableSelectionState = (0, react_1.useCallback)((currentSelectedItems) => {
|
|
619
620
|
if (selectionScope.current !== timelineSelectionScope) {
|
|
620
621
|
return exports.EMPTY_TIMELINE_SELECTION_STATE;
|
|
@@ -867,8 +868,9 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
867
868
|
]);
|
|
868
869
|
const currentSelection = (0, react_1.useRef)(value);
|
|
869
870
|
currentSelection.current = value;
|
|
870
|
-
return (jsx_runtime_1.jsx(CurrentTimelineSelectionContext.Provider, { value: currentSelection, children: jsx_runtime_1.jsxs(TimelineSelectionContext.Provider, { value: value, children: [children, jsx_runtime_1.jsx(TimelineEscapeKeybindings, {}),
|
|
871
|
-
|
|
871
|
+
return (jsx_runtime_1.jsx(CurrentTimelineSelectionContext.Provider, { value: currentSelection, children: jsx_runtime_1.jsxs(TimelineSelectionContext.Provider, { value: value, children: [children, jsx_runtime_1.jsx(TimelineEscapeKeybindings, {}), (0, interactivity_enabled_1.isStudioInteractivityEnabled)() ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
872
|
+
jsx_runtime_1.jsx(TimelineClipboardKeybindings_1.TimelineClipboardKeybindings, {}), jsx_runtime_1.jsx(TimelineDeleteKeybindings_1.TimelineDeleteKeybindings, {})
|
|
873
|
+
] })) : null] }) }));
|
|
872
874
|
};
|
|
873
875
|
exports.TimelineSelectionProvider = TimelineSelectionProvider;
|
|
874
876
|
const useTimelineSelection = () => {
|
|
@@ -341,9 +341,6 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
341
341
|
validatedSource: (_f = validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source) !== null && _f !== void 0 ? _f : null,
|
|
342
342
|
});
|
|
343
343
|
const contextMenuValues = (0, react_1.useMemo)(() => {
|
|
344
|
-
if (!previewConnected) {
|
|
345
|
-
return [];
|
|
346
|
-
}
|
|
347
344
|
return (0, get_sequence_context_menu_items_1.getSequenceContextMenuItems)({
|
|
348
345
|
assetLinkInfo,
|
|
349
346
|
canOpenInEditor,
|
|
@@ -376,7 +373,6 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
376
373
|
onDuplicateSequenceFromSource,
|
|
377
374
|
openInEditor,
|
|
378
375
|
originalLocation,
|
|
379
|
-
previewConnected,
|
|
380
376
|
s,
|
|
381
377
|
selectAsset,
|
|
382
378
|
]);
|
|
@@ -462,6 +458,6 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
462
458
|
return null;
|
|
463
459
|
}
|
|
464
460
|
const sequence = (jsx_runtime_1.jsxs(TimelineSequenceCurrentFrame, { s: s, displayDurationInFrames: displayDurationInFrames, premountWidth: premountWidth, postmountWidth: postmountWidth, style: style, nodePathInfo: nodePathInfo, sequenceFrameOffset: sequenceFrameOffset, fromCanUpdate: fromCanUpdate, frozenFrame: frozenFrame, onMoveDragPointerDown: onMoveDragPointerDown, onDoubleClick: canHandleSequenceDoubleClick ? onSequenceDoubleClick : undefined, children: [s.type === 'audio' ? (jsx_runtime_1.jsx("div", { style: mediaVisualizationStyle, children: jsx_runtime_1.jsx(AudioWaveform_1.AudioWaveform, { src: s.src, height: timeline_layout_1.TIMELINE_LAYER_HEIGHT_AUDIO, doesVolumeChange: s.doesVolumeChange, visualizationWidth: mediaVisualizationLayout.width, startFrom: s.startMediaFrom, durationInFrames: s.duration, volume: s.volume, playbackRate: s.playbackRate, loopDisplay: s.loopDisplay }) })) : null, s.type === 'video' ? (jsx_runtime_1.jsx(TimelineVideoInfo_1.TimelineVideoInfo, { src: s.src, visualizationWidth: width, naturalWidth: naturalWidth, startMediaFrom: s.startMediaFrom, mediaFrameAtSequenceZero: s.mediaFrameAtSequenceZero, sequenceFrameOffset: sequenceFrameOffset, durationInFrames: s.duration, playbackRate: s.playbackRate, volume: s.volume, doesVolumeChange: s.doesVolumeChange, premountWidth: premountWidth !== null && premountWidth !== void 0 ? premountWidth : 0, postmountWidth: postmountWidth !== null && postmountWidth !== void 0 ? postmountWidth : 0, loopDisplay: s.loopDisplay, frozenMediaFrame: s.frozenMediaFrame, extendLastFrame: extendVideoLastFrame })) : null, s.type === 'image' ? (jsx_runtime_1.jsx("div", { style: mediaVisualizationStyle, children: jsx_runtime_1.jsx(TimelineImageInfo_1.TimelineImageInfo, { src: s.src, visualizationWidth: mediaVisualizationLayout.width }) })) : null, s.loopDisplay === undefined ? null : (jsx_runtime_1.jsx(LoopedTimelineIndicators_1.LoopedTimelineIndicator, { loops: s.loopDisplay.numberOfTimes })), showLeftEdgeDragHandle && nodePathInfo && validatedLocation ? (jsx_runtime_1.jsx(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceLeftEdgeDragHandle, { nodePathInfo: nodePathInfo, windowWidth: windowWidth, timelineDurationInFrames: (_h = video.durationInFrames) !== null && _h !== void 0 ? _h : 1 })) : null, showRightEdgeDragHandle && nodePathInfo && validatedLocation ? (jsx_runtime_1.jsx(TimelineSequenceRightEdgeDragHandle_1.TimelineSequenceRightEdgeDragHandle, { nodePathInfo: nodePathInfo, windowWidth: windowWidth, timelineDurationInFrames: (_j = video.durationInFrames) !== null && _j !== void 0 ? _j : 1 })) : null] }));
|
|
465
|
-
return previewConnected ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: contextMenuValues, onOpen: onContextMenuOpen, children: sequence })) : (sequence);
|
|
461
|
+
return previewConnected || window.remotion_isReadOnlyStudio ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: contextMenuValues, onOpen: onContextMenuOpen, children: sequence })) : (sequence);
|
|
466
462
|
};
|
|
467
463
|
exports.TimelineSequence = react_1.default.memo(TimelineSequenceFn);
|
|
@@ -55,6 +55,7 @@ const ExpandedTracksProvider_1 = require("../ExpandedTracksProvider");
|
|
|
55
55
|
const InitialCompositionLoader_1 = require("../InitialCompositionLoader");
|
|
56
56
|
const layout_1 = require("../layout");
|
|
57
57
|
const NotificationCenter_1 = require("../Notifications/NotificationCenter");
|
|
58
|
+
const selected_outline_types_1 = require("../selected-outline-types");
|
|
58
59
|
const use_select_asset_1 = require("../use-select-asset");
|
|
59
60
|
const disable_sequence_interactivity_1 = require("./disable-sequence-interactivity");
|
|
60
61
|
const duplicate_selected_timeline_item_1 = require("./duplicate-selected-timeline-item");
|
|
@@ -186,7 +187,7 @@ const TimelineSequenceItem = ({ children, connectedCompositions, nestedDepth, se
|
|
|
186
187
|
const selectAsset = (0, use_select_asset_1.useSelectAsset)();
|
|
187
188
|
const selectComposition = (0, InitialCompositionLoader_1.useSelectComposition)();
|
|
188
189
|
const { onSelect, selectable, selected, selectionItem } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
|
|
189
|
-
const { selectedItems } = (0, TimelineSelection_1.useTimelineSelection)();
|
|
190
|
+
const { selectItem, selectedItems } = (0, TimelineSelection_1.useTimelineSelection)();
|
|
190
191
|
const containsSelection = (0, TimelineSelection_1.useTimelineRowContainsSelection)(nodePathInfo);
|
|
191
192
|
const [effectDropHovered, setEffectDropHovered] = (0, react_1.useState)(false);
|
|
192
193
|
const [isRenaming, setIsRenaming] = (0, react_1.useState)(false);
|
|
@@ -651,6 +652,29 @@ const TimelineSequenceItem = ({ children, connectedCompositions, nestedDepth, se
|
|
|
651
652
|
const canAddEffect = (nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.supportsEffects) === true &&
|
|
652
653
|
previewInteractive &&
|
|
653
654
|
Boolean(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source);
|
|
655
|
+
const canCrop = (0, react_1.useMemo)(() => {
|
|
656
|
+
if (!previewInteractive ||
|
|
657
|
+
!sequence.controls ||
|
|
658
|
+
!nodePathInfo ||
|
|
659
|
+
!propStatusesForOverride ||
|
|
660
|
+
!(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) {
|
|
661
|
+
return false;
|
|
662
|
+
}
|
|
663
|
+
const activeSchema = remotion_1.Internals.flattenActiveSchema(sequence.controls.schema, (key) => {
|
|
664
|
+
var _a;
|
|
665
|
+
return (_a = sequence.controls) === null || _a === void 0 ? void 0 : _a.currentRuntimeValueDotNotation[key];
|
|
666
|
+
});
|
|
667
|
+
return (0, selected_outline_types_1.canEditSelectedOutlineCrop)({
|
|
668
|
+
schema: activeSchema,
|
|
669
|
+
propStatuses: propStatusesForOverride,
|
|
670
|
+
});
|
|
671
|
+
}, [
|
|
672
|
+
nodePathInfo,
|
|
673
|
+
previewInteractive,
|
|
674
|
+
propStatusesForOverride,
|
|
675
|
+
sequence.controls,
|
|
676
|
+
validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
|
|
677
|
+
]);
|
|
654
678
|
const onAddEffect = (0, react_1.useCallback)(() => {
|
|
655
679
|
if (!canAddEffect ||
|
|
656
680
|
previewServerState.type !== 'connected' ||
|
|
@@ -671,10 +695,20 @@ const TimelineSequenceItem = ({ children, connectedCompositions, nestedDepth, se
|
|
|
671
695
|
setSelectedModal,
|
|
672
696
|
validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
|
|
673
697
|
]);
|
|
674
|
-
const
|
|
675
|
-
if (!
|
|
676
|
-
return
|
|
698
|
+
const onCrop = (0, react_1.useCallback)(() => {
|
|
699
|
+
if (!canCrop || !nodePathInfo) {
|
|
700
|
+
return;
|
|
677
701
|
}
|
|
702
|
+
selectItem({
|
|
703
|
+
type: 'sequence-prop',
|
|
704
|
+
nodePathInfo: {
|
|
705
|
+
...nodePathInfo,
|
|
706
|
+
auxiliaryKeys: ['controls', selected_outline_types_1.cropFieldKeys.left],
|
|
707
|
+
},
|
|
708
|
+
key: selected_outline_types_1.cropFieldKeys.left,
|
|
709
|
+
}, undefined, undefined, { reveal: true });
|
|
710
|
+
}, [canCrop, nodePathInfo, selectItem]);
|
|
711
|
+
const contextMenuValues = (0, react_1.useMemo)(() => {
|
|
678
712
|
return (0, get_sequence_context_menu_items_1.getSequenceContextMenuItems)({
|
|
679
713
|
assetLinkInfo,
|
|
680
714
|
canOpenInEditor,
|
|
@@ -706,12 +740,24 @@ const TimelineSequenceItem = ({ children, connectedCompositions, nestedDepth, se
|
|
|
706
740
|
subMenu: null,
|
|
707
741
|
value: 'add-effect',
|
|
708
742
|
},
|
|
709
|
-
{
|
|
710
|
-
type: 'divider',
|
|
711
|
-
id: 'add-effect-divider',
|
|
712
|
-
},
|
|
713
743
|
]
|
|
714
744
|
: []),
|
|
745
|
+
{
|
|
746
|
+
type: 'item',
|
|
747
|
+
id: 'crop',
|
|
748
|
+
keyHint: null,
|
|
749
|
+
label: 'Crop',
|
|
750
|
+
leftItem: null,
|
|
751
|
+
disabled: !canCrop,
|
|
752
|
+
onClick: onCrop,
|
|
753
|
+
quickSwitcherLabel: null,
|
|
754
|
+
subMenu: null,
|
|
755
|
+
value: 'crop',
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
type: 'divider',
|
|
759
|
+
id: 'crop-divider',
|
|
760
|
+
},
|
|
715
761
|
{
|
|
716
762
|
type: 'item',
|
|
717
763
|
id: 'rename-sequence',
|
|
@@ -733,6 +779,7 @@ const TimelineSequenceItem = ({ children, connectedCompositions, nestedDepth, se
|
|
|
733
779
|
}, [
|
|
734
780
|
assetLinkInfo,
|
|
735
781
|
canAddEffect,
|
|
782
|
+
canCrop,
|
|
736
783
|
canOpenInEditor,
|
|
737
784
|
canRenameThisSequence,
|
|
738
785
|
deleteDisabled,
|
|
@@ -742,13 +789,13 @@ const TimelineSequenceItem = ({ children, connectedCompositions, nestedDepth, se
|
|
|
742
789
|
freezeFrameMenuItem,
|
|
743
790
|
nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.supportsEffects,
|
|
744
791
|
onAddEffect,
|
|
792
|
+
onCrop,
|
|
745
793
|
onDeleteSequenceFromSource,
|
|
746
794
|
onDisableSequenceInteractivity,
|
|
747
795
|
onDuplicateSequenceFromSource,
|
|
748
796
|
onRenameSequence,
|
|
749
797
|
openInEditor,
|
|
750
798
|
originalLocation,
|
|
751
|
-
previewConnected,
|
|
752
799
|
selectAsset,
|
|
753
800
|
sequence,
|
|
754
801
|
]);
|
|
@@ -818,7 +865,7 @@ const TimelineSequenceItem = ({ children, connectedCompositions, nestedDepth, se
|
|
|
818
865
|
jsx_runtime_1.jsx(TimelineMediaInfo_1.TimelineMediaInfo, { src: mediaSrc })
|
|
819
866
|
] })) : null] }) }));
|
|
820
867
|
const draggableTrackRow = canHandleSequenceDrag ? (jsx_runtime_1.jsxs("div", { draggable: canReorderSequence, onDragStart: onSequenceDragStart, onDragEnd: onSequenceDragEnd, onDragOver: onSequenceDragOver, onDragLeave: onSequenceDragLeave, onDrop: onSequenceDrop, style: sequenceReorderWrapper, children: [sequenceReorderLineStyle ? (jsx_runtime_1.jsx("div", { style: sequenceReorderLineStyle })) : null, sequenceDropRejection ? (jsx_runtime_1.jsx("div", { style: sequenceReorderRejectionStyle, children: sequenceDropRejection })) : null, trackRow] })) : (trackRow);
|
|
821
|
-
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [previewConnected ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: contextMenuValues, onOpen: selectable ? onSelect : null, children: draggableTrackRow })) : (draggableTrackRow), previewConnected &&
|
|
868
|
+
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [previewConnected || window.remotion_isReadOnlyStudio ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: contextMenuValues, onOpen: selectable ? onSelect : null, children: draggableTrackRow })) : (draggableTrackRow), previewConnected &&
|
|
822
869
|
(0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
|
|
823
870
|
isExpanded &&
|
|
824
871
|
hasExpandableContent &&
|
|
@@ -6,9 +6,10 @@ const studio_shared_1 = require("@remotion/studio-shared");
|
|
|
6
6
|
const react_1 = require("react");
|
|
7
7
|
const remotion_1 = require("remotion");
|
|
8
8
|
const client_id_1 = require("../../helpers/client-id");
|
|
9
|
+
const open_in_editor_1 = require("../../helpers/open-in-editor");
|
|
9
10
|
const ContextMenu_1 = require("../ContextMenu");
|
|
11
|
+
const InspectorPanelLayout_1 = require("../InspectorPanelLayout");
|
|
10
12
|
const call_add_keyframe_1 = require("./call-add-keyframe");
|
|
11
|
-
const get_animation_item_selection_for_frame_1 = require("./get-animation-item-selection-for-frame");
|
|
12
13
|
const save_sequence_prop_1 = require("./save-sequence-prop");
|
|
13
14
|
const TimelineExpandArrowButton_1 = require("./TimelineExpandArrowButton");
|
|
14
15
|
const TimelineFieldRowContent_1 = require("./TimelineFieldRowContent");
|
|
@@ -18,8 +19,17 @@ const TimelineLayerEye_1 = require("./TimelineLayerEye");
|
|
|
18
19
|
const TimelineRowChrome_1 = require("./TimelineRowChrome");
|
|
19
20
|
const TimelineSchemaField_1 = require("./TimelineSchemaField");
|
|
20
21
|
const TimelineSelection_1 = require("./TimelineSelection");
|
|
21
|
-
const update_selected_easing_1 = require("./update-selected-easing");
|
|
22
22
|
const fieldRowBase = {};
|
|
23
|
+
const inlineSourceFieldRow = {
|
|
24
|
+
alignItems: 'stretch',
|
|
25
|
+
display: 'flex',
|
|
26
|
+
minWidth: 0,
|
|
27
|
+
width: '100%',
|
|
28
|
+
};
|
|
29
|
+
const computedSourceFieldRow = {
|
|
30
|
+
boxSizing: 'border-box',
|
|
31
|
+
paddingInline: InspectorPanelLayout_1.INSPECTOR_PANEL_HORIZONTAL_PADDING,
|
|
32
|
+
};
|
|
23
33
|
const isKeyframedStatus = (status) => {
|
|
24
34
|
return status.status === 'keyframed';
|
|
25
35
|
};
|
|
@@ -167,9 +177,6 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
|
|
|
167
177
|
const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
168
178
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
169
179
|
const selection = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
|
|
170
|
-
const { selectItems } = (0, TimelineSelection_1.useTimelineSelection)();
|
|
171
|
-
const setFrame = remotion_1.Internals.useTimelineSetFrame();
|
|
172
|
-
const videoConfig = (0, remotion_1.useVideoConfig)();
|
|
173
180
|
const timelinePosition = remotion_1.Internals.Timeline.useTimelinePosition();
|
|
174
181
|
const sourceFrame = timelinePosition - keyframeDisplayOffset;
|
|
175
182
|
const propStatusesForOverride = remotion_1.Internals.getPropStatusesCtx(visualModePropStatuses, nodePath);
|
|
@@ -267,84 +274,29 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
|
|
|
267
274
|
},
|
|
268
275
|
];
|
|
269
276
|
}, [canShowReset, onReset]);
|
|
270
|
-
const seekToDisplayFrame = (0, react_1.useCallback)((frame) => {
|
|
271
|
-
setFrame((current) => {
|
|
272
|
-
const next = { ...current, [videoConfig.id]: frame };
|
|
273
|
-
remotion_1.Internals.persistCurrentFrame(next);
|
|
274
|
-
return next;
|
|
275
|
-
});
|
|
276
|
-
}, [setFrame, videoConfig.id]);
|
|
277
277
|
const onPropertyDoubleClick = (0, react_1.useCallback)((event) => {
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
const keyframeSelection = {
|
|
282
|
-
type: 'keyframe',
|
|
283
|
-
nodePathInfo,
|
|
284
|
-
frame: sourceFrame + keyframeDisplayOffset,
|
|
285
|
-
};
|
|
286
|
-
if (propStatus.status === 'static') {
|
|
287
|
-
if (!keyframable || previewServerState.type !== 'connected') {
|
|
288
|
-
return;
|
|
289
|
-
}
|
|
290
|
-
const value = remotion_1.Internals.getEffectiveVisualModeValue({
|
|
291
|
-
propStatus,
|
|
292
|
-
dragOverrideValue,
|
|
293
|
-
frame: sourceFrame,
|
|
294
|
-
defaultValue: field.fieldSchema.default,
|
|
295
|
-
shouldResortToDefaultValueIfUndefined: true,
|
|
296
|
-
});
|
|
297
|
-
event.stopPropagation();
|
|
298
|
-
(0, call_add_keyframe_1.callAddSequenceKeyframe)({
|
|
299
|
-
fileName: validatedLocation.source,
|
|
300
|
-
nodePath,
|
|
301
|
-
fieldKey: field.key,
|
|
302
|
-
sourceFrame,
|
|
303
|
-
value,
|
|
304
|
-
schema,
|
|
305
|
-
setPropStatuses,
|
|
306
|
-
clientId: previewServerState.clientId,
|
|
307
|
-
}).catch(() => undefined);
|
|
308
|
-
selectItems([keyframeSelection], { reveal: true });
|
|
309
|
-
seekToDisplayFrame(keyframeSelection.frame);
|
|
310
|
-
return;
|
|
311
|
-
}
|
|
312
|
-
const targetSelection = (0, get_animation_item_selection_for_frame_1.getAnimationItemSelectionForSourceFrame)({
|
|
313
|
-
includeEasings: (0, update_selected_easing_1.canEditEasingForInterpolationFunction)(propStatus.interpolationFunction),
|
|
314
|
-
keyframeDisplayOffset,
|
|
315
|
-
keyframes: propStatus.keyframes,
|
|
316
|
-
nodePathInfo,
|
|
317
|
-
sourceFrame,
|
|
318
|
-
});
|
|
319
|
-
if (targetSelection === null) {
|
|
278
|
+
var _a;
|
|
279
|
+
if (!window.remotion_editorName ||
|
|
280
|
+
previewServerState.type !== 'connected') {
|
|
320
281
|
return;
|
|
321
282
|
}
|
|
322
283
|
event.stopPropagation();
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
}
|
|
327
|
-
}, [
|
|
328
|
-
dragOverrideValue,
|
|
329
|
-
field.fieldSchema.default,
|
|
330
|
-
field.key,
|
|
331
|
-
keyframeDisplayOffset,
|
|
332
|
-
keyframable,
|
|
333
|
-
nodePath,
|
|
334
|
-
nodePathInfo,
|
|
335
|
-
previewServerState,
|
|
336
|
-
propStatus,
|
|
337
|
-
schema,
|
|
338
|
-
seekToDisplayFrame,
|
|
339
|
-
selectItems,
|
|
340
|
-
setPropStatuses,
|
|
341
|
-
sourceFrame,
|
|
342
|
-
validatedLocation.source,
|
|
343
|
-
]);
|
|
284
|
+
(0, open_in_editor_1.openOriginalPositionInEditorAtProperty)({
|
|
285
|
+
originalPosition: validatedLocation,
|
|
286
|
+
property: (_a = field.key.split('.').at(-1)) !== null && _a !== void 0 ? _a : field.key,
|
|
287
|
+
}).catch(() => undefined);
|
|
288
|
+
}, [field.key, previewServerState.type, validatedLocation]);
|
|
344
289
|
if (propStatus === null) {
|
|
345
290
|
return null;
|
|
346
291
|
}
|
|
347
292
|
const fieldValue = isKeyframedStatus(propStatus) ? (jsx_runtime_1.jsx(exports.TimelineSequenceKeyframedValue, { field: field, fileName: validatedLocation.source, nodePath: nodePath, schema: schema, propStatus: propStatus, sourceFrame: sourceFrame })) : propStatus.status === 'static' ? (jsx_runtime_1.jsx(Value, { field: field, nodePath: nodePath, validatedLocation: validatedLocation, schema: schema, propStatus: propStatus })) : (jsx_runtime_1.jsx(TimelineSchemaField_1.TimelineNonEditableStatus, { propStatus: propStatus }));
|
|
293
|
+
if (field.typeName === 'asset' && field.key === 'src') {
|
|
294
|
+
return (jsx_runtime_1.jsx("div", { style: {
|
|
295
|
+
...inlineSourceFieldRow,
|
|
296
|
+
...(propStatus.status === 'computed' ? computedSourceFieldRow : null),
|
|
297
|
+
...style,
|
|
298
|
+
}, children: fieldValue }));
|
|
299
|
+
}
|
|
348
300
|
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, selectionItem: selection.selectionItem, onSelect: selection.onSelect, onDoubleClick: onPropertyDoubleClick, showSelectedBackground: true, containsSelection: false, outerHeight: null, children: jsx_runtime_1.jsx(TimelineFieldRowContent_1.TimelineFieldRowContent, { field: field, rowDepth: rowDepth, selected: selection.selected, children: fieldValue }) }));
|
|
349
301
|
return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: contextMenuValues, onOpen: selection.selectable ? selection.onSelect : null, children: row }));
|
|
350
302
|
};
|
|
@@ -107,7 +107,6 @@ const getMinimumSequenceDuration = ({ sequence, sequences, }) => {
|
|
|
107
107
|
return 1;
|
|
108
108
|
}
|
|
109
109
|
const siblings = (0, sort_by_nonce_history_1.sortItemsByNonceHistory)(sequences.filter((candidate) => candidate.parent === sequence.parent &&
|
|
110
|
-
candidate.rootId === sequence.rootId &&
|
|
111
110
|
((0, exports.isTransitionSeriesSequence)(candidate) ||
|
|
112
111
|
isTransitionSeriesTransition(candidate))));
|
|
113
112
|
const sequenceIndex = siblings.findIndex((candidate) => candidate.id === sequence.id);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type {
|
|
2
|
+
import type { TimelineTrackData } from '../../helpers/get-timeline-sequence-sort-key';
|
|
3
3
|
export declare const TimelineTrack: React.NamedExoticComponent<{
|
|
4
|
-
readonly track:
|
|
4
|
+
readonly track: TimelineTrackData;
|
|
5
5
|
}>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type {
|
|
2
|
+
import type { TimelineTrackData } from '../../helpers/get-timeline-sequence-sort-key';
|
|
3
3
|
export declare const TimelineTracks: React.NamedExoticComponent<{
|
|
4
|
-
readonly timeline:
|
|
4
|
+
readonly timeline: TimelineTrackData[];
|
|
5
5
|
readonly hasBeenCut: boolean;
|
|
6
6
|
}>;
|
|
@@ -4,4 +4,4 @@ export declare const findTrackForNodePathInfo: ({ sequences, overrideIdsToNodePa
|
|
|
4
4
|
sequences: TSequence[];
|
|
5
5
|
overrideIdsToNodePaths: OverrideIdToNodePaths;
|
|
6
6
|
nodePathInfo: SequenceNodePathInfo;
|
|
7
|
-
}) => import("../../helpers/get-timeline-sequence-sort-key").
|
|
7
|
+
}) => import("../../helpers/get-timeline-sequence-sort-key").TimelineTrackData | undefined;
|
|
@@ -145,18 +145,20 @@ const getSequenceContextMenuItems = ({ assetLinkInfo, canOpenInEditor, deleteDis
|
|
|
145
145
|
}
|
|
146
146
|
: null,
|
|
147
147
|
...sourceActions,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
148
|
+
includeSourceEditItems
|
|
149
|
+
? {
|
|
150
|
+
type: 'item',
|
|
151
|
+
id: 'disable-interactivity',
|
|
152
|
+
keyHint: null,
|
|
153
|
+
label: 'Disable interactivity',
|
|
154
|
+
leftItem: null,
|
|
155
|
+
disabled: disableInteractivityDisabled,
|
|
156
|
+
onClick: onDisableSequenceInteractivity,
|
|
157
|
+
quickSwitcherLabel: null,
|
|
158
|
+
subMenu: null,
|
|
159
|
+
value: 'disable-interactivity',
|
|
160
|
+
}
|
|
161
|
+
: null,
|
|
160
162
|
includeSourceEditItems
|
|
161
163
|
? {
|
|
162
164
|
type: 'item',
|
|
@@ -175,18 +175,26 @@ const resetSelectedTimelineProps = ({ selections, sequences, overrideIdsToNodePa
|
|
|
175
175
|
: 'Reapply sequence prop',
|
|
176
176
|
}));
|
|
177
177
|
}
|
|
178
|
-
|
|
179
|
-
resetPromises.push((0, save_effect_prop_1.
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
178
|
+
if (effectPropTargets.length > 0) {
|
|
179
|
+
resetPromises.push((0, save_effect_prop_1.saveMultipleEffectProps)({
|
|
180
|
+
changes: effectPropTargets.map((target) => ({
|
|
181
|
+
type: 'value',
|
|
182
|
+
fileName: target.fileName,
|
|
183
|
+
nodePath: target.nodePath,
|
|
184
|
+
effectIndex: target.effectIndex,
|
|
185
|
+
fieldKey: target.fieldKey,
|
|
186
|
+
value: target.value,
|
|
187
|
+
defaultValue: target.defaultValue,
|
|
188
|
+
schema: target.schema,
|
|
189
|
+
})),
|
|
188
190
|
setPropStatuses,
|
|
189
191
|
clientId,
|
|
192
|
+
undoLabel: effectPropTargets.length > 1
|
|
193
|
+
? 'Reset selected effect props'
|
|
194
|
+
: 'Reset effect prop',
|
|
195
|
+
redoLabel: effectPropTargets.length > 1
|
|
196
|
+
? 'Reapply selected effect props'
|
|
197
|
+
: 'Reapply effect prop',
|
|
190
198
|
}));
|
|
191
199
|
}
|
|
192
200
|
return Promise.all(resetPromises).then(() => undefined);
|
|
@@ -20,5 +20,15 @@ type SaveEffectPropEffectParam = SaveEffectPropBase & {
|
|
|
20
20
|
effectParam: EffectClipboardParam;
|
|
21
21
|
};
|
|
22
22
|
type SaveEffectPropInput = SaveEffectPropValue | SaveEffectPropEffectParam;
|
|
23
|
+
type WithoutSaveContext<T> = T extends unknown ? Omit<T, 'setPropStatuses' | 'clientId'> : never;
|
|
24
|
+
type SaveMultipleEffectPropChange = WithoutSaveContext<SaveEffectPropInput>;
|
|
25
|
+
type SaveMultipleEffectPropsOptions = {
|
|
26
|
+
changes: SaveMultipleEffectPropChange[];
|
|
27
|
+
setPropStatuses: SetPropStatuses;
|
|
28
|
+
clientId: string;
|
|
29
|
+
undoLabel: string;
|
|
30
|
+
redoLabel: string;
|
|
31
|
+
};
|
|
32
|
+
export declare const saveMultipleEffectProps: ({ changes, setPropStatuses, clientId, undoLabel, redoLabel, }: SaveMultipleEffectPropsOptions) => Promise<void>;
|
|
23
33
|
export declare const saveEffectProp: (input: SaveEffectPropInput) => Promise<void>;
|
|
24
34
|
export {};
|
|
@@ -1,10 +1,61 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.saveEffectProp = void 0;
|
|
3
|
+
exports.saveEffectProp = exports.saveMultipleEffectProps = void 0;
|
|
4
4
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
5
5
|
const call_api_1 = require("../call-api");
|
|
6
6
|
const apply_effect_response_to_prop_statuses_1 = require("./apply-effect-response-to-prop-statuses");
|
|
7
7
|
const save_prop_queue_1 = require("./save-prop-queue");
|
|
8
|
+
const saveMultipleEffectProps = ({ changes, setPropStatuses, clientId, undoLabel, redoLabel, }) => {
|
|
9
|
+
if (changes.length === 0) {
|
|
10
|
+
return Promise.resolve();
|
|
11
|
+
}
|
|
12
|
+
for (const change of changes) {
|
|
13
|
+
if (change.type === 'effect-param') {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
setPropStatuses(change.nodePath, (prev) => (0, studio_shared_1.optimisticUpdateForEffectPropStatuses)({
|
|
17
|
+
previous: prev,
|
|
18
|
+
effectIndex: change.effectIndex,
|
|
19
|
+
fieldKey: change.fieldKey,
|
|
20
|
+
value: change.value,
|
|
21
|
+
schema: change.schema,
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
return (0, call_api_1.callApi)('/api/save-multiple-effect-props', {
|
|
25
|
+
edits: changes.map((change) => change.type === 'effect-param'
|
|
26
|
+
? {
|
|
27
|
+
type: 'effect-param',
|
|
28
|
+
fileName: change.fileName,
|
|
29
|
+
sequenceNodePath: change.nodePath,
|
|
30
|
+
effectIndex: change.effectIndex,
|
|
31
|
+
key: change.fieldKey,
|
|
32
|
+
effectParam: change.effectParam,
|
|
33
|
+
defaultValue: change.defaultValue,
|
|
34
|
+
schema: change.schema,
|
|
35
|
+
}
|
|
36
|
+
: {
|
|
37
|
+
type: 'value',
|
|
38
|
+
fileName: change.fileName,
|
|
39
|
+
sequenceNodePath: change.nodePath,
|
|
40
|
+
effectIndex: change.effectIndex,
|
|
41
|
+
key: change.fieldKey,
|
|
42
|
+
value: JSON.stringify(change.value),
|
|
43
|
+
defaultValue: change.defaultValue,
|
|
44
|
+
schema: change.schema,
|
|
45
|
+
}),
|
|
46
|
+
clientId,
|
|
47
|
+
undoLabel,
|
|
48
|
+
redoLabel,
|
|
49
|
+
}).then((response) => {
|
|
50
|
+
for (const result of response.results) {
|
|
51
|
+
setPropStatuses(result.sequenceNodePath, (prev) => (0, apply_effect_response_to_prop_statuses_1.applyEffectResponseToPropStatuses)({
|
|
52
|
+
previous: prev,
|
|
53
|
+
response: result.status,
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
exports.saveMultipleEffectProps = saveMultipleEffectProps;
|
|
8
59
|
const saveEffectProp = (input) => {
|
|
9
60
|
const { fileName, nodePath, effectIndex, fieldKey, defaultValue, schema, setPropStatuses, clientId, } = input;
|
|
10
61
|
return (0, save_prop_queue_1.enqueueSavePropChange)({
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const shouldShowTrackInTimeline: (track:
|
|
1
|
+
import type { TimelineTrackData } from '../../helpers/get-timeline-sequence-sort-key';
|
|
2
|
+
export declare const shouldShowTrackInTimeline: (track: TimelineTrackData, durationInFrames: number) => boolean;
|