@remotion/studio 4.0.493 → 4.0.494

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.
Files changed (27) hide show
  1. package/dist/components/Canvas.js +3 -0
  2. package/dist/components/InitialCompositionLoader.d.ts +1 -1
  3. package/dist/components/InitialCompositionLoader.js +6 -1
  4. package/dist/components/Timeline/Timeline.js +1 -0
  5. package/dist/components/Timeline/TimelineClipboardKeybindings.js +3 -0
  6. package/dist/components/Timeline/TimelineDeleteKeybindings.js +2 -0
  7. package/dist/components/Timeline/TimelineKeyframeControls.js +1 -0
  8. package/dist/components/Timeline/TimelineSequence.d.ts +1 -0
  9. package/dist/components/Timeline/TimelineSequence.js +42 -6
  10. package/dist/components/Timeline/TimelineSequenceItem.js +14 -2
  11. package/dist/components/Timeline/TimelineTrack.js +2 -1
  12. package/dist/components/Timeline/call-delete-keyframe.d.ts +1 -0
  13. package/dist/components/Timeline/call-delete-keyframe.js +4 -0
  14. package/dist/components/Timeline/delete-selected-keyframe.d.ts +4 -2
  15. package/dist/components/Timeline/delete-selected-keyframe.js +48 -5
  16. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +3 -1
  17. package/dist/components/Timeline/delete-selected-timeline-item.js +3 -1
  18. package/dist/components/import-assets.d.ts +25 -3
  19. package/dist/components/import-assets.js +54 -15
  20. package/dist/esm/{chunk-mndqr3zx.js → chunk-tdncqycp.js} +702 -529
  21. package/dist/esm/internals.mjs +702 -529
  22. package/dist/esm/previewEntry.mjs +701 -528
  23. package/dist/esm/renderEntry.mjs +1 -1
  24. package/dist/helpers/get-sequence-double-click-action.d.ts +6 -0
  25. package/dist/helpers/get-sequence-double-click-action.js +10 -1
  26. package/dist/helpers/inject-css.js +0 -2
  27. package/package.json +11 -11
