@remotion/studio 4.0.503 → 4.0.505
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/install-package.d.ts +2 -1
- package/dist/api/install-package.js +6 -2
- package/dist/components/AssetSelectorItem.js +4 -16
- package/dist/components/AudioWaveform.d.ts +1 -1
- package/dist/components/AudioWaveform.js +36 -3
- package/dist/components/Canvas.js +12 -5
- package/dist/components/CheckboardToggle.js +3 -1
- package/dist/components/CompositionContextButton.d.ts +1 -1
- package/dist/components/CompositionContextButton.js +2 -2
- package/dist/components/CompositionSelector.js +2 -2
- package/dist/components/CompositionSelectorItem.js +6 -7
- package/dist/components/ContextMenu.d.ts +5 -7
- package/dist/components/ContextMenu.js +54 -21
- package/dist/components/ControlButton.d.ts +4 -2
- package/dist/components/ControlButton.js +6 -20
- package/dist/components/EditorContent.js +1 -1
- package/dist/components/EditorGuides/Guide.js +2 -2
- package/dist/components/EffectPickerModal.js +70 -9
- package/dist/components/FullscreenToggle.js +1 -2
- package/dist/components/InitialCompositionLoader.js +1 -14
- package/dist/components/InlineAction.d.ts +3 -4
- package/dist/components/InlineAction.js +16 -13
- package/dist/components/InlineDropdown.d.ts +3 -2
- package/dist/components/InlineDropdown.js +16 -5
- package/dist/components/InspectorPanel/CompositionMetadata.js +7 -6
- package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +2 -2
- package/dist/components/InspectorPanel/KeyframeInspector.js +2 -3
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +1 -1
- package/dist/components/InspectorPanel/common.js +24 -34
- package/dist/components/InspectorPanel/styles.js +4 -0
- package/dist/components/InspectorSequenceSection.js +1 -1
- package/dist/components/LoopToggle.js +1 -1
- package/dist/components/Menu/MenuItem.js +16 -12
- package/dist/components/MenuBuildIndicator.d.ts +3 -1
- package/dist/components/MenuBuildIndicator.js +14 -59
- package/dist/components/MenuCompositionName.js +3 -63
- package/dist/components/MenuToolbar.js +23 -3
- package/dist/components/MobilePanel.d.ts +1 -2
- package/dist/components/MobilePanel.js +6 -10
- package/dist/components/MuteToggle.js +2 -1
- package/dist/components/NewComposition/ComboBox.d.ts +1 -0
- package/dist/components/NewComposition/ComboBox.js +2 -2
- package/dist/components/NewComposition/InputDragger.d.ts +5 -0
- package/dist/components/NewComposition/InputDragger.js +11 -6
- package/dist/components/NewComposition/MenuContent.d.ts +1 -1
- package/dist/components/NewComposition/menu-typeahead.d.ts +1 -1
- package/dist/components/Notifications/NotificationCenter.js +12 -2
- package/dist/components/OutlineToggle.js +10 -2
- package/dist/components/PlayPause.js +2 -6
- package/dist/components/PlaybackRateSelector.js +4 -9
- package/dist/components/PreviewToolbar.js +12 -8
- package/dist/components/PreviewToolbarOverflowButton.d.ts +0 -1
- package/dist/components/PreviewToolbarOverflowButton.js +2 -75
- package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -2
- package/dist/components/RenderButton.d.ts +1 -1
- package/dist/components/RenderButton.js +55 -37
- package/dist/components/RenderModal/FrameRangeSetting.js +6 -1
- package/dist/components/RenderModal/MultiRangeSlider.js +8 -8
- package/dist/components/RenderModal/RenderModalEnvironmentVariables.js +1 -9
- package/dist/components/RenderModal/RenderModalOutputName.js +11 -2
- package/dist/components/RenderModal/ServerRenderModal.js +2 -17
- package/dist/components/RenderModal/WebRenderModal.js +3 -17
- package/dist/components/RenderModal/layout.js +7 -5
- package/dist/components/RenderModal/render-modals.js +18 -15
- package/dist/components/RenderQueue/RenderQueueRepeat.js +1 -14
- package/dist/components/SelectedOutlineElement.js +13 -22
- package/dist/components/SelectedOutlineOverlay.js +5 -1
- package/dist/components/SidebarRenderButton.js +1 -15
- package/dist/components/SizeSelector.js +4 -9
- package/dist/components/SnappingToggle.js +1 -2
- package/dist/components/Spinner.d.ts +1 -0
- package/dist/components/Spinner.js +2 -2
- package/dist/components/Splitter/SplitterContainer.d.ts +1 -0
- package/dist/components/Splitter/SplitterContainer.js +4 -1
- package/dist/components/Splitter/SplitterContext.d.ts +4 -3
- package/dist/components/Splitter/SplitterContext.js +3 -2
- package/dist/components/Splitter/SplitterElement.js +6 -1
- package/dist/components/Splitter/SplitterHandle.js +1 -0
- package/dist/components/Tabs/vertical.d.ts +1 -0
- package/dist/components/Tabs/vertical.js +8 -10
- package/dist/components/TimeValue.js +26 -8
- package/dist/components/Timeline/Timeline.js +5 -5
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +3 -6
- package/dist/components/Timeline/TimelineDeleteKeybindings.js +5 -7
- package/dist/components/Timeline/TimelineDragHandler.js +3 -0
- package/dist/components/Timeline/TimelineEffectItem.js +6 -2
- package/dist/components/Timeline/TimelineEffectPropItem.js +6 -3
- package/dist/components/Timeline/TimelineExpandedKeyframeRow.d.ts +6 -6
- package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +34 -2
- package/dist/components/Timeline/TimelineHeightContainer.d.ts +1 -0
- package/dist/components/Timeline/TimelineHeightContainer.js +2 -2
- package/dist/components/Timeline/TimelineInOutDragHandler.js +3 -3
- package/dist/components/Timeline/TimelineKeyframeEasingLine.d.ts +5 -3
- package/dist/components/Timeline/TimelineKeyframeEasingLine.js +32 -30
- package/dist/components/Timeline/TimelineList.d.ts +1 -0
- package/dist/components/Timeline/TimelineList.js +2 -3
- package/dist/components/Timeline/TimelineScaleField.js +1 -1
- package/dist/components/Timeline/TimelineSelection.js +2 -3
- package/dist/components/Timeline/TimelineSequence.js +34 -28
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +3 -3
- package/dist/components/Timeline/TimelineSequenceItem.js +34 -23
- package/dist/components/Timeline/TimelineSequencePropItem.d.ts +10 -2
- package/dist/components/Timeline/TimelineSequencePropItem.js +64 -12
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +2 -2
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +38 -5
- package/dist/components/Timeline/TimelineTimeIndicators.js +36 -3
- package/dist/components/Timeline/TimelineVideoInfo.d.ts +1 -1
- package/dist/components/Timeline/TimelineVideoInfo.js +36 -3
- package/dist/components/Timeline/TimelineZoomControls.d.ts +3 -1
- package/dist/components/Timeline/TimelineZoomControls.js +59 -20
- package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +2 -3
- package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.d.ts +1 -1
- package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +7 -18
- package/dist/components/Timeline/use-timeline-asset-drop.js +3 -3
- package/dist/components/Timeline/use-timeline-height.d.ts +2 -1
- package/dist/components/Timeline/use-timeline-height.js +3 -2
- package/dist/components/TimelineCombobox.d.ts +11 -0
- package/dist/components/TimelineCombobox.js +181 -0
- package/dist/components/TimelineInOutToggle.js +3 -3
- package/dist/components/TopPanel.js +8 -8
- package/dist/components/UndoRedoButtons.js +6 -5
- package/dist/components/UpdateCheck.js +18 -5
- package/dist/components/UpdateModal/UpdateModal.js +35 -12
- package/dist/components/composition-menu-items.d.ts +2 -4
- package/dist/components/composition-menu-items.js +31 -54
- package/dist/components/import-assets.d.ts +2 -1
- package/dist/components/import-assets.js +1 -1
- package/dist/components/selected-outline-types.d.ts +1 -1
- package/dist/esm/{chunk-bj1r1hh5.js → chunk-7pgk8h5m.js} +9174 -8486
- package/dist/esm/internals.mjs +9174 -8486
- package/dist/esm/previewEntry.mjs +8991 -8303
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/hoverable.d.ts +11 -0
- package/dist/helpers/hoverable.js +70 -0
- package/dist/helpers/inject-css.js +43 -23
- package/dist/helpers/install-required-package.d.ts +3 -2
- package/dist/helpers/install-required-package.js +20 -15
- package/dist/helpers/use-is-fullscreen.d.ts +1 -0
- package/dist/helpers/use-is-fullscreen.js +25 -0
- package/dist/helpers/use-menu-structure.js +88 -59
- package/dist/icons/audio.d.ts +1 -1
- package/dist/icons/audio.js +1 -1
- package/dist/icons/canvas-zoom.d.ts +10 -0
- package/dist/icons/canvas-zoom.js +21 -0
- package/dist/icons/caret.js +1 -1
- package/dist/icons/certificate.d.ts +1 -1
- package/dist/icons/certificate.js +1 -1
- package/dist/icons/data.d.ts +1 -1
- package/dist/icons/data.js +2 -2
- package/dist/icons/effects.d.ts +5 -0
- package/dist/icons/effects.js +8 -0
- package/dist/icons/ellipsis.js +1 -1
- package/dist/icons/external-link.d.ts +5 -0
- package/dist/icons/external-link.js +10 -0
- package/dist/icons/fullscreen.js +1 -1
- package/dist/icons/gear.d.ts +1 -1
- package/dist/icons/gear.js +1 -1
- package/dist/icons/gif.d.ts +1 -1
- package/dist/icons/gif.js +1 -1
- package/dist/icons/input-props.d.ts +2 -0
- package/dist/icons/input-props.js +9 -0
- package/dist/icons/jump-to-start.js +2 -2
- package/dist/icons/magnet.d.ts +3 -1
- package/dist/icons/magnet.js +2 -2
- package/dist/icons/media-volume.d.ts +6 -2
- package/dist/icons/media-volume.js +8 -6
- package/dist/icons/minus.d.ts +3 -1
- package/dist/icons/minus.js +2 -2
- package/dist/icons/pause.js +1 -1
- package/dist/icons/play.js +1 -1
- package/dist/icons/playback-rate.d.ts +5 -0
- package/dist/icons/playback-rate.js +31 -0
- package/dist/icons/plus.js +1 -1
- package/dist/icons/redo.js +2 -2
- package/dist/icons/search.d.ts +5 -0
- package/dist/icons/search.js +10 -0
- package/dist/icons/step-back.js +2 -2
- package/dist/icons/step-forward.js +2 -2
- package/dist/icons/timelineInOutPointer.js +2 -2
- package/dist/icons/undo.js +2 -2
- package/package.json +12 -12
|
@@ -1,2 +1,3 @@
|
|
|
1
|
+
import type { ElementDependency } from '@remotion/studio-protocol';
|
|
1
2
|
import type { InstallPackageResponse } from '@remotion/studio-shared';
|
|
2
|
-
export declare const installPackages: (
|
|
3
|
+
export declare const installPackages: (dependencies: (string | ElementDependency)[]) => Promise<InstallPackageResponse>;
|
|
@@ -3,13 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.installPackages = void 0;
|
|
4
4
|
const remotion_1 = require("remotion");
|
|
5
5
|
const call_api_1 = require("../components/call-api");
|
|
6
|
-
const installPackages = (
|
|
6
|
+
const installPackages = (dependencies) => {
|
|
7
7
|
if (!(0, remotion_1.getRemotionEnvironment)().isStudio) {
|
|
8
8
|
throw new Error('installPackages() is only available in the Studio');
|
|
9
9
|
}
|
|
10
10
|
if (window.remotion_isReadOnlyStudio) {
|
|
11
11
|
throw new Error('installPackages() is not available in Read-Only Studio');
|
|
12
12
|
}
|
|
13
|
-
return (0, call_api_1.callApi)('/api/install-package', {
|
|
13
|
+
return (0, call_api_1.callApi)('/api/install-package', {
|
|
14
|
+
dependencies: dependencies.map((dependency) => typeof dependency === 'string'
|
|
15
|
+
? { name: dependency, version: null }
|
|
16
|
+
: dependency),
|
|
17
|
+
});
|
|
14
18
|
};
|
|
15
19
|
exports.installPackages = installPackages;
|
|
@@ -46,7 +46,6 @@ const colors_1 = require("../helpers/colors");
|
|
|
46
46
|
const copy_text_1 = require("../helpers/copy-text");
|
|
47
47
|
const get_file_manager_name_1 = require("../helpers/get-file-manager-name");
|
|
48
48
|
const get_preview_file_type_1 = require("../helpers/get-preview-file-type");
|
|
49
|
-
const mobile_layout_1 = require("../helpers/mobile-layout");
|
|
50
49
|
const sidebar_scroll_into_view_1 = require("../helpers/sidebar-scroll-into-view");
|
|
51
50
|
const url_state_1 = require("../helpers/url-state");
|
|
52
51
|
const use_asset_drag_events_1 = __importStar(require("../helpers/use-asset-drag-events"));
|
|
@@ -55,7 +54,6 @@ const use_media_metadata_1 = require("../helpers/use-media-metadata");
|
|
|
55
54
|
const clipboard_1 = require("../icons/clipboard");
|
|
56
55
|
const folder_1 = require("../icons/folder");
|
|
57
56
|
const modals_1 = require("../state/modals");
|
|
58
|
-
const sidebar_1 = require("../state/sidebar");
|
|
59
57
|
const AssetFileIcon_1 = require("./AssetFileIcon");
|
|
60
58
|
const ConfirmationDialog_1 = require("./ConfirmationDialog");
|
|
61
59
|
const ContextMenu_1 = require("./ContextMenu");
|
|
@@ -260,10 +258,8 @@ const AssetFolderTree = ({ item, level, name, parentFolder, toggleFolder, tabInd
|
|
|
260
258
|
exports.AssetFolderTree = AssetFolderTree;
|
|
261
259
|
const AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio }) => {
|
|
262
260
|
const fileManagerName = (0, get_file_manager_name_1.getFileManagerName)(window.remotion_fileSystemPlatform);
|
|
263
|
-
const isMobileLayout = (0, mobile_layout_1.useMobileLayout)();
|
|
264
261
|
const [hovered, setHovered] = (0, react_1.useState)(false);
|
|
265
262
|
const [isDragging, setIsDragging] = (0, react_1.useState)(false);
|
|
266
|
-
const { setSidebarCollapsedState } = (0, react_1.useContext)(sidebar_1.SidebarContext);
|
|
267
263
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
268
264
|
const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
|
|
269
265
|
const connectionStatus = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx)
|
|
@@ -303,15 +299,7 @@ const AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio
|
|
|
303
299
|
(0, sidebar_scroll_into_view_1.markAssetSidebarScrollFromRowClick)(relativePath);
|
|
304
300
|
setCanvasContent({ type: 'asset', asset: relativePath });
|
|
305
301
|
(0, url_state_1.pushUrl)(`/assets/${relativePath}`);
|
|
306
|
-
|
|
307
|
-
setSidebarCollapsedState({ left: 'collapsed', right: 'collapsed' });
|
|
308
|
-
}
|
|
309
|
-
}, [
|
|
310
|
-
isMobileLayout,
|
|
311
|
-
relativePath,
|
|
312
|
-
setCanvasContent,
|
|
313
|
-
setSidebarCollapsedState,
|
|
314
|
-
]);
|
|
302
|
+
}, [relativePath, setCanvasContent]);
|
|
315
303
|
const onDragStart = (0, react_1.useCallback)((e) => {
|
|
316
304
|
var _a, _b, _c, _d;
|
|
317
305
|
if (!canDragAsset) {
|
|
@@ -436,7 +424,7 @@ const AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio
|
|
|
436
424
|
relativePath,
|
|
437
425
|
});
|
|
438
426
|
}, [relativePath, setSelectedModal]);
|
|
439
|
-
const
|
|
427
|
+
const getContextMenuItems = (0, react_1.useCallback)(() => {
|
|
440
428
|
return (0, exports.getAssetContextMenuItems)({
|
|
441
429
|
relativePath,
|
|
442
430
|
fileManagerName,
|
|
@@ -467,8 +455,8 @@ const AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio
|
|
|
467
455
|
e.stopPropagation();
|
|
468
456
|
copyStaticFilePath();
|
|
469
457
|
}, [copyStaticFilePath]);
|
|
470
|
-
return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, {
|
|
471
|
-
jsx_runtime_1.jsx(AssetFileIcon_1.AssetFileIcon, { fileType: previewFileType, style: iconStyle, color: colors_1.LIGHT_TEXT }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("div", { style: label, children: item.name }), hovered && !isDragging ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
458
|
+
return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: jsx_runtime_1.jsx(layout_1.Row, { align: "center", children: jsx_runtime_1.jsxs("div", { ref: rowRef, style: style, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, onClick: onClick, draggable: canDragAsset, onDragStart: onDragStart, onDragEnd: onDragEnd, tabIndex: tabIndex, title: item.name, children: [
|
|
459
|
+
jsx_runtime_1.jsx(AssetFileIcon_1.AssetFileIcon, { fileType: previewFileType, style: iconStyle, color: hovered || selected ? colors_1.WHITE : colors_1.LIGHT_TEXT }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("div", { style: label, children: item.name }), hovered && !isDragging ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
472
460
|
jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, title: "Copy staticFile() path", renderAction: renderCopyAction, onClick: copyToClipboard }), fileExplorerDisabled ? null : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
473
461
|
jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, title: `Show in ${fileManagerName}`, renderAction: renderFileExplorerAction, onClick: revealInExplorer })
|
|
474
462
|
] }))] })) : null] }) }) }));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { LoopDisplay } from 'remotion';
|
|
3
|
-
export declare const AudioWaveform: React.
|
|
3
|
+
export declare const AudioWaveform: React.NamedExoticComponent<{
|
|
4
4
|
readonly src: string;
|
|
5
5
|
readonly height: number;
|
|
6
6
|
readonly visualizationWidth: number;
|
|
@@ -1,9 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.AudioWaveform = void 0;
|
|
4
37
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
38
|
const timeline_utils_1 = require("@remotion/timeline-utils");
|
|
6
|
-
const react_1 = require("react");
|
|
39
|
+
const react_1 = __importStar(require("react"));
|
|
7
40
|
const remotion_1 = require("remotion");
|
|
8
41
|
const colors_1 = require("../helpers/colors");
|
|
9
42
|
const timeline_layout_1 = require("../helpers/timeline-layout");
|
|
@@ -76,7 +109,7 @@ const drawLoopedWaveform = ({ canvas, peaks, volume, visualizationWidth, loopWid
|
|
|
76
109
|
ctx.fillStyle = pattern;
|
|
77
110
|
ctx.fillRect(0, 0, w, h);
|
|
78
111
|
};
|
|
79
|
-
const
|
|
112
|
+
const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, visualizationWidth, volume, doesVolumeChange, playbackRate, loopDisplay, }) => {
|
|
80
113
|
const [peaks, setPeaks] = (0, react_1.useState)(null);
|
|
81
114
|
const [error, setError] = (0, react_1.useState)(null);
|
|
82
115
|
const [waveformCanvasKey, setWaveformCanvasKey] = (0, react_1.useState)(0);
|
|
@@ -300,4 +333,4 @@ const AudioWaveform = ({ src, height, startFrom, durationInFrames, visualization
|
|
|
300
333
|
return (jsx_runtime_1.jsxs("div", { style: getContainerStyle(height), children: [
|
|
301
334
|
jsx_runtime_1.jsx("canvas", { ref: waveformCanvas, style: waveformCanvasStyle }, waveformCanvasKey), shouldRenderVolumeOverlay ? (jsx_runtime_1.jsx("canvas", { ref: volumeCanvas, style: volumeCanvasStyle })) : null] }));
|
|
302
335
|
};
|
|
303
|
-
exports.AudioWaveform =
|
|
336
|
+
exports.AudioWaveform = react_1.default.memo(AudioWaveformInner);
|
|
@@ -646,11 +646,18 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
646
646
|
if (canceled) {
|
|
647
647
|
return;
|
|
648
648
|
}
|
|
649
|
-
const declaredDependencies = Array.from(new
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
const
|
|
649
|
+
const declaredDependencies = Array.from(new Map(activeElementInstallRequest.element.dependencies.map((dependency) => [
|
|
650
|
+
dependency.name,
|
|
651
|
+
dependency,
|
|
652
|
+
])).values());
|
|
653
|
+
const missingPackages = (0, install_required_package_1.getMissingPackages)(declaredDependencies).map((dependency) => dependency.name);
|
|
654
|
+
const ignoredDependencies = declaredDependencies.filter((dependency) => elementInstallDependencyIgnoreList.includes(dependency.name) &&
|
|
655
|
+
!missingPackages.includes(dependency.name));
|
|
656
|
+
const dependenciesToReview = declaredDependencies
|
|
657
|
+
.filter((dependency) => !ignoredDependencies.includes(dependency))
|
|
658
|
+
.map((dependency) => dependency.version === null
|
|
659
|
+
? dependency.name
|
|
660
|
+
: `${dependency.name}@${dependency.version}`);
|
|
654
661
|
const sourceLabel = activeElementInstallRequest.source.type === 'studio-protocol'
|
|
655
662
|
? activeElementInstallRequest.source.origin
|
|
656
663
|
: 'Unverified drag-and-drop payload';
|
|
@@ -21,6 +21,8 @@ const CheckboardToggle = () => {
|
|
|
21
21
|
return !c;
|
|
22
22
|
});
|
|
23
23
|
}, [setCheckerboard]);
|
|
24
|
-
return (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: accessibilityLabel, "aria-label": accessibilityLabel, onClick: onClick, children: jsx_runtime_1.
|
|
24
|
+
return (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: accessibilityLabel, "aria-label": accessibilityLabel, onClick: onClick, children: (color) => (jsx_runtime_1.jsxs("svg", { "aria-hidden": "true", focusable: "false", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 512 512", style: { width: 18, height: 18 }, fill: "none", children: [
|
|
25
|
+
jsx_runtime_1.jsx("path", { fill: checkerboard ? colors_1.BLUE : color, d: "M256 48h184c13.3 0 24 10.7 24 24v184H256V48zM48 256h208v208H72c-13.3 0-24-10.7-24-24V256z" }), jsx_runtime_1.jsx("rect", { x: "48", y: "48", width: "416", height: "416", rx: "24", stroke: checkerboard ? colors_1.BLUE : color, strokeWidth: "32" }), jsx_runtime_1.jsx("path", { d: "M256 48v416M48 256h416", stroke: checkerboard ? colors_1.BLUE : color, strokeWidth: "32" })
|
|
26
|
+
] })) }));
|
|
25
27
|
};
|
|
26
28
|
exports.CheckboardToggle = CheckboardToggle;
|
|
@@ -6,7 +6,7 @@ const react_1 = require("react");
|
|
|
6
6
|
const client_id_1 = require("../helpers/client-id");
|
|
7
7
|
const ellipsis_1 = require("../icons/ellipsis");
|
|
8
8
|
const InlineDropdown_1 = require("./InlineDropdown");
|
|
9
|
-
const CompositionContextButton = ({ visible,
|
|
9
|
+
const CompositionContextButton = ({ visible, getItems }) => {
|
|
10
10
|
const iconStyle = (0, react_1.useMemo)(() => {
|
|
11
11
|
return {
|
|
12
12
|
style: {
|
|
@@ -22,6 +22,6 @@ const CompositionContextButton = ({ visible, values }) => {
|
|
|
22
22
|
if (!visible || connectionStatus !== 'connected') {
|
|
23
23
|
return null;
|
|
24
24
|
}
|
|
25
|
-
return (jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { renderAction: renderAction,
|
|
25
|
+
return (jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { renderAction: renderAction, getItems: getItems, variant: null }));
|
|
26
26
|
};
|
|
27
27
|
exports.CompositionContextButton = CompositionContextButton;
|
|
@@ -90,7 +90,7 @@ const CompositionSelector = () => {
|
|
|
90
90
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
91
91
|
const connectionStatus = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx)
|
|
92
92
|
.previewServerState.type;
|
|
93
|
-
const
|
|
93
|
+
const getRootContextMenuItems = (0, react_1.useCallback)(() => {
|
|
94
94
|
return (0, root_composition_menu_items_1.getRootCompositionMenuItems)({
|
|
95
95
|
connectionStatus,
|
|
96
96
|
readOnlyStudio: window.remotion_isReadOnlyStudio,
|
|
@@ -234,7 +234,7 @@ const CompositionSelector = () => {
|
|
|
234
234
|
}
|
|
235
235
|
}, [compositions, stopCompositionListAutoScroll]);
|
|
236
236
|
return (jsx_runtime_1.jsxs("div", { style: container, children: [
|
|
237
|
-
jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: listRef,
|
|
237
|
+
jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: listRef, getItems: getRootContextMenuItems }), jsx_runtime_1.jsx(ExplorerQuickSwitcherTrigger_1.ExplorerQuickSwitcherTrigger, { mode: "compositions", showShortcut: true, tabIndex: tabIndex }), jsx_runtime_1.jsx("div", { ref: listRef, className: "__remotion-vertical-scrollbar", style: list, onDragOverCapture: onCompositionListDragOverCapture, onDragEndCapture: stopCompositionListAutoScroll, onDragOver: onRootDragOver, onDragLeave: onRootDragLeave, onDropCapture: stopCompositionListAutoScroll, onDrop: onRootDrop, children: items.map((c) => {
|
|
238
238
|
return (jsx_runtime_1.jsx(CompositionSelectorItem_1.CompositionSelectorItem, { level: 0, currentComposition: canvasContent && canvasContent.type === 'composition'
|
|
239
239
|
? canvasContent.compositionId
|
|
240
240
|
: null, selectComposition: selectComposition, toggleFolder: toggleFolder, clearRootDragHover: clearRootDragHover, tabIndex: tabIndex, item: c }, c.key + c.type));
|
|
@@ -23,7 +23,7 @@ const actions_1 = require("./RenderQueue/actions");
|
|
|
23
23
|
const SidebarRenderButton_1 = require("./SidebarRenderButton");
|
|
24
24
|
const use_resolved_stack_1 = require("./Timeline/use-resolved-stack");
|
|
25
25
|
const itemStyle = {
|
|
26
|
-
paddingRight:
|
|
26
|
+
paddingRight: 2,
|
|
27
27
|
paddingTop: 5,
|
|
28
28
|
paddingBottom: 5,
|
|
29
29
|
fontSize: 13,
|
|
@@ -33,11 +33,10 @@ const itemStyle = {
|
|
|
33
33
|
alignItems: 'center',
|
|
34
34
|
marginBottom: 1,
|
|
35
35
|
marginLeft: 4,
|
|
36
|
-
marginRight: 4,
|
|
37
36
|
appearance: 'none',
|
|
38
37
|
border: 'none',
|
|
39
38
|
borderRadius: 4,
|
|
40
|
-
width: 'calc(100% -
|
|
39
|
+
width: 'calc(100% - 4px)',
|
|
41
40
|
textAlign: 'left',
|
|
42
41
|
backgroundColor: colors_1.BACKGROUND,
|
|
43
42
|
height: layout_1.COMPACT_CONTROL_ROW_HEIGHT,
|
|
@@ -121,7 +120,7 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
|
|
|
121
120
|
const connectionStatus = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx)
|
|
122
121
|
.previewServerState.type;
|
|
123
122
|
const resolvedLocation = (0, use_resolved_stack_1.useResolvedStack)(item.type === 'composition' ? item.composition.stack : item.folder.stack);
|
|
124
|
-
const
|
|
123
|
+
const getContextMenuItems = (0, react_1.useCallback)(() => {
|
|
125
124
|
if (item.type === 'composition') {
|
|
126
125
|
return (0, composition_menu_items_1.getCompositionContextMenuItems)({
|
|
127
126
|
closeMenu: noop_1.noop,
|
|
@@ -242,13 +241,13 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
|
|
|
242
241
|
}, [clearRootDragHover, item, toggleFolder]);
|
|
243
242
|
if (item.type === 'folder') {
|
|
244
243
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
245
|
-
jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, {
|
|
244
|
+
jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: jsx_runtime_1.jsx(layout_1.Row, { align: "center", children: jsx_runtime_1.jsxs("div", { style: style, className: "__remotion-composition-selector-item", onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, tabIndex: tabIndex, onClick: onClick, onKeyDown: onKeyDown, onDragOver: onFolderDragOver, onDragLeave: onFolderDragLeave, onDrop: onFolderDrop, title: item.folderName, role: "button", children: [item.expanded ? (jsx_runtime_1.jsx(folder_1.ExpandedFolderIcon, { style: iconStyle, color: hovered || selected ? colors_1.WHITE : colors_1.LIGHT_TEXT })) : (jsx_runtime_1.jsx(folder_1.CollapsedFolderIcon, { color: hovered || selected ? colors_1.WHITE : colors_1.LIGHT_TEXT, style: iconStyle })), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("div", { style: label, children: item.folderName }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(CompositionContextButton_1.CompositionContextButton, { getItems: getContextMenuItems, visible: hovered })
|
|
246
245
|
] }) }) }), item.expanded ? (jsx_runtime_1.jsx("div", { onDragOver: onFolderChildListDragOver, onDrop: onFolderDrop, children: item.items.map((childItem) => {
|
|
247
246
|
return (jsx_runtime_1.jsx(exports.CompositionSelectorItem, { currentComposition: currentComposition, selectComposition: selectComposition, item: childItem, tabIndex: tabIndex, level: level + 1, toggleFolder: toggleFolder, clearRootDragHover: clearRootDragHover }, childItem.key + childItem.type));
|
|
248
247
|
}) })) : null] }));
|
|
249
248
|
}
|
|
250
|
-
return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, {
|
|
251
|
-
jsx_runtime_1.jsx(CompositionOrStillIcon_1.CompositionOrStillIcon, { composition: item.composition, color: hovered || selected ? colors_1.WHITE : colors_1.LIGHT_TEXT, style: iconStyle }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("div", { style: label, children: item.composition.id }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(CompositionContextButton_1.CompositionContextButton, {
|
|
249
|
+
return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: jsx_runtime_1.jsx(layout_1.Row, { align: "center", children: jsx_runtime_1.jsxs("a", { ref: compositionRowRef, style: style, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, tabIndex: tabIndex, onClick: onClick, onKeyDown: onKeyDown, draggable: !window.remotion_isReadOnlyStudio, onDragStart: onCompositionDragStart, onDragEnd: onCompositionDragEnd, type: "button", title: item.composition.id, className: "__remotion-composition __remotion-composition-selector-item", "data-compname": item.composition.id, children: [
|
|
250
|
+
jsx_runtime_1.jsx(CompositionOrStillIcon_1.CompositionOrStillIcon, { composition: item.composition, color: hovered || selected ? colors_1.WHITE : colors_1.LIGHT_TEXT, style: iconStyle }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("div", { style: label, children: item.composition.id }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(CompositionContextButton_1.CompositionContextButton, { getItems: getContextMenuItems, visible: hovered && !isDragging }), jsx_runtime_1.jsx(SidebarRenderButton_1.SidebarRenderButton, { visible: hovered && !isDragging, composition: item.composition })
|
|
252
251
|
] }) }) }));
|
|
253
252
|
};
|
|
254
253
|
exports.CompositionSelectorItem = CompositionSelectorItem;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { ComboboxValue } from './NewComposition/ComboBox';
|
|
3
|
-
type
|
|
4
|
-
type
|
|
5
|
-
|
|
3
|
+
type ContextMenuItemsResult = false | readonly ComboboxValue[];
|
|
4
|
+
export type ContextMenuItemsFactory = (event: MouseEvent) => ContextMenuItemsResult | Promise<ContextMenuItemsResult>;
|
|
5
|
+
export declare const resolveContextMenuItems: (getItems: ContextMenuItemsFactory, event: MouseEvent) => Promise<readonly ComboboxValue[] | null>;
|
|
6
6
|
type ContextMenuProps = {
|
|
7
7
|
readonly children: React.ReactNode;
|
|
8
|
-
readonly
|
|
9
|
-
readonly onOpen: ContextMenuOpenHandler | null;
|
|
8
|
+
readonly getItems: ContextMenuItemsFactory;
|
|
10
9
|
readonly style?: React.CSSProperties;
|
|
11
10
|
readonly className?: string;
|
|
12
11
|
readonly onPointerDown?: React.PointerEventHandler<HTMLDivElement>;
|
|
@@ -14,7 +13,6 @@ type ContextMenuProps = {
|
|
|
14
13
|
export declare const ContextMenu: React.ForwardRefExoticComponent<ContextMenuProps & React.RefAttributes<HTMLDivElement>>;
|
|
15
14
|
export declare const ContextMenuForTarget: React.FC<{
|
|
16
15
|
readonly triggerRef: React.RefObject<HTMLElement | SVGElement | null>;
|
|
17
|
-
readonly
|
|
18
|
-
readonly onOpen: ContextMenuTargetOpenHandler | null;
|
|
16
|
+
readonly getItems: ContextMenuItemsFactory;
|
|
19
17
|
}>;
|
|
20
18
|
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.ContextMenuForTarget = exports.ContextMenu = void 0;
|
|
39
|
+
exports.ContextMenuForTarget = exports.ContextMenu = exports.resolveContextMenuItems = 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,6 +47,14 @@ const z_index_1 = require("../state/z-index");
|
|
|
47
47
|
const portals_1 = require("./Menu/portals");
|
|
48
48
|
const styles_1 = require("./Menu/styles");
|
|
49
49
|
const MenuContent_1 = require("./NewComposition/MenuContent");
|
|
50
|
+
const resolveContextMenuItems = async (getItems, event) => {
|
|
51
|
+
const result = await getItems(event);
|
|
52
|
+
if (result === false || result.length === 0) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
return [...result];
|
|
56
|
+
};
|
|
57
|
+
exports.resolveContextMenuItems = resolveContextMenuItems;
|
|
50
58
|
const contextMenuFullScreenOverlay = {
|
|
51
59
|
...styles_1.fullScreenOverlay,
|
|
52
60
|
pointerEvents: 'none',
|
|
@@ -62,7 +70,7 @@ const notifyContextMenuOpened = (id) => {
|
|
|
62
70
|
detail: id,
|
|
63
71
|
}));
|
|
64
72
|
};
|
|
65
|
-
const ContextMenuPortal = ({ sizeSource, currentZIndex, onHide, opened
|
|
73
|
+
const ContextMenuPortal = ({ sizeSource, currentZIndex, onHide, opened }) => {
|
|
66
74
|
const menuRef = (0, react_1.useRef)(null);
|
|
67
75
|
const size = player_1.PlayerInternals.useElementSize(sizeSource, {
|
|
68
76
|
triggerOnWindowResize: true,
|
|
@@ -154,11 +162,14 @@ const ContextMenuPortal = ({ sizeSource, currentZIndex, onHide, opened, values }
|
|
|
154
162
|
if (!portalStyle) {
|
|
155
163
|
return null;
|
|
156
164
|
}
|
|
157
|
-
return react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { style: contextMenuFullScreenOverlay, children: jsx_runtime_1.jsx("div", { style: contextMenuOuterPortal, className: "css-reset", children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onOutsideClick: onHide, onEscape: onHide, outsideClickButton: "primary", children: jsx_runtime_1.jsx("div", { ref: menuRef, 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));
|
|
165
|
+
return react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { style: contextMenuFullScreenOverlay, children: jsx_runtime_1.jsx("div", { style: contextMenuOuterPortal, className: "css-reset", children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onOutsideClick: onHide, onEscape: onHide, outsideClickButton: "primary", children: jsx_runtime_1.jsx("div", { ref: menuRef, style: portalStyle, onPointerDown: onMenuPointerDown, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: noop_1.noop, onPreviousMenu: noop_1.noop, values: opened.values, onHide: onHide, leaveLeftSpace: true, preselectIndex: false, topItemCanBeUnselected: false, fixedHeight: null }) }) }) }) }), (0, portals_1.getPortal)(currentZIndex));
|
|
158
166
|
};
|
|
159
|
-
exports.ContextMenu = react_1.default.forwardRef(({ children,
|
|
167
|
+
exports.ContextMenu = react_1.default.forwardRef(({ children, getItems, style = undefined, className = undefined, onPointerDown = undefined, }, forwardedRef) => {
|
|
160
168
|
const ref = (0, react_1.useRef)(null);
|
|
161
169
|
const idRef = (0, react_1.useRef)(nextContextMenuId++);
|
|
170
|
+
const invocationRef = (0, react_1.useRef)(0);
|
|
171
|
+
const getItemsRef = (0, react_1.useRef)(getItems);
|
|
172
|
+
getItemsRef.current = getItems;
|
|
162
173
|
const [opened, setOpened] = (0, react_1.useState)({ type: 'not-open' });
|
|
163
174
|
const { currentZIndex } = (0, z_index_1.useZIndex)();
|
|
164
175
|
const setRef = (0, react_1.useCallback)((node) => {
|
|
@@ -177,21 +188,34 @@ exports.ContextMenu = react_1.default.forwardRef(({ children, values, onOpen, st
|
|
|
177
188
|
if (!current) {
|
|
178
189
|
return;
|
|
179
190
|
}
|
|
180
|
-
const onClick = (e) => {
|
|
191
|
+
const onClick = async (e) => {
|
|
181
192
|
e.preventDefault();
|
|
182
193
|
e.stopPropagation();
|
|
183
|
-
|
|
194
|
+
const currentInvocation = ++invocationRef.current;
|
|
195
|
+
const values = await (0, exports.resolveContextMenuItems)(getItemsRef.current, e);
|
|
196
|
+
if (currentInvocation !== invocationRef.current || values === null) {
|
|
184
197
|
return false;
|
|
185
198
|
}
|
|
186
199
|
notifyContextMenuOpened(idRef.current);
|
|
187
|
-
setOpened({
|
|
200
|
+
setOpened({
|
|
201
|
+
type: 'open',
|
|
202
|
+
left: e.clientX,
|
|
203
|
+
top: e.clientY,
|
|
204
|
+
values,
|
|
205
|
+
});
|
|
188
206
|
return false;
|
|
189
207
|
};
|
|
190
208
|
current.addEventListener('contextmenu', onClick);
|
|
191
209
|
return () => {
|
|
192
210
|
current.removeEventListener('contextmenu', onClick);
|
|
193
211
|
};
|
|
194
|
-
}, [
|
|
212
|
+
}, []);
|
|
213
|
+
(0, react_1.useEffect)(() => {
|
|
214
|
+
const invocation = invocationRef;
|
|
215
|
+
return () => {
|
|
216
|
+
invocation.current++;
|
|
217
|
+
};
|
|
218
|
+
}, []);
|
|
195
219
|
const onHide = (0, react_1.useCallback)(() => {
|
|
196
220
|
setOpened({ type: 'not-open' });
|
|
197
221
|
}, []);
|
|
@@ -208,13 +232,15 @@ exports.ContextMenu = react_1.default.forwardRef(({ children, values, onOpen, st
|
|
|
208
232
|
};
|
|
209
233
|
}, [onHide]);
|
|
210
234
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
211
|
-
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
|
|
235
|
+
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 })) : null] }));
|
|
212
236
|
});
|
|
213
237
|
exports.ContextMenu.displayName = 'ContextMenu';
|
|
214
|
-
const ContextMenuForTarget = ({ triggerRef,
|
|
238
|
+
const ContextMenuForTarget = ({ triggerRef, getItems }) => {
|
|
215
239
|
const idRef = (0, react_1.useRef)(nextContextMenuId++);
|
|
240
|
+
const invocationRef = (0, react_1.useRef)(0);
|
|
241
|
+
const getItemsRef = (0, react_1.useRef)(getItems);
|
|
242
|
+
getItemsRef.current = getItems;
|
|
216
243
|
const [opened, setOpened] = (0, react_1.useState)({ type: 'not-open' });
|
|
217
|
-
const [openedValues, setOpenedValues] = (0, react_1.useState)(values);
|
|
218
244
|
const [body, setBody] = (0, react_1.useState)(null);
|
|
219
245
|
const { currentZIndex } = (0, z_index_1.useZIndex)();
|
|
220
246
|
(0, react_1.useEffect)(() => {
|
|
@@ -231,24 +257,31 @@ const ContextMenuForTarget = ({ triggerRef, values, onOpen }) => {
|
|
|
231
257
|
const e = event;
|
|
232
258
|
e.preventDefault();
|
|
233
259
|
e.stopPropagation();
|
|
234
|
-
const
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
}
|
|
238
|
-
const nextValues = Array.isArray(result) ? result : values;
|
|
239
|
-
if (nextValues.length === 0) {
|
|
260
|
+
const currentInvocation = ++invocationRef.current;
|
|
261
|
+
const values = await (0, exports.resolveContextMenuItems)(getItemsRef.current, e);
|
|
262
|
+
if (currentInvocation !== invocationRef.current || values === null) {
|
|
240
263
|
return false;
|
|
241
264
|
}
|
|
242
265
|
notifyContextMenuOpened(idRef.current);
|
|
243
|
-
|
|
244
|
-
|
|
266
|
+
setOpened({
|
|
267
|
+
type: 'open',
|
|
268
|
+
left: e.clientX,
|
|
269
|
+
top: e.clientY,
|
|
270
|
+
values,
|
|
271
|
+
});
|
|
245
272
|
return false;
|
|
246
273
|
};
|
|
247
274
|
current.addEventListener('contextmenu', onClick);
|
|
248
275
|
return () => {
|
|
249
276
|
current.removeEventListener('contextmenu', onClick);
|
|
250
277
|
};
|
|
251
|
-
}, [
|
|
278
|
+
}, [triggerRef]);
|
|
279
|
+
(0, react_1.useEffect)(() => {
|
|
280
|
+
const invocation = invocationRef;
|
|
281
|
+
return () => {
|
|
282
|
+
invocation.current++;
|
|
283
|
+
};
|
|
284
|
+
}, []);
|
|
252
285
|
const onHide = (0, react_1.useCallback)(() => {
|
|
253
286
|
setOpened({ type: 'not-open' });
|
|
254
287
|
}, []);
|
|
@@ -264,6 +297,6 @@ const ContextMenuForTarget = ({ triggerRef, values, onOpen }) => {
|
|
|
264
297
|
window.removeEventListener(contextMenuOpenedEvent, onOtherContextMenuOpened);
|
|
265
298
|
};
|
|
266
299
|
}, [onHide]);
|
|
267
|
-
return opened.type === 'open' ? (jsx_runtime_1.jsx(ContextMenuPortal, { sizeSource: body, currentZIndex: currentZIndex, onHide: onHide, opened: opened
|
|
300
|
+
return opened.type === 'open' ? (jsx_runtime_1.jsx(ContextMenuPortal, { sizeSource: body, currentZIndex: currentZIndex, onHide: onHide, opened: opened })) : null;
|
|
268
301
|
};
|
|
269
302
|
exports.ContextMenuForTarget = ContextMenuForTarget;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import type { RenderInlineAction } from './InlineAction';
|
|
2
3
|
export declare const CONTROL_BUTTON_PADDING = 6;
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const ControlButton: (props: React.ClassAttributes<HTMLButtonElement> & React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
4
|
+
export declare const ControlButton: (props: Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "children" | "onClick" | "title"> & {
|
|
5
5
|
readonly title: string;
|
|
6
|
+
readonly onClick: React.MouseEventHandler<HTMLButtonElement>;
|
|
7
|
+
readonly children: RenderInlineAction | React.ReactNode;
|
|
6
8
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,27 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ControlButton = exports.
|
|
3
|
+
exports.ControlButton = exports.CONTROL_BUTTON_PADDING = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
5
|
+
const colors_1 = require("../helpers/colors");
|
|
6
|
+
const InlineAction_1 = require("./InlineAction");
|
|
7
7
|
exports.CONTROL_BUTTON_PADDING = 6;
|
|
8
|
-
exports.CONTROL_BUTTON_SIZE = 30;
|
|
9
8
|
const ControlButton = (props) => {
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
display: 'inline-flex',
|
|
14
|
-
alignItems: 'center',
|
|
15
|
-
justifyContent: 'center',
|
|
16
|
-
width: exports.CONTROL_BUTTON_SIZE,
|
|
17
|
-
height: exports.CONTROL_BUTTON_SIZE,
|
|
18
|
-
flexShrink: 0,
|
|
19
|
-
background: 'none',
|
|
20
|
-
border: 'none',
|
|
21
|
-
padding: 0,
|
|
22
|
-
};
|
|
23
|
-
}, [props.disabled]);
|
|
24
|
-
const { tabIndex } = (0, z_index_1.useZIndex)();
|
|
25
|
-
return (jsx_runtime_1.jsx("button", { type: 'button', tabIndex: tabIndex, ...props, style: style }));
|
|
9
|
+
const { children, onClick, title, ...buttonProps } = props;
|
|
10
|
+
const renderAction = typeof children === 'function' ? children : () => children;
|
|
11
|
+
return (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { ...buttonProps, title: title, onClick: onClick, renderAction: renderAction, variant: null, unhoveredColor: colors_1.WHITE_ALPHA_80 }));
|
|
26
12
|
};
|
|
27
13
|
exports.ControlButton = ControlButton;
|
|
@@ -35,7 +35,7 @@ const StudioClearSelectionArea = ({ children }) => {
|
|
|
35
35
|
const EditorContent = ({ readOnlyStudio, children }) => {
|
|
36
36
|
const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
37
37
|
const showTimeline = canvasContent !== null && canvasContent.type === 'composition';
|
|
38
|
-
const content = (jsx_runtime_1.jsxs(SplitterContainer_1.SplitterContainer, { orientation: "horizontal", id: "top-to-bottom", maxFlex: 0.9, minFlex: 0.2, defaultFlex: 0.75, maxFlexerSize: null, minFlexerSize: null, maxAntiFlexerSize: null, children: [
|
|
38
|
+
const content = (jsx_runtime_1.jsxs(SplitterContainer_1.SplitterContainer, { orientation: "horizontal", id: "top-to-bottom", maxFlex: 0.9, minFlex: 0.2, defaultFlex: 0.75, maxFlexerSize: null, minFlexerSize: null, maxAntiFlexerSize: null, minAntiFlexerSize: null, children: [
|
|
39
39
|
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, {}) })
|
|
40
40
|
] }));
|
|
41
41
|
return (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionProvider, { children: jsx_runtime_1.jsxs(StudioClearSelectionArea, { children: [
|
|
@@ -165,7 +165,7 @@ const GuideComp = ({ guide, canvasDimensions, scale }) => {
|
|
|
165
165
|
.filter(no_react_1.NoReactInternals.truthy)
|
|
166
166
|
.join(' ');
|
|
167
167
|
}, [activeClassName]);
|
|
168
|
-
const
|
|
168
|
+
const getContextMenuItems = (0, react_1.useCallback)(() => {
|
|
169
169
|
return [
|
|
170
170
|
{
|
|
171
171
|
id: '1',
|
|
@@ -191,6 +191,6 @@ const GuideComp = ({ guide, canvasDimensions, scale }) => {
|
|
|
191
191
|
},
|
|
192
192
|
];
|
|
193
193
|
}, [clearSelection, guide.id, selected, setGuidesList]);
|
|
194
|
-
return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, {
|
|
194
|
+
return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: jsx_runtime_1.jsx("div", { style: guideStyle, onPointerDown: onPointerDown, onClick: onClick, className: "__remotion_editor_guide", [should_clear_selection_on_pointer_down_1.PREVENT_CLEAR_SELECTION_ON_POINTER_DOWN_ATTR]: 'true', onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, children: jsx_runtime_1.jsx("div", { style: guideContentStyle, className: guideClassName }) }) }));
|
|
195
195
|
};
|
|
196
196
|
exports.default = (0, react_1.memo)(GuideComp);
|