@remotion/studio 4.0.508 → 4.0.509
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/Studio.d.ts +5 -0
- package/dist/Studio.js +2 -2
- package/dist/components/Canvas.js +35 -5
- package/dist/components/ColorPicker/AlphaSlider.js +2 -2
- package/dist/components/ColorPicker/HueSlider.js +2 -2
- package/dist/components/ColorPicker/SaturationValueArea.js +2 -2
- package/dist/components/EditorGuides/Guide.js +2 -2
- package/dist/components/EditorRuler/index.js +2 -2
- package/dist/components/ExplorerPanel.js +19 -1
- package/dist/components/InspectorOpenInEditor.js +8 -5
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +3 -3
- package/dist/components/Menu/MenuItem.js +2 -2
- package/dist/components/ModalContainer.js +1 -1
- package/dist/components/Modals.js +2 -9
- package/dist/components/NewComposition/InputDragger.js +2 -2
- package/dist/components/NewComposition/NewComposition.d.ts +2 -0
- package/dist/components/NewComposition/NewComposition.js +38 -6
- package/dist/components/NewComposition/get-new-composition-defaults.d.ts +1 -1
- package/dist/components/NewComposition/get-new-composition-defaults.js +9 -1
- package/dist/components/SelectedOutlineCanvasRotation.js +6 -4
- package/dist/components/SelectedOutlineCropControls.js +2 -2
- package/dist/components/SelectedOutlineElement.js +6 -2
- package/dist/components/SelectedOutlinePolygon.js +2 -2
- package/dist/components/SelectedOutlineRotationCornerHandle.d.ts +5 -0
- package/dist/components/SelectedOutlineRotationCornerHandle.js +4 -4
- package/dist/components/SelectedOutlineScaleEdgeLine.d.ts +1 -0
- package/dist/components/SelectedOutlineScaleEdgeLine.js +4 -4
- package/dist/components/SelectedOutlineTransformOriginHandle.js +2 -2
- package/dist/components/SelectedOutlineUvControls.js +8 -8
- package/dist/components/Splitter/SplitterHandle.js +2 -2
- package/dist/components/Tabs/index.d.ts +2 -0
- package/dist/components/Tabs/index.js +2 -2
- package/dist/components/Timeline/EasingEditorModal.js +2 -2
- package/dist/components/Timeline/SubscribeToNodePaths.js +1 -1
- package/dist/components/Timeline/Timeline.js +55 -1
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +99 -35
- package/dist/components/Timeline/TimelineDragHandler.js +2 -2
- package/dist/components/Timeline/TimelineEffectPropItem.js +7 -0
- package/dist/components/Timeline/TimelineInOutDragHandler.js +2 -2
- package/dist/components/Timeline/TimelineLayerEye.js +2 -2
- package/dist/components/Timeline/TimelineSelection.js +2 -2
- package/dist/components/Timeline/TimelineSequenceItem.js +1 -24
- package/dist/components/Timeline/TimelineSequencePropItem.js +7 -1
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +6 -6
- package/dist/components/Timeline/get-sequence-context-menu-items.js +1 -0
- package/dist/components/Timeline/keyframe-clipboard.d.ts +5 -1
- package/dist/components/Timeline/keyframe-clipboard.js +3 -2
- package/dist/components/Timeline/save-sequence-prop.js +16 -7
- package/dist/components/Timeline/sequence-prop-clipboard.d.ts +31 -0
- package/dist/components/Timeline/sequence-prop-clipboard.js +142 -0
- package/dist/components/Timeline/update-selected-easing.js +8 -0
- package/dist/components/Timeline/use-open-sequence-in-apps.js +3 -1
- package/dist/components/Timeline/use-resolved-stack-react-to-change.d.ts +1 -1
- package/dist/components/Timeline/use-resolved-stack-react-to-change.js +24 -3
- package/dist/components/Timeline/use-timeline-keyframe-drag.js +4 -4
- package/dist/components/folder-menu-items.js +1 -0
- package/dist/components/get-open-in-menu-items.d.ts +3 -1
- package/dist/components/get-open-in-menu-items.js +73 -49
- package/dist/components/import-assets.js +7 -0
- package/dist/components/root-composition-menu-items.js +1 -0
- package/dist/components/selected-outline-control-layout.d.ts +14 -0
- package/dist/components/selected-outline-control-layout.js +94 -0
- package/dist/components/use-default-editor-info.js +28 -3
- package/dist/esm/{chunk-zpn4m49r.js → chunk-jdn6nkbk.js} +5181 -4560
- package/dist/esm/{chunk-fgedsvhb.js → chunk-r46yxrjr.js} +1 -2
- package/dist/esm/internals.mjs +5180 -4559
- package/dist/esm/previewEntry.mjs +5072 -4451
- package/dist/esm/renderEntry.mjs +4 -2
- package/dist/helpers/get-canvas-capture-import.d.ts +7 -0
- package/dist/helpers/get-canvas-capture-import.js +43 -0
- package/dist/helpers/get-git-menu-item.d.ts +1 -1
- package/dist/helpers/get-git-menu-item.js +33 -3
- package/dist/helpers/inserted-element-selection.d.ts +12 -0
- package/dist/helpers/inserted-element-selection.js +29 -0
- package/dist/helpers/pointer-session.d.ts +6 -2
- package/dist/helpers/pointer-session.js +29 -12
- package/dist/helpers/use-create-composition.d.ts +15 -2
- package/dist/helpers/use-create-composition.js +11 -17
- package/dist/helpers/use-menu-structure.js +1 -0
- package/dist/icons/github.d.ts +4 -0
- package/dist/icons/github.js +11 -0
- package/dist/renderEntry.js +2 -2
- package/dist/state/modals.d.ts +9 -1
- package/dist/state/z-index.d.ts +0 -1
- package/dist/state/z-index.js +27 -33
- package/package.json +12 -12
package/dist/Studio.d.ts
CHANGED
package/dist/Studio.js
CHANGED
|
@@ -16,8 +16,8 @@ const getServerDisconnectedDomElement = () => {
|
|
|
16
16
|
return document.getElementById('server-disconnected-overlay');
|
|
17
17
|
};
|
|
18
18
|
const StudioInner = ({ rootComponent, readOnly }) => {
|
|
19
|
-
var _a, _b;
|
|
20
|
-
return (jsx_runtime_1.jsx(remotion_1.Internals.CompositionManagerProvider, { onlyRenderComposition: null, currentCompositionMetadata: null, initialCompositions: [], initialCanvasContent: null, children: jsx_runtime_1.jsx(remotion_1.Internals.RemotionRootContexts, { frameState: null, audioEnabled: window.remotion_audioEnabled, videoEnabled: window.remotion_videoEnabled, logLevel: (_a = window.remotion_logLevel) !== null && _a !== void 0 ? _a : 'info', numberOfAudioTags: window.remotion_numberOfAudioTags, audioLatencyHint: (_b = window.remotion_audioLatencyHint) !== null && _b !== void 0 ? _b : 'playback', previewSampleRate: window.remotion_previewSampleRate, children: jsx_runtime_1.jsx(use_static_files_1.StaticFilesProvider, { children: jsx_runtime_1.jsx(ResolveCompositionConfigInStudio_1.ResolveCompositionConfigInStudio, { children: jsx_runtime_1.jsxs(EditorContexts_1.EditorContexts, { children: [
|
|
19
|
+
var _a, _b, _c;
|
|
20
|
+
return (jsx_runtime_1.jsx(remotion_1.Internals.CompositionManagerProvider, { onlyRenderComposition: null, currentCompositionMetadata: null, initialCompositions: [], initialCanvasContent: null, children: jsx_runtime_1.jsx(remotion_1.Internals.RemotionRootContexts, { frameState: null, audioEnabled: window.remotion_audioEnabled, videoEnabled: window.remotion_videoEnabled, logLevel: (_a = window.remotion_logLevel) !== null && _a !== void 0 ? _a : 'info', numberOfAudioTags: window.remotion_numberOfAudioTags, audioLatencyHint: (_b = window.remotion_audioLatencyHint) !== null && _b !== void 0 ? _b : 'playback', previewSampleRate: window.remotion_previewSampleRate, _experimentalKeepAudioContextAlive: (_c = window.remotion_experimentalKeepAudioContextAlive) !== null && _c !== void 0 ? _c : false, children: jsx_runtime_1.jsx(use_static_files_1.StaticFilesProvider, { children: jsx_runtime_1.jsx(ResolveCompositionConfigInStudio_1.ResolveCompositionConfigInStudio, { children: jsx_runtime_1.jsxs(EditorContexts_1.EditorContexts, { children: [
|
|
21
21
|
jsx_runtime_1.jsx(Editor_1.Editor, { readOnlyStudio: readOnly, Root: rootComponent }), readOnly
|
|
22
22
|
? null
|
|
23
23
|
: (0, react_dom_1.createPortal)(jsx_runtime_1.jsx(ServerDisconnected_1.ServerDisconnected, {}), getServerDisconnectedDomElement())] }) }) }) }) }));
|
|
@@ -15,6 +15,7 @@ const clipboard_images_1 = require("../helpers/clipboard-images");
|
|
|
15
15
|
const clipboard_svg_1 = require("../helpers/clipboard-svg");
|
|
16
16
|
const colors_1 = require("../helpers/colors");
|
|
17
17
|
const get_asset_metadata_1 = require("../helpers/get-asset-metadata");
|
|
18
|
+
const get_canvas_capture_import_1 = require("../helpers/get-canvas-capture-import");
|
|
18
19
|
const get_effective_translation_1 = require("../helpers/get-effective-translation");
|
|
19
20
|
const install_required_package_1 = require("../helpers/install-required-package");
|
|
20
21
|
const open_in_editor_1 = require("../helpers/open-in-editor");
|
|
@@ -25,6 +26,7 @@ const canvas_ref_1 = require("../state/canvas-ref");
|
|
|
25
26
|
const editor_guides_1 = require("../state/editor-guides");
|
|
26
27
|
const editor_snapping_1 = require("../state/editor-snapping");
|
|
27
28
|
const editor_zoom_gestures_1 = require("../state/editor-zoom-gestures");
|
|
29
|
+
const modals_1 = require("../state/modals");
|
|
28
30
|
const call_api_1 = require("./call-api");
|
|
29
31
|
const composition_drop_preview_1 = require("./composition-drop-preview");
|
|
30
32
|
const ConfirmationDialog_1 = require("./ConfirmationDialog");
|
|
@@ -125,6 +127,7 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
125
127
|
const keybindings = (0, use_keybinding_1.useKeybinding)();
|
|
126
128
|
const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
|
|
127
129
|
const chooseSvgImportMode = (0, SvgImportDialog_1.useSvgImportDialog)();
|
|
130
|
+
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
128
131
|
const config = remotion_1.Internals.useUnsafeVideoConfig();
|
|
129
132
|
const areRulersVisible = (0, use_is_ruler_visible_1.useIsRulerVisible)();
|
|
130
133
|
const { editorShowGuides } = (0, react_1.useContext)(editor_guides_1.EditorShowGuidesContext);
|
|
@@ -703,13 +706,15 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
703
706
|
setCompositionDropPreview(null);
|
|
704
707
|
return;
|
|
705
708
|
}
|
|
706
|
-
|
|
709
|
+
const mayBeCanvasCapture = (0, drop_handler_data_1.isFileDragEvent)(event) && !window.remotion_isReadOnlyStudio;
|
|
710
|
+
if (!canDropAssets && !cannotAddSequence && !mayBeCanvasCapture) {
|
|
707
711
|
setCompositionDropPreview(null);
|
|
708
712
|
return;
|
|
709
713
|
}
|
|
710
714
|
event.preventDefault();
|
|
711
715
|
if (event.dataTransfer) {
|
|
712
|
-
event.dataTransfer.dropEffect =
|
|
716
|
+
event.dataTransfer.dropEffect =
|
|
717
|
+
canDropAssets || mayBeCanvasCapture ? 'copy' : 'none';
|
|
713
718
|
}
|
|
714
719
|
if (!canDropAssets ||
|
|
715
720
|
contentDimensions === null ||
|
|
@@ -797,12 +802,36 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
797
802
|
setCompositionDropPreview(null);
|
|
798
803
|
}, []);
|
|
799
804
|
const onDrop = (0, react_1.useCallback)(async (event) => {
|
|
800
|
-
var _a;
|
|
801
|
-
var
|
|
805
|
+
var _a, _b;
|
|
806
|
+
var _c, _d;
|
|
802
807
|
setCompositionDropPreview(null);
|
|
803
808
|
if (!(0, drop_handler_data_1.isSupportedDropEvent)(event) || !isDragEventInsideCanvas(event)) {
|
|
804
809
|
return;
|
|
805
810
|
}
|
|
811
|
+
if ((0, drop_handler_data_1.isFileDragEvent)(event) && !window.remotion_isReadOnlyStudio) {
|
|
812
|
+
event.preventDefault();
|
|
813
|
+
event.stopPropagation();
|
|
814
|
+
const files = Array.from((_c = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.files) !== null && _c !== void 0 ? _c : []);
|
|
815
|
+
if (files.length === 1) {
|
|
816
|
+
setIsAddingAsset(true);
|
|
817
|
+
try {
|
|
818
|
+
const canvasCapture = await (0, get_canvas_capture_import_1.getCanvasCaptureImport)(files[0]);
|
|
819
|
+
if (canvasCapture !== null) {
|
|
820
|
+
setSelectedModal({
|
|
821
|
+
type: 'new-comp',
|
|
822
|
+
canvasCapture,
|
|
823
|
+
folderName: null,
|
|
824
|
+
parentName: null,
|
|
825
|
+
stack: null,
|
|
826
|
+
});
|
|
827
|
+
return;
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
finally {
|
|
831
|
+
setIsAddingAsset(false);
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
}
|
|
806
835
|
if (cannotAddSequence) {
|
|
807
836
|
event.preventDefault();
|
|
808
837
|
event.stopPropagation();
|
|
@@ -824,7 +853,7 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
824
853
|
event.stopPropagation();
|
|
825
854
|
setIsAddingAsset(true);
|
|
826
855
|
try {
|
|
827
|
-
const metadata = studio_protocol_1.StudioProtocolInternals.getDragPreviewMetadata((
|
|
856
|
+
const metadata = studio_protocol_1.StudioProtocolInternals.getDragPreviewMetadata((_d = (_b = event.dataTransfer) === null || _b === void 0 ? void 0 : _b.types) !== null && _d !== void 0 ? _d : []);
|
|
828
857
|
const isComposition = (metadata === null || metadata === void 0 ? void 0 : metadata.type) === 'composition';
|
|
829
858
|
let dropPosition = getDropPosition({
|
|
830
859
|
addFitPadding,
|
|
@@ -887,6 +916,7 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
887
916
|
editorSnapping,
|
|
888
917
|
previewSize,
|
|
889
918
|
size,
|
|
919
|
+
setSelectedModal,
|
|
890
920
|
]);
|
|
891
921
|
const onPaste = (0, react_1.useCallback)(async (event) => {
|
|
892
922
|
const { activeElement } = document;
|
|
@@ -59,9 +59,9 @@ const AlphaSlider = ({ hue, saturation, value, alpha, onChange, onChangeComplete
|
|
|
59
59
|
e.preventDefault();
|
|
60
60
|
updateFromEvent(e.clientX, false);
|
|
61
61
|
let lastClientX = e.clientX;
|
|
62
|
-
(0, pointer_session_1.
|
|
62
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
63
63
|
event: e.nativeEvent,
|
|
64
|
-
|
|
64
|
+
captureTarget: e.currentTarget,
|
|
65
65
|
onMove: (ev) => {
|
|
66
66
|
lastClientX = ev.clientX;
|
|
67
67
|
updateFromEvent(ev.clientX, false);
|
|
@@ -41,9 +41,9 @@ const HueSlider = ({ hue, onChange, onChangeComplete }) => {
|
|
|
41
41
|
e.preventDefault();
|
|
42
42
|
updateFromEvent(e.clientX, false);
|
|
43
43
|
let lastClientX = e.clientX;
|
|
44
|
-
(0, pointer_session_1.
|
|
44
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
45
45
|
event: e.nativeEvent,
|
|
46
|
-
|
|
46
|
+
captureTarget: e.currentTarget,
|
|
47
47
|
onMove: (ev) => {
|
|
48
48
|
lastClientX = ev.clientX;
|
|
49
49
|
updateFromEvent(ev.clientX, false);
|
|
@@ -55,9 +55,9 @@ const SaturationValueArea = ({ hue, saturation, value, onChange, onChangeComplet
|
|
|
55
55
|
e.preventDefault();
|
|
56
56
|
updateFromEvent(e.clientX, e.clientY, false);
|
|
57
57
|
let lastPosition = { clientX: e.clientX, clientY: e.clientY };
|
|
58
|
-
(0, pointer_session_1.
|
|
58
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
59
59
|
event: e.nativeEvent,
|
|
60
|
-
|
|
60
|
+
captureTarget: e.currentTarget,
|
|
61
61
|
onMove: (ev) => {
|
|
62
62
|
lastPosition = { clientX: ev.clientX, clientY: ev.clientY };
|
|
63
63
|
updateFromEvent(ev.clientX, ev.clientY, false);
|
|
@@ -115,9 +115,9 @@ const GuideComp = ({ guide, canvasDimensions, scale }) => {
|
|
|
115
115
|
};
|
|
116
116
|
shouldCreateGuideRef.current = false;
|
|
117
117
|
setDraggingGuideId(() => guide.id);
|
|
118
|
-
(0, pointer_session_1.
|
|
118
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
119
119
|
event: e.nativeEvent,
|
|
120
|
-
|
|
120
|
+
captureTarget: e.currentTarget,
|
|
121
121
|
onMove: (moveEvent) => {
|
|
122
122
|
var _a;
|
|
123
123
|
updateHasMovedGuide(moveEvent.clientX, moveEvent.clientY);
|
|
@@ -168,9 +168,9 @@ const EditorRulers = ({ contentDimensions, canvasSize, assetMetadata, containerR
|
|
|
168
168
|
};
|
|
169
169
|
}, [draggingGuideId, moveGuidePointerRef, onMouseMove]);
|
|
170
170
|
const onPointerSessionStart = (0, react_1.useCallback)((event, guideId) => {
|
|
171
|
-
(0, pointer_session_1.
|
|
171
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
172
172
|
event: event.nativeEvent,
|
|
173
|
-
|
|
173
|
+
captureTarget: event.currentTarget,
|
|
174
174
|
onMove: (moveEvent) => onMouseMove(moveEvent, guideId),
|
|
175
175
|
onEnd: () => finishGuideInteraction(guideId),
|
|
176
176
|
});
|
|
@@ -4,6 +4,7 @@ exports.ExplorerPanel = void 0;
|
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const colors_1 = require("../helpers/colors");
|
|
7
|
+
const use_asset_drag_events_1 = require("../helpers/use-asset-drag-events");
|
|
7
8
|
const AssetSelector_1 = require("./AssetSelector");
|
|
8
9
|
const CompositionSelector_1 = require("./CompositionSelector");
|
|
9
10
|
const CompSelectorRef_1 = require("./CompSelectorRef");
|
|
@@ -33,6 +34,7 @@ const persistSelectedOptionsSidebarPanel = (panel) => {
|
|
|
33
34
|
};
|
|
34
35
|
const ExplorerPanel = ({ readOnlyStudio }) => {
|
|
35
36
|
const [panel, setPanel] = (0, react_1.useState)(() => getSelectedPanel());
|
|
37
|
+
const assetTabFocusTimer = (0, react_1.useRef)(null);
|
|
36
38
|
const onCompositionsSelected = (0, react_1.useCallback)(() => {
|
|
37
39
|
setPanel('compositions');
|
|
38
40
|
persistSelectedOptionsSidebarPanel('compositions');
|
|
@@ -41,6 +43,22 @@ const ExplorerPanel = ({ readOnlyStudio }) => {
|
|
|
41
43
|
setPanel('assets');
|
|
42
44
|
persistSelectedOptionsSidebarPanel('assets');
|
|
43
45
|
}, []);
|
|
46
|
+
const onAssetDragEnter = (0, react_1.useCallback)((event) => {
|
|
47
|
+
if ((0, use_asset_drag_events_1.isAssetUploadDragEvent)(event) &&
|
|
48
|
+
assetTabFocusTimer.current === null) {
|
|
49
|
+
assetTabFocusTimer.current = window.setTimeout(() => {
|
|
50
|
+
onAssetsSelected();
|
|
51
|
+
assetTabFocusTimer.current = null;
|
|
52
|
+
}, 500);
|
|
53
|
+
}
|
|
54
|
+
}, [onAssetsSelected]);
|
|
55
|
+
const onAssetDragLeave = (0, react_1.useCallback)((event) => {
|
|
56
|
+
if ((0, use_asset_drag_events_1.isAssetUploadDragEvent)(event) &&
|
|
57
|
+
assetTabFocusTimer.current !== null) {
|
|
58
|
+
window.clearTimeout(assetTabFocusTimer.current);
|
|
59
|
+
assetTabFocusTimer.current = null;
|
|
60
|
+
}
|
|
61
|
+
}, []);
|
|
44
62
|
(0, react_1.useImperativeHandle)(ExplorerPanelRef_1.explorerSidebarTabs, () => {
|
|
45
63
|
return {
|
|
46
64
|
getSelectedPanel: () => panel,
|
|
@@ -60,7 +78,7 @@ const ExplorerPanel = ({ readOnlyStudio }) => {
|
|
|
60
78
|
}, []);
|
|
61
79
|
return (jsx_runtime_1.jsx(CompSelectorRef_1.CompSelectorRef, { children: jsx_runtime_1.jsxs("div", { style: container, className: "css-reset", onPointerDown: onPointerDown, children: [
|
|
62
80
|
jsx_runtime_1.jsx("div", { style: tabsContainer, children: jsx_runtime_1.jsxs(Tabs_1.Tabs, { children: [
|
|
63
|
-
jsx_runtime_1.jsx(Tabs_1.Tab, { selected: panel === 'compositions', onClick: onCompositionsSelected, children: "Compositions" }), jsx_runtime_1.jsx(Tabs_1.Tab, { selected: panel === 'assets', onClick: onAssetsSelected, children: "Assets" })
|
|
81
|
+
jsx_runtime_1.jsx(Tabs_1.Tab, { selected: panel === 'compositions', onClick: onCompositionsSelected, children: "Compositions" }), jsx_runtime_1.jsx(Tabs_1.Tab, { selected: panel === 'assets', onClick: onAssetsSelected, onDragEnter: onAssetDragEnter, onDragLeave: onAssetDragLeave, children: "Assets" })
|
|
64
82
|
] }) }), panel === 'compositions' ? (jsx_runtime_1.jsx(CompositionSelector_1.CompositionSelector, {})) : (jsx_runtime_1.jsx(AssetSelector_1.AssetSelector, { readOnlyStudio: readOnlyStudio }))] }) }));
|
|
65
83
|
};
|
|
66
84
|
exports.ExplorerPanel = ExplorerPanel;
|
|
@@ -42,7 +42,7 @@ const mainButtonBase = {
|
|
|
42
42
|
};
|
|
43
43
|
const editorButtonIconSize = 18;
|
|
44
44
|
const InspectorOpenInEditor = ({ contextForAgents = null, label, location, locationType }) => {
|
|
45
|
-
var _a;
|
|
45
|
+
var _a, _b;
|
|
46
46
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
47
47
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
48
48
|
const { tabIndex } = (0, z_index_1.useZIndex)();
|
|
@@ -64,6 +64,7 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location, locat
|
|
|
64
64
|
}
|
|
65
65
|
}, [location]);
|
|
66
66
|
const preferredEditorId = (0, use_default_editor_info_1.getPreferredEditorId)(editorInfo);
|
|
67
|
+
const preferredEditor = editorInfo === null || editorInfo === void 0 ? void 0 : editorInfo.installedEditors.find((editor) => editor.id === preferredEditorId);
|
|
67
68
|
const openWithCodingAgent = (0, react_1.useCallback)(async (codingAgentId, codingAgentName) => {
|
|
68
69
|
try {
|
|
69
70
|
const response = await (0, open_in_editor_1.openInCodingAgent)(codingAgentId, codingAgentId === 'copilot' ? null : contextForAgents);
|
|
@@ -75,12 +76,13 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location, locat
|
|
|
75
76
|
(0, NotificationCenter_1.showNotification)(err.message, 2000);
|
|
76
77
|
}
|
|
77
78
|
}, [contextForAgents]);
|
|
78
|
-
const editorName = (_a = window.remotion_editorName) !== null && _a !== void 0 ? _a : 'default editor';
|
|
79
|
-
const canOpenDefault = location !== null &&
|
|
79
|
+
const editorName = (_b = (_a = window.remotion_editorName) !== null && _a !== void 0 ? _a : preferredEditor === null || preferredEditor === void 0 ? void 0 : preferredEditor.nameWithType) !== null && _b !== void 0 ? _b : 'default editor';
|
|
80
|
+
const canOpenDefault = location !== null &&
|
|
81
|
+
(window.remotion_editorName !== null || preferredEditorId !== null);
|
|
80
82
|
const onOpenDefault = (0, react_1.useCallback)((event) => {
|
|
81
83
|
event.stopPropagation();
|
|
82
|
-
openWithEditor(null).catch(() => undefined);
|
|
83
|
-
}, [openWithEditor]);
|
|
84
|
+
openWithEditor(window.remotion_editorName === null ? preferredEditorId : null).catch(() => undefined);
|
|
85
|
+
}, [openWithEditor, preferredEditorId]);
|
|
84
86
|
const onDropdownOpenChange = (0, react_1.useCallback)((open) => {
|
|
85
87
|
setDropdownOpened(open);
|
|
86
88
|
if (!open) {
|
|
@@ -124,6 +126,7 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location, locat
|
|
|
124
126
|
excludeEditorId: preferredEditorId,
|
|
125
127
|
fileManagerDisabled: !(location === null || location === void 0 ? void 0 : location.source),
|
|
126
128
|
folder: locationType === 'folder',
|
|
129
|
+
location,
|
|
127
130
|
onConfigureApps: () => {
|
|
128
131
|
var _a;
|
|
129
132
|
var _b;
|
|
@@ -105,6 +105,7 @@ const SequenceExpandedInspector = ({ track, readOnlyStudio }) => {
|
|
|
105
105
|
const sourceLocation = (0, SequenceInspectorHeader_1.useSequenceInspectorSourceLocation)(track.sequence);
|
|
106
106
|
const connectedCompositions = (0, ConnectedCompositionsSection_1.useConnectedCompositions)({ track });
|
|
107
107
|
const { validatedLocation } = sourceLocation;
|
|
108
|
+
const stackKey = track.sequence.getStack();
|
|
108
109
|
const sequenceSelection = (0, react_1.useMemo)(() => {
|
|
109
110
|
if (!track.nodePathInfo) {
|
|
110
111
|
return null;
|
|
@@ -141,7 +142,7 @@ const SequenceExpandedInspector = ({ track, readOnlyStudio }) => {
|
|
|
141
142
|
return jsx_runtime_1.jsx(common_1.InspectorMessage, { children: "Sequence inspector unavailable" });
|
|
142
143
|
}
|
|
143
144
|
return (jsx_runtime_1.jsxs("div", { style: styles_1.selectedContainer, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, onPointerDown: selectSequenceOnInspectorPointerDown, children: [
|
|
144
|
-
jsx_runtime_1.jsx(SequenceInspectorHeader_1.SequenceInspectorHeader, { sourceLocation: sourceLocation, track: track }), jsx_runtime_1.jsx(SequenceInspectorHeader_1.SequenceInspectorDuplicationSection, { track: track }), connectedCompositions.length > 0 ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
145
|
+
jsx_runtime_1.jsx(SequenceInspectorHeader_1.SequenceInspectorHeader, { sourceLocation: sourceLocation, track: track }, stackKey !== null && stackKey !== void 0 ? stackKey : track.sequence.id), jsx_runtime_1.jsx(SequenceInspectorHeader_1.SequenceInspectorDuplicationSection, { track: track }), connectedCompositions.length > 0 ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
145
146
|
jsx_runtime_1.jsx(common_1.InspectorSectionDivider, {}), jsx_runtime_1.jsx(ConnectedCompositionsSection_1.ConnectedCompositionsSection, { connectedCompositions: connectedCompositions })
|
|
146
147
|
] })) : null, validatedLocation ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [jsx_runtime_1.jsx(InspectorSequenceSection_1.InspectorSequenceSection, { sequence: track.sequence, readOnlyStudio: readOnlyStudio, validatedLocation: validatedLocation, nodePathInfo: track.nodePathInfo, keyframeDisplayOffset: track.keyframeDisplayOffset, renderTransformControls: () => jsx_runtime_1.jsx(AlignmentControls_1.AlignmentControls, { track: track }) }), jsx_runtime_1.jsxs(common_1.InspectorActionSection, { children: [
|
|
147
148
|
jsx_runtime_1.jsx(SplitSequenceAction, { selection: sequenceSelection, track: track }), jsx_runtime_1.jsx(SequenceSourceActions, { selection: sequenceSelection, track: track, validatedSource: validatedLocation.source })
|
|
@@ -153,7 +154,6 @@ const SequenceSelectionInspector = ({ selection, readOnlyStudio }) => {
|
|
|
153
154
|
if (!track) {
|
|
154
155
|
return jsx_runtime_1.jsx(common_1.InspectorMessage, { children: "Sequence inspector unavailable" });
|
|
155
156
|
}
|
|
156
|
-
|
|
157
|
-
return (jsx_runtime_1.jsx(SequenceExpandedInspector, { track: track, readOnlyStudio: readOnlyStudio }, stackKey !== null && stackKey !== void 0 ? stackKey : track.sequence.id));
|
|
157
|
+
return (jsx_runtime_1.jsx(SequenceExpandedInspector, { track: track, readOnlyStudio: readOnlyStudio }));
|
|
158
158
|
};
|
|
159
159
|
exports.SequenceSelectionInspector = SequenceSelectionInspector;
|
|
@@ -73,9 +73,9 @@ const MenuItem = ({ label: itemName, selected, id, onItemSelected, onItemHovered
|
|
|
73
73
|
return;
|
|
74
74
|
}
|
|
75
75
|
onItemSelected(id);
|
|
76
|
-
(0, pointer_session_1.
|
|
76
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
77
77
|
event: e.nativeEvent,
|
|
78
|
-
|
|
78
|
+
captureTarget: e.currentTarget,
|
|
79
79
|
onEnd: (reason, evt) => {
|
|
80
80
|
if ((reason === 'pointerup' || reason === 'buttons-released') &&
|
|
81
81
|
evt) {
|
|
@@ -34,6 +34,6 @@ const ModalContainer = ({ children, onEscape, onOutsideClick, noZIndex, panelSty
|
|
|
34
34
|
// Prevent deselection of currently selected items
|
|
35
35
|
e.stopPropagation();
|
|
36
36
|
}, []);
|
|
37
|
-
return (jsx_runtime_1.jsx("div", { className: "css-reset", style: backgroundOverlay, role: "dialog", "aria-modal": "true", onPointerDown: onPointerDown, children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { disabled: noZIndex, onOutsideClick: onOutsideClick, onEscape: onEscape,
|
|
37
|
+
return (jsx_runtime_1.jsx("div", { className: "css-reset", style: backgroundOverlay, role: "dialog", "aria-modal": "true", onPointerDown: onPointerDown, children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { disabled: noZIndex, onOutsideClick: onOutsideClick, onEscape: onEscape, children: jsx_runtime_1.jsx("div", { style: { ...panel, ...panelStyle }, children: children }) }) }));
|
|
38
38
|
};
|
|
39
39
|
exports.ModalContainer = ModalContainer;
|
|
@@ -6,16 +6,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.Modals = void 0;
|
|
7
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
8
|
const react_1 = require("react");
|
|
9
|
-
const react_dom_1 = __importDefault(require("react-dom"));
|
|
10
9
|
const client_id_1 = require("../helpers/client-id");
|
|
11
10
|
const studio_runtime_config_1 = require("../helpers/studio-runtime-config");
|
|
12
11
|
const modals_1 = require("../state/modals");
|
|
13
|
-
const z_index_1 = require("../state/z-index");
|
|
14
12
|
const AskAiModal_1 = require("./AskAiModal");
|
|
15
13
|
const ConfirmationDialog_1 = require("./ConfirmationDialog");
|
|
16
14
|
const EffectPickerModal_1 = require("./EffectPickerModal");
|
|
17
15
|
const InstallPackage_1 = require("./InstallPackage");
|
|
18
|
-
const portals_1 = require("./Menu/portals");
|
|
19
16
|
const DeleteComposition_1 = require("./NewComposition/DeleteComposition");
|
|
20
17
|
const DeleteFolder_1 = require("./NewComposition/DeleteFolder");
|
|
21
18
|
const DuplicateComposition_1 = require("./NewComposition/DuplicateComposition");
|
|
@@ -36,7 +33,6 @@ const Modals = ({ readOnlyStudio }) => {
|
|
|
36
33
|
var _a;
|
|
37
34
|
const modalContextType = (0, react_1.useContext)(modals_1.SelectedModalContext);
|
|
38
35
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
39
|
-
const { currentZIndex } = (0, z_index_1.useZIndex)();
|
|
40
36
|
const { previewServerState, subscribeToEvent } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
41
37
|
const canRender = previewServerState.type === 'connected';
|
|
42
38
|
(0, react_1.useEffect)(() => {
|
|
@@ -51,11 +47,8 @@ const Modals = ({ readOnlyStudio }) => {
|
|
|
51
47
|
});
|
|
52
48
|
});
|
|
53
49
|
}, [setSelectedModal, subscribeToEvent]);
|
|
54
|
-
return
|
|
50
|
+
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'new-comp' && (jsx_runtime_1.jsx(NewComposition_1.NewComposition, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack, canvasCapture: modalContextType.canvasCapture })), modalContextType && modalContextType.type === 'new-folder' && (jsx_runtime_1.jsx(NewFolder_1.NewFolder, { parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'duplicate-comp' && (jsx_runtime_1.jsx(DuplicateComposition_1.DuplicateComposition, { compositionType: modalContextType.compositionType, compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-comp' && (jsx_runtime_1.jsx(DeleteComposition_1.DeleteComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'rename-comp' && (jsx_runtime_1.jsx(RenameComposition_1.RenameComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-folder' && (jsx_runtime_1.jsx(DeleteFolder_1.DeleteFolder, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'rename-folder' && (jsx_runtime_1.jsx(RenameFolder_1.RenameFolder, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'rename-static-file' && (jsx_runtime_1.jsx(RenameStaticFile_1.RenameStaticFileModal, { relativePath: modalContextType.relativePath })), modalContextType && modalContextType.type === 'input-props-override' && (jsx_runtime_1.jsx(OverrideInputProps_1.OverrideInputPropsModal, {})), modalContextType && modalContextType.type === 'settings' && (jsx_runtime_1.jsx(SettingsModal_1.SettingsModal, { initialTab: modalContextType.initialTab, initialPublicLicenseKey: modalContextType.initialPublicLicenseKey }, `${modalContextType.initialTab}-${modalContextType.initialPublicLicenseKey}`)), modalContextType && modalContextType.type === 'web-render' && (jsx_runtime_1.jsx(WebRenderModal_1.WebRenderModalWithLoader, { ...modalContextType })), modalContextType &&
|
|
55
51
|
modalContextType.type === 'server-render' &&
|
|
56
|
-
(canRender || modalContextType.readOnlyStudio) ? (jsx_runtime_1.jsx(ServerRenderModal_1.RenderModalWithLoader, { readOnlyStudio: (_a = modalContextType.readOnlyStudio) !== null && _a !== void 0 ? _a : false, initialFrame: modalContextType.initialFrame, initialDarkMode: modalContextType.initialDarkMode, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialOffthreadVideoThreads: modalContextType.initialOffthreadVideoThreads, initialMediaCacheSizeInBytes: modalContextType.initialMediaCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialGopSize: modalContextType.initialGopSize, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, initialEncodingBufferSize: modalContextType.initialEncodingBufferSize, initialEncodingMaxRate: modalContextType.initialEncodingMaxRate, initialUserAgent: modalContextType.initialUserAgent, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux, initialRepro: modalContextType.initialRepro, initialBeep: modalContextType.initialBeep, initialForSeamlessAacConcatenation: modalContextType.initialForSeamlessAacConcatenation, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec, renderTypeOfLastRender: modalContextType.renderTypeOfLastRender, defaultMetadata: modalContextType.defaulMetadata, initialHardwareAcceleration: modalContextType.initialHardwareAcceleration, initialSampleRate: modalContextType.initialSampleRate, initialChromeMode: modalContextType.initialChromeMode, renderDefaults: modalContextType.renderDefaults })) : null, modalContextType && modalContextType.type === 'render-progress' && (jsx_runtime_1.jsx(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'update' && (jsx_runtime_1.jsx(UpdateModal_1.UpdateModal, { info: modalContextType.info, knownBugs: modalContextType.knownBugs })), modalContextType && modalContextType.type === 'install-packages' && (jsx_runtime_1.jsx(InstallPackage_1.InstallPackageModal, { packageManager: modalContextType.packageManager })), modalContextType && modalContextType.type === 'quick-switcher' && (jsx_runtime_1.jsx(QuickSwitcher_1.default, { readOnlyStudio: readOnlyStudio, invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode, assetSelection: modalContextType.assetSelection, compositionSelection: modalContextType.compositionSelection })), modalContextType && modalContextType.type === 'add-effect' && (jsx_runtime_1.jsx(EffectPickerModal_1.EffectPickerModal, { state: modalContextType })), modalContextType && modalContextType.type === 'confirmation-dialog' && (jsx_runtime_1.jsx(ConfirmationDialog_1.ConfirmationDialog, { state: modalContextType })), modalContextType && modalContextType.type === 'svg-import-dialog' && (jsx_runtime_1.jsx(SvgImportDialog_1.SvgImportDialog, { state: modalContextType })), (0, studio_runtime_config_1.getStudioAskAIEnabled)() && jsx_runtime_1.jsx(AskAiModal_1.AskAiModal, {})] })
|
|
57
|
-
// Modals must be above overlays opened from the editor, such as the
|
|
58
|
-
// floating sidebars used in the mobile layout.
|
|
59
|
-
(0, portals_1.getPortal)(currentZIndex + 1));
|
|
52
|
+
(canRender || modalContextType.readOnlyStudio) ? (jsx_runtime_1.jsx(ServerRenderModal_1.RenderModalWithLoader, { readOnlyStudio: (_a = modalContextType.readOnlyStudio) !== null && _a !== void 0 ? _a : false, initialFrame: modalContextType.initialFrame, initialDarkMode: modalContextType.initialDarkMode, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialOffthreadVideoThreads: modalContextType.initialOffthreadVideoThreads, initialMediaCacheSizeInBytes: modalContextType.initialMediaCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialGopSize: modalContextType.initialGopSize, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, initialEncodingBufferSize: modalContextType.initialEncodingBufferSize, initialEncodingMaxRate: modalContextType.initialEncodingMaxRate, initialUserAgent: modalContextType.initialUserAgent, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux, initialRepro: modalContextType.initialRepro, initialBeep: modalContextType.initialBeep, initialForSeamlessAacConcatenation: modalContextType.initialForSeamlessAacConcatenation, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec, renderTypeOfLastRender: modalContextType.renderTypeOfLastRender, defaultMetadata: modalContextType.defaulMetadata, initialHardwareAcceleration: modalContextType.initialHardwareAcceleration, initialSampleRate: modalContextType.initialSampleRate, initialChromeMode: modalContextType.initialChromeMode, renderDefaults: modalContextType.renderDefaults })) : null, modalContextType && modalContextType.type === 'render-progress' && (jsx_runtime_1.jsx(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'update' && (jsx_runtime_1.jsx(UpdateModal_1.UpdateModal, { info: modalContextType.info, knownBugs: modalContextType.knownBugs })), modalContextType && modalContextType.type === 'install-packages' && (jsx_runtime_1.jsx(InstallPackage_1.InstallPackageModal, { packageManager: modalContextType.packageManager })), modalContextType && modalContextType.type === 'quick-switcher' && (jsx_runtime_1.jsx(QuickSwitcher_1.default, { readOnlyStudio: readOnlyStudio, invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode, assetSelection: modalContextType.assetSelection, compositionSelection: modalContextType.compositionSelection })), modalContextType && modalContextType.type === 'add-effect' && (jsx_runtime_1.jsx(EffectPickerModal_1.EffectPickerModal, { state: modalContextType })), modalContextType && modalContextType.type === 'confirmation-dialog' && (jsx_runtime_1.jsx(ConfirmationDialog_1.ConfirmationDialog, { state: modalContextType })), modalContextType && modalContextType.type === 'svg-import-dialog' && (jsx_runtime_1.jsx(SvgImportDialog_1.SvgImportDialog, { state: modalContextType })), (0, studio_runtime_config_1.getStudioAskAIEnabled)() && jsx_runtime_1.jsx(AskAiModal_1.AskAiModal, {})] }));
|
|
60
53
|
};
|
|
61
54
|
exports.Modals = Modals;
|
|
@@ -449,9 +449,9 @@ const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min,
|
|
|
449
449
|
lastDragValue = nextValue;
|
|
450
450
|
onValueChange(nextValue);
|
|
451
451
|
};
|
|
452
|
-
(0, pointer_session_1.
|
|
452
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
453
453
|
event: e.nativeEvent,
|
|
454
|
-
target,
|
|
454
|
+
captureTarget: target,
|
|
455
455
|
onMove: moveListener,
|
|
456
456
|
onEnd: (reason) => {
|
|
457
457
|
pointerDownRef.current = false;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import type { CanvasCaptureImport } from '../../state/modals';
|
|
2
3
|
export declare const NewComposition: React.FC<{
|
|
3
4
|
readonly folderName: string | null;
|
|
4
5
|
readonly parentName: string | null;
|
|
5
6
|
readonly stack: string | null;
|
|
7
|
+
readonly canvasCapture: CanvasCaptureImport | null;
|
|
6
8
|
}>;
|
|
@@ -4,6 +4,9 @@ exports.NewComposition = void 0;
|
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const remotion_1 = require("remotion");
|
|
7
|
+
const get_static_files_1 = require("../../api/get-static-files");
|
|
8
|
+
const write_static_file_1 = require("../../api/write-static-file");
|
|
9
|
+
const install_required_package_1 = require("../../helpers/install-required-package");
|
|
7
10
|
const use_create_composition_1 = require("../../helpers/use-create-composition");
|
|
8
11
|
const layout_1 = require("../layout");
|
|
9
12
|
const ModalFooter_1 = require("../ModalFooter");
|
|
@@ -27,14 +30,15 @@ const content = {
|
|
|
27
30
|
const folderPathStyle = {
|
|
28
31
|
fontSize: 14,
|
|
29
32
|
};
|
|
30
|
-
const NewCompositionLoaded = ({ folderName, parentName, stack }) => {
|
|
33
|
+
const NewCompositionLoaded = ({ canvasCapture, folderName, parentName, stack }) => {
|
|
34
|
+
var _a;
|
|
31
35
|
const { compositions } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
32
36
|
const resolvedComposition = remotion_1.Internals.useResolvedVideoConfig(null);
|
|
33
37
|
const initialComposition = (resolvedComposition === null || resolvedComposition === void 0 ? void 0 : resolvedComposition.type) === 'success' ||
|
|
34
38
|
(resolvedComposition === null || resolvedComposition === void 0 ? void 0 : resolvedComposition.type) === 'success-and-refreshing'
|
|
35
39
|
? resolvedComposition.result
|
|
36
40
|
: null;
|
|
37
|
-
const initialDimensions = (0, get_new_composition_defaults_1.getNewCompositionDefaults)(initialComposition);
|
|
41
|
+
const initialDimensions = (0, get_new_composition_defaults_1.getNewCompositionDefaults)(initialComposition, (_a = canvasCapture === null || canvasCapture === void 0 ? void 0 : canvasCapture.durationInSeconds) !== null && _a !== void 0 ? _a : null);
|
|
38
42
|
const [newId, setName] = (0, react_1.useState)(() => (0, use_create_composition_1.getUniqueCompositionName)(compositions));
|
|
39
43
|
const inputRef = (0, react_1.useRef)(null);
|
|
40
44
|
(0, react_1.useEffect)(() => {
|
|
@@ -98,13 +102,41 @@ const NewCompositionLoaded = ({ folderName, parentName, stack }) => {
|
|
|
98
102
|
parentName,
|
|
99
103
|
selectedFrameRate,
|
|
100
104
|
size,
|
|
105
|
+
canvasCapture: canvasCapture === null
|
|
106
|
+
? null
|
|
107
|
+
: {
|
|
108
|
+
data: canvasCapture.data,
|
|
109
|
+
videoFileName: canvasCapture.file.name,
|
|
110
|
+
videoHeight: canvasCapture.height,
|
|
111
|
+
videoWidth: canvasCapture.width,
|
|
112
|
+
},
|
|
101
113
|
});
|
|
114
|
+
const createCanvasCaptureComposition = (0, react_1.useCallback)(async ({ signal, symbolicatedStack, }) => {
|
|
115
|
+
if (canvasCapture !== null) {
|
|
116
|
+
const existingFile = (0, get_static_files_1.getStaticFiles)().find((file) => file.name === canvasCapture.file.name);
|
|
117
|
+
if (existingFile !== undefined &&
|
|
118
|
+
existingFile.sizeInBytes !== canvasCapture.file.size) {
|
|
119
|
+
throw new Error(`File with name ${canvasCapture.file.name} already exists and is different`);
|
|
120
|
+
}
|
|
121
|
+
await (0, install_required_package_1.installRequiredPackages)([
|
|
122
|
+
{ name: '@remotion/media', version: null },
|
|
123
|
+
{ name: '@remotion/mac-cursors', version: null },
|
|
124
|
+
]);
|
|
125
|
+
if (existingFile === undefined) {
|
|
126
|
+
await (0, write_static_file_1.writeStaticFile)({
|
|
127
|
+
contents: await canvasCapture.file.arrayBuffer(),
|
|
128
|
+
filePath: canvasCapture.file.name,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return createComposition({ signal, symbolicatedStack });
|
|
133
|
+
}, [canvasCapture, createComposition]);
|
|
102
134
|
const onSubmit = (0, react_1.useCallback)((e) => {
|
|
103
135
|
e.preventDefault();
|
|
104
136
|
}, []);
|
|
105
137
|
const folderPath = [parentName, folderName].filter(Boolean).join('/');
|
|
106
138
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
107
|
-
jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title:
|
|
139
|
+
jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: canvasCapture === null ? 'New composition' : 'Import Canvas Capture' }), jsx_runtime_1.jsxs("form", { onSubmit: onSubmit, children: [
|
|
108
140
|
jsx_runtime_1.jsxs("div", { style: content, children: [folderPath ? (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
|
|
109
141
|
jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Folder" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx("span", { style: folderPathStyle, children: folderPath }) })
|
|
110
142
|
] })) : null, jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
|
|
@@ -125,14 +157,14 @@ const NewCompositionLoaded = ({ folderName, parentName, stack }) => {
|
|
|
125
157
|
] }), jsx_runtime_1.jsx(NewCompDuration_1.NewCompDuration, { durationInFrames: durationInFrames, setDurationInFrames: setDurationInFrames }), jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
|
|
126
158
|
jsx_runtime_1.jsx("div", { style: layout_2.label, children: "FPS" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: selectedFrameRate, onTextChange: onTextFpsChange, placeholder: "Frame rate (fps)", name: "fps", min: 1, required: true, status: "ok", max: 240, step: 0.01, onValueChange: onFpsChange, rightAlign: false }) })
|
|
127
159
|
] })
|
|
128
|
-
] }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsx(CodemodFooter_1.CodemodFooter, { loadingNotification: null, errorNotification: "Could not create composition", successNotification: `Created ${newId}`, genericSubmitLabel: "Add to root file", submitLabel: ({ relativeRootPath }) => `Add to ${relativeRootPath}`, codemod: codemod, stack: stack, valid: valid, onSuccess: null, applyCodemod: ({ signal, symbolicatedStack }) =>
|
|
160
|
+
] }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsx(CodemodFooter_1.CodemodFooter, { loadingNotification: null, errorNotification: "Could not create composition", successNotification: `Created ${newId}`, genericSubmitLabel: "Add to root file", submitLabel: ({ relativeRootPath }) => `Add to ${relativeRootPath}`, codemod: codemod, stack: stack, valid: valid, onSuccess: null, applyCodemod: ({ signal, symbolicatedStack }) => createCanvasCaptureComposition({
|
|
129
161
|
signal,
|
|
130
162
|
symbolicatedStack,
|
|
131
163
|
}), fallbackToRootFile: true }) })
|
|
132
164
|
] })
|
|
133
165
|
] }));
|
|
134
166
|
};
|
|
135
|
-
const NewComposition = ({ folderName, parentName, stack }) => {
|
|
136
|
-
return (jsx_runtime_1.jsx(DismissableModal_1.DismissableModal, { children: jsx_runtime_1.jsx(NewCompositionLoaded, { folderName: folderName, parentName: parentName, stack: stack }) }));
|
|
167
|
+
const NewComposition = ({ canvasCapture, folderName, parentName, stack }) => {
|
|
168
|
+
return (jsx_runtime_1.jsx(DismissableModal_1.DismissableModal, { children: jsx_runtime_1.jsx(NewCompositionLoaded, { canvasCapture: canvasCapture, folderName: folderName, parentName: parentName, stack: stack }) }));
|
|
137
169
|
};
|
|
138
170
|
exports.NewComposition = NewComposition;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { VideoConfig } from 'remotion';
|
|
2
2
|
type CompositionDimensions = Pick<VideoConfig, 'width' | 'height' | 'fps' | 'durationInFrames'>;
|
|
3
|
-
export declare const getNewCompositionDefaults: (composition: CompositionDimensions | null) => CompositionDimensions;
|
|
3
|
+
export declare const getNewCompositionDefaults: (composition: CompositionDimensions | null, canvasCaptureDurationInSeconds: number | null) => CompositionDimensions;
|
|
4
4
|
export {};
|
|
@@ -7,7 +7,15 @@ const defaultCompositionDimensions = {
|
|
|
7
7
|
fps: 30,
|
|
8
8
|
durationInFrames: 150,
|
|
9
9
|
};
|
|
10
|
-
const
|
|
10
|
+
const canvasCaptureFps = 60;
|
|
11
|
+
const getNewCompositionDefaults = (composition, canvasCaptureDurationInSeconds) => {
|
|
12
|
+
if (canvasCaptureDurationInSeconds !== null) {
|
|
13
|
+
return {
|
|
14
|
+
...defaultCompositionDimensions,
|
|
15
|
+
fps: canvasCaptureFps,
|
|
16
|
+
durationInFrames: Math.max(1, Math.ceil(canvasCaptureDurationInSeconds * canvasCaptureFps)),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
11
19
|
return composition !== null && composition !== void 0 ? composition : defaultCompositionDimensions;
|
|
12
20
|
};
|
|
13
21
|
exports.getNewCompositionDefaults = getNewCompositionDefaults;
|
|
@@ -75,6 +75,8 @@ const SelectedOutlineCanvasRotation = ({ getLatestTargetByKey, layoutTarget, onD
|
|
|
75
75
|
if (svg === null) {
|
|
76
76
|
return;
|
|
77
77
|
}
|
|
78
|
+
const previousSvgCursor = svg.style.cursor;
|
|
79
|
+
svg.style.cursor = canvas_rotation_cursor_1.canvasRotationCursor;
|
|
78
80
|
const startPointer = { x: event.clientX, y: event.clientY };
|
|
79
81
|
const center = (0, svg_point_to_client_point_1.svgPointToClientPoint)((0, selected_outline_measurement_1.getSelectedOutlineRotationPivot)({
|
|
80
82
|
dimensions: outline.dimensions,
|
|
@@ -104,6 +106,7 @@ const SelectedOutlineCanvasRotation = ({ getLatestTargetByKey, layoutTarget, onD
|
|
|
104
106
|
return;
|
|
105
107
|
}
|
|
106
108
|
dragStarted = true;
|
|
109
|
+
(0, ForceSpecificCursor_1.forceSpecificCursor)(canvas_rotation_cursor_1.canvasRotationCursor);
|
|
107
110
|
onDraggingChange(true);
|
|
108
111
|
}
|
|
109
112
|
if (rotationDrag.transform3DMode) {
|
|
@@ -123,7 +126,6 @@ const SelectedOutlineCanvasRotation = ({ getLatestTargetByKey, layoutTarget, onD
|
|
|
123
126
|
rotationXDeltaDegrees,
|
|
124
127
|
rotationYDeltaDegrees,
|
|
125
128
|
});
|
|
126
|
-
(0, ForceSpecificCursor_1.forceSpecificCursor)(canvas_rotation_cursor_1.canvasRotationCursor);
|
|
127
129
|
}
|
|
128
130
|
else {
|
|
129
131
|
const nextAngle = (0, selected_outline_measurement_1.getAngleDegrees)(center, {
|
|
@@ -145,7 +147,6 @@ const SelectedOutlineCanvasRotation = ({ getLatestTargetByKey, layoutTarget, onD
|
|
|
145
147
|
dragStates,
|
|
146
148
|
rotationDeltaDegrees,
|
|
147
149
|
});
|
|
148
|
-
(0, ForceSpecificCursor_1.forceSpecificCursor)(canvas_rotation_cursor_1.canvasRotationCursor);
|
|
149
150
|
}
|
|
150
151
|
for (const dragState of dragStates) {
|
|
151
152
|
const value = lastValues.get(dragState.key);
|
|
@@ -165,6 +166,7 @@ const SelectedOutlineCanvasRotation = ({ getLatestTargetByKey, layoutTarget, onD
|
|
|
165
166
|
}
|
|
166
167
|
};
|
|
167
168
|
const onPointerUp = () => {
|
|
169
|
+
svg.style.cursor = previousSvgCursor;
|
|
168
170
|
if (dragStarted) {
|
|
169
171
|
(0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
|
|
170
172
|
onDraggingChange(false);
|
|
@@ -213,9 +215,9 @@ const SelectedOutlineCanvasRotation = ({ getLatestTargetByKey, layoutTarget, onD
|
|
|
213
215
|
};
|
|
214
216
|
// The polygon gates pointer-down, while the stable overlay keeps the
|
|
215
217
|
// session alive after the pointer leaves the selected item.
|
|
216
|
-
(0, pointer_session_1.
|
|
218
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
217
219
|
event,
|
|
218
|
-
|
|
220
|
+
captureTarget: svg,
|
|
219
221
|
onMove: onPointerMove,
|
|
220
222
|
onEnd: onPointerUp,
|
|
221
223
|
});
|
|
@@ -268,9 +268,9 @@ const CropHandle = ({ handle, outline, onDraggingChange, target }) => {
|
|
|
268
268
|
clearDragOverrides(cropDrag.nodePath);
|
|
269
269
|
});
|
|
270
270
|
};
|
|
271
|
-
(0, pointer_session_1.
|
|
271
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
272
272
|
event,
|
|
273
|
-
|
|
273
|
+
captureTarget: event.currentTarget,
|
|
274
274
|
onMove: onPointerMove,
|
|
275
275
|
onEnd: onPointerUp,
|
|
276
276
|
});
|