@remotion/studio 4.0.496 → 4.0.498

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 (109) hide show
  1. package/dist/components/AudioWaveform.js +1 -11
  2. package/dist/components/Canvas.js +22 -203
  3. package/dist/components/Checkbox.js +1 -1
  4. package/dist/components/CompositionSelectorItem.js +2 -10
  5. package/dist/components/ConfigureLicenseModal.d.ts +4 -0
  6. package/dist/components/ConfigureLicenseModal.js +194 -0
  7. package/dist/components/Editor.d.ts +0 -1
  8. package/dist/components/Editor.js +2 -3
  9. package/dist/components/InspectorPanel/AlignmentControls.js +2 -0
  10. package/dist/components/InspectorPanel/CompositionInspector.js +2 -1
  11. package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +27 -2
  12. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +65 -8
  13. package/dist/components/InspectorPanel/use-composition-actions.js +7 -3
  14. package/dist/components/LicenseKeyValidation.d.ts +17 -0
  15. package/dist/components/LicenseKeyValidation.js +113 -0
  16. package/dist/components/Modals.js +2 -1
  17. package/dist/components/NewComposition/CodemodFooter.d.ts +1 -1
  18. package/dist/components/NewComposition/CodemodFooter.js +23 -4
  19. package/dist/components/NewComposition/InputDragger.d.ts +6 -0
  20. package/dist/components/NewComposition/InputDragger.js +12 -3
  21. package/dist/components/NewComposition/NewComposition.js +1 -1
  22. package/dist/components/NewComposition/use-rename-static-file.js +1 -1
  23. package/dist/components/RenderButton.js +0 -1
  24. package/dist/components/RenderModal/WebRenderModal.js +14 -8
  25. package/dist/components/SelectedOutlineElement.js +56 -88
  26. package/dist/components/SelectedOutlineOverlay.d.ts +1 -1
  27. package/dist/components/SelectedOutlineOverlay.js +10 -11
  28. package/dist/components/Timeline/MaxTimelineTracks.d.ts +0 -1
  29. package/dist/components/Timeline/MaxTimelineTracks.js +3 -3
  30. package/dist/components/Timeline/Timeline.js +19 -11
  31. package/dist/components/Timeline/TimelineAssetDropIndicator.d.ts +2 -0
  32. package/dist/components/Timeline/TimelineAssetDropIndicator.js +37 -0
  33. package/dist/components/Timeline/TimelineClipboardKeybindings.js +1 -7
  34. package/dist/components/Timeline/TimelineDragHandler.js +1 -1
  35. package/dist/components/Timeline/TimelineScrollable.js +3 -2
  36. package/dist/components/Timeline/TimelineSelection.d.ts +4 -0
  37. package/dist/components/Timeline/TimelineSelection.js +41 -6
  38. package/dist/components/Timeline/TimelineSequence.js +26 -14
  39. package/dist/components/Timeline/TimelineSequenceFrame.js +2 -4
  40. package/dist/components/Timeline/TimelineSequenceItem.js +7 -5
  41. package/dist/components/Timeline/TimelineSequencePropItem.js +4 -0
  42. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +23 -3
  43. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +135 -19
  44. package/dist/components/Timeline/TimelineTimeIndicators.d.ts +16 -0
  45. package/dist/components/Timeline/TimelineTimeIndicators.js +154 -35
  46. package/dist/components/Timeline/TimelineTranslateField.js +2 -1
  47. package/dist/components/Timeline/TimelineVideoInfo.d.ts +1 -0
  48. package/dist/components/Timeline/TimelineVideoInfo.js +4 -1
  49. package/dist/components/Timeline/call-update-keyframe-settings.d.ts +17 -0
  50. package/dist/components/Timeline/call-update-keyframe-settings.js +43 -1
  51. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +2 -0
  52. package/dist/components/Timeline/delete-selected-timeline-item.js +5 -4
  53. package/dist/components/Timeline/disable-sequence-interactivity.js +2 -0
  54. package/dist/components/Timeline/get-timeline-media-visualization-layout.d.ts +8 -0
  55. package/dist/components/Timeline/get-timeline-media-visualization-layout.js +10 -0
  56. package/dist/components/Timeline/get-timeline-video-info-widths.js +11 -3
  57. package/dist/components/Timeline/keyframe-clipboard.js +21 -5
  58. package/dist/components/Timeline/reset-selected-timeline-props.js +2 -0
  59. package/dist/components/Timeline/save-sequence-prop.d.ts +5 -3
  60. package/dist/components/Timeline/save-sequence-prop.js +43 -18
  61. package/dist/components/Timeline/should-clear-selection-on-pointer-down.d.ts +2 -0
  62. package/dist/components/Timeline/should-clear-selection-on-pointer-down.js +1 -1
  63. package/dist/components/Timeline/timeline-asset-drop-context.d.ts +1 -0
  64. package/dist/components/Timeline/timeline-asset-drop-context.js +5 -0
  65. package/dist/components/Timeline/timeline-scroll-logic.d.ts +7 -0
  66. package/dist/components/Timeline/timeline-scroll-logic.js +10 -1
  67. package/dist/components/Timeline/update-selected-easing.js +26 -23
  68. package/dist/components/Timeline/use-rename-sequence.js +2 -0
  69. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.d.ts +5 -0
  70. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +18 -9
  71. package/dist/components/Timeline/use-timeline-asset-drop.d.ts +1 -0
  72. package/dist/components/Timeline/use-timeline-asset-drop.js +168 -0
  73. package/dist/components/composition-menu-items.d.ts +15 -1
  74. package/dist/components/composition-menu-items.js +137 -107
  75. package/dist/components/drop-handler-data.d.ts +13 -0
  76. package/dist/components/drop-handler-data.js +117 -0
  77. package/dist/components/handle-drop.d.ts +13 -0
  78. package/dist/components/handle-drop.js +115 -0
  79. package/dist/components/import-assets.d.ts +26 -8
  80. package/dist/components/import-assets.js +161 -49
  81. package/dist/components/selected-outline-drag.d.ts +11 -1
  82. package/dist/components/selected-outline-drag.js +74 -1
  83. package/dist/esm/{chunk-0v4n7nkh.js → chunk-7a6q9hk2.js} +5271 -4259
  84. package/dist/esm/index.mjs +0 -19
  85. package/dist/esm/internals.mjs +5271 -4259
  86. package/dist/esm/previewEntry.mjs +5475 -4463
  87. package/dist/esm/renderEntry.mjs +1 -1
  88. package/dist/helpers/interactivity-enabled.d.ts +1 -1
  89. package/dist/helpers/interactivity-enabled.js +2 -2
  90. package/dist/helpers/is-video-with-last-frame-hold.d.ts +2 -0
  91. package/dist/helpers/is-video-with-last-frame-hold.js +9 -0
  92. package/dist/helpers/retry-payload.js +0 -1
  93. package/dist/helpers/url-state.d.ts +1 -0
  94. package/dist/helpers/url-state.js +5 -1
  95. package/dist/helpers/use-max-media-duration.js +5 -3
  96. package/dist/helpers/use-menu-structure.js +11 -3
  97. package/dist/icons/duplicate.d.ts +5 -0
  98. package/dist/icons/duplicate.js +10 -0
  99. package/dist/icons/snowflake.d.ts +5 -0
  100. package/dist/icons/snowflake.js +10 -0
  101. package/dist/icons/trash.d.ts +5 -0
  102. package/dist/icons/trash.js +8 -0
  103. package/dist/state/modals.d.ts +3 -1
  104. package/dist/visual-controls/VisualControls.js +1 -1
  105. package/package.json +11 -11
  106. package/dist/components/RenderModal/WebRenderModalLicense.d.ts +0 -9
  107. package/dist/components/RenderModal/WebRenderModalLicense.js +0 -189
  108. package/dist/components/RenderModal/WebRenderModalLicenseKeyDetails.d.ts +0 -13
  109. package/dist/components/RenderModal/WebRenderModalLicenseKeyDetails.js +0 -60
