@remotion/studio 4.0.475 → 4.0.477
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/components/Canvas.js +40 -1
- package/dist/components/ColorPicker/ColorPickerPopup.d.ts +6 -0
- package/dist/components/ColorPicker/ColorPickerPopup.js +11 -6
- package/dist/components/ControlButton.d.ts +1 -0
- package/dist/components/ControlButton.js +7 -2
- package/dist/components/EditorGuides/Guide.js +122 -20
- package/dist/components/EditorRuler/Ruler.js +21 -15
- package/dist/components/EditorRuler/index.js +18 -10
- package/dist/components/GlobalKeybindings.js +12 -0
- package/dist/components/KeyboardShortcutsExplainer.js +24 -0
- package/dist/components/NewComposition/InputDragger.d.ts +6 -0
- package/dist/components/NewComposition/InputDragger.js +40 -14
- package/dist/components/NewComposition/RenameComposition.js +8 -1
- package/dist/components/NewComposition/RenameFolder.js +8 -1
- package/dist/components/NewComposition/RenameStaticFile.js +11 -1
- package/dist/components/Notifications/Notification.js +5 -4
- package/dist/components/Notifications/NotificationCenter.js +1 -1
- package/dist/components/ObserveDefaultPropsContext.js +6 -2
- package/dist/components/OutlineToggle.js +1 -1
- package/dist/components/PlayPause.js +22 -66
- package/dist/components/PreviewToolbar.js +15 -1
- package/dist/components/RenderModal/RenderModalJSONPropsEditor.js +2 -1
- package/dist/components/SelectedOutlineElement.d.ts +17 -0
- package/dist/components/SelectedOutlineElement.js +938 -0
- package/dist/components/SelectedOutlineOverlay.d.ts +4 -174
- package/dist/components/SelectedOutlineOverlay.js +310 -1392
- package/dist/components/SelectedOutlineUvControls.js +1 -1
- package/dist/components/ShowGuidesProvider.js +4 -4
- package/dist/components/Timeline/SubscribeToNodePaths.d.ts +2 -1
- package/dist/components/Timeline/SubscribeToNodePaths.js +2 -1
- package/dist/components/Timeline/Timeline.js +3 -1
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +9 -10
- package/dist/components/Timeline/TimelineDeleteKeybindings.js +15 -4
- package/dist/components/Timeline/TimelineKeyframeEasingLine.js +7 -11
- package/dist/components/Timeline/TimelineList.js +1 -1
- package/dist/components/Timeline/TimelineRotationField.js +17 -17
- package/dist/components/Timeline/TimelineScaleField.js +1 -1
- package/dist/components/Timeline/TimelineSelection.d.ts +27 -13
- package/dist/components/Timeline/TimelineSelection.js +47 -28
- package/dist/components/Timeline/TimelineSequence.js +169 -8
- package/dist/components/Timeline/TimelineSequenceFrame.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequenceFrame.js +17 -6
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequenceItem.js +294 -142
- package/dist/components/Timeline/TimelineSequenceName.d.ts +4 -2
- package/dist/components/Timeline/TimelineSequenceName.js +67 -2
- package/dist/components/Timeline/TimelineTransformOriginField.js +1 -1
- package/dist/components/Timeline/TimelineTranslateField.js +1 -1
- package/dist/components/Timeline/TimelineUvCoordinateField.js +1 -1
- package/dist/components/Timeline/delete-selected-timeline-item.js +4 -0
- package/dist/components/Timeline/disable-sequence-interactivity.d.ts +8 -0
- package/dist/components/Timeline/disable-sequence-interactivity.js +24 -0
- package/dist/components/Timeline/duplicate-selected-timeline-item.d.ts +1 -2
- package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +20 -0
- package/dist/components/Timeline/get-sequence-context-menu-items.js +160 -0
- package/dist/components/Timeline/reset-selected-timeline-props.js +2 -2
- package/dist/components/Timeline/sequence-props-subscription-store.d.ts +2 -1
- package/dist/components/Timeline/sequence-props-subscription-store.js +11 -3
- package/dist/components/Timeline/should-clear-selection-on-pointer-down.d.ts +2 -0
- package/dist/components/Timeline/should-clear-selection-on-pointer-down.js +16 -2
- package/dist/components/Timeline/timeline-rotation-utils.d.ts +1 -1
- package/dist/components/Timeline/timeline-rotation-utils.js +4 -2
- package/dist/components/Timeline/update-selected-easing.d.ts +4 -6
- package/dist/components/Timeline/use-sequence-props-subscription.d.ts +2 -1
- package/dist/components/Timeline/use-sequence-props-subscription.js +3 -1
- package/dist/components/Timeline/use-timeline-keyframe-drag.d.ts +37 -1
- package/dist/components/Timeline/use-timeline-keyframe-drag.js +290 -14
- package/dist/components/import-assets.d.ts +36 -8
- package/dist/components/import-assets.js +170 -10
- package/dist/components/selected-outline-drag.d.ts +117 -0
- package/dist/components/selected-outline-drag.js +427 -0
- package/dist/components/selected-outline-measurement.d.ts +67 -0
- package/dist/components/selected-outline-measurement.js +355 -0
- package/dist/components/selected-outline-types.d.ts +121 -0
- package/dist/components/selected-outline-types.js +15 -0
- package/dist/components/selected-outline-uv.d.ts +1 -0
- package/dist/components/selected-outline-uv.js +12 -0
- package/dist/esm/{chunk-qaqqvw4q.js → chunk-t8fjnw2d.js} +14059 -12029
- package/dist/esm/internals.mjs +14059 -12029
- package/dist/esm/previewEntry.mjs +14066 -12036
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/editor-guide-selection.d.ts +31 -0
- package/dist/helpers/editor-guide-selection.js +58 -0
- package/dist/helpers/editor-ruler.d.ts +3 -3
- package/dist/helpers/editor-ruler.js +16 -18
- package/dist/state/editor-guides.d.ts +2 -2
- package/dist/state/editor-guides.js +2 -2
- package/package.json +11 -11
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useTimelineKeyframeDrag = void 0;
|
|
3
|
+
exports.useTimelineEasingKeyframeDrag = exports.useTimelineKeyframeDrag = exports.getTimelineSelectionsAfterEasingKeyframeDrag = exports.getKeyframesForTimelineEasingDrag = void 0;
|
|
4
4
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const remotion_1 = require("remotion");
|
|
@@ -15,6 +15,89 @@ const TimelineSelection_1 = require("./TimelineSelection");
|
|
|
15
15
|
const TimelineWidthProvider_1 = require("./TimelineWidthProvider");
|
|
16
16
|
const pointerDragThreshold = 3;
|
|
17
17
|
const isKeyframeSelection = (selection) => selection.type === 'keyframe';
|
|
18
|
+
const isEasingSelection = (selection) => selection.type === 'easing';
|
|
19
|
+
const keyframesForEasing = (easing) => [
|
|
20
|
+
{
|
|
21
|
+
type: 'keyframe',
|
|
22
|
+
nodePathInfo: easing.nodePathInfo,
|
|
23
|
+
frame: easing.fromFrame,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
type: 'keyframe',
|
|
27
|
+
nodePathInfo: easing.nodePathInfo,
|
|
28
|
+
frame: easing.toFrame,
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
const deduplicateKeyframeSelections = (keyframes) => {
|
|
32
|
+
const seen = new Set();
|
|
33
|
+
return keyframes.filter((keyframe) => {
|
|
34
|
+
const key = JSON.stringify({
|
|
35
|
+
nodePathInfo: keyframe.nodePathInfo,
|
|
36
|
+
frame: keyframe.frame,
|
|
37
|
+
});
|
|
38
|
+
if (seen.has(key)) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
seen.add(key);
|
|
42
|
+
return true;
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
const getKeyframesForTimelineEasingDrag = ({ currentSelections, interaction, selectionItem, selected, }) => {
|
|
46
|
+
if (interaction.shiftKey || interaction.toggleKey) {
|
|
47
|
+
return keyframesForEasing(selectionItem);
|
|
48
|
+
}
|
|
49
|
+
const selectedKeyframes = currentSelections.filter(isKeyframeSelection);
|
|
50
|
+
if (selectedKeyframes.length > 0) {
|
|
51
|
+
return selectedKeyframes;
|
|
52
|
+
}
|
|
53
|
+
if (!selected) {
|
|
54
|
+
return keyframesForEasing(selectionItem);
|
|
55
|
+
}
|
|
56
|
+
const selectedEasings = currentSelections.filter(isEasingSelection);
|
|
57
|
+
return deduplicateKeyframeSelections((selectedEasings.length > 0 ? selectedEasings : [selectionItem]).flatMap(keyframesForEasing));
|
|
58
|
+
};
|
|
59
|
+
exports.getKeyframesForTimelineEasingDrag = getKeyframesForTimelineEasingDrag;
|
|
60
|
+
const getTimelineSelectionsAfterEasingKeyframeDrag = ({ delta, selections, targets, }) => {
|
|
61
|
+
const movedFrames = new Map(targets.map((target) => [
|
|
62
|
+
(0, TimelineKeyframeDragState_1.getTimelineKeyframeDragKey)(target),
|
|
63
|
+
target.frame + delta,
|
|
64
|
+
]));
|
|
65
|
+
return selections.map((selection) => {
|
|
66
|
+
var _a, _b;
|
|
67
|
+
if (selection.type === 'keyframe') {
|
|
68
|
+
const movedFrame = movedFrames.get((0, TimelineKeyframeDragState_1.getTimelineKeyframeDragKey)({
|
|
69
|
+
nodePathInfo: selection.nodePathInfo,
|
|
70
|
+
frame: selection.frame,
|
|
71
|
+
}));
|
|
72
|
+
return movedFrame === undefined
|
|
73
|
+
? selection
|
|
74
|
+
: {
|
|
75
|
+
...selection,
|
|
76
|
+
frame: movedFrame,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (selection.type === 'easing') {
|
|
80
|
+
const movedFromFrame = (_a = movedFrames.get((0, TimelineKeyframeDragState_1.getTimelineKeyframeDragKey)({
|
|
81
|
+
nodePathInfo: selection.nodePathInfo,
|
|
82
|
+
frame: selection.fromFrame,
|
|
83
|
+
}))) !== null && _a !== void 0 ? _a : selection.fromFrame;
|
|
84
|
+
const movedToFrame = (_b = movedFrames.get((0, TimelineKeyframeDragState_1.getTimelineKeyframeDragKey)({
|
|
85
|
+
nodePathInfo: selection.nodePathInfo,
|
|
86
|
+
frame: selection.toFrame,
|
|
87
|
+
}))) !== null && _b !== void 0 ? _b : selection.toFrame;
|
|
88
|
+
return movedFromFrame === selection.fromFrame &&
|
|
89
|
+
movedToFrame === selection.toFrame
|
|
90
|
+
? selection
|
|
91
|
+
: {
|
|
92
|
+
...selection,
|
|
93
|
+
fromFrame: movedFromFrame,
|
|
94
|
+
toFrame: movedToFrame,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return selection;
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
exports.getTimelineSelectionsAfterEasingKeyframeDrag = getTimelineSelectionsAfterEasingKeyframeDrag;
|
|
18
101
|
const getCodeValueForTarget = ({ propStatuses, nodePath, }) => propStatuses[remotion_1.Internals.makeSequencePropsSubscriptionKey(nodePath)];
|
|
19
102
|
const getTimelineKeyframeDragTarget = ({ propStatuses, displayFrame, nodePathInfo, overrideIdsToNodePaths, sequences, }) => {
|
|
20
103
|
var _a, _b;
|
|
@@ -121,21 +204,16 @@ const makeMovedKeyframedDragOverride = ({ group, delta, }) => {
|
|
|
121
204
|
if (!first) {
|
|
122
205
|
throw new Error('Expected a keyframe drag target');
|
|
123
206
|
}
|
|
124
|
-
const
|
|
207
|
+
const movedStatus = (0, studio_shared_1.moveKeyframesInPropStatus)({
|
|
208
|
+
status: first.propStatus,
|
|
209
|
+
moves: getMovesForGroup({ group, delta }),
|
|
210
|
+
});
|
|
211
|
+
if (movedStatus.status !== 'keyframed') {
|
|
212
|
+
throw new Error('Expected keyframed status');
|
|
213
|
+
}
|
|
125
214
|
return {
|
|
126
215
|
type: 'keyframed',
|
|
127
|
-
status:
|
|
128
|
-
...first.propStatus,
|
|
129
|
-
keyframes: first.propStatus.keyframes
|
|
130
|
-
.map((keyframe) => {
|
|
131
|
-
var _a;
|
|
132
|
-
return ({
|
|
133
|
-
...keyframe,
|
|
134
|
-
frame: (_a = moves.get(keyframe.frame)) !== null && _a !== void 0 ? _a : keyframe.frame,
|
|
135
|
-
});
|
|
136
|
-
})
|
|
137
|
-
.sort((a, b) => a.frame - b.frame),
|
|
138
|
-
},
|
|
216
|
+
status: movedStatus,
|
|
139
217
|
};
|
|
140
218
|
};
|
|
141
219
|
const applyDragOverrides = ({ delta, setDragOverrides, setEffectDragOverrides, targets, }) => {
|
|
@@ -378,3 +456,201 @@ const useTimelineKeyframeDrag = ({ frame, nodePathInfo, onSelect, selectable, se
|
|
|
378
456
|
]);
|
|
379
457
|
};
|
|
380
458
|
exports.useTimelineKeyframeDrag = useTimelineKeyframeDrag;
|
|
459
|
+
const useTimelineEasingKeyframeDrag = ({ onSelect, selectable, selected, selectionItem, }) => {
|
|
460
|
+
const videoConfig = (0, remotion_1.useVideoConfig)();
|
|
461
|
+
const timelineWidth = (0, react_1.useContext)(TimelineWidthProvider_1.TimelineWidthContext);
|
|
462
|
+
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
463
|
+
const sequencesRef = (0, react_1.useContext)(remotion_1.Internals.SequenceManagerRefContext);
|
|
464
|
+
const { overrideIdToNodePathMappings } = (0, react_1.useContext)(remotion_1.Internals.OverrideIdsToNodePathsGettersContext);
|
|
465
|
+
const propStatusesRef = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesRefContext);
|
|
466
|
+
const { clearDragOverrides, clearEffectDragOverrides, setPropStatuses, setDragOverrides, setEffectDragOverrides, } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
467
|
+
const currentSelection = (0, TimelineSelection_1.useCurrentTimelineSelectionStateAsRef)();
|
|
468
|
+
const { clearDraggedKeyframes } = (0, TimelineKeyframeDragState_1.useTimelineKeyframeDragState)();
|
|
469
|
+
return (0, react_1.useCallback)((e) => {
|
|
470
|
+
if (e.button !== 0 || !selectable) {
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
e.preventDefault();
|
|
474
|
+
e.stopPropagation();
|
|
475
|
+
const interaction = {
|
|
476
|
+
shiftKey: e.shiftKey,
|
|
477
|
+
toggleKey: e.metaKey || e.ctrlKey,
|
|
478
|
+
};
|
|
479
|
+
const shouldSelectOnPointerDown = !selected && !interaction.shiftKey && !interaction.toggleKey;
|
|
480
|
+
if (timelineWidth === null || previewServerState.type !== 'connected') {
|
|
481
|
+
onSelect(interaction);
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
const keyframesToDrag = (0, exports.getKeyframesForTimelineEasingDrag)({
|
|
485
|
+
currentSelections: currentSelection.current.selectedItems,
|
|
486
|
+
interaction,
|
|
487
|
+
selectionItem,
|
|
488
|
+
selected,
|
|
489
|
+
});
|
|
490
|
+
if (shouldSelectOnPointerDown) {
|
|
491
|
+
onSelect(interaction);
|
|
492
|
+
}
|
|
493
|
+
const startClientX = e.clientX;
|
|
494
|
+
let dragTargets = null;
|
|
495
|
+
let hasDragged = false;
|
|
496
|
+
let lastDelta = 0;
|
|
497
|
+
const propStatuses = propStatusesRef.current;
|
|
498
|
+
const sequences = sequencesRef.current;
|
|
499
|
+
const resolveDragTargets = () => {
|
|
500
|
+
if (dragTargets !== null) {
|
|
501
|
+
return dragTargets;
|
|
502
|
+
}
|
|
503
|
+
dragTargets = keyframesToDrag
|
|
504
|
+
.map((keyframe) => getTimelineKeyframeDragTarget({
|
|
505
|
+
propStatuses,
|
|
506
|
+
displayFrame: keyframe.frame,
|
|
507
|
+
nodePathInfo: keyframe.nodePathInfo,
|
|
508
|
+
overrideIdsToNodePaths: overrideIdToNodePathMappings,
|
|
509
|
+
sequences,
|
|
510
|
+
}))
|
|
511
|
+
.filter((target) => target !== null);
|
|
512
|
+
return dragTargets;
|
|
513
|
+
};
|
|
514
|
+
const cleanup = () => {
|
|
515
|
+
window.removeEventListener('pointermove', onPointerMove);
|
|
516
|
+
window.removeEventListener('pointerup', onPointerUp);
|
|
517
|
+
window.removeEventListener('pointercancel', onPointerCancel);
|
|
518
|
+
};
|
|
519
|
+
const clearActiveOverrides = () => {
|
|
520
|
+
const targets = dragTargets;
|
|
521
|
+
if (targets === null) {
|
|
522
|
+
return;
|
|
523
|
+
}
|
|
524
|
+
clearDragOverridesForTargets({
|
|
525
|
+
clearDragOverrides,
|
|
526
|
+
clearEffectDragOverrides,
|
|
527
|
+
targets,
|
|
528
|
+
});
|
|
529
|
+
};
|
|
530
|
+
const onPointerMove = (event) => {
|
|
531
|
+
const clientXDelta = event.clientX - startClientX;
|
|
532
|
+
if (!hasDragged && Math.abs(clientXDelta) < pointerDragThreshold) {
|
|
533
|
+
return;
|
|
534
|
+
}
|
|
535
|
+
const targets = resolveDragTargets();
|
|
536
|
+
if (targets.length === 0) {
|
|
537
|
+
cleanup();
|
|
538
|
+
clearDraggedKeyframes();
|
|
539
|
+
return;
|
|
540
|
+
}
|
|
541
|
+
const rawDelta = getFrameDelta({
|
|
542
|
+
clientXDelta,
|
|
543
|
+
durationInFrames: videoConfig.durationInFrames,
|
|
544
|
+
timelineWidth,
|
|
545
|
+
});
|
|
546
|
+
const delta = (0, get_bounded_keyframe_drag_delta_1.getBoundedKeyframeDragDelta)({
|
|
547
|
+
delta: rawDelta,
|
|
548
|
+
durationInFrames: videoConfig.durationInFrames,
|
|
549
|
+
targets,
|
|
550
|
+
});
|
|
551
|
+
if (hasDragged && delta === lastDelta) {
|
|
552
|
+
return;
|
|
553
|
+
}
|
|
554
|
+
hasDragged = true;
|
|
555
|
+
lastDelta = delta;
|
|
556
|
+
if (!canMoveTimelineKeyframeDragTargets({ targets, delta })) {
|
|
557
|
+
clearActiveOverrides();
|
|
558
|
+
clearDraggedKeyframes();
|
|
559
|
+
return;
|
|
560
|
+
}
|
|
561
|
+
applyDragOverrides({
|
|
562
|
+
delta,
|
|
563
|
+
setDragOverrides,
|
|
564
|
+
setEffectDragOverrides,
|
|
565
|
+
targets,
|
|
566
|
+
});
|
|
567
|
+
};
|
|
568
|
+
const onPointerUp = () => {
|
|
569
|
+
cleanup();
|
|
570
|
+
const targets = dragTargets;
|
|
571
|
+
if (!hasDragged) {
|
|
572
|
+
if (!shouldSelectOnPointerDown) {
|
|
573
|
+
onSelect(interaction);
|
|
574
|
+
}
|
|
575
|
+
clearActiveOverrides();
|
|
576
|
+
clearDraggedKeyframes();
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
if (lastDelta === 0 || targets === null) {
|
|
580
|
+
clearActiveOverrides();
|
|
581
|
+
clearDraggedKeyframes();
|
|
582
|
+
return;
|
|
583
|
+
}
|
|
584
|
+
if (!canMoveTimelineKeyframeDragTargets({
|
|
585
|
+
targets,
|
|
586
|
+
delta: lastDelta,
|
|
587
|
+
})) {
|
|
588
|
+
clearActiveOverrides();
|
|
589
|
+
clearDraggedKeyframes();
|
|
590
|
+
return;
|
|
591
|
+
}
|
|
592
|
+
currentSelection.current.selectItems((0, exports.getTimelineSelectionsAfterEasingKeyframeDrag)({
|
|
593
|
+
delta: lastDelta,
|
|
594
|
+
selections: currentSelection.current.selectedItems,
|
|
595
|
+
targets: targets.map((target) => ({
|
|
596
|
+
nodePathInfo: target.nodePathInfo,
|
|
597
|
+
frame: target.displayFrame,
|
|
598
|
+
})),
|
|
599
|
+
}));
|
|
600
|
+
clearActiveOverrides();
|
|
601
|
+
clearDraggedKeyframes();
|
|
602
|
+
(0, call_move_keyframe_1.callMoveKeyframes)({
|
|
603
|
+
sequenceKeyframes: targets
|
|
604
|
+
.filter((target) => target.type === 'sequence')
|
|
605
|
+
.map((target) => ({
|
|
606
|
+
fileName: target.fileName,
|
|
607
|
+
nodePath: target.nodePath,
|
|
608
|
+
fieldKey: target.fieldKey,
|
|
609
|
+
fromFrame: target.sourceFrame,
|
|
610
|
+
toFrame: target.sourceFrame + lastDelta,
|
|
611
|
+
schema: target.schema,
|
|
612
|
+
})),
|
|
613
|
+
effectKeyframes: targets
|
|
614
|
+
.filter((target) => target.type === 'effect')
|
|
615
|
+
.map((target) => ({
|
|
616
|
+
fileName: target.fileName,
|
|
617
|
+
nodePath: target.nodePath,
|
|
618
|
+
effectIndex: target.effectIndex,
|
|
619
|
+
fieldKey: target.fieldKey,
|
|
620
|
+
fromFrame: target.sourceFrame,
|
|
621
|
+
toFrame: target.sourceFrame + lastDelta,
|
|
622
|
+
schema: target.schema,
|
|
623
|
+
})),
|
|
624
|
+
setPropStatuses,
|
|
625
|
+
clientId: previewServerState.clientId,
|
|
626
|
+
}).catch(() => undefined);
|
|
627
|
+
};
|
|
628
|
+
const onPointerCancel = () => {
|
|
629
|
+
cleanup();
|
|
630
|
+
clearActiveOverrides();
|
|
631
|
+
clearDraggedKeyframes();
|
|
632
|
+
};
|
|
633
|
+
window.addEventListener('pointermove', onPointerMove);
|
|
634
|
+
window.addEventListener('pointerup', onPointerUp);
|
|
635
|
+
window.addEventListener('pointercancel', onPointerCancel);
|
|
636
|
+
}, [
|
|
637
|
+
clearDragOverrides,
|
|
638
|
+
clearEffectDragOverrides,
|
|
639
|
+
clearDraggedKeyframes,
|
|
640
|
+
currentSelection,
|
|
641
|
+
onSelect,
|
|
642
|
+
overrideIdToNodePathMappings,
|
|
643
|
+
propStatusesRef,
|
|
644
|
+
previewServerState,
|
|
645
|
+
selectable,
|
|
646
|
+
selected,
|
|
647
|
+
selectionItem,
|
|
648
|
+
sequencesRef,
|
|
649
|
+
setPropStatuses,
|
|
650
|
+
setDragOverrides,
|
|
651
|
+
setEffectDragOverrides,
|
|
652
|
+
timelineWidth,
|
|
653
|
+
videoConfig.durationInFrames,
|
|
654
|
+
]);
|
|
655
|
+
};
|
|
656
|
+
exports.useTimelineEasingKeyframeDrag = useTimelineEasingKeyframeDrag;
|
|
@@ -1,18 +1,44 @@
|
|
|
1
|
-
import { type FileType, type
|
|
1
|
+
import { type ComponentProp, type FileType, type InsertableCompositionElementPosition } from '@remotion/studio-shared';
|
|
2
|
+
export type InsertElementDropPosition = {
|
|
3
|
+
readonly centerX: number;
|
|
4
|
+
readonly centerY: number;
|
|
5
|
+
};
|
|
2
6
|
export declare const getAssetElement: ({ fileType, src, }: {
|
|
3
7
|
fileType: FileType;
|
|
4
8
|
src: string;
|
|
5
|
-
}) =>
|
|
6
|
-
|
|
9
|
+
}) => {
|
|
10
|
+
type: "asset";
|
|
11
|
+
assetType: "audio" | "gif" | "image" | "video";
|
|
12
|
+
src: string;
|
|
13
|
+
srcType: "remote" | "static";
|
|
14
|
+
dimensions: {
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
} | null;
|
|
18
|
+
position: InsertableCompositionElementPosition | null;
|
|
19
|
+
} | null;
|
|
20
|
+
export declare const getAssetElementFromPath: (assetPath: string) => {
|
|
21
|
+
type: "asset";
|
|
22
|
+
assetType: "audio" | "gif" | "image" | "video";
|
|
23
|
+
src: string;
|
|
24
|
+
srcType: "remote" | "static";
|
|
25
|
+
dimensions: {
|
|
26
|
+
width: number;
|
|
27
|
+
height: number;
|
|
28
|
+
} | null;
|
|
29
|
+
position: InsertableCompositionElementPosition | null;
|
|
30
|
+
} | null;
|
|
7
31
|
export declare const pickFilesToImport: () => Promise<File[]>;
|
|
8
|
-
export declare const importAssets: ({ compositionFile, compositionId, files, }: {
|
|
32
|
+
export declare const importAssets: ({ compositionFile, compositionId, dropPosition, files, }: {
|
|
9
33
|
compositionFile: string;
|
|
10
34
|
compositionId: string;
|
|
35
|
+
dropPosition: InsertElementDropPosition | null;
|
|
11
36
|
files: File[];
|
|
12
37
|
}) => Promise<void>;
|
|
13
|
-
export declare const importRemoteAsset: ({ compositionFile, compositionId, url, }: {
|
|
38
|
+
export declare const importRemoteAsset: ({ compositionFile, compositionId, dropPosition, url, }: {
|
|
14
39
|
compositionFile: string;
|
|
15
40
|
compositionId: string;
|
|
41
|
+
dropPosition: InsertElementDropPosition | null;
|
|
16
42
|
url: string;
|
|
17
43
|
}) => Promise<void>;
|
|
18
44
|
export declare const insertRemoteAudio: ({ compositionFile, compositionId, url, }: {
|
|
@@ -20,18 +46,20 @@ export declare const insertRemoteAudio: ({ compositionFile, compositionId, url,
|
|
|
20
46
|
compositionId: string;
|
|
21
47
|
url: string;
|
|
22
48
|
}) => Promise<void>;
|
|
23
|
-
export declare const insertExistingAssets: ({ assetPaths, compositionFile, compositionId, }: {
|
|
49
|
+
export declare const insertExistingAssets: ({ assetPaths, compositionFile, compositionId, dropPosition, }: {
|
|
24
50
|
assetPaths: string[];
|
|
25
51
|
compositionFile: string;
|
|
26
52
|
compositionId: string;
|
|
53
|
+
dropPosition: InsertElementDropPosition | null;
|
|
27
54
|
}) => Promise<void>;
|
|
28
|
-
export declare const insertComponent: ({ component, compositionFile, compositionId, }: {
|
|
55
|
+
export declare const insertComponent: ({ component, compositionFile, compositionId, dropPosition, }: {
|
|
29
56
|
component: {
|
|
30
57
|
componentName: string;
|
|
31
58
|
importName: string;
|
|
32
59
|
importPath: string;
|
|
33
|
-
props:
|
|
60
|
+
props: ComponentProp[];
|
|
34
61
|
};
|
|
35
62
|
compositionFile: string;
|
|
36
63
|
compositionId: string;
|
|
64
|
+
dropPosition: InsertElementDropPosition | null;
|
|
37
65
|
}) => Promise<void>;
|