@remotion/studio 4.0.504 → 4.0.506
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 -3
- package/dist/api/install-package.js +1 -3
- package/dist/api/visual-control.d.ts +3 -0
- package/dist/api/visual-control.js +3 -0
- package/dist/components/AssetSelectorItem.js +3 -3
- package/dist/components/AudioWaveform.d.ts +1 -1
- package/dist/components/AudioWaveform.js +36 -3
- package/dist/components/Canvas.js +2 -0
- package/dist/components/CompositionContextButton.d.ts +1 -1
- package/dist/components/CompositionContextButton.js +2 -2
- package/dist/components/CompositionSelector.js +3 -3
- package/dist/components/CompositionSelectorItem.js +5 -5
- package/dist/components/ConfigureDefaultEditorModal.d.ts +3 -1
- package/dist/components/ConfigureDefaultEditorModal.js +90 -32
- package/dist/components/ConfigureLicenseModal.d.ts +2 -1
- package/dist/components/ConfigureLicenseModal.js +40 -32
- package/dist/components/ConfirmationDialog.js +2 -2
- package/dist/components/ContextMenu.d.ts +5 -7
- package/dist/components/ContextMenu.js +54 -21
- package/dist/components/Editor.js +2 -0
- package/dist/components/EditorGuides/Guide.js +2 -2
- package/dist/components/EffectPickerModal.js +3 -3
- package/dist/components/GlobalKeybindings.js +3 -2
- package/dist/components/InlineAction.d.ts +1 -1
- package/dist/components/InlineAction.js +14 -13
- package/dist/components/InlineCaptionInspector.d.ts +2 -2
- package/dist/components/InlineDropdown.d.ts +4 -2
- package/dist/components/InlineDropdown.js +23 -6
- package/dist/components/InspectorOpenInEditor.d.ts +1 -0
- package/dist/components/InspectorOpenInEditor.js +33 -9
- package/dist/components/InspectorPanel/AlignmentControls.js +5 -2
- package/dist/components/InspectorPanel/CompositionInspector.js +15 -1
- package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +3 -3
- package/dist/components/InspectorPanel/EasingInspector.js +7 -4
- package/dist/components/InspectorPanel/KeyframeInspector.js +5 -1
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +1 -1
- package/dist/components/InspectorPanel/common.d.ts +1 -0
- package/dist/components/InspectorPanel/common.js +25 -35
- package/dist/components/InspectorPanel/use-composition-actions.js +4 -1
- package/dist/components/InspectorSequenceSection.js +5 -5
- package/dist/components/InstallPackage.js +1 -1
- package/dist/components/Menu/MenuItem.js +16 -12
- package/dist/components/MenuBuildIndicator.js +12 -58
- package/dist/components/MenuCompositionName.js +3 -63
- package/dist/components/MenuToolbar.js +22 -2
- package/dist/components/ModalFooter.d.ts +1 -0
- package/dist/components/ModalFooter.js +6 -2
- package/dist/components/ModalHeader.js +1 -1
- package/dist/components/Modals.js +18 -7
- package/dist/components/ModalsProvider.js +5 -6
- package/dist/components/NewComposition/CodemodFooter.js +1 -1
- package/dist/components/NewComposition/DismissableModal.js +1 -1
- package/dist/components/NewComposition/InputDragger.d.ts +1 -0
- package/dist/components/NewComposition/InputDragger.js +5 -4
- package/dist/components/NewComposition/MenuContent.d.ts +1 -1
- package/dist/components/NewComposition/RenameStaticFile.js +1 -1
- package/dist/components/NewComposition/menu-typeahead.d.ts +1 -1
- package/dist/components/OverrideInputProps.js +1 -1
- package/dist/components/PlayPause.js +3 -2
- package/dist/components/PlaybackKeyboardShortcutsManager.js +7 -5
- package/dist/components/PlaybackRateSelector.js +3 -9
- package/dist/components/PreviewToolbar.js +7 -4
- package/dist/components/PreviewToolbarOverflowButton.js +4 -2
- package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -1
- package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -1
- package/dist/components/RenderButton.d.ts +3 -2
- package/dist/components/RenderButton.js +95 -43
- package/dist/components/RenderModal/RenderStatusModal.js +1 -1
- package/dist/components/RenderModal/ServerRenderModal.js +1 -1
- package/dist/components/RenderModal/WebRenderModal.js +3 -2
- package/dist/components/RenderQueue/RenderQueueError.js +1 -1
- package/dist/components/RenderQueue/RenderQueueItemStatus.js +1 -1
- package/dist/components/RenderQueue/RenderQueueProgressMessage.js +1 -1
- package/dist/components/RenderQueue/RenderQueueRepeat.js +1 -1
- package/dist/components/SelectedOutlineElement.js +10 -11
- package/dist/components/SelectedOutlineOverlay.js +67 -20
- package/dist/components/SettingsModal.d.ts +7 -0
- package/dist/components/SettingsModal.js +50 -0
- package/dist/components/SettingsModalFooter.d.ts +4 -0
- package/dist/components/SettingsModalFooter.js +46 -0
- package/dist/components/SidebarRenderButton.js +1 -1
- package/dist/components/SizeSelector.js +3 -9
- package/dist/components/SvgImportDialog.js +2 -2
- package/dist/components/TimeValue.js +1 -1
- package/dist/components/Timeline/Timeline.js +5 -4
- package/dist/components/Timeline/TimelineAssetField.js +1 -1
- package/dist/components/Timeline/TimelineDragHandler.js +6 -3
- package/dist/components/Timeline/TimelineEffectItem.js +6 -2
- package/dist/components/Timeline/TimelineEffectPropItem.js +11 -6
- package/dist/components/Timeline/TimelineExpandedKeyframeRow.d.ts +6 -6
- package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +32 -1
- package/dist/components/Timeline/TimelineExpandedRow.d.ts +4 -2
- package/dist/components/Timeline/TimelineExpandedRow.js +2 -2
- package/dist/components/Timeline/TimelineFontFamilyField.js +3 -1
- 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/TimelineKeyframeControls.js +1 -0
- package/dist/components/Timeline/TimelineKeyframeEasingLine.d.ts +4 -2
- package/dist/components/Timeline/TimelineKeyframeEasingLine.js +30 -28
- 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 +1 -0
- package/dist/components/Timeline/TimelineSequence.js +34 -28
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +3 -3
- package/dist/components/Timeline/TimelineSequenceItem.js +61 -56
- 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 +39 -6
- 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 +2 -2
- package/dist/components/Timeline/TimelineZoomControls.js +39 -12
- package/dist/components/Timeline/reset-selected-timeline-props.js +1 -1
- package/dist/components/Timeline/should-subscribe-to-sequence-props.d.ts +1 -1
- package/dist/components/Timeline/timeline-asset-link.d.ts +2 -2
- package/dist/components/Timeline/timeline-asset-link.js +2 -2
- package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +4 -0
- 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 +1 -0
- package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +1 -0
- package/dist/components/Timeline/use-timeline-expanded-tree.js +5 -0
- package/dist/components/Timeline/use-timeline-height.d.ts +2 -1
- package/dist/components/Timeline/use-timeline-height.js +23 -2
- package/dist/components/TimelineCombobox.d.ts +11 -0
- package/dist/components/TimelineCombobox.js +181 -0
- package/dist/components/TimelineInOutToggle.js +5 -1
- package/dist/components/TopPanel.js +22 -7
- package/dist/components/UpdateCheck.js +1 -1
- package/dist/components/effect-drag-and-drop.js +1 -1
- package/dist/components/handle-drop.d.ts +2 -1
- package/dist/components/handle-drop.js +12 -2
- package/dist/components/import-assets.d.ts +18 -6
- package/dist/components/import-assets.js +76 -32
- package/dist/components/selected-outline-types.d.ts +1 -1
- package/dist/esm/{chunk-43m68z1k.js → chunk-b49ec3nz.js} +12436 -11482
- package/dist/esm/internals.mjs +12436 -11482
- package/dist/esm/previewEntry.mjs +9671 -8717
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/client-id.d.ts +3 -1
- package/dist/helpers/client-id.js +21 -4
- package/dist/helpers/hoverable.d.ts +11 -0
- package/dist/helpers/hoverable.js +70 -0
- package/dist/helpers/inject-css.js +3 -0
- package/dist/helpers/install-required-package.d.ts +3 -3
- package/dist/helpers/install-required-package.js +1 -6
- package/dist/helpers/studio-fit-padding.d.ts +1 -1
- package/dist/helpers/studio-fit-padding.js +1 -1
- package/dist/helpers/timeline-layout.d.ts +2 -1
- package/dist/helpers/timeline-layout.js +5 -2
- 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 +26 -43
- package/dist/helpers/use-runtime-values.d.ts +11 -0
- package/dist/helpers/use-runtime-values.js +76 -0
- package/dist/icons/apps.d.ts +2 -0
- package/dist/icons/apps.js +7 -0
- package/dist/icons/browse-elements.d.ts +4 -0
- package/dist/icons/browse-elements.js +10 -0
- package/dist/icons/canvas-zoom.d.ts +10 -0
- package/dist/icons/canvas-zoom.js +21 -0
- package/dist/icons/playback-rate.d.ts +5 -0
- package/dist/icons/playback-rate.js +31 -0
- package/dist/icons/search.d.ts +5 -0
- package/dist/icons/search.js +10 -0
- package/dist/state/modals.d.ts +5 -6
- package/dist/state/modals.js +5 -3
- package/package.json +12 -12
|
@@ -32,12 +32,10 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
36
|
exports.TopPanel = exports.useResponsiveSidebarStatus = void 0;
|
|
40
37
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const player_1 = require("@remotion/player");
|
|
41
39
|
const react_1 = __importStar(require("react"));
|
|
42
40
|
const remotion_1 = require("remotion");
|
|
43
41
|
const mobile_layout_1 = require("../helpers/mobile-layout");
|
|
@@ -48,7 +46,6 @@ const CanvasIfSizeIsAvailable_1 = require("./CanvasIfSizeIsAvailable");
|
|
|
48
46
|
const CurrentCompositionSideEffects_1 = require("./CurrentCompositionSideEffects");
|
|
49
47
|
const use_is_ruler_visible_1 = require("./EditorRuler/use-is-ruler-visible");
|
|
50
48
|
const ExplorerPanel_1 = require("./ExplorerPanel");
|
|
51
|
-
const MobilePanel_1 = __importDefault(require("./MobilePanel"));
|
|
52
49
|
const ObserveDefaultPropsContext_1 = require("./ObserveDefaultPropsContext");
|
|
53
50
|
const OptionsPanel_1 = require("./OptionsPanel");
|
|
54
51
|
const PreviewToolbar_1 = require("./PreviewToolbar");
|
|
@@ -72,8 +69,12 @@ const MAX_SIDEBAR_WIDTH = 350;
|
|
|
72
69
|
const MIN_SIDEBAR_WIDTH = 250;
|
|
73
70
|
const useResponsiveSidebarStatus = () => {
|
|
74
71
|
const { sidebarCollapsedStateLeft } = (0, react_1.useContext)(sidebar_1.SidebarContext);
|
|
72
|
+
const isMobileLayout = (0, mobile_layout_1.useMobileLayout)();
|
|
75
73
|
const responsiveLeftStatus = (0, use_breakpoint_1.useBreakpoint)(1200) ? 'collapsed' : 'expanded';
|
|
76
74
|
const actualStateLeft = (0, react_1.useMemo)(() => {
|
|
75
|
+
if (isMobileLayout) {
|
|
76
|
+
return 'collapsed';
|
|
77
|
+
}
|
|
77
78
|
if (sidebarCollapsedStateLeft === 'collapsed') {
|
|
78
79
|
return 'collapsed';
|
|
79
80
|
}
|
|
@@ -81,7 +82,7 @@ const useResponsiveSidebarStatus = () => {
|
|
|
81
82
|
return 'expanded';
|
|
82
83
|
}
|
|
83
84
|
return responsiveLeftStatus;
|
|
84
|
-
}, [sidebarCollapsedStateLeft, responsiveLeftStatus]);
|
|
85
|
+
}, [isMobileLayout, sidebarCollapsedStateLeft, responsiveLeftStatus]);
|
|
85
86
|
return actualStateLeft;
|
|
86
87
|
};
|
|
87
88
|
exports.useResponsiveSidebarStatus = useResponsiveSidebarStatus;
|
|
@@ -96,6 +97,21 @@ const TopPanelInner = ({ readOnlyStudio, onMounted, drawRef, bufferStateDelayInM
|
|
|
96
97
|
}
|
|
97
98
|
return 'expanded';
|
|
98
99
|
}, [sidebarCollapsedStateRight]);
|
|
100
|
+
const previousSidebarState = (0, react_1.useRef)({
|
|
101
|
+
left: actualStateLeft,
|
|
102
|
+
right: actualStateRight,
|
|
103
|
+
});
|
|
104
|
+
(0, react_1.useLayoutEffect)(() => {
|
|
105
|
+
if (previousSidebarState.current.left === actualStateLeft &&
|
|
106
|
+
previousSidebarState.current.right === actualStateRight) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
previousSidebarState.current = {
|
|
110
|
+
left: actualStateLeft,
|
|
111
|
+
right: actualStateRight,
|
|
112
|
+
};
|
|
113
|
+
player_1.PlayerInternals.updateAllElementsSizes();
|
|
114
|
+
}, [actualStateLeft, actualStateRight]);
|
|
99
115
|
(0, react_1.useEffect)(() => {
|
|
100
116
|
onMounted();
|
|
101
117
|
}, [onMounted]);
|
|
@@ -111,11 +127,10 @@ const TopPanelInner = ({ readOnlyStudio, onMounted, drawRef, bufferStateDelayInM
|
|
|
111
127
|
const onCollapseRight = (0, react_1.useCallback)(() => {
|
|
112
128
|
setSidebarCollapsedState({ left: null, right: 'collapsed' });
|
|
113
129
|
}, [setSidebarCollapsedState]);
|
|
114
|
-
const isMobileLayout = (0, mobile_layout_1.useMobileLayout)();
|
|
115
130
|
return (jsx_runtime_1.jsx(ObserveDefaultPropsContext_1.ObserveDefaultProps, { compositionId: (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'composition'
|
|
116
131
|
? canvasContent.compositionId
|
|
117
132
|
: null, readOnlyStudio: readOnlyStudio, children: jsx_runtime_1.jsxs("div", { style: container, children: [
|
|
118
|
-
jsx_runtime_1.jsx("div", { style: row, children: jsx_runtime_1.jsxs(SplitterContainer_1.SplitterContainer, { minFlex: 0.15, maxFlex: 0.4, defaultFlex: 0.2, maxFlexerSize: MAX_SIDEBAR_WIDTH, minFlexerSize: null, maxAntiFlexerSize: null, minAntiFlexerSize: null, id: "sidebar-to-preview", orientation: "vertical", children: [actualStateLeft === 'expanded' ? (
|
|
133
|
+
jsx_runtime_1.jsx("div", { style: row, children: jsx_runtime_1.jsxs(SplitterContainer_1.SplitterContainer, { minFlex: 0.15, maxFlex: 0.4, defaultFlex: 0.2, maxFlexerSize: MAX_SIDEBAR_WIDTH, minFlexerSize: null, maxAntiFlexerSize: null, minAntiFlexerSize: null, id: "sidebar-to-preview", orientation: "vertical", children: [actualStateLeft === 'expanded' ? (jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { sticky: null, type: "flexer", children: jsx_runtime_1.jsx(ExplorerPanel_1.ExplorerPanel, { readOnlyStudio: readOnlyStudio }) })) : null, actualStateLeft === 'expanded' ? (jsx_runtime_1.jsx(SplitterHandle_1.SplitterHandle, { allowToCollapse: "left", onCollapse: onCollapseLeft })) : null, jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { sticky: null, type: "anti-flexer", children: jsx_runtime_1.jsxs(SplitterContainer_1.SplitterContainer, { minFlex: 0.5, maxFlex: 0.8, defaultFlex: 0.7, maxFlexerSize: null, minFlexerSize: null, maxAntiFlexerSize: MAX_SIDEBAR_WIDTH, minAntiFlexerSize: MIN_SIDEBAR_WIDTH, id: "canvas-to-right-sidebar", orientation: "vertical", children: [
|
|
119
134
|
jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { sticky: null, type: "flexer", children: jsx_runtime_1.jsx("div", { ref: drawRef, style: canvasContainerStyle, children: jsx_runtime_1.jsx(CanvasIfSizeIsAvailable_1.CanvasIfSizeIsAvailable, {}) }) }), actualStateRight === 'expanded' ? (jsx_runtime_1.jsx(SplitterHandle_1.SplitterHandle, { allowToCollapse: "right", onCollapse: onCollapseRight })) : null, actualStateRight === 'expanded' ? (jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { sticky: null, type: "anti-flexer", children: jsx_runtime_1.jsx(OptionsPanel_1.OptionsPanel, { readOnlyStudio: readOnlyStudio }) })) : null] }) })
|
|
120
135
|
] }) }), jsx_runtime_1.jsx(PreviewToolbar_1.PreviewToolbar, { bufferStateDelayInMilliseconds: bufferStateDelayInMilliseconds, readOnlyStudio: readOnlyStudio }), jsx_runtime_1.jsx(CurrentCompositionSideEffects_1.TitleUpdater, {})
|
|
121
136
|
] }) }));
|
|
@@ -27,7 +27,7 @@ const updateIconContainer = {
|
|
|
27
27
|
};
|
|
28
28
|
const UpdateCheck = () => {
|
|
29
29
|
const [info, setInfo] = (0, react_1.useState)(null);
|
|
30
|
-
const { setSelectedModal } = (0, react_1.useContext)(modals_1.
|
|
30
|
+
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
31
31
|
const { tabIndex } = (0, z_index_1.useZIndex)();
|
|
32
32
|
const [knownBugs, setKnownBugs] = (0, react_1.useState)(null);
|
|
33
33
|
const [hovered, setHovered] = (0, react_1.useState)(false);
|
|
@@ -33,7 +33,7 @@ exports.addEffectFromDragData = addEffectFromDragData;
|
|
|
33
33
|
const addEffectToSequence = async ({ clientId, effect, fileName, nodePath, }) => {
|
|
34
34
|
try {
|
|
35
35
|
const requiredPackage = (0, studio_shared_1.getRequiredPackageForEffectImportPath)(effect.importPath);
|
|
36
|
-
await (0, install_required_package_1.installRequiredPackages)(requiredPackage ? [requiredPackage] : []);
|
|
36
|
+
await (0, install_required_package_1.installRequiredPackages)(requiredPackage ? [{ name: requiredPackage, version: null }] : []);
|
|
37
37
|
const result = await (0, call_api_1.callApi)('/api/add-effect', {
|
|
38
38
|
fileName,
|
|
39
39
|
sequenceNodePath: nodePath,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Dimensions } from '../helpers/is-current-selected-still';
|
|
2
2
|
import { type InsertElementDropPosition } from './import-assets';
|
|
3
3
|
import type { SvgImportMode } from './SvgImportDialog';
|
|
4
|
-
export declare const handleDrop: ({ chooseSvgImportMode, compositionFile, compositionId, destinationDimensions, dropPosition, event, fps, from, }: {
|
|
4
|
+
export declare const handleDrop: ({ chooseSvgImportMode, compositionFile, compositionId, destinationDimensions, dropPosition, event, fps, from, preferCompositionStart, }: {
|
|
5
5
|
chooseSvgImportMode: () => Promise<SvgImportMode | null>;
|
|
6
6
|
compositionFile: string;
|
|
7
7
|
compositionId: string;
|
|
@@ -10,4 +10,5 @@ export declare const handleDrop: ({ chooseSvgImportMode, compositionFile, compos
|
|
|
10
10
|
event: DragEvent;
|
|
11
11
|
fps: number;
|
|
12
12
|
from: number | null;
|
|
13
|
+
preferCompositionStart: boolean;
|
|
13
14
|
}) => Promise<void>;
|
|
@@ -6,7 +6,7 @@ const drop_handler_data_1 = require("./drop-handler-data");
|
|
|
6
6
|
const element_drag_and_drop_1 = require("./element-drag-and-drop");
|
|
7
7
|
const element_install_request_1 = require("./element-install-request");
|
|
8
8
|
const import_assets_1 = require("./import-assets");
|
|
9
|
-
const handleDrop = async ({ chooseSvgImportMode, compositionFile, compositionId, destinationDimensions, dropPosition, event, fps, from, }) => {
|
|
9
|
+
const handleDrop = async ({ chooseSvgImportMode, compositionFile, compositionId, destinationDimensions, dropPosition, event, fps, from, preferCompositionStart, }) => {
|
|
10
10
|
var _a;
|
|
11
11
|
var _b;
|
|
12
12
|
if ((0, drop_handler_data_1.isFileDragEvent)(event)) {
|
|
@@ -28,6 +28,7 @@ const handleDrop = async ({ chooseSvgImportMode, compositionFile, compositionId,
|
|
|
28
28
|
files,
|
|
29
29
|
fps,
|
|
30
30
|
from,
|
|
31
|
+
preferCompositionStart,
|
|
31
32
|
svgImportMode,
|
|
32
33
|
});
|
|
33
34
|
return;
|
|
@@ -45,6 +46,7 @@ const handleDrop = async ({ chooseSvgImportMode, compositionFile, compositionId,
|
|
|
45
46
|
dropPosition,
|
|
46
47
|
fps,
|
|
47
48
|
from,
|
|
49
|
+
preferCompositionStart,
|
|
48
50
|
});
|
|
49
51
|
return;
|
|
50
52
|
}
|
|
@@ -58,6 +60,7 @@ const handleDrop = async ({ chooseSvgImportMode, compositionFile, compositionId,
|
|
|
58
60
|
compositionId,
|
|
59
61
|
fps,
|
|
60
62
|
from,
|
|
63
|
+
preferCompositionStart,
|
|
61
64
|
url: sfxUrl,
|
|
62
65
|
});
|
|
63
66
|
return;
|
|
@@ -73,6 +76,7 @@ const handleDrop = async ({ chooseSvgImportMode, compositionFile, compositionId,
|
|
|
73
76
|
compositionId,
|
|
74
77
|
dropPosition,
|
|
75
78
|
from,
|
|
79
|
+
preferCompositionStart,
|
|
76
80
|
});
|
|
77
81
|
return;
|
|
78
82
|
}
|
|
@@ -85,7 +89,11 @@ const handleDrop = async ({ chooseSvgImportMode, compositionFile, compositionId,
|
|
|
85
89
|
compositionFile,
|
|
86
90
|
compositionId,
|
|
87
91
|
element: element.element,
|
|
88
|
-
from,
|
|
92
|
+
from: (0, import_assets_1.getFromForDrop)({
|
|
93
|
+
durationInFrames: element.element.durationInFrames,
|
|
94
|
+
from,
|
|
95
|
+
preferCompositionStart,
|
|
96
|
+
}),
|
|
89
97
|
position: (0, import_assets_1.getElementPositionForDrop)({
|
|
90
98
|
dimensions: element.element.dimensions,
|
|
91
99
|
dropPosition,
|
|
@@ -102,6 +110,7 @@ const handleDrop = async ({ chooseSvgImportMode, compositionFile, compositionId,
|
|
|
102
110
|
compositionId,
|
|
103
111
|
dropPosition,
|
|
104
112
|
from,
|
|
113
|
+
preferCompositionStart,
|
|
105
114
|
});
|
|
106
115
|
return;
|
|
107
116
|
}
|
|
@@ -116,6 +125,7 @@ const handleDrop = async ({ chooseSvgImportMode, compositionFile, compositionId,
|
|
|
116
125
|
dropPosition,
|
|
117
126
|
fps,
|
|
118
127
|
from,
|
|
128
|
+
preferCompositionStart,
|
|
119
129
|
url: remoteAssetUrl,
|
|
120
130
|
});
|
|
121
131
|
};
|
|
@@ -5,6 +5,11 @@ export type InsertElementDropPosition = {
|
|
|
5
5
|
readonly centerX: number;
|
|
6
6
|
readonly centerY: number;
|
|
7
7
|
};
|
|
8
|
+
export declare const getFromForDrop: ({ durationInFrames, from, preferCompositionStart, }: {
|
|
9
|
+
durationInFrames: number | null | undefined;
|
|
10
|
+
from: number | null;
|
|
11
|
+
preferCompositionStart: boolean | null;
|
|
12
|
+
}) => number | null;
|
|
8
13
|
export declare const getAssetElement: ({ fileType, src, }: {
|
|
9
14
|
fileType: FileType;
|
|
10
15
|
src: string;
|
|
@@ -75,7 +80,7 @@ export declare const getDurationInFrames: ({ durationInSeconds, fps, }: {
|
|
|
75
80
|
export declare const pickFilesToImport: ({ multiple, }?: {
|
|
76
81
|
readonly multiple?: boolean | undefined;
|
|
77
82
|
}) => Promise<File[]>;
|
|
78
|
-
export declare const importAssets: ({ compositionFile, compositionId, destinationDimensions, dropPosition, files, fps, from, svgImportMode, }: {
|
|
83
|
+
export declare const importAssets: ({ compositionFile, compositionId, destinationDimensions, dropPosition, files, fps, from, preferCompositionStart, svgImportMode, }: {
|
|
79
84
|
compositionFile: string;
|
|
80
85
|
compositionId: string;
|
|
81
86
|
destinationDimensions: Dimensions | null;
|
|
@@ -83,6 +88,7 @@ export declare const importAssets: ({ compositionFile, compositionId, destinatio
|
|
|
83
88
|
files: File[];
|
|
84
89
|
fps: number;
|
|
85
90
|
from: number | null;
|
|
91
|
+
preferCompositionStart: boolean | null;
|
|
86
92
|
svgImportMode: "image" | "inline";
|
|
87
93
|
}) => Promise<void>;
|
|
88
94
|
export declare const importFigmaClipboard: ({ compositionFile, compositionId, destinationDimensions, dropPosition, html, }: {
|
|
@@ -99,23 +105,25 @@ export declare const insertSvgMarkup: ({ compositionFile, compositionId, destina
|
|
|
99
105
|
dropPosition: InsertElementDropPosition | null;
|
|
100
106
|
markup: string;
|
|
101
107
|
}) => Promise<void>;
|
|
102
|
-
export declare const importRemoteAsset: ({ compositionFile, compositionId, destinationDimensions, dropPosition, fps, from, url, }: {
|
|
108
|
+
export declare const importRemoteAsset: ({ compositionFile, compositionId, destinationDimensions, dropPosition, fps, from, preferCompositionStart, url, }: {
|
|
103
109
|
compositionFile: string;
|
|
104
110
|
compositionId: string;
|
|
105
111
|
destinationDimensions: Dimensions | null;
|
|
106
112
|
dropPosition: InsertElementDropPosition | null;
|
|
107
113
|
fps: number;
|
|
108
114
|
from: number | null;
|
|
115
|
+
preferCompositionStart: boolean | null;
|
|
109
116
|
url: string;
|
|
110
117
|
}) => Promise<void>;
|
|
111
|
-
export declare const insertRemoteAudio: ({ compositionFile, compositionId, fps, from, url, }: {
|
|
118
|
+
export declare const insertRemoteAudio: ({ compositionFile, compositionId, fps, from, preferCompositionStart, url, }: {
|
|
112
119
|
compositionFile: string;
|
|
113
120
|
compositionId: string;
|
|
114
121
|
fps: number;
|
|
115
122
|
from: number | null;
|
|
123
|
+
preferCompositionStart: boolean | null;
|
|
116
124
|
url: string;
|
|
117
125
|
}) => Promise<void>;
|
|
118
|
-
export declare const insertExistingAssets: ({ assetPaths, compositionFile, compositionId, destinationDimensions, dropPosition, fps, from, }: {
|
|
126
|
+
export declare const insertExistingAssets: ({ assetPaths, compositionFile, compositionId, destinationDimensions, dropPosition, fps, from, preferCompositionStart, }: {
|
|
119
127
|
assetPaths: string[];
|
|
120
128
|
compositionFile: string;
|
|
121
129
|
compositionId: string;
|
|
@@ -123,8 +131,9 @@ export declare const insertExistingAssets: ({ assetPaths, compositionFile, compo
|
|
|
123
131
|
dropPosition: InsertElementDropPosition | null;
|
|
124
132
|
fps: number;
|
|
125
133
|
from: number | null;
|
|
134
|
+
preferCompositionStart: boolean | null;
|
|
126
135
|
}) => Promise<void>;
|
|
127
|
-
export declare const insertComponent: ({ component, compositionFile, compositionId, dropPosition, from, }: {
|
|
136
|
+
export declare const insertComponent: ({ component, compositionFile, compositionId, dropPosition, from, preferCompositionStart, }: {
|
|
128
137
|
component: {
|
|
129
138
|
componentName: string;
|
|
130
139
|
dimensions?: import("@remotion/studio-protocol").ComponentDimensions | undefined;
|
|
@@ -136,13 +145,15 @@ export declare const insertComponent: ({ component, compositionFile, composition
|
|
|
136
145
|
compositionId: string;
|
|
137
146
|
dropPosition: InsertElementDropPosition | null;
|
|
138
147
|
from: number | null;
|
|
148
|
+
preferCompositionStart: boolean | null;
|
|
139
149
|
}) => Promise<void>;
|
|
140
|
-
export declare const insertComposition: ({ composition, compositionFile, compositionId, dropPosition, from, }: {
|
|
150
|
+
export declare const insertComposition: ({ composition, compositionFile, compositionId, dropPosition, from, preferCompositionStart, }: {
|
|
141
151
|
composition: CompositionDragData;
|
|
142
152
|
compositionFile: string;
|
|
143
153
|
compositionId: string;
|
|
144
154
|
dropPosition: InsertElementDropPosition | null;
|
|
145
155
|
from: number | null;
|
|
156
|
+
preferCompositionStart: boolean | null;
|
|
146
157
|
}) => Promise<void>;
|
|
147
158
|
export declare const insertElement: ({ compositionFile, compositionId, element, expectedFileState, position, from, overwriteExisting, }: {
|
|
148
159
|
compositionFile: string;
|
|
@@ -150,6 +161,7 @@ export declare const insertElement: ({ compositionFile, compositionId, element,
|
|
|
150
161
|
element: {
|
|
151
162
|
dependencies: import("@remotion/studio-protocol").ElementDependency[];
|
|
152
163
|
durationInFrames?: number | undefined;
|
|
164
|
+
installationMode?: import("@remotion/studio-protocol").ElementInstallationMode | undefined;
|
|
153
165
|
slug: string;
|
|
154
166
|
displayName: string;
|
|
155
167
|
sourceCode: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.insertElement = exports.insertComposition = exports.insertComponent = exports.insertExistingAssets = exports.insertRemoteAudio = exports.importRemoteAsset = exports.insertSvgMarkup = exports.importFigmaClipboard = exports.importAssets = exports.pickFilesToImport = exports.getDurationInFrames = exports.getComponentDimensions = exports.getAssetPositionForDrop = exports.getCompositionPositionForDrop = exports.getElementPositionForDrop = exports.hasSvgFile = exports.getAssetElementForDroppedFile = exports.getAssetElementFromPath = exports.getAssetElement = void 0;
|
|
3
|
+
exports.insertElement = exports.insertComposition = exports.insertComponent = exports.insertExistingAssets = exports.insertRemoteAudio = exports.importRemoteAsset = exports.insertSvgMarkup = exports.importFigmaClipboard = exports.importAssets = exports.pickFilesToImport = exports.getDurationInFrames = exports.getComponentDimensions = exports.getAssetPositionForDrop = exports.getCompositionPositionForDrop = exports.getElementPositionForDrop = exports.hasSvgFile = exports.getAssetElementForDroppedFile = exports.getAssetElementFromPath = exports.getAssetElement = exports.getFromForDrop = void 0;
|
|
4
4
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
5
5
|
const remotion_1 = require("remotion");
|
|
6
6
|
const no_react_1 = require("remotion/no-react");
|
|
@@ -11,6 +11,19 @@ const install_required_package_1 = require("../helpers/install-required-package"
|
|
|
11
11
|
const use_media_metadata_1 = require("../helpers/use-media-metadata");
|
|
12
12
|
const call_api_1 = require("./call-api");
|
|
13
13
|
const NotificationCenter_1 = require("./Notifications/NotificationCenter");
|
|
14
|
+
const getFromForDrop = ({ durationInFrames, from, preferCompositionStart, }) => {
|
|
15
|
+
if (preferCompositionStart !== true) {
|
|
16
|
+
return from;
|
|
17
|
+
}
|
|
18
|
+
if (durationInFrames !== null &&
|
|
19
|
+
durationInFrames !== undefined &&
|
|
20
|
+
from !== null &&
|
|
21
|
+
from >= durationInFrames) {
|
|
22
|
+
return from;
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
};
|
|
26
|
+
exports.getFromForDrop = getFromForDrop;
|
|
14
27
|
const getAssetElement = ({ fileType, src, }) => {
|
|
15
28
|
if (fileType.type === 'webp' && fileType.animated) {
|
|
16
29
|
return {
|
|
@@ -496,7 +509,7 @@ const insertCompositionElement = async ({ compositionFile, compositionId, elemen
|
|
|
496
509
|
const downloadRemoteAsset = (url) => {
|
|
497
510
|
return (0, call_api_1.callApi)('/api/download-remote-asset', { url });
|
|
498
511
|
};
|
|
499
|
-
const importAssets = async ({ compositionFile, compositionId, destinationDimensions, dropPosition, files, fps, from, svgImportMode, }) => {
|
|
512
|
+
const importAssets = async ({ compositionFile, compositionId, destinationDimensions, dropPosition, files, fps, from, preferCompositionStart, svgImportMode, }) => {
|
|
500
513
|
var _a;
|
|
501
514
|
if (files.length === 0) {
|
|
502
515
|
return;
|
|
@@ -534,7 +547,11 @@ const importAssets = async ({ compositionFile, compositionId, destinationDimensi
|
|
|
534
547
|
const svgInserted = await insertCompositionElement({
|
|
535
548
|
compositionFile,
|
|
536
549
|
compositionId,
|
|
537
|
-
from,
|
|
550
|
+
from: (0, exports.getFromForDrop)({
|
|
551
|
+
durationInFrames: null,
|
|
552
|
+
from,
|
|
553
|
+
preferCompositionStart,
|
|
554
|
+
}),
|
|
538
555
|
element: {
|
|
539
556
|
type: 'svg',
|
|
540
557
|
markup: new TextDecoder().decode(contents),
|
|
@@ -570,19 +587,24 @@ const importAssets = async ({ compositionFile, compositionId, destinationDimensi
|
|
|
570
587
|
addedStaticFiles.push(file.name);
|
|
571
588
|
}
|
|
572
589
|
const resolvedDimensions = (_a = element.dimensions) !== null && _a !== void 0 ? _a : metadata.dimensions;
|
|
590
|
+
const durationInFrames = assetTypeHasDuration(element.assetType)
|
|
591
|
+
? (0, exports.getDurationInFrames)({
|
|
592
|
+
durationInSeconds: metadata.durationInSeconds,
|
|
593
|
+
fps,
|
|
594
|
+
})
|
|
595
|
+
: null;
|
|
573
596
|
const inserted = await insertCompositionElement({
|
|
574
597
|
compositionFile,
|
|
575
598
|
compositionId,
|
|
576
|
-
from,
|
|
599
|
+
from: (0, exports.getFromForDrop)({
|
|
600
|
+
durationInFrames,
|
|
601
|
+
from,
|
|
602
|
+
preferCompositionStart,
|
|
603
|
+
}),
|
|
577
604
|
element: {
|
|
578
605
|
...element,
|
|
579
606
|
dimensions: resolvedDimensions,
|
|
580
|
-
durationInFrames
|
|
581
|
-
? (0, exports.getDurationInFrames)({
|
|
582
|
-
durationInSeconds: metadata.durationInSeconds,
|
|
583
|
-
fps,
|
|
584
|
-
})
|
|
585
|
-
: null,
|
|
607
|
+
durationInFrames,
|
|
586
608
|
position: (0, exports.getAssetPositionForDrop)({
|
|
587
609
|
assetDimensions: resolvedDimensions,
|
|
588
610
|
destinationDimensions,
|
|
@@ -663,7 +685,7 @@ const insertSvgMarkup = async ({ compositionFile, compositionId, destinationDime
|
|
|
663
685
|
}
|
|
664
686
|
};
|
|
665
687
|
exports.insertSvgMarkup = insertSvgMarkup;
|
|
666
|
-
const importRemoteAsset = async ({ compositionFile, compositionId, destinationDimensions, dropPosition, fps, from, url, }) => {
|
|
688
|
+
const importRemoteAsset = async ({ compositionFile, compositionId, destinationDimensions, dropPosition, fps, from, preferCompositionStart, url, }) => {
|
|
667
689
|
var _a;
|
|
668
690
|
try {
|
|
669
691
|
const { assetPath, created, element } = await downloadRemoteAsset(url);
|
|
@@ -676,19 +698,24 @@ const importRemoteAsset = async ({ compositionFile, compositionId, destinationDi
|
|
|
676
698
|
}
|
|
677
699
|
const metadata = await getStaticAssetMetadataOrNull(assetPath, element.assetType);
|
|
678
700
|
const dimensions = (_a = element.dimensions) !== null && _a !== void 0 ? _a : metadata.dimensions;
|
|
701
|
+
const durationInFrames = assetTypeHasDuration(element.assetType)
|
|
702
|
+
? (0, exports.getDurationInFrames)({
|
|
703
|
+
durationInSeconds: metadata.durationInSeconds,
|
|
704
|
+
fps,
|
|
705
|
+
})
|
|
706
|
+
: null;
|
|
679
707
|
const inserted = await insertCompositionElement({
|
|
680
708
|
compositionFile,
|
|
681
709
|
compositionId,
|
|
682
|
-
from,
|
|
710
|
+
from: (0, exports.getFromForDrop)({
|
|
711
|
+
durationInFrames,
|
|
712
|
+
from,
|
|
713
|
+
preferCompositionStart,
|
|
714
|
+
}),
|
|
683
715
|
element: {
|
|
684
716
|
...element,
|
|
685
717
|
dimensions,
|
|
686
|
-
durationInFrames
|
|
687
|
-
? (0, exports.getDurationInFrames)({
|
|
688
|
-
durationInSeconds: metadata.durationInSeconds,
|
|
689
|
-
fps,
|
|
690
|
-
})
|
|
691
|
-
: null,
|
|
718
|
+
durationInFrames,
|
|
692
719
|
position: (0, exports.getAssetPositionForDrop)({
|
|
693
720
|
assetDimensions: dimensions,
|
|
694
721
|
destinationDimensions,
|
|
@@ -706,7 +733,7 @@ const importRemoteAsset = async ({ compositionFile, compositionId, destinationDi
|
|
|
706
733
|
}
|
|
707
734
|
};
|
|
708
735
|
exports.importRemoteAsset = importRemoteAsset;
|
|
709
|
-
const insertRemoteAudio = async ({ compositionFile, compositionId, fps, from, url, }) => {
|
|
736
|
+
const insertRemoteAudio = async ({ compositionFile, compositionId, fps, from, preferCompositionStart, url, }) => {
|
|
710
737
|
if (!(0, studio_shared_1.isUrl)(url)) {
|
|
711
738
|
(0, NotificationCenter_1.showNotification)('Cannot add sound effect: Unsupported URL', 3000);
|
|
712
739
|
return;
|
|
@@ -729,7 +756,11 @@ const insertRemoteAudio = async ({ compositionFile, compositionId, fps, from, ur
|
|
|
729
756
|
compositionFile,
|
|
730
757
|
compositionId,
|
|
731
758
|
element,
|
|
732
|
-
from,
|
|
759
|
+
from: (0, exports.getFromForDrop)({
|
|
760
|
+
durationInFrames: element.durationInFrames,
|
|
761
|
+
from,
|
|
762
|
+
preferCompositionStart,
|
|
763
|
+
}),
|
|
733
764
|
});
|
|
734
765
|
if (!inserted) {
|
|
735
766
|
return;
|
|
@@ -741,7 +772,7 @@ const insertRemoteAudio = async ({ compositionFile, compositionId, fps, from, ur
|
|
|
741
772
|
}
|
|
742
773
|
};
|
|
743
774
|
exports.insertRemoteAudio = insertRemoteAudio;
|
|
744
|
-
const insertExistingAssets = async ({ assetPaths, compositionFile, compositionId, destinationDimensions, dropPosition, fps, from, }) => {
|
|
775
|
+
const insertExistingAssets = async ({ assetPaths, compositionFile, compositionId, destinationDimensions, dropPosition, fps, from, preferCompositionStart, }) => {
|
|
745
776
|
var _a;
|
|
746
777
|
if (assetPaths.length === 0) {
|
|
747
778
|
return;
|
|
@@ -757,19 +788,24 @@ const insertExistingAssets = async ({ assetPaths, compositionFile, compositionId
|
|
|
757
788
|
}
|
|
758
789
|
const metadata = await getStaticAssetMetadataOrNull(assetPath, element.assetType);
|
|
759
790
|
const dimensions = (_a = element.dimensions) !== null && _a !== void 0 ? _a : metadata.dimensions;
|
|
791
|
+
const durationInFrames = assetTypeHasDuration(element.assetType)
|
|
792
|
+
? (0, exports.getDurationInFrames)({
|
|
793
|
+
durationInSeconds: metadata.durationInSeconds,
|
|
794
|
+
fps,
|
|
795
|
+
})
|
|
796
|
+
: null;
|
|
760
797
|
const inserted = await insertCompositionElement({
|
|
761
798
|
compositionFile,
|
|
762
799
|
compositionId,
|
|
763
|
-
from,
|
|
800
|
+
from: (0, exports.getFromForDrop)({
|
|
801
|
+
durationInFrames,
|
|
802
|
+
from,
|
|
803
|
+
preferCompositionStart,
|
|
804
|
+
}),
|
|
764
805
|
element: {
|
|
765
806
|
...element,
|
|
766
807
|
dimensions,
|
|
767
|
-
durationInFrames
|
|
768
|
-
? (0, exports.getDurationInFrames)({
|
|
769
|
-
durationInSeconds: metadata.durationInSeconds,
|
|
770
|
-
fps,
|
|
771
|
-
})
|
|
772
|
-
: null,
|
|
808
|
+
durationInFrames,
|
|
773
809
|
position: (0, exports.getAssetPositionForDrop)({
|
|
774
810
|
assetDimensions: dimensions,
|
|
775
811
|
destinationDimensions,
|
|
@@ -790,12 +826,16 @@ const insertExistingAssets = async ({ assetPaths, compositionFile, compositionId
|
|
|
790
826
|
}
|
|
791
827
|
};
|
|
792
828
|
exports.insertExistingAssets = insertExistingAssets;
|
|
793
|
-
const insertComponent = async ({ component, compositionFile, compositionId, dropPosition, from, }) => {
|
|
829
|
+
const insertComponent = async ({ component, compositionFile, compositionId, dropPosition, from, preferCompositionStart, }) => {
|
|
794
830
|
try {
|
|
795
831
|
const inserted = await insertCompositionElement({
|
|
796
832
|
compositionFile,
|
|
797
833
|
compositionId,
|
|
798
|
-
from,
|
|
834
|
+
from: (0, exports.getFromForDrop)({
|
|
835
|
+
durationInFrames: null,
|
|
836
|
+
from,
|
|
837
|
+
preferCompositionStart,
|
|
838
|
+
}),
|
|
799
839
|
element: {
|
|
800
840
|
type: 'component',
|
|
801
841
|
componentName: component.componentName,
|
|
@@ -825,7 +865,7 @@ const serializeResolvedPropsForSourceCode = (props) => {
|
|
|
825
865
|
staticBase: window.remotion_staticBase,
|
|
826
866
|
}).serializedString;
|
|
827
867
|
};
|
|
828
|
-
const insertComposition = async ({ composition, compositionFile, compositionId, dropPosition, from, }) => {
|
|
868
|
+
const insertComposition = async ({ composition, compositionFile, compositionId, dropPosition, from, preferCompositionStart, }) => {
|
|
829
869
|
if (composition.compositionId === compositionId) {
|
|
830
870
|
(0, NotificationCenter_1.showNotification)('Cannot add a composition to itself', 3000);
|
|
831
871
|
return;
|
|
@@ -847,7 +887,11 @@ const insertComposition = async ({ composition, compositionFile, compositionId,
|
|
|
847
887
|
const inserted = await insertCompositionElement({
|
|
848
888
|
compositionFile,
|
|
849
889
|
compositionId,
|
|
850
|
-
from,
|
|
890
|
+
from: (0, exports.getFromForDrop)({
|
|
891
|
+
durationInFrames: calculated.durationInFrames,
|
|
892
|
+
from,
|
|
893
|
+
preferCompositionStart,
|
|
894
|
+
}),
|
|
851
895
|
element: {
|
|
852
896
|
type: 'composition',
|
|
853
897
|
compositionId: composition.compositionId,
|
|
@@ -3,7 +3,7 @@ import type { SequenceNodePathInfo } from '../helpers/get-timeline-sequence-sort
|
|
|
3
3
|
import type { ComboboxValue } from './NewComposition/ComboBox';
|
|
4
4
|
import type { SelectedOutlineUvHandle } from './selected-outline-uv';
|
|
5
5
|
import type { TimelineSelection } from './Timeline/TimelineSelection';
|
|
6
|
-
export type SelectedOutlineContextMenuOpenResult = false |
|
|
6
|
+
export type SelectedOutlineContextMenuOpenResult = false | readonly ComboboxValue[];
|
|
7
7
|
export type SelectedOutlineContextMenuOpenHandler = () => SelectedOutlineContextMenuOpenResult | Promise<SelectedOutlineContextMenuOpenResult>;
|
|
8
8
|
export type SelectedOutlineTarget = {
|
|
9
9
|
readonly key: string;
|