@remotion/studio 4.0.507 → 4.0.508
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/components/CodingAgentIcon.d.ts +3 -1
- package/dist/components/CodingAgentIcon.js +4 -9
- 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/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 +44 -3
- package/dist/components/InspectorPanel/AlignmentControls.js +2 -2
- package/dist/components/InspectorPanel/CompositionInspector.js +3 -1
- package/dist/components/InspectorPanel/styles.js +1 -1
- package/dist/components/InspectorSequenceSection.js +36 -4
- package/dist/components/MenuBuildIndicator.js +1 -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 +237 -0
- package/dist/components/SelectedOutlineElement.d.ts +2 -1
- package/dist/components/SelectedOutlineElement.js +36 -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 +4 -3
- package/dist/components/SelectedOutlineRenderer.d.ts +1 -0
- package/dist/components/SelectedOutlineRenderer.js +24 -7
- package/dist/components/SelectedOutlineRotationCornerHandle.d.ts +1 -0
- package/dist/components/SelectedOutlineRotationCornerHandle.js +7 -5
- package/dist/components/SelectedOutlineScaleEdgeLine.d.ts +1 -0
- package/dist/components/SelectedOutlineScaleEdgeLine.js +9 -5
- package/dist/components/SelectedOutlineTransformOriginHandle.js +48 -22
- package/dist/components/SequencePropsSubscriptionProvider.js +8 -0
- package/dist/components/SettingsModalFooter.js +1 -1
- package/dist/components/Timeline/SequencePropsObserver.js +97 -1
- package/dist/components/Timeline/SubscribeToNodePaths.js +4 -2
- package/dist/components/Timeline/TimelineEffectItem.js +1 -4
- package/dist/components/Timeline/TimelineFieldRowContent.js +10 -3
- 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 +45 -2
- package/dist/components/Timeline/TimelineSequenceItem.js +42 -1
- package/dist/components/Timeline/TimelineSequencePropItem.js +5 -2
- 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 +13 -6
- 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/use-open-sequence-in-apps.js +1 -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 +45 -9
- 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/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/get-open-in-menu-items.d.ts +6 -1
- package/dist/components/get-open-in-menu-items.js +69 -8
- 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/esm/{chunk-ptnd65a9.js → chunk-zpn4m49r.js} +8458 -6911
- package/dist/esm/index.mjs +357 -2
- package/dist/esm/internals.mjs +8458 -6911
- package/dist/esm/previewEntry.mjs +8363 -6816
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/get-box-quads-polyfill-internals.js +10 -2
- package/dist/helpers/open-in-editor.d.ts +3 -1
- package/dist/helpers/open-in-editor.js +5 -1
- 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/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/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/state/transform-3d-mode.d.ts +10 -0
- package/dist/state/transform-3d-mode.js +27 -0
- package/dist/state/z-index.js +5 -8
- package/package.json +12 -12
|
@@ -55,7 +55,7 @@ const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
|
|
|
55
55
|
const focus_inspector_field_1 = require("./Timeline/focus-inspector-field");
|
|
56
56
|
const imperative_state_1 = require("./Timeline/imperative-state");
|
|
57
57
|
const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
|
|
58
|
-
const SelectedOutlinePolygonUnmemoized = ({ compositionHeight, compositionWidth, dragging, getAllDragOutlines, getAllDragTargets, getLayoutTarget, getTarget, hasTarget, hovered, onContextMenuOpen, outline, onDraggingChange, onHoverChange, onSnapPointsChange, onSelect, onDoubleClickTarget, scale, showSelectedOutline, }) => {
|
|
58
|
+
const SelectedOutlinePolygonUnmemoized = ({ compositionHeight, compositionWidth, dragging, getAllDragOutlines, getAllDragTargets, getLayoutTarget, getTarget, hasTarget, hovered, onContextMenuOpen, onContextMenuOpenChange, outline, onDraggingChange, onHoverChange, onSnapPointsChange, onSelect, onDoubleClickTarget, scale, showSelectedOutline, }) => {
|
|
59
59
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
60
60
|
const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
61
61
|
const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
@@ -109,6 +109,7 @@ const SelectedOutlinePolygonUnmemoized = ({ compositionHeight, compositionWidth,
|
|
|
109
109
|
getDragOverrides,
|
|
110
110
|
timelinePosition: (0, imperative_state_1.getCurrentFrame)(),
|
|
111
111
|
});
|
|
112
|
+
const dragOutlines = selected ? getAllDragOutlines() : [outline];
|
|
112
113
|
let lastValues = new Map();
|
|
113
114
|
let currentPointerX = startPointerX;
|
|
114
115
|
let currentPointerY = startPointerY;
|
|
@@ -154,7 +155,7 @@ const SelectedOutlinePolygonUnmemoized = ({ compositionHeight, compositionWidth,
|
|
|
154
155
|
allowY: axisLockedDirection !== 'horizontal',
|
|
155
156
|
deltaX,
|
|
156
157
|
deltaY,
|
|
157
|
-
outlines:
|
|
158
|
+
outlines: dragOutlines,
|
|
158
159
|
scale,
|
|
159
160
|
targets: snapTargets,
|
|
160
161
|
});
|
|
@@ -353,7 +354,7 @@ const SelectedOutlinePolygonUnmemoized = ({ compositionHeight, compositionWidth,
|
|
|
353
354
|
if (!dragging) {
|
|
354
355
|
onHoverChange(null);
|
|
355
356
|
}
|
|
356
|
-
}, onPointerDown: onPointerDown, onDoubleClick: onDoubleClick, onDragOver: onEffectDragOver, onDragLeave: onEffectDragLeave, onDrop: onEffectDrop }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: polygonRef, getItems: onContextMenuOpen })
|
|
357
|
+
}, onPointerDown: onPointerDown, onDoubleClick: onDoubleClick, onDragOver: onEffectDragOver, onDragLeave: onEffectDragLeave, onDrop: onEffectDrop }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: polygonRef, getItems: onContextMenuOpen, onOpenChange: onContextMenuOpenChange })
|
|
357
358
|
] }));
|
|
358
359
|
};
|
|
359
360
|
exports.SelectedOutlinePolygon = react_1.default.memo(SelectedOutlinePolygonUnmemoized);
|
|
@@ -8,6 +8,7 @@ export declare const SelectedOutlineRenderer: React.NamedExoticComponent<{
|
|
|
8
8
|
readonly getLatestOutlineTargetByKey: (key: string) => SelectedOutlineTarget | undefined;
|
|
9
9
|
readonly getOutlineTargets: () => readonly SelectedOutlineLayoutTarget[];
|
|
10
10
|
readonly onDraggingChange: (dragging: boolean) => void;
|
|
11
|
+
readonly onContextMenuOpenChange: (open: boolean) => void;
|
|
11
12
|
readonly onSelect: (item: TimelineSelection, interaction?: TimelineSelectionInteraction | undefined) => void;
|
|
12
13
|
readonly scale: number;
|
|
13
14
|
readonly sequences: readonly {
|
|
@@ -64,7 +64,7 @@ const SelectedOutlineHoverCleanup = ({ targets }) => {
|
|
|
64
64
|
}, [hoveredSequence, setHoveredSequence, targets]);
|
|
65
65
|
return null;
|
|
66
66
|
};
|
|
67
|
-
const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth, dragging, getLatestOutlineTargetByKey, getOutlineTargets, onDraggingChange, onSelect, scale, sequences, updateOutlinesRef, }) => {
|
|
67
|
+
const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth, dragging, getLatestOutlineTargetByKey, getOutlineTargets, onDraggingChange, onContextMenuOpenChange, onSelect, scale, sequences, updateOutlinesRef, }) => {
|
|
68
68
|
const [renderState, setRenderState] = (0, react_1.useState)(emptyRenderState);
|
|
69
69
|
const overlayRef = (0, react_1.useRef)(null);
|
|
70
70
|
const resizeObserverRef = (0, react_1.useRef)(null);
|
|
@@ -149,13 +149,30 @@ const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth
|
|
|
149
149
|
const targetsByKey = (0, react_1.useMemo)(() => {
|
|
150
150
|
return new Map(renderState.targets.map((target) => [target.key, target]));
|
|
151
151
|
}, [renderState.targets]);
|
|
152
|
+
// Reordering a captured SVG target can cancel the active pointer session.
|
|
153
|
+
const outlineRenderingOrderRef = (0, react_1.useRef)([]);
|
|
152
154
|
const outlinesForRendering = (0, react_1.useMemo)(() => {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
155
|
+
if (!dragging || outlineRenderingOrderRef.current.length === 0) {
|
|
156
|
+
const orderedOutlines = (0, selected_outline_order_1.orderOutlinesForRendering)({
|
|
157
|
+
outlines: renderState.outlines,
|
|
158
|
+
sequences,
|
|
159
|
+
targetsByKey,
|
|
160
|
+
});
|
|
161
|
+
outlineRenderingOrderRef.current = orderedOutlines.map((outline) => outline.key);
|
|
162
|
+
return orderedOutlines;
|
|
163
|
+
}
|
|
164
|
+
const currentOutlinesByKey = new Map(renderState.outlines.map((outline) => [outline.key, outline]));
|
|
165
|
+
const frozenKeys = new Set(outlineRenderingOrderRef.current);
|
|
166
|
+
const newOutlines = renderState.outlines.filter((outline) => !frozenKeys.has(outline.key));
|
|
167
|
+
outlineRenderingOrderRef.current = [
|
|
168
|
+
...outlineRenderingOrderRef.current,
|
|
169
|
+
...newOutlines.map((outline) => outline.key),
|
|
170
|
+
];
|
|
171
|
+
return outlineRenderingOrderRef.current.flatMap((key) => {
|
|
172
|
+
const outline = currentOutlinesByKey.get(key);
|
|
173
|
+
return outline === undefined ? [] : [outline];
|
|
157
174
|
});
|
|
158
|
-
}, [renderState.outlines, sequences, targetsByKey]);
|
|
175
|
+
}, [dragging, renderState.outlines, sequences, targetsByKey]);
|
|
159
176
|
const outlinesByKey = (0, react_1.useMemo)(() => {
|
|
160
177
|
return new Map(renderState.outlines.map((outline) => [outline.key, outline]));
|
|
161
178
|
}, [renderState.outlines]);
|
|
@@ -203,6 +220,6 @@ const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth
|
|
|
203
220
|
const updateSnapPointsRef = (0, react_1.useRef)(() => undefined);
|
|
204
221
|
const onSnapPointsChange = (0, react_1.useCallback)((snapPoints) => updateSnapPointsRef.current(snapPoints), []);
|
|
205
222
|
return (jsx_runtime_1.jsxs("svg", { ref: overlayRef, style: outlineContainer, width: "100%", height: "100%", "aria-hidden": "true", children: [
|
|
206
|
-
jsx_runtime_1.jsx(SelectedOutlineHoverCleanup, { targets: renderState.targets }), jsx_runtime_1.jsx(SelectedOutlineSnapIndicators_1.SelectedOutlineSnapIndicators, { compositionHeight: compositionHeight, compositionWidth: compositionWidth, scale: scale, updateSnapPointsRef: updateSnapPointsRef }), outlinesForRendering.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineElement_1.SelectedOutlineElement, { compositionHeight: compositionHeight, compositionWidth: compositionWidth, dragging: dragging, getAllDragOutlines: getAllDragOutlines, getAllDragTargets: getAllDragTargets, getAllRotationDragTargets: getAllRotationDragTargets, getAllScaleDragTargets: getAllScaleDragTargets, getLatestTargetByKey: getLatestOutlineTargetByKey, outline: outline, onDraggingChange: onDraggingChange, onSnapPointsChange: onSnapPointsChange, onSelect: onSelect, scale: scale, layoutTarget: targetsByKey.get(outline.key) }, outline.key))), outlinesForRendering.map((outline) => (jsx_runtime_1.jsx(
|
|
223
|
+
jsx_runtime_1.jsx(SelectedOutlineHoverCleanup, { targets: renderState.targets }), jsx_runtime_1.jsx(SelectedOutlineSnapIndicators_1.SelectedOutlineSnapIndicators, { compositionHeight: compositionHeight, compositionWidth: compositionWidth, scale: scale, updateSnapPointsRef: updateSnapPointsRef }), outlinesForRendering.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineElement_1.SelectedOutlineElement, { compositionHeight: compositionHeight, compositionWidth: compositionWidth, dragging: dragging, getAllDragOutlines: getAllDragOutlines, getAllDragTargets: getAllDragTargets, getAllRotationDragTargets: getAllRotationDragTargets, getAllScaleDragTargets: getAllScaleDragTargets, getLatestTargetByKey: getLatestOutlineTargetByKey, outline: outline, onDraggingChange: onDraggingChange, onContextMenuOpenChange: onContextMenuOpenChange, onSnapPointsChange: onSnapPointsChange, onSelect: onSelect, scale: scale, layoutTarget: targetsByKey.get(outline.key) }, outline.key))), outlinesForRendering.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineUvControls_1.SelectedOutlineUvHandleConnectionLayer, { outline: outline, layoutTarget: targetsByKey.get(outline.key) }, `${outline.key}-uv-connection-lines`))), outlinesForRendering.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineUvControls_1.SelectedOutlineUvHandleCircleLayer, { onDraggingChange: onDraggingChange, onSelect: onSelect, outline: outline, layoutTarget: targetsByKey.get(outline.key) }, `${outline.key}-uv-handles`))), outlinesForRendering.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineTransformOriginHandle_1.SelectedOutlineTransformOriginHandle, { outline: outline, onDraggingChange: onDraggingChange, getLatestTargetByKey: getLatestOutlineTargetByKey, layoutTarget: targetsByKey.get(outline.key) }, `${outline.key}-transform-origin`)))] }));
|
|
207
224
|
};
|
|
208
225
|
exports.SelectedOutlineRenderer = react_1.default.memo(SelectedOutlineRendererUnmemoized);
|
|
@@ -10,6 +10,7 @@ export declare const SelectedOutlineRotationCornerHandle: React.FC<{
|
|
|
10
10
|
readonly outline: SelectedOutline;
|
|
11
11
|
readonly onDraggingChange: (dragging: boolean) => void;
|
|
12
12
|
readonly onContextMenuOpen: SelectedOutlineContextMenuOpenHandler;
|
|
13
|
+
readonly onContextMenuOpenChange: (open: boolean) => void;
|
|
13
14
|
readonly onHoverChange: (key: string | null) => void;
|
|
14
15
|
readonly onSelect: (item: TimelineSelection, interaction: TimelineSelectionInteraction) => void;
|
|
15
16
|
readonly target: SelectedOutlineTarget | undefined;
|
|
@@ -51,13 +51,14 @@ const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
|
|
|
51
51
|
const focus_inspector_field_1 = require("./Timeline/focus-inspector-field");
|
|
52
52
|
const imperative_state_1 = require("./Timeline/imperative-state");
|
|
53
53
|
const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
|
|
54
|
-
const SelectedOutlineRotationCornerHandle = ({ getAllRotationDragTargets, corner, dragging, outline, onDraggingChange, onContextMenuOpen, onHoverChange, onSelect, target, }) => {
|
|
55
|
-
var _a, _b;
|
|
54
|
+
const SelectedOutlineRotationCornerHandle = ({ getAllRotationDragTargets, corner, dragging, outline, onDraggingChange, onContextMenuOpen, onContextMenuOpenChange, onHoverChange, onSelect, target, }) => {
|
|
55
|
+
var _a, _b, _c;
|
|
56
56
|
const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
57
57
|
const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
58
58
|
const { editorSnapping } = (0, react_1.useContext)(editor_snapping_1.EditorSnappingContext);
|
|
59
59
|
const rotationDrag = (_a = target === null || target === void 0 ? void 0 : target.rotationDrag) !== null && _a !== void 0 ? _a : null;
|
|
60
60
|
const selected = (_b = target === null || target === void 0 ? void 0 : target.selected) !== null && _b !== void 0 ? _b : false;
|
|
61
|
+
const containsSelection = (_c = target === null || target === void 0 ? void 0 : target.containsSelection) !== null && _c !== void 0 ? _c : false;
|
|
61
62
|
const circleRef = (0, react_1.useRef)(null);
|
|
62
63
|
const cornerInfo = (0, react_1.useMemo)(() => (0, selected_outline_measurement_1.getSelectedOutlineRotationCornerInfo)(outline.points, corner), [corner, outline.points]);
|
|
63
64
|
const onPointerDown = react_1.default.useCallback((event) => {
|
|
@@ -72,7 +73,7 @@ const SelectedOutlineRotationCornerHandle = ({ getAllRotationDragTargets, corner
|
|
|
72
73
|
return;
|
|
73
74
|
}
|
|
74
75
|
const interaction = (0, selected_outline_measurement_1.getOutlineSelectionInteraction)(event);
|
|
75
|
-
const shouldUpdateSelection = !selected || interaction.toggleKey;
|
|
76
|
+
const shouldUpdateSelection = (!selected && !containsSelection) || interaction.toggleKey;
|
|
76
77
|
if (shouldUpdateSelection && target !== undefined) {
|
|
77
78
|
onSelect(target.selection, {
|
|
78
79
|
shiftKey: false,
|
|
@@ -236,6 +237,7 @@ const SelectedOutlineRotationCornerHandle = ({ getAllRotationDragTargets, corner
|
|
|
236
237
|
window.addEventListener('keyup', onKeyChange);
|
|
237
238
|
}, [
|
|
238
239
|
clearDragOverrides,
|
|
240
|
+
containsSelection,
|
|
239
241
|
cornerInfo,
|
|
240
242
|
editorSnapping,
|
|
241
243
|
getDragOverrides,
|
|
@@ -255,7 +257,7 @@ const SelectedOutlineRotationCornerHandle = ({ getAllRotationDragTargets, corner
|
|
|
255
257
|
return null;
|
|
256
258
|
}
|
|
257
259
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
258
|
-
jsx_runtime_1.jsx("circle", { ref: circleRef, cx: cornerInfo.point.x, cy: cornerInfo.point.y, r: 12, fill: colors_1.TRANSPARENT, stroke: colors_1.TRANSPARENT, vectorEffect: "non-scaling-stroke", pointerEvents: "all", cursor: cornerInfo.cursor, onPointerEnter: () => {
|
|
260
|
+
jsx_runtime_1.jsx("circle", { ref: circleRef, cx: cornerInfo.point.x, cy: cornerInfo.point.y, r: 12, fill: colors_1.TRANSPARENT, stroke: colors_1.TRANSPARENT, vectorEffect: "non-scaling-stroke", pointerEvents: "all", cursor: cornerInfo.cursor, "data-remotion-studio-rotation-corner": corner, "data-remotion-studio-rotation-corner-contains-selection": containsSelection, onPointerEnter: () => {
|
|
259
261
|
if (!dragging) {
|
|
260
262
|
onHoverChange(outline.key);
|
|
261
263
|
}
|
|
@@ -263,7 +265,7 @@ const SelectedOutlineRotationCornerHandle = ({ getAllRotationDragTargets, corner
|
|
|
263
265
|
if (!dragging) {
|
|
264
266
|
onHoverChange(null);
|
|
265
267
|
}
|
|
266
|
-
}, onPointerDown: onPointerDown }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: circleRef, getItems: onContextMenuOpen })
|
|
268
|
+
}, onPointerDown: onPointerDown }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: circleRef, getItems: onContextMenuOpen, onOpenChange: onContextMenuOpenChange })
|
|
267
269
|
] }));
|
|
268
270
|
};
|
|
269
271
|
exports.SelectedOutlineRotationCornerHandle = SelectedOutlineRotationCornerHandle;
|
|
@@ -10,6 +10,7 @@ export declare const SelectedOutlineScaleEdgeLine: React.FC<{
|
|
|
10
10
|
readonly outline: SelectedOutline;
|
|
11
11
|
readonly onDraggingChange: (dragging: boolean) => void;
|
|
12
12
|
readonly onContextMenuOpen: SelectedOutlineContextMenuOpenHandler;
|
|
13
|
+
readonly onContextMenuOpenChange: (open: boolean) => void;
|
|
13
14
|
readonly onHoverChange: (key: string | null) => void;
|
|
14
15
|
readonly onSelect: (item: TimelineSelection, interaction: TimelineSelectionInteraction) => void;
|
|
15
16
|
readonly target: SelectedOutlineTarget | undefined;
|
|
@@ -49,12 +49,13 @@ const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
|
|
|
49
49
|
const focus_inspector_field_1 = require("./Timeline/focus-inspector-field");
|
|
50
50
|
const imperative_state_1 = require("./Timeline/imperative-state");
|
|
51
51
|
const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
|
|
52
|
-
const SelectedOutlineScaleEdgeLine = ({ getAllScaleDragTargets, dragging, edge, outline, onDraggingChange, onContextMenuOpen, onHoverChange, onSelect, target, }) => {
|
|
53
|
-
var _a, _b;
|
|
52
|
+
const SelectedOutlineScaleEdgeLine = ({ getAllScaleDragTargets, dragging, edge, outline, onDraggingChange, onContextMenuOpen, onContextMenuOpenChange, onHoverChange, onSelect, target, }) => {
|
|
53
|
+
var _a, _b, _c, _d;
|
|
54
54
|
const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
55
55
|
const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
56
56
|
const scaleDrag = (_a = target === null || target === void 0 ? void 0 : target.scaleDrag) !== null && _a !== void 0 ? _a : null;
|
|
57
57
|
const selected = (_b = target === null || target === void 0 ? void 0 : target.selected) !== null && _b !== void 0 ? _b : false;
|
|
58
|
+
const containsSelection = (_c = target === null || target === void 0 ? void 0 : target.containsSelection) !== null && _c !== void 0 ? _c : false;
|
|
58
59
|
const lineRef = (0, react_1.useRef)(null);
|
|
59
60
|
const edgeInfo = (0, react_1.useMemo)(() => (0, selected_outline_drag_1.getSelectedOutlineScaleEdgeInfo)(outline.points, edge), [edge, outline.points]);
|
|
60
61
|
const onPointerDown = react_1.default.useCallback((event) => {
|
|
@@ -64,7 +65,9 @@ const SelectedOutlineScaleEdgeLine = ({ getAllScaleDragTargets, dragging, edge,
|
|
|
64
65
|
event.preventDefault();
|
|
65
66
|
event.stopPropagation();
|
|
66
67
|
const interaction = (0, selected_outline_measurement_1.getOutlineSelectionInteraction)(event);
|
|
67
|
-
const shouldUpdateSelection = !selected
|
|
68
|
+
const shouldUpdateSelection = (!selected && !containsSelection) ||
|
|
69
|
+
interaction.shiftKey ||
|
|
70
|
+
interaction.toggleKey;
|
|
68
71
|
if (shouldUpdateSelection && target !== undefined) {
|
|
69
72
|
onSelect(target.selection, interaction);
|
|
70
73
|
}
|
|
@@ -182,6 +185,7 @@ const SelectedOutlineScaleEdgeLine = ({ getAllScaleDragTargets, dragging, edge,
|
|
|
182
185
|
});
|
|
183
186
|
}, [
|
|
184
187
|
clearDragOverrides,
|
|
188
|
+
containsSelection,
|
|
185
189
|
getAllScaleDragTargets,
|
|
186
190
|
edgeInfo,
|
|
187
191
|
getDragOverrides,
|
|
@@ -197,7 +201,7 @@ const SelectedOutlineScaleEdgeLine = ({ getAllScaleDragTargets, dragging, edge,
|
|
|
197
201
|
return null;
|
|
198
202
|
}
|
|
199
203
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
200
|
-
jsx_runtime_1.jsx("line", { ref: lineRef, x1: edgeInfo.start.x, y1: edgeInfo.start.y, x2: edgeInfo.end.x, y2: edgeInfo.end.y, stroke: colors_1.TRANSPARENT, strokeWidth: 12, vectorEffect: "non-scaling-stroke", pointerEvents: "stroke", cursor: edgeInfo.cursor, onPointerEnter: () => {
|
|
204
|
+
jsx_runtime_1.jsx("line", { ref: lineRef, x1: edgeInfo.start.x, y1: edgeInfo.start.y, x2: edgeInfo.end.x, y2: edgeInfo.end.y, stroke: colors_1.TRANSPARENT, strokeWidth: 12, vectorEffect: "non-scaling-stroke", pointerEvents: "stroke", cursor: edgeInfo.cursor, "data-remotion-studio-scale-edge": edge, "data-remotion-studio-scale-edge-contains-selection": (_d = target === null || target === void 0 ? void 0 : target.containsSelection) !== null && _d !== void 0 ? _d : false, onPointerEnter: () => {
|
|
201
205
|
if (!dragging) {
|
|
202
206
|
onHoverChange(outline.key);
|
|
203
207
|
}
|
|
@@ -205,7 +209,7 @@ const SelectedOutlineScaleEdgeLine = ({ getAllScaleDragTargets, dragging, edge,
|
|
|
205
209
|
if (!dragging) {
|
|
206
210
|
onHoverChange(null);
|
|
207
211
|
}
|
|
208
|
-
}, onPointerDown: onPointerDown }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: lineRef, getItems: onContextMenuOpen })
|
|
212
|
+
}, onPointerDown: onPointerDown }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: lineRef, getItems: onContextMenuOpen, onOpenChange: onContextMenuOpenChange })
|
|
209
213
|
] }));
|
|
210
214
|
};
|
|
211
215
|
exports.SelectedOutlineScaleEdgeLine = SelectedOutlineScaleEdgeLine;
|
|
@@ -44,25 +44,31 @@ const editor_snapping_1 = require("../state/editor-snapping");
|
|
|
44
44
|
const ForceSpecificCursor_1 = require("./ForceSpecificCursor");
|
|
45
45
|
const NotificationCenter_1 = require("./Notifications/NotificationCenter");
|
|
46
46
|
const selected_outline_drag_1 = require("./selected-outline-drag");
|
|
47
|
+
const selected_outline_measurement_1 = require("./selected-outline-measurement");
|
|
47
48
|
const selected_outline_types_1 = require("./selected-outline-types");
|
|
48
49
|
const selected_outline_uv_1 = require("./selected-outline-uv");
|
|
49
50
|
const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
|
|
50
51
|
const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
|
|
52
|
+
const timeline_rotation_utils_1 = require("./Timeline/timeline-rotation-utils");
|
|
51
53
|
const timeline_translate_utils_1 = require("./Timeline/timeline-translate-utils");
|
|
52
54
|
const transform_origin_utils_1 = require("./Timeline/transform-origin-utils");
|
|
53
55
|
const SelectedOutlineTransformOriginHandle = ({ getLatestTargetByKey, layoutTarget, outline, onDraggingChange }) => {
|
|
54
|
-
var _a, _b;
|
|
56
|
+
var _a, _b, _c;
|
|
55
57
|
const { setDragOverrides, clearDragOverrides, setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
56
58
|
const { editorSnapping } = (0, react_1.useContext)(editor_snapping_1.EditorSnappingContext);
|
|
57
|
-
const target = (layoutTarget === null || layoutTarget === void 0 ? void 0 : layoutTarget.selectedForTransformOrigin)
|
|
59
|
+
const target = (layoutTarget === null || layoutTarget === void 0 ? void 0 : layoutTarget.selectedForTransformOrigin) ||
|
|
60
|
+
(layoutTarget === null || layoutTarget === void 0 ? void 0 : layoutTarget.selectedForRotation)
|
|
58
61
|
? getLatestTargetByKey(layoutTarget.key)
|
|
59
62
|
: undefined;
|
|
60
63
|
const transformOriginDrag = (_a = target === null || target === void 0 ? void 0 : target.transformOriginDrag) !== null && _a !== void 0 ? _a : null;
|
|
64
|
+
const transformOriginValue = (_b = transformOriginDrag === null || transformOriginDrag === void 0 ? void 0 : transformOriginDrag.originValue) !== null && _b !== void 0 ? _b : ((layoutTarget === null || layoutTarget === void 0 ? void 0 : layoutTarget.selectedForRotation)
|
|
65
|
+
? layoutTarget.transformOriginValue
|
|
66
|
+
: null);
|
|
61
67
|
const crop = target === null || target === void 0 ? void 0 : target.crop;
|
|
62
|
-
const transformOriginPoints = (
|
|
63
|
-
const parsed = (0, react_1.useMemo)(() =>
|
|
68
|
+
const transformOriginPoints = (_c = outline.uncroppedPoints) !== null && _c !== void 0 ? _c : outline.points;
|
|
69
|
+
const parsed = (0, react_1.useMemo)(() => transformOriginValue === null
|
|
64
70
|
? null
|
|
65
|
-
: (0, transform_origin_utils_1.parseTransformOrigin)(
|
|
71
|
+
: (0, transform_origin_utils_1.parseTransformOrigin)(transformOriginValue), [transformOriginValue]);
|
|
66
72
|
const uv = (0, react_1.useMemo)(() => {
|
|
67
73
|
if (parsed === null || outline.dimensions === null) {
|
|
68
74
|
return null;
|
|
@@ -73,7 +79,22 @@ const SelectedOutlineTransformOriginHandle = ({ getLatestTargetByKey, layoutTarg
|
|
|
73
79
|
height: outline.dimensions.height,
|
|
74
80
|
});
|
|
75
81
|
}, [outline.dimensions, parsed]);
|
|
76
|
-
const position = (0, react_1.useMemo)(() =>
|
|
82
|
+
const position = (0, react_1.useMemo)(() => {
|
|
83
|
+
if (layoutTarget === null || layoutTarget === void 0 ? void 0 : layoutTarget.selectedForRotation) {
|
|
84
|
+
return (0, selected_outline_measurement_1.getSelectedOutlineRotationPivot)({
|
|
85
|
+
dimensions: outline.dimensions,
|
|
86
|
+
points: transformOriginPoints,
|
|
87
|
+
transformOriginValue: layoutTarget.transformOriginValue,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return uv === null ? null : (0, selected_outline_uv_1.getUvHandlePosition)(transformOriginPoints, uv);
|
|
91
|
+
}, [
|
|
92
|
+
layoutTarget === null || layoutTarget === void 0 ? void 0 : layoutTarget.selectedForRotation,
|
|
93
|
+
layoutTarget === null || layoutTarget === void 0 ? void 0 : layoutTarget.transformOriginValue,
|
|
94
|
+
outline.dimensions,
|
|
95
|
+
transformOriginPoints,
|
|
96
|
+
uv,
|
|
97
|
+
]);
|
|
77
98
|
const onPointerDown = react_1.default.useCallback((event) => {
|
|
78
99
|
if (event.button !== 0 ||
|
|
79
100
|
transformOriginDrag === null ||
|
|
@@ -88,7 +109,7 @@ const SelectedOutlineTransformOriginHandle = ({ getLatestTargetByKey, layoutTarg
|
|
|
88
109
|
if (svg === null) {
|
|
89
110
|
return;
|
|
90
111
|
}
|
|
91
|
-
const rotation = (0,
|
|
112
|
+
const rotation = (0, timeline_rotation_utils_1.parseCssRotation)(transformOriginDrag.rotateValue);
|
|
92
113
|
if (rotation === null) {
|
|
93
114
|
return;
|
|
94
115
|
}
|
|
@@ -96,7 +117,7 @@ const SelectedOutlineTransformOriginHandle = ({ getLatestTargetByKey, layoutTarg
|
|
|
96
117
|
if (dimensions === null) {
|
|
97
118
|
return;
|
|
98
119
|
}
|
|
99
|
-
const
|
|
120
|
+
const scale = no_react_1.NoReactInternals.parseScaleValue(transformOriginDrag.scaleValue);
|
|
100
121
|
const startTranslate = (0, timeline_translate_utils_1.parseTranslate)(transformOriginDrag.translateValue);
|
|
101
122
|
const svgRect = svg.getBoundingClientRect();
|
|
102
123
|
let last = null;
|
|
@@ -144,16 +165,20 @@ const SelectedOutlineTransformOriginHandle = ({ getLatestTargetByKey, layoutTarg
|
|
|
144
165
|
(nextUv[1] - uv[1]) * dimensions.height,
|
|
145
166
|
];
|
|
146
167
|
const [nextTranslateX, nextTranslateY] = (0, selected_outline_drag_1.compensateTranslateForTransformOrigin)({
|
|
147
|
-
startTranslate,
|
|
168
|
+
startTranslate: [startTranslate[0], startTranslate[1]],
|
|
148
169
|
deltaOrigin,
|
|
149
|
-
|
|
150
|
-
scale
|
|
170
|
+
rotation,
|
|
171
|
+
scale,
|
|
151
172
|
});
|
|
152
173
|
const origin = (0, transform_origin_utils_1.serializeTransformOrigin)({
|
|
153
174
|
uv: nextUv,
|
|
154
175
|
z: parsed.z,
|
|
155
176
|
});
|
|
156
|
-
const translate = (0, timeline_translate_utils_1.serializeTranslate)(
|
|
177
|
+
const translate = (0, timeline_translate_utils_1.serializeTranslate)([
|
|
178
|
+
nextTranslateX,
|
|
179
|
+
nextTranslateY,
|
|
180
|
+
startTranslate[2],
|
|
181
|
+
]);
|
|
157
182
|
last = { uv: nextUv, origin, translate };
|
|
158
183
|
setDragOverrides(transformOriginDrag.nodePath, selected_outline_types_1.transformOriginFieldKey, transformOriginDrag.originPropStatus.status === 'keyframed'
|
|
159
184
|
? remotion_1.Internals.makeKeyframedDragOverride({
|
|
@@ -177,11 +202,15 @@ const SelectedOutlineTransformOriginHandle = ({ getLatestTargetByKey, layoutTarg
|
|
|
177
202
|
const keyframeTranslate = (0, timeline_translate_utils_1.parseTranslate)(String(keyframe.value));
|
|
178
203
|
return {
|
|
179
204
|
...keyframe,
|
|
180
|
-
value: (0, timeline_translate_utils_1.serializeTranslate)(
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
205
|
+
value: (0, timeline_translate_utils_1.serializeTranslate)([
|
|
206
|
+
keyframeTranslate[0] +
|
|
207
|
+
nextTranslateX -
|
|
208
|
+
startTranslate[0],
|
|
209
|
+
keyframeTranslate[1] +
|
|
210
|
+
nextTranslateY -
|
|
211
|
+
startTranslate[1],
|
|
212
|
+
keyframeTranslate[2],
|
|
213
|
+
]),
|
|
185
214
|
};
|
|
186
215
|
}),
|
|
187
216
|
},
|
|
@@ -271,13 +300,10 @@ const SelectedOutlineTransformOriginHandle = ({ getLatestTargetByKey, layoutTarg
|
|
|
271
300
|
transformOriginPoints,
|
|
272
301
|
uv,
|
|
273
302
|
]);
|
|
274
|
-
if (
|
|
275
|
-
parsed === null ||
|
|
276
|
-
uv === null ||
|
|
277
|
-
position === null) {
|
|
303
|
+
if (position === null) {
|
|
278
304
|
return null;
|
|
279
305
|
}
|
|
280
|
-
return (jsx_runtime_1.jsxs("g", { pointerEvents:
|
|
306
|
+
return (jsx_runtime_1.jsxs("g", { "data-remotion-studio-transform-origin-handle": true, pointerEvents: transformOriginDrag === null ? 'none' : 'all', cursor: transformOriginDrag === null ? undefined : 'crosshair', onPointerDown: onPointerDown, "aria-hidden": "true", style: {
|
|
281
307
|
filter: colors_1.SELECTED_OUTLINE_DROP_SHADOW,
|
|
282
308
|
}, children: [
|
|
283
309
|
jsx_runtime_1.jsx("circle", { cx: position.x, cy: position.y, r: 4, stroke: colors_1.BLUE, fill: "none", strokeWidth: 2, vectorEffect: "non-scaling-stroke" }), jsx_runtime_1.jsx("line", { x1: position.x - 8, y1: position.y, x2: position.x + 8, y2: position.y, stroke: colors_1.BLUE, strokeWidth: 2, vectorEffect: "non-scaling-stroke" }), jsx_runtime_1.jsx("line", { x1: position.x, y1: position.y - 8, x2: position.x, y2: position.y + 8, stroke: colors_1.BLUE, strokeWidth: 2, vectorEffect: "non-scaling-stroke" })
|
|
@@ -35,6 +35,14 @@ const SequencePropsSubscriptionProvider = ({ children }) => {
|
|
|
35
35
|
const setOverrideIdToNodePath = (0, react_1.useCallback)((overrideId, state) => {
|
|
36
36
|
setOverrideIdToNodePathMap((prev) => {
|
|
37
37
|
const existing = prev[overrideId];
|
|
38
|
+
if (state === null) {
|
|
39
|
+
if (!existing) {
|
|
40
|
+
return prev;
|
|
41
|
+
}
|
|
42
|
+
const next = { ...prev };
|
|
43
|
+
delete next[overrideId];
|
|
44
|
+
return next;
|
|
45
|
+
}
|
|
38
46
|
if (existing && existing === state) {
|
|
39
47
|
return prev;
|
|
40
48
|
}
|
|
@@ -38,7 +38,7 @@ const SettingsModalFooter = () => {
|
|
|
38
38
|
};
|
|
39
39
|
}, []);
|
|
40
40
|
return (jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { style: footer, noBorder: true, children: jsx_runtime_1.jsx("div", { style: footerRow, children: jsx_runtime_1.jsxs("div", { style: configFileHint, children: ["Changes save to",
|
|
41
|
-
jsx_runtime_1.jsx(InspectorOpenInEditor_1.InspectorOpenInEditor, { location: configFileLocation, label: jsx_runtime_1.jsx("strong", { style: configFileName, children: "remotion.config.ts" }) })
|
|
41
|
+
jsx_runtime_1.jsx(InspectorOpenInEditor_1.InspectorOpenInEditor, { locationType: null, location: configFileLocation, label: jsx_runtime_1.jsx("strong", { style: configFileName, children: "remotion.config.ts" }) })
|
|
42
42
|
] }) }) }));
|
|
43
43
|
};
|
|
44
44
|
exports.SettingsModalFooter = SettingsModalFooter;
|
|
@@ -3,10 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SequencePropsObserver = void 0;
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
const remotion_1 = require("remotion");
|
|
6
|
+
const fast_refresh_context_1 = require("../../fast-refresh-context");
|
|
6
7
|
const client_id_1 = require("../../helpers/client-id");
|
|
8
|
+
const sequence_node_path_mutations_1 = require("../../helpers/sequence-node-path-mutations");
|
|
9
|
+
const ExpandedTracksProvider_1 = require("../ExpandedTracksProvider");
|
|
7
10
|
const SequencePropsObserver = () => {
|
|
8
11
|
const { subscribeToEvent } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
9
|
-
const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
12
|
+
const { remapPropStatuses, setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
13
|
+
const propStatusesRef = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesRefContext);
|
|
14
|
+
const { overrideIdToNodePathMappings } = (0, react_1.useContext)(remotion_1.Internals.OverrideIdsToNodePathsGettersContext);
|
|
15
|
+
const overrideIdToNodePathMappingsRef = (0, react_1.useRef)(overrideIdToNodePathMappings);
|
|
16
|
+
overrideIdToNodePathMappingsRef.current = overrideIdToNodePathMappings;
|
|
17
|
+
const { setOverrideIdToNodePath } = (0, react_1.useContext)(remotion_1.Internals.OverrideIdsToNodePathsSettersContext);
|
|
18
|
+
const { fastRefreshes } = (0, react_1.useContext)(fast_refresh_context_1.FastRefreshContext);
|
|
19
|
+
const { migrateExpandedTracksForSubscriptionKey } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksSetterContext);
|
|
10
20
|
(0, react_1.useEffect)(() => {
|
|
11
21
|
const handleEvent = (event) => {
|
|
12
22
|
if (event.type !== 'sequence-props-updated') {
|
|
@@ -19,6 +29,92 @@ const SequencePropsObserver = () => {
|
|
|
19
29
|
unsubscribe();
|
|
20
30
|
};
|
|
21
31
|
}, [setPropStatuses, subscribeToEvent]);
|
|
32
|
+
(0, react_1.useLayoutEffect)(() => {
|
|
33
|
+
var _a;
|
|
34
|
+
const mutations = (0, sequence_node_path_mutations_1.takePendingSequenceNodePathMutations)();
|
|
35
|
+
if (mutations.length === 0) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const statusRemappings = [];
|
|
39
|
+
const overrideUpdates = [];
|
|
40
|
+
for (const [overrideId, previousNodePath] of Object.entries(overrideIdToNodePathMappingsRef.current)) {
|
|
41
|
+
let { nodePath } = previousNodePath;
|
|
42
|
+
let wasRemapped = false;
|
|
43
|
+
let wasDeleted = false;
|
|
44
|
+
let runtimeNodePathExists = true;
|
|
45
|
+
const previousNodePathString = JSON.stringify(previousNodePath.nodePath);
|
|
46
|
+
for (const mutation of mutations) {
|
|
47
|
+
for (const file of mutation.files) {
|
|
48
|
+
if (file.absolutePath !== previousNodePath.absolutePath) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
// Prop statuses follow source nodes to their new paths. Override IDs,
|
|
52
|
+
// however, follow React's runtime instances. After deleting an unkeyed
|
|
53
|
+
// sibling, React reuses the instance already at the destination path.
|
|
54
|
+
// Keep that mapping in place and only remove mappings for vacated paths.
|
|
55
|
+
const runtimeNodePathIsSource = file.remappings.some((item) => JSON.stringify(item.oldNodePath) === previousNodePathString);
|
|
56
|
+
const runtimeNodePathIsDestination = file.remappings.some((item) => item.newNodePath !== null &&
|
|
57
|
+
JSON.stringify(item.newNodePath) === previousNodePathString);
|
|
58
|
+
const runtimeNodePathWasRestored = file.restoredNodePaths.some((item) => JSON.stringify(item) === previousNodePathString);
|
|
59
|
+
if (runtimeNodePathIsSource) {
|
|
60
|
+
runtimeNodePathExists =
|
|
61
|
+
runtimeNodePathIsDestination || runtimeNodePathWasRestored;
|
|
62
|
+
}
|
|
63
|
+
else if (runtimeNodePathIsDestination ||
|
|
64
|
+
runtimeNodePathWasRestored) {
|
|
65
|
+
runtimeNodePathExists = true;
|
|
66
|
+
}
|
|
67
|
+
if (wasDeleted) {
|
|
68
|
+
const wasRestored = file.restoredNodePaths.some((restoredNodePath) => JSON.stringify(restoredNodePath) === JSON.stringify(nodePath));
|
|
69
|
+
if (wasRestored) {
|
|
70
|
+
wasDeleted = false;
|
|
71
|
+
}
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const remapping = file.remappings.find((item) => JSON.stringify(item.oldNodePath) === JSON.stringify(nodePath));
|
|
75
|
+
if (!remapping) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
wasRemapped = true;
|
|
79
|
+
if (remapping.newNodePath === null) {
|
|
80
|
+
wasDeleted = true;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
nodePath = remapping.newNodePath;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (!wasRemapped) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const nextNodePath = wasDeleted ? null : { ...previousNodePath, nodePath };
|
|
90
|
+
const previousStatusKey = remotion_1.Internals.makeSequencePropsSubscriptionKey(previousNodePath);
|
|
91
|
+
statusRemappings.push({
|
|
92
|
+
previousNodePath,
|
|
93
|
+
nodePath: nextNodePath,
|
|
94
|
+
result: (_a = propStatusesRef.current[previousStatusKey]) !== null && _a !== void 0 ? _a : null,
|
|
95
|
+
});
|
|
96
|
+
overrideUpdates.push({
|
|
97
|
+
overrideId,
|
|
98
|
+
nodePath: runtimeNodePathExists ? previousNodePath : null,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
remapPropStatuses(statusRemappings);
|
|
102
|
+
for (const event of overrideUpdates) {
|
|
103
|
+
setOverrideIdToNodePath(event.overrideId, event.nodePath);
|
|
104
|
+
}
|
|
105
|
+
for (const event of statusRemappings) {
|
|
106
|
+
if (event.nodePath === null) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
migrateExpandedTracksForSubscriptionKey(event.previousNodePath, event.nodePath);
|
|
110
|
+
}
|
|
111
|
+
}, [
|
|
112
|
+
fastRefreshes,
|
|
113
|
+
migrateExpandedTracksForSubscriptionKey,
|
|
114
|
+
propStatusesRef,
|
|
115
|
+
remapPropStatuses,
|
|
116
|
+
setOverrideIdToNodePath,
|
|
117
|
+
]);
|
|
22
118
|
return null;
|
|
23
119
|
};
|
|
24
120
|
exports.SequencePropsObserver = SequencePropsObserver;
|
|
@@ -6,7 +6,7 @@ const no_react_1 = require("remotion/no-react");
|
|
|
6
6
|
const use_resolved_stack_react_to_change_1 = require("./use-resolved-stack-react-to-change");
|
|
7
7
|
const use_sequence_props_subscription_1 = require("./use-sequence-props-subscription");
|
|
8
8
|
const SubscribeToNodePaths = ({ overrideId, componentIdentity, schema, getStack, effects }) => {
|
|
9
|
-
const
|
|
9
|
+
const { resolvedLocation, stack, preferMappedNodePath } = (0, use_resolved_stack_react_to_change_1.useResolveStackAndReactToChange)(getStack);
|
|
10
10
|
const effectSubscriptions = (0, react_1.useMemo)(() => {
|
|
11
11
|
return effects
|
|
12
12
|
.map((effect) => {
|
|
@@ -19,7 +19,9 @@ const SubscribeToNodePaths = ({ overrideId, componentIdentity, schema, getStack,
|
|
|
19
19
|
componentIdentity,
|
|
20
20
|
schema,
|
|
21
21
|
effects: effectSubscriptions,
|
|
22
|
-
originalLocation,
|
|
22
|
+
originalLocation: resolvedLocation,
|
|
23
|
+
preferMappedNodePath,
|
|
24
|
+
stack,
|
|
23
25
|
});
|
|
24
26
|
return null;
|
|
25
27
|
};
|
|
@@ -109,10 +109,7 @@ const TimelineEffectItem = ({ label, nodePathInfo, effectIndex, effectSchema, do
|
|
|
109
109
|
effectIndex,
|
|
110
110
|
},
|
|
111
111
|
]);
|
|
112
|
-
if (result.success) {
|
|
113
|
-
(0, NotificationCenter_1.showNotification)('Removed effect from source file', 2000);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
112
|
+
if (!result.success) {
|
|
116
113
|
(0, NotificationCenter_1.showNotification)(result.reason, 4000);
|
|
117
114
|
}
|
|
118
115
|
}
|
|
@@ -2,13 +2,20 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TimelineFieldRowContent = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
5
6
|
const timeline_field_row_layout_1 = require("./timeline-field-row-layout");
|
|
6
7
|
const TimelineFieldLabel_1 = require("./TimelineFieldLabel");
|
|
8
|
+
const Transform3DModeContext_1 = require("./Transform3DModeContext");
|
|
7
9
|
const TimelineFieldRowContent = ({ field, rowDepth, selected, children }) => {
|
|
8
10
|
var _a;
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
11
|
+
const transform3DMode = (0, react_1.useContext)(Transform3DModeContext_1.Transform3DModeContext);
|
|
12
|
+
const stacked = (0, timeline_field_row_layout_1.isTimelineFieldStacked)({ field, transform3DMode });
|
|
13
|
+
const compactStacked = stacked && field.typeName !== 'text-content';
|
|
14
|
+
const label = (jsx_runtime_1.jsx(TimelineFieldLabel_1.TimelineFieldLabel, { rowDepth: rowDepth, selected: selected, label: (_a = field.description) !== null && _a !== void 0 ? _a : field.key, stacked: stacked }));
|
|
15
|
+
const value = (jsx_runtime_1.jsx("div", { style: compactStacked
|
|
16
|
+
? timeline_field_row_layout_1.timelineCompactStackedFieldValueColumnStyle
|
|
17
|
+
: timeline_field_row_layout_1.timelineFieldValueColumnStyle, children: children }));
|
|
18
|
+
if (stacked) {
|
|
12
19
|
return (jsx_runtime_1.jsxs("div", { style: timeline_field_row_layout_1.timelineStackedFieldContentStyle, children: [label, value] }));
|
|
13
20
|
}
|
|
14
21
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [label, value] }));
|