@remotion/studio 4.0.472 → 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 +45 -4
- package/dist/components/AssetSelectorItem.js +153 -27
- package/dist/components/Canvas.js +60 -11
- 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 +49 -5
- package/dist/components/CurrentAsset.d.ts +1 -0
- package/dist/components/CurrentAsset.js +13 -2
- 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 +6 -2
- package/dist/components/NewComposition/ComboBox.js +8 -2
- package/dist/components/NewComposition/DeleteStaticFile.d.ts +4 -0
- package/dist/components/NewComposition/DeleteStaticFile.js +44 -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 +24 -0
- package/dist/components/SelectedOutlineOverlay.js +190 -22
- 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/SplitterHandle.js +2 -0
- 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 +3 -13
- package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +25 -2
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +234 -20
- package/dist/components/Timeline/TimelineDeleteKeybindings.js +12 -2
- package/dist/components/Timeline/TimelineEffectItem.js +1 -0
- package/dist/components/Timeline/TimelineEffectPropItem.js +52 -2
- package/dist/components/Timeline/TimelineKeyframeControls.js +5 -15
- 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/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/TimelineScaleField.js +1 -1
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequenceItem.js +276 -22
- package/dist/components/Timeline/TimelineSequencePropItem.js +81 -16
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +25 -28
- 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 +2 -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/reset-selected-timeline-props.js +3 -2
- 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-translate-utils.js +4 -1
- 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/import-assets.d.ts +16 -0
- package/dist/components/import-assets.js +155 -18
- 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-48grt472.js → chunk-q0jkt0zq.js} +21961 -19299
- package/dist/esm/internals.mjs +21961 -19299
- package/dist/esm/previewEntry.mjs +20600 -17914
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/get-asset-metadata.js +2 -2
- package/dist/helpers/get-preview-file-type.d.ts +2 -0
- package/dist/helpers/get-preview-file-type.js +33 -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/use-asset-drag-events.d.ts +5 -2
- package/dist/helpers/use-asset-drag-events.js +13 -2
- 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 +19 -2
- package/package.json +10 -10
- package/dist/helpers/detect-file-type.d.ts +0 -69
- package/dist/helpers/detect-file-type.js +0 -278
|
@@ -36,7 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.ContextMenu = void 0;
|
|
39
|
+
exports.ContextMenuForTarget = exports.ContextMenu = void 0;
|
|
40
40
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
41
41
|
const player_1 = require("@remotion/player");
|
|
42
42
|
const react_1 = __importStar(require("react"));
|
|
@@ -47,8 +47,8 @@ const z_index_1 = require("../state/z-index");
|
|
|
47
47
|
const portals_1 = require("./Menu/portals");
|
|
48
48
|
const styles_1 = require("./Menu/styles");
|
|
49
49
|
const MenuContent_1 = require("./NewComposition/MenuContent");
|
|
50
|
-
const ContextMenuPortal = ({
|
|
51
|
-
const size = player_1.PlayerInternals.useElementSize(
|
|
50
|
+
const ContextMenuPortal = ({ sizeSource, currentZIndex, onHide, opened, values }) => {
|
|
51
|
+
const size = player_1.PlayerInternals.useElementSize(sizeSource, {
|
|
52
52
|
triggerOnWindowResize: true,
|
|
53
53
|
shouldApplyCssTransforms: true,
|
|
54
54
|
});
|
|
@@ -134,7 +134,9 @@ exports.ContextMenu = react_1.default.forwardRef(({ children, values, onOpen, st
|
|
|
134
134
|
const onClick = (e) => {
|
|
135
135
|
e.preventDefault();
|
|
136
136
|
e.stopPropagation();
|
|
137
|
-
onOpen === null || onOpen === void 0 ? void 0 : onOpen()
|
|
137
|
+
if ((onOpen === null || onOpen === void 0 ? void 0 : onOpen()) === false) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
138
140
|
setOpened({ type: 'open', left: e.clientX, top: e.clientY });
|
|
139
141
|
return false;
|
|
140
142
|
};
|
|
@@ -147,6 +149,48 @@ exports.ContextMenu = react_1.default.forwardRef(({ children, values, onOpen, st
|
|
|
147
149
|
setOpened({ type: 'not-open' });
|
|
148
150
|
}, []);
|
|
149
151
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
150
|
-
jsx_runtime_1.jsx("div", { ref: setRef, onContextMenu: () => false, style: style, className: className, onPointerDown: onPointerDown, children: children }), opened.type === 'open' ? (jsx_runtime_1.jsx(ContextMenuPortal, {
|
|
152
|
+
jsx_runtime_1.jsx("div", { ref: setRef, onContextMenu: () => false, style: style, className: className, onPointerDown: onPointerDown, children: children }), opened.type === 'open' ? (jsx_runtime_1.jsx(ContextMenuPortal, { sizeSource: ref, currentZIndex: currentZIndex, onHide: onHide, opened: opened, values: values })) : null] }));
|
|
151
153
|
});
|
|
152
154
|
exports.ContextMenu.displayName = 'ContextMenu';
|
|
155
|
+
const ContextMenuForTarget = ({ triggerRef, values, onOpen }) => {
|
|
156
|
+
const [opened, setOpened] = (0, react_1.useState)({ type: 'not-open' });
|
|
157
|
+
const [openedValues, setOpenedValues] = (0, react_1.useState)(values);
|
|
158
|
+
const [body, setBody] = (0, react_1.useState)(null);
|
|
159
|
+
const { currentZIndex } = (0, z_index_1.useZIndex)();
|
|
160
|
+
(0, react_1.useEffect)(() => {
|
|
161
|
+
// Access document.body after mount so importing this component stays safe
|
|
162
|
+
// in DOM-less test environments.
|
|
163
|
+
setBody(document.body);
|
|
164
|
+
}, []);
|
|
165
|
+
(0, react_1.useEffect)(() => {
|
|
166
|
+
const { current } = triggerRef;
|
|
167
|
+
if (!current) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const onClick = async (event) => {
|
|
171
|
+
const e = event;
|
|
172
|
+
e.preventDefault();
|
|
173
|
+
e.stopPropagation();
|
|
174
|
+
const result = await (onOpen === null || onOpen === void 0 ? void 0 : onOpen(e));
|
|
175
|
+
if (result === false) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
const nextValues = Array.isArray(result) ? result : values;
|
|
179
|
+
if (nextValues.length === 0) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
setOpenedValues(nextValues);
|
|
183
|
+
setOpened({ type: 'open', left: e.clientX, top: e.clientY });
|
|
184
|
+
return false;
|
|
185
|
+
};
|
|
186
|
+
current.addEventListener('contextmenu', onClick);
|
|
187
|
+
return () => {
|
|
188
|
+
current.removeEventListener('contextmenu', onClick);
|
|
189
|
+
};
|
|
190
|
+
}, [onOpen, triggerRef, values]);
|
|
191
|
+
const onHide = (0, react_1.useCallback)(() => {
|
|
192
|
+
setOpened({ type: 'not-open' });
|
|
193
|
+
}, []);
|
|
194
|
+
return opened.type === 'open' ? (jsx_runtime_1.jsx(ContextMenuPortal, { sizeSource: body, currentZIndex: currentZIndex, onHide: onHide, opened: opened, values: [...openedValues] })) : null;
|
|
195
|
+
};
|
|
196
|
+
exports.ContextMenuForTarget = ContextMenuForTarget;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CurrentAsset = exports.CURRENT_ASSET_HEIGHT = void 0;
|
|
3
|
+
exports.CurrentAsset = exports.getCurrentAssetMetadataSource = exports.CURRENT_ASSET_HEIGHT = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
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 colors_1 = require("../helpers/colors");
|
|
9
9
|
const format_media_duration_1 = require("../helpers/format-media-duration");
|
|
10
|
+
const get_preview_file_type_1 = require("../helpers/get-preview-file-type");
|
|
10
11
|
const use_media_metadata_1 = require("../helpers/use-media-metadata");
|
|
11
12
|
const use_static_files_1 = require("./use-static-files");
|
|
12
13
|
exports.CURRENT_ASSET_HEIGHT = 80;
|
|
@@ -38,6 +39,16 @@ const row = {
|
|
|
38
39
|
lineHeight: '18px',
|
|
39
40
|
backgroundColor: colors_1.BACKGROUND,
|
|
40
41
|
};
|
|
42
|
+
const getCurrentAssetMetadataSource = (assetName) => {
|
|
43
|
+
if (!assetName) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const fileType = (0, get_preview_file_type_1.getPreviewFileType)(assetName);
|
|
47
|
+
return fileType === 'audio' || fileType === 'video'
|
|
48
|
+
? (0, remotion_1.staticFile)(assetName)
|
|
49
|
+
: null;
|
|
50
|
+
};
|
|
51
|
+
exports.getCurrentAssetMetadataSource = getCurrentAssetMetadataSource;
|
|
41
52
|
const CurrentAsset = () => {
|
|
42
53
|
var _a;
|
|
43
54
|
const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
@@ -51,7 +62,7 @@ const CurrentAsset = () => {
|
|
|
51
62
|
const file = staticFiles.find((f) => f.name === assetName);
|
|
52
63
|
return (_a = file === null || file === void 0 ? void 0 : file.sizeInBytes) !== null && _a !== void 0 ? _a : null;
|
|
53
64
|
}, [assetName, staticFiles]);
|
|
54
|
-
const src =
|
|
65
|
+
const src = (0, exports.getCurrentAssetMetadataSource)(assetName);
|
|
55
66
|
const mediaMetadata = (0, use_media_metadata_1.useMediaMetadata)(src);
|
|
56
67
|
if (!assetName) {
|
|
57
68
|
return jsx_runtime_1.jsx("div", { style: container });
|
|
@@ -9,8 +9,10 @@ const MenuToolbar_1 = require("./MenuToolbar");
|
|
|
9
9
|
const SplitterContainer_1 = require("./Splitter/SplitterContainer");
|
|
10
10
|
const SplitterElement_1 = require("./Splitter/SplitterElement");
|
|
11
11
|
const SplitterHandle_1 = require("./Splitter/SplitterHandle");
|
|
12
|
+
const should_clear_selection_on_pointer_down_1 = require("./Timeline/should-clear-selection-on-pointer-down");
|
|
12
13
|
const Timeline_1 = require("./Timeline/Timeline");
|
|
13
14
|
const TimelineEmptyState_1 = require("./Timeline/TimelineEmptyState");
|
|
15
|
+
const TimelineKeyframeDragState_1 = require("./Timeline/TimelineKeyframeDragState");
|
|
14
16
|
const TimelineSelection_1 = require("./Timeline/TimelineSelection");
|
|
15
17
|
const noop = () => undefined;
|
|
16
18
|
const container = {
|
|
@@ -19,13 +21,24 @@ const container = {
|
|
|
19
21
|
flex: 1,
|
|
20
22
|
height: 0,
|
|
21
23
|
};
|
|
24
|
+
const StudioClearSelectionArea = ({ children }) => {
|
|
25
|
+
const { clearSelection } = (0, TimelineSelection_1.useTimelineSelection)();
|
|
26
|
+
const onPointerDown = (0, react_1.useCallback)((e) => {
|
|
27
|
+
if (!(0, should_clear_selection_on_pointer_down_1.shouldClearSelectionOnPointerDown)(e)) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
clearSelection();
|
|
31
|
+
}, [clearSelection]);
|
|
32
|
+
return (jsx_runtime_1.jsx("div", { style: container, onPointerDown: onPointerDown, children: children }));
|
|
33
|
+
};
|
|
22
34
|
const EditorContent = ({ readOnlyStudio, children }) => {
|
|
23
35
|
const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
24
36
|
const showTimeline = canvasContent !== null && canvasContent.type === 'composition';
|
|
25
37
|
const content = (jsx_runtime_1.jsxs(SplitterContainer_1.SplitterContainer, { orientation: "horizontal", id: "top-to-bottom", maxFlex: 0.9, minFlex: 0.2, defaultFlex: 0.75, children: [
|
|
26
38
|
jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { sticky: null, type: "flexer", children: children }), jsx_runtime_1.jsx(SplitterHandle_1.SplitterHandle, { allowToCollapse: "none", onCollapse: noop }), jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { sticky: null, type: "anti-flexer", children: showTimeline ? jsx_runtime_1.jsx(Timeline_1.Timeline, {}) : jsx_runtime_1.jsx(TimelineEmptyState_1.TimelineEmptyState, {}) })
|
|
27
39
|
] }));
|
|
28
|
-
return (jsx_runtime_1.
|
|
29
|
-
|
|
40
|
+
return (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionProvider, { children: jsx_runtime_1.jsxs(StudioClearSelectionArea, { children: [
|
|
41
|
+
jsx_runtime_1.jsx(InitialCompositionLoader_1.InitialCompositionLoader, {}), jsx_runtime_1.jsx(MenuToolbar_1.MenuToolbar, { readOnlyStudio: readOnlyStudio }), jsx_runtime_1.jsx(TimelineKeyframeDragState_1.TimelineKeyframeDragStateProvider, { children: content })
|
|
42
|
+
] }) }));
|
|
30
43
|
};
|
|
31
44
|
exports.EditorContent = EditorContent;
|
|
@@ -19,13 +19,14 @@ const ClientRenderQueueProcessor_1 = require("./RenderQueue/ClientRenderQueuePro
|
|
|
19
19
|
const context_1 = require("./RenderQueue/context");
|
|
20
20
|
const SetTimelineInOutProvider_1 = require("./SetTimelineInOutProvider");
|
|
21
21
|
const ShowGuidesProvider_1 = require("./ShowGuidesProvider");
|
|
22
|
+
const ShowOutlinesProvider_1 = require("./ShowOutlinesProvider");
|
|
22
23
|
const ShowRulersProvider_1 = require("./ShowRulersProvider");
|
|
23
24
|
const VisualControlsUndoSync_1 = require("./VisualControls/VisualControlsUndoSync");
|
|
24
25
|
const ZoomGesturesProvider_1 = require("./ZoomGesturesProvider");
|
|
25
26
|
const EditorContexts = ({ children, readOnlyStudio }) => {
|
|
26
27
|
return (jsx_runtime_1.jsx(get_zod_if_possible_1.ZodProvider, { children: jsx_runtime_1.jsx(VisualControls_1.VisualControlsProvider, { children: jsx_runtime_1.jsxs(client_id_1.PreviewServerConnection, { readOnlyStudio: readOnlyStudio, children: [
|
|
27
28
|
jsx_runtime_1.jsx(VisualControlsUndoSync_1.VisualControlsUndoSync, {}), jsx_runtime_1.jsxs(context_1.RenderQueueContextProvider, { children: [
|
|
28
|
-
jsx_runtime_1.jsx(ClientRenderQueueProcessor_1.ClientRenderQueueProcessor, {}), jsx_runtime_1.jsx(keybindings_1.KeybindingContextProvider, { children: jsx_runtime_1.jsx(CheckerboardProvider_1.CheckerboardProvider, { children: jsx_runtime_1.jsx(ZoomGesturesProvider_1.ZoomGesturesProvider, { children: jsx_runtime_1.jsx(ShowRulersProvider_1.ShowRulersProvider, { children: jsx_runtime_1.jsx(ShowGuidesProvider_1.ShowGuidesProvider, { children: jsx_runtime_1.jsx(preview_size_1.PreviewSizeProvider, { children: jsx_runtime_1.jsx(ModalsProvider_1.ModalsProvider, { children: jsx_runtime_1.jsx(MediaVolumeProvider_1.MediaVolumeProvider, { children: jsx_runtime_1.jsx(player_1.PlayerInternals.PlayerEmitterProvider, { currentPlaybackRate: null, children: jsx_runtime_1.jsx(sidebar_1.SidebarContextProvider, { children: jsx_runtime_1.jsx(folders_1.FolderContextProvider, { children: jsx_runtime_1.jsx(highest_z_index_1.HighestZIndexProvider, { children: jsx_runtime_1.jsx(SetTimelineInOutProvider_1.SetTimelineInOutProvider, { children: jsx_runtime_1.jsx(ExpandedTracksProvider_1.ExpandedTracksProvider, { children: children }) }) }) }) }) }) }) }) }) }) }) }) }) })
|
|
29
|
+
jsx_runtime_1.jsx(ClientRenderQueueProcessor_1.ClientRenderQueueProcessor, {}), jsx_runtime_1.jsx(keybindings_1.KeybindingContextProvider, { children: jsx_runtime_1.jsx(CheckerboardProvider_1.CheckerboardProvider, { children: jsx_runtime_1.jsx(ZoomGesturesProvider_1.ZoomGesturesProvider, { children: jsx_runtime_1.jsx(ShowRulersProvider_1.ShowRulersProvider, { children: jsx_runtime_1.jsx(ShowGuidesProvider_1.ShowGuidesProvider, { children: jsx_runtime_1.jsx(ShowOutlinesProvider_1.ShowOutlinesProvider, { children: jsx_runtime_1.jsx(preview_size_1.PreviewSizeProvider, { children: jsx_runtime_1.jsx(ModalsProvider_1.ModalsProvider, { children: jsx_runtime_1.jsx(MediaVolumeProvider_1.MediaVolumeProvider, { children: jsx_runtime_1.jsx(player_1.PlayerInternals.PlayerEmitterProvider, { currentPlaybackRate: null, children: jsx_runtime_1.jsx(sidebar_1.SidebarContextProvider, { children: jsx_runtime_1.jsx(folders_1.FolderContextProvider, { children: jsx_runtime_1.jsx(highest_z_index_1.HighestZIndexProvider, { children: jsx_runtime_1.jsx(SetTimelineInOutProvider_1.SetTimelineInOutProvider, { children: jsx_runtime_1.jsx(ExpandedTracksProvider_1.ExpandedTracksProvider, { children: children }) }) }) }) }) }) }) }) }) }) }) }) }) }) })
|
|
29
30
|
] })
|
|
30
31
|
] }) }) }));
|
|
31
32
|
};
|
|
@@ -67,6 +67,8 @@ const Ruler = ({ scale, points, originOffset, startMarking, size, markingGaps, o
|
|
|
67
67
|
return;
|
|
68
68
|
}
|
|
69
69
|
e.preventDefault();
|
|
70
|
+
// Prevent deselection of currently selected items
|
|
71
|
+
e.stopPropagation();
|
|
70
72
|
shouldCreateGuideRef.current = true;
|
|
71
73
|
(0, ForceSpecificCursor_1.forceSpecificCursor)('no-drop');
|
|
72
74
|
const guideId = makeGuideId();
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ExplorerPanel =
|
|
3
|
+
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
7
|
const AssetSelector_1 = require("./AssetSelector");
|
|
8
8
|
const CompositionSelector_1 = require("./CompositionSelector");
|
|
9
9
|
const CompSelectorRef_1 = require("./CompSelectorRef");
|
|
10
|
+
const ExplorerPanelRef_1 = require("./ExplorerPanelRef");
|
|
10
11
|
const Tabs_1 = require("./Tabs");
|
|
11
12
|
const container = {
|
|
12
13
|
height: '100%',
|
|
@@ -30,7 +31,6 @@ const tabsContainer = {
|
|
|
30
31
|
const persistSelectedOptionsSidebarPanel = (panel) => {
|
|
31
32
|
localStorage.setItem(localStorageKey, panel);
|
|
32
33
|
};
|
|
33
|
-
exports.explorerSidebarTabs = (0, react_1.createRef)();
|
|
34
34
|
const ExplorerPanel = ({ readOnlyStudio }) => {
|
|
35
35
|
const [panel, setPanel] = (0, react_1.useState)(() => getSelectedPanel());
|
|
36
36
|
const onCompositionsSelected = (0, react_1.useCallback)(() => {
|
|
@@ -41,7 +41,7 @@ const ExplorerPanel = ({ readOnlyStudio }) => {
|
|
|
41
41
|
setPanel('assets');
|
|
42
42
|
persistSelectedOptionsSidebarPanel('assets');
|
|
43
43
|
}, []);
|
|
44
|
-
(0, react_1.useImperativeHandle)(
|
|
44
|
+
(0, react_1.useImperativeHandle)(ExplorerPanelRef_1.explorerSidebarTabs, () => {
|
|
45
45
|
return {
|
|
46
46
|
selectAssetsPanel: () => {
|
|
47
47
|
setPanel('assets');
|
|
@@ -53,7 +53,11 @@ const ExplorerPanel = ({ readOnlyStudio }) => {
|
|
|
53
53
|
},
|
|
54
54
|
};
|
|
55
55
|
}, []);
|
|
56
|
-
|
|
56
|
+
const onPointerDown = (0, react_1.useCallback)((e) => {
|
|
57
|
+
// Prevent deselection of currently selected items
|
|
58
|
+
e.stopPropagation();
|
|
59
|
+
}, []);
|
|
60
|
+
return (jsx_runtime_1.jsx(CompSelectorRef_1.CompSelectorRef, { children: jsx_runtime_1.jsxs("div", { style: container, className: "css-reset", onPointerDown: onPointerDown, children: [
|
|
57
61
|
jsx_runtime_1.jsx("div", { style: tabsContainer, children: jsx_runtime_1.jsxs(Tabs_1.Tabs, { children: [
|
|
58
62
|
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" })
|
|
59
63
|
] }) }), panel === 'compositions' ? (jsx_runtime_1.jsx(CompositionSelector_1.CompositionSelector, {})) : (jsx_runtime_1.jsx(AssetSelector_1.AssetSelector, { readOnlyStudio: readOnlyStudio }))] }) }));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { AssetMetadata } from '../helpers/get-asset-metadata';
|
|
3
|
-
import type { AssetFileType } from '
|
|
3
|
+
import type { AssetFileType } from '../helpers/get-preview-file-type';
|
|
4
4
|
export declare const FilePreview: React.FC<{
|
|
5
5
|
readonly src: string;
|
|
6
6
|
readonly fileType: AssetFileType;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
-
export declare const useSelectAsset: () => (asset: string) => void;
|
|
3
2
|
export declare const useSelectComposition: () => (c: import("remotion").AnyComposition, push: boolean) => void;
|
|
4
3
|
export declare const InitialCompositionLoader: React.FC;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.InitialCompositionLoader = exports.useSelectComposition =
|
|
3
|
+
exports.InitialCompositionLoader = exports.useSelectComposition = void 0;
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
const remotion_1 = require("remotion");
|
|
6
6
|
const create_folder_tree_1 = require("../helpers/create-folder-tree");
|
|
@@ -9,32 +9,10 @@ const persist_open_folders_1 = require("../helpers/persist-open-folders");
|
|
|
9
9
|
const url_state_1 = require("../helpers/url-state");
|
|
10
10
|
const folders_1 = require("../state/folders");
|
|
11
11
|
const sidebar_1 = require("../state/sidebar");
|
|
12
|
-
const
|
|
12
|
+
const ExplorerPanelRef_1 = require("./ExplorerPanelRef");
|
|
13
13
|
const load_canvas_content_from_url_1 = require("./load-canvas-content-from-url");
|
|
14
|
+
const use_select_asset_1 = require("./use-select-asset");
|
|
14
15
|
const use_static_files_1 = require("./use-static-files");
|
|
15
|
-
const useSelectAsset = () => {
|
|
16
|
-
const { setCanvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionSetters);
|
|
17
|
-
const { setAssetFoldersExpanded } = (0, react_1.useContext)(folders_1.FolderContext);
|
|
18
|
-
return (0, react_1.useCallback)((asset) => {
|
|
19
|
-
var _a;
|
|
20
|
-
setCanvasContent({ type: 'asset', asset });
|
|
21
|
-
(_a = ExplorerPanel_1.explorerSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectAssetsPanel();
|
|
22
|
-
setAssetFoldersExpanded((ex) => {
|
|
23
|
-
const split = asset.split('/');
|
|
24
|
-
const keysToExpand = split.map((_, i) => {
|
|
25
|
-
return split.slice(0, i).join('/');
|
|
26
|
-
});
|
|
27
|
-
const newState = {
|
|
28
|
-
...ex,
|
|
29
|
-
};
|
|
30
|
-
for (const key of keysToExpand) {
|
|
31
|
-
newState[key] = true;
|
|
32
|
-
}
|
|
33
|
-
return newState;
|
|
34
|
-
});
|
|
35
|
-
}, [setAssetFoldersExpanded, setCanvasContent]);
|
|
36
|
-
};
|
|
37
|
-
exports.useSelectAsset = useSelectAsset;
|
|
38
16
|
const useSelectComposition = () => {
|
|
39
17
|
const { setCompositionFoldersExpanded } = (0, react_1.useContext)(folders_1.FolderContext);
|
|
40
18
|
const { setCanvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionSetters);
|
|
@@ -45,7 +23,7 @@ const useSelectComposition = () => {
|
|
|
45
23
|
if (push) {
|
|
46
24
|
(0, url_state_1.pushUrl)(`/${c.id}`);
|
|
47
25
|
}
|
|
48
|
-
(_a =
|
|
26
|
+
(_a = ExplorerPanelRef_1.explorerSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectCompositionPanel();
|
|
49
27
|
setCanvasContent({ type: 'composition', compositionId: c.id });
|
|
50
28
|
const { folderName, parentFolderName } = c;
|
|
51
29
|
if (folderName !== null) {
|
|
@@ -76,7 +54,7 @@ const InitialCompositionLoader = () => {
|
|
|
76
54
|
const { compositions, canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
77
55
|
const { setCanvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionSetters);
|
|
78
56
|
const selectComposition = (0, exports.useSelectComposition)();
|
|
79
|
-
const selectAsset = (0,
|
|
57
|
+
const selectAsset = (0, use_select_asset_1.useSelectAsset)();
|
|
80
58
|
const staticFiles = (0, use_static_files_1.useStaticFiles)();
|
|
81
59
|
(0, react_1.useEffect)(() => {
|
|
82
60
|
const canvasContentFromUrl = (0, load_canvas_content_from_url_1.deriveCanvasContentFromUrl)();
|
|
@@ -61,6 +61,8 @@ const MenuItem = ({ label: itemName, selected, id, onItemSelected, onItemHovered
|
|
|
61
61
|
setHovered(false);
|
|
62
62
|
}, []);
|
|
63
63
|
const onPointerDown = (0, react_1.useCallback)((e) => {
|
|
64
|
+
// Prevent deselection of currently selected items
|
|
65
|
+
e.stopPropagation();
|
|
64
66
|
if (e.button !== 0) {
|
|
65
67
|
return;
|
|
66
68
|
}
|
|
@@ -73,6 +75,10 @@ const MenuItem = ({ label: itemName, selected, id, onItemSelected, onItemHovered
|
|
|
73
75
|
once: true,
|
|
74
76
|
});
|
|
75
77
|
}, [id, onItemQuit, onItemSelected]);
|
|
78
|
+
const onMenuPointerDown = (0, react_1.useCallback)((e) => {
|
|
79
|
+
// Prevent deselection of currently selected items
|
|
80
|
+
e.stopPropagation();
|
|
81
|
+
}, []);
|
|
76
82
|
const onClick = (0, react_1.useCallback)((e) => {
|
|
77
83
|
e.stopPropagation();
|
|
78
84
|
const isKeyboardInitiated = e.detail === 0;
|
|
@@ -92,7 +98,7 @@ const MenuItem = ({ label: itemName, selected, id, onItemSelected, onItemHovered
|
|
|
92
98
|
}, [size]);
|
|
93
99
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
94
100
|
jsx_runtime_1.jsx("button", { ref: ref, role: "button", tabIndex: tabIndex, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, onPointerDown: onPointerDown, onClick: onClick, style: containerStyle, type: "button", className: is_menu_item_1.MENU_INITIATOR_CLASSNAME, children: itemName }), portalStyle
|
|
95
|
-
? react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { className: "css-reset", style: outerStyle, children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onEscape: onItemQuit, onOutsideClick: onItemQuit, children: jsx_runtime_1.jsx("div", { style: portalStyle, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: onPreviousMenu, onPreviousMenu: onNextMenu, values: menu.items, onHide: onItemQuit, leaveLeftSpace: menu.leaveLeftPadding, preselectIndex: false, topItemCanBeUnselected: true, fixedHeight: null }) }) }) }), (0, portals_1.getPortal)(currentZIndex))
|
|
101
|
+
? react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { className: "css-reset", style: outerStyle, children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onEscape: onItemQuit, onOutsideClick: onItemQuit, children: jsx_runtime_1.jsx("div", { style: portalStyle, onPointerDown: onMenuPointerDown, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: onPreviousMenu, onPreviousMenu: onNextMenu, values: menu.items, onHide: onItemQuit, leaveLeftSpace: menu.leaveLeftPadding, preselectIndex: false, topItemCanBeUnselected: true, fixedHeight: null }) }) }) }), (0, portals_1.getPortal)(currentZIndex))
|
|
96
102
|
: null] }));
|
|
97
103
|
};
|
|
98
104
|
exports.MenuItem = MenuItem;
|
|
@@ -18,7 +18,11 @@ const SubMenuComponent = ({ portalStyle, subMenuActivated, subMenu, onQuitFullMe
|
|
|
18
18
|
onQuitFullMenu();
|
|
19
19
|
}
|
|
20
20
|
}, [mobileLayout, onQuitFullMenu, onQuitSubMenu]);
|
|
21
|
-
|
|
21
|
+
const onPointerDown = (0, react_1.useCallback)((e) => {
|
|
22
|
+
// Prevent deselection of currently selected items
|
|
23
|
+
e.stopPropagation();
|
|
24
|
+
}, []);
|
|
25
|
+
return (jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onEscape: onQuitFullMenu, onOutsideClick: onOutsideClick, children: jsx_runtime_1.jsx("div", { style: portalStyle, className: "css-reset", onPointerDown: onPointerDown, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: noop_1.noop, onPreviousMenu: onQuitSubMenu, values: subMenu.items, onHide: onQuitFullMenu, leaveLeftSpace: subMenu.leaveLeftSpace, preselectIndex: subMenuActivated === 'without-mouse' &&
|
|
22
26
|
typeof subMenu.preselectIndex === 'number'
|
|
23
27
|
? subMenu.preselectIndex
|
|
24
28
|
: false, topItemCanBeUnselected: false, fixedHeight: null }) }) }));
|
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getPortal = exports.portals = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
const portalIds = [
|
|
5
|
+
'menuportal-0',
|
|
6
|
+
'menuportal-1',
|
|
7
|
+
'menuportal-2',
|
|
8
|
+
'menuportal-3',
|
|
9
|
+
'menuportal-4',
|
|
10
|
+
'menuportal-5',
|
|
11
11
|
];
|
|
12
|
+
exports.portals =
|
|
13
|
+
// This module is imported by Bun tests that run without a DOM.
|
|
14
|
+
typeof document === 'undefined'
|
|
15
|
+
? []
|
|
16
|
+
: portalIds.map((id) => document.getElementById(id));
|
|
12
17
|
const getPortal = (i) => {
|
|
13
|
-
|
|
18
|
+
const portal = exports.portals[i];
|
|
19
|
+
if (!portal) {
|
|
20
|
+
throw new Error(`Expected menu portal ${i} to exist`);
|
|
21
|
+
}
|
|
22
|
+
return portal;
|
|
14
23
|
};
|
|
15
24
|
exports.getPortal = getPortal;
|
|
@@ -90,7 +90,11 @@ const MenuToolbar = ({ readOnlyStudio }) => {
|
|
|
90
90
|
const onItemQuit = (0, react_1.useCallback)(() => {
|
|
91
91
|
setSelected(null);
|
|
92
92
|
}, [setSelected]);
|
|
93
|
-
|
|
93
|
+
const onPointerDown = (0, react_1.useCallback)((e) => {
|
|
94
|
+
// Prevent deselection of currently selected items
|
|
95
|
+
e.stopPropagation();
|
|
96
|
+
}, []);
|
|
97
|
+
return (jsx_runtime_1.jsxs(layout_1.Row, { align: "center", className: "css-reset", style: row, onPointerDown: onPointerDown, children: [
|
|
94
98
|
jsx_runtime_1.jsxs("div", { style: fixedWidthLeft, children: [structure.map((s) => {
|
|
95
99
|
return (jsx_runtime_1.jsx(MenuItem_1.MenuItem, { selected: selected === s.id, onItemSelected: itemClicked, onItemHovered: itemHovered, id: s.id, label: s.label, onItemQuit: onItemQuit, menu: s, onPreviousMenu: onPreviousMenu, onNextMenu: onNextMenu, leaveLeftPadding: s.leaveLeftPadding }, s.id));
|
|
96
100
|
}), readOnlyStudio ? null : jsx_runtime_1.jsx(UpdateCheck_1.UpdateCheck, {})] }), jsx_runtime_1.jsx("div", { style: flex }), jsx_runtime_1.jsx(MenuBuildIndicator_1.MenuBuildIndicator, {}), jsx_runtime_1.jsx("div", { style: flex }), jsx_runtime_1.jsxs("div", { style: fixedWidthRight, children: [readOnlyStudio ? null : jsx_runtime_1.jsx(UndoRedoButtons_1.UndoRedoButtons, {}), jsx_runtime_1.jsx(SidebarCollapserControls_1.SidebarCollapserControls, {})
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ModalContainer = exports.getMaxModalHeight = exports.getMaxModalWidth = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
5
6
|
const colors_1 = require("../helpers/colors");
|
|
6
7
|
const z_index_1 = require("../state/z-index");
|
|
7
8
|
const padding = 20;
|
|
@@ -29,6 +30,10 @@ const panel = {
|
|
|
29
30
|
margin: 'auto',
|
|
30
31
|
};
|
|
31
32
|
const ModalContainer = ({ children, onEscape, onOutsideClick, noZIndex }) => {
|
|
32
|
-
|
|
33
|
+
const onPointerDown = (0, react_1.useCallback)((e) => {
|
|
34
|
+
// Prevent deselection of currently selected items
|
|
35
|
+
e.stopPropagation();
|
|
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, children: jsx_runtime_1.jsx("div", { style: panel, children: children }) }) }));
|
|
33
38
|
};
|
|
34
39
|
exports.ModalContainer = ModalContainer;
|
|
@@ -9,25 +9,29 @@ const react_1 = require("react");
|
|
|
9
9
|
const client_id_1 = require("../helpers/client-id");
|
|
10
10
|
const modals_1 = require("../state/modals");
|
|
11
11
|
const AskAiModal_1 = require("./AskAiModal");
|
|
12
|
+
const ConfirmationDialog_1 = require("./ConfirmationDialog");
|
|
12
13
|
const InstallPackage_1 = require("./InstallPackage");
|
|
13
14
|
const DeleteComposition_1 = require("./NewComposition/DeleteComposition");
|
|
14
15
|
const DeleteFolder_1 = require("./NewComposition/DeleteFolder");
|
|
16
|
+
const DeleteStaticFile_1 = require("./NewComposition/DeleteStaticFile");
|
|
15
17
|
const DuplicateComposition_1 = require("./NewComposition/DuplicateComposition");
|
|
16
18
|
const RenameComposition_1 = require("./NewComposition/RenameComposition");
|
|
17
19
|
const RenameFolder_1 = require("./NewComposition/RenameFolder");
|
|
20
|
+
const RenameStaticFile_1 = require("./NewComposition/RenameStaticFile");
|
|
18
21
|
const OverrideInputProps_1 = require("./OverrideInputProps");
|
|
19
22
|
const QuickSwitcher_1 = __importDefault(require("./QuickSwitcher/QuickSwitcher"));
|
|
20
23
|
const RenderStatusModal_1 = require("./RenderModal/RenderStatusModal");
|
|
21
24
|
const ServerRenderModal_1 = require("./RenderModal/ServerRenderModal");
|
|
22
25
|
const WebRenderModal_1 = require("./RenderModal/WebRenderModal");
|
|
26
|
+
const KeyframeSettingsModal_1 = require("./Timeline/KeyframeSettingsModal");
|
|
23
27
|
const UpdateModal_1 = require("./UpdateModal/UpdateModal");
|
|
24
28
|
const Modals = ({ readOnlyStudio }) => {
|
|
25
29
|
var _a;
|
|
26
30
|
const { selectedModal: modalContextType } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
27
31
|
const canRender = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).previewServerState.type ===
|
|
28
32
|
'connected';
|
|
29
|
-
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [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 === 'input-props-override' && (jsx_runtime_1.jsx(OverrideInputProps_1.OverrideInputPropsModal, {})), modalContextType && modalContextType.type === 'web-render' && (jsx_runtime_1.jsx(WebRenderModal_1.WebRenderModalWithLoader, { ...modalContextType })), modalContextType &&
|
|
33
|
+
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [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 === 'delete-static-file' && (jsx_runtime_1.jsx(DeleteStaticFile_1.DeleteStaticFileModal, { relativePath: modalContextType.relativePath })), 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 === 'keyframe-settings' && (jsx_runtime_1.jsx(KeyframeSettingsModal_1.KeyframeSettingsModal, { state: modalContextType })), modalContextType && modalContextType.type === 'web-render' && (jsx_runtime_1.jsx(WebRenderModal_1.WebRenderModalWithLoader, { ...modalContextType })), modalContextType &&
|
|
30
34
|
modalContextType.type === 'server-render' &&
|
|
31
|
-
(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 })), process.env.ASK_AI_ENABLED && jsx_runtime_1.jsx(AskAiModal_1.AskAiModal, {})] }));
|
|
35
|
+
(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 })), modalContextType && modalContextType.type === 'confirmation-dialog' && (jsx_runtime_1.jsx(ConfirmationDialog_1.ConfirmationDialog, { state: modalContextType })), process.env.ASK_AI_ENABLED && jsx_runtime_1.jsx(AskAiModal_1.AskAiModal, {})] }));
|
|
32
36
|
};
|
|
33
37
|
exports.Modals = Modals;
|
|
@@ -55,6 +55,10 @@ const Combobox = ({ values, selectedId, style: customStyle, title, small = false
|
|
|
55
55
|
const onHide = (0, react_1.useCallback)(() => {
|
|
56
56
|
setOpened(false);
|
|
57
57
|
}, []);
|
|
58
|
+
const onOverlayPointerDown = (0, react_1.useCallback)((e) => {
|
|
59
|
+
// Prevent deselection of currently selected items
|
|
60
|
+
e.stopPropagation();
|
|
61
|
+
}, []);
|
|
58
62
|
(0, react_1.useEffect)(() => {
|
|
59
63
|
const { current } = ref;
|
|
60
64
|
if (!current) {
|
|
@@ -62,7 +66,9 @@ const Combobox = ({ values, selectedId, style: customStyle, title, small = false
|
|
|
62
66
|
}
|
|
63
67
|
const onMouseEnter = () => setIsHovered(true);
|
|
64
68
|
const onMouseLeave = () => setIsHovered(false);
|
|
65
|
-
const onPointerDown = () => {
|
|
69
|
+
const onPointerDown = (e) => {
|
|
70
|
+
// Prevent deselection of currently selected items
|
|
71
|
+
e.stopPropagation();
|
|
66
72
|
return setOpened((o) => {
|
|
67
73
|
if (!o) {
|
|
68
74
|
refresh === null || refresh === void 0 ? void 0 : refresh();
|
|
@@ -176,7 +182,7 @@ const Combobox = ({ values, selectedId, style: customStyle, title, small = false
|
|
|
176
182
|
" ",
|
|
177
183
|
jsx_runtime_1.jsx(caret_1.CaretDown, { small: small })
|
|
178
184
|
] }), portalStyle
|
|
179
|
-
? 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: onHide, onEscape: onHide, children: jsx_runtime_1.jsx("div", { style: portalStyle, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: noop_1.noop, onPreviousMenu: noop_1.noop, values: values, onHide: onHide, leaveLeftSpace: true, preselectIndex: values.findIndex((v) => selected && v.id === selected.id), topItemCanBeUnselected: false, fixedHeight: derivedMaxHeight }) }) }) }) }), (0, portals_1.getPortal)(currentZIndex))
|
|
185
|
+
? react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { style: styles_1.fullScreenOverlay, onPointerDown: onOverlayPointerDown, children: jsx_runtime_1.jsx("div", { style: styles_1.outerPortal, className: "css-reset", children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onOutsideClick: onHide, onEscape: onHide, children: jsx_runtime_1.jsx("div", { style: portalStyle, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: noop_1.noop, onPreviousMenu: noop_1.noop, values: values, onHide: onHide, leaveLeftSpace: true, preselectIndex: values.findIndex((v) => selected && v.id === selected.id), topItemCanBeUnselected: false, fixedHeight: derivedMaxHeight }) }) }) }) }), (0, portals_1.getPortal)(currentZIndex))
|
|
180
186
|
: null] }));
|
|
181
187
|
};
|
|
182
188
|
exports.Combobox = Combobox;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeleteStaticFileModal = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const delete_static_file_1 = require("../../api/delete-static-file");
|
|
7
|
+
const modals_1 = require("../../state/modals");
|
|
8
|
+
const Button_1 = require("../Button");
|
|
9
|
+
const layout_1 = require("../layout");
|
|
10
|
+
const styles_1 = require("../Menu/styles");
|
|
11
|
+
const ModalFooter_1 = require("../ModalFooter");
|
|
12
|
+
const ModalHeader_1 = require("../ModalHeader");
|
|
13
|
+
const NotificationCenter_1 = require("../Notifications/NotificationCenter");
|
|
14
|
+
const DismissableModal_1 = require("./DismissableModal");
|
|
15
|
+
const content = {
|
|
16
|
+
padding: 16,
|
|
17
|
+
fontSize: 14,
|
|
18
|
+
flex: 1,
|
|
19
|
+
minWidth: 500,
|
|
20
|
+
};
|
|
21
|
+
const DeleteStaticFileModal = ({ relativePath }) => {
|
|
22
|
+
const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
23
|
+
const [submitting, setSubmitting] = (0, react_1.useState)(false);
|
|
24
|
+
const onDelete = (0, react_1.useCallback)(() => {
|
|
25
|
+
setSubmitting(true);
|
|
26
|
+
const notification = (0, NotificationCenter_1.showNotification)(`Deleting ${relativePath}...`, null);
|
|
27
|
+
(0, delete_static_file_1.deleteStaticFile)(relativePath)
|
|
28
|
+
.then(() => {
|
|
29
|
+
setSelectedModal(null);
|
|
30
|
+
notification.replaceContent(`Deleted ${relativePath}`, 2000);
|
|
31
|
+
})
|
|
32
|
+
.catch((err) => {
|
|
33
|
+
setSubmitting(false);
|
|
34
|
+
notification.replaceContent(`Could not delete ${relativePath}: ${err.message}`, 3000);
|
|
35
|
+
});
|
|
36
|
+
}, [relativePath, setSelectedModal]);
|
|
37
|
+
return (jsx_runtime_1.jsxs(DismissableModal_1.DismissableModal, { children: [
|
|
38
|
+
jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: 'Delete asset' }), jsx_runtime_1.jsxs("div", { style: content, children: ["Do you want to delete the asset", ' ', jsx_runtime_1.jsx("code", { style: styles_1.inlineCodeSnippet, children: relativePath }),
|
|
39
|
+
" from your public folder?"] }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsxs(layout_1.Row, { align: "center", justify: "flex-end", children: [
|
|
40
|
+
jsx_runtime_1.jsx(Button_1.Button, { onClick: () => setSelectedModal(null), children: "Cancel" }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx(Button_1.Button, { onClick: onDelete, disabled: submitting, children: "Delete" })
|
|
41
|
+
] }) })
|
|
42
|
+
] }));
|
|
43
|
+
};
|
|
44
|
+
exports.DeleteStaticFileModal = DeleteStaticFileModal;
|