@remotion/studio 4.0.493 → 4.0.495
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/get-static-files.d.ts +1 -1
- package/dist/components/AssetFileIcon.d.ts +7 -0
- package/dist/components/AssetFileIcon.js +24 -0
- package/dist/components/AssetSelectorItem.js +13 -7
- package/dist/components/Canvas.js +194 -36
- package/dist/components/CompositionSelectorItem.js +15 -8
- package/dist/components/CurrentAsset.d.ts +1 -0
- package/dist/components/CurrentAsset.js +17 -1
- package/dist/components/Editor.js +2 -4
- package/dist/components/InitialCompositionLoader.d.ts +1 -1
- package/dist/components/InitialCompositionLoader.js +6 -1
- package/dist/components/InspectorPanel/AssetInspector.d.ts +4 -0
- package/dist/components/InspectorPanel/AssetInspector.js +11 -0
- package/dist/components/InspectorPanel/{DefaultInspector.d.ts → CompositionInspector.d.ts} +2 -2
- package/dist/components/InspectorPanel/CompositionInspector.js +114 -0
- package/dist/components/InspectorPanel/CompositionInspectorHeader.d.ts +1 -0
- package/dist/components/{CurrentComposition.js → InspectorPanel/CompositionInspectorHeader.js} +16 -16
- package/dist/components/InspectorPanel/{CompositionDimensions.d.ts → CompositionMetadata.d.ts} +1 -1
- package/dist/components/InspectorPanel/{CompositionDimensions.js → CompositionMetadata.js} +17 -8
- package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +2 -2
- package/dist/components/InspectorPanel/EasingInspector.js +3 -5
- package/dist/components/InspectorPanel/KeyframeInspector.js +2 -2
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +34 -1
- package/dist/components/InspectorPanel/common.d.ts +8 -0
- package/dist/components/InspectorPanel/common.js +31 -8
- package/dist/components/InspectorPanel/styles.d.ts +5 -3
- package/dist/components/InspectorPanel/styles.js +13 -4
- package/dist/components/InspectorPanel/use-composition-actions.d.ts +8 -0
- package/dist/components/InspectorPanel/use-composition-actions.js +114 -0
- package/dist/components/InspectorPanel.js +11 -2
- package/dist/components/InspectorSequenceSection.d.ts +0 -1
- package/dist/components/InspectorSequenceSection.js +9 -48
- package/dist/components/Modals.js +2 -1
- package/dist/components/NewComposition/InputDragger.d.ts +6 -0
- package/dist/components/NewComposition/InputDragger.js +26 -13
- package/dist/components/NewComposition/NewComposition.js +8 -1
- package/dist/components/NewComposition/ValidationMessage.d.ts +1 -1
- package/dist/components/Preview.js +15 -7
- package/dist/components/RenderModal/RenderModalOutputName.js +34 -1
- package/dist/components/SelectedOutlineOverlay.js +1 -0
- package/dist/components/SvgImportDialog.d.ts +7 -0
- package/dist/components/SvgImportDialog.js +103 -0
- package/dist/components/Timeline/Timeline.js +2 -0
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +11 -1
- package/dist/components/Timeline/TimelineDeleteKeybindings.js +2 -0
- package/dist/components/Timeline/TimelineKeyframeControls.js +1 -0
- package/dist/components/Timeline/TimelineList.js +9 -4
- package/dist/components/Timeline/TimelineSequence.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequence.js +42 -6
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +2 -1
- package/dist/components/Timeline/TimelineSequenceItem.js +33 -13
- package/dist/components/Timeline/TimelineTrack.js +2 -1
- package/dist/components/Timeline/call-delete-keyframe.d.ts +1 -0
- package/dist/components/Timeline/call-delete-keyframe.js +4 -0
- package/dist/components/Timeline/delete-selected-keyframe.d.ts +4 -2
- package/dist/components/Timeline/delete-selected-keyframe.js +48 -5
- package/dist/components/Timeline/delete-selected-timeline-item.d.ts +3 -1
- package/dist/components/Timeline/delete-selected-timeline-item.js +3 -1
- package/dist/components/Timeline/nest-timeline-tracks.d.ts +8 -0
- package/dist/components/Timeline/nest-timeline-tracks.js +25 -0
- package/dist/components/Timeline/timeline-scroll-logic.d.ts +8 -4
- package/dist/components/Timeline/timeline-scroll-logic.js +29 -15
- package/dist/components/import-assets.d.ts +41 -3
- package/dist/components/import-assets.js +148 -24
- package/dist/components/layout.d.ts +1 -0
- package/dist/components/layout.js +2 -1
- package/dist/components/selected-outline-measurement.d.ts +2 -1
- package/dist/components/selected-outline-measurement.js +3 -1
- package/dist/esm/{chunk-mndqr3zx.js → chunk-784jbkzs.js} +8604 -7249
- package/dist/esm/internals.mjs +8604 -7249
- package/dist/esm/previewEntry.mjs +8704 -7349
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/client-id.js +2 -1
- package/dist/helpers/clipboard-figma.d.ts +4 -0
- package/dist/helpers/clipboard-figma.js +41 -0
- package/dist/helpers/clipboard-images.d.ts +10 -0
- package/dist/helpers/clipboard-images.js +77 -0
- package/dist/helpers/clipboard-svg.d.ts +3 -0
- package/dist/helpers/clipboard-svg.js +47 -0
- package/dist/helpers/get-effective-translation.d.ts +2 -1
- package/dist/helpers/get-effective-translation.js +15 -7
- package/dist/helpers/get-preview-file-type.d.ts +1 -1
- package/dist/helpers/get-preview-file-type.js +5 -1
- package/dist/helpers/get-sequence-double-click-action.d.ts +6 -0
- package/dist/helpers/get-sequence-double-click-action.js +10 -1
- package/dist/helpers/inject-css.js +9 -2
- package/dist/helpers/studio-fit-padding.d.ts +41 -0
- package/dist/helpers/studio-fit-padding.js +64 -0
- package/dist/helpers/use-image-metadata.d.ts +8 -0
- package/dist/helpers/use-image-metadata.js +82 -0
- package/dist/helpers/use-studio-canvas-dimensions.js +2 -2
- package/dist/icons/audio.d.ts +3 -0
- package/dist/icons/audio.js +3 -1
- package/dist/icons/font.d.ts +4 -0
- package/dist/icons/font.js +8 -0
- package/dist/icons/frame.d.ts +3 -1
- package/dist/icons/frame.js +1 -1
- package/dist/icons/json.d.ts +4 -0
- package/dist/icons/json.js +8 -0
- package/dist/icons/magnet.js +1 -1
- package/dist/icons/scissors.d.ts +5 -0
- package/dist/icons/scissors.js +8 -0
- package/dist/icons/solid.d.ts +5 -0
- package/dist/icons/solid.js +8 -0
- package/dist/icons/video.d.ts +3 -0
- package/dist/icons/video.js +5 -1
- package/dist/state/modals.d.ts +8 -1
- package/dist/state/timeline-zoom.js +12 -11
- package/package.json +11 -11
- package/dist/components/CurrentComposition.d.ts +0 -2
- package/dist/components/InspectorPanel/DefaultInspector.js +0 -97
|
@@ -1,16 +1,27 @@
|
|
|
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.importAssets = exports.pickFilesToImport = exports.getComponentDimensions = exports.getCompositionPositionForDrop = exports.getElementPositionForDrop = 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.getComponentDimensions = exports.getAssetPositionForDrop = exports.getCompositionPositionForDrop = exports.getElementPositionForDrop = exports.hasSvgFile = exports.getAssetElementForDroppedFile = exports.getAssetElementFromPath = exports.getAssetElement = void 0;
|
|
4
4
|
const media_utils_1 = require("@remotion/media-utils");
|
|
5
5
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
6
6
|
const remotion_1 = require("remotion");
|
|
7
7
|
const no_react_1 = require("remotion/no-react");
|
|
8
8
|
const get_static_files_1 = require("../api/get-static-files");
|
|
9
9
|
const write_static_file_1 = require("../api/write-static-file");
|
|
10
|
+
const clipboard_figma_1 = require("../helpers/clipboard-figma");
|
|
10
11
|
const install_required_package_1 = require("../helpers/install-required-package");
|
|
11
12
|
const call_api_1 = require("./call-api");
|
|
12
13
|
const NotificationCenter_1 = require("./Notifications/NotificationCenter");
|
|
13
14
|
const getAssetElement = ({ fileType, src, }) => {
|
|
15
|
+
if (fileType.type === 'webp' && fileType.animated) {
|
|
16
|
+
return {
|
|
17
|
+
type: 'asset',
|
|
18
|
+
assetType: 'animated-image',
|
|
19
|
+
src,
|
|
20
|
+
srcType: 'static',
|
|
21
|
+
dimensions: fileType.dimensions,
|
|
22
|
+
position: null,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
14
25
|
if (fileType.type === 'png' ||
|
|
15
26
|
fileType.type === 'jpeg' ||
|
|
16
27
|
fileType.type === 'webp' ||
|
|
@@ -82,7 +93,7 @@ const getAssetElementFromPath = (assetPath) => {
|
|
|
82
93
|
if (!extension || extension === assetPath.toLowerCase()) {
|
|
83
94
|
return null;
|
|
84
95
|
}
|
|
85
|
-
if (['png', 'jpg', 'jpeg', 'webp', 'bmp'].includes(extension)) {
|
|
96
|
+
if (['png', 'jpg', 'jpeg', 'webp', 'bmp', 'svg'].includes(extension)) {
|
|
86
97
|
return {
|
|
87
98
|
type: 'asset',
|
|
88
99
|
assetType: 'image',
|
|
@@ -135,12 +146,26 @@ const getAssetElementFromPath = (assetPath) => {
|
|
|
135
146
|
return null;
|
|
136
147
|
};
|
|
137
148
|
exports.getAssetElementFromPath = getAssetElementFromPath;
|
|
149
|
+
const getAssetElementForDroppedFile = ({ fileType, src, }) => {
|
|
150
|
+
const detectedElement = (0, exports.getAssetElement)({ fileType, src });
|
|
151
|
+
if (detectedElement !== null) {
|
|
152
|
+
return detectedElement;
|
|
153
|
+
}
|
|
154
|
+
if (fileType.type !== 'unknown' || !src.toLowerCase().endsWith('.svg')) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
return (0, exports.getAssetElementFromPath)(src);
|
|
158
|
+
};
|
|
159
|
+
exports.getAssetElementForDroppedFile = getAssetElementForDroppedFile;
|
|
160
|
+
const isSvgFile = (file) => file.name.toLowerCase().endsWith('.svg');
|
|
161
|
+
const hasSvgFile = (files) => files.some(isSvgFile);
|
|
162
|
+
exports.hasSvgFile = hasSvgFile;
|
|
138
163
|
const getAssetLabel = (element) => {
|
|
139
164
|
if (element.type !== 'asset') {
|
|
140
165
|
throw new Error('Expected asset element');
|
|
141
166
|
}
|
|
142
167
|
if (element.assetType === 'image') {
|
|
143
|
-
return '<
|
|
168
|
+
return '<CanvasImage>';
|
|
144
169
|
}
|
|
145
170
|
if (element.assetType === 'video') {
|
|
146
171
|
return '<Video>';
|
|
@@ -194,6 +219,16 @@ const getCompositionPositionForDrop = ({ compositionDimensions, destinationDimen
|
|
|
194
219
|
});
|
|
195
220
|
};
|
|
196
221
|
exports.getCompositionPositionForDrop = getCompositionPositionForDrop;
|
|
222
|
+
const getAssetPositionForDrop = ({ assetDimensions, destinationDimensions, dropPosition, }) => {
|
|
223
|
+
if (assetDimensions !== null &&
|
|
224
|
+
destinationDimensions !== null &&
|
|
225
|
+
assetDimensions.width === destinationDimensions.width &&
|
|
226
|
+
assetDimensions.height === destinationDimensions.height) {
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
return getCenteredPosition({ dimensions: assetDimensions, dropPosition });
|
|
230
|
+
};
|
|
231
|
+
exports.getAssetPositionForDrop = getAssetPositionForDrop;
|
|
197
232
|
const getComponentPropNumber = (props, name) => {
|
|
198
233
|
const prop = props.find((p) => p.name === name);
|
|
199
234
|
return typeof (prop === null || prop === void 0 ? void 0 : prop.value) === 'number' ? prop.value : null;
|
|
@@ -237,6 +272,10 @@ const getVideoDimensions = async (src) => {
|
|
|
237
272
|
return { width: metadata.width, height: metadata.height };
|
|
238
273
|
};
|
|
239
274
|
const getFileDimensions = async ({ file, fileType, }) => {
|
|
275
|
+
if (fileType.type === 'unknown' && file.name.toLowerCase().endsWith('.svg')) {
|
|
276
|
+
const objectUrl = URL.createObjectURL(file);
|
|
277
|
+
return getImageDimensions({ revokeObjectUrl: true, src: objectUrl });
|
|
278
|
+
}
|
|
240
279
|
if (fileType.type === 'wav' ||
|
|
241
280
|
fileType.type === 'mp3' ||
|
|
242
281
|
fileType.type === 'aac' ||
|
|
@@ -274,7 +313,7 @@ const getStaticAssetDimensions = (assetPath) => {
|
|
|
274
313
|
const extension = (_a = assetPath.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
275
314
|
const src = (0, remotion_1.staticFile)(assetPath);
|
|
276
315
|
if (extension &&
|
|
277
|
-
['png', 'jpg', 'jpeg', 'webp', 'bmp', 'gif', 'apng'].includes(extension)) {
|
|
316
|
+
['png', 'jpg', 'jpeg', 'webp', 'bmp', 'gif', 'apng', 'svg'].includes(extension)) {
|
|
278
317
|
return getImageDimensions({ revokeObjectUrl: false, src });
|
|
279
318
|
}
|
|
280
319
|
if (extension &&
|
|
@@ -302,7 +341,7 @@ const getStaticAssetDimensionsOrNull = async (assetPath) => {
|
|
|
302
341
|
const getStaticAssetFileType = async (assetPath) => {
|
|
303
342
|
var _a;
|
|
304
343
|
const extension = (_a = assetPath.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
305
|
-
if (extension !== 'png' && extension !== 'apng') {
|
|
344
|
+
if (extension !== 'png' && extension !== 'apng' && extension !== 'webp') {
|
|
306
345
|
return null;
|
|
307
346
|
}
|
|
308
347
|
try {
|
|
@@ -371,7 +410,7 @@ const notifyUnsupportedFiles = (unsupportedFiles) => {
|
|
|
371
410
|
(0, NotificationCenter_1.showNotification)(`Skipped ${unsupportedFiles.length} unsupported files`, 3000);
|
|
372
411
|
}
|
|
373
412
|
};
|
|
374
|
-
const
|
|
413
|
+
const insertCompositionElement = async ({ compositionFile, compositionId, element, }) => {
|
|
375
414
|
const requiredPackage = (0, studio_shared_1.getRequiredPackageForInsertableElement)(element);
|
|
376
415
|
await (0, install_required_package_1.installRequiredPackages)(requiredPackage ? [requiredPackage] : []);
|
|
377
416
|
const result = await (0, call_api_1.callApi)('/api/insert-jsx-element', {
|
|
@@ -388,13 +427,16 @@ const insertAssetElement = async ({ compositionFile, compositionId, element, })
|
|
|
388
427
|
const downloadRemoteAsset = (url) => {
|
|
389
428
|
return (0, call_api_1.callApi)('/api/download-remote-asset', { url });
|
|
390
429
|
};
|
|
391
|
-
const importAssets = async ({ compositionFile, compositionId, dropPosition, files, }) => {
|
|
430
|
+
const importAssets = async ({ compositionFile, compositionId, destinationDimensions, dropPosition, files, svgImportMode, }) => {
|
|
392
431
|
var _a;
|
|
393
432
|
if (files.length === 0) {
|
|
394
433
|
return;
|
|
395
434
|
}
|
|
396
435
|
const staticFiles = (0, get_static_files_1.getStaticFiles)();
|
|
397
436
|
const differentExistingFile = files.find((file) => {
|
|
437
|
+
if (isSvgFile(file) && svgImportMode === 'inline') {
|
|
438
|
+
return false;
|
|
439
|
+
}
|
|
398
440
|
return staticFiles.some((existingStaticFile) => existingStaticFile.name === file.name &&
|
|
399
441
|
existingStaticFile.sizeInBytes !== file.size);
|
|
400
442
|
});
|
|
@@ -418,7 +460,29 @@ const importAssets = async ({ compositionFile, compositionId, dropPosition, file
|
|
|
418
460
|
for (const file of files) {
|
|
419
461
|
const contents = await file.arrayBuffer();
|
|
420
462
|
const fileType = (0, studio_shared_1.detectFileType)(new Uint8Array(contents));
|
|
421
|
-
const
|
|
463
|
+
const dimensions = await getFileDimensionsOrNull({ file, fileType });
|
|
464
|
+
if (isSvgFile(file) && svgImportMode === 'inline') {
|
|
465
|
+
const svgInserted = await insertCompositionElement({
|
|
466
|
+
compositionFile,
|
|
467
|
+
compositionId,
|
|
468
|
+
element: {
|
|
469
|
+
type: 'svg',
|
|
470
|
+
markup: new TextDecoder().decode(contents),
|
|
471
|
+
position: (0, exports.getAssetPositionForDrop)({
|
|
472
|
+
assetDimensions: dimensions,
|
|
473
|
+
destinationDimensions,
|
|
474
|
+
dropPosition,
|
|
475
|
+
}),
|
|
476
|
+
},
|
|
477
|
+
});
|
|
478
|
+
if (!svgInserted) {
|
|
479
|
+
notifyAddedStaticFiles();
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
insertedLabels.push('<Interactive.Svg>');
|
|
483
|
+
continue;
|
|
484
|
+
}
|
|
485
|
+
const element = (0, exports.getAssetElementForDroppedFile)({
|
|
422
486
|
fileType,
|
|
423
487
|
src: file.name,
|
|
424
488
|
});
|
|
@@ -435,15 +499,16 @@ const importAssets = async ({ compositionFile, compositionId, dropPosition, file
|
|
|
435
499
|
});
|
|
436
500
|
addedStaticFiles.push(file.name);
|
|
437
501
|
}
|
|
438
|
-
const
|
|
439
|
-
const inserted = await
|
|
502
|
+
const resolvedDimensions = (_a = element.dimensions) !== null && _a !== void 0 ? _a : dimensions;
|
|
503
|
+
const inserted = await insertCompositionElement({
|
|
440
504
|
compositionFile,
|
|
441
505
|
compositionId,
|
|
442
506
|
element: {
|
|
443
507
|
...element,
|
|
444
|
-
dimensions:
|
|
445
|
-
position:
|
|
446
|
-
|
|
508
|
+
dimensions: resolvedDimensions,
|
|
509
|
+
position: (0, exports.getAssetPositionForDrop)({
|
|
510
|
+
assetDimensions: resolvedDimensions,
|
|
511
|
+
destinationDimensions,
|
|
447
512
|
dropPosition,
|
|
448
513
|
}),
|
|
449
514
|
},
|
|
@@ -463,7 +528,64 @@ const importAssets = async ({ compositionFile, compositionId, dropPosition, file
|
|
|
463
528
|
}
|
|
464
529
|
};
|
|
465
530
|
exports.importAssets = importAssets;
|
|
466
|
-
const
|
|
531
|
+
const importFigmaClipboard = async ({ compositionFile, compositionId, destinationDimensions, dropPosition, html, }) => {
|
|
532
|
+
try {
|
|
533
|
+
const converted = await (0, call_api_1.callApi)('/api/convert-figma-clipboard-to-svg', {
|
|
534
|
+
html,
|
|
535
|
+
});
|
|
536
|
+
if (!converted.success) {
|
|
537
|
+
(0, NotificationCenter_1.showNotification)((0, clipboard_figma_1.formatFigmaClipboardErrorNotification)(converted.reason), 8000);
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
540
|
+
await (0, exports.insertSvgMarkup)({
|
|
541
|
+
compositionFile,
|
|
542
|
+
compositionId,
|
|
543
|
+
destinationDimensions,
|
|
544
|
+
dropPosition,
|
|
545
|
+
markup: converted.svg,
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
catch (error) {
|
|
549
|
+
(0, NotificationCenter_1.showNotification)((0, clipboard_figma_1.formatFigmaClipboardErrorNotification)(error instanceof Error ? error.message : String(error)), 8000);
|
|
550
|
+
}
|
|
551
|
+
};
|
|
552
|
+
exports.importFigmaClipboard = importFigmaClipboard;
|
|
553
|
+
const insertSvgMarkup = async ({ compositionFile, compositionId, destinationDimensions, dropPosition, markup, }) => {
|
|
554
|
+
try {
|
|
555
|
+
const objectUrl = URL.createObjectURL(new Blob([markup], { type: 'image/svg+xml' }));
|
|
556
|
+
let dimensions = null;
|
|
557
|
+
try {
|
|
558
|
+
dimensions = await getImageDimensions({
|
|
559
|
+
revokeObjectUrl: true,
|
|
560
|
+
src: objectUrl,
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
catch (_a) {
|
|
564
|
+
dimensions = null;
|
|
565
|
+
}
|
|
566
|
+
const inserted = await insertCompositionElement({
|
|
567
|
+
compositionFile,
|
|
568
|
+
compositionId,
|
|
569
|
+
element: {
|
|
570
|
+
type: 'svg',
|
|
571
|
+
markup,
|
|
572
|
+
position: (0, exports.getAssetPositionForDrop)({
|
|
573
|
+
assetDimensions: dimensions,
|
|
574
|
+
destinationDimensions,
|
|
575
|
+
dropPosition,
|
|
576
|
+
}),
|
|
577
|
+
},
|
|
578
|
+
});
|
|
579
|
+
if (inserted) {
|
|
580
|
+
notifyInsertedAssets(['<Interactive.Svg>']);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
catch (error) {
|
|
584
|
+
(0, NotificationCenter_1.showNotification)(`Could not add SVG: ${error instanceof Error ? error.message : String(error)}`, 4000);
|
|
585
|
+
}
|
|
586
|
+
};
|
|
587
|
+
exports.insertSvgMarkup = insertSvgMarkup;
|
|
588
|
+
const importRemoteAsset = async ({ compositionFile, compositionId, destinationDimensions, dropPosition, url, }) => {
|
|
467
589
|
try {
|
|
468
590
|
const { assetPath, created, element } = await downloadRemoteAsset(url);
|
|
469
591
|
if (created) {
|
|
@@ -473,13 +595,14 @@ const importRemoteAsset = async ({ compositionFile, compositionId, dropPosition,
|
|
|
473
595
|
(0, NotificationCenter_1.showNotification)('Cannot add remote asset: Unsupported asset type', 3000);
|
|
474
596
|
return;
|
|
475
597
|
}
|
|
476
|
-
const inserted = await
|
|
598
|
+
const inserted = await insertCompositionElement({
|
|
477
599
|
compositionFile,
|
|
478
600
|
compositionId,
|
|
479
601
|
element: {
|
|
480
602
|
...element,
|
|
481
|
-
position:
|
|
482
|
-
|
|
603
|
+
position: (0, exports.getAssetPositionForDrop)({
|
|
604
|
+
assetDimensions: element.dimensions,
|
|
605
|
+
destinationDimensions,
|
|
483
606
|
dropPosition,
|
|
484
607
|
}),
|
|
485
608
|
},
|
|
@@ -508,7 +631,7 @@ const insertRemoteAudio = async ({ compositionFile, compositionId, url, }) => {
|
|
|
508
631
|
position: null,
|
|
509
632
|
};
|
|
510
633
|
try {
|
|
511
|
-
const inserted = await
|
|
634
|
+
const inserted = await insertCompositionElement({
|
|
512
635
|
compositionFile,
|
|
513
636
|
compositionId,
|
|
514
637
|
element,
|
|
@@ -523,7 +646,7 @@ const insertRemoteAudio = async ({ compositionFile, compositionId, url, }) => {
|
|
|
523
646
|
}
|
|
524
647
|
};
|
|
525
648
|
exports.insertRemoteAudio = insertRemoteAudio;
|
|
526
|
-
const insertExistingAssets = async ({ assetPaths, compositionFile, compositionId, dropPosition, }) => {
|
|
649
|
+
const insertExistingAssets = async ({ assetPaths, compositionFile, compositionId, destinationDimensions, dropPosition, }) => {
|
|
527
650
|
var _a;
|
|
528
651
|
if (assetPaths.length === 0) {
|
|
529
652
|
return;
|
|
@@ -538,14 +661,15 @@ const insertExistingAssets = async ({ assetPaths, compositionFile, compositionId
|
|
|
538
661
|
continue;
|
|
539
662
|
}
|
|
540
663
|
const dimensions = (_a = element.dimensions) !== null && _a !== void 0 ? _a : (await getStaticAssetDimensionsOrNull(assetPath));
|
|
541
|
-
const inserted = await
|
|
664
|
+
const inserted = await insertCompositionElement({
|
|
542
665
|
compositionFile,
|
|
543
666
|
compositionId,
|
|
544
667
|
element: {
|
|
545
668
|
...element,
|
|
546
669
|
dimensions,
|
|
547
|
-
position:
|
|
548
|
-
dimensions,
|
|
670
|
+
position: (0, exports.getAssetPositionForDrop)({
|
|
671
|
+
assetDimensions: dimensions,
|
|
672
|
+
destinationDimensions,
|
|
549
673
|
dropPosition,
|
|
550
674
|
}),
|
|
551
675
|
},
|
|
@@ -565,7 +689,7 @@ const insertExistingAssets = async ({ assetPaths, compositionFile, compositionId
|
|
|
565
689
|
exports.insertExistingAssets = insertExistingAssets;
|
|
566
690
|
const insertComponent = async ({ component, compositionFile, compositionId, dropPosition, }) => {
|
|
567
691
|
try {
|
|
568
|
-
const inserted = await
|
|
692
|
+
const inserted = await insertCompositionElement({
|
|
569
693
|
compositionFile,
|
|
570
694
|
compositionId,
|
|
571
695
|
element: {
|
|
@@ -616,7 +740,7 @@ const insertComposition = async ({ composition, compositionFile, compositionId,
|
|
|
616
740
|
width: calculated.width,
|
|
617
741
|
height: calculated.height,
|
|
618
742
|
};
|
|
619
|
-
const inserted = await
|
|
743
|
+
const inserted = await insertCompositionElement({
|
|
620
744
|
compositionFile,
|
|
621
745
|
compositionId,
|
|
622
746
|
element: {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Column = exports.Row = exports.Flex = exports.Spacing = exports.SPACING_UNIT = void 0;
|
|
3
|
+
exports.Column = exports.Row = exports.Flex = exports.Spacing = exports.COMPACT_CONTROL_ROW_HEIGHT = exports.SPACING_UNIT = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
exports.SPACING_UNIT = 8;
|
|
7
|
+
exports.COMPACT_CONTROL_ROW_HEIGHT = 28;
|
|
7
8
|
const Spacing = ({ x = 0, y = 0, block = false }) => {
|
|
8
9
|
const style = (0, react_1.useMemo)(() => {
|
|
9
10
|
return {
|
|
@@ -58,10 +58,11 @@ type SelectedTransformOriginInfo = {
|
|
|
58
58
|
readonly displayFrame: number | null;
|
|
59
59
|
};
|
|
60
60
|
export declare const getSelectedTransformOriginInfo: (selectedItems: readonly TimelineSelection[]) => SelectedTransformOriginInfo | null;
|
|
61
|
-
export declare const getSequencesWithSelectableOutlines: ({ sequences, overrideIdsToNodePaths, compositions, }: {
|
|
61
|
+
export declare const getSequencesWithSelectableOutlines: ({ sequences, overrideIdsToNodePaths, compositions, timelinePosition, }: {
|
|
62
62
|
readonly sequences: readonly TSequence[];
|
|
63
63
|
readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
|
|
64
64
|
readonly compositions?: readonly import("remotion").AnyComposition[] | undefined;
|
|
65
|
+
readonly timelinePosition: number;
|
|
65
66
|
}) => SequenceWithSelectedOutline[];
|
|
66
67
|
export declare const measureOutlines: (container: SVGSVGElement, targets: readonly SelectedOutlineTarget[]) => SelectedOutline[];
|
|
67
68
|
export declare const outlinesAreEqual: (a: readonly SelectedOutline[], b: readonly SelectedOutline[]) => boolean;
|
|
@@ -306,7 +306,7 @@ const getSelectedTransformOriginInfo = (selectedItems) => {
|
|
|
306
306
|
};
|
|
307
307
|
};
|
|
308
308
|
exports.getSelectedTransformOriginInfo = getSelectedTransformOriginInfo;
|
|
309
|
-
const getSequencesWithSelectableOutlines = ({ sequences, overrideIdsToNodePaths, compositions = [], }) => {
|
|
309
|
+
const getSequencesWithSelectableOutlines = ({ sequences, overrideIdsToNodePaths, compositions = [], timelinePosition, }) => {
|
|
310
310
|
return (0, calculate_timeline_1.calculateTimeline)({
|
|
311
311
|
sequences: [...sequences],
|
|
312
312
|
overrideIdsToNodePaths,
|
|
@@ -317,6 +317,8 @@ const getSequencesWithSelectableOutlines = ({ sequences, overrideIdsToNodePaths,
|
|
|
317
317
|
return false;
|
|
318
318
|
}
|
|
319
319
|
return (track.sequence.showInTimeline &&
|
|
320
|
+
timelinePosition >= track.sequence.from &&
|
|
321
|
+
timelinePosition < track.sequence.from + track.sequence.duration &&
|
|
320
322
|
track.nodePathInfo.auxiliaryKeys.length === 0);
|
|
321
323
|
})
|
|
322
324
|
.filter((track) => track.sequence.refForOutline !== null)
|