@remotion/studio 4.0.471 → 4.0.473
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/rename-static-file.d.ts +6 -0
- package/dist/api/rename-static-file.js +18 -0
- package/dist/components/AssetSelector.js +55 -5
- package/dist/components/AssetSelectorItem.js +153 -27
- package/dist/components/Canvas.js +147 -0
- package/dist/components/CompositionSelectorItem.d.ts +1 -0
- package/dist/components/CompositionSelectorItem.js +12 -4
- package/dist/components/ConfirmationDialog-types.d.ts +8 -0
- package/dist/components/ConfirmationDialog-types.js +2 -0
- package/dist/components/ConfirmationDialog.d.ts +7 -0
- package/dist/components/ConfirmationDialog.js +103 -0
- package/dist/components/ContextMenu.d.ts +9 -1
- package/dist/components/ContextMenu.js +99 -47
- package/dist/components/CurrentAsset.d.ts +1 -0
- package/dist/components/CurrentAsset.js +13 -2
- package/dist/components/Editor.js +14 -6
- package/dist/components/EditorContent.js +15 -2
- package/dist/components/EditorContexts.js +2 -1
- package/dist/components/EditorRuler/Ruler.js +2 -0
- package/dist/components/ExplorerPanel.d.ts +0 -4
- package/dist/components/ExplorerPanel.js +8 -4
- package/dist/components/ExplorerPanelRef.d.ts +4 -0
- package/dist/components/ExplorerPanelRef.js +5 -0
- package/dist/components/FilePreview.d.ts +1 -1
- package/dist/components/InitialCompositionLoader.d.ts +0 -1
- package/dist/components/InitialCompositionLoader.js +5 -27
- package/dist/components/Menu/MenuItem.js +7 -1
- package/dist/components/Menu/SubMenu.js +5 -1
- package/dist/components/Menu/portals.js +17 -8
- package/dist/components/MenuToolbar.js +5 -1
- package/dist/components/ModalContainer.js +6 -1
- package/dist/components/Modals.js +8 -2
- package/dist/components/NewComposition/CodemodFooter.js +2 -2
- package/dist/components/NewComposition/ComboBox.js +8 -2
- package/dist/components/NewComposition/DeleteFolder.d.ts +6 -0
- package/dist/components/NewComposition/DeleteFolder.js +39 -0
- package/dist/components/NewComposition/DeleteStaticFile.d.ts +4 -0
- package/dist/components/NewComposition/DeleteStaticFile.js +44 -0
- package/dist/components/NewComposition/RenameFolder.d.ts +6 -0
- package/dist/components/NewComposition/RenameFolder.js +60 -0
- package/dist/components/NewComposition/RenameStaticFile.d.ts +4 -0
- package/dist/components/NewComposition/RenameStaticFile.js +118 -0
- package/dist/components/OptionsPanel.js +5 -1
- package/dist/components/OutlineToggle.d.ts +2 -0
- package/dist/components/OutlineToggle.js +20 -0
- package/dist/components/Preview.d.ts +0 -2
- package/dist/components/Preview.js +23 -33
- package/dist/components/PreviewToolbar.js +19 -6
- package/dist/components/RenderButton.js +8 -2
- package/dist/components/RenderPreview.js +2 -2
- package/dist/components/SelectedOutlineOverlay.d.ts +105 -4
- package/dist/components/SelectedOutlineOverlay.js +578 -59
- package/dist/components/ShowOutlinesProvider.d.ts +4 -0
- package/dist/components/ShowOutlinesProvider.js +24 -0
- package/dist/components/SizeSelector.js +3 -3
- package/dist/components/Splitter/SplitterContainer.js +9 -0
- package/dist/components/Splitter/SplitterHandle.js +65 -70
- package/dist/components/StaticFilePreview.js +2 -2
- package/dist/components/Timeline/KeyframeSettingsModal.d.ts +15 -0
- package/dist/components/Timeline/KeyframeSettingsModal.js +150 -0
- package/dist/components/Timeline/Timeline.js +50 -15
- package/dist/components/Timeline/TimelineArrayField.d.ts +9 -0
- package/dist/components/Timeline/TimelineArrayField.js +210 -0
- package/dist/components/Timeline/TimelineBooleanField.d.ts +2 -2
- package/dist/components/Timeline/TimelineBooleanField.js +2 -2
- package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +43 -0
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +479 -0
- package/dist/components/Timeline/TimelineColorField.d.ts +2 -2
- package/dist/components/Timeline/TimelineColorField.js +2 -8
- package/dist/components/Timeline/TimelineDeleteKeybindings.js +12 -2
- package/dist/components/Timeline/TimelineEffectItem.js +3 -2
- package/dist/components/Timeline/TimelineEffectPropItem.js +146 -26
- package/dist/components/Timeline/TimelineEnumField.d.ts +2 -2
- package/dist/components/Timeline/TimelineEnumField.js +3 -3
- package/dist/components/Timeline/TimelineKeyframeControls.d.ts +4 -3
- package/dist/components/Timeline/TimelineKeyframeControls.js +41 -37
- package/dist/components/Timeline/TimelineKeyframeDiamond.js +24 -21
- package/dist/components/Timeline/TimelineKeyframeDiamondIcon.d.ts +6 -0
- package/dist/components/Timeline/TimelineKeyframeDiamondIcon.js +14 -0
- package/dist/components/Timeline/TimelineKeyframeDragState.d.ts +17 -0
- package/dist/components/Timeline/TimelineKeyframeDragState.js +39 -0
- package/dist/components/Timeline/TimelineKeyframedValue.d.ts +7 -2
- package/dist/components/Timeline/TimelineKeyframedValue.js +22 -8
- package/dist/components/Timeline/TimelineLayerEye.d.ts +1 -0
- package/dist/components/Timeline/TimelineLayerEye.js +8 -3
- package/dist/components/Timeline/TimelineList.js +2 -2
- package/dist/components/Timeline/TimelineMediaInfo.d.ts +0 -13
- package/dist/components/Timeline/TimelineMediaInfo.js +8 -73
- package/dist/components/Timeline/TimelineNumberField.d.ts +2 -2
- package/dist/components/Timeline/TimelineNumberField.js +7 -11
- package/dist/components/Timeline/TimelinePrimitiveFieldValue.d.ts +17 -0
- package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +53 -0
- package/dist/components/Timeline/TimelineRotationField.d.ts +2 -2
- package/dist/components/Timeline/TimelineRotationField.js +41 -24
- package/dist/components/Timeline/TimelineRowChrome.js +8 -7
- package/dist/components/Timeline/TimelineScaleField.d.ts +20 -0
- package/dist/components/Timeline/TimelineScaleField.js +314 -0
- package/dist/components/Timeline/TimelineSchemaField.d.ts +3 -2
- package/dist/components/Timeline/TimelineSchemaField.js +8 -42
- package/dist/components/Timeline/TimelineSelection.js +3 -2
- package/dist/components/Timeline/TimelineSequence.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequence.js +51 -10
- package/dist/components/Timeline/TimelineSequenceFrame.js +1 -0
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequenceItem.js +282 -28
- package/dist/components/Timeline/TimelineSequencePropItem.js +161 -35
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +58 -0
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +525 -0
- package/dist/components/Timeline/TimelineTrack.js +1 -1
- package/dist/components/Timeline/TimelineTranslateField.d.ts +2 -2
- package/dist/components/Timeline/TimelineTranslateField.js +21 -25
- package/dist/components/Timeline/TimelineUvCoordinateField.d.ts +2 -2
- package/dist/components/Timeline/TimelineUvCoordinateField.js +20 -26
- package/dist/components/Timeline/apply-effect-response-to-code-values.d.ts +5 -0
- package/dist/components/Timeline/apply-effect-response-to-code-values.js +19 -0
- package/dist/components/Timeline/call-add-keyframe.js +4 -0
- package/dist/components/Timeline/call-move-keyframe.d.ts +19 -0
- package/dist/components/Timeline/call-move-keyframe.js +71 -0
- package/dist/components/Timeline/call-update-keyframe-settings.d.ts +22 -0
- package/dist/components/Timeline/call-update-keyframe-settings.js +52 -0
- package/dist/components/Timeline/delete-selected-timeline-item.d.ts +7 -4
- package/dist/components/Timeline/delete-selected-timeline-item.js +33 -21
- package/dist/components/Timeline/duplicate-selected-timeline-item.d.ts +4 -2
- package/dist/components/Timeline/duplicate-selected-timeline-item.js +39 -34
- package/dist/components/Timeline/get-bounded-keyframe-drag-delta.d.ts +8 -0
- package/dist/components/Timeline/get-bounded-keyframe-drag-delta.js +12 -0
- package/dist/components/Timeline/get-keyframe-navigation.d.ts +2 -2
- package/dist/components/Timeline/get-keyframe-navigation.js +14 -6
- package/dist/components/Timeline/get-node-keyframes.d.ts +5 -2
- package/dist/components/Timeline/get-node-keyframes.js +38 -5
- package/dist/components/Timeline/get-timeline-keyframes.js +4 -4
- package/dist/components/Timeline/reset-selected-timeline-props.js +22 -8
- package/dist/components/Timeline/save-effect-prop.d.ts +14 -3
- package/dist/components/Timeline/save-effect-prop.js +36 -18
- package/dist/components/Timeline/save-prop-queue.d.ts +2 -1
- package/dist/components/Timeline/save-prop-queue.js +5 -2
- package/dist/components/Timeline/save-sequence-prop.d.ts +2 -7
- package/dist/components/Timeline/save-sequence-prop.js +33 -30
- package/dist/components/Timeline/should-clear-selection-on-pointer-down.d.ts +3 -0
- package/dist/components/Timeline/should-clear-selection-on-pointer-down.js +7 -0
- package/dist/components/Timeline/timeline-asset-link.d.ts +13 -0
- package/dist/components/Timeline/timeline-asset-link.js +37 -0
- package/dist/components/Timeline/timeline-field-utils.d.ts +1 -0
- package/dist/components/Timeline/timeline-field-utils.js +5 -1
- package/dist/components/Timeline/timeline-translate-utils.js +9 -2
- package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +7 -0
- package/dist/components/Timeline/use-timeline-keyframe-drag.d.ts +10 -0
- package/dist/components/Timeline/use-timeline-keyframe-drag.js +378 -0
- package/dist/components/TopPanel.d.ts +1 -1
- package/dist/components/folder-menu-items.d.ts +12 -0
- package/dist/components/folder-menu-items.js +147 -0
- package/dist/components/import-assets.d.ts +22 -0
- package/dist/components/import-assets.js +294 -0
- package/dist/components/load-canvas-content-from-url.d.ts +1 -0
- package/dist/components/load-canvas-content-from-url.js +9 -3
- package/dist/components/use-select-asset.d.ts +1 -0
- package/dist/components/use-select-asset.js +30 -0
- package/dist/error-overlay/error-origin.d.ts +3 -0
- package/dist/error-overlay/error-origin.js +42 -0
- package/dist/error-overlay/react-overlay/listen-to-runtime-errors.js +6 -2
- package/dist/error-overlay/remotion-overlay/ErrorLoader.js +38 -0
- package/dist/error-overlay/remotion-overlay/ShortcutHint.js +1 -1
- package/dist/error-overlay/remotion-overlay/log-studio-error.d.ts +3 -0
- package/dist/error-overlay/remotion-overlay/log-studio-error.js +27 -0
- package/dist/esm/{chunk-z0z9d4r0.js → chunk-q0jkt0zq.js} +23062 -17350
- package/dist/esm/internals.mjs +23062 -17350
- package/dist/esm/previewEntry.mjs +22351 -16615
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/calculate-timeline.js +7 -3
- package/dist/helpers/create-folder-tree.js +1 -0
- package/dist/helpers/get-asset-metadata.js +2 -2
- package/dist/helpers/get-folder-id.d.ts +4 -0
- package/dist/helpers/get-folder-id.js +7 -0
- package/dist/helpers/get-preview-file-type.d.ts +2 -0
- package/dist/helpers/get-preview-file-type.js +33 -0
- package/dist/helpers/get-timeline-sequence-sort-key.d.ts +2 -0
- package/dist/helpers/install-required-package.d.ts +1 -0
- package/dist/helpers/install-required-package.js +39 -0
- package/dist/helpers/remote-asset-drag.d.ts +4 -0
- package/dist/helpers/remote-asset-drag.js +73 -0
- package/dist/helpers/timeline-layout.js +5 -1
- package/dist/helpers/use-asset-drag-events.d.ts +5 -2
- package/dist/helpers/use-asset-drag-events.js +13 -2
- package/dist/helpers/validate-folder-rename.d.ts +6 -0
- package/dist/helpers/validate-folder-rename.js +19 -0
- package/dist/hot-middleware-client/client.js +6 -0
- package/dist/state/editor-outlines.d.ts +8 -0
- package/dist/state/editor-outlines.js +18 -0
- package/dist/state/modals.d.ts +29 -2
- package/dist/state/scale-lock.d.ts +18 -0
- package/dist/state/scale-lock.js +59 -0
- package/package.json +10 -10
|
@@ -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,23 +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");
|
|
15
|
+
const DeleteFolder_1 = require("./NewComposition/DeleteFolder");
|
|
16
|
+
const DeleteStaticFile_1 = require("./NewComposition/DeleteStaticFile");
|
|
14
17
|
const DuplicateComposition_1 = require("./NewComposition/DuplicateComposition");
|
|
15
18
|
const RenameComposition_1 = require("./NewComposition/RenameComposition");
|
|
19
|
+
const RenameFolder_1 = require("./NewComposition/RenameFolder");
|
|
20
|
+
const RenameStaticFile_1 = require("./NewComposition/RenameStaticFile");
|
|
16
21
|
const OverrideInputProps_1 = require("./OverrideInputProps");
|
|
17
22
|
const QuickSwitcher_1 = __importDefault(require("./QuickSwitcher/QuickSwitcher"));
|
|
18
23
|
const RenderStatusModal_1 = require("./RenderModal/RenderStatusModal");
|
|
19
24
|
const ServerRenderModal_1 = require("./RenderModal/ServerRenderModal");
|
|
20
25
|
const WebRenderModal_1 = require("./RenderModal/WebRenderModal");
|
|
26
|
+
const KeyframeSettingsModal_1 = require("./Timeline/KeyframeSettingsModal");
|
|
21
27
|
const UpdateModal_1 = require("./UpdateModal/UpdateModal");
|
|
22
28
|
const Modals = ({ readOnlyStudio }) => {
|
|
23
29
|
var _a;
|
|
24
30
|
const { selectedModal: modalContextType } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
25
31
|
const canRender = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).previewServerState.type ===
|
|
26
32
|
'connected';
|
|
27
|
-
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 === '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 &&
|
|
28
34
|
modalContextType.type === 'server-render' &&
|
|
29
|
-
(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, {})] }));
|
|
30
36
|
};
|
|
31
37
|
exports.Modals = Modals;
|
|
@@ -70,7 +70,7 @@ const CodemodFooter = ({ codemod, stack, valid, loadingNotification, successNoti
|
|
|
70
70
|
if (!stack) {
|
|
71
71
|
setCanApplyCodemod({
|
|
72
72
|
type: 'fail',
|
|
73
|
-
error: 'Could not determine where this
|
|
73
|
+
error: 'Could not determine where this item is defined',
|
|
74
74
|
});
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
@@ -80,7 +80,7 @@ const CodemodFooter = ({ codemod, stack, valid, loadingNotification, successNoti
|
|
|
80
80
|
if (!symbolicatedStack) {
|
|
81
81
|
setCanApplyCodemod({
|
|
82
82
|
type: 'fail',
|
|
83
|
-
error: 'Could not resolve the source location of this
|
|
83
|
+
error: 'Could not resolve the source location of this item',
|
|
84
84
|
});
|
|
85
85
|
return;
|
|
86
86
|
}
|
|
@@ -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,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeleteFolder = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const get_folder_id_1 = require("../../helpers/get-folder-id");
|
|
7
|
+
const styles_1 = require("../Menu/styles");
|
|
8
|
+
const ModalFooter_1 = require("../ModalFooter");
|
|
9
|
+
const ModalHeader_1 = require("../ModalHeader");
|
|
10
|
+
const CodemodFooter_1 = require("./CodemodFooter");
|
|
11
|
+
const DismissableModal_1 = require("./DismissableModal");
|
|
12
|
+
const content = {
|
|
13
|
+
padding: 16,
|
|
14
|
+
fontSize: 14,
|
|
15
|
+
flex: 1,
|
|
16
|
+
minWidth: 500,
|
|
17
|
+
};
|
|
18
|
+
const DeleteFolder = ({ folderName, parentName, stack }) => {
|
|
19
|
+
const codemod = (0, react_1.useMemo)(() => {
|
|
20
|
+
return {
|
|
21
|
+
type: 'delete-folder',
|
|
22
|
+
folderName,
|
|
23
|
+
parentName,
|
|
24
|
+
};
|
|
25
|
+
}, [folderName, parentName]);
|
|
26
|
+
const onSubmit = (0, react_1.useCallback)((e) => {
|
|
27
|
+
e.preventDefault();
|
|
28
|
+
}, []);
|
|
29
|
+
const folderId = (0, get_folder_id_1.getFolderId)({ folderName, parentName });
|
|
30
|
+
return (jsx_runtime_1.jsxs(DismissableModal_1.DismissableModal, { children: [
|
|
31
|
+
jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: 'Delete folder' }), jsx_runtime_1.jsxs("form", { onSubmit: onSubmit, children: [
|
|
32
|
+
jsx_runtime_1.jsxs("div", { style: content, children: ["Do you want to delete the", ' ', jsx_runtime_1.jsx("code", { style: styles_1.inlineCodeSnippet, children: "Folder" }),
|
|
33
|
+
" with ID ", '"', folderId, '"', "?",
|
|
34
|
+
jsx_runtime_1.jsx("br", {}),
|
|
35
|
+
"The compositions and nested folders inside it will stay in your code."] }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsx(CodemodFooter_1.CodemodFooter, { errorNotification: `Could not delete folder`, loadingNotification: 'Deleting folder', successNotification: `Deleted folder ${folderId}`, genericSubmitLabel: `Delete`, submitLabel: ({ relativeRootPath }) => `Delete from ${relativeRootPath}`, codemod: codemod, stack: stack, valid: true, onSuccess: null }) })
|
|
36
|
+
] })
|
|
37
|
+
] }));
|
|
38
|
+
};
|
|
39
|
+
exports.DeleteFolder = DeleteFolder;
|
|
@@ -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;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RenameFolder = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const remotion_1 = require("remotion");
|
|
7
|
+
const get_folder_id_1 = require("../../helpers/get-folder-id");
|
|
8
|
+
const validate_folder_rename_1 = require("../../helpers/validate-folder-rename");
|
|
9
|
+
const layout_1 = require("../layout");
|
|
10
|
+
const ModalFooter_1 = require("../ModalFooter");
|
|
11
|
+
const ModalHeader_1 = require("../ModalHeader");
|
|
12
|
+
const layout_2 = require("../RenderModal/layout");
|
|
13
|
+
const CodemodFooter_1 = require("./CodemodFooter");
|
|
14
|
+
const DismissableModal_1 = require("./DismissableModal");
|
|
15
|
+
const RemInput_1 = require("./RemInput");
|
|
16
|
+
const ValidationMessage_1 = require("./ValidationMessage");
|
|
17
|
+
const content = {
|
|
18
|
+
padding: 12,
|
|
19
|
+
paddingRight: 12,
|
|
20
|
+
flex: 1,
|
|
21
|
+
fontSize: 13,
|
|
22
|
+
minWidth: 500,
|
|
23
|
+
};
|
|
24
|
+
const RenameFolder = ({ folderName, parentName, stack }) => {
|
|
25
|
+
const { folders } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
26
|
+
const [newName, setName] = (0, react_1.useState)(folderName);
|
|
27
|
+
const onNameChange = (0, react_1.useCallback)((e) => {
|
|
28
|
+
setName(e.target.value);
|
|
29
|
+
}, []);
|
|
30
|
+
const folderNameErrMessage = (0, validate_folder_rename_1.validateFolderRename)({
|
|
31
|
+
folders,
|
|
32
|
+
newName,
|
|
33
|
+
originalName: folderName,
|
|
34
|
+
parentName,
|
|
35
|
+
});
|
|
36
|
+
const valid = folderNameErrMessage === null && folderName !== newName;
|
|
37
|
+
const codemod = (0, react_1.useMemo)(() => {
|
|
38
|
+
return {
|
|
39
|
+
type: 'rename-folder',
|
|
40
|
+
folderName,
|
|
41
|
+
parentName,
|
|
42
|
+
newName,
|
|
43
|
+
};
|
|
44
|
+
}, [folderName, newName, parentName]);
|
|
45
|
+
const onSubmit = (0, react_1.useCallback)((e) => {
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
}, []);
|
|
48
|
+
const folderId = (0, get_folder_id_1.getFolderId)({ folderName, parentName });
|
|
49
|
+
return (jsx_runtime_1.jsxs(DismissableModal_1.DismissableModal, { children: [
|
|
50
|
+
jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: `Rename ${folderId}` }), jsx_runtime_1.jsxs("form", { onSubmit: onSubmit, children: [
|
|
51
|
+
jsx_runtime_1.jsx("div", { style: content, children: jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
|
|
52
|
+
jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Name" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsxs("div", { children: [
|
|
53
|
+
jsx_runtime_1.jsx(RemInput_1.RemotionInput, { value: newName, onChange: onNameChange, type: "text", autoFocus: true, placeholder: "Folder name", status: "ok", rightAlign: true }), folderNameErrMessage ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
54
|
+
jsx_runtime_1.jsx(layout_1.Spacing, { y: 1, block: true }), jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { align: "flex-start", message: folderNameErrMessage, type: "error" })
|
|
55
|
+
] })) : null] }) })
|
|
56
|
+
] }) }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsx(CodemodFooter_1.CodemodFooter, { loadingNotification: 'Renaming folder...', errorNotification: 'Could not rename folder', successNotification: `Renamed folder to ${newName}`, genericSubmitLabel: 'Rename', submitLabel: ({ relativeRootPath }) => `Modify ${relativeRootPath}`, codemod: codemod, stack: stack, valid: valid, onSuccess: null }) })
|
|
57
|
+
] })
|
|
58
|
+
] }));
|
|
59
|
+
};
|
|
60
|
+
exports.RenameFolder = RenameFolder;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RenameStaticFileModal = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const remotion_1 = require("remotion");
|
|
7
|
+
const rename_static_file_1 = require("../../api/rename-static-file");
|
|
8
|
+
const url_state_1 = require("../../helpers/url-state");
|
|
9
|
+
const modals_1 = require("../../state/modals");
|
|
10
|
+
const Button_1 = require("../Button");
|
|
11
|
+
const layout_1 = require("../layout");
|
|
12
|
+
const ModalFooter_1 = require("../ModalFooter");
|
|
13
|
+
const ModalHeader_1 = require("../ModalHeader");
|
|
14
|
+
const NotificationCenter_1 = require("../Notifications/NotificationCenter");
|
|
15
|
+
const layout_2 = require("../RenderModal/layout");
|
|
16
|
+
const use_static_files_1 = require("../use-static-files");
|
|
17
|
+
const DismissableModal_1 = require("./DismissableModal");
|
|
18
|
+
const RemInput_1 = require("./RemInput");
|
|
19
|
+
const ValidationMessage_1 = require("./ValidationMessage");
|
|
20
|
+
const content = {
|
|
21
|
+
padding: 12,
|
|
22
|
+
paddingRight: 12,
|
|
23
|
+
flex: 1,
|
|
24
|
+
fontSize: 13,
|
|
25
|
+
minWidth: 500,
|
|
26
|
+
};
|
|
27
|
+
const getParent = (relativePath) => {
|
|
28
|
+
const slashIndex = relativePath.lastIndexOf('/');
|
|
29
|
+
return slashIndex === -1 ? '' : relativePath.slice(0, slashIndex);
|
|
30
|
+
};
|
|
31
|
+
const getBaseName = (relativePath) => {
|
|
32
|
+
const slashIndex = relativePath.lastIndexOf('/');
|
|
33
|
+
return slashIndex === -1 ? relativePath : relativePath.slice(slashIndex + 1);
|
|
34
|
+
};
|
|
35
|
+
const RenameStaticFileModal = ({ relativePath }) => {
|
|
36
|
+
const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
37
|
+
const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
38
|
+
const { setCanvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionSetters);
|
|
39
|
+
const staticFiles = (0, use_static_files_1.useStaticFiles)();
|
|
40
|
+
const [newName, setNewName] = (0, react_1.useState)(() => getBaseName(relativePath));
|
|
41
|
+
const [submitting, setSubmitting] = (0, react_1.useState)(false);
|
|
42
|
+
const parent = (0, react_1.useMemo)(() => getParent(relativePath), [relativePath]);
|
|
43
|
+
const newRelativePath = (0, react_1.useMemo)(() => {
|
|
44
|
+
return [parent, newName].filter(Boolean).join('/');
|
|
45
|
+
}, [newName, parent]);
|
|
46
|
+
const changed = newRelativePath !== relativePath;
|
|
47
|
+
const validationMessage = (0, react_1.useMemo)(() => {
|
|
48
|
+
const trimmedName = newName.trim();
|
|
49
|
+
if (trimmedName.length === 0) {
|
|
50
|
+
return 'Name cannot be empty';
|
|
51
|
+
}
|
|
52
|
+
if (trimmedName !== newName) {
|
|
53
|
+
return 'Name cannot start or end with whitespace';
|
|
54
|
+
}
|
|
55
|
+
if (newName.includes('/') || newName.includes('\\')) {
|
|
56
|
+
return 'Name cannot include slashes';
|
|
57
|
+
}
|
|
58
|
+
const existingFile = staticFiles.find((file) => {
|
|
59
|
+
return file.name === newRelativePath && file.name !== relativePath;
|
|
60
|
+
});
|
|
61
|
+
if (existingFile) {
|
|
62
|
+
return 'An asset with this name already exists';
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}, [newName, newRelativePath, relativePath, staticFiles]);
|
|
66
|
+
const valid = changed && validationMessage === null;
|
|
67
|
+
const onNameChange = (0, react_1.useCallback)((e) => {
|
|
68
|
+
setNewName(e.target.value);
|
|
69
|
+
}, []);
|
|
70
|
+
const onRename = (0, react_1.useCallback)(() => {
|
|
71
|
+
if (!valid) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
setSubmitting(true);
|
|
75
|
+
const notification = (0, NotificationCenter_1.showNotification)(`Renaming ${relativePath}...`, null);
|
|
76
|
+
(0, rename_static_file_1.renameStaticFile)({
|
|
77
|
+
oldRelativePath: relativePath,
|
|
78
|
+
newRelativePath,
|
|
79
|
+
})
|
|
80
|
+
.then(() => {
|
|
81
|
+
setSelectedModal(null);
|
|
82
|
+
if ((canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'asset' &&
|
|
83
|
+
canvasContent.asset === relativePath) {
|
|
84
|
+
setCanvasContent({ type: 'asset', asset: newRelativePath });
|
|
85
|
+
(0, url_state_1.pushUrl)(`/assets/${newRelativePath}`);
|
|
86
|
+
}
|
|
87
|
+
notification.replaceContent(`Renamed to ${newRelativePath}`, 2000);
|
|
88
|
+
})
|
|
89
|
+
.catch((err) => {
|
|
90
|
+
setSubmitting(false);
|
|
91
|
+
notification.replaceContent(`Could not rename ${relativePath}: ${err.message}`, 3000);
|
|
92
|
+
});
|
|
93
|
+
}, [
|
|
94
|
+
canvasContent,
|
|
95
|
+
newRelativePath,
|
|
96
|
+
relativePath,
|
|
97
|
+
setCanvasContent,
|
|
98
|
+
setSelectedModal,
|
|
99
|
+
valid,
|
|
100
|
+
]);
|
|
101
|
+
const onSubmit = (0, react_1.useCallback)((e) => {
|
|
102
|
+
e.preventDefault();
|
|
103
|
+
onRename();
|
|
104
|
+
}, [onRename]);
|
|
105
|
+
return (jsx_runtime_1.jsxs(DismissableModal_1.DismissableModal, { children: [
|
|
106
|
+
jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: `Rename ${relativePath}` }), jsx_runtime_1.jsxs("form", { onSubmit: onSubmit, children: [
|
|
107
|
+
jsx_runtime_1.jsx("div", { style: content, children: jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
|
|
108
|
+
jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Name" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsxs("div", { children: [
|
|
109
|
+
jsx_runtime_1.jsx(RemInput_1.RemotionInput, { value: newName, onChange: onNameChange, type: "text", autoFocus: true, autoComplete: "off", "data-1p-ignore": true, placeholder: "Asset name", status: validationMessage ? 'error' : 'ok', rightAlign: true }), validationMessage ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
110
|
+
jsx_runtime_1.jsx(layout_1.Spacing, { y: 1, block: true }), jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { align: "flex-start", message: validationMessage, type: "error" })
|
|
111
|
+
] })) : null] }) })
|
|
112
|
+
] }) }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsxs(layout_1.Row, { align: "center", justify: "flex-end", children: [
|
|
113
|
+
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: onRename, disabled: !valid || submitting, children: "Rename" })
|
|
114
|
+
] }) })
|
|
115
|
+
] })
|
|
116
|
+
] }));
|
|
117
|
+
};
|
|
118
|
+
exports.RenameStaticFileModal = RenameStaticFileModal;
|
|
@@ -181,7 +181,11 @@ const OptionsPanel = ({ readOnlyStudio }) => {
|
|
|
181
181
|
saveToFile(updater);
|
|
182
182
|
}
|
|
183
183
|
}, [compositionId, compositionDefaultProps, saveToFile, updateProps]);
|
|
184
|
-
|
|
184
|
+
const onPointerDown = (0, react_1.useCallback)((e) => {
|
|
185
|
+
// Prevent deselection of currently selected items
|
|
186
|
+
e.stopPropagation();
|
|
187
|
+
}, []);
|
|
188
|
+
return (jsx_runtime_1.jsxs("div", { style: container, className: "css-reset", onPointerDown: onPointerDown, children: [
|
|
185
189
|
jsx_runtime_1.jsx("div", { style: tabsContainer, children: jsx_runtime_1.jsxs(Tabs_1.Tabs, { children: [visualControlsTabActivated ? (jsx_runtime_1.jsx(Tabs_1.Tab, { selected: panel === 'visual-controls', onClick: onVisualControlsSelected, children: "Controls" })) : null, jsx_runtime_1.jsxs(Tabs_1.Tab, { selected: panel === 'input-props', onClick: onPropsSelected, style: { justifyContent: 'space-between' }, children: ["Props", hasLocalModifications ? (jsx_runtime_1.jsx(SchemaResetButton_1.SchemaResetButton, { onClick: resetToOriginal })) : null] }), renderingAvailable ? (jsx_runtime_1.jsx(RendersTab_1.RendersTab, { onClick: onRendersSelected, selected: panel === 'renders' })) : null] }) }), panel === 'input-props' ? (composition ? (jsx_runtime_1.jsx(DefaultPropsEditor_1.DefaultPropsEditor, { unresolvedComposition: composition, defaultProps: currentDefaultProps, setDefaultProps: setDefaultProps, propsEditType: "default-props" }, composition.id)) : null) : panel === 'visual-controls' && visualControlsTabActivated ? (jsx_runtime_1.jsx(VisualControlsContent_1.VisualControlsContent, {})) : !renderingAvailable ? null : (jsx_runtime_1.jsx(RenderQueue_1.RenderQueue, {}))] }));
|
|
186
190
|
};
|
|
187
191
|
exports.OptionsPanel = OptionsPanel;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OutlineToggle = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const colors_1 = require("../helpers/colors");
|
|
7
|
+
const editor_outlines_1 = require("../state/editor-outlines");
|
|
8
|
+
const ControlButton_1 = require("./ControlButton");
|
|
9
|
+
const OutlineToggle = () => {
|
|
10
|
+
const { editorShowOutlines, setEditorShowOutlines } = (0, react_1.useContext)(editor_outlines_1.EditorShowOutlinesContext);
|
|
11
|
+
const onClick = (0, react_1.useCallback)(() => {
|
|
12
|
+
setEditorShowOutlines((current) => !current);
|
|
13
|
+
}, [setEditorShowOutlines]);
|
|
14
|
+
const color = editorShowOutlines ? colors_1.BLUE : 'white';
|
|
15
|
+
const accessibilityLabel = editorShowOutlines
|
|
16
|
+
? 'Hide outlines'
|
|
17
|
+
: 'Show outlines';
|
|
18
|
+
return (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: accessibilityLabel, "aria-label": accessibilityLabel, onClick: onClick, children: jsx_runtime_1.jsx("svg", { style: { width: 16, height: 16 }, viewBox: "0 0 512 512", fill: color, "aria-hidden": "true", focusable: "false", children: jsx_runtime_1.jsx("path", { d: "M32 119.4C12.9 108.4 0 87.7 0 64 0 28.7 28.7 0 64 0 87.7 0 108.4 12.9 119.4 32l273.1 0c11.1-19.1 31.7-32 55.4-32 35.3 0 64 28.7 64 64 0 23.7-12.9 44.4-32 55.4l0 273.1c19.1 11.1 32 31.7 32 55.4 0 35.3-28.7 64-64 64-23.7 0-44.4-12.9-55.4-32l-273.1 0c-11.1 19.1-31.7 32-55.4 32-35.3 0-64-28.7-64-64 0-23.7 12.9-44.4 32-55.4l0-273.1zm64 0l0 273.1c9.7 5.6 17.8 13.7 23.4 23.4l273.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-273.1c-9.7-5.6-17.8-13.7-23.4-23.4L119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4z" }) }) }));
|
|
19
|
+
};
|
|
20
|
+
exports.OutlineToggle = OutlineToggle;
|
|
@@ -3,8 +3,6 @@ import React from 'react';
|
|
|
3
3
|
import type { CanvasContent } from 'remotion';
|
|
4
4
|
import type { AssetMetadata } from '../helpers/get-asset-metadata';
|
|
5
5
|
import type { Dimensions } from '../helpers/is-current-selected-still';
|
|
6
|
-
export type AssetFileType = 'audio' | 'video' | 'image' | 'json' | 'txt' | 'other';
|
|
7
|
-
export declare const getPreviewFileType: (fileName: string | null) => AssetFileType;
|
|
8
6
|
export declare const VideoPreview: React.FC<{
|
|
9
7
|
readonly canvasSize: Size;
|
|
10
8
|
readonly contentDimensions: Dimensions | 'none' | null;
|