@@ -114,12 +114,6 @@ const SelectedOutlineTransformOriginHandle = ({ outline, onDraggingChange, targe
114
114
  const [scaleX, scaleY] = no_react_1.NoReactInternals.parseScaleValue(transformOriginDrag.scaleValue);
115
115
  const startTranslate = (0, timeline_translate_utils_1.parseTranslate)(transformOriginDrag.translateValue);
116
116
  const svgRect = svg.getBoundingClientRect();
117
- const defaultOrigin = transformOriginDrag.originDefault !== undefined
118
- ? JSON.stringify(transformOriginDrag.originDefault)
119
- : null;
120
- const defaultTranslate = transformOriginDrag.translateDefault !== undefined
121
- ? JSON.stringify(transformOriginDrag.translateDefault)
122
- : null;
123
117
  let last = null;
124
118
  let currentPointerX = event.clientX;
125
119
  let currentPointerY = event.clientY;
@@ -182,11 +176,29 @@ const SelectedOutlineTransformOriginHandle = ({ outline, onDraggingChange, targe
182
176
  })
183
177
  : remotion_1.Internals.makeStaticDragOverride(origin));
184
178
  setDragOverrides(transformOriginDrag.nodePath, selected_outline_types_1.translateFieldKey, transformOriginDrag.translatePropStatus.status === 'keyframed'
185
- ? remotion_1.Internals.makeKeyframedDragOverride({
186
- status: transformOriginDrag.translatePropStatus,
187
- frame: transformOriginDrag.sourceFrame,
188
- value: translate,
189
- })
179
+ ? transformOriginDrag.originPropStatus.status === 'keyframed'
180
+ ? remotion_1.Internals.makeKeyframedDragOverride({
181
+ status: transformOriginDrag.translatePropStatus,
182
+ frame: transformOriginDrag.sourceFrame,
183
+ value: translate,
184
+ })
185
+ : {
186
+ type: 'keyframed',
187
+ status: {
188
+ ...transformOriginDrag.translatePropStatus,
189
+ keyframes: transformOriginDrag.translatePropStatus.keyframes.map((keyframe) => {
190
+ const keyframeTranslate = (0, timeline_translate_utils_1.parseTranslate)(String(keyframe.value));
191
+ return {
192
+ ...keyframe,
193
+ value: (0, timeline_translate_utils_1.serializeTranslate)(keyframeTranslate[0] +
194
+ nextTranslateX -
195
+ startTranslate[0], keyframeTranslate[1] +
196
+ nextTranslateY -
197
+ startTranslate[1]),
198
+ };
199
+ }),
200
+ },
201
+ }
190
202
  : remotion_1.Internals.makeStaticDragOverride(translate));
191
203
  };
192
204
  updateFromPointerPosition();