@@ -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.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.importAssets = exports.pickFilesToImport = exports.getComponentDimensions = exports.getAssetPositionForDrop = exports.getCompositionPositionForDrop = exports.getElementPositionForDrop = 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");
@@ -11,6 +11,16 @@ const install_required_package_1 = require("../helpers/install-required-package"
11
11
  const call_api_1 = require("./call-api");
12
12
  const NotificationCenter_1 = require("./Notifications/NotificationCenter");
13
13
  const getAssetElement = ({ fileType, src, }) => {
14
+ if (fileType.type === 'webp' && fileType.animated) {
15
+ return {
16
+ type: 'asset',
17
+ assetType: 'animated-image',
18
+ src,
19
+ srcType: 'static',
20
+ dimensions: fileType.dimensions,
21
+ position: null,
22
+ };
23
+ }
14
24
  if (fileType.type === 'png' ||
15
25
  fileType.type === 'jpeg' ||
16
26
  fileType.type === 'webp' ||
@@ -82,7 +92,7 @@ const getAssetElementFromPath = (assetPath) => {
82
92
  if (!extension || extension === assetPath.toLowerCase()) {
83
93
  return null;
84
94
  }
85
- if (['png', 'jpg', 'jpeg', 'webp', 'bmp'].includes(extension)) {
95
+ if (['png', 'jpg', 'jpeg', 'webp', 'bmp', 'svg'].includes(extension)) {
86
96
  return {
87
97
  type: 'asset',
88
98
  assetType: 'image',
@@ -135,6 +145,17 @@ const getAssetElementFromPath = (assetPath) => {
135
145
  return null;
136
146
  };
137
147
  exports.getAssetElementFromPath = getAssetElementFromPath;
148
+ const getAssetElementForDroppedFile = ({ fileType, src, }) => {
149
+ const detectedElement = (0, exports.getAssetElement)({ fileType, src });
150
+ if (detectedElement !== null) {
151
+ return detectedElement;
152
+ }
153
+ if (fileType.type !== 'unknown' || !src.toLowerCase().endsWith('.svg')) {
154
+ return null;
155
+ }
156
+ return (0, exports.getAssetElementFromPath)(src);
157
+ };
158
+ exports.getAssetElementForDroppedFile = getAssetElementForDroppedFile;
138
159
  const getAssetLabel = (element) => {
139
160
  if (element.type !== 'asset') {
140
161
  throw new Error('Expected asset element');
@@ -194,6 +215,16 @@ const getCompositionPositionForDrop = ({ compositionDimensions, destinationDimen
194
215
  });
195
216
  };
196
217
  exports.getCompositionPositionForDrop = getCompositionPositionForDrop;
218
+ const getAssetPositionForDrop = ({ assetDimensions, destinationDimensions, dropPosition, }) => {
219
+ if (assetDimensions !== null &&
220
+ destinationDimensions !== null &&
221
+ assetDimensions.width === destinationDimensions.width &&
222
+ assetDimensions.height === destinationDimensions.height) {
223
+ return null;
224
+ }
225
+ return getCenteredPosition({ dimensions: assetDimensions, dropPosition });
226
+ };
227
+ exports.getAssetPositionForDrop = getAssetPositionForDrop;
197
228
  const getComponentPropNumber = (props, name) => {
198
229
  const prop = props.find((p) => p.name === name);
199
230
  return typeof (prop === null || prop === void 0 ? void 0 : prop.value) === 'number' ? prop.value : null;
@@ -237,6 +268,10 @@ const getVideoDimensions = async (src) => {
237
268
  return { width: metadata.width, height: metadata.height };
238
269
  };
239
270
  const getFileDimensions = async ({ file, fileType, }) => {
271
+ if (fileType.type === 'unknown' && file.name.toLowerCase().endsWith('.svg')) {
272
+ const objectUrl = URL.createObjectURL(file);
273
+ return getImageDimensions({ revokeObjectUrl: true, src: objectUrl });
274
+ }
240
275
  if (fileType.type === 'wav' ||
241
276
  fileType.type === 'mp3' ||
242
277
  fileType.type === 'aac' ||
@@ -274,7 +309,7 @@ const getStaticAssetDimensions = (assetPath) => {
274
309
  const extension = (_a = assetPath.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
275
310
  const src = (0, remotion_1.staticFile)(assetPath);
276
311
  if (extension &&
277
- ['png', 'jpg', 'jpeg', 'webp', 'bmp', 'gif', 'apng'].includes(extension)) {
312
+ ['png', 'jpg', 'jpeg', 'webp', 'bmp', 'gif', 'apng', 'svg'].includes(extension)) {
278
313
  return getImageDimensions({ revokeObjectUrl: false, src });
279
314
  }
280
315
  if (extension &&
@@ -302,7 +337,7 @@ const getStaticAssetDimensionsOrNull = async (assetPath) => {
302
337
  const getStaticAssetFileType = async (assetPath) => {
303
338
  var _a;
304
339
  const extension = (_a = assetPath.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
305
- if (extension !== 'png' && extension !== 'apng') {
340
+ if (extension !== 'png' && extension !== 'apng' && extension !== 'webp') {
306
341
  return null;
307
342
  }
308
343
  try {
@@ -388,7 +423,7 @@ const insertAssetElement = async ({ compositionFile, compositionId, element, })
388
423
  const downloadRemoteAsset = (url) => {
389
424
  return (0, call_api_1.callApi)('/api/download-remote-asset', { url });
390
425
  };
391
- const importAssets = async ({ compositionFile, compositionId, dropPosition, files, }) => {
426
+ const importAssets = async ({ compositionFile, compositionId, destinationDimensions, dropPosition, files, }) => {
392
427
  var _a;
393
428
  if (files.length === 0) {
394
429
  return;
@@ -418,7 +453,7 @@ const importAssets = async ({ compositionFile, compositionId, dropPosition, file
418
453
  for (const file of files) {
419
454
  const contents = await file.arrayBuffer();
420
455
  const fileType = (0, studio_shared_1.detectFileType)(new Uint8Array(contents));
421
- const element = (0, exports.getAssetElement)({
456
+ const element = (0, exports.getAssetElementForDroppedFile)({
422
457
  fileType,
423
458
  src: file.name,
424
459
  });
@@ -436,14 +471,16 @@ const importAssets = async ({ compositionFile, compositionId, dropPosition, file
436
471
  addedStaticFiles.push(file.name);
437
472
  }
438
473
  const dimensions = await getFileDimensionsOrNull({ file, fileType });
474
+ const resolvedDimensions = (_a = element.dimensions) !== null && _a !== void 0 ? _a : dimensions;
439
475
  const inserted = await insertAssetElement({
440
476
  compositionFile,
441
477
  compositionId,
442
478
  element: {
443
479
  ...element,
444
- dimensions: (_a = element.dimensions) !== null && _a !== void 0 ? _a : dimensions,
445
- position: getCenteredPosition({
446
- dimensions,
480
+ dimensions: resolvedDimensions,
481
+ position: (0, exports.getAssetPositionForDrop)({
482
+ assetDimensions: resolvedDimensions,
483
+ destinationDimensions,
447
484
  dropPosition,
448
485
  }),
449
486
  },
@@ -463,7 +500,7 @@ const importAssets = async ({ compositionFile, compositionId, dropPosition, file
463
500
  }
464
501
  };
465
502
  exports.importAssets = importAssets;
466
- const importRemoteAsset = async ({ compositionFile, compositionId, dropPosition, url, }) => {
503
+ const importRemoteAsset = async ({ compositionFile, compositionId, destinationDimensions, dropPosition, url, }) => {
467
504
  try {
468
505
  const { assetPath, created, element } = await downloadRemoteAsset(url);
469
506
  if (created) {
@@ -478,8 +515,9 @@ const importRemoteAsset = async ({ compositionFile, compositionId, dropPosition,
478
515
  compositionId,
479
516
  element: {
480
517
  ...element,
481
- position: getCenteredPosition({
482
- dimensions: element.dimensions,
518
+ position: (0, exports.getAssetPositionForDrop)({
519
+ assetDimensions: element.dimensions,
520
+ destinationDimensions,
483
521
  dropPosition,
484
522
  }),
485
523
  },
@@ -523,7 +561,7 @@ const insertRemoteAudio = async ({ compositionFile, compositionId, url, }) => {
523
561
  }
524
562
  };
525
563
  exports.insertRemoteAudio = insertRemoteAudio;
526
- const insertExistingAssets = async ({ assetPaths, compositionFile, compositionId, dropPosition, }) => {
564
+ const insertExistingAssets = async ({ assetPaths, compositionFile, compositionId, destinationDimensions, dropPosition, }) => {
527
565
  var _a;
528
566
  if (assetPaths.length === 0) {
529
567
  return;
@@ -544,8 +582,9 @@ const insertExistingAssets = async ({ assetPaths, compositionFile, compositionId
544
582
  element: {
545
583
  ...element,
546
584
  dimensions,
547
- position: getCenteredPosition({
548
- dimensions,
585
+ position: (0, exports.getAssetPositionForDrop)({
586
+ assetDimensions: dimensions,
587
+ destinationDimensions,
549
588
  dropPosition,
550
589
  }),
551
590
  },