@remotion/studio 4.0.506 → 4.0.507
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/api/copy-render-output-to-asset.d.ts +4 -0
- package/dist/api/copy-render-output-to-asset.js +11 -0
- package/dist/components/AssetSelector.js +19 -4
- package/dist/components/AssetSelectorItem.js +2 -2
- package/dist/components/CodingAgentIcon.d.ts +4 -0
- package/dist/components/CodingAgentIcon.js +17 -0
- package/dist/components/ConfigureDefaultEditorModal.d.ts +1 -3
- package/dist/components/ConfigureDefaultEditorModal.js +67 -77
- package/dist/components/ConfigureLicenseModal.d.ts +1 -4
- package/dist/components/ConfigureLicenseModal.js +89 -81
- package/dist/components/ContextMenu.js +10 -8
- package/dist/components/EditorContexts.js +6 -5
- package/dist/components/ExpandedTracksProvider.js +10 -53
- package/dist/components/InspectorLocationCopy.js +8 -8
- package/dist/components/InspectorOpenInEditor.d.ts +1 -0
- package/dist/components/InspectorOpenInEditor.js +39 -49
- package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -0
- package/dist/components/InspectorPanel/SequenceInspectorHeader.js +22 -4
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +1 -1
- package/dist/components/Menu/MenuSectionHeader.d.ts +4 -0
- package/dist/components/Menu/MenuSectionHeader.js +20 -0
- package/dist/components/Menu/SubMenu.js +13 -2
- package/dist/components/Menu/menu-tree-context.d.ts +3 -0
- package/dist/components/Menu/menu-tree-context.js +13 -0
- package/dist/components/NewComposition/ComboBox.d.ts +6 -1
- package/dist/components/NewComposition/MenuContent.js +27 -19
- package/dist/components/NewComposition/menu-typeahead.js +2 -2
- package/dist/components/Preview.js +29 -4
- package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.d.ts +1 -0
- package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +2 -2
- package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +3 -3
- package/dist/components/RenderModal/SchemaEditor/ZodSwitch.js +1 -1
- package/dist/components/RenderModal/ServerRenderModal.js +4 -0
- package/dist/components/RenderQueue/RenderQueueItem.js +8 -2
- package/dist/components/RenderQueue/actions.d.ts +4 -2
- package/dist/components/RenderQueue/actions.js +4 -2
- package/dist/components/RenderQueue/index.js +3 -4
- package/dist/components/RenderQueue/use-render-output-file-drag.d.ts +8 -0
- package/dist/components/RenderQueue/use-render-output-file-drag.js +121 -0
- package/dist/components/SegmentedControl.js +0 -1
- package/dist/components/SelectedOutlineElement.d.ts +14 -17
- package/dist/components/SelectedOutlineElement.js +112 -930
- package/dist/components/SelectedOutlineKeyboardControls.d.ts +7 -0
- package/dist/components/SelectedOutlineKeyboardControls.js +261 -0
- package/dist/components/SelectedOutlineOverlay.d.ts +6 -13
- package/dist/components/SelectedOutlineOverlay.js +349 -864
- package/dist/components/SelectedOutlinePolygon.d.ts +25 -0
- package/dist/components/SelectedOutlinePolygon.js +359 -0
- package/dist/components/SelectedOutlineRenderer.d.ts +18 -0
- package/dist/components/SelectedOutlineRenderer.js +208 -0
- package/dist/components/SelectedOutlineRotationCornerHandle.d.ts +16 -0
- package/dist/components/SelectedOutlineRotationCornerHandle.js +269 -0
- package/dist/components/SelectedOutlineScaleEdgeLine.d.ts +16 -0
- package/dist/components/SelectedOutlineScaleEdgeLine.js +211 -0
- package/dist/components/SelectedOutlineSnapIndicators.d.ts +9 -0
- package/dist/components/SelectedOutlineSnapIndicators.js +29 -0
- package/dist/components/SelectedOutlineTransformOriginHandle.d.ts +9 -0
- package/dist/components/SelectedOutlineTransformOriginHandle.js +286 -0
- package/dist/components/SelectedOutlineUvControls.d.ts +3 -9
- package/dist/components/SelectedOutlineUvControls.js +57 -12
- package/dist/components/SettingsContext.d.ts +15 -0
- package/dist/components/SettingsContext.js +116 -0
- package/dist/components/SettingsModal.js +10 -4
- package/dist/components/SettingsModalFooter.d.ts +1 -3
- package/dist/components/SettingsModalFooter.js +4 -6
- package/dist/components/ShowOutlinesProvider.js +2 -3
- package/dist/components/Timeline/EasingEditorModal.js +66 -22
- package/dist/components/Timeline/Timeline.js +22 -5
- package/dist/components/Timeline/TimelineDuplicateCount.d.ts +4 -0
- package/dist/components/Timeline/TimelineDuplicateCount.js +28 -0
- package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +3 -23
- package/dist/components/Timeline/TimelineExpandedTrackKeyframes.d.ts +4 -2
- package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +11 -1
- package/dist/components/Timeline/TimelineSequence.js +28 -25
- package/dist/components/Timeline/TimelineSequenceItem.js +49 -27
- package/dist/components/Timeline/TimelineTrack.js +2 -1
- package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +6 -3
- package/dist/components/Timeline/get-sequence-context-menu-items.js +58 -53
- package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +36 -4
- package/dist/components/Timeline/{use-open-sequence-in-editor.d.ts → use-open-sequence-in-apps.d.ts} +4 -1
- package/dist/components/Timeline/{use-open-sequence-in-editor.js → use-open-sequence-in-apps.js} +20 -4
- package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +4 -0
- package/dist/components/Timeline/use-timeline-expanded-tree.js +45 -1
- package/dist/components/get-open-in-menu-items.d.ts +12 -0
- package/dist/components/get-open-in-menu-items.js +83 -0
- package/dist/components/selected-outline-measurement.d.ts +2 -2
- package/dist/components/selected-outline-order.d.ts +12 -0
- package/dist/components/selected-outline-order.js +251 -0
- package/dist/components/selected-outline-types.d.ts +9 -10
- package/dist/components/svg-point-to-client-point.d.ts +2 -0
- package/dist/components/svg-point-to-client-point.js +10 -0
- package/dist/components/use-auto-save-config.d.ts +8 -0
- package/dist/components/use-auto-save-config.js +74 -0
- package/dist/components/use-default-editor-info.d.ts +1 -0
- package/dist/components/use-default-editor-info.js +10 -30
- package/dist/esm/{chunk-jefhcs5z.js → chunk-fgedsvhb.js} +1 -2
- package/dist/esm/{chunk-b49ec3nz.js → chunk-ptnd65a9.js} +10602 -9364
- package/dist/esm/internals.mjs +10601 -9363
- package/dist/esm/previewEntry.mjs +10462 -9224
- package/dist/esm/renderEntry.mjs +2 -2
- package/dist/helpers/are-sequence-node-path-infos-equal.d.ts +2 -0
- package/dist/helpers/are-sequence-node-path-infos-equal.js +27 -0
- package/dist/helpers/calculate-timeline.js +3 -3
- package/dist/helpers/client-id.js +8 -1
- package/dist/helpers/format-file-location.d.ts +1 -1
- package/dist/helpers/format-file-location.js +3 -3
- package/dist/helpers/migrate-expanded-tracks-for-subscription-key.js +3 -3
- package/dist/helpers/open-in-editor.d.ts +1 -0
- package/dist/helpers/open-in-editor.js +5 -1
- package/dist/helpers/studio-runtime-config.js +3 -0
- package/dist/helpers/timeline-node-path-key.d.ts +2 -0
- package/dist/helpers/timeline-node-path-key.js +3 -1
- package/dist/helpers/use-asset-drag-events.d.ts +2 -1
- package/dist/helpers/use-asset-drag-events.js +14 -6
- package/dist/helpers/use-menu-structure.js +2 -2
- package/dist/helpers/use-runtime-values.d.ts +1 -3
- package/dist/state/timeline-sequence-hover.d.ts +9 -3
- package/dist/state/timeline-sequence-hover.js +63 -12
- package/package.json +12 -12
|
@@ -33,923 +33,40 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.SelectedOutlineElement =
|
|
36
|
+
exports.SelectedOutlineElement = void 0;
|
|
37
37
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
38
|
const react_1 = __importStar(require("react"));
|
|
39
39
|
const remotion_1 = require("remotion");
|
|
40
|
-
const no_react_1 = require("remotion/no-react");
|
|
41
40
|
const client_id_1 = require("../helpers/client-id");
|
|
42
|
-
const colors_1 = require("../helpers/colors");
|
|
43
|
-
const format_file_location_1 = require("../helpers/format-file-location");
|
|
44
41
|
const get_connected_compositions_1 = require("../helpers/get-connected-compositions");
|
|
45
42
|
const get_sequence_double_click_action_1 = require("../helpers/get-sequence-double-click-action");
|
|
46
43
|
const interactivity_enabled_1 = require("../helpers/interactivity-enabled");
|
|
47
44
|
const open_in_editor_1 = require("../helpers/open-in-editor");
|
|
48
|
-
const
|
|
49
|
-
const editor_snapping_1 = require("../state/editor-snapping");
|
|
45
|
+
const timeline_node_path_key_1 = require("../helpers/timeline-node-path-key");
|
|
50
46
|
const modals_1 = require("../state/modals");
|
|
47
|
+
const timeline_sequence_hover_1 = require("../state/timeline-sequence-hover");
|
|
51
48
|
const call_api_1 = require("./call-api");
|
|
52
49
|
const ConfirmationDialog_1 = require("./ConfirmationDialog");
|
|
53
|
-
const ContextMenu_1 = require("./ContextMenu");
|
|
54
|
-
const effect_drag_and_drop_1 = require("./effect-drag-and-drop");
|
|
55
|
-
const ForceSpecificCursor_1 = require("./ForceSpecificCursor");
|
|
56
50
|
const InitialCompositionLoader_1 = require("./InitialCompositionLoader");
|
|
57
51
|
const NotificationCenter_1 = require("./Notifications/NotificationCenter");
|
|
58
|
-
const selected_outline_drag_1 = require("./selected-outline-drag");
|
|
59
|
-
const selected_outline_measurement_1 = require("./selected-outline-measurement");
|
|
60
|
-
const selected_outline_snap_1 = require("./selected-outline-snap");
|
|
61
52
|
const selected_outline_types_1 = require("./selected-outline-types");
|
|
62
|
-
const selected_outline_uv_1 = require("./selected-outline-uv");
|
|
63
53
|
const SelectedOutlineCropControls_1 = require("./SelectedOutlineCropControls");
|
|
64
|
-
const
|
|
54
|
+
const SelectedOutlinePolygon_1 = require("./SelectedOutlinePolygon");
|
|
55
|
+
const SelectedOutlineRotationCornerHandle_1 = require("./SelectedOutlineRotationCornerHandle");
|
|
56
|
+
const SelectedOutlineScaleEdgeLine_1 = require("./SelectedOutlineScaleEdgeLine");
|
|
65
57
|
const disable_sequence_interactivity_1 = require("./Timeline/disable-sequence-interactivity");
|
|
66
58
|
const duplicate_selected_timeline_item_1 = require("./Timeline/duplicate-selected-timeline-item");
|
|
67
|
-
const focus_inspector_field_1 = require("./Timeline/focus-inspector-field");
|
|
68
59
|
const get_sequence_context_menu_items_1 = require("./Timeline/get-sequence-context-menu-items");
|
|
69
|
-
const imperative_state_1 = require("./Timeline/imperative-state");
|
|
70
|
-
const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
|
|
71
60
|
const timeline_asset_link_1 = require("./Timeline/timeline-asset-link");
|
|
72
|
-
const timeline_translate_utils_1 = require("./Timeline/timeline-translate-utils");
|
|
73
61
|
const get_stack_1 = require("./Timeline/TimelineStack/get-stack");
|
|
74
|
-
const
|
|
62
|
+
const use_default_editor_info_1 = require("./use-default-editor-info");
|
|
75
63
|
const use_select_asset_1 = require("./use-select-asset");
|
|
76
|
-
const
|
|
77
|
-
var _a
|
|
78
|
-
const { setDragOverrides, clearDragOverrides, setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
79
|
-
const { editorSnapping } = (0, react_1.useContext)(editor_snapping_1.EditorSnappingContext);
|
|
80
|
-
const transformOriginDrag = (_a = target === null || target === void 0 ? void 0 : target.transformOriginDrag) !== null && _a !== void 0 ? _a : null;
|
|
81
|
-
const crop = target === null || target === void 0 ? void 0 : target.crop;
|
|
82
|
-
const transformOriginPoints = (_b = outline.uncroppedPoints) !== null && _b !== void 0 ? _b : outline.points;
|
|
83
|
-
const parsed = (0, react_1.useMemo)(() => transformOriginDrag === null
|
|
84
|
-
? null
|
|
85
|
-
: (0, transform_origin_utils_1.parseTransformOrigin)(transformOriginDrag.originValue), [transformOriginDrag]);
|
|
86
|
-
const uv = (0, react_1.useMemo)(() => {
|
|
87
|
-
if (parsed === null || outline.dimensions === null) {
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
return (0, transform_origin_utils_1.parsedTransformOriginToUv)({
|
|
91
|
-
parsed,
|
|
92
|
-
width: outline.dimensions.width,
|
|
93
|
-
height: outline.dimensions.height,
|
|
94
|
-
});
|
|
95
|
-
}, [outline.dimensions, parsed]);
|
|
96
|
-
const position = (0, react_1.useMemo)(() => (uv === null ? null : (0, selected_outline_uv_1.getUvHandlePosition)(transformOriginPoints, uv)), [transformOriginPoints, uv]);
|
|
97
|
-
const onPointerDown = react_1.default.useCallback((event) => {
|
|
98
|
-
if (event.button !== 0 ||
|
|
99
|
-
transformOriginDrag === null ||
|
|
100
|
-
parsed === null ||
|
|
101
|
-
uv === null ||
|
|
102
|
-
outline.dimensions === null) {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
event.preventDefault();
|
|
106
|
-
event.stopPropagation();
|
|
107
|
-
const svg = event.currentTarget.ownerSVGElement;
|
|
108
|
-
if (svg === null) {
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
const rotation = (0, selected_outline_drag_1.parseCssRotationToRadians)(transformOriginDrag.rotateValue);
|
|
112
|
-
if (rotation === null) {
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
const { dimensions } = outline;
|
|
116
|
-
if (dimensions === null) {
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
const [scaleX, scaleY] = no_react_1.NoReactInternals.parseScaleValue(transformOriginDrag.scaleValue);
|
|
120
|
-
const startTranslate = (0, timeline_translate_utils_1.parseTranslate)(transformOriginDrag.translateValue);
|
|
121
|
-
const svgRect = svg.getBoundingClientRect();
|
|
122
|
-
let last = null;
|
|
123
|
-
let currentPointerX = event.clientX;
|
|
124
|
-
let currentPointerY = event.clientY;
|
|
125
|
-
let axisLocked = event.shiftKey;
|
|
126
|
-
onDraggingChange(true);
|
|
127
|
-
(0, ForceSpecificCursor_1.forceSpecificCursor)('crosshair');
|
|
128
|
-
const updateFromPointerPosition = () => {
|
|
129
|
-
const point = {
|
|
130
|
-
x: currentPointerX - svgRect.left,
|
|
131
|
-
y: currentPointerY - svgRect.top,
|
|
132
|
-
};
|
|
133
|
-
const rawUv = (0, selected_outline_uv_1.getUvCoordinateForPoint)(transformOriginPoints, point);
|
|
134
|
-
const lockedAxis = (0, selected_outline_drag_1.getSelectedOutlineTransformOriginLockedAxis)({
|
|
135
|
-
axisLocked,
|
|
136
|
-
dimensions,
|
|
137
|
-
startUv: uv,
|
|
138
|
-
uv: rawUv,
|
|
139
|
-
});
|
|
140
|
-
const axisLockedUv = (0, selected_outline_drag_1.applySelectedOutlineTransformOriginAxisLock)({
|
|
141
|
-
lockedAxis,
|
|
142
|
-
startUv: uv,
|
|
143
|
-
uv: rawUv,
|
|
144
|
-
});
|
|
145
|
-
const snapPoint = lockedAxis === null
|
|
146
|
-
? point
|
|
147
|
-
: (0, selected_outline_uv_1.getUvHandlePosition)(transformOriginPoints, axisLockedUv);
|
|
148
|
-
const snappedUv = editorSnapping
|
|
149
|
-
? (0, selected_outline_drag_1.snapSelectedOutlineTransformOriginUv)({
|
|
150
|
-
crop: crop !== null && crop !== void 0 ? crop : null,
|
|
151
|
-
point: snapPoint,
|
|
152
|
-
points: transformOriginPoints,
|
|
153
|
-
thresholdPx: null,
|
|
154
|
-
uv: axisLockedUv,
|
|
155
|
-
})
|
|
156
|
-
: axisLockedUv;
|
|
157
|
-
const nextUv = (0, selected_outline_drag_1.applySelectedOutlineTransformOriginAxisLock)({
|
|
158
|
-
lockedAxis,
|
|
159
|
-
startUv: uv,
|
|
160
|
-
uv: snappedUv,
|
|
161
|
-
});
|
|
162
|
-
const deltaOrigin = [
|
|
163
|
-
(nextUv[0] - uv[0]) * dimensions.width,
|
|
164
|
-
(nextUv[1] - uv[1]) * dimensions.height,
|
|
165
|
-
];
|
|
166
|
-
const [nextTranslateX, nextTranslateY] = (0, selected_outline_drag_1.compensateTranslateForTransformOrigin)({
|
|
167
|
-
startTranslate,
|
|
168
|
-
deltaOrigin,
|
|
169
|
-
rotate: rotation,
|
|
170
|
-
scale: [scaleX, scaleY],
|
|
171
|
-
});
|
|
172
|
-
const origin = (0, transform_origin_utils_1.serializeTransformOrigin)({
|
|
173
|
-
uv: nextUv,
|
|
174
|
-
z: parsed.z,
|
|
175
|
-
});
|
|
176
|
-
const translate = (0, timeline_translate_utils_1.serializeTranslate)(nextTranslateX, nextTranslateY);
|
|
177
|
-
last = { uv: nextUv, origin, translate };
|
|
178
|
-
setDragOverrides(transformOriginDrag.nodePath, selected_outline_types_1.transformOriginFieldKey, transformOriginDrag.originPropStatus.status === 'keyframed'
|
|
179
|
-
? remotion_1.Internals.makeKeyframedDragOverride({
|
|
180
|
-
status: transformOriginDrag.originPropStatus,
|
|
181
|
-
frame: transformOriginDrag.sourceFrame,
|
|
182
|
-
value: origin,
|
|
183
|
-
})
|
|
184
|
-
: remotion_1.Internals.makeStaticDragOverride(origin));
|
|
185
|
-
setDragOverrides(transformOriginDrag.nodePath, selected_outline_types_1.translateFieldKey, transformOriginDrag.translatePropStatus.status === 'keyframed'
|
|
186
|
-
? transformOriginDrag.originPropStatus.status === 'keyframed'
|
|
187
|
-
? remotion_1.Internals.makeKeyframedDragOverride({
|
|
188
|
-
status: transformOriginDrag.translatePropStatus,
|
|
189
|
-
frame: transformOriginDrag.sourceFrame,
|
|
190
|
-
value: translate,
|
|
191
|
-
})
|
|
192
|
-
: {
|
|
193
|
-
type: 'keyframed',
|
|
194
|
-
status: {
|
|
195
|
-
...transformOriginDrag.translatePropStatus,
|
|
196
|
-
keyframes: transformOriginDrag.translatePropStatus.keyframes.map((keyframe) => {
|
|
197
|
-
const keyframeTranslate = (0, timeline_translate_utils_1.parseTranslate)(String(keyframe.value));
|
|
198
|
-
return {
|
|
199
|
-
...keyframe,
|
|
200
|
-
value: (0, timeline_translate_utils_1.serializeTranslate)(keyframeTranslate[0] +
|
|
201
|
-
nextTranslateX -
|
|
202
|
-
startTranslate[0], keyframeTranslate[1] +
|
|
203
|
-
nextTranslateY -
|
|
204
|
-
startTranslate[1]),
|
|
205
|
-
};
|
|
206
|
-
}),
|
|
207
|
-
},
|
|
208
|
-
}
|
|
209
|
-
: remotion_1.Internals.makeStaticDragOverride(translate));
|
|
210
|
-
};
|
|
211
|
-
updateFromPointerPosition();
|
|
212
|
-
const onPointerMove = (moveEvent) => {
|
|
213
|
-
moveEvent.preventDefault();
|
|
214
|
-
currentPointerX = moveEvent.clientX;
|
|
215
|
-
currentPointerY = moveEvent.clientY;
|
|
216
|
-
axisLocked = moveEvent.shiftKey;
|
|
217
|
-
updateFromPointerPosition();
|
|
218
|
-
};
|
|
219
|
-
const onKeyChange = (keyEvent) => {
|
|
220
|
-
if (keyEvent.key !== 'Shift') {
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
const nextAxisLocked = keyEvent.type === 'keydown';
|
|
224
|
-
if (nextAxisLocked === axisLocked) {
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
axisLocked = nextAxisLocked;
|
|
228
|
-
updateFromPointerPosition();
|
|
229
|
-
};
|
|
230
|
-
const onPointerUp = () => {
|
|
231
|
-
window.removeEventListener('keydown', onKeyChange);
|
|
232
|
-
window.removeEventListener('keyup', onKeyChange);
|
|
233
|
-
(0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
|
|
234
|
-
onDraggingChange(false);
|
|
235
|
-
if (last === null || (0, selected_outline_drag_1.uvsEqual)(last.uv, uv)) {
|
|
236
|
-
clearDragOverrides(transformOriginDrag.nodePath);
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
const { staticChanges, keyframedChanges } = (0, selected_outline_drag_1.getSelectedOutlineTransformOriginDragChanges)({
|
|
240
|
-
target: transformOriginDrag,
|
|
241
|
-
startTranslate,
|
|
242
|
-
origin: last.origin,
|
|
243
|
-
translate: last.translate,
|
|
244
|
-
});
|
|
245
|
-
if (staticChanges.length === 0 && keyframedChanges.length === 0) {
|
|
246
|
-
clearDragOverrides(transformOriginDrag.nodePath);
|
|
247
|
-
return;
|
|
248
|
-
}
|
|
249
|
-
const promise = staticChanges.length === 0
|
|
250
|
-
? (0, call_add_keyframe_1.callAddKeyframes)({
|
|
251
|
-
sequenceKeyframes: keyframedChanges,
|
|
252
|
-
effectKeyframes: [],
|
|
253
|
-
setPropStatuses,
|
|
254
|
-
clientId: transformOriginDrag.clientId,
|
|
255
|
-
})
|
|
256
|
-
: (0, save_sequence_prop_1.saveSequenceProps)({
|
|
257
|
-
changes: staticChanges,
|
|
258
|
-
addedKeyframes: keyframedChanges,
|
|
259
|
-
movedKeyframes: null,
|
|
260
|
-
setPropStatuses,
|
|
261
|
-
clientId: transformOriginDrag.clientId,
|
|
262
|
-
undoLabel: 'Move transform origin',
|
|
263
|
-
redoLabel: 'Move transform origin back',
|
|
264
|
-
});
|
|
265
|
-
promise
|
|
266
|
-
.catch((err) => {
|
|
267
|
-
(0, NotificationCenter_1.showNotification)(`Could not save transform origin: ${err instanceof Error ? err.message : String(err)}`, 4000);
|
|
268
|
-
})
|
|
269
|
-
.finally(() => {
|
|
270
|
-
clearDragOverrides(transformOriginDrag.nodePath);
|
|
271
|
-
});
|
|
272
|
-
};
|
|
273
|
-
(0, pointer_session_1.startPointerSession)({
|
|
274
|
-
event,
|
|
275
|
-
target: event.currentTarget,
|
|
276
|
-
onMove: onPointerMove,
|
|
277
|
-
onEnd: onPointerUp,
|
|
278
|
-
});
|
|
279
|
-
window.addEventListener('keydown', onKeyChange);
|
|
280
|
-
window.addEventListener('keyup', onKeyChange);
|
|
281
|
-
}, [
|
|
282
|
-
clearDragOverrides,
|
|
283
|
-
crop,
|
|
284
|
-
editorSnapping,
|
|
285
|
-
onDraggingChange,
|
|
286
|
-
outline,
|
|
287
|
-
parsed,
|
|
288
|
-
setDragOverrides,
|
|
289
|
-
setPropStatuses,
|
|
290
|
-
transformOriginDrag,
|
|
291
|
-
transformOriginPoints,
|
|
292
|
-
uv,
|
|
293
|
-
]);
|
|
294
|
-
if (transformOriginDrag === null ||
|
|
295
|
-
parsed === null ||
|
|
296
|
-
uv === null ||
|
|
297
|
-
position === null) {
|
|
298
|
-
return null;
|
|
299
|
-
}
|
|
300
|
-
return (jsx_runtime_1.jsxs("g", { pointerEvents: "all", cursor: "crosshair", onPointerDown: onPointerDown, "aria-hidden": "true", style: {
|
|
301
|
-
filter: colors_1.SELECTED_OUTLINE_DROP_SHADOW,
|
|
302
|
-
}, children: [
|
|
303
|
-
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" })
|
|
304
|
-
] }));
|
|
305
|
-
};
|
|
306
|
-
exports.SelectedOutlineTransformOriginHandle = SelectedOutlineTransformOriginHandle;
|
|
307
|
-
const SelectedOutlinePolygon = ({ allDragTargets, allDragOutlines, dragging, hovered, onContextMenuOpen, outline, onDraggingChange, onHoverChange, onSnapPointsChange, onSelect, onDoubleClickTarget, scale, snapTargets, target, }) => {
|
|
308
|
-
var _a, _b, _c, _d;
|
|
309
|
-
const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
310
|
-
const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
311
|
-
const { editorSnapping } = (0, react_1.useContext)(editor_snapping_1.EditorSnappingContext);
|
|
312
|
-
const polygonRef = (0, react_1.useRef)(null);
|
|
313
|
-
const points = (0, react_1.useMemo)(() => outline.points.map(selected_outline_measurement_1.pointToString).join(' '), [outline.points]);
|
|
314
|
-
const drag = (_a = target === null || target === void 0 ? void 0 : target.drag) !== null && _a !== void 0 ? _a : null;
|
|
315
|
-
const selected = (_b = target === null || target === void 0 ? void 0 : target.selected) !== null && _b !== void 0 ? _b : false;
|
|
316
|
-
const containsSelection = (_c = target === null || target === void 0 ? void 0 : target.containsSelection) !== null && _c !== void 0 ? _c : false;
|
|
317
|
-
const effectDrop = (_d = target === null || target === void 0 ? void 0 : target.effectDrop) !== null && _d !== void 0 ? _d : null;
|
|
318
|
-
const [effectDropHovered, setEffectDropHovered] = (0, react_1.useState)(false);
|
|
319
|
-
const visible = containsSelection || hovered;
|
|
320
|
-
const onPointerDown = react_1.default.useCallback((event) => {
|
|
321
|
-
if (event.button !== 0 || target === undefined) {
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
event.preventDefault();
|
|
325
|
-
event.stopPropagation();
|
|
326
|
-
const interaction = (0, selected_outline_measurement_1.getOutlineSelectionInteraction)(event);
|
|
327
|
-
const shouldUpdateSelection = !selected || interaction.shiftKey || interaction.toggleKey;
|
|
328
|
-
if (shouldUpdateSelection) {
|
|
329
|
-
onSelect(target.selection, interaction);
|
|
330
|
-
}
|
|
331
|
-
if (drag === null || interaction.shiftKey || interaction.toggleKey) {
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
if ((0, focus_inspector_field_1.commitPendingInspectorFields)()) {
|
|
335
|
-
return;
|
|
336
|
-
}
|
|
337
|
-
const startPointerX = event.clientX;
|
|
338
|
-
const startPointerY = event.clientY;
|
|
339
|
-
const dragStates = (0, selected_outline_drag_1.getSelectedOutlineDragStates)({
|
|
340
|
-
dragTargets: selected ? allDragTargets : [drag],
|
|
341
|
-
getDragOverrides,
|
|
342
|
-
timelinePosition: (0, imperative_state_1.getCurrentFrame)(),
|
|
343
|
-
});
|
|
344
|
-
let lastValues = new Map();
|
|
345
|
-
let currentPointerX = startPointerX;
|
|
346
|
-
let currentPointerY = startPointerY;
|
|
347
|
-
let axisLocked = false;
|
|
348
|
-
let dragStarted = false;
|
|
349
|
-
let snappingDisabled = event.metaKey || event.ctrlKey;
|
|
350
|
-
const updateDragOverrides = () => {
|
|
351
|
-
const screenDeltaX = currentPointerX - startPointerX;
|
|
352
|
-
const screenDeltaY = currentPointerY - startPointerY;
|
|
353
|
-
if (!dragStarted) {
|
|
354
|
-
if (!(0, selected_outline_drag_1.isSelectedOutlineDragPastThreshold)({
|
|
355
|
-
deltaX: screenDeltaX,
|
|
356
|
-
deltaY: screenDeltaY,
|
|
357
|
-
})) {
|
|
358
|
-
return;
|
|
359
|
-
}
|
|
360
|
-
dragStarted = true;
|
|
361
|
-
onDraggingChange(true);
|
|
362
|
-
(0, ForceSpecificCursor_1.forceSpecificCursor)('default');
|
|
363
|
-
}
|
|
364
|
-
const axisLockedDirection = axisLocked
|
|
365
|
-
? Math.abs(screenDeltaX) >= Math.abs(screenDeltaY)
|
|
366
|
-
? 'horizontal'
|
|
367
|
-
: 'vertical'
|
|
368
|
-
: null;
|
|
369
|
-
const dragDelta = (0, selected_outline_drag_1.applySelectedOutlineDragAxisLock)({
|
|
370
|
-
deltaX: screenDeltaX / scale,
|
|
371
|
-
deltaY: screenDeltaY / scale,
|
|
372
|
-
axisLocked,
|
|
373
|
-
});
|
|
374
|
-
let { deltaX, deltaY } = dragDelta;
|
|
375
|
-
if (editorSnapping && !snappingDisabled) {
|
|
376
|
-
const snapResult = (0, selected_outline_snap_1.findSelectedOutlineSnap)({
|
|
377
|
-
allowX: axisLockedDirection !== 'vertical',
|
|
378
|
-
allowY: axisLockedDirection !== 'horizontal',
|
|
379
|
-
deltaX,
|
|
380
|
-
deltaY,
|
|
381
|
-
outlines: selected ? allDragOutlines : [outline],
|
|
382
|
-
scale,
|
|
383
|
-
targets: snapTargets,
|
|
384
|
-
});
|
|
385
|
-
if (snapResult.snapOffsetX !== null) {
|
|
386
|
-
deltaX += snapResult.snapOffsetX;
|
|
387
|
-
}
|
|
388
|
-
if (snapResult.snapOffsetY !== null) {
|
|
389
|
-
deltaY += snapResult.snapOffsetY;
|
|
390
|
-
}
|
|
391
|
-
onSnapPointsChange(snapResult.activeSnapPoints);
|
|
392
|
-
}
|
|
393
|
-
else {
|
|
394
|
-
onSnapPointsChange([]);
|
|
395
|
-
}
|
|
396
|
-
lastValues = (0, selected_outline_drag_1.getSelectedOutlineDragValues)({
|
|
397
|
-
dragStates,
|
|
398
|
-
deltaX,
|
|
399
|
-
deltaY,
|
|
400
|
-
});
|
|
401
|
-
for (const dragState of dragStates) {
|
|
402
|
-
const value = lastValues.get(dragState.key);
|
|
403
|
-
if (value === undefined) {
|
|
404
|
-
throw new Error('Expected drag value to be available');
|
|
405
|
-
}
|
|
406
|
-
if (dragState.target.propStatus.status === 'keyframed') {
|
|
407
|
-
setDragOverrides(dragState.target.nodePath, selected_outline_types_1.translateFieldKey, remotion_1.Internals.makeKeyframedDragOverride({
|
|
408
|
-
status: dragState.target.propStatus,
|
|
409
|
-
frame: dragState.sourceFrame,
|
|
410
|
-
value,
|
|
411
|
-
}));
|
|
412
|
-
}
|
|
413
|
-
else {
|
|
414
|
-
setDragOverrides(dragState.target.nodePath, selected_outline_types_1.translateFieldKey, remotion_1.Internals.makeStaticDragOverride(value));
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
};
|
|
418
|
-
const onPointerMove = (moveEvent) => {
|
|
419
|
-
moveEvent.preventDefault();
|
|
420
|
-
currentPointerX = moveEvent.clientX;
|
|
421
|
-
currentPointerY = moveEvent.clientY;
|
|
422
|
-
axisLocked = moveEvent.shiftKey;
|
|
423
|
-
snappingDisabled = moveEvent.metaKey || moveEvent.ctrlKey;
|
|
424
|
-
updateDragOverrides();
|
|
425
|
-
};
|
|
426
|
-
const onKeyChange = (keyEvent) => {
|
|
427
|
-
if (keyEvent.key !== 'Shift') {
|
|
428
|
-
return;
|
|
429
|
-
}
|
|
430
|
-
const nextAxisLocked = keyEvent.type === 'keydown';
|
|
431
|
-
if (nextAxisLocked === axisLocked) {
|
|
432
|
-
return;
|
|
433
|
-
}
|
|
434
|
-
axisLocked = nextAxisLocked;
|
|
435
|
-
updateDragOverrides();
|
|
436
|
-
};
|
|
437
|
-
const onPointerUp = () => {
|
|
438
|
-
window.removeEventListener('keydown', onKeyChange);
|
|
439
|
-
window.removeEventListener('keyup', onKeyChange);
|
|
440
|
-
if (dragStarted) {
|
|
441
|
-
(0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
|
|
442
|
-
onDraggingChange(false);
|
|
443
|
-
}
|
|
444
|
-
const changes = (0, selected_outline_drag_1.getSelectedOutlineDragChanges)({
|
|
445
|
-
dragStates,
|
|
446
|
-
lastValues,
|
|
447
|
-
});
|
|
448
|
-
if (changes.length === 0) {
|
|
449
|
-
(0, selected_outline_drag_1.clearSelectedOutlineDragOverrides)({ clearDragOverrides, dragStates });
|
|
450
|
-
return;
|
|
451
|
-
}
|
|
452
|
-
const staticChanges = changes.filter((change) => change.type === 'static');
|
|
453
|
-
const keyframedChanges = changes.filter((change) => change.type === 'keyframed');
|
|
454
|
-
Promise.all([
|
|
455
|
-
staticChanges.length > 0
|
|
456
|
-
? (0, save_sequence_prop_1.saveSequenceProps)({
|
|
457
|
-
changes: staticChanges,
|
|
458
|
-
addedKeyframes: null,
|
|
459
|
-
movedKeyframes: null,
|
|
460
|
-
setPropStatuses,
|
|
461
|
-
clientId: drag.clientId,
|
|
462
|
-
undoLabel: changes.length > 1
|
|
463
|
-
? 'Move selected sequences'
|
|
464
|
-
: 'Move sequence',
|
|
465
|
-
redoLabel: changes.length > 1
|
|
466
|
-
? 'Move selected sequences back'
|
|
467
|
-
: 'Move sequence back',
|
|
468
|
-
})
|
|
469
|
-
: Promise.resolve(),
|
|
470
|
-
(0, call_add_keyframe_1.callAddKeyframes)({
|
|
471
|
-
sequenceKeyframes: keyframedChanges,
|
|
472
|
-
effectKeyframes: [],
|
|
473
|
-
setPropStatuses,
|
|
474
|
-
clientId: drag.clientId,
|
|
475
|
-
}),
|
|
476
|
-
])
|
|
477
|
-
.catch((err) => {
|
|
478
|
-
(0, NotificationCenter_1.showNotification)(`Could not save sequence props: ${err instanceof Error ? err.message : String(err)}`, 4000);
|
|
479
|
-
})
|
|
480
|
-
.finally(() => {
|
|
481
|
-
(0, selected_outline_drag_1.clearSelectedOutlineDragOverrides)({ clearDragOverrides, dragStates });
|
|
482
|
-
});
|
|
483
|
-
};
|
|
484
|
-
(0, pointer_session_1.startPointerSession)({
|
|
485
|
-
event,
|
|
486
|
-
target: event.currentTarget,
|
|
487
|
-
onMove: onPointerMove,
|
|
488
|
-
onEnd: onPointerUp,
|
|
489
|
-
});
|
|
490
|
-
window.addEventListener('keydown', onKeyChange);
|
|
491
|
-
window.addEventListener('keyup', onKeyChange);
|
|
492
|
-
}, [
|
|
493
|
-
allDragTargets,
|
|
494
|
-
allDragOutlines,
|
|
495
|
-
clearDragOverrides,
|
|
496
|
-
drag,
|
|
497
|
-
editorSnapping,
|
|
498
|
-
getDragOverrides,
|
|
499
|
-
onDraggingChange,
|
|
500
|
-
onSelect,
|
|
501
|
-
onSnapPointsChange,
|
|
502
|
-
outline,
|
|
503
|
-
scale,
|
|
504
|
-
selected,
|
|
505
|
-
setPropStatuses,
|
|
506
|
-
setDragOverrides,
|
|
507
|
-
snapTargets,
|
|
508
|
-
target,
|
|
509
|
-
]);
|
|
510
|
-
const onDoubleClick = react_1.default.useCallback((event) => {
|
|
511
|
-
if (target === undefined) {
|
|
512
|
-
return;
|
|
513
|
-
}
|
|
514
|
-
if (!onDoubleClickTarget(target, event.button)) {
|
|
515
|
-
return;
|
|
516
|
-
}
|
|
517
|
-
event.preventDefault();
|
|
518
|
-
event.stopPropagation();
|
|
519
|
-
}, [onDoubleClickTarget, target]);
|
|
520
|
-
const onEffectDragOver = react_1.default.useCallback((event) => {
|
|
521
|
-
if (effectDrop === null || !(0, effect_drag_and_drop_1.hasEffectDragType)(event.dataTransfer)) {
|
|
522
|
-
return;
|
|
523
|
-
}
|
|
524
|
-
event.preventDefault();
|
|
525
|
-
event.stopPropagation();
|
|
526
|
-
event.dataTransfer.dropEffect = 'copy';
|
|
527
|
-
setEffectDropHovered(true);
|
|
528
|
-
}, [effectDrop]);
|
|
529
|
-
const onEffectDragLeave = react_1.default.useCallback((event) => {
|
|
530
|
-
if (event.currentTarget.contains(event.relatedTarget)) {
|
|
531
|
-
return;
|
|
532
|
-
}
|
|
533
|
-
setEffectDropHovered(false);
|
|
534
|
-
}, []);
|
|
535
|
-
const onEffectDrop = react_1.default.useCallback(async (event) => {
|
|
536
|
-
if (effectDrop === null || !(0, effect_drag_and_drop_1.hasEffectDragType)(event.dataTransfer)) {
|
|
537
|
-
return;
|
|
538
|
-
}
|
|
539
|
-
const dragData = (0, effect_drag_and_drop_1.getEffectDragData)(event.dataTransfer);
|
|
540
|
-
if (!dragData) {
|
|
541
|
-
if ((0, effect_drag_and_drop_1.hasExplicitEffectDragType)(event.dataTransfer)) {
|
|
542
|
-
event.preventDefault();
|
|
543
|
-
event.stopPropagation();
|
|
544
|
-
setEffectDropHovered(false);
|
|
545
|
-
(0, NotificationCenter_1.showNotification)('Could not read effect drag data', 3000);
|
|
546
|
-
}
|
|
547
|
-
return;
|
|
548
|
-
}
|
|
549
|
-
event.preventDefault();
|
|
550
|
-
event.stopPropagation();
|
|
551
|
-
setEffectDropHovered(false);
|
|
552
|
-
await (0, effect_drag_and_drop_1.addEffectFromDragData)({
|
|
553
|
-
dragData,
|
|
554
|
-
fileName: effectDrop.fileName,
|
|
555
|
-
nodePath: effectDrop.nodePath,
|
|
556
|
-
clientId: effectDrop.clientId,
|
|
557
|
-
});
|
|
558
|
-
}, [effectDrop]);
|
|
559
|
-
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
560
|
-
jsx_runtime_1.jsx("polygon", { ref: polygonRef, points: points, fill: effectDropHovered ? colors_1.TIMELINE_DROP_BLUE_ALPHA_12 : colors_1.TRANSPARENT, stroke: colors_1.BLUE, strokeOpacity: visible || effectDropHovered ? 1 : 0, strokeWidth: 2, vectorEffect: "non-scaling-stroke", pointerEvents: target === undefined ? undefined : 'all', onPointerEnter: () => {
|
|
561
|
-
if (!dragging) {
|
|
562
|
-
onHoverChange(outline.key);
|
|
563
|
-
}
|
|
564
|
-
}, onPointerLeave: () => {
|
|
565
|
-
if (!dragging) {
|
|
566
|
-
onHoverChange(null);
|
|
567
|
-
}
|
|
568
|
-
}, onPointerDown: onPointerDown, onDoubleClick: onDoubleClick, onDragOver: effectDrop === null ? undefined : onEffectDragOver, onDragLeave: effectDrop === null ? undefined : onEffectDragLeave, onDrop: effectDrop === null ? undefined : onEffectDrop }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: polygonRef, getItems: onContextMenuOpen })
|
|
569
|
-
] }));
|
|
570
|
-
};
|
|
571
|
-
const SelectedOutlineScaleEdgeLine = ({ allScaleDragTargets, dragging, edge, outline, onDraggingChange, onContextMenuOpen, onHoverChange, onSelect, target, }) => {
|
|
572
|
-
var _a, _b;
|
|
573
|
-
const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
574
|
-
const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
575
|
-
const scaleDrag = (_a = target === null || target === void 0 ? void 0 : target.scaleDrag) !== null && _a !== void 0 ? _a : null;
|
|
576
|
-
const selected = (_b = target === null || target === void 0 ? void 0 : target.selected) !== null && _b !== void 0 ? _b : false;
|
|
577
|
-
const lineRef = (0, react_1.useRef)(null);
|
|
578
|
-
const edgeInfo = (0, react_1.useMemo)(() => (0, selected_outline_drag_1.getSelectedOutlineScaleEdgeInfo)(outline.points, edge), [edge, outline.points]);
|
|
579
|
-
const onPointerDown = react_1.default.useCallback((event) => {
|
|
580
|
-
if (event.button !== 0 || scaleDrag === null || edgeInfo === null) {
|
|
581
|
-
return;
|
|
582
|
-
}
|
|
583
|
-
event.preventDefault();
|
|
584
|
-
event.stopPropagation();
|
|
585
|
-
const interaction = (0, selected_outline_measurement_1.getOutlineSelectionInteraction)(event);
|
|
586
|
-
const shouldUpdateSelection = !selected || interaction.shiftKey || interaction.toggleKey;
|
|
587
|
-
if (shouldUpdateSelection && target !== undefined) {
|
|
588
|
-
onSelect(target.selection, interaction);
|
|
589
|
-
}
|
|
590
|
-
if (interaction.shiftKey || interaction.toggleKey) {
|
|
591
|
-
return;
|
|
592
|
-
}
|
|
593
|
-
if ((0, focus_inspector_field_1.commitPendingInspectorFields)()) {
|
|
594
|
-
return;
|
|
595
|
-
}
|
|
596
|
-
const startPointer = { x: event.clientX, y: event.clientY };
|
|
597
|
-
const dragStates = (0, selected_outline_drag_1.getSelectedOutlineScaleDragStates)({
|
|
598
|
-
dragTargets: selected ? allScaleDragTargets : [scaleDrag],
|
|
599
|
-
getDragOverrides,
|
|
600
|
-
timelinePosition: (0, imperative_state_1.getCurrentFrame)(),
|
|
601
|
-
});
|
|
602
|
-
let lastValues = new Map();
|
|
603
|
-
let dragStarted = false;
|
|
604
|
-
const onPointerMove = (moveEvent) => {
|
|
605
|
-
moveEvent.preventDefault();
|
|
606
|
-
const delta = {
|
|
607
|
-
x: moveEvent.clientX - startPointer.x,
|
|
608
|
-
y: moveEvent.clientY - startPointer.y,
|
|
609
|
-
};
|
|
610
|
-
if (!dragStarted) {
|
|
611
|
-
if (!(0, selected_outline_drag_1.isSelectedOutlineDragPastThreshold)({
|
|
612
|
-
deltaX: delta.x,
|
|
613
|
-
deltaY: delta.y,
|
|
614
|
-
})) {
|
|
615
|
-
return;
|
|
616
|
-
}
|
|
617
|
-
dragStarted = true;
|
|
618
|
-
onDraggingChange(true);
|
|
619
|
-
(0, ForceSpecificCursor_1.forceSpecificCursor)(edgeInfo.cursor);
|
|
620
|
-
}
|
|
621
|
-
const projectedDelta = (0, selected_outline_measurement_1.dot)(delta, edgeInfo.normal);
|
|
622
|
-
const scaleFactor = Math.max(0.001, 1 + projectedDelta / edgeInfo.extent);
|
|
623
|
-
lastValues = (0, selected_outline_drag_1.getSelectedOutlineScaleDragValues)({
|
|
624
|
-
dragStates,
|
|
625
|
-
axis: edgeInfo.axis,
|
|
626
|
-
scaleFactor,
|
|
627
|
-
});
|
|
628
|
-
for (const dragState of dragStates) {
|
|
629
|
-
const value = lastValues.get(dragState.key);
|
|
630
|
-
if (value === undefined) {
|
|
631
|
-
throw new Error('Expected scale drag value to be available');
|
|
632
|
-
}
|
|
633
|
-
if (dragState.target.propStatus.status === 'keyframed') {
|
|
634
|
-
setDragOverrides(dragState.target.nodePath, selected_outline_types_1.scaleFieldKey, remotion_1.Internals.makeKeyframedDragOverride({
|
|
635
|
-
status: dragState.target.propStatus,
|
|
636
|
-
frame: dragState.sourceFrame,
|
|
637
|
-
value,
|
|
638
|
-
}));
|
|
639
|
-
}
|
|
640
|
-
else {
|
|
641
|
-
setDragOverrides(dragState.target.nodePath, selected_outline_types_1.scaleFieldKey, remotion_1.Internals.makeStaticDragOverride(value));
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
};
|
|
645
|
-
const onPointerUp = () => {
|
|
646
|
-
if (dragStarted) {
|
|
647
|
-
(0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
|
|
648
|
-
onDraggingChange(false);
|
|
649
|
-
}
|
|
650
|
-
const changes = (0, selected_outline_drag_1.getSelectedOutlineScaleDragChanges)({
|
|
651
|
-
dragStates,
|
|
652
|
-
lastValues,
|
|
653
|
-
});
|
|
654
|
-
if (changes.length === 0) {
|
|
655
|
-
(0, selected_outline_drag_1.clearSelectedOutlineScaleDragOverrides)({
|
|
656
|
-
clearDragOverrides,
|
|
657
|
-
dragStates,
|
|
658
|
-
});
|
|
659
|
-
return;
|
|
660
|
-
}
|
|
661
|
-
const staticChanges = changes.filter((change) => change.type === 'static');
|
|
662
|
-
const keyframedChanges = changes.filter((change) => change.type === 'keyframed');
|
|
663
|
-
Promise.all([
|
|
664
|
-
staticChanges.length > 0
|
|
665
|
-
? (0, save_sequence_prop_1.saveSequenceProps)({
|
|
666
|
-
changes: staticChanges,
|
|
667
|
-
addedKeyframes: null,
|
|
668
|
-
movedKeyframes: null,
|
|
669
|
-
setPropStatuses,
|
|
670
|
-
clientId: scaleDrag.clientId,
|
|
671
|
-
undoLabel: changes.length > 1
|
|
672
|
-
? 'Scale selected sequences'
|
|
673
|
-
: 'Scale sequence',
|
|
674
|
-
redoLabel: changes.length > 1
|
|
675
|
-
? 'Scale selected sequences back'
|
|
676
|
-
: 'Scale sequence back',
|
|
677
|
-
})
|
|
678
|
-
: Promise.resolve(),
|
|
679
|
-
(0, call_add_keyframe_1.callAddKeyframes)({
|
|
680
|
-
sequenceKeyframes: keyframedChanges,
|
|
681
|
-
effectKeyframes: [],
|
|
682
|
-
setPropStatuses,
|
|
683
|
-
clientId: scaleDrag.clientId,
|
|
684
|
-
}),
|
|
685
|
-
])
|
|
686
|
-
.catch((err) => {
|
|
687
|
-
(0, NotificationCenter_1.showNotification)(`Could not save sequence props: ${err instanceof Error ? err.message : String(err)}`, 4000);
|
|
688
|
-
})
|
|
689
|
-
.finally(() => {
|
|
690
|
-
(0, selected_outline_drag_1.clearSelectedOutlineScaleDragOverrides)({
|
|
691
|
-
clearDragOverrides,
|
|
692
|
-
dragStates,
|
|
693
|
-
});
|
|
694
|
-
});
|
|
695
|
-
};
|
|
696
|
-
(0, pointer_session_1.startPointerSession)({
|
|
697
|
-
event,
|
|
698
|
-
target: event.currentTarget,
|
|
699
|
-
onMove: onPointerMove,
|
|
700
|
-
onEnd: onPointerUp,
|
|
701
|
-
});
|
|
702
|
-
}, [
|
|
703
|
-
allScaleDragTargets,
|
|
704
|
-
clearDragOverrides,
|
|
705
|
-
edgeInfo,
|
|
706
|
-
getDragOverrides,
|
|
707
|
-
onDraggingChange,
|
|
708
|
-
onSelect,
|
|
709
|
-
scaleDrag,
|
|
710
|
-
selected,
|
|
711
|
-
setPropStatuses,
|
|
712
|
-
setDragOverrides,
|
|
713
|
-
target,
|
|
714
|
-
]);
|
|
715
|
-
if (scaleDrag === null || edgeInfo === null) {
|
|
716
|
-
return null;
|
|
717
|
-
}
|
|
718
|
-
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
719
|
-
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: () => {
|
|
720
|
-
if (!dragging) {
|
|
721
|
-
onHoverChange(outline.key);
|
|
722
|
-
}
|
|
723
|
-
}, onPointerLeave: () => {
|
|
724
|
-
if (!dragging) {
|
|
725
|
-
onHoverChange(null);
|
|
726
|
-
}
|
|
727
|
-
}, onPointerDown: onPointerDown }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: lineRef, getItems: onContextMenuOpen })
|
|
728
|
-
] }));
|
|
729
|
-
};
|
|
730
|
-
const svgPointToClientPoint = (point, rect) => {
|
|
731
|
-
return {
|
|
732
|
-
x: point.x + rect.left,
|
|
733
|
-
y: point.y + rect.top,
|
|
734
|
-
};
|
|
735
|
-
};
|
|
736
|
-
const SelectedOutlineRotationCornerHandle = ({ allRotationDragTargets, corner, dragging, outline, onDraggingChange, onContextMenuOpen, onHoverChange, onSelect, target, }) => {
|
|
737
|
-
var _a, _b;
|
|
738
|
-
const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
739
|
-
const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
740
|
-
const { editorSnapping } = (0, react_1.useContext)(editor_snapping_1.EditorSnappingContext);
|
|
741
|
-
const rotationDrag = (_a = target === null || target === void 0 ? void 0 : target.rotationDrag) !== null && _a !== void 0 ? _a : null;
|
|
742
|
-
const selected = (_b = target === null || target === void 0 ? void 0 : target.selected) !== null && _b !== void 0 ? _b : false;
|
|
743
|
-
const circleRef = (0, react_1.useRef)(null);
|
|
744
|
-
const cornerInfo = (0, react_1.useMemo)(() => (0, selected_outline_measurement_1.getSelectedOutlineRotationCornerInfo)(outline.points, corner), [corner, outline.points]);
|
|
745
|
-
const onPointerDown = react_1.default.useCallback((event) => {
|
|
746
|
-
var _a;
|
|
747
|
-
if (event.button !== 0 || rotationDrag === null) {
|
|
748
|
-
return;
|
|
749
|
-
}
|
|
750
|
-
event.preventDefault();
|
|
751
|
-
event.stopPropagation();
|
|
752
|
-
const svg = event.currentTarget.ownerSVGElement;
|
|
753
|
-
if (svg === null) {
|
|
754
|
-
return;
|
|
755
|
-
}
|
|
756
|
-
const interaction = (0, selected_outline_measurement_1.getOutlineSelectionInteraction)(event);
|
|
757
|
-
const shouldUpdateSelection = !selected || interaction.toggleKey;
|
|
758
|
-
if (shouldUpdateSelection && target !== undefined) {
|
|
759
|
-
onSelect(target.selection, {
|
|
760
|
-
shiftKey: false,
|
|
761
|
-
toggleKey: interaction.toggleKey,
|
|
762
|
-
});
|
|
763
|
-
}
|
|
764
|
-
if (interaction.toggleKey) {
|
|
765
|
-
return;
|
|
766
|
-
}
|
|
767
|
-
if ((0, focus_inspector_field_1.commitPendingInspectorFields)()) {
|
|
768
|
-
return;
|
|
769
|
-
}
|
|
770
|
-
const startPointer = { x: event.clientX, y: event.clientY };
|
|
771
|
-
const svgRect = svg.getBoundingClientRect();
|
|
772
|
-
const center = svgPointToClientPoint((0, selected_outline_measurement_1.getSelectedOutlineRotationPivot)({
|
|
773
|
-
dimensions: outline.dimensions,
|
|
774
|
-
points: (_a = outline.uncroppedPoints) !== null && _a !== void 0 ? _a : outline.points,
|
|
775
|
-
transformOriginValue: rotationDrag.transformOriginValue,
|
|
776
|
-
}), svgRect);
|
|
777
|
-
const dragStates = (0, selected_outline_drag_1.getSelectedOutlineRotationDragStates)({
|
|
778
|
-
dragTargets: selected ? allRotationDragTargets : [rotationDrag],
|
|
779
|
-
getDragOverrides,
|
|
780
|
-
timelinePosition: (0, imperative_state_1.getCurrentFrame)(),
|
|
781
|
-
});
|
|
782
|
-
let previousAngle = (0, selected_outline_measurement_1.getAngleDegrees)(center, {
|
|
783
|
-
x: event.clientX,
|
|
784
|
-
y: event.clientY,
|
|
785
|
-
});
|
|
786
|
-
let accumulatedDelta = 0;
|
|
787
|
-
let rotationLocked = event.shiftKey;
|
|
788
|
-
let lastValues = new Map();
|
|
789
|
-
let dragStarted = false;
|
|
790
|
-
const updateRotationDragOverrides = () => {
|
|
791
|
-
const rotationDeltaDegrees = rotationLocked && editorSnapping
|
|
792
|
-
? (0, selected_outline_drag_1.snapSelectedOutlineRotationDeltaDegrees)({
|
|
793
|
-
dragStates,
|
|
794
|
-
rotationDeltaDegrees: accumulatedDelta,
|
|
795
|
-
})
|
|
796
|
-
: accumulatedDelta;
|
|
797
|
-
lastValues = (0, selected_outline_drag_1.getSelectedOutlineRotationDragValues)({
|
|
798
|
-
dragStates,
|
|
799
|
-
rotationDeltaDegrees,
|
|
800
|
-
});
|
|
801
|
-
(0, ForceSpecificCursor_1.forceSpecificCursor)((0, selected_outline_measurement_1.getRotationCursor)(cornerInfo.cursorDegrees + rotationDeltaDegrees));
|
|
802
|
-
for (const dragState of dragStates) {
|
|
803
|
-
const value = lastValues.get(dragState.key);
|
|
804
|
-
if (value === undefined) {
|
|
805
|
-
throw new Error('Expected rotation drag value to be available');
|
|
806
|
-
}
|
|
807
|
-
if (dragState.target.propStatus.status === 'keyframed') {
|
|
808
|
-
setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeKeyframedDragOverride({
|
|
809
|
-
status: dragState.target.propStatus,
|
|
810
|
-
frame: dragState.sourceFrame,
|
|
811
|
-
value,
|
|
812
|
-
}));
|
|
813
|
-
}
|
|
814
|
-
else {
|
|
815
|
-
setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeStaticDragOverride(value));
|
|
816
|
-
}
|
|
817
|
-
}
|
|
818
|
-
};
|
|
819
|
-
const onPointerMove = (moveEvent) => {
|
|
820
|
-
moveEvent.preventDefault();
|
|
821
|
-
const screenDeltaX = moveEvent.clientX - startPointer.x;
|
|
822
|
-
const screenDeltaY = moveEvent.clientY - startPointer.y;
|
|
823
|
-
if (!dragStarted) {
|
|
824
|
-
if (!(0, selected_outline_drag_1.isSelectedOutlineDragPastThreshold)({
|
|
825
|
-
deltaX: screenDeltaX,
|
|
826
|
-
deltaY: screenDeltaY,
|
|
827
|
-
})) {
|
|
828
|
-
return;
|
|
829
|
-
}
|
|
830
|
-
dragStarted = true;
|
|
831
|
-
onDraggingChange(true);
|
|
832
|
-
}
|
|
833
|
-
const nextAngle = (0, selected_outline_measurement_1.getAngleDegrees)(center, {
|
|
834
|
-
x: moveEvent.clientX,
|
|
835
|
-
y: moveEvent.clientY,
|
|
836
|
-
});
|
|
837
|
-
accumulatedDelta += (0, selected_outline_measurement_1.getSelectedOutlineRotationDeltaDegrees)({
|
|
838
|
-
from: previousAngle,
|
|
839
|
-
to: nextAngle,
|
|
840
|
-
});
|
|
841
|
-
previousAngle = nextAngle;
|
|
842
|
-
rotationLocked = moveEvent.shiftKey;
|
|
843
|
-
updateRotationDragOverrides();
|
|
844
|
-
};
|
|
845
|
-
const onKeyChange = (keyEvent) => {
|
|
846
|
-
if (keyEvent.key !== 'Shift') {
|
|
847
|
-
return;
|
|
848
|
-
}
|
|
849
|
-
const nextRotationLocked = keyEvent.type === 'keydown';
|
|
850
|
-
if (nextRotationLocked === rotationLocked) {
|
|
851
|
-
return;
|
|
852
|
-
}
|
|
853
|
-
rotationLocked = nextRotationLocked;
|
|
854
|
-
if (dragStarted) {
|
|
855
|
-
updateRotationDragOverrides();
|
|
856
|
-
}
|
|
857
|
-
};
|
|
858
|
-
const onPointerUp = () => {
|
|
859
|
-
window.removeEventListener('keydown', onKeyChange);
|
|
860
|
-
window.removeEventListener('keyup', onKeyChange);
|
|
861
|
-
if (dragStarted) {
|
|
862
|
-
(0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
|
|
863
|
-
onDraggingChange(false);
|
|
864
|
-
}
|
|
865
|
-
const changes = (0, selected_outline_drag_1.getSelectedOutlineRotationDragChanges)({
|
|
866
|
-
dragStates,
|
|
867
|
-
lastValues,
|
|
868
|
-
});
|
|
869
|
-
if (changes.length === 0) {
|
|
870
|
-
(0, selected_outline_drag_1.clearSelectedOutlineRotationDragOverrides)({
|
|
871
|
-
clearDragOverrides,
|
|
872
|
-
dragStates,
|
|
873
|
-
});
|
|
874
|
-
return;
|
|
875
|
-
}
|
|
876
|
-
const staticChanges = changes.filter((change) => change.type === 'static');
|
|
877
|
-
const keyframedChanges = changes.filter((change) => change.type === 'keyframed');
|
|
878
|
-
Promise.all([
|
|
879
|
-
staticChanges.length > 0
|
|
880
|
-
? (0, save_sequence_prop_1.saveSequenceProps)({
|
|
881
|
-
changes: staticChanges,
|
|
882
|
-
addedKeyframes: null,
|
|
883
|
-
movedKeyframes: null,
|
|
884
|
-
setPropStatuses,
|
|
885
|
-
clientId: rotationDrag.clientId,
|
|
886
|
-
undoLabel: changes.length > 1
|
|
887
|
-
? 'Rotate selected sequences'
|
|
888
|
-
: 'Rotate sequence',
|
|
889
|
-
redoLabel: changes.length > 1
|
|
890
|
-
? 'Rotate selected sequences back'
|
|
891
|
-
: 'Rotate sequence back',
|
|
892
|
-
})
|
|
893
|
-
: Promise.resolve(),
|
|
894
|
-
(0, call_add_keyframe_1.callAddKeyframes)({
|
|
895
|
-
sequenceKeyframes: keyframedChanges,
|
|
896
|
-
effectKeyframes: [],
|
|
897
|
-
setPropStatuses,
|
|
898
|
-
clientId: rotationDrag.clientId,
|
|
899
|
-
}),
|
|
900
|
-
])
|
|
901
|
-
.catch((err) => {
|
|
902
|
-
(0, NotificationCenter_1.showNotification)(`Could not save sequence props: ${err instanceof Error ? err.message : String(err)}`, 4000);
|
|
903
|
-
})
|
|
904
|
-
.finally(() => {
|
|
905
|
-
(0, selected_outline_drag_1.clearSelectedOutlineRotationDragOverrides)({
|
|
906
|
-
clearDragOverrides,
|
|
907
|
-
dragStates,
|
|
908
|
-
});
|
|
909
|
-
});
|
|
910
|
-
};
|
|
911
|
-
(0, pointer_session_1.startPointerSession)({
|
|
912
|
-
event,
|
|
913
|
-
target: event.currentTarget,
|
|
914
|
-
onMove: onPointerMove,
|
|
915
|
-
onEnd: onPointerUp,
|
|
916
|
-
});
|
|
917
|
-
window.addEventListener('keydown', onKeyChange);
|
|
918
|
-
window.addEventListener('keyup', onKeyChange);
|
|
919
|
-
}, [
|
|
920
|
-
allRotationDragTargets,
|
|
921
|
-
clearDragOverrides,
|
|
922
|
-
cornerInfo,
|
|
923
|
-
editorSnapping,
|
|
924
|
-
getDragOverrides,
|
|
925
|
-
onDraggingChange,
|
|
926
|
-
outline.dimensions,
|
|
927
|
-
outline.points,
|
|
928
|
-
outline.uncroppedPoints,
|
|
929
|
-
onSelect,
|
|
930
|
-
rotationDrag,
|
|
931
|
-
selected,
|
|
932
|
-
setPropStatuses,
|
|
933
|
-
setDragOverrides,
|
|
934
|
-
target,
|
|
935
|
-
]);
|
|
936
|
-
if (rotationDrag === null) {
|
|
937
|
-
return null;
|
|
938
|
-
}
|
|
939
|
-
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
940
|
-
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: () => {
|
|
941
|
-
if (!dragging) {
|
|
942
|
-
onHoverChange(outline.key);
|
|
943
|
-
}
|
|
944
|
-
}, onPointerLeave: () => {
|
|
945
|
-
if (!dragging) {
|
|
946
|
-
onHoverChange(null);
|
|
947
|
-
}
|
|
948
|
-
}, onPointerDown: onPointerDown }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: circleRef, getItems: onContextMenuOpen })
|
|
949
|
-
] }));
|
|
950
|
-
};
|
|
951
|
-
const SelectedOutlineElement = ({ allDragTargets, allDragOutlines, allRotationDragTargets, allScaleDragTargets, dragging, hovered, outline, onDraggingChange, onHoverChange, onSnapPointsChange, onSelect, scale, snapTargets, target, }) => {
|
|
64
|
+
const SelectedOutlineElementUnmemoized = ({ compositionHeight, compositionWidth, dragging, getAllDragOutlines, getAllDragTargets, getAllRotationDragTargets, getAllScaleDragTargets, getLatestTargetByKey, layoutTarget, outline, onDraggingChange, onSnapPointsChange, onSelect, scale, }) => {
|
|
65
|
+
var _a;
|
|
952
66
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
67
|
+
const canConfigureApps = (0, use_default_editor_info_1.canUseEditorPicker)(previewServerState.type === 'connected');
|
|
68
|
+
const editorInfo = (0, use_default_editor_info_1.useDefaultEditorInfo)(canConfigureApps);
|
|
69
|
+
const codingAgentInfo = (0, use_default_editor_info_1.useDefaultCodingAgentInfo)(canConfigureApps);
|
|
953
70
|
const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
954
71
|
const updateResolvedStackTrace = (0, react_1.useContext)(remotion_1.Internals.SequenceStackTracesUpdateContext);
|
|
955
72
|
const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
|
|
@@ -957,6 +74,42 @@ const SelectedOutlineElement = ({ allDragTargets, allDragOutlines, allRotationDr
|
|
|
957
74
|
const selectComposition = (0, InitialCompositionLoader_1.useSelectComposition)();
|
|
958
75
|
const { compositions } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
959
76
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
77
|
+
const setHoveredSequence = (0, timeline_sequence_hover_1.useSetTimelineSequenceHover)();
|
|
78
|
+
const targetRef = (0, react_1.useRef)(layoutTarget);
|
|
79
|
+
(0, react_1.useLayoutEffect)(() => {
|
|
80
|
+
targetRef.current = layoutTarget;
|
|
81
|
+
}, [layoutTarget]);
|
|
82
|
+
const getTarget = react_1.default.useCallback(() => {
|
|
83
|
+
const currentTarget = targetRef.current;
|
|
84
|
+
if (currentTarget === undefined) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
return getLatestTargetByKey(currentTarget.key);
|
|
88
|
+
}, [getLatestTargetByKey]);
|
|
89
|
+
const getLayoutTarget = react_1.default.useCallback(() => targetRef.current, []);
|
|
90
|
+
const hoveredNodePathKey = (0, react_1.useMemo)(() => layoutTarget === undefined
|
|
91
|
+
? null
|
|
92
|
+
: (0, timeline_node_path_key_1.timelineSequenceNodePathToKey)(layoutTarget.nodePathInfo.sequenceSubscriptionKey), [layoutTarget]);
|
|
93
|
+
const hovered = (0, timeline_sequence_hover_1.useIsTimelineSequenceHovered)(hoveredNodePathKey);
|
|
94
|
+
const controlTarget = layoutTarget !== undefined && (layoutTarget.containsSelection || hovered)
|
|
95
|
+
? getLatestTargetByKey(layoutTarget.key)
|
|
96
|
+
: undefined;
|
|
97
|
+
const onHoverChange = react_1.default.useCallback((key) => {
|
|
98
|
+
setHoveredSequence((currentHover) => {
|
|
99
|
+
if (key !== null) {
|
|
100
|
+
const hoverTarget = targetRef.current;
|
|
101
|
+
if (hoverTarget === undefined || hoverTarget.key !== key) {
|
|
102
|
+
return currentHover;
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
key,
|
|
106
|
+
nodePathKey: (0, timeline_node_path_key_1.timelineSequenceNodePathToKey)(hoverTarget.nodePathInfo.sequenceSubscriptionKey),
|
|
107
|
+
source: 'canvas',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return (currentHover === null || currentHover === void 0 ? void 0 : currentHover.source) === 'canvas' ? null : currentHover;
|
|
111
|
+
});
|
|
112
|
+
}, [setHoveredSequence]);
|
|
960
113
|
const resolveOriginalLocation = react_1.default.useCallback(async (resolveTarget) => {
|
|
961
114
|
const stack = resolveTarget.sequence.getStack();
|
|
962
115
|
if (!stack) {
|
|
@@ -1008,52 +161,65 @@ const SelectedOutlineElement = ({ allDragTargets, allDragOutlines, allRotationDr
|
|
|
1008
161
|
selectComposition,
|
|
1009
162
|
]);
|
|
1010
163
|
const onContextMenuOpen = react_1.default.useCallback(async () => {
|
|
1011
|
-
|
|
164
|
+
const contextMenuTarget = getTarget();
|
|
165
|
+
if (contextMenuTarget === undefined) {
|
|
1012
166
|
return false;
|
|
1013
167
|
}
|
|
1014
|
-
if (!
|
|
1015
|
-
onSelect(
|
|
168
|
+
if (!contextMenuTarget.selected) {
|
|
169
|
+
onSelect(contextMenuTarget.selection, {
|
|
170
|
+
shiftKey: false,
|
|
171
|
+
toggleKey: false,
|
|
172
|
+
});
|
|
1016
173
|
}
|
|
1017
|
-
const originalLocation = await resolveOriginalLocation(
|
|
1018
|
-
const
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
const mediaSrc = target.sequence.type === 'audio' ||
|
|
1024
|
-
target.sequence.type === 'video' ||
|
|
1025
|
-
target.sequence.type === 'image'
|
|
1026
|
-
? target.sequence.src
|
|
174
|
+
const originalLocation = await resolveOriginalLocation(contextMenuTarget);
|
|
175
|
+
const nodePath = contextMenuTarget.nodePathInfo.sequenceSubscriptionKey;
|
|
176
|
+
const mediaSrc = contextMenuTarget.sequence.type === 'audio' ||
|
|
177
|
+
contextMenuTarget.sequence.type === 'video' ||
|
|
178
|
+
contextMenuTarget.sequence.type === 'image'
|
|
179
|
+
? contextMenuTarget.sequence.src
|
|
1027
180
|
: null;
|
|
1028
181
|
const assetLinkInfo = mediaSrc ? (0, timeline_asset_link_1.getTimelineAssetLinkInfo)(mediaSrc) : null;
|
|
1029
182
|
const canOpenInEditor = Boolean(window.remotion_editorName && originalLocation);
|
|
1030
183
|
const sourceEditingEnabled = (0, interactivity_enabled_1.isStudioInteractivityEnabled)();
|
|
1031
|
-
const disableInteractivityDisabled = !sourceEditingEnabled || !
|
|
184
|
+
const disableInteractivityDisabled = !sourceEditingEnabled || !contextMenuTarget.sequence.showInTimeline;
|
|
1032
185
|
const sourceEditDisabled = !sourceEditingEnabled ||
|
|
1033
|
-
!
|
|
186
|
+
!contextMenuTarget.sequence.controls ||
|
|
1034
187
|
!nodePath.absolutePath;
|
|
1035
|
-
const
|
|
188
|
+
const isProgrammaticallyDuplicated = contextMenuTarget.nodePathInfo.numberOfSequencesWithThisNodePath > 1;
|
|
189
|
+
const canAddEffect = contextMenuTarget.nodePathInfo.supportsEffects &&
|
|
1036
190
|
!sourceEditDisabled &&
|
|
1037
191
|
previewServerState.type === 'connected';
|
|
1038
|
-
const canCrop =
|
|
192
|
+
const canCrop = contextMenuTarget.canCrop && !sourceEditDisabled;
|
|
1039
193
|
return (0, get_sequence_context_menu_items_1.getSequenceContextMenuItems)({
|
|
1040
194
|
assetLinkInfo,
|
|
1041
195
|
canOpenInEditor,
|
|
196
|
+
codingAgentInfo,
|
|
1042
197
|
deleteDisabled: sourceEditDisabled,
|
|
1043
198
|
disableInteractivityDisabled,
|
|
1044
|
-
duplicateDisabled: sourceEditDisabled,
|
|
1045
|
-
editorInfo
|
|
1046
|
-
fileLocation,
|
|
199
|
+
duplicateDisabled: sourceEditDisabled || isProgrammaticallyDuplicated,
|
|
200
|
+
editorInfo,
|
|
1047
201
|
includeSourceEditItems: sourceEditingEnabled,
|
|
202
|
+
isProgrammaticallyDuplicated,
|
|
203
|
+
onConfigureApps: canConfigureApps
|
|
204
|
+
? () => {
|
|
205
|
+
var _a;
|
|
206
|
+
var _b;
|
|
207
|
+
setSelectedModal({
|
|
208
|
+
type: 'settings',
|
|
209
|
+
initialTab: 'apps',
|
|
210
|
+
initialPublicLicenseKey: (_b = (_a = window.remotion_renderDefaults) === null || _a === void 0 ? void 0 : _a.publicLicenseKey) !== null && _b !== void 0 ? _b : null,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
: null,
|
|
1048
214
|
onDeleteSequenceFromSource: async () => {
|
|
1049
215
|
if (sourceEditDisabled || previewServerState.type !== 'connected') {
|
|
1050
216
|
return;
|
|
1051
217
|
}
|
|
1052
|
-
if (
|
|
218
|
+
if (contextMenuTarget.nodePathInfo.numberOfSequencesWithThisNodePath > 1) {
|
|
1053
219
|
const shouldDelete = await confirm({
|
|
1054
220
|
title: 'Delete sequence?',
|
|
1055
221
|
message: 'This sequence is programmatically duplicated ' +
|
|
1056
|
-
|
|
222
|
+
contextMenuTarget.nodePathInfo.numberOfSequencesWithThisNodePath +
|
|
1057
223
|
' times in the code. Deleting removes all instances. Continue?',
|
|
1058
224
|
confirmLabel: 'Delete',
|
|
1059
225
|
});
|
|
@@ -1094,22 +260,33 @@ const SelectedOutlineElement = ({ allDragTargets, allDragOutlines, allRotationDr
|
|
|
1094
260
|
if (sourceEditDisabled) {
|
|
1095
261
|
return;
|
|
1096
262
|
}
|
|
1097
|
-
(0, duplicate_selected_timeline_item_1.duplicateSequencesFromSource)([
|
|
263
|
+
(0, duplicate_selected_timeline_item_1.duplicateSequencesFromSource)([contextMenuTarget.nodePathInfo], confirm).catch(() => undefined);
|
|
264
|
+
},
|
|
265
|
+
openInCodingAgent: (codingAgentId, codingAgentName, contextForAgents) => {
|
|
266
|
+
(0, open_in_editor_1.openInCodingAgent)(codingAgentId, contextForAgents)
|
|
267
|
+
.then((response) => {
|
|
268
|
+
if (!response.success) {
|
|
269
|
+
(0, NotificationCenter_1.showNotification)(`Could not open ${codingAgentName}`, 2000);
|
|
270
|
+
}
|
|
271
|
+
})
|
|
272
|
+
.catch((err) => {
|
|
273
|
+
(0, NotificationCenter_1.showNotification)(err.message, 2000);
|
|
274
|
+
});
|
|
1098
275
|
},
|
|
1099
|
-
openInEditor: () => {
|
|
276
|
+
openInEditor: (editorId) => {
|
|
1100
277
|
if (!originalLocation) {
|
|
1101
278
|
return;
|
|
1102
279
|
}
|
|
1103
|
-
(0, open_in_editor_1.openOriginalPositionInEditor)(originalLocation,
|
|
280
|
+
(0, open_in_editor_1.openOriginalPositionInEditor)(originalLocation, editorId).catch((err) => {
|
|
1104
281
|
(0, NotificationCenter_1.showNotification)(err.message, 2000);
|
|
1105
282
|
});
|
|
1106
283
|
},
|
|
1107
284
|
originalLocation,
|
|
1108
285
|
selectAsset,
|
|
1109
|
-
sequence:
|
|
286
|
+
sequence: contextMenuTarget.sequence,
|
|
1110
287
|
sourceActions: sourceEditingEnabled
|
|
1111
288
|
? [
|
|
1112
|
-
...(
|
|
289
|
+
...(contextMenuTarget.nodePathInfo.supportsEffects
|
|
1113
290
|
? [
|
|
1114
291
|
{
|
|
1115
292
|
type: 'item',
|
|
@@ -1140,7 +317,7 @@ const SelectedOutlineElement = ({ allDragTargets, allDragOutlines, allRotationDr
|
|
|
1140
317
|
type: 'item',
|
|
1141
318
|
id: 'crop',
|
|
1142
319
|
keyHint: null,
|
|
1143
|
-
label: 'Crop',
|
|
320
|
+
label: isProgrammaticallyDuplicated ? 'Crop all' : 'Crop',
|
|
1144
321
|
leftItem: null,
|
|
1145
322
|
disabled: !canCrop,
|
|
1146
323
|
onClick: () => {
|
|
@@ -1150,7 +327,7 @@ const SelectedOutlineElement = ({ allDragTargets, allDragOutlines, allRotationDr
|
|
|
1150
327
|
onSelect({
|
|
1151
328
|
type: 'sequence-prop',
|
|
1152
329
|
nodePathInfo: {
|
|
1153
|
-
...
|
|
330
|
+
...contextMenuTarget.nodePathInfo,
|
|
1154
331
|
auxiliaryKeys: ['controls', selected_outline_types_1.cropFieldKeys.left],
|
|
1155
332
|
},
|
|
1156
333
|
key: selected_outline_types_1.cropFieldKeys.left,
|
|
@@ -1168,20 +345,25 @@ const SelectedOutlineElement = ({ allDragTargets, allDragOutlines, allRotationDr
|
|
|
1168
345
|
: [],
|
|
1169
346
|
});
|
|
1170
347
|
}, [
|
|
348
|
+
canConfigureApps,
|
|
349
|
+
codingAgentInfo,
|
|
1171
350
|
confirm,
|
|
351
|
+
editorInfo,
|
|
352
|
+
getTarget,
|
|
1172
353
|
onSelect,
|
|
1173
354
|
previewServerState,
|
|
1174
355
|
resolveOriginalLocation,
|
|
1175
356
|
selectAsset,
|
|
1176
357
|
setSelectedModal,
|
|
1177
358
|
setPropStatuses,
|
|
1178
|
-
target,
|
|
1179
359
|
]);
|
|
1180
360
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
1181
|
-
jsx_runtime_1.jsx(SelectedOutlinePolygon, {
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
361
|
+
jsx_runtime_1.jsx(SelectedOutlinePolygon_1.SelectedOutlinePolygon, { compositionHeight: compositionHeight, compositionWidth: compositionWidth, dragging: dragging, getAllDragOutlines: getAllDragOutlines, getAllDragTargets: getAllDragTargets, getLayoutTarget: getLayoutTarget, getTarget: getTarget, hasTarget: layoutTarget !== undefined, hovered: hovered, outline: outline, onContextMenuOpen: onContextMenuOpen, onDraggingChange: onDraggingChange, onHoverChange: onHoverChange, onSnapPointsChange: onSnapPointsChange, onSelect: onSelect, onDoubleClickTarget: onDoubleClickTarget, scale: scale, showSelectedOutline: (_a = layoutTarget === null || layoutTarget === void 0 ? void 0 : layoutTarget.showSelectedOutline) !== null && _a !== void 0 ? _a : false }), jsx_runtime_1.jsx(SelectedOutlineCropControls_1.SelectedOutlineCropControls, { outline: outline, onDraggingChange: onDraggingChange, target: controlTarget }), (controlTarget === null || controlTarget === void 0 ? void 0 : controlTarget.cropDrag) === null &&
|
|
362
|
+
((layoutTarget === null || layoutTarget === void 0 ? void 0 : layoutTarget.containsSelection) || hovered)
|
|
363
|
+
? ['top', 'right', 'bottom', 'left'].map((edge) => (jsx_runtime_1.jsx(SelectedOutlineScaleEdgeLine_1.SelectedOutlineScaleEdgeLine, { getAllScaleDragTargets: getAllScaleDragTargets, dragging: dragging, edge: edge, outline: outline, onContextMenuOpen: onContextMenuOpen, onDraggingChange: onDraggingChange, onHoverChange: onHoverChange, onSelect: onSelect, target: controlTarget }, edge)))
|
|
364
|
+
: null, (controlTarget === null || controlTarget === void 0 ? void 0 : controlTarget.cropDrag) === null &&
|
|
365
|
+
((layoutTarget === null || layoutTarget === void 0 ? void 0 : layoutTarget.containsSelection) || hovered)
|
|
366
|
+
? ['top-left', 'top-right', 'bottom-right', 'bottom-left'].map((corner) => (jsx_runtime_1.jsx(SelectedOutlineRotationCornerHandle_1.SelectedOutlineRotationCornerHandle, { getAllRotationDragTargets: getAllRotationDragTargets, corner: corner, dragging: dragging, outline: outline, onContextMenuOpen: onContextMenuOpen, onDraggingChange: onDraggingChange, onHoverChange: onHoverChange, onSelect: onSelect, target: controlTarget }, corner)))
|
|
1185
367
|
: null] }));
|
|
1186
368
|
};
|
|
1187
|
-
exports.SelectedOutlineElement =
|
|
369
|
+
exports.SelectedOutlineElement = react_1.default.memo(SelectedOutlineElementUnmemoized);
|