@@ -220,65 +232,27 @@ const SelectedOutlineTransformOriginHandle = ({ outline, onDraggingChange, targe
220
232
  clearDragOverrides(transformOriginDrag.nodePath);
221
233
  return;
222
234
  }
223
- const originChanged = last.origin !== transformOriginDrag.originValue;
224
- const translateChanged = last.translate !== transformOriginDrag.translateValue;
225
- if (!originChanged && !translateChanged) {
235
+ const { staticChanges, keyframedChanges } = (0, selected_outline_drag_1.getSelectedOutlineTransformOriginDragChanges)({
236
+ target: transformOriginDrag,
237
+ startTranslate,
238
+ origin: last.origin,
239
+ translate: last.translate,
240
+ });
241
+ if (staticChanges.length === 0 && keyframedChanges.length === 0) {
226
242
  clearDragOverrides(transformOriginDrag.nodePath);
227
243
  return;
228
244
  }
229
- const shouldSaveAsKeyframes = transformOriginDrag.originPropStatus.status === 'keyframed' ||
230
- transformOriginDrag.translatePropStatus.status === 'keyframed';
231
- const promise = shouldSaveAsKeyframes
245
+ const promise = staticChanges.length === 0
232
246
  ? (0, call_add_keyframe_1.callAddKeyframes)({
233
- sequenceKeyframes: [
234
- originChanged
235
- ? {
236
- fileName: transformOriginDrag.nodePath.absolutePath,
237
- nodePath: transformOriginDrag.nodePath,
238
- fieldKey: selected_outline_types_1.transformOriginFieldKey,
239
- sourceFrame: transformOriginDrag.sourceFrame,
240
- value: last.origin,
241
- schema: transformOriginDrag.schema,
242
- }
243
- : null,
244
- translateChanged
245
- ? {
246
- fileName: transformOriginDrag.nodePath.absolutePath,
247
- nodePath: transformOriginDrag.nodePath,
248
- fieldKey: selected_outline_types_1.translateFieldKey,
249
- sourceFrame: transformOriginDrag.sourceFrame,
250
- value: last.translate,
251
- schema: transformOriginDrag.schema,
252
- }
253
- : null,
254
- ].filter(no_react_1.NoReactInternals.truthy),
247
+ sequenceKeyframes: keyframedChanges,
255
248
  effectKeyframes: [],
256
249
  setPropStatuses,
257
250
  clientId: transformOriginDrag.clientId,
258
251
  })
259
252
  : (0, save_sequence_prop_1.saveSequenceProps)({
260
- changes: [
261
- originChanged
262
- ? {
263
- fileName: transformOriginDrag.nodePath.absolutePath,
264
- nodePath: transformOriginDrag.nodePath,
265
- fieldKey: selected_outline_types_1.transformOriginFieldKey,
266
- value: last.origin,
267
- defaultValue: defaultOrigin,
268
- schema: transformOriginDrag.schema,
269
- }
270
- : null,
271
- translateChanged
272
- ? {
273
- fileName: transformOriginDrag.nodePath.absolutePath,
274
- nodePath: transformOriginDrag.nodePath,
275
- fieldKey: selected_outline_types_1.translateFieldKey,
276
- value: last.translate,
277
- defaultValue: defaultTranslate,
278
- schema: transformOriginDrag.schema,
279
- }
280
- : null,
281
- ].filter(no_react_1.NoReactInternals.truthy),
253
+ changes: staticChanges,
254
+ addedKeyframes: keyframedChanges,
255
+ movedKeyframes: null,
282
256
  setPropStatuses,
283
257
  clientId: transformOriginDrag.clientId,
284
258
  undoLabel: 'Move transform origin',
@@ -478,6 +452,8 @@ const SelectedOutlinePolygon = ({ allDragTargets, allDragOutlines, contextMenuVa
478
452
  staticChanges.length > 0
479
453
  ? (0, save_sequence_prop_1.saveSequenceProps)({
480
454
  changes: staticChanges,
455
+ addedKeyframes: null,
456
+ movedKeyframes: null,
481
457
  setPropStatuses,
482
458
  clientId: drag.clientId,
483
459
  undoLabel: changes.length > 1
@@ -488,16 +464,12 @@ const SelectedOutlinePolygon = ({ allDragTargets, allDragOutlines, contextMenuVa
488
464
  : 'Move sequence back',
489
465
  })
490
466
  : Promise.resolve(),
491
- ...keyframedChanges.map((change) => (0, call_add_keyframe_1.callAddSequenceKeyframe)({
492
- fileName: change.fileName,
493
- nodePath: change.nodePath,
494
- fieldKey: change.fieldKey,
495
- sourceFrame: change.sourceFrame,
496
- value: change.value,
497
- schema: change.schema,
467
+ (0, call_add_keyframe_1.callAddKeyframes)({
468
+ sequenceKeyframes: keyframedChanges,
469
+ effectKeyframes: [],
498
470
  setPropStatuses,
499
- clientId: change.clientId,
500
- })),
471
+ clientId: drag.clientId,
472
+ }),
501
473
  ])
502
474
  .catch((err) => {
503
475
  (0, NotificationCenter_1.showNotification)(`Could not save sequence props: ${err instanceof Error ? err.message : String(err)}`, 4000);
@@ -692,6 +664,8 @@ const SelectedOutlineScaleEdgeLine = ({ allScaleDragTargets, contextMenuValues,
692
664
  staticChanges.length > 0
693
665
  ? (0, save_sequence_prop_1.saveSequenceProps)({
694
666
  changes: staticChanges,
667
+ addedKeyframes: null,
668
+ movedKeyframes: null,
695
669
  setPropStatuses,
696
670
  clientId: scaleDrag.clientId,
697
671
  undoLabel: changes.length > 1
@@ -702,16 +676,12 @@ const SelectedOutlineScaleEdgeLine = ({ allScaleDragTargets, contextMenuValues,
702
676
  : 'Scale sequence back',
703
677
  })
704
678
  : Promise.resolve(),
705
- ...keyframedChanges.map((change) => (0, call_add_keyframe_1.callAddSequenceKeyframe)({
706
- fileName: change.fileName,
707
- nodePath: change.nodePath,
708
- fieldKey: change.fieldKey,
709
- sourceFrame: change.sourceFrame,
710
- value: change.value,
711
- schema: change.schema,
679
+ (0, call_add_keyframe_1.callAddKeyframes)({
680
+ sequenceKeyframes: keyframedChanges,
681
+ effectKeyframes: [],
712
682
  setPropStatuses,
713
- clientId: change.clientId,
714
- })),
683
+ clientId: scaleDrag.clientId,
684
+ }),
715
685
  ])
716
686
  .catch((err) => {
717
687
  (0, NotificationCenter_1.showNotification)(`Could not save sequence props: ${err instanceof Error ? err.message : String(err)}`, 4000);
@@ -911,6 +881,8 @@ const SelectedOutlineRotationCornerHandle = ({ allRotationDragTargets, contextMe
911
881
  staticChanges.length > 0
912
882
  ? (0, save_sequence_prop_1.saveSequenceProps)({
913
883
  changes: staticChanges,
884
+ addedKeyframes: null,
885
+ movedKeyframes: null,
914
886
  setPropStatuses,
915
887
  clientId: rotationDrag.clientId,
916
888
  undoLabel: changes.length > 1
@@ -921,16 +893,12 @@ const SelectedOutlineRotationCornerHandle = ({ allRotationDragTargets, contextMe
921
893
  : 'Rotate sequence back',
922
894
  })
923
895
  : Promise.resolve(),
924
- ...keyframedChanges.map((change) => (0, call_add_keyframe_1.callAddSequenceKeyframe)({
925
- fileName: change.fileName,
926
- nodePath: change.nodePath,
927
- fieldKey: change.fieldKey,
928
- sourceFrame: change.sourceFrame,
929
- value: change.value,
930
- schema: change.schema,
896
+ (0, call_add_keyframe_1.callAddKeyframes)({
897
+ sequenceKeyframes: keyframedChanges,
898
+ effectKeyframes: [],
931
899
  setPropStatuses,
932
- clientId: change.clientId,
933
- })),
900
+ clientId: rotationDrag.clientId,
901
+ }),
934
902
  ])
935
903
  .catch((err) => {
936
904
  (0, NotificationCenter_1.showNotification)(`Could not save sequence props: ${err instanceof Error ? err.message : String(err)}`, 4000);
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { type SelectedOutline } from './selected-outline-geometry';
3
3
  import { type SelectedOutlineTarget } from './selected-outline-types';
4
- export { applySelectedOutlineDragAxisLock, applySelectedOutlineTransformOriginAxisLock, compensateTranslateForTransformOrigin, getSelectedOutlineActiveSchema, getSelectedOutlineDragChanges, getSelectedOutlineDragValues, getSelectedOutlineKeyboardNudgeDelta, getSelectedOutlineKeyboardNudgeDeltas, getSelectedOutlineRotationDragChanges, getSelectedOutlineRotationDragStates, getSelectedOutlineRotationDragValues, getSelectedOutlineScaleDragChanges, getSelectedOutlineScaleDragStates, getSelectedOutlineScaleDragValues, getSelectedOutlineScaleEdgeInfo, getSelectedOutlineTransformOriginLockedAxis, isSelectedOutlineDragPastThreshold, selectedOutlineTransformOriginSnapThresholdPx, selectedOutlineUvSnapThresholdPx, snapSelectedOutlineRotationDeltaDegrees, snapSelectedOutlineTransformOriginUv, snapSelectedOutlineUv, } from './selected-outline-drag';
4
+ export { applySelectedOutlineDragAxisLock, applySelectedOutlineTransformOriginAxisLock, compensateTranslateForTransformOrigin, getSelectedOutlineActiveSchema, getSelectedOutlineDragChanges, getSelectedOutlineDragValues, getSelectedOutlineKeyboardNudgeDelta, getSelectedOutlineKeyboardNudgeDeltas, getSelectedOutlineRotationDragChanges, getSelectedOutlineRotationDragStates, getSelectedOutlineRotationDragValues, getSelectedOutlineScaleDragChanges, getSelectedOutlineScaleDragStates, getSelectedOutlineScaleDragValues, getSelectedOutlineScaleEdgeInfo, getSelectedOutlineTransformOriginDragChanges, getSelectedOutlineTransformOriginLockedAxis, isSelectedOutlineDragPastThreshold, selectedOutlineTransformOriginSnapThresholdPx, selectedOutlineUvSnapThresholdPx, snapSelectedOutlineRotationDeltaDegrees, snapSelectedOutlineTransformOriginUv, snapSelectedOutlineUv, } from './selected-outline-drag';
5
5
  export { getOutlineSelectionInteraction, getSelectedEffectFieldsBySequenceKey, getSelectedOutlineRotationCornerInfo, getSelectedOutlineRotationDeltaDegrees, getSelectedOutlineRotationPivot, getSelectedSequenceKeys, getSequencesWithSelectableOutlines, getTransformedSvgViewportPoints, } from './selected-outline-measurement';
6
6
  export { selectedOutlineDragThresholdPx } from './selected-outline-types';
7
7
  export type { SelectedOutlineDragState, SelectedOutlineRotationDragState, SelectedOutlineScaleDragState, } from './selected-outline-types';
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SelectedOutlineOverlay = exports.orderOutlinesForRendering = exports.selectedOutlineDragThresholdPx = exports.getTransformedSvgViewportPoints = exports.getSequencesWithSelectableOutlines = exports.getSelectedSequenceKeys = exports.getSelectedOutlineRotationPivot = exports.getSelectedOutlineRotationDeltaDegrees = exports.getSelectedOutlineRotationCornerInfo = exports.getSelectedEffectFieldsBySequenceKey = exports.getOutlineSelectionInteraction = exports.snapSelectedOutlineUv = exports.snapSelectedOutlineTransformOriginUv = exports.snapSelectedOutlineRotationDeltaDegrees = exports.selectedOutlineUvSnapThresholdPx = exports.selectedOutlineTransformOriginSnapThresholdPx = exports.isSelectedOutlineDragPastThreshold = exports.getSelectedOutlineTransformOriginLockedAxis = exports.getSelectedOutlineScaleEdgeInfo = exports.getSelectedOutlineScaleDragValues = exports.getSelectedOutlineScaleDragStates = exports.getSelectedOutlineScaleDragChanges = exports.getSelectedOutlineRotationDragValues = exports.getSelectedOutlineRotationDragStates = exports.getSelectedOutlineRotationDragChanges = exports.getSelectedOutlineKeyboardNudgeDeltas = exports.getSelectedOutlineKeyboardNudgeDelta = exports.getSelectedOutlineDragValues = exports.getSelectedOutlineDragChanges = exports.getSelectedOutlineActiveSchema = exports.compensateTranslateForTransformOrigin = exports.applySelectedOutlineTransformOriginAxisLock = exports.applySelectedOutlineDragAxisLock = void 0;
36
+ exports.SelectedOutlineOverlay = exports.orderOutlinesForRendering = exports.selectedOutlineDragThresholdPx = exports.getTransformedSvgViewportPoints = exports.getSequencesWithSelectableOutlines = exports.getSelectedSequenceKeys = exports.getSelectedOutlineRotationPivot = exports.getSelectedOutlineRotationDeltaDegrees = exports.getSelectedOutlineRotationCornerInfo = exports.getSelectedEffectFieldsBySequenceKey = exports.getOutlineSelectionInteraction = exports.snapSelectedOutlineUv = exports.snapSelectedOutlineTransformOriginUv = exports.snapSelectedOutlineRotationDeltaDegrees = exports.selectedOutlineUvSnapThresholdPx = exports.selectedOutlineTransformOriginSnapThresholdPx = exports.isSelectedOutlineDragPastThreshold = exports.getSelectedOutlineTransformOriginLockedAxis = exports.getSelectedOutlineTransformOriginDragChanges = exports.getSelectedOutlineScaleEdgeInfo = exports.getSelectedOutlineScaleDragValues = exports.getSelectedOutlineScaleDragStates = exports.getSelectedOutlineScaleDragChanges = exports.getSelectedOutlineRotationDragValues = exports.getSelectedOutlineRotationDragStates = exports.getSelectedOutlineRotationDragChanges = exports.getSelectedOutlineKeyboardNudgeDeltas = exports.getSelectedOutlineKeyboardNudgeDelta = exports.getSelectedOutlineDragValues = exports.getSelectedOutlineDragChanges = exports.getSelectedOutlineActiveSchema = exports.compensateTranslateForTransformOrigin = exports.applySelectedOutlineTransformOriginAxisLock = exports.applySelectedOutlineDragAxisLock = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const player_1 = require("@remotion/player");
39
39
  const react_1 = __importStar(require("react"));
@@ -74,6 +74,7 @@ Object.defineProperty(exports, "getSelectedOutlineScaleDragChanges", { enumerabl
74
74
  Object.defineProperty(exports, "getSelectedOutlineScaleDragStates", { enumerable: true, get: function () { return selected_outline_drag_2.getSelectedOutlineScaleDragStates; } });
75
75
  Object.defineProperty(exports, "getSelectedOutlineScaleDragValues", { enumerable: true, get: function () { return selected_outline_drag_2.getSelectedOutlineScaleDragValues; } });
76
76
  Object.defineProperty(exports, "getSelectedOutlineScaleEdgeInfo", { enumerable: true, get: function () { return selected_outline_drag_2.getSelectedOutlineScaleEdgeInfo; } });
77
+ Object.defineProperty(exports, "getSelectedOutlineTransformOriginDragChanges", { enumerable: true, get: function () { return selected_outline_drag_2.getSelectedOutlineTransformOriginDragChanges; } });
77
78
  Object.defineProperty(exports, "getSelectedOutlineTransformOriginLockedAxis", { enumerable: true, get: function () { return selected_outline_drag_2.getSelectedOutlineTransformOriginLockedAxis; } });
78
79
  Object.defineProperty(exports, "isSelectedOutlineDragPastThreshold", { enumerable: true, get: function () { return selected_outline_drag_2.isSelectedOutlineDragPastThreshold; } });
79
80
  Object.defineProperty(exports, "selectedOutlineTransformOriginSnapThresholdPx", { enumerable: true, get: function () { return selected_outline_drag_2.selectedOutlineTransformOriginSnapThresholdPx; } });
@@ -397,7 +398,7 @@ const SelectedOutlineOverlay = ({ compositionHeight, compositionWidth, scale, tr
397
398
  selectItem(item, interaction, undefined, { reveal: true });
398
399
  }, [selectItem]);
399
400
  const outlineTargets = (0, react_1.useMemo)(() => {
400
- if (!interactivity_enabled_1.studioInteractivityEnabled || !editorShowOutlines) {
401
+ if (!(0, interactivity_enabled_1.isStudioInteractivityEnabled)() || !editorShowOutlines) {
401
402
  return [];
402
403
  }
403
404
  const selectedSequenceKeys = (0, selected_outline_measurement_1.getSelectedSequenceKeys)(selectedItems);
@@ -707,6 +708,8 @@ const SelectedOutlineOverlay = ({ compositionHeight, compositionWidth, scale, tr
707
708
  staticChanges.length > 0
708
709
  ? (0, save_sequence_prop_1.saveSequenceProps)({
709
710
  changes: staticChanges,
711
+ addedKeyframes: null,
712
+ movedKeyframes: null,
710
713
  setPropStatuses,
711
714
  clientId: session.clientId,
712
715
  undoLabel: changes.length > 1 ? 'Move selected sequences' : 'Move sequence',
@@ -715,16 +718,12 @@ const SelectedOutlineOverlay = ({ compositionHeight, compositionWidth, scale, tr
715
718
  : 'Move sequence back',
716
719
  })
717
720
  : Promise.resolve(),
718
- ...keyframedChanges.map((change) => (0, call_add_keyframe_1.callAddSequenceKeyframe)({
719
- fileName: change.fileName,
720
- nodePath: change.nodePath,
721
- fieldKey: change.fieldKey,
722
- sourceFrame: change.sourceFrame,
723
- value: change.value,
724
- schema: change.schema,
721
+ (0, call_add_keyframe_1.callAddKeyframes)({
722
+ sequenceKeyframes: keyframedChanges,
723
+ effectKeyframes: [],
725
724
  setPropStatuses,
726
- clientId: change.clientId,
727
- })),
725
+ clientId: session.clientId,
726
+ }),
728
727
  ])
729
728
  .catch((err) => {
730
729
  (0, NotificationCenter_1.showNotification)(`Could not save sequence props: ${err instanceof Error ? err.message : String(err)}`, 4000);
@@ -1,4 +1,3 @@
1
1
  import React from 'react';
2
- export declare const MAX_TIMELINE_TRACKS: number;
3
2
  export declare const MAX_TIMELINE_TRACKS_NOTICE_HEIGHT = 24;
4
3
  export declare const MaxTimelineTracksReached: React.FC;
@@ -1,11 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MaxTimelineTracksReached = exports.MAX_TIMELINE_TRACKS_NOTICE_HEIGHT = exports.MAX_TIMELINE_TRACKS = void 0;
3
+ exports.MaxTimelineTracksReached = exports.MAX_TIMELINE_TRACKS_NOTICE_HEIGHT = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const colors_1 = require("../../helpers/colors");
6
6
  const studio_runtime_config_1 = require("../../helpers/studio-runtime-config");
7
7
  const timeline_layout_1 = require("../../helpers/timeline-layout");
8
- exports.MAX_TIMELINE_TRACKS = (0, studio_runtime_config_1.getStudioMaxTimelineTracks)();
9
8
  exports.MAX_TIMELINE_TRACKS_NOTICE_HEIGHT = 24;
10
9
  const container = {
11
10
  height: exports.MAX_TIMELINE_TRACKS_NOTICE_HEIGHT,
@@ -18,6 +17,7 @@ const container = {
18
17
  paddingLeft: timeline_layout_1.TIMELINE_PADDING + 5,
19
18
  };
20
19
  const MaxTimelineTracksReached = () => {
21
- return (jsx_runtime_1.jsxs("div", { style: container, children: ["Limited display to ", exports.MAX_TIMELINE_TRACKS, " tracks to sustain performance.", '', "You can change this by setting Config.setMaxTimelineTracks() in your remotion.config.ts file."] }));
20
+ const maxTimelineTracks = (0, studio_runtime_config_1.getStudioMaxTimelineTracks)();
21
+ return (jsx_runtime_1.jsxs("div", { style: container, children: ["Limited display to ", maxTimelineTracks, " tracks to sustain performance.", '', "You can change this by setting Config.setMaxTimelineTracks() in your remotion.config.ts file."] }));
22
22
  };
23
23
  exports.MaxTimelineTracksReached = MaxTimelineTracksReached;
@@ -43,6 +43,7 @@ const colors_1 = require("../../helpers/colors");
43
43
  const interactivity_enabled_1 = require("../../helpers/interactivity-enabled");
44
44
  const is_current_selected_still_1 = require("../../helpers/is-current-selected-still");
45
45
  const open_in_editor_1 = require("../../helpers/open-in-editor");
46
+ const studio_runtime_config_1 = require("../../helpers/studio-runtime-config");
46
47
  const call_api_1 = require("../call-api");
47
48
  const ContextMenu_1 = require("../ContextMenu");
48
49
  const import_assets_1 = require("../import-assets");
@@ -51,11 +52,11 @@ const NotificationCenter_1 = require("../Notifications/NotificationCenter");
51
52
  const SplitterContainer_1 = require("../Splitter/SplitterContainer");
52
53
  const SplitterElement_1 = require("../Splitter/SplitterElement");
53
54
  const SplitterHandle_1 = require("../Splitter/SplitterHandle");
54
- const MaxTimelineTracks_1 = require("./MaxTimelineTracks");
55
55
  const SequencePropsObserver_1 = require("./SequencePropsObserver");
56
56
  const should_show_track_in_timeline_1 = require("./should-show-track-in-timeline");
57
57
  const should_subscribe_to_sequence_props_1 = require("./should-subscribe-to-sequence-props");
58
58
  const SubscribeToNodePaths_1 = require("./SubscribeToNodePaths");
59
+ const timeline_asset_drop_context_1 = require("./timeline-asset-drop-context");
59
60
  const timeline_refs_1 = require("./timeline-refs");
60
61
  const TimelineDragHandler_1 = require("./TimelineDragHandler");
61
62
  const TimelineHeightContainer_1 = require("./TimelineHeightContainer");
@@ -72,6 +73,7 @@ const TimelineTimeIndicators_1 = require("./TimelineTimeIndicators");
72
73
  const TimelineTracks_1 = require("./TimelineTracks");
73
74
  const TimelineWidthProvider_1 = require("./TimelineWidthProvider");
74
75
  const use_resolved_stack_1 = require("./use-resolved-stack");
76
+ const use_timeline_asset_drop_1 = require("./use-timeline-asset-drop");
75
77
  const container = {
76
78
  minHeight: '100%',
77
79
  flex: 1,
@@ -83,13 +85,14 @@ const container = {
83
85
  const noop = () => undefined;
84
86
  const TimelineContextMenuArea = ({ children }) => {
85
87
  var _a, _b;
88
+ const assetDropFrame = (0, use_timeline_asset_drop_1.useTimelineAssetDrop)();
86
89
  const { compositions, canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
87
90
  const videoConfig = remotion_1.Internals.useUnsafeVideoConfig();
88
91
  const [isAddingSolid, setIsAddingSolid] = (0, react_1.useState)(false);
89
92
  const [isAddingAsset, setIsAddingAsset] = (0, react_1.useState)(false);
90
93
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
91
94
  const previewConnected = previewServerState.type === 'connected';
92
- const previewInteractive = previewConnected && interactivity_enabled_1.studioInteractivityEnabled;
95
+ const previewInteractive = previewConnected && (0, interactivity_enabled_1.isStudioInteractivityEnabled)();
93
96
  const currentCompositionId = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'composition' ? canvasContent.compositionId : null;
94
97
  const currentComposition = (0, react_1.useMemo)(() => {
95
98
  var _a;
@@ -128,6 +131,7 @@ const TimelineContextMenuArea = ({ children }) => {
128
131
  const result = await (0, call_api_1.callApi)('/api/insert-jsx-element', {
129
132
  compositionFile,
130
133
  compositionId: currentCompositionId,
134
+ from: null,
131
135
  element: {
132
136
  type: 'solid',
133
137
  width: videoConfig.width,
@@ -151,7 +155,8 @@ const TimelineContextMenuArea = ({ children }) => {
151
155
  const insertAsset = (0, react_1.useCallback)(async () => {
152
156
  if (!canInsertAsset ||
153
157
  currentCompositionId === null ||
154
- compositionFile === null) {
158
+ compositionFile === null ||
159
+ videoConfig === null) {
155
160
  return;
156
161
  }
157
162
  const files = await (0, import_assets_1.pickFilesToImport)();
@@ -162,17 +167,19 @@ const TimelineContextMenuArea = ({ children }) => {
162
167
  try {
163
168
  await (0, import_assets_1.importAssets)({
164
169
  files,
170
+ fps: videoConfig.fps,
165
171
  compositionFile,
166
172
  compositionId: currentCompositionId,
167
173
  destinationDimensions: null,
168
174
  dropPosition: null,
175
+ from: null,
169
176
  svgImportMode: 'image',
170
177
  });
171
178
  }
172
179
  finally {
173
180
  setIsAddingAsset(false);
174
181
  }
175
- }, [canInsertAsset, compositionFile, currentCompositionId]);
182
+ }, [canInsertAsset, compositionFile, currentCompositionId, videoConfig]);
176
183
  const contextMenuItems = (0, react_1.useMemo)(() => {
177
184
  return [
178
185
  {
@@ -201,7 +208,7 @@ const TimelineContextMenuArea = ({ children }) => {
201
208
  },
202
209
  ];
203
210
  }, [insertSolid, canInsertSolid, insertAsset, canInsertAsset]);
204
- return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { ref: timeline_refs_1.timelineVerticalScroll, values: contextMenuItems, onOpen: null, style: container, className: 'css-reset ' + is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: children }));
211
+ return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { ref: timeline_refs_1.timelineVerticalScroll, values: contextMenuItems, onOpen: null, style: container, className: 'css-reset ' + is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(timeline_asset_drop_context_1.TimelineAssetDropFrameContext.Provider, { value: assetDropFrame, children: children }) }));
205
212
  };
206
213
  const TimelineInner = () => {
207
214
  var _a;
@@ -212,7 +219,7 @@ const TimelineInner = () => {
212
219
  const { overrideIdToNodePathMappings } = (0, react_1.useContext)(remotion_1.Internals.OverrideIdsToNodePathsGettersContext);
213
220
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
214
221
  const previewConnected = previewServerState.type === 'connected';
215
- const previewInteractive = previewConnected && interactivity_enabled_1.studioInteractivityEnabled;
222
+ const previewInteractive = previewConnected && (0, interactivity_enabled_1.isStudioInteractivityEnabled)();
216
223
  const videoConfigIsNull = videoConfig === null;
217
224
  const timeline = (0, react_1.useMemo)(() => {
218
225
  if (videoConfigIsNull) {
@@ -233,21 +240,22 @@ const TimelineInner = () => {
233
240
  const filtered = (0, react_1.useMemo)(() => {
234
241
  return timeline.filter((t) => (0, should_show_track_in_timeline_1.shouldShowTrackInTimeline)(t, durationInFrames));
235
242
  }, [durationInFrames, timeline]);
243
+ const maxTimelineTracks = (0, studio_runtime_config_1.getStudioMaxTimelineTracks)();
236
244
  const shown = (0, react_1.useMemo)(() => {
237
- return filtered.length > MaxTimelineTracks_1.MAX_TIMELINE_TRACKS
238
- ? filtered.slice(0, MaxTimelineTracks_1.MAX_TIMELINE_TRACKS)
245
+ return filtered.length > maxTimelineTracks
246
+ ? filtered.slice(0, maxTimelineTracks)
239
247
  : filtered;
240
- }, [filtered]);
248
+ }, [filtered, maxTimelineTracks]);
241
249
  const hasBeenCut = filtered.length > shown.length;
242
250
  return (jsx_runtime_1.jsxs(TimelineContextMenuArea, { children: [sequences.map((sequence) => {
243
251
  if (!(0, should_subscribe_to_sequence_props_1.shouldSubscribeToSequenceProps)(sequence, previewInteractive)) {
244
252
  return null;
245
253
  }
246
254
  return (jsx_runtime_1.jsx(SubscribeToNodePaths_1.SubscribeToNodePaths, { overrideId: sequence.controls.overrideId, componentIdentity: sequence.controls.componentIdentity, schema: sequence.controls.schema, getStack: sequence.getStack, effects: sequence.effects }, sequence.id));
247
- }), interactivity_enabled_1.studioInteractivityEnabled ? jsx_runtime_1.jsx(SequencePropsObserver_1.SequencePropsObserver, {}) : null, jsx_runtime_1.jsx(TimelineKeyframeTracksContext_1.TimelineKeyframeTracksProvider, { tracks: filtered, children: jsx_runtime_1.jsxs(TimelineSelection_1.TimelineSelectableItemsProvider, { timeline: shown, children: [interactivity_enabled_1.studioInteractivityEnabled ? (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectAllKeybindings, { timeline: shown })) : null, jsx_runtime_1.jsx(TimelineHeightContainer_1.TimelineHeightContainer, { shown: shown, hasBeenCut: hasBeenCut, children: isStill ? (jsx_runtime_1.jsx(TimelineList_1.TimelineList, { timeline: shown })) : (jsx_runtime_1.jsxs(TimelineWidthProvider_1.TimelineWidthProvider, { children: [
255
+ }), (0, interactivity_enabled_1.isStudioInteractivityEnabled)() ? jsx_runtime_1.jsx(SequencePropsObserver_1.SequencePropsObserver, {}) : null, jsx_runtime_1.jsx(TimelineKeyframeTracksContext_1.TimelineKeyframeTracksProvider, { tracks: filtered, children: jsx_runtime_1.jsxs(TimelineSelection_1.TimelineSelectableItemsProvider, { timeline: shown, children: [(0, interactivity_enabled_1.isStudioInteractivityEnabled)() ? (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectAllKeybindings, { timeline: shown })) : null, jsx_runtime_1.jsx(TimelineHeightContainer_1.TimelineHeightContainer, { shown: shown, hasBeenCut: hasBeenCut, children: isStill ? (jsx_runtime_1.jsx(TimelineList_1.TimelineList, { timeline: shown })) : (jsx_runtime_1.jsxs(TimelineWidthProvider_1.TimelineWidthProvider, { children: [
248
256
  jsx_runtime_1.jsx(TimelinePinchZoom_1.TimelinePinchZoom, {}), jsx_runtime_1.jsxs(SplitterContainer_1.SplitterContainer, { orientation: "vertical", defaultFlex: 0.2, id: "names-to-timeline", maxFlex: 0.5, minFlex: 0.15, children: [
249
257
  jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { type: "flexer", sticky: jsx_runtime_1.jsx(TimelineTimeIndicators_1.TimelineTimePlaceholders, {}), children: jsx_runtime_1.jsx(TimelineList_1.TimelineList, { timeline: shown }) }), jsx_runtime_1.jsx(SplitterHandle_1.SplitterHandle, { onCollapse: noop, allowToCollapse: "none" }), jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { type: "anti-flexer", sticky: null, children: jsx_runtime_1.jsxs(TimelineScrollable_1.TimelineScrollable, { children: [
250
- jsx_runtime_1.jsx(TimelineTracks_1.TimelineTracks, { timeline: shown, hasBeenCut: hasBeenCut }), jsx_runtime_1.jsx(TimelinePlayCursorSyncer_1.TimelinePlayCursorSyncer, {}), jsx_runtime_1.jsx(TimelineInOutPointer_1.TimelineInOutPointer, {}), jsx_runtime_1.jsx(TimelineTimeIndicators_1.TimelineTimeIndicators, {}), jsx_runtime_1.jsx(TimelineDragHandler_1.TimelineDragHandler, {}), interactivity_enabled_1.studioInteractivityEnabled ? (jsx_runtime_1.jsx(TimelineInOutDragHandler_1.TimelineInOutDragHandler, {})) : null, jsx_runtime_1.jsx(TimelineSlider_1.TimelineSlider, {})
258
+ jsx_runtime_1.jsx(TimelineTracks_1.TimelineTracks, { timeline: shown, hasBeenCut: hasBeenCut }), jsx_runtime_1.jsx(TimelinePlayCursorSyncer_1.TimelinePlayCursorSyncer, {}), jsx_runtime_1.jsx(TimelineInOutPointer_1.TimelineInOutPointer, {}), jsx_runtime_1.jsx(TimelineTimeIndicators_1.TimelineTimeIndicators, {}), jsx_runtime_1.jsx(TimelineDragHandler_1.TimelineDragHandler, {}), (0, interactivity_enabled_1.isStudioInteractivityEnabled)() ? (jsx_runtime_1.jsx(TimelineInOutDragHandler_1.TimelineInOutDragHandler, {})) : null, jsx_runtime_1.jsx(TimelineSlider_1.TimelineSlider, {})
251
259
  ] }) })
252
260
  ] })
253
261
  ] })) })
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const TimelineAssetDropIndicator: React.FC;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TimelineAssetDropIndicator = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const remotion_1 = require("remotion");
7
+ const colors_1 = require("../../helpers/colors");
8
+ const get_left_of_timeline_slider_1 = require("../../helpers/get-left-of-timeline-slider");
9
+ const timeline_asset_drop_context_1 = require("./timeline-asset-drop-context");
10
+ const timeline_refs_1 = require("./timeline-refs");
11
+ const TimelineWidthProvider_1 = require("./TimelineWidthProvider");
12
+ const indicator = {
13
+ backgroundColor: colors_1.RULER_COLOR,
14
+ bottom: 0,
15
+ pointerEvents: 'none',
16
+ position: 'absolute',
17
+ top: 0,
18
+ width: 1,
19
+ zIndex: 10,
20
+ };
21
+ const TimelineAssetDropIndicator = () => {
22
+ var _a;
23
+ var _b;
24
+ const frame = (0, react_1.useContext)(timeline_asset_drop_context_1.TimelineAssetDropFrameContext);
25
+ const timelineWidth = (0, react_1.useContext)(TimelineWidthProvider_1.TimelineWidthContext);
26
+ const videoConfig = remotion_1.Internals.useUnsafeVideoConfig();
27
+ if (frame === null || timelineWidth === null || videoConfig === null) {
28
+ return null;
29
+ }
30
+ const width = (_b = (_a = timeline_refs_1.sliderAreaRef.current) === null || _a === void 0 ? void 0 : _a.clientWidth) !== null && _b !== void 0 ? _b : timelineWidth;
31
+ const left = (0, get_left_of_timeline_slider_1.getXPositionOfItemInTimelineImperatively)(frame, videoConfig.durationInFrames, width);
32
+ return (jsx_runtime_1.jsx("div", { "data-timeline-asset-drop-indicator": "true", style: {
33
+ ...indicator,
34
+ transform: `translateX(${left - 0.5}px)`,
35
+ } }));
36
+ };
37
+ exports.TimelineAssetDropIndicator = TimelineAssetDropIndicator;
@@ -710,13 +710,7 @@ const TimelineClipboardKeybindings = () => {
710
710
  (0, NotificationCenter_1.showNotification)('Cannot paste onto an easing that cannot be updated', 3000);
711
711
  return;
712
712
  }
713
- return updatePromise
714
- .then(() => {
715
- (0, NotificationCenter_1.showNotification)(easingSelections.length === 1
716
- ? 'Pasted easing'
717
- : 'Pasted easing to selected segments', 2000);
718
- })
719
- .catch((err) => {
713
+ return updatePromise.catch((err) => {
720
714
  (0, NotificationCenter_1.showNotification)(`Could not paste easing: ${err.message}`, 3000);
721
715
  });
722
716
  }
@@ -89,7 +89,7 @@ const TimelineDragHandler = () => {
89
89
  if (!canvasContent || canvasContent.type !== 'composition') {
90
90
  return null;
91
91
  }
92
- return (jsx_runtime_1.jsx("div", { ref: timeline_refs_1.sliderAreaRef, style: containerStyle, [TimelineSelection_1.TIMELINE_SCRUBBER_ATTR]: true, children: video && interactivity_enabled_1.studioInteractivityEnabled ? (jsx_runtime_1.jsx(TimelineDragHandlerInnerMemo, {})) : null }));
92
+ return (jsx_runtime_1.jsx("div", { ref: timeline_refs_1.sliderAreaRef, style: containerStyle, [TimelineSelection_1.TIMELINE_SCRUBBER_ATTR]: true, children: video && (0, interactivity_enabled_1.isStudioInteractivityEnabled)() ? (jsx_runtime_1.jsx(TimelineDragHandlerInnerMemo, {})) : null }));
93
93
  };
94
94
  exports.TimelineDragHandler = TimelineDragHandler;
95
95
  const TimelineDragHandlerInner = () => {
@@ -6,6 +6,7 @@ const react_1 = require("react");
6
6
  const colors_1 = require("../../helpers/colors");
7
7
  const is_menu_item_1 = require("../Menu/is-menu-item");
8
8
  const timeline_refs_1 = require("./timeline-refs");
9
+ const TimelineAssetDropIndicator_1 = require("./TimelineAssetDropIndicator");
9
10
  const TimelineSelection_1 = require("./TimelineSelection");
10
11
  const outer = {
11
12
  width: '100%',
@@ -31,8 +32,8 @@ const TimelineScrollable = ({ children }) => {
31
32
  minHeight: '100%',
32
33
  };
33
34
  }, []);
34
- return (jsx_runtime_1.jsxs("div", { ref: timeline_refs_1.scrollableRef, style: outer, className: is_menu_item_1.HORIZONTAL_SCROLLBAR_CLASSNAME, onPointerDownCapture: onPointerDownCapture, children: [
35
- jsx_runtime_1.jsx("div", { style: containerStyle, children: children }), marqueeRect === null ? null : (jsx_runtime_1.jsx("div", { style: {
35
+ return (jsx_runtime_1.jsxs("div", { ref: timeline_refs_1.scrollableRef, "data-timeline-scrollable": "true", style: outer, className: is_menu_item_1.HORIZONTAL_SCROLLBAR_CLASSNAME, onPointerDownCapture: onPointerDownCapture, children: [
36
+ jsx_runtime_1.jsx("div", { style: containerStyle, children: children }), jsx_runtime_1.jsx(TimelineAssetDropIndicator_1.TimelineAssetDropIndicator, {}), marqueeRect === null ? null : (jsx_runtime_1.jsx("div", { style: {
36
37
  ...marqueeStyle,
37
38
  height: marqueeRect.bottom - marqueeRect.top,
38
39
  left: marqueeRect.left,
@@ -117,6 +117,10 @@ export declare const getTimelineMarqueeSelection: ({ candidates, lockedSelection
117
117
  readonly lockedSelectionKind: TimelineMarqueeSelectionKind | null;
118
118
  readonly selectedItems: readonly TimelineSelection[];
119
119
  };
120
+ export declare const extendTimelineMarqueeSelection: ({ currentSelection, marqueeSelection, }: {
121
+ readonly currentSelection: readonly TimelineSelection[];
122
+ readonly marqueeSelection: readonly TimelineSelection[];
123
+ }) => readonly TimelineSelection[];
120
124
  type TimelineSelectionContextValue = {
121
125
  readonly canSelect: boolean;
122
126
  readonly selectedItems: readonly TimelineSelection[];