@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.
Files changed (111) hide show
  1. package/dist/api/get-static-files.d.ts +1 -1
  2. package/dist/components/AssetFileIcon.d.ts +7 -0
  3. package/dist/components/AssetFileIcon.js +24 -0
  4. package/dist/components/AssetSelectorItem.js +13 -7
  5. package/dist/components/Canvas.js +194 -36
  6. package/dist/components/CompositionSelectorItem.js +15 -8
  7. package/dist/components/CurrentAsset.d.ts +1 -0
  8. package/dist/components/CurrentAsset.js +17 -1
  9. package/dist/components/Editor.js +2 -4
  10. package/dist/components/InitialCompositionLoader.d.ts +1 -1
  11. package/dist/components/InitialCompositionLoader.js +6 -1
  12. package/dist/components/InspectorPanel/AssetInspector.d.ts +4 -0
  13. package/dist/components/InspectorPanel/AssetInspector.js +11 -0
  14. package/dist/components/InspectorPanel/{DefaultInspector.d.ts → CompositionInspector.d.ts} +2 -2
  15. package/dist/components/InspectorPanel/CompositionInspector.js +114 -0
  16. package/dist/components/InspectorPanel/CompositionInspectorHeader.d.ts +1 -0
  17. package/dist/components/{CurrentComposition.js → InspectorPanel/CompositionInspectorHeader.js} +16 -16
  18. package/dist/components/InspectorPanel/{CompositionDimensions.d.ts → CompositionMetadata.d.ts} +1 -1
  19. package/dist/components/InspectorPanel/{CompositionDimensions.js → CompositionMetadata.js} +17 -8
  20. package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +2 -2
  21. package/dist/components/InspectorPanel/EasingInspector.js +3 -5
  22. package/dist/components/InspectorPanel/KeyframeInspector.js +2 -2
  23. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +34 -1
  24. package/dist/components/InspectorPanel/common.d.ts +8 -0
  25. package/dist/components/InspectorPanel/common.js +31 -8
  26. package/dist/components/InspectorPanel/styles.d.ts +5 -3
  27. package/dist/components/InspectorPanel/styles.js +13 -4
  28. package/dist/components/InspectorPanel/use-composition-actions.d.ts +8 -0
  29. package/dist/components/InspectorPanel/use-composition-actions.js +114 -0
  30. package/dist/components/InspectorPanel.js +11 -2
  31. package/dist/components/InspectorSequenceSection.d.ts +0 -1
  32. package/dist/components/InspectorSequenceSection.js +9 -48
  33. package/dist/components/Modals.js +2 -1
  34. package/dist/components/NewComposition/InputDragger.d.ts +6 -0
  35. package/dist/components/NewComposition/InputDragger.js +26 -13
  36. package/dist/components/NewComposition/NewComposition.js +8 -1
  37. package/dist/components/NewComposition/ValidationMessage.d.ts +1 -1
  38. package/dist/components/Preview.js +15 -7
  39. package/dist/components/RenderModal/RenderModalOutputName.js +34 -1
  40. package/dist/components/SelectedOutlineOverlay.js +1 -0
  41. package/dist/components/SvgImportDialog.d.ts +7 -0
  42. package/dist/components/SvgImportDialog.js +103 -0
  43. package/dist/components/Timeline/Timeline.js +2 -0
  44. package/dist/components/Timeline/TimelineClipboardKeybindings.js +11 -1
  45. package/dist/components/Timeline/TimelineDeleteKeybindings.js +2 -0
  46. package/dist/components/Timeline/TimelineKeyframeControls.js +1 -0
  47. package/dist/components/Timeline/TimelineList.js +9 -4
  48. package/dist/components/Timeline/TimelineSequence.d.ts +1 -0
  49. package/dist/components/Timeline/TimelineSequence.js +42 -6
  50. package/dist/components/Timeline/TimelineSequenceItem.d.ts +2 -1
  51. package/dist/components/Timeline/TimelineSequenceItem.js +33 -13
  52. package/dist/components/Timeline/TimelineTrack.js +2 -1
  53. package/dist/components/Timeline/call-delete-keyframe.d.ts +1 -0
  54. package/dist/components/Timeline/call-delete-keyframe.js +4 -0
  55. package/dist/components/Timeline/delete-selected-keyframe.d.ts +4 -2
  56. package/dist/components/Timeline/delete-selected-keyframe.js +48 -5
  57. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +3 -1
  58. package/dist/components/Timeline/delete-selected-timeline-item.js +3 -1
  59. package/dist/components/Timeline/nest-timeline-tracks.d.ts +8 -0
  60. package/dist/components/Timeline/nest-timeline-tracks.js +25 -0
  61. package/dist/components/Timeline/timeline-scroll-logic.d.ts +8 -4
  62. package/dist/components/Timeline/timeline-scroll-logic.js +29 -15
  63. package/dist/components/import-assets.d.ts +41 -3
  64. package/dist/components/import-assets.js +148 -24
  65. package/dist/components/layout.d.ts +1 -0
  66. package/dist/components/layout.js +2 -1
  67. package/dist/components/selected-outline-measurement.d.ts +2 -1
  68. package/dist/components/selected-outline-measurement.js +3 -1
  69. package/dist/esm/{chunk-mndqr3zx.js → chunk-784jbkzs.js} +8604 -7249
  70. package/dist/esm/internals.mjs +8604 -7249
  71. package/dist/esm/previewEntry.mjs +8704 -7349
  72. package/dist/esm/renderEntry.mjs +1 -1
  73. package/dist/helpers/client-id.js +2 -1
  74. package/dist/helpers/clipboard-figma.d.ts +4 -0
  75. package/dist/helpers/clipboard-figma.js +41 -0
  76. package/dist/helpers/clipboard-images.d.ts +10 -0
  77. package/dist/helpers/clipboard-images.js +77 -0
  78. package/dist/helpers/clipboard-svg.d.ts +3 -0
  79. package/dist/helpers/clipboard-svg.js +47 -0
  80. package/dist/helpers/get-effective-translation.d.ts +2 -1
  81. package/dist/helpers/get-effective-translation.js +15 -7
  82. package/dist/helpers/get-preview-file-type.d.ts +1 -1
  83. package/dist/helpers/get-preview-file-type.js +5 -1
  84. package/dist/helpers/get-sequence-double-click-action.d.ts +6 -0
  85. package/dist/helpers/get-sequence-double-click-action.js +10 -1
  86. package/dist/helpers/inject-css.js +9 -2
  87. package/dist/helpers/studio-fit-padding.d.ts +41 -0
  88. package/dist/helpers/studio-fit-padding.js +64 -0
  89. package/dist/helpers/use-image-metadata.d.ts +8 -0
  90. package/dist/helpers/use-image-metadata.js +82 -0
  91. package/dist/helpers/use-studio-canvas-dimensions.js +2 -2
  92. package/dist/icons/audio.d.ts +3 -0
  93. package/dist/icons/audio.js +3 -1
  94. package/dist/icons/font.d.ts +4 -0
  95. package/dist/icons/font.js +8 -0
  96. package/dist/icons/frame.d.ts +3 -1
  97. package/dist/icons/frame.js +1 -1
  98. package/dist/icons/json.d.ts +4 -0
  99. package/dist/icons/json.js +8 -0
  100. package/dist/icons/magnet.js +1 -1
  101. package/dist/icons/scissors.d.ts +5 -0
  102. package/dist/icons/scissors.js +8 -0
  103. package/dist/icons/solid.d.ts +5 -0
  104. package/dist/icons/solid.js +8 -0
  105. package/dist/icons/video.d.ts +3 -0
  106. package/dist/icons/video.js +5 -1
  107. package/dist/state/modals.d.ts +8 -1
  108. package/dist/state/timeline-zoom.js +12 -11
  109. package/package.json +11 -11
  110. package/dist/components/CurrentComposition.d.ts +0 -2
  111. 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 '<Img>';
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 insertAssetElement = async ({ compositionFile, compositionId, element, }) => {
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 element = (0, exports.getAssetElement)({
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 dimensions = await getFileDimensionsOrNull({ file, fileType });
439
- const inserted = await insertAssetElement({
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: (_a = element.dimensions) !== null && _a !== void 0 ? _a : dimensions,
445
- position: getCenteredPosition({
446
- dimensions,
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 importRemoteAsset = async ({ compositionFile, compositionId, dropPosition, url, }) => {
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 insertAssetElement({
598
+ const inserted = await insertCompositionElement({
477
599
  compositionFile,
478
600
  compositionId,
479
601
  element: {
480
602
  ...element,
481
- position: getCenteredPosition({
482
- dimensions: element.dimensions,
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 insertAssetElement({
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 insertAssetElement({
664
+ const inserted = await insertCompositionElement({
542
665
  compositionFile,
543
666
  compositionId,
544
667
  element: {
545
668
  ...element,
546
669
  dimensions,
547
- position: getCenteredPosition({
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 insertAssetElement({
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 insertAssetElement({
743
+ const inserted = await insertCompositionElement({
620
744
  compositionFile,
621
745
  compositionId,
622
746
  element: {
@@ -1,6 +1,7 @@
1
1
  import type { HTMLAttributes } from 'react';
2
2
  import React from 'react';
3
3
  export declare const SPACING_UNIT = 8;
4
+ export declare const COMPACT_CONTROL_ROW_HEIGHT = 28;
4
5
  export declare const Spacing: React.FC<{
5
6
  readonly x?: number;
6
7
  readonly y?: number;
@@ -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)