@remotion/studio 4.0.507 → 4.0.509
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/FastRefreshProvider.js +13 -9
- package/dist/Studio.d.ts +5 -0
- package/dist/Studio.js +2 -2
- package/dist/components/Canvas.js +35 -5
- package/dist/components/CodingAgentIcon.d.ts +3 -1
- package/dist/components/CodingAgentIcon.js +4 -9
- package/dist/components/ColorPicker/AlphaSlider.js +2 -2
- package/dist/components/ColorPicker/HueSlider.js +2 -2
- package/dist/components/ColorPicker/SaturationValueArea.js +2 -2
- package/dist/components/ConfigureDefaultEditorModal.js +1 -1
- package/dist/components/ContextMenu.d.ts +1 -0
- package/dist/components/ContextMenu.js +32 -5
- package/dist/components/EditorContent.js +4 -3
- package/dist/components/EditorGuides/Guide.js +2 -2
- package/dist/components/EditorRuler/index.js +2 -2
- package/dist/components/ExplorerPanel.js +19 -1
- package/dist/components/InlineAction.d.ts +2 -1
- package/dist/components/InlineAction.js +3 -3
- package/dist/components/InspectorLocationCopy.js +1 -1
- package/dist/components/InspectorOpenInEditor.d.ts +1 -0
- package/dist/components/InspectorOpenInEditor.js +52 -8
- package/dist/components/InspectorPanel/AlignmentControls.js +2 -2
- package/dist/components/InspectorPanel/CompositionInspector.js +3 -1
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +3 -3
- package/dist/components/InspectorPanel/styles.js +1 -1
- package/dist/components/InspectorSequenceSection.js +36 -4
- package/dist/components/Menu/MenuItem.js +2 -2
- package/dist/components/MenuBuildIndicator.js +1 -1
- package/dist/components/ModalContainer.js +1 -1
- package/dist/components/Modals.js +2 -9
- package/dist/components/NewComposition/InputDragger.js +2 -2
- package/dist/components/NewComposition/NewComposition.d.ts +2 -0
- package/dist/components/NewComposition/NewComposition.js +38 -6
- package/dist/components/NewComposition/get-new-composition-defaults.d.ts +1 -1
- package/dist/components/NewComposition/get-new-composition-defaults.js +9 -1
- package/dist/components/PlayPause.d.ts +1 -1
- package/dist/components/PlayPause.js +61 -12
- package/dist/components/RenderButton.js +16 -12
- package/dist/components/RenderModal/GuiRenderStatus.js +23 -6
- package/dist/components/RenderModal/InfoBubble.d.ts +1 -0
- package/dist/components/RenderModal/InfoBubble.js +6 -4
- package/dist/components/RenderModal/InfoTooltip.d.ts +1 -0
- package/dist/components/RenderModal/InfoTooltip.js +12 -12
- package/dist/components/RenderModal/SchemaEditor/SchemaLabel.d.ts +5 -0
- package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +16 -3
- package/dist/components/RenderModal/SchemaEditor/ZodArrayEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodBooleanEditor.d.ts +2 -0
- package/dist/components/RenderModal/SchemaEditor/ZodBooleanEditor.js +3 -2
- package/dist/components/RenderModal/SchemaEditor/ZodColorEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodDateEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +2 -1
- package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodMatrixEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodNumberEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodObjectEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +6 -1
- package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodStringEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodSwitch.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodTextareaEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodTupleEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/zod-schema-type.d.ts +1 -0
- package/dist/components/RenderModal/SchemaEditor/zod-schema-type.js +12 -1
- package/dist/components/SelectedOutlineCanvasRotation.d.ts +9 -0
- package/dist/components/SelectedOutlineCanvasRotation.js +239 -0
- package/dist/components/SelectedOutlineCropControls.js +2 -2
- package/dist/components/SelectedOutlineElement.d.ts +2 -1
- package/dist/components/SelectedOutlineElement.js +40 -5
- package/dist/components/SelectedOutlineOverlay.d.ts +1 -1
- package/dist/components/SelectedOutlineOverlay.js +55 -26
- package/dist/components/SelectedOutlinePolygon.d.ts +1 -0
- package/dist/components/SelectedOutlinePolygon.js +6 -5
- package/dist/components/SelectedOutlineRenderer.d.ts +1 -0
- package/dist/components/SelectedOutlineRenderer.js +24 -7
- package/dist/components/SelectedOutlineRotationCornerHandle.d.ts +6 -0
- package/dist/components/SelectedOutlineRotationCornerHandle.js +9 -7
- package/dist/components/SelectedOutlineScaleEdgeLine.d.ts +2 -0
- package/dist/components/SelectedOutlineScaleEdgeLine.js +11 -7
- package/dist/components/SelectedOutlineTransformOriginHandle.js +50 -24
- package/dist/components/SelectedOutlineUvControls.js +8 -8
- package/dist/components/SequencePropsSubscriptionProvider.js +8 -0
- package/dist/components/SettingsModalFooter.js +1 -1
- package/dist/components/Splitter/SplitterHandle.js +2 -2
- package/dist/components/Tabs/index.d.ts +2 -0
- package/dist/components/Tabs/index.js +2 -2
- package/dist/components/Timeline/EasingEditorModal.js +2 -2
- package/dist/components/Timeline/SequencePropsObserver.js +97 -1
- package/dist/components/Timeline/SubscribeToNodePaths.js +4 -2
- package/dist/components/Timeline/Timeline.js +55 -1
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +99 -35
- package/dist/components/Timeline/TimelineDragHandler.js +2 -2
- package/dist/components/Timeline/TimelineEffectItem.js +1 -4
- package/dist/components/Timeline/TimelineEffectPropItem.js +7 -0
- package/dist/components/Timeline/TimelineFieldRowContent.js +10 -3
- package/dist/components/Timeline/TimelineInOutDragHandler.js +2 -2
- package/dist/components/Timeline/TimelineLayerEye.js +2 -2
- package/dist/components/Timeline/TimelineRotationField.js +84 -12
- package/dist/components/Timeline/TimelineScaleField.js +58 -4
- package/dist/components/Timeline/TimelineSelection.d.ts +4 -0
- package/dist/components/Timeline/TimelineSelection.js +47 -4
- package/dist/components/Timeline/TimelineSequenceItem.js +43 -25
- package/dist/components/Timeline/TimelineSequencePropItem.js +12 -3
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +6 -6
- package/dist/components/Timeline/TimelineTransformOriginField.js +78 -4
- package/dist/components/Timeline/TimelineTranslateField.js +55 -15
- package/dist/components/Timeline/Transform3DModeContext.d.ts +1 -0
- package/dist/components/Timeline/Transform3DModeContext.js +5 -0
- package/dist/components/Timeline/delete-selected-timeline-item.js +0 -6
- package/dist/components/Timeline/get-sequence-context-menu-items.js +14 -6
- package/dist/components/Timeline/keyframe-clipboard.d.ts +5 -1
- package/dist/components/Timeline/keyframe-clipboard.js +3 -2
- package/dist/components/Timeline/save-sequence-prop.js +16 -7
- package/dist/components/Timeline/sequence-prop-clipboard.d.ts +31 -0
- package/dist/components/Timeline/sequence-prop-clipboard.js +142 -0
- package/dist/components/Timeline/sequence-props-subscription-store.d.ts +2 -1
- package/dist/components/Timeline/sequence-props-subscription-store.js +5 -2
- package/dist/components/Timeline/timeline-field-display-utils.js +2 -2
- package/dist/components/Timeline/timeline-field-row-layout.d.ts +6 -0
- package/dist/components/Timeline/timeline-field-row-layout.js +16 -1
- package/dist/components/Timeline/timeline-rotation-utils.d.ts +16 -0
- package/dist/components/Timeline/timeline-rotation-utils.js +145 -4
- package/dist/components/Timeline/timeline-translate-utils.d.ts +3 -2
- package/dist/components/Timeline/timeline-translate-utils.js +8 -4
- package/dist/components/Timeline/transform-3d-mode.d.ts +6 -0
- package/dist/components/Timeline/transform-3d-mode.js +36 -0
- package/dist/components/Timeline/transform-origin-utils.d.ts +4 -0
- package/dist/components/Timeline/transform-origin-utils.js +12 -6
- package/dist/components/Timeline/update-selected-easing.js +8 -0
- package/dist/components/Timeline/use-open-sequence-in-apps.js +3 -1
- package/dist/components/Timeline/use-resolved-stack-react-to-change.d.ts +5 -1
- package/dist/components/Timeline/use-resolved-stack-react-to-change.js +67 -10
- package/dist/components/Timeline/use-sequence-props-subscription.d.ts +3 -1
- package/dist/components/Timeline/use-sequence-props-subscription.js +7 -2
- package/dist/components/Timeline/use-timeline-keyframe-drag.js +4 -4
- package/dist/components/call-api.js +2 -0
- package/dist/components/canvas-rotation-cursor.d.ts +1 -0
- package/dist/components/canvas-rotation-cursor.js +14 -0
- package/dist/components/folder-menu-items.js +1 -0
- package/dist/components/get-open-in-menu-items.d.ts +8 -1
- package/dist/components/get-open-in-menu-items.js +93 -8
- package/dist/components/import-assets.js +7 -0
- package/dist/components/root-composition-menu-items.js +1 -0
- package/dist/components/selected-outline-control-layout.d.ts +14 -0
- package/dist/components/selected-outline-control-layout.js +94 -0
- package/dist/components/selected-outline-drag.d.ts +11 -5
- package/dist/components/selected-outline-drag.js +80 -42
- package/dist/components/selected-outline-measurement.d.ts +5 -0
- package/dist/components/selected-outline-measurement.js +28 -1
- package/dist/components/selected-outline-types.d.ts +6 -0
- package/dist/components/use-default-editor-info.js +28 -3
- package/dist/esm/{chunk-ptnd65a9.js → chunk-jdn6nkbk.js} +10087 -7919
- package/dist/esm/{chunk-fgedsvhb.js → chunk-r46yxrjr.js} +1 -2
- package/dist/esm/index.mjs +357 -2
- package/dist/esm/internals.mjs +10086 -7918
- package/dist/esm/previewEntry.mjs +9926 -7758
- package/dist/esm/renderEntry.mjs +4 -2
- package/dist/helpers/get-box-quads-polyfill-internals.js +10 -2
- package/dist/helpers/get-canvas-capture-import.d.ts +7 -0
- package/dist/helpers/get-canvas-capture-import.js +43 -0
- package/dist/helpers/get-git-menu-item.d.ts +1 -1
- package/dist/helpers/get-git-menu-item.js +33 -3
- package/dist/helpers/inserted-element-selection.d.ts +12 -0
- package/dist/helpers/inserted-element-selection.js +29 -0
- package/dist/helpers/open-in-editor.d.ts +3 -1
- package/dist/helpers/open-in-editor.js +5 -1
- package/dist/helpers/pointer-session.d.ts +6 -2
- package/dist/helpers/pointer-session.js +29 -12
- package/dist/helpers/preview-server-events.js +4 -0
- package/dist/helpers/sequence-node-path-mutations.d.ts +4 -0
- package/dist/helpers/sequence-node-path-mutations.js +31 -0
- package/dist/helpers/use-create-composition.d.ts +15 -2
- package/dist/helpers/use-create-composition.js +11 -17
- package/dist/helpers/use-menu-structure.js +1 -0
- package/dist/icons/cube.d.ts +4 -0
- package/dist/icons/cube.js +6 -0
- package/dist/icons/finder.d.ts +4 -0
- package/dist/icons/finder.js +8 -0
- package/dist/icons/github.d.ts +4 -0
- package/dist/icons/github.js +11 -0
- package/dist/icons/terminal.d.ts +6 -0
- package/dist/icons/terminal.js +46 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +8 -0
- package/dist/renderEntry.js +2 -2
- package/dist/state/modals.d.ts +9 -1
- package/dist/state/transform-3d-mode.d.ts +10 -0
- package/dist/state/transform-3d-mode.js +27 -0
- package/dist/state/z-index.d.ts +0 -1
- package/dist/state/z-index.js +28 -37
- package/package.json +12 -12
|
@@ -10,11 +10,16 @@ const InputDragger_1 = require("../NewComposition/InputDragger");
|
|
|
10
10
|
const timeline_field_display_utils_1 = require("./timeline-field-display-utils");
|
|
11
11
|
const timeline_field_utils_1 = require("./timeline-field-utils");
|
|
12
12
|
const TimelineLayerEye_1 = require("./TimelineLayerEye");
|
|
13
|
+
const Transform3DModeContext_1 = require("./Transform3DModeContext");
|
|
13
14
|
const leftDraggerStyle = {
|
|
15
|
+
paddingBottom: 2,
|
|
14
16
|
paddingLeft: 0,
|
|
17
|
+
paddingTop: 2,
|
|
15
18
|
};
|
|
16
19
|
const rightDraggerStyle = {
|
|
20
|
+
paddingBottom: 2,
|
|
17
21
|
paddingRight: 0,
|
|
22
|
+
paddingTop: 2,
|
|
18
23
|
};
|
|
19
24
|
const containerStyle = {
|
|
20
25
|
alignItems: 'center',
|
|
@@ -82,9 +87,12 @@ const TimelineScaleField = ({ field, propStatus, effectiveValue, onSave, onDragV
|
|
|
82
87
|
var _a, _b;
|
|
83
88
|
const [dragX, setDragX] = (0, react_1.useState)(null);
|
|
84
89
|
const [dragY, setDragY] = (0, react_1.useState)(null);
|
|
90
|
+
const [dragZ, setDragZ] = (0, react_1.useState)(null);
|
|
85
91
|
const dragStartRef = (0, react_1.useRef)(null);
|
|
86
92
|
const { getScaleLockState, setScaleLockState } = (0, react_1.useContext)(scale_lock_1.ScaleLockContext);
|
|
93
|
+
const transform3DMode = (0, react_1.useContext)(Transform3DModeContext_1.Transform3DModeContext);
|
|
87
94
|
const [codeX, codeY, codeZ] = (0, react_1.useMemo)(() => no_react_1.NoReactInternals.parseScaleValue(effectiveValue), [effectiveValue]);
|
|
95
|
+
const show3D = transform3DMode || codeZ !== 1;
|
|
88
96
|
const defaultLinked = codeX === codeY;
|
|
89
97
|
const linked = getScaleLockState({
|
|
90
98
|
nodePath: scaleLockNodePath,
|
|
@@ -111,9 +119,9 @@ const TimelineScaleField = ({ field, propStatus, effectiveValue, onSave, onDragV
|
|
|
111
119
|
}
|
|
112
120
|
return dragStartRef.current;
|
|
113
121
|
}, [codeX, codeY, dragX, dragY]);
|
|
114
|
-
const serialize = (0, react_1.useCallback)((x, y) => {
|
|
115
|
-
return no_react_1.NoReactInternals.serializeScaleValue([x, y,
|
|
116
|
-
}, [codeZ]);
|
|
122
|
+
const serialize = (0, react_1.useCallback)((x, y, z = dragZ !== null && dragZ !== void 0 ? dragZ : codeZ) => {
|
|
123
|
+
return no_react_1.NoReactInternals.serializeScaleValue([x, y, z]);
|
|
124
|
+
}, [codeZ, dragZ]);
|
|
117
125
|
const onXChange = (0, react_1.useCallback)((newVal) => {
|
|
118
126
|
if (linked) {
|
|
119
127
|
const [baseX, baseY] = getDragStart();
|
|
@@ -161,6 +169,7 @@ const TimelineScaleField = ({ field, propStatus, effectiveValue, onSave, onDragV
|
|
|
161
169
|
dragStartRef.current = null;
|
|
162
170
|
setDragX(null);
|
|
163
171
|
setDragY(null);
|
|
172
|
+
setDragZ(null);
|
|
164
173
|
onDragEnd();
|
|
165
174
|
};
|
|
166
175
|
if (!valuesEqual(newScale, propStatus.codeValue)) {
|
|
@@ -204,6 +213,7 @@ const TimelineScaleField = ({ field, propStatus, effectiveValue, onSave, onDragV
|
|
|
204
213
|
dragStartRef.current = null;
|
|
205
214
|
setDragX(null);
|
|
206
215
|
setDragY(null);
|
|
216
|
+
setDragZ(null);
|
|
207
217
|
});
|
|
208
218
|
}
|
|
209
219
|
}, [codeX, codeY, dragY, linked, max, min, onSave, propStatus, serialize]);
|
|
@@ -254,6 +264,7 @@ const TimelineScaleField = ({ field, propStatus, effectiveValue, onSave, onDragV
|
|
|
254
264
|
dragStartRef.current = null;
|
|
255
265
|
setDragX(null);
|
|
256
266
|
setDragY(null);
|
|
267
|
+
setDragZ(null);
|
|
257
268
|
onDragEnd();
|
|
258
269
|
};
|
|
259
270
|
if (!valuesEqual(newScale, propStatus.codeValue)) {
|
|
@@ -297,6 +308,7 @@ const TimelineScaleField = ({ field, propStatus, effectiveValue, onSave, onDragV
|
|
|
297
308
|
dragStartRef.current = null;
|
|
298
309
|
setDragX(null);
|
|
299
310
|
setDragY(null);
|
|
311
|
+
setDragZ(null);
|
|
300
312
|
});
|
|
301
313
|
}
|
|
302
314
|
}, [codeX, codeY, dragX, linked, max, min, onSave, propStatus, serialize]);
|
|
@@ -307,8 +319,50 @@ const TimelineScaleField = ({ field, propStatus, effectiveValue, onSave, onDragV
|
|
|
307
319
|
linked: !linked,
|
|
308
320
|
});
|
|
309
321
|
}, [field.key, linked, scaleLockNodePath, setScaleLockState]);
|
|
322
|
+
const onZChange = (0, react_1.useCallback)((newVal) => {
|
|
323
|
+
setDragZ(newVal);
|
|
324
|
+
onDragValueChange(serialize(dragX !== null && dragX !== void 0 ? dragX : codeX, dragY !== null && dragY !== void 0 ? dragY : codeY, newVal));
|
|
325
|
+
}, [codeX, codeY, dragX, dragY, onDragValueChange, serialize]);
|
|
326
|
+
const onZChangeEnd = (0, react_1.useCallback)((newVal) => {
|
|
327
|
+
const newScale = serialize(dragX !== null && dragX !== void 0 ? dragX : codeX, dragY !== null && dragY !== void 0 ? dragY : codeY, newVal);
|
|
328
|
+
const clearDragState = () => {
|
|
329
|
+
dragStartRef.current = null;
|
|
330
|
+
setDragX(null);
|
|
331
|
+
setDragY(null);
|
|
332
|
+
setDragZ(null);
|
|
333
|
+
onDragEnd();
|
|
334
|
+
};
|
|
335
|
+
if (!valuesEqual(newScale, propStatus.codeValue)) {
|
|
336
|
+
onSave(newScale).finally(clearDragState);
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
clearDragState();
|
|
340
|
+
}
|
|
341
|
+
}, [
|
|
342
|
+
codeX,
|
|
343
|
+
codeY,
|
|
344
|
+
dragX,
|
|
345
|
+
dragY,
|
|
346
|
+
onDragEnd,
|
|
347
|
+
onSave,
|
|
348
|
+
propStatus.codeValue,
|
|
349
|
+
serialize,
|
|
350
|
+
]);
|
|
351
|
+
const onZTextChange = (0, react_1.useCallback)((newVal) => {
|
|
352
|
+
const parsed = Number(newVal);
|
|
353
|
+
if (Number.isNaN(parsed)) {
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
const newScale = serialize(dragX !== null && dragX !== void 0 ? dragX : codeX, dragY !== null && dragY !== void 0 ? dragY : codeY, parsed);
|
|
357
|
+
if (!valuesEqual(newScale, propStatus.codeValue)) {
|
|
358
|
+
setDragZ(parsed);
|
|
359
|
+
onSave(newScale).finally(() => setDragZ(null));
|
|
360
|
+
}
|
|
361
|
+
}, [codeX, codeY, dragX, dragY, onSave, propStatus.codeValue, serialize]);
|
|
310
362
|
return (jsx_runtime_1.jsxs("span", { style: containerStyle, children: [
|
|
311
|
-
jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragX !== null && dragX !== void 0 ? dragX : codeX, style: leftDraggerStyle, status: "ok", small: true, onValueChange: onXChange, onValueChangeEnd: onXChangeEnd, onTextChange: onXTextChange, min: min, max: max, step: step, formatter: formatter, rightAlign: false, allowStepMismatch: true }), jsx_runtime_1.jsx("div", { style: gapStyle }), jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragY !== null && dragY !== void 0 ? dragY : codeY, style: rightDraggerStyle, status: "ok", small: true, onValueChange: onYChange, onValueChangeEnd: onYChangeEnd, onTextChange: onYTextChange, min: min, max: max, step: step, formatter: formatter, rightAlign: false, allowStepMismatch: true }), jsx_runtime_1.
|
|
363
|
+
jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragX !== null && dragX !== void 0 ? dragX : codeX, buttonStyle: leftDraggerStyle, style: leftDraggerStyle, status: "ok", small: true, onValueChange: onXChange, onValueChangeEnd: onXChangeEnd, onTextChange: onXTextChange, min: min, max: max, step: step, formatter: formatter, rightAlign: false, allowStepMismatch: true, "aria-label": "Scale X" }), jsx_runtime_1.jsx("div", { style: gapStyle }), jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragY !== null && dragY !== void 0 ? dragY : codeY, buttonStyle: rightDraggerStyle, style: rightDraggerStyle, status: "ok", small: true, onValueChange: onYChange, onValueChangeEnd: onYChangeEnd, onTextChange: onYTextChange, min: min, max: max, step: step, formatter: formatter, rightAlign: false, allowStepMismatch: true, "aria-label": "Scale Y" }), show3D ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
364
|
+
jsx_runtime_1.jsx("div", { style: gapStyle }), jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragZ !== null && dragZ !== void 0 ? dragZ : codeZ, buttonStyle: rightDraggerStyle, style: rightDraggerStyle, status: "ok", small: true, onValueChange: onZChange, onValueChangeEnd: onZChangeEnd, onTextChange: onZTextChange, min: min, max: max, step: step, formatter: formatter, rightAlign: false, allowStepMismatch: true, "aria-label": "Scale Z" })
|
|
365
|
+
] })) : null, jsx_runtime_1.jsx(LinkToggle, { linked: linked, onToggle: onToggleLink })
|
|
312
366
|
] }));
|
|
313
367
|
};
|
|
314
368
|
exports.TimelineScaleField = TimelineScaleField;
|
|
@@ -161,6 +161,10 @@ export declare const getTimelineSequenceSelectionKey: (nodePathInfo: SequenceNod
|
|
|
161
161
|
export declare const TimelineSelectAllKeybindings: React.FC<{
|
|
162
162
|
readonly timeline: readonly TimelineTrackData[];
|
|
163
163
|
}>;
|
|
164
|
+
export declare const getTimelineSequenceSelectionForEscape: (selectedItems: readonly TimelineSelection[]) => {
|
|
165
|
+
readonly type: "sequence";
|
|
166
|
+
readonly nodePathInfo: SequenceNodePathInfo;
|
|
167
|
+
} | null;
|
|
164
168
|
export declare const TimelineSelectableItemsProvider: React.FC<{
|
|
165
169
|
readonly children: React.ReactNode;
|
|
166
170
|
readonly timeline: readonly TimelineTrackData[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useTimelineRowHighlightBackground = exports.useTimelineRowContainsSelection = exports.useTimelineGuideSelection = exports.useTimelineEasingSelection = exports.useTimelineKeyframeSelection = exports.useTimelineRowSelection = exports.useTimelineFocusableItem = exports.useTimelineMarqueeSelectableItem = exports.useTimelineMarqueeSelection = exports.useCurrentTimelineSelectionStateAsRef = exports.TIMELINE_SCRUBBER_ATTR = exports.TIMELINE_MARQUEE_ITEM_ATTR = exports.useTimelineSelection = exports.TimelineSelectionProvider = exports.TimelineSelectableItemsProvider = exports.TimelineSelectAllKeybindings = exports.getTimelineSequenceSelectionKey = exports.getSelectableTimelineItems = exports.getSelectableTimelineSequenceSelections = exports.getTimelineSelectionKey = exports.getTimelineSelectionFromNodePathInfo = exports.TimelineSelectionOrderProvider = exports.extendTimelineMarqueeSelection = exports.getTimelineMarqueeSelection = exports.timelineMarqueeRectsIntersect = exports.getClampedTimelineMarqueePoint = exports.getNormalizedTimelineMarqueeRect = exports.getAvailableTimelineSelectionState = exports.getTimelineSelectionAfterInteraction = exports.EMPTY_TIMELINE_SELECTION_STATE = exports.shouldSelectTimelineRowOnPointerDown = exports.isTimelineSelectionModifierEvent = exports.TIMELINE_TICKS_BACKGROUND = exports.TIMELINE_BACKGROUND = exports.getTimelineRowHighlightBackground = exports.getTimelineSelectedTrackHighlightStyle = exports.getTimelineColor = exports.getTimelineSelectedLabelStyle = exports.TIMELINE_SELECTED_LABEL_HORIZONTAL_PADDING = exports.TIMELINE_SELECTED_LABEL_TEXT = exports.TIMELINE_SELECTED_LABEL_BACKGROUND = exports.TIMELINE_HOVER_BACKGROUND = exports.TIMELINE_SELECTED_BACKGROUND = void 0;
|
|
3
|
+
exports.useTimelineRowHighlightBackground = exports.useTimelineRowContainsSelection = exports.useTimelineGuideSelection = exports.useTimelineEasingSelection = exports.useTimelineKeyframeSelection = exports.useTimelineRowSelection = exports.useTimelineFocusableItem = exports.useTimelineMarqueeSelectableItem = exports.useTimelineMarqueeSelection = exports.useCurrentTimelineSelectionStateAsRef = exports.TIMELINE_SCRUBBER_ATTR = exports.TIMELINE_MARQUEE_ITEM_ATTR = exports.useTimelineSelection = exports.TimelineSelectionProvider = exports.TimelineSelectableItemsProvider = exports.getTimelineSequenceSelectionForEscape = exports.TimelineSelectAllKeybindings = exports.getTimelineSequenceSelectionKey = exports.getSelectableTimelineItems = exports.getSelectableTimelineSequenceSelections = exports.getTimelineSelectionKey = exports.getTimelineSelectionFromNodePathInfo = exports.TimelineSelectionOrderProvider = exports.extendTimelineMarqueeSelection = exports.getTimelineMarqueeSelection = exports.timelineMarqueeRectsIntersect = exports.getClampedTimelineMarqueePoint = exports.getNormalizedTimelineMarqueeRect = exports.getAvailableTimelineSelectionState = exports.getTimelineSelectionAfterInteraction = exports.EMPTY_TIMELINE_SELECTION_STATE = exports.shouldSelectTimelineRowOnPointerDown = exports.isTimelineSelectionModifierEvent = exports.TIMELINE_TICKS_BACKGROUND = exports.TIMELINE_BACKGROUND = exports.getTimelineRowHighlightBackground = exports.getTimelineSelectedTrackHighlightStyle = exports.getTimelineColor = exports.getTimelineSelectedLabelStyle = exports.TIMELINE_SELECTED_LABEL_HORIZONTAL_PADDING = exports.TIMELINE_SELECTED_LABEL_TEXT = exports.TIMELINE_SELECTED_LABEL_BACKGROUND = exports.TIMELINE_HOVER_BACKGROUND = exports.TIMELINE_SELECTED_BACKGROUND = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
6
6
|
const react_1 = require("react");
|
|
@@ -18,6 +18,7 @@ const options_sidebar_tabs_1 = require("../options-sidebar-tabs");
|
|
|
18
18
|
const get_node_keyframes_1 = require("./get-node-keyframes");
|
|
19
19
|
const get_timeline_easing_segments_1 = require("./get-timeline-easing-segments");
|
|
20
20
|
const imperative_state_1 = require("./imperative-state");
|
|
21
|
+
const parse_keyframe_field_from_node_path_1 = require("./parse-keyframe-field-from-node-path");
|
|
21
22
|
const timeline_expanded_filter_1 = require("./timeline-expanded-filter");
|
|
22
23
|
const timeline_refs_1 = require("./timeline-refs");
|
|
23
24
|
const TimelineClipboardKeybindings_1 = require("./TimelineClipboardKeybindings");
|
|
@@ -543,6 +544,42 @@ const TimelineSelectAllKeybindings = ({ timeline }) => {
|
|
|
543
544
|
return null;
|
|
544
545
|
};
|
|
545
546
|
exports.TimelineSelectAllKeybindings = TimelineSelectAllKeybindings;
|
|
547
|
+
const fieldsSelectingSequenceOnEscape = new Set([
|
|
548
|
+
'cropLeft',
|
|
549
|
+
'cropRight',
|
|
550
|
+
'cropTop',
|
|
551
|
+
'cropBottom',
|
|
552
|
+
'style.rotate',
|
|
553
|
+
]);
|
|
554
|
+
const getTimelineSequenceSelectionForEscape = (selectedItems) => {
|
|
555
|
+
if (selectedItems.length !== 1) {
|
|
556
|
+
return null;
|
|
557
|
+
}
|
|
558
|
+
const [selectedItem] = selectedItems;
|
|
559
|
+
let fieldKey = null;
|
|
560
|
+
if (selectedItem.type === 'sequence-prop') {
|
|
561
|
+
fieldKey = selectedItem.key;
|
|
562
|
+
}
|
|
563
|
+
else if (selectedItem.type === 'keyframe' ||
|
|
564
|
+
selectedItem.type === 'easing') {
|
|
565
|
+
const field = (0, parse_keyframe_field_from_node_path_1.parseKeyframeFieldFromNodePath)(selectedItem.nodePathInfo.auxiliaryKeys);
|
|
566
|
+
fieldKey = (field === null || field === void 0 ? void 0 : field.type) === 'sequence' ? field.fieldKey : null;
|
|
567
|
+
}
|
|
568
|
+
else {
|
|
569
|
+
return null;
|
|
570
|
+
}
|
|
571
|
+
if (!fieldsSelectingSequenceOnEscape.has(fieldKey !== null && fieldKey !== void 0 ? fieldKey : '')) {
|
|
572
|
+
return null;
|
|
573
|
+
}
|
|
574
|
+
return {
|
|
575
|
+
type: 'sequence',
|
|
576
|
+
nodePathInfo: {
|
|
577
|
+
...selectedItem.nodePathInfo,
|
|
578
|
+
auxiliaryKeys: [],
|
|
579
|
+
},
|
|
580
|
+
};
|
|
581
|
+
};
|
|
582
|
+
exports.getTimelineSequenceSelectionForEscape = getTimelineSequenceSelectionForEscape;
|
|
546
583
|
const TimelineEscapeKeybindings = () => {
|
|
547
584
|
const keybindings = (0, use_keybinding_1.useKeybinding)();
|
|
548
585
|
const currentSelection = (0, exports.useCurrentTimelineSelectionStateAsRef)();
|
|
@@ -551,10 +588,16 @@ const TimelineEscapeKeybindings = () => {
|
|
|
551
588
|
event: 'keydown',
|
|
552
589
|
key: 'Escape',
|
|
553
590
|
callback: (event) => {
|
|
554
|
-
const { selectedItems, clearSelection } = currentSelection.current;
|
|
591
|
+
const { selectedItems, clearSelection, selectItems } = currentSelection.current;
|
|
555
592
|
if (selectedItems.length === 0) {
|
|
556
593
|
return;
|
|
557
594
|
}
|
|
595
|
+
const sequenceSelection = (0, exports.getTimelineSequenceSelectionForEscape)(selectedItems);
|
|
596
|
+
if (sequenceSelection) {
|
|
597
|
+
selectItems([sequenceSelection]);
|
|
598
|
+
event.preventDefault();
|
|
599
|
+
return;
|
|
600
|
+
}
|
|
558
601
|
clearSelection();
|
|
559
602
|
event.preventDefault();
|
|
560
603
|
},
|
|
@@ -970,9 +1013,9 @@ const useTimelineMarqueeSelection = () => {
|
|
|
970
1013
|
const onPointerMove = (moveEvent) => {
|
|
971
1014
|
updateSelection(moveEvent.clientX, moveEvent.clientY);
|
|
972
1015
|
};
|
|
973
|
-
(0, pointer_session_1.
|
|
1016
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
974
1017
|
event,
|
|
975
|
-
target,
|
|
1018
|
+
captureTarget: target,
|
|
976
1019
|
onMove: onPointerMove,
|
|
977
1020
|
onEnd: (reason, endEvent) => {
|
|
978
1021
|
if ((reason === 'pointerup' || reason === 'buttons-released') &&
|
|
@@ -48,6 +48,7 @@ const use_keybinding_1 = require("../../helpers/use-keybinding");
|
|
|
48
48
|
const use_runtime_values_1 = require("../../helpers/use-runtime-values");
|
|
49
49
|
const modals_1 = require("../../state/modals");
|
|
50
50
|
const timeline_sequence_hover_1 = require("../../state/timeline-sequence-hover");
|
|
51
|
+
const transform_3d_mode_1 = require("../../state/transform-3d-mode");
|
|
51
52
|
const call_api_1 = require("../call-api");
|
|
52
53
|
const CompositionOrStillIcon_1 = require("../CompositionOrStillIcon");
|
|
53
54
|
const ConfirmationDialog_1 = require("../ConfirmationDialog");
|
|
@@ -139,21 +140,6 @@ const sequenceReorderAfterLine = {
|
|
|
139
140
|
...sequenceReorderLineBase,
|
|
140
141
|
top: -1,
|
|
141
142
|
};
|
|
142
|
-
const sequenceReorderRejectionStyle = {
|
|
143
|
-
backgroundColor: colors_1.BLACK_ALPHA_85,
|
|
144
|
-
border: colors_1.BORDER_WHITE_ALPHA_20,
|
|
145
|
-
borderRadius: 4,
|
|
146
|
-
color: colors_1.WHITE,
|
|
147
|
-
fontSize: 11,
|
|
148
|
-
lineHeight: 1.2,
|
|
149
|
-
maxWidth: 260,
|
|
150
|
-
padding: '3px 6px',
|
|
151
|
-
pointerEvents: 'none',
|
|
152
|
-
position: 'absolute',
|
|
153
|
-
right: 6,
|
|
154
|
-
top: 2,
|
|
155
|
-
zIndex: 2,
|
|
156
|
-
};
|
|
157
143
|
const hasSequenceReorderDragType = (dataTransfer) => {
|
|
158
144
|
return Array.from(dataTransfer.types).includes(SEQUENCE_REORDER_MIME_TYPE);
|
|
159
145
|
};
|
|
@@ -207,7 +193,6 @@ const TimelineSequenceItemInner = ({ children, connectedCompositions, nestedDept
|
|
|
207
193
|
const [effectDropHovered, setEffectDropHovered] = (0, react_1.useState)(false);
|
|
208
194
|
const [isRenaming, setIsRenaming] = (0, react_1.useState)(false);
|
|
209
195
|
const [sequenceDropIndicator, setSequenceDropIndicator] = (0, react_1.useState)(null);
|
|
210
|
-
const [sequenceDropRejection, setSequenceDropRejection] = (0, react_1.useState)(null);
|
|
211
196
|
const { canOpenInEditor, canConfigureApps, codingAgentInfo, editorInfo, openInCodingAgent, openInEditor, originalLocation, } = (0, use_open_sequence_in_apps_1.useOpenSequenceInApps)(sequence);
|
|
212
197
|
const validatedLocation = (0, react_1.useMemo)(() => {
|
|
213
198
|
var _a;
|
|
@@ -400,7 +385,6 @@ const TimelineSequenceItemInner = ({ children, connectedCompositions, nestedDept
|
|
|
400
385
|
const onSequenceDragEnd = (0, react_1.useCallback)(() => {
|
|
401
386
|
currentSequenceDrag = null;
|
|
402
387
|
setSequenceDropIndicator(null);
|
|
403
|
-
setSequenceDropRejection(null);
|
|
404
388
|
}, []);
|
|
405
389
|
const onSequenceDragOver = (0, react_1.useCallback)((e) => {
|
|
406
390
|
if (!hasSequenceReorderDragType(e.dataTransfer)) {
|
|
@@ -409,12 +393,10 @@ const TimelineSequenceItemInner = ({ children, connectedCompositions, nestedDept
|
|
|
409
393
|
const dropTarget = getSequenceDropTarget(e);
|
|
410
394
|
if (!dropTarget) {
|
|
411
395
|
setSequenceDropIndicator(null);
|
|
412
|
-
setSequenceDropRejection(null);
|
|
413
396
|
return;
|
|
414
397
|
}
|
|
415
398
|
if (dropTarget.type === 'invalid') {
|
|
416
399
|
setSequenceDropIndicator(null);
|
|
417
|
-
setSequenceDropRejection(dropTarget.reason);
|
|
418
400
|
e.dataTransfer.dropEffect = 'none';
|
|
419
401
|
return;
|
|
420
402
|
}
|
|
@@ -422,14 +404,12 @@ const TimelineSequenceItemInner = ({ children, connectedCompositions, nestedDept
|
|
|
422
404
|
e.stopPropagation();
|
|
423
405
|
e.dataTransfer.dropEffect = 'move';
|
|
424
406
|
setSequenceDropIndicator(dropTarget.position);
|
|
425
|
-
setSequenceDropRejection(null);
|
|
426
407
|
}, [getSequenceDropTarget]);
|
|
427
408
|
const onSequenceDragLeave = (0, react_1.useCallback)((e) => {
|
|
428
409
|
if (e.currentTarget.contains(e.relatedTarget)) {
|
|
429
410
|
return;
|
|
430
411
|
}
|
|
431
412
|
setSequenceDropIndicator(null);
|
|
432
|
-
setSequenceDropRejection(null);
|
|
433
413
|
}, []);
|
|
434
414
|
const onSequenceDrop = (0, react_1.useCallback)(async (e) => {
|
|
435
415
|
if (!canReorderSequence ||
|
|
@@ -441,13 +421,11 @@ const TimelineSequenceItemInner = ({ children, connectedCompositions, nestedDept
|
|
|
441
421
|
const dropTarget = getSequenceDropTarget(e);
|
|
442
422
|
if (!dropTarget || dropTarget.type === 'invalid') {
|
|
443
423
|
setSequenceDropIndicator(null);
|
|
444
|
-
setSequenceDropRejection((dropTarget === null || dropTarget === void 0 ? void 0 : dropTarget.type) === 'invalid' ? dropTarget.reason : null);
|
|
445
424
|
return;
|
|
446
425
|
}
|
|
447
426
|
e.preventDefault();
|
|
448
427
|
e.stopPropagation();
|
|
449
428
|
setSequenceDropIndicator(null);
|
|
450
|
-
setSequenceDropRejection(null);
|
|
451
429
|
currentSequenceDrag = null;
|
|
452
430
|
try {
|
|
453
431
|
const result = await (0, call_api_1.callApi)('/api/reorder-sequence', {
|
|
@@ -658,6 +636,8 @@ const TimelineSequenceItemInner = ({ children, connectedCompositions, nestedDept
|
|
|
658
636
|
});
|
|
659
637
|
},
|
|
660
638
|
});
|
|
639
|
+
const canRotate = nodePathInfo !== null;
|
|
640
|
+
const { setManuallyEnabled } = (0, react_1.useContext)(transform_3d_mode_1.Transform3DModeStateContext);
|
|
661
641
|
const onAddEffect = (0, react_1.useCallback)(() => {
|
|
662
642
|
if (!canAddEffect ||
|
|
663
643
|
previewServerState.type !== 'connected' ||
|
|
@@ -691,6 +671,20 @@ const TimelineSequenceItemInner = ({ children, connectedCompositions, nestedDept
|
|
|
691
671
|
key: selected_outline_types_1.cropFieldKeys.left,
|
|
692
672
|
}, undefined, undefined, { reveal: true });
|
|
693
673
|
}, [canCrop, nodePathInfo, selectItem]);
|
|
674
|
+
const onRotate = (0, react_1.useCallback)(() => {
|
|
675
|
+
if (!canRotate || !nodePathInfo) {
|
|
676
|
+
return;
|
|
677
|
+
}
|
|
678
|
+
setManuallyEnabled((0, TimelineSelection_1.getTimelineSequenceSelectionKey)(nodePathInfo), true);
|
|
679
|
+
selectItem({
|
|
680
|
+
type: 'sequence-prop',
|
|
681
|
+
nodePathInfo: {
|
|
682
|
+
...nodePathInfo,
|
|
683
|
+
auxiliaryKeys: ['controls', selected_outline_types_1.rotateFieldKey],
|
|
684
|
+
},
|
|
685
|
+
key: selected_outline_types_1.rotateFieldKey,
|
|
686
|
+
}, undefined, undefined, { reveal: true });
|
|
687
|
+
}, [canRotate, nodePathInfo, selectItem, setManuallyEnabled]);
|
|
694
688
|
const getContextMenuItems = (0, react_1.useCallback)(() => {
|
|
695
689
|
var _a;
|
|
696
690
|
if (selectable) {
|
|
@@ -769,9 +763,31 @@ const TimelineSequenceItemInner = ({ children, connectedCompositions, nestedDept
|
|
|
769
763
|
subMenu: null,
|
|
770
764
|
value: 'crop',
|
|
771
765
|
},
|
|
766
|
+
]
|
|
767
|
+
: []),
|
|
768
|
+
...(canRotate
|
|
769
|
+
? [
|
|
770
|
+
{
|
|
771
|
+
type: 'item',
|
|
772
|
+
id: 'rotate',
|
|
773
|
+
keyHint: null,
|
|
774
|
+
label: isProgrammaticallyDuplicated
|
|
775
|
+
? 'Rotate all'
|
|
776
|
+
: 'Rotate',
|
|
777
|
+
leftItem: null,
|
|
778
|
+
disabled: false,
|
|
779
|
+
onClick: onRotate,
|
|
780
|
+
quickSwitcherLabel: null,
|
|
781
|
+
subMenu: null,
|
|
782
|
+
value: 'rotate',
|
|
783
|
+
},
|
|
784
|
+
]
|
|
785
|
+
: []),
|
|
786
|
+
...(canCrop || canRotate
|
|
787
|
+
? [
|
|
772
788
|
{
|
|
773
789
|
type: 'divider',
|
|
774
|
-
id: '
|
|
790
|
+
id: 'transform-controls-divider',
|
|
775
791
|
},
|
|
776
792
|
]
|
|
777
793
|
: []),
|
|
@@ -796,6 +812,7 @@ const TimelineSequenceItemInner = ({ children, connectedCompositions, nestedDept
|
|
|
796
812
|
}, [
|
|
797
813
|
canAddEffect,
|
|
798
814
|
canCrop,
|
|
815
|
+
canRotate,
|
|
799
816
|
canConfigureApps,
|
|
800
817
|
canOpenInEditor,
|
|
801
818
|
canRenameThisSequence,
|
|
@@ -810,6 +827,7 @@ const TimelineSequenceItemInner = ({ children, connectedCompositions, nestedDept
|
|
|
810
827
|
nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.supportsEffects,
|
|
811
828
|
onAddEffect,
|
|
812
829
|
onCrop,
|
|
830
|
+
onRotate,
|
|
813
831
|
onDeleteSequenceFromSource,
|
|
814
832
|
onDisableSequenceInteractivity,
|
|
815
833
|
onDuplicateSequenceFromSource,
|
|
@@ -896,7 +914,7 @@ const TimelineSequenceItemInner = ({ children, connectedCompositions, nestedDept
|
|
|
896
914
|
" ",
|
|
897
915
|
jsx_runtime_1.jsx(TimelineMediaInfo_1.TimelineMediaInfo, { src: mediaSrc })
|
|
898
916
|
] })) : null] }) }));
|
|
899
|
-
const draggableTrackRow = canHandleSequenceDrag ? (jsx_runtime_1.jsxs("div", { draggable: canReorderSequence, onDragStart: onSequenceDragStart, onDragEnd: onSequenceDragEnd, onDragOver: onSequenceDragOver, onDragLeave: onSequenceDragLeave, onDrop: onSequenceDrop, style: sequenceReorderWrapper, children: [sequenceReorderLineStyle ? (jsx_runtime_1.jsx("div", { style: sequenceReorderLineStyle })) : null,
|
|
917
|
+
const draggableTrackRow = canHandleSequenceDrag ? (jsx_runtime_1.jsxs("div", { draggable: canReorderSequence, onDragStart: onSequenceDragStart, onDragEnd: onSequenceDragEnd, onDragOver: onSequenceDragOver, onDragLeave: onSequenceDragLeave, onDrop: onSequenceDrop, style: sequenceReorderWrapper, children: [sequenceReorderLineStyle ? (jsx_runtime_1.jsx("div", { style: sequenceReorderLineStyle })) : null, trackRow] })) : (trackRow);
|
|
900
918
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [previewConnected || window.remotion_isReadOnlyStudio ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: draggableTrackRow })) : (draggableTrackRow), previewConnected &&
|
|
901
919
|
(0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
|
|
902
920
|
isExpanded &&
|
|
@@ -45,6 +45,7 @@ const InspectorPanelLayout_1 = require("../InspectorPanelLayout");
|
|
|
45
45
|
const call_add_keyframe_1 = require("./call-add-keyframe");
|
|
46
46
|
const get_sequence_prop_reset_changes_1 = require("./get-sequence-prop-reset-changes");
|
|
47
47
|
const save_sequence_prop_1 = require("./save-sequence-prop");
|
|
48
|
+
const timeline_field_row_layout_1 = require("./timeline-field-row-layout");
|
|
48
49
|
const TimelineExpandArrowButton_1 = require("./TimelineExpandArrowButton");
|
|
49
50
|
const TimelineFieldRowContent_1 = require("./TimelineFieldRowContent");
|
|
50
51
|
const TimelineKeyframeControls_1 = require("./TimelineKeyframeControls");
|
|
@@ -53,6 +54,7 @@ const TimelineLayerEye_1 = require("./TimelineLayerEye");
|
|
|
53
54
|
const TimelineRowChrome_1 = require("./TimelineRowChrome");
|
|
54
55
|
const TimelineSchemaField_1 = require("./TimelineSchemaField");
|
|
55
56
|
const TimelineSelection_1 = require("./TimelineSelection");
|
|
57
|
+
const Transform3DModeContext_1 = require("./Transform3DModeContext");
|
|
56
58
|
const fieldRowBase = {};
|
|
57
59
|
const inlineSourceFieldRow = {
|
|
58
60
|
alignItems: 'stretch',
|
|
@@ -205,8 +207,14 @@ const TimelineSequenceKeyframedValueUnmemoized = (props) => {
|
|
|
205
207
|
status: propStatus,
|
|
206
208
|
frame: sourceFrame,
|
|
207
209
|
value,
|
|
210
|
+
defaultEasing: (0, studio_shared_1.isSchemaFieldHoldOnly)({
|
|
211
|
+
schema,
|
|
212
|
+
key: field.key,
|
|
213
|
+
})
|
|
214
|
+
? { type: 'step1' }
|
|
215
|
+
: undefined,
|
|
208
216
|
}));
|
|
209
|
-
}, [propStatus, field.key, nodePath, setDragOverrides]);
|
|
217
|
+
}, [propStatus, field.key, nodePath, schema, setDragOverrides]);
|
|
210
218
|
const onKeyframedDragEnd = (0, react_1.useCallback)(() => {
|
|
211
219
|
clearDragOverrides(nodePath);
|
|
212
220
|
}, [clearDragOverrides, nodePath]);
|
|
@@ -229,6 +237,7 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
|
|
|
229
237
|
const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
230
238
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
231
239
|
const selection = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
|
|
240
|
+
const transform3DMode = (0, react_1.useContext)(Transform3DModeContext_1.Transform3DModeContext);
|
|
232
241
|
const propStatusesForOverride = remotion_1.Internals.getPropStatusesCtx(visualModePropStatuses, nodePath);
|
|
233
242
|
const propStatus = (_a = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride[field.key]) !== null && _a !== void 0 ? _a : null;
|
|
234
243
|
const dragOverrideValue = (0, react_1.useMemo)(() => {
|
|
@@ -248,10 +257,10 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
|
|
|
248
257
|
keyframable,
|
|
249
258
|
})) ? (jsx_runtime_1.jsx(TimelineKeyframeControls_1.TimelineKeyframeControls, { fieldKey: field.key, propStatus: propStatus, nodePath: nodePath, fileName: validatedLocation.source, keyframeDisplayOffset: keyframeDisplayOffset, defaultValue: field.fieldSchema.default, dragOverrideValue: dragOverrideValue, schema: schema, effectIndex: null, nodePathInfo: nodePathInfo, mode: keyframeControlsMode })) : null;
|
|
250
259
|
const style = (0, react_1.useMemo)(() => {
|
|
251
|
-
return
|
|
260
|
+
return (0, timeline_field_row_layout_1.isTimelineFieldStacked)({ field, transform3DMode })
|
|
252
261
|
? fieldRowBase
|
|
253
262
|
: { ...fieldRowBase, height: field.rowHeight };
|
|
254
|
-
}, [field
|
|
263
|
+
}, [field, transform3DMode]);
|
|
255
264
|
const canResetToDefault = (0, react_1.useMemo)(() => {
|
|
256
265
|
if (!propStatus || propStatus.status === 'computed') {
|
|
257
266
|
return false;
|
|
@@ -729,9 +729,9 @@ const TimelineSequenceLeftEdgeDragHandleInner = ({ nodePathInfo, windowWidth, ti
|
|
|
729
729
|
if (!activeDragState) {
|
|
730
730
|
return;
|
|
731
731
|
}
|
|
732
|
-
return (0, pointer_session_1.
|
|
732
|
+
return (0, pointer_session_1.startCapturedPointerSession)({
|
|
733
733
|
event: activeDragState,
|
|
734
|
-
|
|
734
|
+
captureTarget: activeDragState.target,
|
|
735
735
|
onMove,
|
|
736
736
|
onEnd: (reason, endEvent) => {
|
|
737
737
|
if ((reason === 'pointerup' || reason === 'buttons-released') &&
|
|
@@ -953,9 +953,9 @@ const useTimelineSequenceFromDrag = ({ nodePathInfo, windowWidth, timelineDurati
|
|
|
953
953
|
if (!activeDragState) {
|
|
954
954
|
return;
|
|
955
955
|
}
|
|
956
|
-
return (0, pointer_session_1.
|
|
956
|
+
return (0, pointer_session_1.startCapturedPointerSession)({
|
|
957
957
|
event: activeDragState,
|
|
958
|
-
|
|
958
|
+
captureTarget: activeDragState.target,
|
|
959
959
|
onMove,
|
|
960
960
|
onEnd: (reason, endEvent) => {
|
|
961
961
|
if ((reason === 'pointerup' || reason === 'buttons-released') &&
|
|
@@ -1136,9 +1136,9 @@ const TimelineSequenceRightEdgeDragHandleInner = ({ nodePathInfo, windowWidth, t
|
|
|
1136
1136
|
if (!activeDragState) {
|
|
1137
1137
|
return;
|
|
1138
1138
|
}
|
|
1139
|
-
return (0, pointer_session_1.
|
|
1139
|
+
return (0, pointer_session_1.startCapturedPointerSession)({
|
|
1140
1140
|
event: activeDragState,
|
|
1141
|
-
|
|
1141
|
+
captureTarget: activeDragState.target,
|
|
1142
1142
|
onMove,
|
|
1143
1143
|
onEnd: (reason, endEvent) => {
|
|
1144
1144
|
if ((reason === 'pointerup' || reason === 'buttons-released') &&
|
|
@@ -8,21 +8,33 @@ const timeline_field_display_utils_1 = require("./timeline-field-display-utils")
|
|
|
8
8
|
const timeline_field_utils_1 = require("./timeline-field-utils");
|
|
9
9
|
const TimelineSchemaField_1 = require("./TimelineSchemaField");
|
|
10
10
|
const transform_origin_utils_1 = require("./transform-origin-utils");
|
|
11
|
+
const Transform3DModeContext_1 = require("./Transform3DModeContext");
|
|
11
12
|
const leftDraggerStyle = {
|
|
13
|
+
paddingBottom: 2,
|
|
12
14
|
paddingLeft: 0,
|
|
15
|
+
paddingTop: 2,
|
|
13
16
|
};
|
|
14
17
|
const rightDraggerStyle = {
|
|
18
|
+
paddingBottom: 2,
|
|
15
19
|
paddingRight: 0,
|
|
20
|
+
paddingTop: 2,
|
|
16
21
|
};
|
|
17
22
|
const containerStyle = {
|
|
18
23
|
display: 'flex',
|
|
19
24
|
gap: 4,
|
|
20
25
|
};
|
|
21
26
|
const TimelineTransformOriginField = ({ field, propStatus, effectiveValue, onSave, onDragValueChange, onDragEnd, }) => {
|
|
27
|
+
var _a;
|
|
22
28
|
const [dragX, setDragX] = (0, react_1.useState)(null);
|
|
23
29
|
const [dragY, setDragY] = (0, react_1.useState)(null);
|
|
30
|
+
const [dragZ, setDragZ] = (0, react_1.useState)(null);
|
|
31
|
+
const transform3DMode = (0, react_1.useContext)(Transform3DModeContext_1.Transform3DModeContext);
|
|
24
32
|
const parsed = (0, react_1.useMemo)(() => (0, transform_origin_utils_1.parseTransformOrigin)(effectiveValue), [effectiveValue]);
|
|
25
33
|
const percent = (0, react_1.useMemo)(() => (parsed === null ? null : (0, transform_origin_utils_1.parsedTransformOriginToPercent)(parsed)), [parsed]);
|
|
34
|
+
const parsedZ = (0, react_1.useMemo)(() => (parsed === null || parsed === void 0 ? void 0 : parsed.z) === null || (parsed === null || parsed === void 0 ? void 0 : parsed.z) === undefined
|
|
35
|
+
? null
|
|
36
|
+
: (0, transform_origin_utils_1.parseTransformOriginZ)(parsed.z), [parsed === null || parsed === void 0 ? void 0 : parsed.z]);
|
|
37
|
+
const show3D = transform3DMode || (parsedZ !== null && parsedZ.value !== 0);
|
|
26
38
|
const configuredStep = field.fieldSchema.type === 'transform-origin'
|
|
27
39
|
? field.fieldSchema.step
|
|
28
40
|
: undefined;
|
|
@@ -37,14 +49,19 @@ const TimelineTransformOriginField = ({ field, propStatus, effectiveValue, onSav
|
|
|
37
49
|
value: v,
|
|
38
50
|
});
|
|
39
51
|
}, [field.fieldSchema]);
|
|
40
|
-
const serialize = (0, react_1.useCallback)((x, y) => {
|
|
52
|
+
const serialize = (0, react_1.useCallback)((x, y, z) => {
|
|
41
53
|
var _a;
|
|
54
|
+
if (z === void 0) { z = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.z) !== null && _a !== void 0 ? _a : null; }
|
|
42
55
|
return (0, transform_origin_utils_1.serializeTransformOrigin)({
|
|
43
56
|
uv: (0, transform_origin_utils_1.transformOriginPercentToUv)([x, y]),
|
|
44
|
-
z
|
|
57
|
+
z,
|
|
45
58
|
decimalPlaces,
|
|
46
59
|
});
|
|
47
60
|
}, [decimalPlaces, parsed === null || parsed === void 0 ? void 0 : parsed.z]);
|
|
61
|
+
const serializeZ = (0, react_1.useCallback)((value) => {
|
|
62
|
+
var _a;
|
|
63
|
+
return `${(0, timeline_field_utils_1.normalizeTimelineNumber)(value)}${(_a = parsedZ === null || parsedZ === void 0 ? void 0 : parsedZ.unit) !== null && _a !== void 0 ? _a : 'px'}`;
|
|
64
|
+
}, [parsedZ === null || parsedZ === void 0 ? void 0 : parsedZ.unit]);
|
|
48
65
|
const onXChange = (0, react_1.useCallback)((newVal) => {
|
|
49
66
|
if (percent === null) {
|
|
50
67
|
return;
|
|
@@ -127,11 +144,68 @@ const TimelineTransformOriginField = ({ field, propStatus, effectiveValue, onSav
|
|
|
127
144
|
}
|
|
128
145
|
}
|
|
129
146
|
}, [dragX, onSave, percent, propStatus.codeValue, serialize]);
|
|
147
|
+
const onZChange = (0, react_1.useCallback)((newVal) => {
|
|
148
|
+
if (percent === null) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
setDragZ(newVal);
|
|
152
|
+
onDragValueChange(serialize(dragX !== null && dragX !== void 0 ? dragX : percent[0], dragY !== null && dragY !== void 0 ? dragY : percent[1], serializeZ(newVal)));
|
|
153
|
+
}, [dragX, dragY, onDragValueChange, percent, serialize, serializeZ]);
|
|
154
|
+
const onZChangeEnd = (0, react_1.useCallback)((newVal) => {
|
|
155
|
+
if (percent === null) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const value = serialize(dragX !== null && dragX !== void 0 ? dragX : percent[0], dragY !== null && dragY !== void 0 ? dragY : percent[1], serializeZ(newVal));
|
|
159
|
+
if (value !== propStatus.codeValue) {
|
|
160
|
+
onSave(value).finally(() => {
|
|
161
|
+
setDragZ(null);
|
|
162
|
+
onDragEnd();
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
setDragZ(null);
|
|
167
|
+
onDragEnd();
|
|
168
|
+
}
|
|
169
|
+
}, [
|
|
170
|
+
dragX,
|
|
171
|
+
dragY,
|
|
172
|
+
onDragEnd,
|
|
173
|
+
onSave,
|
|
174
|
+
percent,
|
|
175
|
+
propStatus.codeValue,
|
|
176
|
+
serialize,
|
|
177
|
+
serializeZ,
|
|
178
|
+
]);
|
|
179
|
+
const onZTextChange = (0, react_1.useCallback)((newVal) => {
|
|
180
|
+
if (percent === null) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const parsedValue = Number(newVal);
|
|
184
|
+
if (!Number.isNaN(parsedValue)) {
|
|
185
|
+
const value = serialize(dragX !== null && dragX !== void 0 ? dragX : percent[0], dragY !== null && dragY !== void 0 ? dragY : percent[1], serializeZ(parsedValue));
|
|
186
|
+
if (value !== propStatus.codeValue) {
|
|
187
|
+
setDragZ(parsedValue);
|
|
188
|
+
onSave(value).finally(() => setDragZ(null));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}, [
|
|
192
|
+
dragX,
|
|
193
|
+
dragY,
|
|
194
|
+
onSave,
|
|
195
|
+
percent,
|
|
196
|
+
propStatus.codeValue,
|
|
197
|
+
serialize,
|
|
198
|
+
serializeZ,
|
|
199
|
+
]);
|
|
130
200
|
if (percent === null) {
|
|
131
201
|
return jsx_runtime_1.jsx(TimelineSchemaField_1.UnsupportedStatus, { label: "unsupported origin" });
|
|
132
202
|
}
|
|
133
203
|
return (jsx_runtime_1.jsxs("span", { style: containerStyle, children: [
|
|
134
|
-
jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragX !== null && dragX !== void 0 ? dragX : percent[0], style: leftDraggerStyle, status: "ok", small: true, onValueChange: onXChange, onValueChangeEnd: onXChangeEnd, onTextChange: onXTextChange, min: -Infinity, max: Infinity, step: step, formatter: formatter, rightAlign: false, snapToStep: false, dragDecimalPlaces: decimalPlaces }), jsx_runtime_1.jsx("div", { style: { marginLeft: -6, marginRight: -6 } }), jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragY !== null && dragY !== void 0 ? dragY : percent[1], style: rightDraggerStyle, status: "ok", small: true, onValueChange: onYChange, onValueChangeEnd: onYChangeEnd, onTextChange: onYTextChange, min: -Infinity, max: Infinity, step: step, formatter: formatter, rightAlign: false, snapToStep: false, dragDecimalPlaces: decimalPlaces })
|
|
135
|
-
|
|
204
|
+
jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragX !== null && dragX !== void 0 ? dragX : percent[0], buttonStyle: leftDraggerStyle, style: leftDraggerStyle, status: "ok", small: true, onValueChange: onXChange, onValueChangeEnd: onXChangeEnd, onTextChange: onXTextChange, min: -Infinity, max: Infinity, step: step, formatter: formatter, rightAlign: false, snapToStep: false, dragDecimalPlaces: decimalPlaces, "aria-label": "Transform origin X" }), jsx_runtime_1.jsx("div", { style: { marginLeft: -6, marginRight: -6 } }), jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragY !== null && dragY !== void 0 ? dragY : percent[1], buttonStyle: rightDraggerStyle, style: rightDraggerStyle, status: "ok", small: true, onValueChange: onYChange, onValueChangeEnd: onYChangeEnd, onTextChange: onYTextChange, min: -Infinity, max: Infinity, step: step, formatter: formatter, rightAlign: false, snapToStep: false, dragDecimalPlaces: decimalPlaces, "aria-label": "Transform origin Y" }), show3D ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
205
|
+
jsx_runtime_1.jsx("div", { style: { marginLeft: -6, marginRight: -6 } }), jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: (_a = dragZ !== null && dragZ !== void 0 ? dragZ : parsedZ === null || parsedZ === void 0 ? void 0 : parsedZ.value) !== null && _a !== void 0 ? _a : 0, buttonStyle: rightDraggerStyle, style: rightDraggerStyle, status: "ok", small: true, onValueChange: onZChange, onValueChangeEnd: onZChangeEnd, onTextChange: onZTextChange, min: -Infinity, max: Infinity, step: step, formatter: (value) => {
|
|
206
|
+
var _a;
|
|
207
|
+
return `${value}${(_a = parsedZ === null || parsedZ === void 0 ? void 0 : parsedZ.unit) !== null && _a !== void 0 ? _a : 'px'}`;
|
|
208
|
+
}, rightAlign: false, snapToStep: false, dragDecimalPlaces: decimalPlaces, "aria-label": "Transform origin Z" })
|
|
209
|
+
] })) : null] }));
|
|
136
210
|
};
|
|
137
211
|
exports.TimelineTransformOriginField = TimelineTransformOriginField;
|