@remotion/studio 4.0.506 → 4.0.508
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/FastRefreshProvider.js +13 -9
- package/dist/api/copy-render-output-to-asset.d.ts +4 -0
- package/dist/api/copy-render-output-to-asset.js +11 -0
- package/dist/components/AssetSelector.js +19 -4
- package/dist/components/AssetSelectorItem.js +2 -2
- package/dist/components/CodingAgentIcon.d.ts +6 -0
- package/dist/components/CodingAgentIcon.js +12 -0
- package/dist/components/ConfigureDefaultEditorModal.d.ts +1 -3
- package/dist/components/ConfigureDefaultEditorModal.js +67 -77
- package/dist/components/ConfigureLicenseModal.d.ts +1 -4
- package/dist/components/ConfigureLicenseModal.js +89 -81
- package/dist/components/ContextMenu.d.ts +1 -0
- package/dist/components/ContextMenu.js +42 -13
- package/dist/components/EditorContent.js +4 -3
- package/dist/components/EditorContexts.js +6 -5
- package/dist/components/ExpandedTracksProvider.js +10 -53
- package/dist/components/InlineAction.d.ts +2 -1
- package/dist/components/InlineAction.js +3 -3
- package/dist/components/InspectorLocationCopy.js +8 -8
- package/dist/components/InspectorOpenInEditor.d.ts +2 -0
- package/dist/components/InspectorOpenInEditor.js +81 -50
- package/dist/components/InspectorPanel/AlignmentControls.js +2 -2
- package/dist/components/InspectorPanel/CompositionInspector.js +3 -1
- package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -0
- package/dist/components/InspectorPanel/SequenceInspectorHeader.js +22 -4
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +1 -1
- package/dist/components/InspectorPanel/styles.js +1 -1
- package/dist/components/InspectorSequenceSection.js +36 -4
- package/dist/components/Menu/MenuSectionHeader.d.ts +4 -0
- package/dist/components/Menu/MenuSectionHeader.js +20 -0
- package/dist/components/Menu/SubMenu.js +13 -2
- package/dist/components/Menu/menu-tree-context.d.ts +3 -0
- package/dist/components/Menu/menu-tree-context.js +13 -0
- package/dist/components/MenuBuildIndicator.js +1 -1
- package/dist/components/NewComposition/ComboBox.d.ts +6 -1
- package/dist/components/NewComposition/MenuContent.js +27 -19
- package/dist/components/NewComposition/menu-typeahead.js +2 -2
- package/dist/components/PlayPause.d.ts +1 -1
- package/dist/components/PlayPause.js +61 -12
- package/dist/components/Preview.js +29 -4
- package/dist/components/RenderButton.js +16 -12
- package/dist/components/RenderModal/GuiRenderStatus.js +23 -6
- package/dist/components/RenderModal/InfoBubble.d.ts +1 -0
- package/dist/components/RenderModal/InfoBubble.js +6 -4
- package/dist/components/RenderModal/InfoTooltip.d.ts +1 -0
- package/dist/components/RenderModal/InfoTooltip.js +12 -12
- package/dist/components/RenderModal/SchemaEditor/SchemaLabel.d.ts +5 -0
- package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +16 -3
- package/dist/components/RenderModal/SchemaEditor/ZodArrayEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodBooleanEditor.d.ts +2 -0
- package/dist/components/RenderModal/SchemaEditor/ZodBooleanEditor.js +3 -2
- package/dist/components/RenderModal/SchemaEditor/ZodColorEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodDateEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +2 -1
- package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.d.ts +1 -0
- package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +3 -3
- package/dist/components/RenderModal/SchemaEditor/ZodMatrixEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodNumberEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodObjectEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +8 -3
- package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodStringEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodSwitch.js +2 -2
- package/dist/components/RenderModal/SchemaEditor/ZodTextareaEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodTupleEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/zod-schema-type.d.ts +1 -0
- package/dist/components/RenderModal/SchemaEditor/zod-schema-type.js +12 -1
- package/dist/components/RenderModal/ServerRenderModal.js +4 -0
- package/dist/components/RenderQueue/RenderQueueItem.js +8 -2
- package/dist/components/RenderQueue/actions.d.ts +4 -2
- package/dist/components/RenderQueue/actions.js +4 -2
- package/dist/components/RenderQueue/index.js +3 -4
- package/dist/components/RenderQueue/use-render-output-file-drag.d.ts +8 -0
- package/dist/components/RenderQueue/use-render-output-file-drag.js +121 -0
- package/dist/components/SegmentedControl.js +0 -1
- package/dist/components/SelectedOutlineCanvasRotation.d.ts +9 -0
- package/dist/components/SelectedOutlineCanvasRotation.js +237 -0
- package/dist/components/SelectedOutlineElement.d.ts +16 -18
- package/dist/components/SelectedOutlineElement.js +144 -931
- package/dist/components/SelectedOutlineKeyboardControls.d.ts +7 -0
- package/dist/components/SelectedOutlineKeyboardControls.js +261 -0
- package/dist/components/SelectedOutlineOverlay.d.ts +7 -14
- package/dist/components/SelectedOutlineOverlay.js +378 -864
- package/dist/components/SelectedOutlinePolygon.d.ts +26 -0
- package/dist/components/SelectedOutlinePolygon.js +360 -0
- package/dist/components/SelectedOutlineRenderer.d.ts +19 -0
- package/dist/components/SelectedOutlineRenderer.js +225 -0
- package/dist/components/SelectedOutlineRotationCornerHandle.d.ts +17 -0
- package/dist/components/SelectedOutlineRotationCornerHandle.js +271 -0
- package/dist/components/SelectedOutlineScaleEdgeLine.d.ts +17 -0
- package/dist/components/SelectedOutlineScaleEdgeLine.js +215 -0
- package/dist/components/SelectedOutlineSnapIndicators.d.ts +9 -0
- package/dist/components/SelectedOutlineSnapIndicators.js +29 -0
- package/dist/components/SelectedOutlineTransformOriginHandle.d.ts +9 -0
- package/dist/components/SelectedOutlineTransformOriginHandle.js +312 -0
- package/dist/components/SelectedOutlineUvControls.d.ts +3 -9
- package/dist/components/SelectedOutlineUvControls.js +57 -12
- package/dist/components/SequencePropsSubscriptionProvider.js +8 -0
- package/dist/components/SettingsContext.d.ts +15 -0
- package/dist/components/SettingsContext.js +116 -0
- package/dist/components/SettingsModal.js +10 -4
- package/dist/components/SettingsModalFooter.d.ts +1 -3
- package/dist/components/SettingsModalFooter.js +4 -6
- package/dist/components/ShowOutlinesProvider.js +2 -3
- package/dist/components/Timeline/EasingEditorModal.js +66 -22
- package/dist/components/Timeline/SequencePropsObserver.js +97 -1
- package/dist/components/Timeline/SubscribeToNodePaths.js +4 -2
- package/dist/components/Timeline/Timeline.js +22 -5
- package/dist/components/Timeline/TimelineDuplicateCount.d.ts +4 -0
- package/dist/components/Timeline/TimelineDuplicateCount.js +28 -0
- package/dist/components/Timeline/TimelineEffectItem.js +1 -4
- package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +3 -23
- package/dist/components/Timeline/TimelineExpandedTrackKeyframes.d.ts +4 -2
- package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +11 -1
- package/dist/components/Timeline/TimelineFieldRowContent.js +10 -3
- package/dist/components/Timeline/TimelineRotationField.js +84 -12
- package/dist/components/Timeline/TimelineScaleField.js +58 -4
- package/dist/components/Timeline/TimelineSelection.d.ts +4 -0
- package/dist/components/Timeline/TimelineSelection.js +45 -2
- package/dist/components/Timeline/TimelineSequence.js +28 -25
- package/dist/components/Timeline/TimelineSequenceItem.js +91 -28
- package/dist/components/Timeline/TimelineSequencePropItem.js +5 -2
- package/dist/components/Timeline/TimelineTrack.js +2 -1
- package/dist/components/Timeline/TimelineTransformOriginField.js +78 -4
- package/dist/components/Timeline/TimelineTranslateField.js +55 -15
- package/dist/components/Timeline/Transform3DModeContext.d.ts +1 -0
- package/dist/components/Timeline/Transform3DModeContext.js +5 -0
- package/dist/components/Timeline/delete-selected-timeline-item.js +0 -6
- package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +6 -3
- package/dist/components/Timeline/get-sequence-context-menu-items.js +69 -57
- package/dist/components/Timeline/sequence-props-subscription-store.d.ts +2 -1
- package/dist/components/Timeline/sequence-props-subscription-store.js +5 -2
- package/dist/components/Timeline/timeline-field-display-utils.js +2 -2
- package/dist/components/Timeline/timeline-field-row-layout.d.ts +6 -0
- package/dist/components/Timeline/timeline-field-row-layout.js +16 -1
- package/dist/components/Timeline/timeline-rotation-utils.d.ts +16 -0
- package/dist/components/Timeline/timeline-rotation-utils.js +145 -4
- package/dist/components/Timeline/timeline-translate-utils.d.ts +3 -2
- package/dist/components/Timeline/timeline-translate-utils.js +8 -4
- package/dist/components/Timeline/transform-3d-mode.d.ts +6 -0
- package/dist/components/Timeline/transform-3d-mode.js +36 -0
- package/dist/components/Timeline/transform-origin-utils.d.ts +4 -0
- package/dist/components/Timeline/transform-origin-utils.js +12 -6
- package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +36 -4
- package/dist/components/Timeline/{use-open-sequence-in-editor.d.ts → use-open-sequence-in-apps.d.ts} +4 -1
- package/dist/components/Timeline/{use-open-sequence-in-editor.js → use-open-sequence-in-apps.js} +21 -5
- package/dist/components/Timeline/use-resolved-stack-react-to-change.d.ts +5 -1
- package/dist/components/Timeline/use-resolved-stack-react-to-change.js +45 -9
- package/dist/components/Timeline/use-sequence-props-subscription.d.ts +3 -1
- package/dist/components/Timeline/use-sequence-props-subscription.js +7 -2
- package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +4 -0
- package/dist/components/Timeline/use-timeline-expanded-tree.js +45 -1
- package/dist/components/call-api.js +2 -0
- package/dist/components/canvas-rotation-cursor.d.ts +1 -0
- package/dist/components/canvas-rotation-cursor.js +14 -0
- package/dist/components/get-open-in-menu-items.d.ts +17 -0
- package/dist/components/get-open-in-menu-items.js +144 -0
- package/dist/components/selected-outline-drag.d.ts +11 -5
- package/dist/components/selected-outline-drag.js +80 -42
- package/dist/components/selected-outline-measurement.d.ts +7 -2
- package/dist/components/selected-outline-measurement.js +28 -1
- package/dist/components/selected-outline-order.d.ts +12 -0
- package/dist/components/selected-outline-order.js +251 -0
- package/dist/components/selected-outline-types.d.ts +15 -10
- package/dist/components/svg-point-to-client-point.d.ts +2 -0
- package/dist/components/svg-point-to-client-point.js +10 -0
- package/dist/components/use-auto-save-config.d.ts +8 -0
- package/dist/components/use-auto-save-config.js +74 -0
- package/dist/components/use-default-editor-info.d.ts +1 -0
- package/dist/components/use-default-editor-info.js +10 -30
- package/dist/esm/{chunk-jefhcs5z.js → chunk-fgedsvhb.js} +1 -2
- package/dist/esm/{chunk-b49ec3nz.js → chunk-zpn4m49r.js} +12924 -10139
- package/dist/esm/index.mjs +357 -2
- package/dist/esm/internals.mjs +12923 -10138
- package/dist/esm/previewEntry.mjs +12771 -9986
- package/dist/esm/renderEntry.mjs +2 -2
- package/dist/helpers/are-sequence-node-path-infos-equal.d.ts +2 -0
- package/dist/helpers/are-sequence-node-path-infos-equal.js +27 -0
- package/dist/helpers/calculate-timeline.js +3 -3
- package/dist/helpers/client-id.js +8 -1
- package/dist/helpers/format-file-location.d.ts +1 -1
- package/dist/helpers/format-file-location.js +3 -3
- package/dist/helpers/get-box-quads-polyfill-internals.js +10 -2
- package/dist/helpers/migrate-expanded-tracks-for-subscription-key.js +3 -3
- package/dist/helpers/open-in-editor.d.ts +4 -1
- package/dist/helpers/open-in-editor.js +9 -1
- package/dist/helpers/preview-server-events.js +4 -0
- package/dist/helpers/sequence-node-path-mutations.d.ts +4 -0
- package/dist/helpers/sequence-node-path-mutations.js +31 -0
- package/dist/helpers/studio-runtime-config.js +3 -0
- package/dist/helpers/timeline-node-path-key.d.ts +2 -0
- package/dist/helpers/timeline-node-path-key.js +3 -1
- package/dist/helpers/use-asset-drag-events.d.ts +2 -1
- package/dist/helpers/use-asset-drag-events.js +14 -6
- package/dist/helpers/use-menu-structure.js +2 -2
- package/dist/helpers/use-runtime-values.d.ts +1 -3
- package/dist/icons/cube.d.ts +4 -0
- package/dist/icons/cube.js +6 -0
- package/dist/icons/finder.d.ts +4 -0
- package/dist/icons/finder.js +8 -0
- package/dist/icons/terminal.d.ts +6 -0
- package/dist/icons/terminal.js +46 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +8 -0
- package/dist/state/timeline-sequence-hover.d.ts +9 -3
- package/dist/state/timeline-sequence-hover.js +63 -12
- package/dist/state/transform-3d-mode.d.ts +10 -0
- package/dist/state/transform-3d-mode.js +27 -0
- package/dist/state/z-index.js +5 -8
- package/package.json +12 -12
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.applyVisualControlChange = exports.callUpdateDefaultPropsApi = exports.getProjectInfo = exports.updateAvailable = exports.cancelRenderJob = exports.removeRenderJob = exports.applyCodemod = exports.openInFileExplorer = exports.subscribeToFileExistenceWatcher = exports.unsubscribeFromFileExistenceWatcher = exports.addVideoRenderJob = exports.addSequenceRenderJob = exports.addStillRenderJob = void 0;
|
|
4
4
|
const no_react_1 = require("remotion/no-react");
|
|
5
5
|
const call_api_1 = require("../call-api");
|
|
6
|
-
const addStillRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, offthreadVideoThreads, multiProcessOnLinux, beepOnFinish, metadata, chromeMode, mediaCacheSizeInBytes, }) => {
|
|
6
|
+
const addStillRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, offthreadVideoThreads, multiProcessOnLinux, beepOnFinish, metadata, chromeMode, mediaCacheSizeInBytes, licenseKey, }) => {
|
|
7
7
|
return (0, call_api_1.callApi)('/api/render', {
|
|
8
8
|
compositionId,
|
|
9
9
|
type: 'still',
|
|
@@ -28,6 +28,7 @@ const addStillRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, f
|
|
|
28
28
|
metadata,
|
|
29
29
|
chromeMode,
|
|
30
30
|
mediaCacheSizeInBytes,
|
|
31
|
+
licenseKey,
|
|
31
32
|
});
|
|
32
33
|
};
|
|
33
34
|
exports.addStillRenderJob = addStillRenderJob;
|
|
@@ -63,7 +64,7 @@ const addSequenceRenderJob = ({ compositionId, outName, imageFormat, startFrame,
|
|
|
63
64
|
});
|
|
64
65
|
};
|
|
65
66
|
exports.addSequenceRenderJob = addSequenceRenderJob;
|
|
66
|
-
const addVideoRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, scale, logLevel, codec, concurrency, crf, gopSize, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, offthreadVideoThreads, colorSpace, multiProcessOnLinux, encodingMaxRate, encodingBufferSize, beepOnFinish, repro, forSeamlessAacConcatenation, separateAudioTo, metadata, hardwareAcceleration, chromeMode, mediaCacheSizeInBytes, sampleRate, }) => {
|
|
67
|
+
const addVideoRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, scale, logLevel, codec, concurrency, crf, gopSize, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, offthreadVideoThreads, colorSpace, multiProcessOnLinux, encodingMaxRate, encodingBufferSize, beepOnFinish, repro, forSeamlessAacConcatenation, separateAudioTo, metadata, hardwareAcceleration, chromeMode, mediaCacheSizeInBytes, sampleRate, licenseKey, }) => {
|
|
67
68
|
return (0, call_api_1.callApi)('/api/render', {
|
|
68
69
|
compositionId,
|
|
69
70
|
type: 'video',
|
|
@@ -112,6 +113,7 @@ const addVideoRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, s
|
|
|
112
113
|
chromeMode,
|
|
113
114
|
mediaCacheSizeInBytes,
|
|
114
115
|
sampleRate,
|
|
116
|
+
licenseKey,
|
|
115
117
|
});
|
|
116
118
|
};
|
|
117
119
|
exports.addVideoRenderJob = addVideoRenderJob;
|
|
@@ -42,9 +42,6 @@ const layout_1 = require("../layout");
|
|
|
42
42
|
const is_menu_item_1 = require("../Menu/is-menu-item");
|
|
43
43
|
const context_1 = require("./context");
|
|
44
44
|
const RenderQueueItem_1 = require("./RenderQueueItem");
|
|
45
|
-
const separatorStyle = {
|
|
46
|
-
borderBottom: `1px solid ${colors_1.BLACK_HEX}`,
|
|
47
|
-
};
|
|
48
45
|
const errorExplanation = {
|
|
49
46
|
fontSize: 14,
|
|
50
47
|
color: colors_1.LIGHT_TEXT,
|
|
@@ -65,6 +62,8 @@ const renderQueue = {
|
|
|
65
62
|
background: colors_1.BACKGROUND,
|
|
66
63
|
flex: 1,
|
|
67
64
|
overflowY: 'auto',
|
|
65
|
+
paddingTop: 4,
|
|
66
|
+
paddingBottom: 4,
|
|
68
67
|
};
|
|
69
68
|
const RenderQueue = () => {
|
|
70
69
|
const { jobs } = (0, react_1.useContext)(context_1.RenderQueueContext);
|
|
@@ -105,7 +104,7 @@ const RenderQueue = () => {
|
|
|
105
104
|
] }));
|
|
106
105
|
}
|
|
107
106
|
return (jsx_runtime_1.jsx("div", { ref: divRef, style: renderQueue, className: ['css-reset', is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME].join(' '), children: jobs.map((j, index) => {
|
|
108
|
-
return (jsx_runtime_1.jsx(
|
|
107
|
+
return (jsx_runtime_1.jsx(RenderQueueItem_1.RenderQueueItem, { selected: selectedJob === index, job: j }, j.id));
|
|
109
108
|
}) }));
|
|
110
109
|
};
|
|
111
110
|
exports.RenderQueue = RenderQueue;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DragEventHandler } from 'react';
|
|
2
|
+
import type { AnyRenderJob } from './context';
|
|
3
|
+
export declare const useRenderOutputFileDrag: (job: AnyRenderJob) => {
|
|
4
|
+
canDrag: boolean;
|
|
5
|
+
isDragging: boolean;
|
|
6
|
+
onDragEnd: () => void;
|
|
7
|
+
onDragStart: DragEventHandler<HTMLDivElement>;
|
|
8
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useRenderOutputFileDrag = void 0;
|
|
4
|
+
const studio_protocol_1 = require("@remotion/studio-protocol");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const get_asset_metadata_1 = require("../../helpers/get-asset-metadata");
|
|
7
|
+
const context_1 = require("./context");
|
|
8
|
+
const MAXIMUM_SAFE_FILE_DRAG_SIZE = 500 * 1024 * 1024;
|
|
9
|
+
const getFilename = (outName) => {
|
|
10
|
+
var _a;
|
|
11
|
+
return (_a = outName.split(/[/\\]/).at(-1)) !== null && _a !== void 0 ? _a : outName;
|
|
12
|
+
};
|
|
13
|
+
const isChrome = () => {
|
|
14
|
+
return (/Chrome\/\d/.test(navigator.userAgent) &&
|
|
15
|
+
!/(Edg|OPR|SamsungBrowser|YaBrowser)\//.test(navigator.userAgent));
|
|
16
|
+
};
|
|
17
|
+
const useRenderOutputFileDrag = (job) => {
|
|
18
|
+
const deletedOutputLocation = 'deletedOutputLocation' in job && job.deletedOutputLocation;
|
|
19
|
+
const [isDragging, setIsDragging] = (0, react_1.useState)(false);
|
|
20
|
+
const [clientFile, setClientFile] = (0, react_1.useState)(null);
|
|
21
|
+
const clientBlobInfo = (0, react_1.useMemo)(() => {
|
|
22
|
+
if (!(0, context_1.isClientRenderJob)(job) ||
|
|
23
|
+
job.status !== 'done' ||
|
|
24
|
+
job.getBlob === undefined) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
getBlob: job.getBlob,
|
|
29
|
+
sizeInBytes: job.metadata.sizeInBytes,
|
|
30
|
+
};
|
|
31
|
+
}, [job]);
|
|
32
|
+
const clientJobWithBlob = clientBlobInfo !== null;
|
|
33
|
+
(0, react_1.useEffect)(() => {
|
|
34
|
+
if (!clientBlobInfo ||
|
|
35
|
+
clientBlobInfo.sizeInBytes <= 0 ||
|
|
36
|
+
clientBlobInfo.sizeInBytes > MAXIMUM_SAFE_FILE_DRAG_SIZE ||
|
|
37
|
+
typeof File === 'undefined' ||
|
|
38
|
+
typeof URL.createObjectURL !== 'function') {
|
|
39
|
+
setClientFile(null);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
let cancelled = false;
|
|
43
|
+
let objectUrl = null;
|
|
44
|
+
const filename = getFilename(job.outName);
|
|
45
|
+
clientBlobInfo
|
|
46
|
+
.getBlob()
|
|
47
|
+
.then((blob) => {
|
|
48
|
+
if (cancelled) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const file = new File([blob], filename, {
|
|
52
|
+
lastModified: blob instanceof File ? blob.lastModified : Date.now(),
|
|
53
|
+
type: blob.type,
|
|
54
|
+
});
|
|
55
|
+
objectUrl = URL.createObjectURL(file);
|
|
56
|
+
setClientFile({ file, objectUrl });
|
|
57
|
+
})
|
|
58
|
+
.catch(() => {
|
|
59
|
+
if (!cancelled) {
|
|
60
|
+
setClientFile(null);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return () => {
|
|
64
|
+
cancelled = true;
|
|
65
|
+
if (objectUrl) {
|
|
66
|
+
URL.revokeObjectURL(objectUrl);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}, [clientBlobInfo, job.outName]);
|
|
70
|
+
const canUseFileDrag = typeof DataTransfer !== 'undefined' &&
|
|
71
|
+
typeof window !== 'undefined' &&
|
|
72
|
+
typeof window.matchMedia === 'function' &&
|
|
73
|
+
window.matchMedia('(any-pointer: fine)').matches &&
|
|
74
|
+
navigator.maxTouchPoints === 0 &&
|
|
75
|
+
isChrome();
|
|
76
|
+
const canDrag = canUseFileDrag &&
|
|
77
|
+
job.status === 'done' &&
|
|
78
|
+
job.type !== 'sequence' &&
|
|
79
|
+
!deletedOutputLocation &&
|
|
80
|
+
(clientJobWithBlob ? clientFile !== null : true);
|
|
81
|
+
const onDragStart = (0, react_1.useCallback)((event) => {
|
|
82
|
+
if (!canDrag) {
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
const filename = getFilename(job.outName);
|
|
88
|
+
const source = clientFile
|
|
89
|
+
? clientFile.objectUrl
|
|
90
|
+
: new URL(`${get_asset_metadata_1.remotion_outputsBase}/${job.outName}`, window.location.href).href;
|
|
91
|
+
const mimeType = (clientFile === null || clientFile === void 0 ? void 0 : clientFile.file.type) || 'application/octet-stream';
|
|
92
|
+
event.dataTransfer.clearData();
|
|
93
|
+
event.dataTransfer.effectAllowed = 'copy';
|
|
94
|
+
if (clientFile) {
|
|
95
|
+
const item = event.dataTransfer.items.add(clientFile.file);
|
|
96
|
+
if (item === null) {
|
|
97
|
+
event.preventDefault();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const dragData = studio_protocol_1.StudioProtocolInternals.makeDragData({
|
|
103
|
+
type: 'render-output',
|
|
104
|
+
outputPath: job.outName,
|
|
105
|
+
fileName: filename,
|
|
106
|
+
});
|
|
107
|
+
event.dataTransfer.setData(dragData.mimeType, dragData.payload);
|
|
108
|
+
}
|
|
109
|
+
event.dataTransfer.setData('DownloadURL', `${mimeType}:${filename}:${source}`);
|
|
110
|
+
setIsDragging(true);
|
|
111
|
+
}
|
|
112
|
+
catch (_a) {
|
|
113
|
+
event.preventDefault();
|
|
114
|
+
}
|
|
115
|
+
}, [canDrag, clientFile, job.outName]);
|
|
116
|
+
const onDragEnd = (0, react_1.useCallback)(() => {
|
|
117
|
+
setIsDragging(false);
|
|
118
|
+
}, []);
|
|
119
|
+
return { canDrag, isDragging, onDragEnd, onDragStart };
|
|
120
|
+
};
|
|
121
|
+
exports.useRenderOutputFileDrag = useRenderOutputFileDrag;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SelectedOutline } from './selected-outline-geometry';
|
|
3
|
+
import { type SelectedOutlineLayoutTarget, type SelectedOutlineTarget } from './selected-outline-types';
|
|
4
|
+
export declare const SelectedOutlineCanvasRotation: React.FC<{
|
|
5
|
+
readonly getLatestTargetByKey: (key: string) => SelectedOutlineTarget | undefined;
|
|
6
|
+
readonly layoutTarget: SelectedOutlineLayoutTarget;
|
|
7
|
+
readonly onDraggingChange: (dragging: boolean) => void;
|
|
8
|
+
readonly outline: SelectedOutline;
|
|
9
|
+
}>;
|
|
@@ -0,0 +1,237 @@
|
|
|
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
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SelectedOutlineCanvasRotation = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
39
|
+
const remotion_1 = require("remotion");
|
|
40
|
+
const colors_1 = require("../helpers/colors");
|
|
41
|
+
const pointer_session_1 = require("../helpers/pointer-session");
|
|
42
|
+
const editor_snapping_1 = require("../state/editor-snapping");
|
|
43
|
+
const canvas_rotation_cursor_1 = require("./canvas-rotation-cursor");
|
|
44
|
+
const ForceSpecificCursor_1 = require("./ForceSpecificCursor");
|
|
45
|
+
const NotificationCenter_1 = require("./Notifications/NotificationCenter");
|
|
46
|
+
const selected_outline_drag_1 = require("./selected-outline-drag");
|
|
47
|
+
const selected_outline_measurement_1 = require("./selected-outline-measurement");
|
|
48
|
+
const selected_outline_types_1 = require("./selected-outline-types");
|
|
49
|
+
const svg_point_to_client_point_1 = require("./svg-point-to-client-point");
|
|
50
|
+
const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
|
|
51
|
+
const focus_inspector_field_1 = require("./Timeline/focus-inspector-field");
|
|
52
|
+
const imperative_state_1 = require("./Timeline/imperative-state");
|
|
53
|
+
const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
|
|
54
|
+
const rotationDegreesPerPixel = 0.5;
|
|
55
|
+
const SelectedOutlineCanvasRotation = ({ getLatestTargetByKey, layoutTarget, onDraggingChange, outline }) => {
|
|
56
|
+
const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
57
|
+
const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
58
|
+
const { editorSnapping } = (0, react_1.useContext)(editor_snapping_1.EditorSnappingContext);
|
|
59
|
+
const onPointerDown = react_1.default.useCallback((event) => {
|
|
60
|
+
var _a, _b;
|
|
61
|
+
if (event.button !== 0) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const target = getLatestTargetByKey(layoutTarget.key);
|
|
65
|
+
const rotationDrag = (_a = target === null || target === void 0 ? void 0 : target.rotationDrag) !== null && _a !== void 0 ? _a : null;
|
|
66
|
+
if (rotationDrag === null || !(target === null || target === void 0 ? void 0 : target.selectedForRotation)) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
event.stopPropagation();
|
|
71
|
+
if ((0, focus_inspector_field_1.commitPendingInspectorFields)()) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const svg = event.currentTarget.ownerSVGElement;
|
|
75
|
+
if (svg === null) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const startPointer = { x: event.clientX, y: event.clientY };
|
|
79
|
+
const center = (0, svg_point_to_client_point_1.svgPointToClientPoint)((0, selected_outline_measurement_1.getSelectedOutlineRotationPivot)({
|
|
80
|
+
dimensions: outline.dimensions,
|
|
81
|
+
points: (_b = outline.uncroppedPoints) !== null && _b !== void 0 ? _b : outline.points,
|
|
82
|
+
transformOriginValue: rotationDrag.transformOriginValue,
|
|
83
|
+
}), svg.getBoundingClientRect());
|
|
84
|
+
const dragStates = (0, selected_outline_drag_1.getSelectedOutlineRotationDragStates)({
|
|
85
|
+
dragTargets: [rotationDrag],
|
|
86
|
+
getDragOverrides,
|
|
87
|
+
timelinePosition: (0, imperative_state_1.getCurrentFrame)(),
|
|
88
|
+
});
|
|
89
|
+
let previousAngle = (0, selected_outline_measurement_1.getAngleDegrees)(center, startPointer);
|
|
90
|
+
let accumulatedDelta = 0;
|
|
91
|
+
let lastValues = new Map();
|
|
92
|
+
let dragStarted = false;
|
|
93
|
+
const onPointerMove = (moveEvent) => {
|
|
94
|
+
var _a;
|
|
95
|
+
var _b;
|
|
96
|
+
moveEvent.preventDefault();
|
|
97
|
+
const screenDeltaX = moveEvent.clientX - startPointer.x;
|
|
98
|
+
const screenDeltaY = moveEvent.clientY - startPointer.y;
|
|
99
|
+
if (!dragStarted) {
|
|
100
|
+
if (!(0, selected_outline_drag_1.isSelectedOutlineDragPastThreshold)({
|
|
101
|
+
deltaX: screenDeltaX,
|
|
102
|
+
deltaY: screenDeltaY,
|
|
103
|
+
})) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
dragStarted = true;
|
|
107
|
+
onDraggingChange(true);
|
|
108
|
+
}
|
|
109
|
+
if (rotationDrag.transform3DMode) {
|
|
110
|
+
const startRotation = (_b = (_a = dragStates[0]) === null || _a === void 0 ? void 0 : _a.startRotation) !== null && _b !== void 0 ? _b : [0, 0, 0];
|
|
111
|
+
let rotationXDeltaDegrees = -screenDeltaY * rotationDegreesPerPixel;
|
|
112
|
+
let rotationYDeltaDegrees = screenDeltaX * rotationDegreesPerPixel;
|
|
113
|
+
if (moveEvent.shiftKey && editorSnapping) {
|
|
114
|
+
rotationXDeltaDegrees =
|
|
115
|
+
Math.round((startRotation[0] + rotationXDeltaDegrees) / 15) * 15 -
|
|
116
|
+
startRotation[0];
|
|
117
|
+
rotationYDeltaDegrees =
|
|
118
|
+
Math.round((startRotation[1] + rotationYDeltaDegrees) / 15) * 15 -
|
|
119
|
+
startRotation[1];
|
|
120
|
+
}
|
|
121
|
+
lastValues = (0, selected_outline_drag_1.getSelectedOutline3DRotationDragValues)({
|
|
122
|
+
dragStates,
|
|
123
|
+
rotationXDeltaDegrees,
|
|
124
|
+
rotationYDeltaDegrees,
|
|
125
|
+
});
|
|
126
|
+
(0, ForceSpecificCursor_1.forceSpecificCursor)(canvas_rotation_cursor_1.canvasRotationCursor);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
const nextAngle = (0, selected_outline_measurement_1.getAngleDegrees)(center, {
|
|
130
|
+
x: moveEvent.clientX,
|
|
131
|
+
y: moveEvent.clientY,
|
|
132
|
+
});
|
|
133
|
+
accumulatedDelta += (0, selected_outline_measurement_1.getSelectedOutlineRotationDeltaDegrees)({
|
|
134
|
+
from: previousAngle,
|
|
135
|
+
to: nextAngle,
|
|
136
|
+
});
|
|
137
|
+
previousAngle = nextAngle;
|
|
138
|
+
const rotationDeltaDegrees = moveEvent.shiftKey && editorSnapping
|
|
139
|
+
? (0, selected_outline_drag_1.snapSelectedOutlineRotationDeltaDegrees)({
|
|
140
|
+
dragStates,
|
|
141
|
+
rotationDeltaDegrees: accumulatedDelta,
|
|
142
|
+
})
|
|
143
|
+
: accumulatedDelta;
|
|
144
|
+
lastValues = (0, selected_outline_drag_1.getSelectedOutlineRotationDragValues)({
|
|
145
|
+
dragStates,
|
|
146
|
+
rotationDeltaDegrees,
|
|
147
|
+
});
|
|
148
|
+
(0, ForceSpecificCursor_1.forceSpecificCursor)(canvas_rotation_cursor_1.canvasRotationCursor);
|
|
149
|
+
}
|
|
150
|
+
for (const dragState of dragStates) {
|
|
151
|
+
const value = lastValues.get(dragState.key);
|
|
152
|
+
if (value === undefined) {
|
|
153
|
+
throw new Error('Expected rotation drag value to be available');
|
|
154
|
+
}
|
|
155
|
+
if (dragState.target.propStatus.status === 'keyframed') {
|
|
156
|
+
setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeKeyframedDragOverride({
|
|
157
|
+
status: dragState.target.propStatus,
|
|
158
|
+
frame: dragState.sourceFrame,
|
|
159
|
+
value,
|
|
160
|
+
}));
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeStaticDragOverride(value));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
const onPointerUp = () => {
|
|
168
|
+
if (dragStarted) {
|
|
169
|
+
(0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
|
|
170
|
+
onDraggingChange(false);
|
|
171
|
+
}
|
|
172
|
+
const changes = (0, selected_outline_drag_1.getSelectedOutlineRotationDragChanges)({
|
|
173
|
+
dragStates,
|
|
174
|
+
lastValues,
|
|
175
|
+
});
|
|
176
|
+
if (changes.length === 0) {
|
|
177
|
+
(0, selected_outline_drag_1.clearSelectedOutlineRotationDragOverrides)({
|
|
178
|
+
clearDragOverrides,
|
|
179
|
+
dragStates,
|
|
180
|
+
});
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const staticChanges = changes.filter((change) => change.type === 'static');
|
|
184
|
+
const keyframedChanges = changes.filter((change) => change.type === 'keyframed');
|
|
185
|
+
Promise.all([
|
|
186
|
+
staticChanges.length > 0
|
|
187
|
+
? (0, save_sequence_prop_1.saveSequenceProps)({
|
|
188
|
+
changes: staticChanges,
|
|
189
|
+
addedKeyframes: null,
|
|
190
|
+
movedKeyframes: null,
|
|
191
|
+
setPropStatuses,
|
|
192
|
+
clientId: rotationDrag.clientId,
|
|
193
|
+
undoLabel: 'Rotate sequence',
|
|
194
|
+
redoLabel: 'Rotate sequence back',
|
|
195
|
+
})
|
|
196
|
+
: Promise.resolve(),
|
|
197
|
+
(0, call_add_keyframe_1.callAddKeyframes)({
|
|
198
|
+
sequenceKeyframes: keyframedChanges,
|
|
199
|
+
effectKeyframes: [],
|
|
200
|
+
setPropStatuses,
|
|
201
|
+
clientId: rotationDrag.clientId,
|
|
202
|
+
}),
|
|
203
|
+
])
|
|
204
|
+
.catch((error) => {
|
|
205
|
+
(0, NotificationCenter_1.showNotification)(`Could not save sequence props: ${error instanceof Error ? error.message : String(error)}`, 4000);
|
|
206
|
+
})
|
|
207
|
+
.finally(() => {
|
|
208
|
+
(0, selected_outline_drag_1.clearSelectedOutlineRotationDragOverrides)({
|
|
209
|
+
clearDragOverrides,
|
|
210
|
+
dragStates,
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
};
|
|
214
|
+
// The polygon gates pointer-down, while the stable overlay keeps the
|
|
215
|
+
// session alive after the pointer leaves the selected item.
|
|
216
|
+
(0, pointer_session_1.startPointerSession)({
|
|
217
|
+
event,
|
|
218
|
+
target: svg,
|
|
219
|
+
onMove: onPointerMove,
|
|
220
|
+
onEnd: onPointerUp,
|
|
221
|
+
});
|
|
222
|
+
}, [
|
|
223
|
+
clearDragOverrides,
|
|
224
|
+
editorSnapping,
|
|
225
|
+
getDragOverrides,
|
|
226
|
+
getLatestTargetByKey,
|
|
227
|
+
layoutTarget.key,
|
|
228
|
+
onDraggingChange,
|
|
229
|
+
outline.dimensions,
|
|
230
|
+
outline.points,
|
|
231
|
+
outline.uncroppedPoints,
|
|
232
|
+
setDragOverrides,
|
|
233
|
+
setPropStatuses,
|
|
234
|
+
]);
|
|
235
|
+
return (jsx_runtime_1.jsx("polygon", { points: outline.points.map((point) => `${point.x},${point.y}`).join(' '), fill: colors_1.TRANSPARENT, pointerEvents: "all", cursor: canvas_rotation_cursor_1.canvasRotationCursor, onPointerDown: onPointerDown, "data-remotion-studio-canvas-rotation": true }));
|
|
236
|
+
};
|
|
237
|
+
exports.SelectedOutlineCanvasRotation = SelectedOutlineCanvasRotation;
|
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { SelectedOutline } from './selected-outline-geometry';
|
|
3
|
-
import { type SelectedOutlineSnapPoint
|
|
4
|
-
import { type SelectedOutlineDragTarget, type SelectedOutlineRotationDragTarget, type SelectedOutlineScaleDragTarget, type SelectedOutlineTarget } from './selected-outline-types';
|
|
5
|
-
import type
|
|
6
|
-
|
|
7
|
-
readonly
|
|
8
|
-
readonly
|
|
9
|
-
readonly target: SelectedOutlineTarget | undefined;
|
|
10
|
-
}>;
|
|
11
|
-
export declare const SelectedOutlineElement: React.FC<{
|
|
12
|
-
readonly allDragTargets: readonly SelectedOutlineDragTarget[];
|
|
13
|
-
readonly allDragOutlines: readonly SelectedOutline[];
|
|
14
|
-
readonly allRotationDragTargets: readonly SelectedOutlineRotationDragTarget[];
|
|
15
|
-
readonly allScaleDragTargets: readonly SelectedOutlineScaleDragTarget[];
|
|
3
|
+
import { type SelectedOutlineSnapPoint } from './selected-outline-snap';
|
|
4
|
+
import { type SelectedOutlineDragTarget, type SelectedOutlineLayoutTarget, type SelectedOutlineRotationDragTarget, type SelectedOutlineScaleDragTarget, type SelectedOutlineTarget } from './selected-outline-types';
|
|
5
|
+
import { type TimelineSelection, type TimelineSelectionInteraction } from './Timeline/TimelineSelection';
|
|
6
|
+
type SelectedOutlineElementProps = {
|
|
7
|
+
readonly compositionHeight: number;
|
|
8
|
+
readonly compositionWidth: number;
|
|
16
9
|
readonly dragging: boolean;
|
|
17
|
-
readonly
|
|
10
|
+
readonly getAllDragOutlines: () => readonly SelectedOutline[];
|
|
11
|
+
readonly getAllDragTargets: () => readonly SelectedOutlineDragTarget[];
|
|
12
|
+
readonly getAllRotationDragTargets: () => readonly SelectedOutlineRotationDragTarget[];
|
|
13
|
+
readonly getAllScaleDragTargets: () => readonly SelectedOutlineScaleDragTarget[];
|
|
14
|
+
readonly getLatestTargetByKey: (key: string) => SelectedOutlineTarget | undefined;
|
|
15
|
+
readonly layoutTarget: SelectedOutlineLayoutTarget | undefined;
|
|
18
16
|
readonly outline: SelectedOutline;
|
|
19
17
|
readonly onDraggingChange: (dragging: boolean) => void;
|
|
20
|
-
readonly
|
|
18
|
+
readonly onContextMenuOpenChange: (open: boolean) => void;
|
|
21
19
|
readonly onSnapPointsChange: (snapPoints: readonly SelectedOutlineSnapPoint[]) => void;
|
|
22
20
|
readonly onSelect: (item: TimelineSelection, interaction: TimelineSelectionInteraction) => void;
|
|
23
21
|
readonly scale: number;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
22
|
+
};
|
|
23
|
+
export declare const SelectedOutlineElement: React.NamedExoticComponent<SelectedOutlineElementProps>;
|
|
24
|
+
export {};
|