@remotion/studio 4.0.471 → 4.0.473
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/api/rename-static-file.d.ts +6 -0
- package/dist/api/rename-static-file.js +18 -0
- package/dist/components/AssetSelector.js +55 -5
- package/dist/components/AssetSelectorItem.js +153 -27
- package/dist/components/Canvas.js +147 -0
- package/dist/components/CompositionSelectorItem.d.ts +1 -0
- package/dist/components/CompositionSelectorItem.js +12 -4
- package/dist/components/ConfirmationDialog-types.d.ts +8 -0
- package/dist/components/ConfirmationDialog-types.js +2 -0
- package/dist/components/ConfirmationDialog.d.ts +7 -0
- package/dist/components/ConfirmationDialog.js +103 -0
- package/dist/components/ContextMenu.d.ts +9 -1
- package/dist/components/ContextMenu.js +99 -47
- package/dist/components/CurrentAsset.d.ts +1 -0
- package/dist/components/CurrentAsset.js +13 -2
- package/dist/components/Editor.js +14 -6
- package/dist/components/EditorContent.js +15 -2
- package/dist/components/EditorContexts.js +2 -1
- package/dist/components/EditorRuler/Ruler.js +2 -0
- package/dist/components/ExplorerPanel.d.ts +0 -4
- package/dist/components/ExplorerPanel.js +8 -4
- package/dist/components/ExplorerPanelRef.d.ts +4 -0
- package/dist/components/ExplorerPanelRef.js +5 -0
- package/dist/components/FilePreview.d.ts +1 -1
- package/dist/components/InitialCompositionLoader.d.ts +0 -1
- package/dist/components/InitialCompositionLoader.js +5 -27
- package/dist/components/Menu/MenuItem.js +7 -1
- package/dist/components/Menu/SubMenu.js +5 -1
- package/dist/components/Menu/portals.js +17 -8
- package/dist/components/MenuToolbar.js +5 -1
- package/dist/components/ModalContainer.js +6 -1
- package/dist/components/Modals.js +8 -2
- package/dist/components/NewComposition/CodemodFooter.js +2 -2
- package/dist/components/NewComposition/ComboBox.js +8 -2
- package/dist/components/NewComposition/DeleteFolder.d.ts +6 -0
- package/dist/components/NewComposition/DeleteFolder.js +39 -0
- package/dist/components/NewComposition/DeleteStaticFile.d.ts +4 -0
- package/dist/components/NewComposition/DeleteStaticFile.js +44 -0
- package/dist/components/NewComposition/RenameFolder.d.ts +6 -0
- package/dist/components/NewComposition/RenameFolder.js +60 -0
- package/dist/components/NewComposition/RenameStaticFile.d.ts +4 -0
- package/dist/components/NewComposition/RenameStaticFile.js +118 -0
- package/dist/components/OptionsPanel.js +5 -1
- package/dist/components/OutlineToggle.d.ts +2 -0
- package/dist/components/OutlineToggle.js +20 -0
- package/dist/components/Preview.d.ts +0 -2
- package/dist/components/Preview.js +23 -33
- package/dist/components/PreviewToolbar.js +19 -6
- package/dist/components/RenderButton.js +8 -2
- package/dist/components/RenderPreview.js +2 -2
- package/dist/components/SelectedOutlineOverlay.d.ts +105 -4
- package/dist/components/SelectedOutlineOverlay.js +578 -59
- package/dist/components/ShowOutlinesProvider.d.ts +4 -0
- package/dist/components/ShowOutlinesProvider.js +24 -0
- package/dist/components/SizeSelector.js +3 -3
- package/dist/components/Splitter/SplitterContainer.js +9 -0
- package/dist/components/Splitter/SplitterHandle.js +65 -70
- package/dist/components/StaticFilePreview.js +2 -2
- package/dist/components/Timeline/KeyframeSettingsModal.d.ts +15 -0
- package/dist/components/Timeline/KeyframeSettingsModal.js +150 -0
- package/dist/components/Timeline/Timeline.js +50 -15
- package/dist/components/Timeline/TimelineArrayField.d.ts +9 -0
- package/dist/components/Timeline/TimelineArrayField.js +210 -0
- package/dist/components/Timeline/TimelineBooleanField.d.ts +2 -2
- package/dist/components/Timeline/TimelineBooleanField.js +2 -2
- package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +43 -0
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +479 -0
- package/dist/components/Timeline/TimelineColorField.d.ts +2 -2
- package/dist/components/Timeline/TimelineColorField.js +2 -8
- package/dist/components/Timeline/TimelineDeleteKeybindings.js +12 -2
- package/dist/components/Timeline/TimelineEffectItem.js +3 -2
- package/dist/components/Timeline/TimelineEffectPropItem.js +146 -26
- package/dist/components/Timeline/TimelineEnumField.d.ts +2 -2
- package/dist/components/Timeline/TimelineEnumField.js +3 -3
- package/dist/components/Timeline/TimelineKeyframeControls.d.ts +4 -3
- package/dist/components/Timeline/TimelineKeyframeControls.js +41 -37
- package/dist/components/Timeline/TimelineKeyframeDiamond.js +24 -21
- package/dist/components/Timeline/TimelineKeyframeDiamondIcon.d.ts +6 -0
- package/dist/components/Timeline/TimelineKeyframeDiamondIcon.js +14 -0
- package/dist/components/Timeline/TimelineKeyframeDragState.d.ts +17 -0
- package/dist/components/Timeline/TimelineKeyframeDragState.js +39 -0
- package/dist/components/Timeline/TimelineKeyframedValue.d.ts +7 -2
- package/dist/components/Timeline/TimelineKeyframedValue.js +22 -8
- package/dist/components/Timeline/TimelineLayerEye.d.ts +1 -0
- package/dist/components/Timeline/TimelineLayerEye.js +8 -3
- package/dist/components/Timeline/TimelineList.js +2 -2
- package/dist/components/Timeline/TimelineMediaInfo.d.ts +0 -13
- package/dist/components/Timeline/TimelineMediaInfo.js +8 -73
- package/dist/components/Timeline/TimelineNumberField.d.ts +2 -2
- package/dist/components/Timeline/TimelineNumberField.js +7 -11
- package/dist/components/Timeline/TimelinePrimitiveFieldValue.d.ts +17 -0
- package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +53 -0
- package/dist/components/Timeline/TimelineRotationField.d.ts +2 -2
- package/dist/components/Timeline/TimelineRotationField.js +41 -24
- package/dist/components/Timeline/TimelineRowChrome.js +8 -7
- package/dist/components/Timeline/TimelineScaleField.d.ts +20 -0
- package/dist/components/Timeline/TimelineScaleField.js +314 -0
- package/dist/components/Timeline/TimelineSchemaField.d.ts +3 -2
- package/dist/components/Timeline/TimelineSchemaField.js +8 -42
- package/dist/components/Timeline/TimelineSelection.js +3 -2
- package/dist/components/Timeline/TimelineSequence.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequence.js +51 -10
- package/dist/components/Timeline/TimelineSequenceFrame.js +1 -0
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequenceItem.js +282 -28
- package/dist/components/Timeline/TimelineSequencePropItem.js +161 -35
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +58 -0
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +525 -0
- package/dist/components/Timeline/TimelineTrack.js +1 -1
- package/dist/components/Timeline/TimelineTranslateField.d.ts +2 -2
- package/dist/components/Timeline/TimelineTranslateField.js +21 -25
- package/dist/components/Timeline/TimelineUvCoordinateField.d.ts +2 -2
- package/dist/components/Timeline/TimelineUvCoordinateField.js +20 -26
- package/dist/components/Timeline/apply-effect-response-to-code-values.d.ts +5 -0
- package/dist/components/Timeline/apply-effect-response-to-code-values.js +19 -0
- package/dist/components/Timeline/call-add-keyframe.js +4 -0
- package/dist/components/Timeline/call-move-keyframe.d.ts +19 -0
- package/dist/components/Timeline/call-move-keyframe.js +71 -0
- package/dist/components/Timeline/call-update-keyframe-settings.d.ts +22 -0
- package/dist/components/Timeline/call-update-keyframe-settings.js +52 -0
- package/dist/components/Timeline/delete-selected-timeline-item.d.ts +7 -4
- package/dist/components/Timeline/delete-selected-timeline-item.js +33 -21
- package/dist/components/Timeline/duplicate-selected-timeline-item.d.ts +4 -2
- package/dist/components/Timeline/duplicate-selected-timeline-item.js +39 -34
- package/dist/components/Timeline/get-bounded-keyframe-drag-delta.d.ts +8 -0
- package/dist/components/Timeline/get-bounded-keyframe-drag-delta.js +12 -0
- package/dist/components/Timeline/get-keyframe-navigation.d.ts +2 -2
- package/dist/components/Timeline/get-keyframe-navigation.js +14 -6
- package/dist/components/Timeline/get-node-keyframes.d.ts +5 -2
- package/dist/components/Timeline/get-node-keyframes.js +38 -5
- package/dist/components/Timeline/get-timeline-keyframes.js +4 -4
- package/dist/components/Timeline/reset-selected-timeline-props.js +22 -8
- package/dist/components/Timeline/save-effect-prop.d.ts +14 -3
- package/dist/components/Timeline/save-effect-prop.js +36 -18
- package/dist/components/Timeline/save-prop-queue.d.ts +2 -1
- package/dist/components/Timeline/save-prop-queue.js +5 -2
- package/dist/components/Timeline/save-sequence-prop.d.ts +2 -7
- package/dist/components/Timeline/save-sequence-prop.js +33 -30
- package/dist/components/Timeline/should-clear-selection-on-pointer-down.d.ts +3 -0
- package/dist/components/Timeline/should-clear-selection-on-pointer-down.js +7 -0
- package/dist/components/Timeline/timeline-asset-link.d.ts +13 -0
- package/dist/components/Timeline/timeline-asset-link.js +37 -0
- package/dist/components/Timeline/timeline-field-utils.d.ts +1 -0
- package/dist/components/Timeline/timeline-field-utils.js +5 -1
- package/dist/components/Timeline/timeline-translate-utils.js +9 -2
- package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +7 -0
- package/dist/components/Timeline/use-timeline-keyframe-drag.d.ts +10 -0
- package/dist/components/Timeline/use-timeline-keyframe-drag.js +378 -0
- package/dist/components/TopPanel.d.ts +1 -1
- package/dist/components/folder-menu-items.d.ts +12 -0
- package/dist/components/folder-menu-items.js +147 -0
- package/dist/components/import-assets.d.ts +22 -0
- package/dist/components/import-assets.js +294 -0
- package/dist/components/load-canvas-content-from-url.d.ts +1 -0
- package/dist/components/load-canvas-content-from-url.js +9 -3
- package/dist/components/use-select-asset.d.ts +1 -0
- package/dist/components/use-select-asset.js +30 -0
- package/dist/error-overlay/error-origin.d.ts +3 -0
- package/dist/error-overlay/error-origin.js +42 -0
- package/dist/error-overlay/react-overlay/listen-to-runtime-errors.js +6 -2
- package/dist/error-overlay/remotion-overlay/ErrorLoader.js +38 -0
- package/dist/error-overlay/remotion-overlay/ShortcutHint.js +1 -1
- package/dist/error-overlay/remotion-overlay/log-studio-error.d.ts +3 -0
- package/dist/error-overlay/remotion-overlay/log-studio-error.js +27 -0
- package/dist/esm/{chunk-z0z9d4r0.js → chunk-q0jkt0zq.js} +23062 -17350
- package/dist/esm/internals.mjs +23062 -17350
- package/dist/esm/previewEntry.mjs +22351 -16615
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/calculate-timeline.js +7 -3
- package/dist/helpers/create-folder-tree.js +1 -0
- package/dist/helpers/get-asset-metadata.js +2 -2
- package/dist/helpers/get-folder-id.d.ts +4 -0
- package/dist/helpers/get-folder-id.js +7 -0
- package/dist/helpers/get-preview-file-type.d.ts +2 -0
- package/dist/helpers/get-preview-file-type.js +33 -0
- package/dist/helpers/get-timeline-sequence-sort-key.d.ts +2 -0
- package/dist/helpers/install-required-package.d.ts +1 -0
- package/dist/helpers/install-required-package.js +39 -0
- package/dist/helpers/remote-asset-drag.d.ts +4 -0
- package/dist/helpers/remote-asset-drag.js +73 -0
- package/dist/helpers/timeline-layout.js +5 -1
- package/dist/helpers/use-asset-drag-events.d.ts +5 -2
- package/dist/helpers/use-asset-drag-events.js +13 -2
- package/dist/helpers/validate-folder-rename.d.ts +6 -0
- package/dist/helpers/validate-folder-rename.js +19 -0
- package/dist/hot-middleware-client/client.js +6 -0
- package/dist/state/editor-outlines.d.ts +8 -0
- package/dist/state/editor-outlines.js +18 -0
- package/dist/state/modals.d.ts +29 -2
- package/dist/state/scale-lock.d.ts +18 -0
- package/dist/state/scale-lock.js +59 -0
- package/package.json +10 -10
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.VideoPreview =
|
|
3
|
+
exports.VideoPreview = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const player_1 = require("@remotion/player");
|
|
6
6
|
const react_1 = require("react");
|
|
@@ -8,12 +8,15 @@ const remotion_1 = require("remotion");
|
|
|
8
8
|
const ErrorLoader_1 = require("../error-overlay/remotion-overlay/ErrorLoader");
|
|
9
9
|
const checkerboard_background_1 = require("../helpers/checkerboard-background");
|
|
10
10
|
const colors_1 = require("../helpers/colors");
|
|
11
|
+
const get_preview_file_type_1 = require("../helpers/get-preview-file-type");
|
|
11
12
|
const checkerboard_1 = require("../state/checkerboard");
|
|
12
13
|
const is_menu_item_1 = require("./Menu/is-menu-item");
|
|
13
14
|
const RenderPreview_1 = require("./RenderPreview");
|
|
14
15
|
const SelectedOutlineOverlay_1 = require("./SelectedOutlineOverlay");
|
|
15
16
|
const Spinner_1 = require("./Spinner");
|
|
16
17
|
const StaticFilePreview_1 = require("./StaticFilePreview");
|
|
18
|
+
const should_clear_selection_on_pointer_down_1 = require("./Timeline/should-clear-selection-on-pointer-down");
|
|
19
|
+
const TimelineSelection_1 = require("./Timeline/TimelineSelection");
|
|
17
20
|
const centeredContainer = {
|
|
18
21
|
display: 'flex',
|
|
19
22
|
flex: 1,
|
|
@@ -33,36 +36,6 @@ const assetMetadataErrorContainer = {
|
|
|
33
36
|
height: '100%',
|
|
34
37
|
overflowY: 'auto',
|
|
35
38
|
};
|
|
36
|
-
const getPreviewFileType = (fileName) => {
|
|
37
|
-
var _a;
|
|
38
|
-
if (!fileName) {
|
|
39
|
-
return 'other';
|
|
40
|
-
}
|
|
41
|
-
const audioExtensions = ['mp3', 'wav', 'ogg', 'aac'];
|
|
42
|
-
const videoExtensions = ['mp4', 'avi', 'mkv', 'mov', 'webm'];
|
|
43
|
-
const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp'];
|
|
44
|
-
const fileExtension = (_a = fileName.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
45
|
-
if (fileExtension === undefined) {
|
|
46
|
-
throw new Error('File extension is undefined');
|
|
47
|
-
}
|
|
48
|
-
if (audioExtensions.includes(fileExtension)) {
|
|
49
|
-
return 'audio';
|
|
50
|
-
}
|
|
51
|
-
if (videoExtensions.includes(fileExtension)) {
|
|
52
|
-
return 'video';
|
|
53
|
-
}
|
|
54
|
-
if (imageExtensions.includes(fileExtension)) {
|
|
55
|
-
return 'image';
|
|
56
|
-
}
|
|
57
|
-
if (fileExtension === 'json') {
|
|
58
|
-
return 'json';
|
|
59
|
-
}
|
|
60
|
-
if (fileExtension === 'txt') {
|
|
61
|
-
return 'txt';
|
|
62
|
-
}
|
|
63
|
-
return 'other';
|
|
64
|
-
};
|
|
65
|
-
exports.getPreviewFileType = getPreviewFileType;
|
|
66
39
|
const checkerboardSize = 49;
|
|
67
40
|
const containerStyle = (options) => {
|
|
68
41
|
return {
|
|
@@ -126,7 +99,7 @@ const CompWhenItHasDimensions = ({ contentDimensions, canvasSize, canvasContent,
|
|
|
126
99
|
overflow: canvasContent.type === 'composition' ? 'visible' : 'hidden',
|
|
127
100
|
justifyContent: canvasContent.type === 'asset' ? 'center' : 'flex-start',
|
|
128
101
|
alignItems: canvasContent.type === 'asset' &&
|
|
129
|
-
(0,
|
|
102
|
+
(0, get_preview_file_type_1.getPreviewFileType)(canvasContent.asset) === 'audio'
|
|
130
103
|
? 'center'
|
|
131
104
|
: 'normal',
|
|
132
105
|
};
|
|
@@ -154,6 +127,8 @@ const CompWhenItHasDimensions = ({ contentDimensions, canvasSize, canvasContent,
|
|
|
154
127
|
};
|
|
155
128
|
const PortalContainer = ({ scale, xCorrection, yCorrection, contentDimensions }) => {
|
|
156
129
|
const { checkerboard } = (0, react_1.useContext)(checkerboard_1.CheckerboardContext);
|
|
130
|
+
const { clearSelection } = (0, TimelineSelection_1.useTimelineSelection)();
|
|
131
|
+
const portalContainer = (0, react_1.useRef)(null);
|
|
157
132
|
const style = (0, react_1.useMemo)(() => {
|
|
158
133
|
return containerStyle({
|
|
159
134
|
checkerboard,
|
|
@@ -178,6 +153,21 @@ const PortalContainer = ({ scale, xCorrection, yCorrection, contentDimensions })
|
|
|
178
153
|
current === null || current === void 0 ? void 0 : current.removeChild(remotion_1.Internals.portalNode());
|
|
179
154
|
};
|
|
180
155
|
}, []);
|
|
181
|
-
const
|
|
156
|
+
const onPointerDown = (0, react_1.useCallback)((event) => {
|
|
157
|
+
if (!(0, should_clear_selection_on_pointer_down_1.shouldClearSelectionOnPointerDown)(event)) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
clearSelection();
|
|
161
|
+
}, [clearSelection]);
|
|
162
|
+
(0, react_1.useEffect)(() => {
|
|
163
|
+
const { current } = portalContainer;
|
|
164
|
+
if (!current) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
current.addEventListener('pointerdown', onPointerDown);
|
|
168
|
+
return () => {
|
|
169
|
+
current.removeEventListener('pointerdown', onPointerDown);
|
|
170
|
+
};
|
|
171
|
+
}, [onPointerDown]);
|
|
182
172
|
return jsx_runtime_1.jsx("div", { ref: portalContainer, style: style });
|
|
183
173
|
};
|
|
@@ -16,12 +16,14 @@ const FullscreenToggle_1 = require("./FullscreenToggle");
|
|
|
16
16
|
const layout_1 = require("./layout");
|
|
17
17
|
const LoopToggle_1 = require("./LoopToggle");
|
|
18
18
|
const MuteToggle_1 = require("./MuteToggle");
|
|
19
|
+
const OutlineToggle_1 = require("./OutlineToggle");
|
|
19
20
|
const PlaybackKeyboardShortcutsManager_1 = require("./PlaybackKeyboardShortcutsManager");
|
|
20
21
|
const PlaybackRatePersistor_1 = require("./PlaybackRatePersistor");
|
|
21
22
|
const PlaybackRateSelector_1 = require("./PlaybackRateSelector");
|
|
22
23
|
const PlayPause_1 = require("./PlayPause");
|
|
23
24
|
const RenderButton_1 = require("./RenderButton");
|
|
24
25
|
const SizeSelector_1 = require("./SizeSelector");
|
|
26
|
+
const TimelineSelection_1 = require("./Timeline/TimelineSelection");
|
|
25
27
|
const TimelineZoomControls_1 = require("./Timeline/TimelineZoomControls");
|
|
26
28
|
const TimelineInOutToggle_1 = require("./TimelineInOutToggle");
|
|
27
29
|
const TOOLBAR_HEIGHT = 50;
|
|
@@ -70,6 +72,16 @@ const sideContainer = {
|
|
|
70
72
|
const padding = {
|
|
71
73
|
width: timeline_layout_1.TIMELINE_PADDING,
|
|
72
74
|
};
|
|
75
|
+
const toolbarControl = {
|
|
76
|
+
display: 'contents',
|
|
77
|
+
};
|
|
78
|
+
const PreviewToolbarControl = ({ children }) => {
|
|
79
|
+
const onPointerDown = (0, react_1.useCallback)((e) => {
|
|
80
|
+
// Prevent deselection of currently selected items
|
|
81
|
+
e.stopPropagation();
|
|
82
|
+
}, []);
|
|
83
|
+
return (jsx_runtime_1.jsx("div", { style: toolbarControl, onPointerDown: onPointerDown, children: children }));
|
|
84
|
+
};
|
|
73
85
|
const PreviewToolbar = ({ readOnlyStudio, bufferStateDelayInMilliseconds }) => {
|
|
74
86
|
const { playbackRate, setPlaybackRate } = remotion_1.Internals.usePlaybackRate();
|
|
75
87
|
const { mediaMuted } = (0, react_1.useContext)(remotion_1.Internals.MediaVolumeContext);
|
|
@@ -136,12 +148,13 @@ const PreviewToolbar = ({ readOnlyStudio, bufferStateDelayInMilliseconds }) => {
|
|
|
136
148
|
return (jsx_runtime_1.jsxs("div", { ref: previewToolbarRef, style: isMobileLayout ? mobileContainer : container, className: "css-reset", children: [
|
|
137
149
|
jsx_runtime_1.jsx("div", { ref: leftScrollIndicatorRef, style: scrollIndicatorLeft }), isMobileLayout ? null : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
138
150
|
jsx_runtime_1.jsxs("div", { style: sideContainer, children: [
|
|
139
|
-
jsx_runtime_1.jsx("div", { style: padding }), jsx_runtime_1.jsx(TimelineZoomControls_1.TimelineZoomControls, {})
|
|
140
|
-
] }), jsx_runtime_1.jsx(layout_1.Flex, {}), jsx_runtime_1.jsx(SizeSelector_1.SizeSelector, {}), isStill || isVideoComposition ? (jsx_runtime_1.jsx(PlaybackRateSelector_1.PlaybackRateSelector, { setPlaybackRate: setPlaybackRate, playbackRate: playbackRate })) : null] })), isVideoComposition ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
141
|
-
jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), jsx_runtime_1.jsx(PlayPause_1.PlayPause, { bufferStateDelayInMilliseconds: bufferStateDelayInMilliseconds, loop: loop, playbackRate: playbackRate, muted: mediaMuted }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), jsx_runtime_1.jsx(LoopToggle_1.LoopToggle, { loop: loop, setLoop: setLoop }), jsx_runtime_1.jsx(MuteToggle_1.MuteToggle, { muted: mediaMuted, setMuted: setMediaMuted }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), jsx_runtime_1.jsx(TimelineInOutToggle_1.TimelineInOutPointToggle, {}), jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 })
|
|
142
|
-
] })) : null, (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'composition' ?
|
|
143
|
-
jsx_runtime_1.jsx(
|
|
144
|
-
jsx_runtime_1.jsx(layout_1.Flex, {}),
|
|
151
|
+
jsx_runtime_1.jsx("div", { style: padding }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(TimelineZoomControls_1.TimelineZoomControls, {}) })
|
|
152
|
+
] }), jsx_runtime_1.jsx(layout_1.Flex, {}), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(SizeSelector_1.SizeSelector, {}) }), isStill || isVideoComposition ? (jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(PlaybackRateSelector_1.PlaybackRateSelector, { setPlaybackRate: setPlaybackRate, playbackRate: playbackRate }) })) : null] })), isVideoComposition ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
153
|
+
jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(PlayPause_1.PlayPause, { bufferStateDelayInMilliseconds: bufferStateDelayInMilliseconds, loop: loop, playbackRate: playbackRate, muted: mediaMuted }) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(LoopToggle_1.LoopToggle, { loop: loop, setLoop: setLoop }) }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(MuteToggle_1.MuteToggle, { muted: mediaMuted, setMuted: setMediaMuted }) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(TimelineInOutToggle_1.TimelineInOutPointToggle, {}) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 })
|
|
154
|
+
] })) : null, (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'composition' ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
155
|
+
jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(CheckboardToggle_1.CheckboardToggle, {}) }), TimelineSelection_1.ENABLE_OUTLINES ? (jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(OutlineToggle_1.OutlineToggle, {}) })) : null] })) : null, jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), canvasContent && isFullscreenSupported ? (jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(FullscreenToggle_1.FullScreenToggle, {}) })) : null, jsx_runtime_1.jsx(layout_1.Flex, {}), isMobileLayout && (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
156
|
+
jsx_runtime_1.jsx(layout_1.Flex, {}), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(SizeSelector_1.SizeSelector, {}) }), isStill || isVideoComposition ? (jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(PlaybackRateSelector_1.PlaybackRateSelector, { setPlaybackRate: setPlaybackRate, playbackRate: playbackRate }) })) : null] })), jsx_runtime_1.jsxs("div", { style: sideContainer, children: [
|
|
157
|
+
jsx_runtime_1.jsx(layout_1.Flex, {}), !isMobileLayout && jsx_runtime_1.jsx(FpsCounter_1.FpsCounter, { playbackSpeed: playbackRate }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(RenderButton_1.RenderButton, { readOnlyStudio: readOnlyStudio }) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1.5 })
|
|
145
158
|
] }), jsx_runtime_1.jsx(PlaybackKeyboardShortcutsManager_1.PlaybackKeyboardShortcutsManager, { setPlaybackRate: setPlaybackRate }), jsx_runtime_1.jsx(PlaybackRatePersistor_1.PlaybackRatePersistor, {}), jsx_runtime_1.jsx("div", { ref: rightScrollIndicatorRef, style: scrollIndicatorRight })
|
|
146
159
|
] }));
|
|
147
160
|
};
|
|
@@ -102,7 +102,9 @@ const RenderButton = ({ readOnlyStudio, }) => {
|
|
|
102
102
|
shouldApplyCssTransforms: true,
|
|
103
103
|
});
|
|
104
104
|
const refresh = size === null || size === void 0 ? void 0 : size.refresh;
|
|
105
|
-
const onPointerDown = (0, react_1.useCallback)(() => {
|
|
105
|
+
const onPointerDown = (0, react_1.useCallback)((e) => {
|
|
106
|
+
// Prevent deselection of currently selected items
|
|
107
|
+
e.stopPropagation();
|
|
106
108
|
setDropdownOpened((o) => {
|
|
107
109
|
if (!o) {
|
|
108
110
|
refresh === null || refresh === void 0 ? void 0 : refresh();
|
|
@@ -110,6 +112,10 @@ const RenderButton = ({ readOnlyStudio, }) => {
|
|
|
110
112
|
return !o;
|
|
111
113
|
});
|
|
112
114
|
}, [refresh]);
|
|
115
|
+
const onMenuPointerDown = (0, react_1.useCallback)((e) => {
|
|
116
|
+
// Prevent deselection of currently selected items
|
|
117
|
+
e.stopPropagation();
|
|
118
|
+
}, []);
|
|
113
119
|
const onClickDropdown = (0, react_1.useCallback)((e) => {
|
|
114
120
|
e.stopPropagation();
|
|
115
121
|
const isKeyboardInitiated = e.detail === 0;
|
|
@@ -420,7 +426,7 @@ const RenderButton = ({ readOnlyStudio, }) => {
|
|
|
420
426
|
] }) }), shouldShowDropdown ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
421
427
|
jsx_runtime_1.jsx("div", { style: dividerStyle }), jsx_runtime_1.jsx("button", { ref: dropdownRef, type: "button", style: dropdownTriggerStyle, disabled: !readOnlyStudio && connectionStatus !== 'connected', className: is_menu_item_1.MENU_INITIATOR_CLASSNAME, onPointerDown: onPointerDown, onClick: onClickDropdown, children: jsx_runtime_1.jsx(caret_1.CaretDown, {}) })
|
|
422
428
|
] })) : null] }), portalStyle
|
|
423
|
-
? react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { style: styles_1.fullScreenOverlay, children: jsx_runtime_1.jsx("div", { style: styles_1.outerPortal, className: "css-reset", children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onOutsideClick: onHideDropdown, onEscape: onHideDropdown, children: jsx_runtime_1.jsx("div", { style: portalStyle, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: () => { }, onPreviousMenu: () => { }, values: dropdownValues, onHide: onHideDropdown, leaveLeftSpace: false, preselectIndex: dropdownValues.findIndex((v) => v.id === renderType), topItemCanBeUnselected: false, fixedHeight: derivedMaxHeight }) }) }) }) }), (0, portals_1.getPortal)(currentZIndex))
|
|
429
|
+
? react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { style: styles_1.fullScreenOverlay, children: jsx_runtime_1.jsx("div", { style: styles_1.outerPortal, className: "css-reset", children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onOutsideClick: onHideDropdown, onEscape: onHideDropdown, children: jsx_runtime_1.jsx("div", { style: portalStyle, onPointerDown: onMenuPointerDown, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: () => { }, onPreviousMenu: () => { }, values: dropdownValues, onHide: onHideDropdown, leaveLeftSpace: false, preselectIndex: dropdownValues.findIndex((v) => v.id === renderType), topItemCanBeUnselected: false, fixedHeight: derivedMaxHeight }) }) }) }) }), (0, portals_1.getPortal)(currentZIndex))
|
|
424
430
|
: null] }));
|
|
425
431
|
};
|
|
426
432
|
exports.RenderButton = RenderButton;
|
|
@@ -6,8 +6,8 @@ const react_1 = require("react");
|
|
|
6
6
|
const client_id_1 = require("../helpers/client-id");
|
|
7
7
|
const colors_1 = require("../helpers/colors");
|
|
8
8
|
const get_asset_metadata_1 = require("../helpers/get-asset-metadata");
|
|
9
|
+
const get_preview_file_type_1 = require("../helpers/get-preview-file-type");
|
|
9
10
|
const FilePreview_1 = require("./FilePreview");
|
|
10
|
-
const Preview_1 = require("./Preview");
|
|
11
11
|
const msgStyle = {
|
|
12
12
|
fontSize: 13,
|
|
13
13
|
color: 'white',
|
|
@@ -20,7 +20,7 @@ const errMsgStyle = {
|
|
|
20
20
|
color: colors_1.LIGHT_TEXT,
|
|
21
21
|
};
|
|
22
22
|
const RenderPreview = ({ path, assetMetadata, getBlob }) => {
|
|
23
|
-
const fileType = (0,
|
|
23
|
+
const fileType = (0, get_preview_file_type_1.getPreviewFileType)(path);
|
|
24
24
|
const connectionStatus = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx)
|
|
25
25
|
.previewServerState.type;
|
|
26
26
|
const [blobUrl, setBlobUrl] = (0, react_1.useState)(null);
|
|
@@ -1,45 +1,146 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type {
|
|
3
|
-
import {
|
|
2
|
+
import type { CanUpdateSequencePropStatusKeyframed, CanUpdateSequencePropStatusStatic, GetDragOverrides, OverrideIdToNodePaths, SequenceFieldSchema, SequencePropsSubscriptionKey, SequenceSchema, TSequence } from 'remotion';
|
|
3
|
+
import type { SequenceNodePathInfo } from '../helpers/get-timeline-sequence-sort-key';
|
|
4
|
+
import { type SaveSequencePropChange } from './Timeline/save-sequence-prop';
|
|
5
|
+
import { type TimelineSelection, type TimelineSelectionInteraction } from './Timeline/TimelineSelection';
|
|
4
6
|
type OutlinePoint = {
|
|
5
7
|
readonly x: number;
|
|
6
8
|
readonly y: number;
|
|
7
9
|
};
|
|
8
10
|
type UvCoordinate = readonly [number, number];
|
|
11
|
+
type UvCoordinateFieldSchema = Extract<SequenceFieldSchema, {
|
|
12
|
+
type: 'uv-coordinate';
|
|
13
|
+
}>;
|
|
14
|
+
type SelectedOutlineUvHandle = {
|
|
15
|
+
readonly clientId: string;
|
|
16
|
+
readonly codeValue: CanUpdateSequencePropStatusStatic;
|
|
17
|
+
readonly effectIndex: number;
|
|
18
|
+
readonly fieldDefault: UvCoordinate | undefined;
|
|
19
|
+
readonly fieldKey: string;
|
|
20
|
+
readonly fieldSchema: UvCoordinateFieldSchema;
|
|
21
|
+
readonly nodePath: SequencePropsSubscriptionKey;
|
|
22
|
+
readonly schema: SequenceSchema;
|
|
23
|
+
readonly value: UvCoordinate;
|
|
24
|
+
};
|
|
25
|
+
type UvConnectionHandle = Pick<SelectedOutlineUvHandle, 'effectIndex' | 'fieldKey' | 'fieldSchema' | 'value'>;
|
|
26
|
+
type UvHandleConnectionLine = {
|
|
27
|
+
readonly key: string;
|
|
28
|
+
readonly from: OutlinePoint;
|
|
29
|
+
readonly to: OutlinePoint;
|
|
30
|
+
};
|
|
9
31
|
type SelectedOutlineDragTarget = {
|
|
10
|
-
readonly codeValue:
|
|
32
|
+
readonly codeValue: CanUpdateSequencePropStatusStatic | CanUpdateSequencePropStatusKeyframed;
|
|
11
33
|
readonly clientId: string;
|
|
12
34
|
readonly fieldDefault: string | undefined;
|
|
35
|
+
readonly keyframeDisplayOffset: number;
|
|
36
|
+
readonly nodePath: SequencePropsSubscriptionKey;
|
|
37
|
+
readonly schema: SequenceSchema;
|
|
38
|
+
};
|
|
39
|
+
type ScaleFieldSchema = Extract<SequenceFieldSchema, {
|
|
40
|
+
type: 'scale';
|
|
41
|
+
}>;
|
|
42
|
+
type SelectedOutlineScaleDragTarget = {
|
|
43
|
+
readonly codeValue: CanUpdateSequencePropStatusStatic;
|
|
44
|
+
readonly clientId: string;
|
|
45
|
+
readonly fieldDefault: number | string | undefined;
|
|
46
|
+
readonly fieldSchema: ScaleFieldSchema;
|
|
47
|
+
readonly linked: boolean;
|
|
13
48
|
readonly nodePath: SequencePropsSubscriptionKey;
|
|
14
49
|
readonly schema: SequenceSchema;
|
|
15
50
|
};
|
|
16
51
|
export type SelectedOutlineDragState = {
|
|
17
52
|
readonly defaultValue: string | null;
|
|
18
53
|
readonly key: string;
|
|
54
|
+
readonly sourceFrame: number;
|
|
19
55
|
readonly startX: number;
|
|
20
56
|
readonly startY: number;
|
|
21
57
|
readonly target: SelectedOutlineDragTarget;
|
|
22
58
|
};
|
|
59
|
+
export type SelectedOutlineScaleDragState = {
|
|
60
|
+
readonly defaultValue: string | null;
|
|
61
|
+
readonly key: string;
|
|
62
|
+
readonly startX: number;
|
|
63
|
+
readonly startY: number;
|
|
64
|
+
readonly startZ: number;
|
|
65
|
+
readonly target: SelectedOutlineScaleDragTarget;
|
|
66
|
+
};
|
|
67
|
+
type SequenceWithSelectedOutline = {
|
|
68
|
+
readonly depth: number;
|
|
69
|
+
readonly keyframeDisplayOffset: number;
|
|
70
|
+
readonly key: string;
|
|
71
|
+
readonly nodePathInfo: SequenceNodePathInfo;
|
|
72
|
+
readonly sequence: TSequence;
|
|
73
|
+
};
|
|
23
74
|
export declare const getUvHandlePosition: (points: readonly [OutlinePoint, OutlinePoint, OutlinePoint, OutlinePoint], uv: UvCoordinate) => OutlinePoint;
|
|
75
|
+
export declare const getUvHandleConnectionLines: ({ handles, points, }: {
|
|
76
|
+
readonly handles: readonly UvConnectionHandle[];
|
|
77
|
+
readonly points: readonly [OutlinePoint, OutlinePoint, OutlinePoint, OutlinePoint];
|
|
78
|
+
}) => UvHandleConnectionLine[];
|
|
24
79
|
export declare const getUvCoordinateForPoint: (points: readonly [OutlinePoint, OutlinePoint, OutlinePoint, OutlinePoint], point: OutlinePoint) => UvCoordinate;
|
|
80
|
+
export declare const getOutlineSelectionInteraction: ({ shiftKey, metaKey, ctrlKey, }: {
|
|
81
|
+
readonly shiftKey: boolean;
|
|
82
|
+
readonly metaKey: boolean;
|
|
83
|
+
readonly ctrlKey: boolean;
|
|
84
|
+
}) => TimelineSelectionInteraction;
|
|
25
85
|
type SelectedEffectFields = {
|
|
26
86
|
allFields: boolean;
|
|
27
87
|
fieldKeys: Set<string>;
|
|
28
88
|
};
|
|
29
89
|
export declare const getSelectedEffectFieldsBySequenceKey: (selectedItems: readonly TimelineSelection[]) => Map<string, Map<number, SelectedEffectFields>>;
|
|
90
|
+
export declare const getSequencesWithSelectableOutlines: ({ sequences, overrideIdsToNodePaths, }: {
|
|
91
|
+
readonly sequences: readonly TSequence[];
|
|
92
|
+
readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
|
|
93
|
+
}) => SequenceWithSelectedOutline[];
|
|
30
94
|
export declare const getSelectedOutlineDragValues: ({ dragStates, deltaX, deltaY, }: {
|
|
31
95
|
readonly dragStates: readonly SelectedOutlineDragState[];
|
|
32
96
|
readonly deltaX: number;
|
|
33
97
|
readonly deltaY: number;
|
|
34
98
|
}) => Map<string, string>;
|
|
99
|
+
export type SelectedOutlineStaticDragChange = SaveSequencePropChange & {
|
|
100
|
+
readonly type: 'static';
|
|
101
|
+
};
|
|
102
|
+
export type SelectedOutlineKeyframedDragChange = {
|
|
103
|
+
readonly type: 'keyframed';
|
|
104
|
+
readonly fileName: string;
|
|
105
|
+
readonly nodePath: SequencePropsSubscriptionKey;
|
|
106
|
+
readonly fieldKey: string;
|
|
107
|
+
readonly sourceFrame: number;
|
|
108
|
+
readonly value: unknown;
|
|
109
|
+
readonly schema: SequenceSchema;
|
|
110
|
+
readonly clientId: string;
|
|
111
|
+
};
|
|
112
|
+
export type SelectedOutlineDragChange = SelectedOutlineStaticDragChange | SelectedOutlineKeyframedDragChange;
|
|
35
113
|
export declare const getSelectedOutlineDragChanges: ({ dragStates, lastValues, }: {
|
|
36
114
|
readonly dragStates: readonly SelectedOutlineDragState[];
|
|
37
115
|
readonly lastValues: ReadonlyMap<string, string>;
|
|
116
|
+
}) => SelectedOutlineDragChange[];
|
|
117
|
+
export type SelectedOutlineScaleEdge = 'top' | 'right' | 'bottom' | 'left';
|
|
118
|
+
type SelectedOutlineScaleEdgeInfo = {
|
|
119
|
+
readonly axis: 'x' | 'y';
|
|
120
|
+
readonly cursor: React.CSSProperties['cursor'];
|
|
121
|
+
readonly end: OutlinePoint;
|
|
122
|
+
readonly extent: number;
|
|
123
|
+
readonly normal: OutlinePoint;
|
|
124
|
+
readonly start: OutlinePoint;
|
|
125
|
+
};
|
|
126
|
+
export declare const getSelectedOutlineScaleEdgeInfo: (points: readonly [OutlinePoint, OutlinePoint, OutlinePoint, OutlinePoint], edge: SelectedOutlineScaleEdge) => SelectedOutlineScaleEdgeInfo | null;
|
|
127
|
+
export declare const getSelectedOutlineScaleDragStates: ({ dragTargets, getDragOverrides, }: {
|
|
128
|
+
readonly dragTargets: readonly SelectedOutlineScaleDragTarget[];
|
|
129
|
+
readonly getDragOverrides: GetDragOverrides;
|
|
130
|
+
}) => SelectedOutlineScaleDragState[];
|
|
131
|
+
export declare const getSelectedOutlineScaleDragValues: ({ axis, dragStates, scaleFactor, }: {
|
|
132
|
+
readonly axis: "x" | "y";
|
|
133
|
+
readonly dragStates: readonly SelectedOutlineScaleDragState[];
|
|
134
|
+
readonly scaleFactor: number;
|
|
135
|
+
}) => Map<string, string | number>;
|
|
136
|
+
export declare const getSelectedOutlineScaleDragChanges: ({ dragStates, lastValues, }: {
|
|
137
|
+
readonly dragStates: readonly SelectedOutlineScaleDragState[];
|
|
138
|
+
readonly lastValues: ReadonlyMap<string, string | number>;
|
|
38
139
|
}) => {
|
|
39
140
|
fileName: string;
|
|
40
141
|
nodePath: SequencePropsSubscriptionKey;
|
|
41
142
|
fieldKey: string;
|
|
42
|
-
value: string;
|
|
143
|
+
value: string | number;
|
|
43
144
|
defaultValue: string | null;
|
|
44
145
|
schema: SequenceSchema;
|
|
45
146
|
}[];
|