@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.
Files changed (119) hide show
  1. package/dist/api/copy-render-output-to-asset.d.ts +4 -0
  2. package/dist/api/copy-render-output-to-asset.js +11 -0
  3. package/dist/components/AssetSelector.js +19 -4
  4. package/dist/components/AssetSelectorItem.js +2 -2
  5. package/dist/components/CodingAgentIcon.d.ts +4 -0
  6. package/dist/components/CodingAgentIcon.js +17 -0
  7. package/dist/components/ConfigureDefaultEditorModal.d.ts +1 -3
  8. package/dist/components/ConfigureDefaultEditorModal.js +67 -77
  9. package/dist/components/ConfigureLicenseModal.d.ts +1 -4
  10. package/dist/components/ConfigureLicenseModal.js +89 -81
  11. package/dist/components/ContextMenu.js +10 -8
  12. package/dist/components/EditorContexts.js +6 -5
  13. package/dist/components/ExpandedTracksProvider.js +10 -53
  14. package/dist/components/InspectorLocationCopy.js +8 -8
  15. package/dist/components/InspectorOpenInEditor.d.ts +1 -0
  16. package/dist/components/InspectorOpenInEditor.js +39 -49
  17. package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -0
  18. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +22 -4
  19. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +1 -1
  20. package/dist/components/Menu/MenuSectionHeader.d.ts +4 -0
  21. package/dist/components/Menu/MenuSectionHeader.js +20 -0
  22. package/dist/components/Menu/SubMenu.js +13 -2
  23. package/dist/components/Menu/menu-tree-context.d.ts +3 -0
  24. package/dist/components/Menu/menu-tree-context.js +13 -0
  25. package/dist/components/NewComposition/ComboBox.d.ts +6 -1
  26. package/dist/components/NewComposition/MenuContent.js +27 -19
  27. package/dist/components/NewComposition/menu-typeahead.js +2 -2
  28. package/dist/components/Preview.js +29 -4
  29. package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.d.ts +1 -0
  30. package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +2 -2
  31. package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +3 -3
  32. package/dist/components/RenderModal/SchemaEditor/ZodSwitch.js +1 -1
  33. package/dist/components/RenderModal/ServerRenderModal.js +4 -0
  34. package/dist/components/RenderQueue/RenderQueueItem.js +8 -2
  35. package/dist/components/RenderQueue/actions.d.ts +4 -2
  36. package/dist/components/RenderQueue/actions.js +4 -2
  37. package/dist/components/RenderQueue/index.js +3 -4
  38. package/dist/components/RenderQueue/use-render-output-file-drag.d.ts +8 -0
  39. package/dist/components/RenderQueue/use-render-output-file-drag.js +121 -0
  40. package/dist/components/SegmentedControl.js +0 -1
  41. package/dist/components/SelectedOutlineElement.d.ts +14 -17
  42. package/dist/components/SelectedOutlineElement.js +112 -930
  43. package/dist/components/SelectedOutlineKeyboardControls.d.ts +7 -0
  44. package/dist/components/SelectedOutlineKeyboardControls.js +261 -0
  45. package/dist/components/SelectedOutlineOverlay.d.ts +6 -13
  46. package/dist/components/SelectedOutlineOverlay.js +349 -864
  47. package/dist/components/SelectedOutlinePolygon.d.ts +25 -0
  48. package/dist/components/SelectedOutlinePolygon.js +359 -0
  49. package/dist/components/SelectedOutlineRenderer.d.ts +18 -0
  50. package/dist/components/SelectedOutlineRenderer.js +208 -0
  51. package/dist/components/SelectedOutlineRotationCornerHandle.d.ts +16 -0
  52. package/dist/components/SelectedOutlineRotationCornerHandle.js +269 -0
  53. package/dist/components/SelectedOutlineScaleEdgeLine.d.ts +16 -0
  54. package/dist/components/SelectedOutlineScaleEdgeLine.js +211 -0
  55. package/dist/components/SelectedOutlineSnapIndicators.d.ts +9 -0
  56. package/dist/components/SelectedOutlineSnapIndicators.js +29 -0
  57. package/dist/components/SelectedOutlineTransformOriginHandle.d.ts +9 -0
  58. package/dist/components/SelectedOutlineTransformOriginHandle.js +286 -0
  59. package/dist/components/SelectedOutlineUvControls.d.ts +3 -9
  60. package/dist/components/SelectedOutlineUvControls.js +57 -12
  61. package/dist/components/SettingsContext.d.ts +15 -0
  62. package/dist/components/SettingsContext.js +116 -0
  63. package/dist/components/SettingsModal.js +10 -4
  64. package/dist/components/SettingsModalFooter.d.ts +1 -3
  65. package/dist/components/SettingsModalFooter.js +4 -6
  66. package/dist/components/ShowOutlinesProvider.js +2 -3
  67. package/dist/components/Timeline/EasingEditorModal.js +66 -22
  68. package/dist/components/Timeline/Timeline.js +22 -5
  69. package/dist/components/Timeline/TimelineDuplicateCount.d.ts +4 -0
  70. package/dist/components/Timeline/TimelineDuplicateCount.js +28 -0
  71. package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +3 -23
  72. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.d.ts +4 -2
  73. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +11 -1
  74. package/dist/components/Timeline/TimelineSequence.js +28 -25
  75. package/dist/components/Timeline/TimelineSequenceItem.js +49 -27
  76. package/dist/components/Timeline/TimelineTrack.js +2 -1
  77. package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +6 -3
  78. package/dist/components/Timeline/get-sequence-context-menu-items.js +58 -53
  79. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +36 -4
  80. package/dist/components/Timeline/{use-open-sequence-in-editor.d.ts → use-open-sequence-in-apps.d.ts} +4 -1
  81. package/dist/components/Timeline/{use-open-sequence-in-editor.js → use-open-sequence-in-apps.js} +20 -4
  82. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +4 -0
  83. package/dist/components/Timeline/use-timeline-expanded-tree.js +45 -1
  84. package/dist/components/get-open-in-menu-items.d.ts +12 -0
  85. package/dist/components/get-open-in-menu-items.js +83 -0
  86. package/dist/components/selected-outline-measurement.d.ts +2 -2
  87. package/dist/components/selected-outline-order.d.ts +12 -0
  88. package/dist/components/selected-outline-order.js +251 -0
  89. package/dist/components/selected-outline-types.d.ts +9 -10
  90. package/dist/components/svg-point-to-client-point.d.ts +2 -0
  91. package/dist/components/svg-point-to-client-point.js +10 -0
  92. package/dist/components/use-auto-save-config.d.ts +8 -0
  93. package/dist/components/use-auto-save-config.js +74 -0
  94. package/dist/components/use-default-editor-info.d.ts +1 -0
  95. package/dist/components/use-default-editor-info.js +10 -30
  96. package/dist/esm/{chunk-jefhcs5z.js → chunk-fgedsvhb.js} +1 -2
  97. package/dist/esm/{chunk-b49ec3nz.js → chunk-ptnd65a9.js} +10602 -9364
  98. package/dist/esm/internals.mjs +10601 -9363
  99. package/dist/esm/previewEntry.mjs +10462 -9224
  100. package/dist/esm/renderEntry.mjs +2 -2
  101. package/dist/helpers/are-sequence-node-path-infos-equal.d.ts +2 -0
  102. package/dist/helpers/are-sequence-node-path-infos-equal.js +27 -0
  103. package/dist/helpers/calculate-timeline.js +3 -3
  104. package/dist/helpers/client-id.js +8 -1
  105. package/dist/helpers/format-file-location.d.ts +1 -1
  106. package/dist/helpers/format-file-location.js +3 -3
  107. package/dist/helpers/migrate-expanded-tracks-for-subscription-key.js +3 -3
  108. package/dist/helpers/open-in-editor.d.ts +1 -0
  109. package/dist/helpers/open-in-editor.js +5 -1
  110. package/dist/helpers/studio-runtime-config.js +3 -0
  111. package/dist/helpers/timeline-node-path-key.d.ts +2 -0
  112. package/dist/helpers/timeline-node-path-key.js +3 -1
  113. package/dist/helpers/use-asset-drag-events.d.ts +2 -1
  114. package/dist/helpers/use-asset-drag-events.js +14 -6
  115. package/dist/helpers/use-menu-structure.js +2 -2
  116. package/dist/helpers/use-runtime-values.d.ts +1 -3
  117. package/dist/state/timeline-sequence-hover.d.ts +9 -3
  118. package/dist/state/timeline-sequence-hover.js +63 -12
  119. package/package.json +12 -12
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SelectedOutlineRotationCornerHandle = void 0;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const react_1 = __importStar(require("react"));
39
+ const remotion_1 = require("remotion");
40
+ const colors_1 = require("../helpers/colors");
41
+ const pointer_session_1 = require("../helpers/pointer-session");
42
+ const editor_snapping_1 = require("../state/editor-snapping");
43
+ const ContextMenu_1 = require("./ContextMenu");
44
+ const ForceSpecificCursor_1 = require("./ForceSpecificCursor");
45
+ const NotificationCenter_1 = require("./Notifications/NotificationCenter");
46
+ const selected_outline_drag_1 = require("./selected-outline-drag");
47
+ const selected_outline_measurement_1 = require("./selected-outline-measurement");
48
+ const selected_outline_types_1 = require("./selected-outline-types");
49
+ const svg_point_to_client_point_1 = require("./svg-point-to-client-point");
50
+ const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
51
+ const focus_inspector_field_1 = require("./Timeline/focus-inspector-field");
52
+ const imperative_state_1 = require("./Timeline/imperative-state");
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;
56
+ const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
57
+ const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
58
+ const { editorSnapping } = (0, react_1.useContext)(editor_snapping_1.EditorSnappingContext);
59
+ const rotationDrag = (_a = target === null || target === void 0 ? void 0 : target.rotationDrag) !== null && _a !== void 0 ? _a : null;
60
+ const selected = (_b = target === null || target === void 0 ? void 0 : target.selected) !== null && _b !== void 0 ? _b : false;
61
+ const circleRef = (0, react_1.useRef)(null);
62
+ const cornerInfo = (0, react_1.useMemo)(() => (0, selected_outline_measurement_1.getSelectedOutlineRotationCornerInfo)(outline.points, corner), [corner, outline.points]);
63
+ const onPointerDown = react_1.default.useCallback((event) => {
64
+ var _a;
65
+ if (event.button !== 0 || rotationDrag === null) {
66
+ return;
67
+ }
68
+ event.preventDefault();
69
+ event.stopPropagation();
70
+ const svg = event.currentTarget.ownerSVGElement;
71
+ if (svg === null) {
72
+ return;
73
+ }
74
+ const interaction = (0, selected_outline_measurement_1.getOutlineSelectionInteraction)(event);
75
+ const shouldUpdateSelection = !selected || interaction.toggleKey;
76
+ if (shouldUpdateSelection && target !== undefined) {
77
+ onSelect(target.selection, {
78
+ shiftKey: false,
79
+ toggleKey: interaction.toggleKey,
80
+ });
81
+ }
82
+ if (interaction.toggleKey) {
83
+ return;
84
+ }
85
+ if ((0, focus_inspector_field_1.commitPendingInspectorFields)()) {
86
+ return;
87
+ }
88
+ const startPointer = { x: event.clientX, y: event.clientY };
89
+ const svgRect = svg.getBoundingClientRect();
90
+ const center = (0, svg_point_to_client_point_1.svgPointToClientPoint)((0, selected_outline_measurement_1.getSelectedOutlineRotationPivot)({
91
+ dimensions: outline.dimensions,
92
+ points: (_a = outline.uncroppedPoints) !== null && _a !== void 0 ? _a : outline.points,
93
+ transformOriginValue: rotationDrag.transformOriginValue,
94
+ }), svgRect);
95
+ const dragStates = (0, selected_outline_drag_1.getSelectedOutlineRotationDragStates)({
96
+ dragTargets: selected ? getAllRotationDragTargets() : [rotationDrag],
97
+ getDragOverrides,
98
+ timelinePosition: (0, imperative_state_1.getCurrentFrame)(),
99
+ });
100
+ let previousAngle = (0, selected_outline_measurement_1.getAngleDegrees)(center, {
101
+ x: event.clientX,
102
+ y: event.clientY,
103
+ });
104
+ let accumulatedDelta = 0;
105
+ let rotationLocked = event.shiftKey;
106
+ let lastValues = new Map();
107
+ let dragStarted = false;
108
+ const updateRotationDragOverrides = () => {
109
+ const rotationDeltaDegrees = rotationLocked && editorSnapping
110
+ ? (0, selected_outline_drag_1.snapSelectedOutlineRotationDeltaDegrees)({
111
+ dragStates,
112
+ rotationDeltaDegrees: accumulatedDelta,
113
+ })
114
+ : accumulatedDelta;
115
+ lastValues = (0, selected_outline_drag_1.getSelectedOutlineRotationDragValues)({
116
+ dragStates,
117
+ rotationDeltaDegrees,
118
+ });
119
+ (0, ForceSpecificCursor_1.forceSpecificCursor)((0, selected_outline_measurement_1.getRotationCursor)(cornerInfo.cursorDegrees + rotationDeltaDegrees));
120
+ for (const dragState of dragStates) {
121
+ const value = lastValues.get(dragState.key);
122
+ if (value === undefined) {
123
+ throw new Error('Expected rotation drag value to be available');
124
+ }
125
+ if (dragState.target.propStatus.status === 'keyframed') {
126
+ setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeKeyframedDragOverride({
127
+ status: dragState.target.propStatus,
128
+ frame: dragState.sourceFrame,
129
+ value,
130
+ }));
131
+ }
132
+ else {
133
+ setDragOverrides(dragState.target.nodePath, selected_outline_types_1.rotateFieldKey, remotion_1.Internals.makeStaticDragOverride(value));
134
+ }
135
+ }
136
+ };
137
+ const onPointerMove = (moveEvent) => {
138
+ moveEvent.preventDefault();
139
+ const screenDeltaX = moveEvent.clientX - startPointer.x;
140
+ const screenDeltaY = moveEvent.clientY - startPointer.y;
141
+ if (!dragStarted) {
142
+ if (!(0, selected_outline_drag_1.isSelectedOutlineDragPastThreshold)({
143
+ deltaX: screenDeltaX,
144
+ deltaY: screenDeltaY,
145
+ })) {
146
+ return;
147
+ }
148
+ dragStarted = true;
149
+ onDraggingChange(true);
150
+ }
151
+ const nextAngle = (0, selected_outline_measurement_1.getAngleDegrees)(center, {
152
+ x: moveEvent.clientX,
153
+ y: moveEvent.clientY,
154
+ });
155
+ accumulatedDelta += (0, selected_outline_measurement_1.getSelectedOutlineRotationDeltaDegrees)({
156
+ from: previousAngle,
157
+ to: nextAngle,
158
+ });
159
+ previousAngle = nextAngle;
160
+ rotationLocked = moveEvent.shiftKey;
161
+ updateRotationDragOverrides();
162
+ };
163
+ const onKeyChange = (keyEvent) => {
164
+ if (keyEvent.key !== 'Shift') {
165
+ return;
166
+ }
167
+ const nextRotationLocked = keyEvent.type === 'keydown';
168
+ if (nextRotationLocked === rotationLocked) {
169
+ return;
170
+ }
171
+ rotationLocked = nextRotationLocked;
172
+ if (dragStarted) {
173
+ updateRotationDragOverrides();
174
+ }
175
+ };
176
+ const onPointerUp = () => {
177
+ window.removeEventListener('keydown', onKeyChange);
178
+ window.removeEventListener('keyup', onKeyChange);
179
+ if (dragStarted) {
180
+ (0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
181
+ onDraggingChange(false);
182
+ }
183
+ const changes = (0, selected_outline_drag_1.getSelectedOutlineRotationDragChanges)({
184
+ dragStates,
185
+ lastValues,
186
+ });
187
+ if (changes.length === 0) {
188
+ (0, selected_outline_drag_1.clearSelectedOutlineRotationDragOverrides)({
189
+ clearDragOverrides,
190
+ dragStates,
191
+ });
192
+ return;
193
+ }
194
+ const staticChanges = changes.filter((change) => change.type === 'static');
195
+ const keyframedChanges = changes.filter((change) => change.type === 'keyframed');
196
+ Promise.all([
197
+ staticChanges.length > 0
198
+ ? (0, save_sequence_prop_1.saveSequenceProps)({
199
+ changes: staticChanges,
200
+ addedKeyframes: null,
201
+ movedKeyframes: null,
202
+ setPropStatuses,
203
+ clientId: rotationDrag.clientId,
204
+ undoLabel: changes.length > 1
205
+ ? 'Rotate selected sequences'
206
+ : 'Rotate sequence',
207
+ redoLabel: changes.length > 1
208
+ ? 'Rotate selected sequences back'
209
+ : 'Rotate sequence back',
210
+ })
211
+ : Promise.resolve(),
212
+ (0, call_add_keyframe_1.callAddKeyframes)({
213
+ sequenceKeyframes: keyframedChanges,
214
+ effectKeyframes: [],
215
+ setPropStatuses,
216
+ clientId: rotationDrag.clientId,
217
+ }),
218
+ ])
219
+ .catch((err) => {
220
+ (0, NotificationCenter_1.showNotification)(`Could not save sequence props: ${err instanceof Error ? err.message : String(err)}`, 4000);
221
+ })
222
+ .finally(() => {
223
+ (0, selected_outline_drag_1.clearSelectedOutlineRotationDragOverrides)({
224
+ clearDragOverrides,
225
+ dragStates,
226
+ });
227
+ });
228
+ };
229
+ (0, pointer_session_1.startPointerSession)({
230
+ event,
231
+ target: event.currentTarget,
232
+ onMove: onPointerMove,
233
+ onEnd: onPointerUp,
234
+ });
235
+ window.addEventListener('keydown', onKeyChange);
236
+ window.addEventListener('keyup', onKeyChange);
237
+ }, [
238
+ clearDragOverrides,
239
+ cornerInfo,
240
+ editorSnapping,
241
+ getDragOverrides,
242
+ getAllRotationDragTargets,
243
+ onDraggingChange,
244
+ outline.dimensions,
245
+ outline.points,
246
+ outline.uncroppedPoints,
247
+ onSelect,
248
+ rotationDrag,
249
+ selected,
250
+ setPropStatuses,
251
+ setDragOverrides,
252
+ target,
253
+ ]);
254
+ if (rotationDrag === null) {
255
+ return null;
256
+ }
257
+ 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: () => {
259
+ if (!dragging) {
260
+ onHoverChange(outline.key);
261
+ }
262
+ }, onPointerLeave: () => {
263
+ if (!dragging) {
264
+ onHoverChange(null);
265
+ }
266
+ }, onPointerDown: onPointerDown }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: circleRef, getItems: onContextMenuOpen })
267
+ ] }));
268
+ };
269
+ exports.SelectedOutlineRotationCornerHandle = SelectedOutlineRotationCornerHandle;
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { type SelectedOutlineScaleEdge } from './selected-outline-drag';
3
+ import type { SelectedOutline } from './selected-outline-geometry';
4
+ import { type SelectedOutlineContextMenuOpenHandler, type SelectedOutlineScaleDragTarget, type SelectedOutlineTarget } from './selected-outline-types';
5
+ import type { TimelineSelection, TimelineSelectionInteraction } from './Timeline/TimelineSelection';
6
+ export declare const SelectedOutlineScaleEdgeLine: React.FC<{
7
+ readonly getAllScaleDragTargets: () => readonly SelectedOutlineScaleDragTarget[];
8
+ readonly dragging: boolean;
9
+ readonly edge: SelectedOutlineScaleEdge;
10
+ readonly outline: SelectedOutline;
11
+ readonly onDraggingChange: (dragging: boolean) => void;
12
+ readonly onContextMenuOpen: SelectedOutlineContextMenuOpenHandler;
13
+ readonly onHoverChange: (key: string | null) => void;
14
+ readonly onSelect: (item: TimelineSelection, interaction: TimelineSelectionInteraction) => void;
15
+ readonly target: SelectedOutlineTarget | undefined;
16
+ }>;
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SelectedOutlineScaleEdgeLine = void 0;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const react_1 = __importStar(require("react"));
39
+ const remotion_1 = require("remotion");
40
+ const colors_1 = require("../helpers/colors");
41
+ const pointer_session_1 = require("../helpers/pointer-session");
42
+ const ContextMenu_1 = require("./ContextMenu");
43
+ const ForceSpecificCursor_1 = require("./ForceSpecificCursor");
44
+ const NotificationCenter_1 = require("./Notifications/NotificationCenter");
45
+ const selected_outline_drag_1 = require("./selected-outline-drag");
46
+ const selected_outline_measurement_1 = require("./selected-outline-measurement");
47
+ const selected_outline_types_1 = require("./selected-outline-types");
48
+ const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
49
+ const focus_inspector_field_1 = require("./Timeline/focus-inspector-field");
50
+ const imperative_state_1 = require("./Timeline/imperative-state");
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;
54
+ const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
55
+ const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
56
+ const scaleDrag = (_a = target === null || target === void 0 ? void 0 : target.scaleDrag) !== null && _a !== void 0 ? _a : null;
57
+ const selected = (_b = target === null || target === void 0 ? void 0 : target.selected) !== null && _b !== void 0 ? _b : false;
58
+ const lineRef = (0, react_1.useRef)(null);
59
+ const edgeInfo = (0, react_1.useMemo)(() => (0, selected_outline_drag_1.getSelectedOutlineScaleEdgeInfo)(outline.points, edge), [edge, outline.points]);
60
+ const onPointerDown = react_1.default.useCallback((event) => {
61
+ if (event.button !== 0 || scaleDrag === null || edgeInfo === null) {
62
+ return;
63
+ }
64
+ event.preventDefault();
65
+ event.stopPropagation();
66
+ const interaction = (0, selected_outline_measurement_1.getOutlineSelectionInteraction)(event);
67
+ const shouldUpdateSelection = !selected || interaction.shiftKey || interaction.toggleKey;
68
+ if (shouldUpdateSelection && target !== undefined) {
69
+ onSelect(target.selection, interaction);
70
+ }
71
+ if (interaction.shiftKey || interaction.toggleKey) {
72
+ return;
73
+ }
74
+ if ((0, focus_inspector_field_1.commitPendingInspectorFields)()) {
75
+ return;
76
+ }
77
+ const startPointer = { x: event.clientX, y: event.clientY };
78
+ const dragStates = (0, selected_outline_drag_1.getSelectedOutlineScaleDragStates)({
79
+ dragTargets: selected ? getAllScaleDragTargets() : [scaleDrag],
80
+ getDragOverrides,
81
+ timelinePosition: (0, imperative_state_1.getCurrentFrame)(),
82
+ });
83
+ let lastValues = new Map();
84
+ let dragStarted = false;
85
+ const onPointerMove = (moveEvent) => {
86
+ moveEvent.preventDefault();
87
+ const delta = {
88
+ x: moveEvent.clientX - startPointer.x,
89
+ y: moveEvent.clientY - startPointer.y,
90
+ };
91
+ if (!dragStarted) {
92
+ if (!(0, selected_outline_drag_1.isSelectedOutlineDragPastThreshold)({
93
+ deltaX: delta.x,
94
+ deltaY: delta.y,
95
+ })) {
96
+ return;
97
+ }
98
+ dragStarted = true;
99
+ onDraggingChange(true);
100
+ (0, ForceSpecificCursor_1.forceSpecificCursor)(edgeInfo.cursor);
101
+ }
102
+ const projectedDelta = (0, selected_outline_measurement_1.dot)(delta, edgeInfo.normal);
103
+ const scaleFactor = Math.max(0.001, 1 + projectedDelta / edgeInfo.extent);
104
+ lastValues = (0, selected_outline_drag_1.getSelectedOutlineScaleDragValues)({
105
+ dragStates,
106
+ axis: edgeInfo.axis,
107
+ scaleFactor,
108
+ });
109
+ for (const dragState of dragStates) {
110
+ const value = lastValues.get(dragState.key);
111
+ if (value === undefined) {
112
+ throw new Error('Expected scale drag value to be available');
113
+ }
114
+ if (dragState.target.propStatus.status === 'keyframed') {
115
+ setDragOverrides(dragState.target.nodePath, selected_outline_types_1.scaleFieldKey, remotion_1.Internals.makeKeyframedDragOverride({
116
+ status: dragState.target.propStatus,
117
+ frame: dragState.sourceFrame,
118
+ value,
119
+ }));
120
+ }
121
+ else {
122
+ setDragOverrides(dragState.target.nodePath, selected_outline_types_1.scaleFieldKey, remotion_1.Internals.makeStaticDragOverride(value));
123
+ }
124
+ }
125
+ };
126
+ const onPointerUp = () => {
127
+ if (dragStarted) {
128
+ (0, ForceSpecificCursor_1.stopForcingSpecificCursor)();
129
+ onDraggingChange(false);
130
+ }
131
+ const changes = (0, selected_outline_drag_1.getSelectedOutlineScaleDragChanges)({
132
+ dragStates,
133
+ lastValues,
134
+ });
135
+ if (changes.length === 0) {
136
+ (0, selected_outline_drag_1.clearSelectedOutlineScaleDragOverrides)({
137
+ clearDragOverrides,
138
+ dragStates,
139
+ });
140
+ return;
141
+ }
142
+ const staticChanges = changes.filter((change) => change.type === 'static');
143
+ const keyframedChanges = changes.filter((change) => change.type === 'keyframed');
144
+ Promise.all([
145
+ staticChanges.length > 0
146
+ ? (0, save_sequence_prop_1.saveSequenceProps)({
147
+ changes: staticChanges,
148
+ addedKeyframes: null,
149
+ movedKeyframes: null,
150
+ setPropStatuses,
151
+ clientId: scaleDrag.clientId,
152
+ undoLabel: changes.length > 1
153
+ ? 'Scale selected sequences'
154
+ : 'Scale sequence',
155
+ redoLabel: changes.length > 1
156
+ ? 'Scale selected sequences back'
157
+ : 'Scale sequence back',
158
+ })
159
+ : Promise.resolve(),
160
+ (0, call_add_keyframe_1.callAddKeyframes)({
161
+ sequenceKeyframes: keyframedChanges,
162
+ effectKeyframes: [],
163
+ setPropStatuses,
164
+ clientId: scaleDrag.clientId,
165
+ }),
166
+ ])
167
+ .catch((err) => {
168
+ (0, NotificationCenter_1.showNotification)(`Could not save sequence props: ${err instanceof Error ? err.message : String(err)}`, 4000);
169
+ })
170
+ .finally(() => {
171
+ (0, selected_outline_drag_1.clearSelectedOutlineScaleDragOverrides)({
172
+ clearDragOverrides,
173
+ dragStates,
174
+ });
175
+ });
176
+ };
177
+ (0, pointer_session_1.startPointerSession)({
178
+ event,
179
+ target: event.currentTarget,
180
+ onMove: onPointerMove,
181
+ onEnd: onPointerUp,
182
+ });
183
+ }, [
184
+ clearDragOverrides,
185
+ getAllScaleDragTargets,
186
+ edgeInfo,
187
+ getDragOverrides,
188
+ onDraggingChange,
189
+ onSelect,
190
+ scaleDrag,
191
+ selected,
192
+ setPropStatuses,
193
+ setDragOverrides,
194
+ target,
195
+ ]);
196
+ if (scaleDrag === null || edgeInfo === null) {
197
+ return null;
198
+ }
199
+ 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: () => {
201
+ if (!dragging) {
202
+ onHoverChange(outline.key);
203
+ }
204
+ }, onPointerLeave: () => {
205
+ if (!dragging) {
206
+ onHoverChange(null);
207
+ }
208
+ }, onPointerDown: onPointerDown }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: lineRef, getItems: onContextMenuOpen })
209
+ ] }));
210
+ };
211
+ exports.SelectedOutlineScaleEdgeLine = SelectedOutlineScaleEdgeLine;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { type SelectedOutlineSnapPoint } from './selected-outline-snap';
3
+ export type UpdateSelectedOutlineSnapPoints = (snapPoints: readonly SelectedOutlineSnapPoint[]) => void;
4
+ export declare const SelectedOutlineSnapIndicators: React.FC<{
5
+ readonly compositionHeight: number;
6
+ readonly compositionWidth: number;
7
+ readonly scale: number;
8
+ readonly updateSnapPointsRef: React.MutableRefObject<UpdateSelectedOutlineSnapPoints>;
9
+ }>;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectedOutlineSnapIndicators = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const selected_outline_snap_1 = require("./selected-outline-snap");
7
+ const SelectedOutlineSnapIndicators = ({ compositionHeight, compositionWidth, scale, updateSnapPointsRef }) => {
8
+ const [activeSnapPoints, setActiveSnapPoints] = (0, react_1.useState)([]);
9
+ (0, react_1.useLayoutEffect)(() => {
10
+ updateSnapPointsRef.current = setActiveSnapPoints;
11
+ return () => {
12
+ if (updateSnapPointsRef.current === setActiveSnapPoints) {
13
+ updateSnapPointsRef.current = () => undefined;
14
+ }
15
+ };
16
+ }, [updateSnapPointsRef]);
17
+ if (activeSnapPoints.length === 0) {
18
+ return null;
19
+ }
20
+ return (jsx_runtime_1.jsx("g", { pointerEvents: "none", children: activeSnapPoints.map((snapPoint) => {
21
+ if (snapPoint.target.axis === 'x') {
22
+ const x = snapPoint.target.position * scale;
23
+ return (jsx_runtime_1.jsx("line", { x1: x, x2: x, y1: 0, y2: compositionHeight * scale, stroke: selected_outline_snap_1.selectedOutlineSnapIndicatorColor, strokeWidth: 1, vectorEffect: "non-scaling-stroke" }, `${snapPoint.target.axis}-${snapPoint.target.type}-${snapPoint.target.position}-${snapPoint.edge}`));
24
+ }
25
+ const y = snapPoint.target.position * scale;
26
+ return (jsx_runtime_1.jsx("line", { x1: 0, x2: compositionWidth * scale, y1: y, y2: y, stroke: selected_outline_snap_1.selectedOutlineSnapIndicatorColor, strokeWidth: 1, vectorEffect: "non-scaling-stroke" }, `${snapPoint.target.axis}-${snapPoint.target.type}-${snapPoint.target.position}-${snapPoint.edge}`));
27
+ }) }));
28
+ };
29
+ exports.SelectedOutlineSnapIndicators = SelectedOutlineSnapIndicators;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { SelectedOutline } from './selected-outline-geometry';
3
+ import { type SelectedOutlineLayoutTarget, type SelectedOutlineTarget } from './selected-outline-types';
4
+ export declare const SelectedOutlineTransformOriginHandle: React.FC<{
5
+ readonly getLatestTargetByKey: (key: string) => SelectedOutlineTarget | undefined;
6
+ readonly layoutTarget: SelectedOutlineLayoutTarget | undefined;
7
+ readonly outline: SelectedOutline;
8
+ readonly onDraggingChange: (dragging: boolean) => void;
9
+ }>;