@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
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfirmationDialog = exports.useConfirmationDialog = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const ShortcutHint_1 = require("../error-overlay/remotion-overlay/ShortcutHint");
|
|
7
|
+
const modals_1 = require("../state/modals");
|
|
8
|
+
const Button_1 = require("./Button");
|
|
9
|
+
const layout_1 = require("./layout");
|
|
10
|
+
const ModalButton_1 = require("./ModalButton");
|
|
11
|
+
const ModalContainer_1 = require("./ModalContainer");
|
|
12
|
+
const ModalFooter_1 = require("./ModalFooter");
|
|
13
|
+
const ModalHeader_1 = require("./ModalHeader");
|
|
14
|
+
const content = {
|
|
15
|
+
padding: 16,
|
|
16
|
+
fontSize: 14,
|
|
17
|
+
flex: 1,
|
|
18
|
+
minWidth: 420,
|
|
19
|
+
maxWidth: 560,
|
|
20
|
+
lineHeight: 1.4,
|
|
21
|
+
};
|
|
22
|
+
const useConfirmationDialog = () => {
|
|
23
|
+
const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
24
|
+
return (0, react_1.useCallback)((options) => {
|
|
25
|
+
return new Promise((resolve) => {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
let settled = false;
|
|
28
|
+
const settle = (result) => {
|
|
29
|
+
if (settled) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
settled = true;
|
|
33
|
+
resolve(result);
|
|
34
|
+
};
|
|
35
|
+
setSelectedModal({
|
|
36
|
+
type: 'confirmation-dialog',
|
|
37
|
+
id: String(Math.random()),
|
|
38
|
+
title: options.title,
|
|
39
|
+
message: options.message,
|
|
40
|
+
confirmLabel: (_a = options.confirmLabel) !== null && _a !== void 0 ? _a : 'Continue',
|
|
41
|
+
cancelLabel: (_b = options.cancelLabel) !== null && _b !== void 0 ? _b : 'Cancel',
|
|
42
|
+
onConfirm: () => settle(true),
|
|
43
|
+
onCancel: () => settle(false),
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
}, [setSelectedModal]);
|
|
47
|
+
};
|
|
48
|
+
exports.useConfirmationDialog = useConfirmationDialog;
|
|
49
|
+
const ConfirmationDialog = ({ state }) => {
|
|
50
|
+
const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
51
|
+
const settledRef = (0, react_1.useRef)(false);
|
|
52
|
+
const closeCurrentModal = (0, react_1.useCallback)(() => {
|
|
53
|
+
setSelectedModal((modal) => (modal === null || modal === void 0 ? void 0 : modal.type) === 'confirmation-dialog' && modal.id === state.id
|
|
54
|
+
? null
|
|
55
|
+
: modal);
|
|
56
|
+
}, [setSelectedModal, state.id]);
|
|
57
|
+
const settle = (0, react_1.useCallback)((confirmed) => {
|
|
58
|
+
if (settledRef.current) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
settledRef.current = true;
|
|
62
|
+
closeCurrentModal();
|
|
63
|
+
if (confirmed) {
|
|
64
|
+
state.onConfirm();
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
state.onCancel();
|
|
68
|
+
}
|
|
69
|
+
}, [closeCurrentModal, state]);
|
|
70
|
+
(0, react_1.useEffect)(() => {
|
|
71
|
+
return () => {
|
|
72
|
+
if (settledRef.current) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
settledRef.current = true;
|
|
76
|
+
state.onCancel();
|
|
77
|
+
};
|
|
78
|
+
}, [state]);
|
|
79
|
+
const onCancel = (0, react_1.useCallback)(() => {
|
|
80
|
+
settle(false);
|
|
81
|
+
}, [settle]);
|
|
82
|
+
const onConfirm = (0, react_1.useCallback)(() => {
|
|
83
|
+
settle(true);
|
|
84
|
+
}, [settle]);
|
|
85
|
+
const onSubmit = (0, react_1.useCallback)((e) => {
|
|
86
|
+
e.preventDefault();
|
|
87
|
+
onConfirm();
|
|
88
|
+
}, [onConfirm]);
|
|
89
|
+
const cancelStyle = (0, react_1.useMemo)(() => {
|
|
90
|
+
return {
|
|
91
|
+
minWidth: 90,
|
|
92
|
+
};
|
|
93
|
+
}, []);
|
|
94
|
+
return (jsx_runtime_1.jsxs(ModalContainer_1.ModalContainer, { onOutsideClick: onCancel, onEscape: onCancel, children: [
|
|
95
|
+
jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: state.title, onClose: onCancel }), jsx_runtime_1.jsxs("form", { onSubmit: onSubmit, children: [
|
|
96
|
+
jsx_runtime_1.jsx("div", { style: content, children: state.message }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsxs(layout_1.Row, { align: "center", children: [
|
|
97
|
+
jsx_runtime_1.jsx(layout_1.Flex, {}), jsx_runtime_1.jsx(Button_1.Button, { onClick: onCancel, style: cancelStyle, children: state.cancelLabel }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsxs(ModalButton_1.ModalButton, { onClick: onConfirm, autoFocus: true, children: [state.confirmLabel, jsx_runtime_1.jsx(ShortcutHint_1.ShortcutHint, { keyToPress: "\u21B5", cmdOrCtrl: false })
|
|
98
|
+
] })
|
|
99
|
+
] }) })
|
|
100
|
+
] })
|
|
101
|
+
] }));
|
|
102
|
+
};
|
|
103
|
+
exports.ConfirmationDialog = ConfirmationDialog;
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { ComboboxValue } from './NewComposition/ComboBox';
|
|
3
|
+
type ContextMenuOpenHandler = () => false | void;
|
|
4
|
+
type ContextMenuTargetOpenResult = false | void | readonly ComboboxValue[];
|
|
5
|
+
type ContextMenuTargetOpenHandler = (event: MouseEvent) => ContextMenuTargetOpenResult | Promise<ContextMenuTargetOpenResult>;
|
|
3
6
|
type ContextMenuProps = {
|
|
4
7
|
readonly children: React.ReactNode;
|
|
5
8
|
readonly values: ComboboxValue[];
|
|
6
|
-
readonly onOpen:
|
|
9
|
+
readonly onOpen: ContextMenuOpenHandler | null;
|
|
7
10
|
readonly style?: React.CSSProperties;
|
|
8
11
|
readonly className?: string;
|
|
9
12
|
readonly onPointerDown?: React.PointerEventHandler<HTMLDivElement>;
|
|
10
13
|
};
|
|
11
14
|
export declare const ContextMenu: React.ForwardRefExoticComponent<ContextMenuProps & React.RefAttributes<HTMLDivElement>>;
|
|
15
|
+
export declare const ContextMenuForTarget: React.FC<{
|
|
16
|
+
readonly triggerRef: React.RefObject<HTMLElement | SVGElement | null>;
|
|
17
|
+
readonly values: ComboboxValue[];
|
|
18
|
+
readonly onOpen: ContextMenuTargetOpenHandler | null;
|
|
19
|
+
}>;
|
|
12
20
|
export {};
|
|
@@ -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,58 +47,25 @@ 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
|
-
|
|
51
|
-
const
|
|
52
|
-
const [opened, setOpened] = (0, react_1.useState)({ type: 'not-open' });
|
|
53
|
-
const { currentZIndex } = (0, z_index_1.useZIndex)();
|
|
54
|
-
const setRef = (0, react_1.useCallback)((node) => {
|
|
55
|
-
ref.current = node;
|
|
56
|
-
if (typeof forwardedRef === 'function') {
|
|
57
|
-
forwardedRef(node);
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
if (forwardedRef) {
|
|
61
|
-
forwardedRef.current = node;
|
|
62
|
-
}
|
|
63
|
-
}, [forwardedRef]);
|
|
64
|
-
const size = player_1.PlayerInternals.useElementSize(ref, {
|
|
50
|
+
const ContextMenuPortal = ({ sizeSource, currentZIndex, onHide, opened, values }) => {
|
|
51
|
+
const size = player_1.PlayerInternals.useElementSize(sizeSource, {
|
|
65
52
|
triggerOnWindowResize: true,
|
|
66
53
|
shouldApplyCssTransforms: true,
|
|
67
54
|
});
|
|
68
55
|
const isMobileLayout = (0, mobile_layout_1.useMobileLayout)();
|
|
69
|
-
(0, react_1.useEffect)(() => {
|
|
70
|
-
const { current } = ref;
|
|
71
|
-
if (!current) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const onClick = (e) => {
|
|
75
|
-
e.preventDefault();
|
|
76
|
-
e.stopPropagation();
|
|
77
|
-
onOpen === null || onOpen === void 0 ? void 0 : onOpen();
|
|
78
|
-
setOpened({ type: 'open', left: e.clientX, top: e.clientY });
|
|
79
|
-
return false;
|
|
80
|
-
};
|
|
81
|
-
current.addEventListener('contextmenu', onClick);
|
|
82
|
-
return () => {
|
|
83
|
-
current.removeEventListener('contextmenu', onClick);
|
|
84
|
-
};
|
|
85
|
-
}, [onOpen, size]);
|
|
86
56
|
const spaceToBottom = (0, react_1.useMemo)(() => {
|
|
87
|
-
if (size
|
|
57
|
+
if (size) {
|
|
88
58
|
return size.windowSize.height - opened.top;
|
|
89
59
|
}
|
|
90
60
|
return 0;
|
|
91
|
-
}, [opened, size]);
|
|
61
|
+
}, [opened.top, size]);
|
|
92
62
|
const spaceToTop = (0, react_1.useMemo)(() => {
|
|
93
|
-
if (size
|
|
63
|
+
if (size) {
|
|
94
64
|
return opened.top;
|
|
95
65
|
}
|
|
96
66
|
return 0;
|
|
97
|
-
}, [opened, size]);
|
|
67
|
+
}, [opened.top, size]);
|
|
98
68
|
const portalStyle = (0, react_1.useMemo)(() => {
|
|
99
|
-
if (opened.type === 'not-open') {
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
69
|
if (!size) {
|
|
103
70
|
return;
|
|
104
71
|
}
|
|
@@ -128,17 +95,102 @@ exports.ContextMenu = react_1.default.forwardRef(({ children, values, onOpen, st
|
|
|
128
95
|
right: canOpenOnLeft ? size.windowSize.width - opened.left : 0,
|
|
129
96
|
}),
|
|
130
97
|
};
|
|
131
|
-
}, [
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
98
|
+
}, [
|
|
99
|
+
opened.left,
|
|
100
|
+
opened.top,
|
|
101
|
+
size,
|
|
102
|
+
isMobileLayout,
|
|
103
|
+
spaceToTop,
|
|
104
|
+
spaceToBottom,
|
|
105
|
+
]);
|
|
135
106
|
// Prevent deselection of a selected item
|
|
136
107
|
const onMenuPointerDown = (0, react_1.useCallback)((e) => {
|
|
137
108
|
e.stopPropagation();
|
|
138
109
|
}, []);
|
|
110
|
+
if (!portalStyle) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
return 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, onPointerDown: onMenuPointerDown, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: noop_1.noop, onPreviousMenu: noop_1.noop, values: values, onHide: onHide, leaveLeftSpace: true, preselectIndex: false, topItemCanBeUnselected: false, fixedHeight: null }) }) }) }) }), (0, portals_1.getPortal)(currentZIndex));
|
|
114
|
+
};
|
|
115
|
+
exports.ContextMenu = react_1.default.forwardRef(({ children, values, onOpen, style = undefined, className = undefined, onPointerDown = undefined, }, forwardedRef) => {
|
|
116
|
+
const ref = (0, react_1.useRef)(null);
|
|
117
|
+
const [opened, setOpened] = (0, react_1.useState)({ type: 'not-open' });
|
|
118
|
+
const { currentZIndex } = (0, z_index_1.useZIndex)();
|
|
119
|
+
const setRef = (0, react_1.useCallback)((node) => {
|
|
120
|
+
ref.current = node;
|
|
121
|
+
if (typeof forwardedRef === 'function') {
|
|
122
|
+
forwardedRef(node);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (forwardedRef) {
|
|
126
|
+
forwardedRef.current = node;
|
|
127
|
+
}
|
|
128
|
+
}, [forwardedRef]);
|
|
129
|
+
(0, react_1.useEffect)(() => {
|
|
130
|
+
const { current } = ref;
|
|
131
|
+
if (!current) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const onClick = (e) => {
|
|
135
|
+
e.preventDefault();
|
|
136
|
+
e.stopPropagation();
|
|
137
|
+
if ((onOpen === null || onOpen === void 0 ? void 0 : onOpen()) === false) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
setOpened({ type: 'open', left: e.clientX, top: e.clientY });
|
|
141
|
+
return false;
|
|
142
|
+
};
|
|
143
|
+
current.addEventListener('contextmenu', onClick);
|
|
144
|
+
return () => {
|
|
145
|
+
current.removeEventListener('contextmenu', onClick);
|
|
146
|
+
};
|
|
147
|
+
}, [onOpen]);
|
|
148
|
+
const onHide = (0, react_1.useCallback)(() => {
|
|
149
|
+
setOpened({ type: 'not-open' });
|
|
150
|
+
}, []);
|
|
139
151
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
140
|
-
jsx_runtime_1.jsx("div", { ref: setRef, onContextMenu: () => false, style: style, className: className, onPointerDown: onPointerDown, children: children }),
|
|
141
|
-
? 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, onPointerDown: onMenuPointerDown, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: noop_1.noop, onPreviousMenu: noop_1.noop, values: values, onHide: onHide, leaveLeftSpace: true, preselectIndex: false, topItemCanBeUnselected: false, fixedHeight: null }) }) }) }) }), (0, portals_1.getPortal)(currentZIndex))
|
|
142
|
-
: null] }));
|
|
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] }));
|
|
143
153
|
});
|
|
144
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 });
|
|
@@ -41,6 +41,7 @@ const remotion_1 = require("remotion");
|
|
|
41
41
|
const colors_1 = require("../helpers/colors");
|
|
42
42
|
const noop_1 = require("../helpers/noop");
|
|
43
43
|
const canvas_ref_1 = require("../state/canvas-ref");
|
|
44
|
+
const scale_lock_1 = require("../state/scale-lock");
|
|
44
45
|
const timeline_zoom_1 = require("../state/timeline-zoom");
|
|
45
46
|
const z_index_1 = require("../state/z-index");
|
|
46
47
|
const EditorContent_1 = require("./EditorContent");
|
|
@@ -65,7 +66,8 @@ exports.BUFFER_STATE_DELAY_IN_MILLISECONDS = typeof process.env.BUFFER_STATE_DEL
|
|
|
65
66
|
? DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS
|
|
66
67
|
: Number(process.env.BUFFER_STATE_DELAY_IN_MILLISECONDS);
|
|
67
68
|
const Editor = ({ Root, readOnlyStudio }) => {
|
|
68
|
-
const
|
|
69
|
+
const [drawElement, setDrawElement] = (0, react_1.useState)(null);
|
|
70
|
+
const size = player_1.PlayerInternals.useElementSize(drawElement, {
|
|
69
71
|
triggerOnWindowResize: false,
|
|
70
72
|
shouldApplyCssTransforms: true,
|
|
71
73
|
});
|
|
@@ -73,6 +75,12 @@ const Editor = ({ Root, readOnlyStudio }) => {
|
|
|
73
75
|
const onMounted = (0, react_1.useCallback)(() => {
|
|
74
76
|
setCanvasMounted(true);
|
|
75
77
|
}, []);
|
|
78
|
+
// Use a callback ref so the late-mounted canvas container triggers a render
|
|
79
|
+
// and useElementSize() can observe it. See GitHub issue #8098.
|
|
80
|
+
const setDrawRef = (0, react_1.useCallback)((node) => {
|
|
81
|
+
canvas_ref_1.drawRef.current = node;
|
|
82
|
+
setDrawElement(node);
|
|
83
|
+
}, []);
|
|
76
84
|
const value = (0, react_1.useMemo)(() => {
|
|
77
85
|
if (!size) {
|
|
78
86
|
return null;
|
|
@@ -93,11 +101,11 @@ const Editor = ({ Root, readOnlyStudio }) => {
|
|
|
93
101
|
const renderErrorContextValue = (0, react_1.useMemo)(() => ({ error: renderError }), [renderError]);
|
|
94
102
|
return (jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onEscape: noop_1.noop, onOutsideClick: noop_1.noop, children: jsx_runtime_1.jsx(timeline_zoom_1.TimelineZoomContext, { children: jsx_runtime_1.jsxs(SequencePropsSubscriptionProvider_1.SequencePropsSubscriptionProvider, { children: [
|
|
95
103
|
jsx_runtime_1.jsxs(remotion_1.Internals.CurrentScaleContext.Provider, { value: value, children: [
|
|
96
|
-
jsx_runtime_1.jsx(ForceSpecificCursor_1.ForceSpecificCursor, {}), jsx_runtime_1.jsxs("div", { style: background, children: [
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
104
|
+
jsx_runtime_1.jsx(ForceSpecificCursor_1.ForceSpecificCursor, {}), jsx_runtime_1.jsx(scale_lock_1.ScaleLockProvider, { children: jsx_runtime_1.jsxs("div", { style: background, children: [
|
|
105
|
+
jsx_runtime_1.jsx(remotion_1.Internals.CompositionRenderErrorContext.Provider, { value: compositionRenderErrorContextValue, children: canvasMounted ? jsx_runtime_1.jsx(MemoRoot, {}) : null }), jsx_runtime_1.jsxs(remotion_1.Internals.CanUseRemotionHooksProvider, { children: [
|
|
106
|
+
jsx_runtime_1.jsx(RenderErrorContext_1.RenderErrorContext.Provider, { value: renderErrorContextValue, children: jsx_runtime_1.jsx(EditorContent_1.EditorContent, { readOnlyStudio: readOnlyStudio, children: jsx_runtime_1.jsx(TopPanel_1.TopPanel, { drawRef: setDrawRef, bufferStateDelayInMilliseconds: exports.BUFFER_STATE_DELAY_IN_MILLISECONDS, onMounted: onMounted, readOnlyStudio: readOnlyStudio }) }) }), jsx_runtime_1.jsx(GlobalKeybindings_1.GlobalKeybindings, {})
|
|
107
|
+
] })
|
|
108
|
+
] }) })
|
|
101
109
|
] }), jsx_runtime_1.jsx(Modals_1.Modals, { readOnlyStudio: readOnlyStudio }), jsx_runtime_1.jsx(NotificationCenter_1.NotificationCenter, {})
|
|
102
110
|
] }) }) }));
|
|
103
111
|
};
|
|
@@ -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)();
|