@remotion/studio 4.0.476 → 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/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/OutlineToggle.js +1 -1
- package/dist/components/SelectedOutlineElement.d.ts +17 -0
- package/dist/components/SelectedOutlineElement.js +938 -0
- package/dist/components/SelectedOutlineOverlay.d.ts +4 -210
- package/dist/components/SelectedOutlineOverlay.js +64 -1637
- 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/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 +90 -130
- package/dist/components/Timeline/delete-selected-timeline-item.js +4 -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/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/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 +282 -1
- 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-0atarw3p.js → chunk-t8fjnw2d.js} +12570 -11492
- package/dist/esm/internals.mjs +12570 -11492
- package/dist/esm/previewEntry.mjs +12580 -11502
- 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
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uvsEqual = exports.compensateTranslateForTransformOrigin = exports.parseCssRotationToRadians = exports.clearSelectedOutlineRotationDragOverrides = exports.clearSelectedOutlineScaleDragOverrides = exports.getSelectedOutlineKeyboardNudgeDirection = exports.clearSelectedOutlineDragOverrides = exports.getSelectedOutlineRotationDragChanges = exports.getSelectedOutlineRotationDragValues = exports.getSelectedOutlineRotationDragStates = exports.getSelectedOutlineScaleDragChanges = exports.getSelectedOutlineScaleDragValues = exports.getSelectedOutlineScaleDragStates = exports.getSelectedOutlineScaleEdgeInfo = exports.getSelectedOutlineKeyboardNudgeDeltas = exports.getSelectedOutlineKeyboardNudgeDelta = exports.getSelectedOutlineDragChanges = exports.isSelectedOutlineDragPastThreshold = exports.applySelectedOutlineDragAxisLock = exports.getSelectedOutlineDragValues = exports.getSelectedOutlineDragStates = void 0;
|
|
4
|
+
const remotion_1 = require("remotion");
|
|
5
|
+
const no_react_1 = require("remotion/no-react");
|
|
6
|
+
const selected_outline_geometry_1 = require("./selected-outline-geometry");
|
|
7
|
+
const selected_outline_measurement_1 = require("./selected-outline-measurement");
|
|
8
|
+
const selected_outline_types_1 = require("./selected-outline-types");
|
|
9
|
+
const timeline_field_utils_1 = require("./Timeline/timeline-field-utils");
|
|
10
|
+
const timeline_rotation_utils_1 = require("./Timeline/timeline-rotation-utils");
|
|
11
|
+
const timeline_translate_utils_1 = require("./Timeline/timeline-translate-utils");
|
|
12
|
+
const TimelineScaleField_1 = require("./Timeline/TimelineScaleField");
|
|
13
|
+
const getSelectedOutlineDragStates = ({ dragTargets, getDragOverrides, timelinePosition, }) => {
|
|
14
|
+
return dragTargets.map((target) => {
|
|
15
|
+
var _a;
|
|
16
|
+
const dragOverrideValue = ((_a = getDragOverrides(target.nodePath)) !== null && _a !== void 0 ? _a : {})[selected_outline_types_1.translateFieldKey];
|
|
17
|
+
const sourceFrame = timelinePosition - target.keyframeDisplayOffset;
|
|
18
|
+
const effectiveValue = remotion_1.Internals.getEffectiveVisualModeValue({
|
|
19
|
+
propStatus: target.propStatus,
|
|
20
|
+
dragOverrideValue,
|
|
21
|
+
defaultValue: target.fieldDefault,
|
|
22
|
+
frame: sourceFrame,
|
|
23
|
+
shouldResortToDefaultValueIfUndefined: true,
|
|
24
|
+
});
|
|
25
|
+
const [startX, startY] = (0, timeline_translate_utils_1.parseTranslate)(String(effectiveValue !== null && effectiveValue !== void 0 ? effectiveValue : '0px 0px'));
|
|
26
|
+
return {
|
|
27
|
+
defaultValue: target.fieldDefault !== undefined
|
|
28
|
+
? JSON.stringify(target.fieldDefault)
|
|
29
|
+
: null,
|
|
30
|
+
key: remotion_1.Internals.makeSequencePropsSubscriptionKey(target.nodePath),
|
|
31
|
+
sourceFrame,
|
|
32
|
+
startX,
|
|
33
|
+
startY,
|
|
34
|
+
target,
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
exports.getSelectedOutlineDragStates = getSelectedOutlineDragStates;
|
|
39
|
+
const getSelectedOutlineDragValues = ({ dragStates, deltaX, deltaY, }) => {
|
|
40
|
+
return new Map(dragStates.map((dragState) => [
|
|
41
|
+
dragState.key,
|
|
42
|
+
(0, timeline_translate_utils_1.serializeTranslate)(dragState.startX + deltaX, dragState.startY + deltaY),
|
|
43
|
+
]));
|
|
44
|
+
};
|
|
45
|
+
exports.getSelectedOutlineDragValues = getSelectedOutlineDragValues;
|
|
46
|
+
const applySelectedOutlineDragAxisLock = ({ deltaX, deltaY, axisLocked, }) => {
|
|
47
|
+
if (!axisLocked) {
|
|
48
|
+
return { deltaX, deltaY };
|
|
49
|
+
}
|
|
50
|
+
if (Math.abs(deltaX) >= Math.abs(deltaY)) {
|
|
51
|
+
return { deltaX, deltaY: 0 };
|
|
52
|
+
}
|
|
53
|
+
return { deltaX: 0, deltaY };
|
|
54
|
+
};
|
|
55
|
+
exports.applySelectedOutlineDragAxisLock = applySelectedOutlineDragAxisLock;
|
|
56
|
+
const isSelectedOutlineDragPastThreshold = ({ deltaX, deltaY, }) => {
|
|
57
|
+
return Math.hypot(deltaX, deltaY) >= selected_outline_types_1.selectedOutlineDragThresholdPx;
|
|
58
|
+
};
|
|
59
|
+
exports.isSelectedOutlineDragPastThreshold = isSelectedOutlineDragPastThreshold;
|
|
60
|
+
const getSelectedOutlineDragChanges = ({ dragStates, lastValues, }) => {
|
|
61
|
+
const changes = [];
|
|
62
|
+
for (const dragState of dragStates) {
|
|
63
|
+
const value = lastValues.get(dragState.key);
|
|
64
|
+
if (value === undefined) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (dragState.target.propStatus.status === 'keyframed') {
|
|
68
|
+
const startValue = (0, timeline_translate_utils_1.serializeTranslate)(dragState.startX, dragState.startY);
|
|
69
|
+
if (value === startValue) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
changes.push({
|
|
73
|
+
type: 'keyframed',
|
|
74
|
+
fileName: dragState.target.nodePath.absolutePath,
|
|
75
|
+
nodePath: dragState.target.nodePath,
|
|
76
|
+
fieldKey: selected_outline_types_1.translateFieldKey,
|
|
77
|
+
sourceFrame: dragState.sourceFrame,
|
|
78
|
+
value,
|
|
79
|
+
schema: dragState.target.schema,
|
|
80
|
+
clientId: dragState.target.clientId,
|
|
81
|
+
});
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const stringifiedValue = JSON.stringify(value);
|
|
85
|
+
const shouldSave = value !== dragState.target.propStatus.codeValue &&
|
|
86
|
+
!(dragState.defaultValue === stringifiedValue &&
|
|
87
|
+
dragState.target.propStatus.codeValue === undefined);
|
|
88
|
+
if (!shouldSave) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
changes.push({
|
|
92
|
+
type: 'static',
|
|
93
|
+
fileName: dragState.target.nodePath.absolutePath,
|
|
94
|
+
nodePath: dragState.target.nodePath,
|
|
95
|
+
fieldKey: selected_outline_types_1.translateFieldKey,
|
|
96
|
+
value,
|
|
97
|
+
defaultValue: dragState.defaultValue,
|
|
98
|
+
schema: dragState.target.schema,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return changes;
|
|
102
|
+
};
|
|
103
|
+
exports.getSelectedOutlineDragChanges = getSelectedOutlineDragChanges;
|
|
104
|
+
const getSelectedOutlineKeyboardNudgeDelta = ({ direction, shiftKey, }) => {
|
|
105
|
+
const increment = shiftKey ? 10 : 1;
|
|
106
|
+
return direction === 'left' || direction === 'up' ? -increment : increment;
|
|
107
|
+
};
|
|
108
|
+
exports.getSelectedOutlineKeyboardNudgeDelta = getSelectedOutlineKeyboardNudgeDelta;
|
|
109
|
+
const getSelectedOutlineKeyboardNudgeDeltas = ({ deltaX, deltaY, direction, shiftKey, }) => {
|
|
110
|
+
const delta = (0, exports.getSelectedOutlineKeyboardNudgeDelta)({
|
|
111
|
+
direction,
|
|
112
|
+
shiftKey,
|
|
113
|
+
});
|
|
114
|
+
if (direction === 'left' || direction === 'right') {
|
|
115
|
+
return { deltaX: deltaX + delta, deltaY };
|
|
116
|
+
}
|
|
117
|
+
return { deltaX, deltaY: deltaY + delta };
|
|
118
|
+
};
|
|
119
|
+
exports.getSelectedOutlineKeyboardNudgeDeltas = getSelectedOutlineKeyboardNudgeDeltas;
|
|
120
|
+
const getScaleCursor = (normal) => {
|
|
121
|
+
const degrees = Math.atan2(normal.y, normal.x) * (180 / Math.PI);
|
|
122
|
+
const normalizedDegrees = ((degrees % 180) + 180) % 180;
|
|
123
|
+
const snappedDegrees = Math.round(normalizedDegrees / 45) * 45;
|
|
124
|
+
if (snappedDegrees === 0 || snappedDegrees === 180) {
|
|
125
|
+
return 'ew-resize';
|
|
126
|
+
}
|
|
127
|
+
if (snappedDegrees === 45) {
|
|
128
|
+
return 'nwse-resize';
|
|
129
|
+
}
|
|
130
|
+
if (snappedDegrees === 90) {
|
|
131
|
+
return 'ns-resize';
|
|
132
|
+
}
|
|
133
|
+
return 'nesw-resize';
|
|
134
|
+
};
|
|
135
|
+
const getSelectedOutlineScaleEdgeInfo = (points, edge) => {
|
|
136
|
+
const [tl, tr, br, bl] = points;
|
|
137
|
+
const edgePoints = {
|
|
138
|
+
top: { start: tl, end: tr, oppositeStart: bl, oppositeEnd: br },
|
|
139
|
+
right: { start: tr, end: br, oppositeStart: tl, oppositeEnd: bl },
|
|
140
|
+
bottom: { start: bl, end: br, oppositeStart: tl, oppositeEnd: tr },
|
|
141
|
+
left: { start: tl, end: bl, oppositeStart: tr, oppositeEnd: br },
|
|
142
|
+
}[edge];
|
|
143
|
+
const edgeMidpoint = (0, selected_outline_measurement_1.midpoint)(edgePoints.start, edgePoints.end);
|
|
144
|
+
const oppositeMidpoint = (0, selected_outline_measurement_1.midpoint)(edgePoints.oppositeStart, edgePoints.oppositeEnd);
|
|
145
|
+
const outward = (0, selected_outline_measurement_1.vectorBetween)(oppositeMidpoint, edgeMidpoint);
|
|
146
|
+
const length = (0, selected_outline_measurement_1.vectorLength)(outward);
|
|
147
|
+
if (length < 0.001) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
axis: edge === 'left' || edge === 'right' ? 'x' : 'y',
|
|
152
|
+
cursor: getScaleCursor(outward),
|
|
153
|
+
end: edgePoints.end,
|
|
154
|
+
extent: length,
|
|
155
|
+
normal: { x: outward.x / length, y: outward.y / length },
|
|
156
|
+
start: edgePoints.start,
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
exports.getSelectedOutlineScaleEdgeInfo = getSelectedOutlineScaleEdgeInfo;
|
|
160
|
+
const getSelectedOutlineScaleDragStates = ({ dragTargets, getDragOverrides, timelinePosition, }) => {
|
|
161
|
+
return dragTargets.map((target) => {
|
|
162
|
+
var _a;
|
|
163
|
+
const dragOverrideValue = ((_a = getDragOverrides(target.nodePath)) !== null && _a !== void 0 ? _a : {})[selected_outline_types_1.scaleFieldKey];
|
|
164
|
+
const sourceFrame = timelinePosition - target.keyframeDisplayOffset;
|
|
165
|
+
const effectiveValue = remotion_1.Internals.getEffectiveVisualModeValue({
|
|
166
|
+
propStatus: target.propStatus,
|
|
167
|
+
dragOverrideValue,
|
|
168
|
+
defaultValue: target.fieldDefault,
|
|
169
|
+
frame: sourceFrame,
|
|
170
|
+
shouldResortToDefaultValueIfUndefined: true,
|
|
171
|
+
});
|
|
172
|
+
const [startX, startY, startZ] = no_react_1.NoReactInternals.parseScaleValue(effectiveValue);
|
|
173
|
+
return {
|
|
174
|
+
defaultValue: target.fieldDefault !== undefined
|
|
175
|
+
? JSON.stringify(target.fieldDefault)
|
|
176
|
+
: null,
|
|
177
|
+
key: remotion_1.Internals.makeSequencePropsSubscriptionKey(target.nodePath),
|
|
178
|
+
sourceFrame,
|
|
179
|
+
startX,
|
|
180
|
+
startY,
|
|
181
|
+
startZ,
|
|
182
|
+
target,
|
|
183
|
+
};
|
|
184
|
+
});
|
|
185
|
+
};
|
|
186
|
+
exports.getSelectedOutlineScaleDragStates = getSelectedOutlineScaleDragStates;
|
|
187
|
+
const getSelectedOutlineScaleDragValues = ({ axis, dragStates, scaleFactor, }) => {
|
|
188
|
+
return new Map(dragStates.map((dragState) => {
|
|
189
|
+
var _a, _b;
|
|
190
|
+
const min = (_a = dragState.target.fieldSchema.min) !== null && _a !== void 0 ? _a : -Infinity;
|
|
191
|
+
const max = (_b = dragState.target.fieldSchema.max) !== null && _b !== void 0 ? _b : Infinity;
|
|
192
|
+
const decimalPlaces = (0, timeline_field_utils_1.getTimelineDisplayDecimalPlaces)({
|
|
193
|
+
defaultDecimalPlaces: 3,
|
|
194
|
+
step: dragState.target.fieldSchema.step,
|
|
195
|
+
});
|
|
196
|
+
const baseX = dragState.startX;
|
|
197
|
+
const baseY = dragState.startY;
|
|
198
|
+
const newValue = (axis === 'x' ? baseX : baseY) * scaleFactor;
|
|
199
|
+
const [rawX, rawY] = dragState.target.linked
|
|
200
|
+
? (0, TimelineScaleField_1.getLinkedScale)({
|
|
201
|
+
axis,
|
|
202
|
+
newValue,
|
|
203
|
+
baseX,
|
|
204
|
+
baseY,
|
|
205
|
+
min,
|
|
206
|
+
max,
|
|
207
|
+
})
|
|
208
|
+
: axis === 'x'
|
|
209
|
+
? [(0, selected_outline_geometry_1.clamp)(newValue, min, max), baseY]
|
|
210
|
+
: [baseX, (0, selected_outline_geometry_1.clamp)(newValue, min, max)];
|
|
211
|
+
const x = (0, timeline_field_utils_1.roundToDecimalPlaces)(rawX, decimalPlaces);
|
|
212
|
+
const y = (0, timeline_field_utils_1.roundToDecimalPlaces)(rawY, decimalPlaces);
|
|
213
|
+
return [
|
|
214
|
+
dragState.key,
|
|
215
|
+
no_react_1.NoReactInternals.serializeScaleValue([x, y, dragState.startZ]),
|
|
216
|
+
];
|
|
217
|
+
}));
|
|
218
|
+
};
|
|
219
|
+
exports.getSelectedOutlineScaleDragValues = getSelectedOutlineScaleDragValues;
|
|
220
|
+
const getSelectedOutlineScaleDragChanges = ({ dragStates, lastValues, }) => {
|
|
221
|
+
const changes = [];
|
|
222
|
+
for (const dragState of dragStates) {
|
|
223
|
+
const value = lastValues.get(dragState.key);
|
|
224
|
+
if (value === undefined) {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
if (dragState.target.propStatus.status === 'keyframed') {
|
|
228
|
+
const startValue = no_react_1.NoReactInternals.serializeScaleValue([
|
|
229
|
+
dragState.startX,
|
|
230
|
+
dragState.startY,
|
|
231
|
+
dragState.startZ,
|
|
232
|
+
]);
|
|
233
|
+
if (value === startValue) {
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
changes.push({
|
|
237
|
+
type: 'keyframed',
|
|
238
|
+
fileName: dragState.target.nodePath.absolutePath,
|
|
239
|
+
nodePath: dragState.target.nodePath,
|
|
240
|
+
fieldKey: selected_outline_types_1.scaleFieldKey,
|
|
241
|
+
sourceFrame: dragState.sourceFrame,
|
|
242
|
+
value,
|
|
243
|
+
schema: dragState.target.schema,
|
|
244
|
+
clientId: dragState.target.clientId,
|
|
245
|
+
});
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
const stringifiedValue = JSON.stringify(value);
|
|
249
|
+
const shouldSave = stringifiedValue !==
|
|
250
|
+
JSON.stringify(dragState.target.propStatus.codeValue) &&
|
|
251
|
+
!(dragState.defaultValue === stringifiedValue &&
|
|
252
|
+
dragState.target.propStatus.codeValue === undefined);
|
|
253
|
+
if (!shouldSave) {
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
changes.push({
|
|
257
|
+
type: 'static',
|
|
258
|
+
fileName: dragState.target.nodePath.absolutePath,
|
|
259
|
+
nodePath: dragState.target.nodePath,
|
|
260
|
+
fieldKey: selected_outline_types_1.scaleFieldKey,
|
|
261
|
+
value,
|
|
262
|
+
defaultValue: dragState.defaultValue,
|
|
263
|
+
schema: dragState.target.schema,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
return changes;
|
|
267
|
+
};
|
|
268
|
+
exports.getSelectedOutlineScaleDragChanges = getSelectedOutlineScaleDragChanges;
|
|
269
|
+
const getSelectedOutlineRotationDragStates = ({ dragTargets, getDragOverrides, timelinePosition, }) => {
|
|
270
|
+
return dragTargets.map((target) => {
|
|
271
|
+
var _a;
|
|
272
|
+
const dragOverrideValue = ((_a = getDragOverrides(target.nodePath)) !== null && _a !== void 0 ? _a : {})[selected_outline_types_1.rotateFieldKey];
|
|
273
|
+
const sourceFrame = timelinePosition - target.keyframeDisplayOffset;
|
|
274
|
+
const effectiveValue = remotion_1.Internals.getEffectiveVisualModeValue({
|
|
275
|
+
propStatus: target.propStatus,
|
|
276
|
+
dragOverrideValue,
|
|
277
|
+
defaultValue: target.fieldDefault,
|
|
278
|
+
frame: sourceFrame,
|
|
279
|
+
shouldResortToDefaultValueIfUndefined: true,
|
|
280
|
+
});
|
|
281
|
+
return {
|
|
282
|
+
defaultValue: target.fieldDefault !== undefined
|
|
283
|
+
? JSON.stringify(target.fieldDefault)
|
|
284
|
+
: null,
|
|
285
|
+
key: remotion_1.Internals.makeSequencePropsSubscriptionKey(target.nodePath),
|
|
286
|
+
sourceFrame,
|
|
287
|
+
startDegrees: (0, timeline_rotation_utils_1.parseCssRotationToDegrees)(String(effectiveValue !== null && effectiveValue !== void 0 ? effectiveValue : '0deg')),
|
|
288
|
+
target,
|
|
289
|
+
};
|
|
290
|
+
});
|
|
291
|
+
};
|
|
292
|
+
exports.getSelectedOutlineRotationDragStates = getSelectedOutlineRotationDragStates;
|
|
293
|
+
const getSelectedOutlineRotationDragValues = ({ dragStates, rotationDeltaDegrees, }) => {
|
|
294
|
+
return new Map(dragStates.map((dragState) => {
|
|
295
|
+
const decimalPlaces = (0, timeline_field_utils_1.getTimelineDisplayDecimalPlaces)({
|
|
296
|
+
defaultDecimalPlaces: 1,
|
|
297
|
+
step: dragState.target.fieldSchema.step,
|
|
298
|
+
});
|
|
299
|
+
return [
|
|
300
|
+
dragState.key,
|
|
301
|
+
(0, timeline_rotation_utils_1.serializeCssRotation)(dragState.startDegrees + rotationDeltaDegrees, decimalPlaces),
|
|
302
|
+
];
|
|
303
|
+
}));
|
|
304
|
+
};
|
|
305
|
+
exports.getSelectedOutlineRotationDragValues = getSelectedOutlineRotationDragValues;
|
|
306
|
+
const getSelectedOutlineRotationDragChanges = ({ dragStates, lastValues, }) => {
|
|
307
|
+
const changes = [];
|
|
308
|
+
for (const dragState of dragStates) {
|
|
309
|
+
const value = lastValues.get(dragState.key);
|
|
310
|
+
if (value === undefined) {
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
if (dragState.target.propStatus.status === 'keyframed') {
|
|
314
|
+
const decimalPlaces = (0, timeline_field_utils_1.getTimelineDisplayDecimalPlaces)({
|
|
315
|
+
defaultDecimalPlaces: 1,
|
|
316
|
+
step: dragState.target.fieldSchema.step,
|
|
317
|
+
});
|
|
318
|
+
const startValue = (0, timeline_rotation_utils_1.serializeCssRotation)(dragState.startDegrees, decimalPlaces);
|
|
319
|
+
if (value === startValue) {
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
changes.push({
|
|
323
|
+
type: 'keyframed',
|
|
324
|
+
fileName: dragState.target.nodePath.absolutePath,
|
|
325
|
+
nodePath: dragState.target.nodePath,
|
|
326
|
+
fieldKey: selected_outline_types_1.rotateFieldKey,
|
|
327
|
+
sourceFrame: dragState.sourceFrame,
|
|
328
|
+
value,
|
|
329
|
+
schema: dragState.target.schema,
|
|
330
|
+
clientId: dragState.target.clientId,
|
|
331
|
+
});
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
const stringifiedValue = JSON.stringify(value);
|
|
335
|
+
const shouldSave = value !== dragState.target.propStatus.codeValue &&
|
|
336
|
+
!(dragState.defaultValue === stringifiedValue &&
|
|
337
|
+
dragState.target.propStatus.codeValue === undefined);
|
|
338
|
+
if (!shouldSave) {
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
341
|
+
changes.push({
|
|
342
|
+
type: 'static',
|
|
343
|
+
fileName: dragState.target.nodePath.absolutePath,
|
|
344
|
+
nodePath: dragState.target.nodePath,
|
|
345
|
+
fieldKey: selected_outline_types_1.rotateFieldKey,
|
|
346
|
+
value,
|
|
347
|
+
defaultValue: dragState.defaultValue,
|
|
348
|
+
schema: dragState.target.schema,
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
return changes;
|
|
352
|
+
};
|
|
353
|
+
exports.getSelectedOutlineRotationDragChanges = getSelectedOutlineRotationDragChanges;
|
|
354
|
+
const clearSelectedOutlineDragOverrides = ({ clearDragOverrides, dragStates, }) => {
|
|
355
|
+
for (const dragState of dragStates) {
|
|
356
|
+
clearDragOverrides(dragState.target.nodePath);
|
|
357
|
+
}
|
|
358
|
+
};
|
|
359
|
+
exports.clearSelectedOutlineDragOverrides = clearSelectedOutlineDragOverrides;
|
|
360
|
+
const getSelectedOutlineKeyboardNudgeDirection = (key) => {
|
|
361
|
+
if (key === 'ArrowLeft') {
|
|
362
|
+
return 'left';
|
|
363
|
+
}
|
|
364
|
+
if (key === 'ArrowRight') {
|
|
365
|
+
return 'right';
|
|
366
|
+
}
|
|
367
|
+
if (key === 'ArrowUp') {
|
|
368
|
+
return 'up';
|
|
369
|
+
}
|
|
370
|
+
if (key === 'ArrowDown') {
|
|
371
|
+
return 'down';
|
|
372
|
+
}
|
|
373
|
+
return null;
|
|
374
|
+
};
|
|
375
|
+
exports.getSelectedOutlineKeyboardNudgeDirection = getSelectedOutlineKeyboardNudgeDirection;
|
|
376
|
+
const clearSelectedOutlineScaleDragOverrides = ({ clearDragOverrides, dragStates, }) => {
|
|
377
|
+
for (const dragState of dragStates) {
|
|
378
|
+
clearDragOverrides(dragState.target.nodePath);
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
exports.clearSelectedOutlineScaleDragOverrides = clearSelectedOutlineScaleDragOverrides;
|
|
382
|
+
const clearSelectedOutlineRotationDragOverrides = ({ clearDragOverrides, dragStates, }) => {
|
|
383
|
+
for (const dragState of dragStates) {
|
|
384
|
+
clearDragOverrides(dragState.target.nodePath);
|
|
385
|
+
}
|
|
386
|
+
};
|
|
387
|
+
exports.clearSelectedOutlineRotationDragOverrides = clearSelectedOutlineRotationDragOverrides;
|
|
388
|
+
const parseCssRotationToRadians = (value) => {
|
|
389
|
+
const match = value
|
|
390
|
+
.trim()
|
|
391
|
+
.match(/^([+-]?(?:\d+\.?\d*|\.\d+))(deg|rad|turn|grad)$/);
|
|
392
|
+
if (!match) {
|
|
393
|
+
return null;
|
|
394
|
+
}
|
|
395
|
+
const number = Number(match[1]);
|
|
396
|
+
if (!Number.isFinite(number)) {
|
|
397
|
+
return null;
|
|
398
|
+
}
|
|
399
|
+
if (match[2] === 'rad') {
|
|
400
|
+
return number;
|
|
401
|
+
}
|
|
402
|
+
if (match[2] === 'turn') {
|
|
403
|
+
return number * Math.PI * 2;
|
|
404
|
+
}
|
|
405
|
+
if (match[2] === 'grad') {
|
|
406
|
+
return (number / 400) * Math.PI * 2;
|
|
407
|
+
}
|
|
408
|
+
return (number / 180) * Math.PI;
|
|
409
|
+
};
|
|
410
|
+
exports.parseCssRotationToRadians = parseCssRotationToRadians;
|
|
411
|
+
const compensateTranslateForTransformOrigin = ({ startTranslate, deltaOrigin, rotate, scale, }) => {
|
|
412
|
+
const cos = Math.cos(rotate);
|
|
413
|
+
const sin = Math.sin(rotate);
|
|
414
|
+
const matrixA = cos * scale[0];
|
|
415
|
+
const matrixB = sin * scale[0];
|
|
416
|
+
const matrixC = -sin * scale[1];
|
|
417
|
+
const matrixD = cos * scale[1];
|
|
418
|
+
const transformedDeltaX = matrixA * deltaOrigin[0] + matrixC * deltaOrigin[1];
|
|
419
|
+
const transformedDeltaY = matrixB * deltaOrigin[0] + matrixD * deltaOrigin[1];
|
|
420
|
+
const compensationX = deltaOrigin[0] - transformedDeltaX;
|
|
421
|
+
const compensationY = deltaOrigin[1] - transformedDeltaY;
|
|
422
|
+
return [startTranslate[0] - compensationX, startTranslate[1] - compensationY];
|
|
423
|
+
};
|
|
424
|
+
exports.compensateTranslateForTransformOrigin = compensateTranslateForTransformOrigin;
|
|
425
|
+
const uvsEqual = (left, right) => Math.abs(left[0] - right[0]) < 0.000001 &&
|
|
426
|
+
Math.abs(left[1] - right[1]) < 0.000001;
|
|
427
|
+
exports.uvsEqual = uvsEqual;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { OverrideIdToNodePaths, TSequence } from 'remotion';
|
|
2
|
+
import type { OutlinePoint, SelectedOutline } from './selected-outline-geometry';
|
|
3
|
+
import type { SelectedOutlineTarget, SequenceWithSelectedOutline } from './selected-outline-types';
|
|
4
|
+
import { type TimelineSelection, type TimelineSelectionInteraction } from './Timeline/TimelineSelection';
|
|
5
|
+
export declare const pointToString: (point: OutlinePoint) => string;
|
|
6
|
+
export declare const midpoint: (from: OutlinePoint, to: OutlinePoint) => OutlinePoint;
|
|
7
|
+
export declare const getOutlineCenter: (points: readonly [OutlinePoint, OutlinePoint, OutlinePoint, OutlinePoint]) => OutlinePoint;
|
|
8
|
+
export declare const dot: (left: OutlinePoint, right: OutlinePoint) => number;
|
|
9
|
+
export declare const vectorLength: (vector: OutlinePoint) => number;
|
|
10
|
+
export declare const vectorBetween: (from: OutlinePoint, to: OutlinePoint) => OutlinePoint;
|
|
11
|
+
export declare const getAngleDegrees: (from: OutlinePoint, to: OutlinePoint) => number;
|
|
12
|
+
export declare const getSelectedOutlineRotationDeltaDegrees: ({ from, to, }: {
|
|
13
|
+
readonly from: number;
|
|
14
|
+
readonly to: number;
|
|
15
|
+
}) => number;
|
|
16
|
+
export type SelectedOutlineRotationCorner = 'top-left' | 'top-right' | 'bottom-right' | 'bottom-left';
|
|
17
|
+
export declare const getRotationCursor: (rotation: number) => string;
|
|
18
|
+
export declare const getSelectedOutlineRotationCornerInfo: (points: readonly [OutlinePoint, OutlinePoint, OutlinePoint, OutlinePoint], corner: SelectedOutlineRotationCorner) => {
|
|
19
|
+
center: OutlinePoint;
|
|
20
|
+
cursor: string;
|
|
21
|
+
cursorDegrees: number;
|
|
22
|
+
point: OutlinePoint;
|
|
23
|
+
};
|
|
24
|
+
export declare const getSelectedOutlineRotationPivot: ({ dimensions, points, transformOriginValue, }: {
|
|
25
|
+
readonly dimensions: {
|
|
26
|
+
readonly width: number;
|
|
27
|
+
readonly height: number;
|
|
28
|
+
} | null;
|
|
29
|
+
readonly points: readonly [OutlinePoint, OutlinePoint, OutlinePoint, OutlinePoint];
|
|
30
|
+
readonly transformOriginValue: string;
|
|
31
|
+
}) => OutlinePoint;
|
|
32
|
+
type SvgViewport = {
|
|
33
|
+
readonly x: number;
|
|
34
|
+
readonly y: number;
|
|
35
|
+
readonly width: number;
|
|
36
|
+
readonly height: number;
|
|
37
|
+
};
|
|
38
|
+
type SvgScreenCtm = Pick<DOMMatrixReadOnly, 'a' | 'b' | 'c' | 'd' | 'e' | 'f'>;
|
|
39
|
+
export declare const getTransformedSvgViewportPoints: ({ viewport, ctm, containerRect, }: {
|
|
40
|
+
readonly viewport: SvgViewport;
|
|
41
|
+
readonly ctm: SvgScreenCtm;
|
|
42
|
+
readonly containerRect: Pick<DOMRect, "left" | "top">;
|
|
43
|
+
}) => readonly [OutlinePoint, OutlinePoint, OutlinePoint, OutlinePoint];
|
|
44
|
+
export declare const getSelectedSequenceKeys: (selectedItems: readonly TimelineSelection[]) => Set<string>;
|
|
45
|
+
export declare const getSequenceKeysContainingSelection: (selectedItems: readonly TimelineSelection[]) => Set<string>;
|
|
46
|
+
export declare const getOutlineSelectionInteraction: ({ shiftKey, metaKey, ctrlKey, }: {
|
|
47
|
+
readonly shiftKey: boolean;
|
|
48
|
+
readonly metaKey: boolean;
|
|
49
|
+
readonly ctrlKey: boolean;
|
|
50
|
+
}) => TimelineSelectionInteraction;
|
|
51
|
+
type SelectedEffectFields = {
|
|
52
|
+
allFields: boolean;
|
|
53
|
+
fieldKeys: Set<string>;
|
|
54
|
+
};
|
|
55
|
+
export declare const getSelectedEffectFieldsBySequenceKey: (selectedItems: readonly TimelineSelection[]) => Map<string, Map<number, SelectedEffectFields>>;
|
|
56
|
+
type SelectedTransformOriginInfo = {
|
|
57
|
+
readonly sequenceKey: string;
|
|
58
|
+
readonly displayFrame: number | null;
|
|
59
|
+
};
|
|
60
|
+
export declare const getSelectedTransformOriginInfo: (selectedItems: readonly TimelineSelection[]) => SelectedTransformOriginInfo | null;
|
|
61
|
+
export declare const getSequencesWithSelectableOutlines: ({ sequences, overrideIdsToNodePaths, }: {
|
|
62
|
+
readonly sequences: readonly TSequence[];
|
|
63
|
+
readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
|
|
64
|
+
}) => SequenceWithSelectedOutline[];
|
|
65
|
+
export declare const measureOutlines: (container: SVGSVGElement, targets: readonly SelectedOutlineTarget[]) => SelectedOutline[];
|
|
66
|
+
export declare const outlinesAreEqual: (a: readonly SelectedOutline[], b: readonly SelectedOutline[]) => boolean;
|
|
67
|
+
export {};
|