@remotion/studio 4.0.505 → 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 (208) 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/api/install-package.d.ts +2 -3
  4. package/dist/api/install-package.js +1 -3
  5. package/dist/api/visual-control.d.ts +3 -0
  6. package/dist/api/visual-control.js +3 -0
  7. package/dist/components/AssetSelector.js +19 -4
  8. package/dist/components/AssetSelectorItem.js +3 -3
  9. package/dist/components/Canvas.js +2 -0
  10. package/dist/components/CodingAgentIcon.d.ts +4 -0
  11. package/dist/components/CodingAgentIcon.js +17 -0
  12. package/dist/components/CompositionSelector.js +1 -1
  13. package/dist/components/CompositionSelectorItem.js +1 -1
  14. package/dist/components/ConfigureDefaultEditorModal.d.ts +1 -1
  15. package/dist/components/ConfigureDefaultEditorModal.js +117 -69
  16. package/dist/components/ConfigureLicenseModal.d.ts +1 -3
  17. package/dist/components/ConfigureLicenseModal.js +105 -89
  18. package/dist/components/ConfirmationDialog.js +2 -2
  19. package/dist/components/ContextMenu.js +10 -8
  20. package/dist/components/Editor.js +2 -0
  21. package/dist/components/EditorContexts.js +6 -5
  22. package/dist/components/EffectPickerModal.js +1 -1
  23. package/dist/components/ExpandedTracksProvider.js +10 -53
  24. package/dist/components/GlobalKeybindings.js +3 -2
  25. package/dist/components/InlineCaptionInspector.d.ts +2 -2
  26. package/dist/components/InlineDropdown.d.ts +2 -1
  27. package/dist/components/InlineDropdown.js +10 -4
  28. package/dist/components/InspectorLocationCopy.js +8 -8
  29. package/dist/components/InspectorOpenInEditor.d.ts +2 -0
  30. package/dist/components/InspectorOpenInEditor.js +63 -49
  31. package/dist/components/InspectorPanel/AlignmentControls.js +5 -2
  32. package/dist/components/InspectorPanel/CompositionInspector.js +15 -1
  33. package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +1 -1
  34. package/dist/components/InspectorPanel/EasingInspector.js +7 -4
  35. package/dist/components/InspectorPanel/KeyframeInspector.js +5 -1
  36. package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -0
  37. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +22 -4
  38. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +1 -1
  39. package/dist/components/InspectorPanel/common.d.ts +1 -0
  40. package/dist/components/InspectorPanel/common.js +2 -2
  41. package/dist/components/InspectorPanel/use-composition-actions.js +4 -1
  42. package/dist/components/InspectorSequenceSection.js +4 -4
  43. package/dist/components/InstallPackage.js +1 -1
  44. package/dist/components/Menu/MenuSectionHeader.d.ts +4 -0
  45. package/dist/components/Menu/MenuSectionHeader.js +20 -0
  46. package/dist/components/Menu/SubMenu.js +13 -2
  47. package/dist/components/Menu/menu-tree-context.d.ts +3 -0
  48. package/dist/components/Menu/menu-tree-context.js +13 -0
  49. package/dist/components/MenuBuildIndicator.js +1 -0
  50. package/dist/components/MenuToolbar.js +1 -1
  51. package/dist/components/ModalFooter.d.ts +1 -0
  52. package/dist/components/ModalFooter.js +6 -2
  53. package/dist/components/ModalHeader.js +1 -1
  54. package/dist/components/Modals.js +18 -7
  55. package/dist/components/ModalsProvider.js +5 -6
  56. package/dist/components/NewComposition/CodemodFooter.js +1 -1
  57. package/dist/components/NewComposition/ComboBox.d.ts +6 -1
  58. package/dist/components/NewComposition/DismissableModal.js +1 -1
  59. package/dist/components/NewComposition/MenuContent.js +27 -19
  60. package/dist/components/NewComposition/RenameStaticFile.js +1 -1
  61. package/dist/components/NewComposition/menu-typeahead.js +2 -2
  62. package/dist/components/OverrideInputProps.js +1 -1
  63. package/dist/components/PlayPause.js +2 -1
  64. package/dist/components/PlaybackKeyboardShortcutsManager.js +7 -5
  65. package/dist/components/Preview.js +29 -4
  66. package/dist/components/PreviewToolbarOverflowButton.js +4 -2
  67. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -1
  68. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -1
  69. package/dist/components/RenderButton.d.ts +3 -3
  70. package/dist/components/RenderButton.js +42 -7
  71. package/dist/components/RenderModal/RenderStatusModal.js +1 -1
  72. package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.d.ts +1 -0
  73. package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +2 -2
  74. package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +3 -3
  75. package/dist/components/RenderModal/SchemaEditor/ZodSwitch.js +1 -1
  76. package/dist/components/RenderModal/ServerRenderModal.js +5 -1
  77. package/dist/components/RenderModal/WebRenderModal.js +3 -2
  78. package/dist/components/RenderQueue/RenderQueueError.js +1 -1
  79. package/dist/components/RenderQueue/RenderQueueItem.js +8 -2
  80. package/dist/components/RenderQueue/RenderQueueItemStatus.js +1 -1
  81. package/dist/components/RenderQueue/RenderQueueProgressMessage.js +1 -1
  82. package/dist/components/RenderQueue/RenderQueueRepeat.js +1 -1
  83. package/dist/components/RenderQueue/actions.d.ts +4 -2
  84. package/dist/components/RenderQueue/actions.js +4 -2
  85. package/dist/components/RenderQueue/index.js +3 -4
  86. package/dist/components/RenderQueue/use-render-output-file-drag.d.ts +8 -0
  87. package/dist/components/RenderQueue/use-render-output-file-drag.js +121 -0
  88. package/dist/components/SegmentedControl.js +0 -1
  89. package/dist/components/SelectedOutlineElement.d.ts +14 -17
  90. package/dist/components/SelectedOutlineElement.js +113 -931
  91. package/dist/components/SelectedOutlineKeyboardControls.d.ts +7 -0
  92. package/dist/components/SelectedOutlineKeyboardControls.js +261 -0
  93. package/dist/components/SelectedOutlineOverlay.d.ts +6 -13
  94. package/dist/components/SelectedOutlineOverlay.js +360 -832
  95. package/dist/components/SelectedOutlinePolygon.d.ts +25 -0
  96. package/dist/components/SelectedOutlinePolygon.js +359 -0
  97. package/dist/components/SelectedOutlineRenderer.d.ts +18 -0
  98. package/dist/components/SelectedOutlineRenderer.js +208 -0
  99. package/dist/components/SelectedOutlineRotationCornerHandle.d.ts +16 -0
  100. package/dist/components/SelectedOutlineRotationCornerHandle.js +269 -0
  101. package/dist/components/SelectedOutlineScaleEdgeLine.d.ts +16 -0
  102. package/dist/components/SelectedOutlineScaleEdgeLine.js +211 -0
  103. package/dist/components/SelectedOutlineSnapIndicators.d.ts +9 -0
  104. package/dist/components/SelectedOutlineSnapIndicators.js +29 -0
  105. package/dist/components/SelectedOutlineTransformOriginHandle.d.ts +9 -0
  106. package/dist/components/SelectedOutlineTransformOriginHandle.js +286 -0
  107. package/dist/components/SelectedOutlineUvControls.d.ts +3 -9
  108. package/dist/components/SelectedOutlineUvControls.js +57 -12
  109. package/dist/components/SettingsContext.d.ts +15 -0
  110. package/dist/components/SettingsContext.js +116 -0
  111. package/dist/components/SettingsModal.d.ts +7 -0
  112. package/dist/components/SettingsModal.js +56 -0
  113. package/dist/components/SettingsModalFooter.d.ts +2 -0
  114. package/dist/components/SettingsModalFooter.js +44 -0
  115. package/dist/components/ShowOutlinesProvider.js +2 -3
  116. package/dist/components/SidebarRenderButton.js +1 -1
  117. package/dist/components/SvgImportDialog.js +2 -2
  118. package/dist/components/TimeValue.js +1 -1
  119. package/dist/components/Timeline/EasingEditorModal.js +66 -22
  120. package/dist/components/Timeline/Timeline.js +23 -5
  121. package/dist/components/Timeline/TimelineAssetField.js +1 -1
  122. package/dist/components/Timeline/TimelineDragHandler.js +3 -3
  123. package/dist/components/Timeline/TimelineDuplicateCount.d.ts +4 -0
  124. package/dist/components/Timeline/TimelineDuplicateCount.js +28 -0
  125. package/dist/components/Timeline/TimelineEffectPropItem.js +5 -3
  126. package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +3 -23
  127. package/dist/components/Timeline/TimelineExpandedRow.d.ts +4 -2
  128. package/dist/components/Timeline/TimelineExpandedRow.js +2 -2
  129. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.d.ts +4 -2
  130. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +11 -1
  131. package/dist/components/Timeline/TimelineFontFamilyField.js +3 -1
  132. package/dist/components/Timeline/TimelineKeyframeControls.js +1 -0
  133. package/dist/components/Timeline/TimelineSelection.js +1 -0
  134. package/dist/components/Timeline/TimelineSequence.js +28 -25
  135. package/dist/components/Timeline/TimelineSequenceItem.js +74 -58
  136. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +1 -1
  137. package/dist/components/Timeline/TimelineTrack.js +2 -1
  138. package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +6 -3
  139. package/dist/components/Timeline/get-sequence-context-menu-items.js +58 -53
  140. package/dist/components/Timeline/reset-selected-timeline-props.js +1 -1
  141. package/dist/components/Timeline/should-subscribe-to-sequence-props.d.ts +1 -1
  142. package/dist/components/Timeline/timeline-asset-link.d.ts +2 -2
  143. package/dist/components/Timeline/timeline-asset-link.js +2 -2
  144. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +38 -2
  145. package/dist/components/Timeline/{use-open-sequence-in-editor.d.ts → use-open-sequence-in-apps.d.ts} +4 -1
  146. package/dist/components/Timeline/{use-open-sequence-in-editor.js → use-open-sequence-in-apps.js} +20 -4
  147. package/dist/components/Timeline/use-timeline-asset-drop.js +1 -0
  148. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +5 -0
  149. package/dist/components/Timeline/use-timeline-expanded-tree.js +50 -1
  150. package/dist/components/Timeline/use-timeline-height.js +20 -0
  151. package/dist/components/TimelineInOutToggle.js +5 -1
  152. package/dist/components/TopPanel.js +16 -0
  153. package/dist/components/UpdateCheck.js +1 -1
  154. package/dist/components/effect-drag-and-drop.js +1 -1
  155. package/dist/components/get-open-in-menu-items.d.ts +12 -0
  156. package/dist/components/get-open-in-menu-items.js +83 -0
  157. package/dist/components/handle-drop.d.ts +2 -1
  158. package/dist/components/handle-drop.js +12 -2
  159. package/dist/components/import-assets.d.ts +18 -6
  160. package/dist/components/import-assets.js +76 -32
  161. package/dist/components/selected-outline-measurement.d.ts +2 -2
  162. package/dist/components/selected-outline-order.d.ts +12 -0
  163. package/dist/components/selected-outline-order.js +251 -0
  164. package/dist/components/selected-outline-types.d.ts +9 -10
  165. package/dist/components/svg-point-to-client-point.d.ts +2 -0
  166. package/dist/components/svg-point-to-client-point.js +10 -0
  167. package/dist/components/use-auto-save-config.d.ts +8 -0
  168. package/dist/components/use-auto-save-config.js +74 -0
  169. package/dist/components/use-default-editor-info.d.ts +1 -0
  170. package/dist/components/use-default-editor-info.js +10 -30
  171. package/dist/esm/{chunk-jefhcs5z.js → chunk-fgedsvhb.js} +1 -2
  172. package/dist/esm/{chunk-7pgk8h5m.js → chunk-ptnd65a9.js} +14596 -12725
  173. package/dist/esm/internals.mjs +14595 -12724
  174. package/dist/esm/previewEntry.mjs +12726 -10855
  175. package/dist/esm/renderEntry.mjs +2 -2
  176. package/dist/helpers/are-sequence-node-path-infos-equal.d.ts +2 -0
  177. package/dist/helpers/are-sequence-node-path-infos-equal.js +27 -0
  178. package/dist/helpers/calculate-timeline.js +3 -3
  179. package/dist/helpers/client-id.d.ts +3 -1
  180. package/dist/helpers/client-id.js +28 -4
  181. package/dist/helpers/format-file-location.d.ts +1 -1
  182. package/dist/helpers/format-file-location.js +3 -3
  183. package/dist/helpers/install-required-package.d.ts +3 -3
  184. package/dist/helpers/install-required-package.js +1 -6
  185. package/dist/helpers/migrate-expanded-tracks-for-subscription-key.js +3 -3
  186. package/dist/helpers/open-in-editor.d.ts +1 -0
  187. package/dist/helpers/open-in-editor.js +5 -1
  188. package/dist/helpers/studio-fit-padding.d.ts +1 -1
  189. package/dist/helpers/studio-fit-padding.js +1 -1
  190. package/dist/helpers/studio-runtime-config.js +3 -0
  191. package/dist/helpers/timeline-layout.d.ts +2 -1
  192. package/dist/helpers/timeline-layout.js +5 -2
  193. package/dist/helpers/timeline-node-path-key.d.ts +2 -0
  194. package/dist/helpers/timeline-node-path-key.js +3 -1
  195. package/dist/helpers/use-asset-drag-events.d.ts +2 -1
  196. package/dist/helpers/use-asset-drag-events.js +14 -6
  197. package/dist/helpers/use-menu-structure.js +25 -35
  198. package/dist/helpers/use-runtime-values.d.ts +9 -0
  199. package/dist/helpers/use-runtime-values.js +76 -0
  200. package/dist/icons/apps.d.ts +2 -0
  201. package/dist/icons/apps.js +7 -0
  202. package/dist/icons/browse-elements.d.ts +4 -0
  203. package/dist/icons/browse-elements.js +10 -0
  204. package/dist/state/modals.d.ts +5 -6
  205. package/dist/state/modals.js +5 -3
  206. package/dist/state/timeline-sequence-hover.d.ts +9 -3
  207. package/dist/state/timeline-sequence-hover.js +63 -12
  208. package/package.json +12 -12
@@ -0,0 +1,7 @@
1
+ import type React from 'react';
2
+ import type { getSequencesWithSelectableOutlines } from './selected-outline-measurement';
3
+ import { type SelectedOutlineTarget } from './selected-outline-types';
4
+ export declare const SelectedOutlineKeyboardControls: React.FC<{
5
+ readonly getLatestOutlineTargetByKey: (key: string) => SelectedOutlineTarget | undefined;
6
+ readonly getSelectableOutlines: () => ReturnType<typeof getSequencesWithSelectableOutlines>;
7
+ }>;
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectedOutlineKeyboardControls = void 0;
4
+ const player_1 = require("@remotion/player");
5
+ const react_1 = require("react");
6
+ const remotion_1 = require("remotion");
7
+ const use_keybinding_1 = require("../helpers/use-keybinding");
8
+ const NotificationCenter_1 = require("./Notifications/NotificationCenter");
9
+ const selected_outline_drag_1 = require("./selected-outline-drag");
10
+ const selected_outline_measurement_1 = require("./selected-outline-measurement");
11
+ const selected_outline_types_1 = require("./selected-outline-types");
12
+ const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
13
+ const imperative_state_1 = require("./Timeline/imperative-state");
14
+ const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
15
+ const timeline_scroll_logic_1 = require("./Timeline/timeline-scroll-logic");
16
+ const TimelineSelection_1 = require("./Timeline/TimelineSelection");
17
+ const SelectedOutlineKeyboardControls = ({ getLatestOutlineTargetByKey, getSelectableOutlines }) => {
18
+ const currentSelection = (0, TimelineSelection_1.useCurrentTimelineSelectionStateAsRef)();
19
+ const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
20
+ const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
21
+ const { frameBack, frameForward, getCurrentFrame, seek } = player_1.PlayerInternals.usePlayerMethods();
22
+ const keybindings = (0, use_keybinding_1.useKeybinding)();
23
+ const keyboardNudgeSessionRef = (0, react_1.useRef)(null);
24
+ const saveKeyboardNudgeSessionRef = (0, react_1.useRef)(() => undefined);
25
+ const saveKeyboardNudgeSession = (0, react_1.useCallback)(() => {
26
+ const session = keyboardNudgeSessionRef.current;
27
+ if (session === null) {
28
+ return;
29
+ }
30
+ keyboardNudgeSessionRef.current = null;
31
+ const changes = (0, selected_outline_drag_1.getSelectedOutlineDragChanges)({
32
+ dragStates: session.dragStates,
33
+ lastValues: session.lastValues,
34
+ });
35
+ if (changes.length === 0) {
36
+ (0, selected_outline_drag_1.clearSelectedOutlineDragOverrides)({
37
+ clearDragOverrides,
38
+ dragStates: session.dragStates,
39
+ });
40
+ return;
41
+ }
42
+ const staticChanges = changes.filter((change) => change.type === 'static');
43
+ const keyframedChanges = changes.filter((change) => change.type === 'keyframed');
44
+ Promise.all([
45
+ staticChanges.length > 0
46
+ ? (0, save_sequence_prop_1.saveSequenceProps)({
47
+ changes: staticChanges,
48
+ addedKeyframes: null,
49
+ movedKeyframes: null,
50
+ setPropStatuses,
51
+ clientId: session.clientId,
52
+ undoLabel: changes.length > 1 ? 'Move selected sequences' : 'Move sequence',
53
+ redoLabel: changes.length > 1
54
+ ? 'Move selected sequences back'
55
+ : 'Move sequence back',
56
+ })
57
+ : Promise.resolve(),
58
+ (0, call_add_keyframe_1.callAddKeyframes)({
59
+ sequenceKeyframes: keyframedChanges,
60
+ effectKeyframes: [],
61
+ setPropStatuses,
62
+ clientId: session.clientId,
63
+ }),
64
+ ])
65
+ .catch((err) => {
66
+ (0, NotificationCenter_1.showNotification)(`Could not save sequence props: ${err instanceof Error ? err.message : String(err)}`, 4000);
67
+ })
68
+ .finally(() => {
69
+ (0, selected_outline_drag_1.clearSelectedOutlineDragOverrides)({
70
+ clearDragOverrides,
71
+ dragStates: session.dragStates,
72
+ });
73
+ });
74
+ }, [clearDragOverrides, setPropStatuses]);
75
+ (0, react_1.useEffect)(() => {
76
+ saveKeyboardNudgeSessionRef.current = saveKeyboardNudgeSession;
77
+ }, [saveKeyboardNudgeSession]);
78
+ (0, react_1.useEffect)(() => {
79
+ return () => {
80
+ saveKeyboardNudgeSessionRef.current();
81
+ };
82
+ }, []);
83
+ const seekWithArrowKey = (0, react_1.useCallback)((event, direction) => {
84
+ if (direction === 'up' || direction === 'down') {
85
+ return;
86
+ }
87
+ event.preventDefault();
88
+ if (direction === 'left') {
89
+ if (event.altKey) {
90
+ seek(0);
91
+ (0, timeline_scroll_logic_1.ensureFrameIsInViewport)({
92
+ direction: 'fit-left',
93
+ durationInFrames: (0, imperative_state_1.getCurrentDuration)(),
94
+ frame: 0,
95
+ });
96
+ }
97
+ else if (event.shiftKey) {
98
+ frameBack((0, imperative_state_1.getCurrentFps)());
99
+ (0, timeline_scroll_logic_1.ensureFrameIsInViewport)({
100
+ direction: 'fit-left',
101
+ durationInFrames: (0, imperative_state_1.getCurrentDuration)(),
102
+ frame: Math.max(0, getCurrentFrame() - (0, imperative_state_1.getCurrentFps)()),
103
+ });
104
+ }
105
+ else {
106
+ frameBack(1);
107
+ (0, timeline_scroll_logic_1.ensureFrameIsInViewport)({
108
+ direction: 'fit-left',
109
+ durationInFrames: (0, imperative_state_1.getCurrentDuration)(),
110
+ frame: Math.max(0, getCurrentFrame() - 1),
111
+ });
112
+ }
113
+ return;
114
+ }
115
+ if (event.altKey) {
116
+ seek((0, imperative_state_1.getCurrentDuration)() - 1);
117
+ (0, timeline_scroll_logic_1.ensureFrameIsInViewport)({
118
+ direction: 'fit-right',
119
+ durationInFrames: (0, imperative_state_1.getCurrentDuration)() - 1,
120
+ frame: (0, imperative_state_1.getCurrentDuration)() - 1,
121
+ });
122
+ }
123
+ else if (event.shiftKey) {
124
+ frameForward((0, imperative_state_1.getCurrentFps)());
125
+ (0, timeline_scroll_logic_1.ensureFrameIsInViewport)({
126
+ direction: 'fit-right',
127
+ durationInFrames: (0, imperative_state_1.getCurrentDuration)(),
128
+ frame: Math.min((0, imperative_state_1.getCurrentDuration)() - 1, getCurrentFrame() + (0, imperative_state_1.getCurrentFps)()),
129
+ });
130
+ }
131
+ else {
132
+ frameForward(1);
133
+ (0, timeline_scroll_logic_1.ensureFrameIsInViewport)({
134
+ direction: 'fit-right',
135
+ durationInFrames: (0, imperative_state_1.getCurrentDuration)(),
136
+ frame: Math.min((0, imperative_state_1.getCurrentDuration)() - 1, getCurrentFrame() + 1),
137
+ });
138
+ }
139
+ }, [frameBack, frameForward, getCurrentFrame, seek]);
140
+ const onArrowKeyDown = (0, react_1.useCallback)((event) => {
141
+ var _a;
142
+ const direction = (0, selected_outline_drag_1.getSelectedOutlineKeyboardNudgeDirection)(event.key);
143
+ if (direction === null) {
144
+ return;
145
+ }
146
+ const { selectedItems } = currentSelection.current;
147
+ const selectedSequenceKeys = (0, selected_outline_measurement_1.getSelectedSequenceKeys)(selectedItems);
148
+ const sequenceKeysContainingSelection = (0, selected_outline_measurement_1.getSequenceKeysContainingSelection)(selectedItems);
149
+ const selectableOutlines = getSelectableOutlines();
150
+ const allDragTargets = selectableOutlines.flatMap(({ key }) => {
151
+ var _a;
152
+ var _b;
153
+ if (!selectedSequenceKeys.has(key) &&
154
+ !sequenceKeysContainingSelection.has(key)) {
155
+ return [];
156
+ }
157
+ const drag = (_b = (_a = getLatestOutlineTargetByKey(key)) === null || _a === void 0 ? void 0 : _a.drag) !== null && _b !== void 0 ? _b : null;
158
+ return drag === null ? [] : [drag];
159
+ });
160
+ if (selectedItems.length === 0 || allDragTargets.length === 0) {
161
+ seekWithArrowKey(event, direction);
162
+ return;
163
+ }
164
+ if (event.altKey) {
165
+ seekWithArrowKey(event, direction);
166
+ return;
167
+ }
168
+ event.preventDefault();
169
+ const activeSession = (_a = keyboardNudgeSessionRef.current) !== null && _a !== void 0 ? _a : (() => {
170
+ const [firstDragTarget] = allDragTargets;
171
+ if (firstDragTarget === undefined) {
172
+ throw new Error('Expected a drag target');
173
+ }
174
+ return {
175
+ clientId: firstDragTarget.clientId,
176
+ deltaX: 0,
177
+ deltaY: 0,
178
+ dragStates: (0, selected_outline_drag_1.getSelectedOutlineDragStates)({
179
+ dragTargets: allDragTargets,
180
+ getDragOverrides,
181
+ timelinePosition: getCurrentFrame(),
182
+ }),
183
+ lastValues: new Map(),
184
+ };
185
+ })();
186
+ keyboardNudgeSessionRef.current = activeSession;
187
+ const nextDeltas = (0, selected_outline_drag_1.getSelectedOutlineKeyboardNudgeDeltas)({
188
+ deltaX: activeSession.deltaX,
189
+ deltaY: activeSession.deltaY,
190
+ direction,
191
+ shiftKey: event.shiftKey,
192
+ });
193
+ activeSession.deltaX = nextDeltas.deltaX;
194
+ activeSession.deltaY = nextDeltas.deltaY;
195
+ const lastValues = (0, selected_outline_drag_1.getSelectedOutlineDragValues)({
196
+ dragStates: activeSession.dragStates,
197
+ deltaX: activeSession.deltaX,
198
+ deltaY: activeSession.deltaY,
199
+ });
200
+ activeSession.lastValues = lastValues;
201
+ for (const dragState of activeSession.dragStates) {
202
+ const value = lastValues.get(dragState.key);
203
+ if (value === undefined) {
204
+ throw new Error('Expected drag value to be available');
205
+ }
206
+ if (dragState.target.propStatus.status === 'keyframed') {
207
+ setDragOverrides(dragState.target.nodePath, selected_outline_types_1.translateFieldKey, remotion_1.Internals.makeKeyframedDragOverride({
208
+ status: dragState.target.propStatus,
209
+ frame: dragState.sourceFrame,
210
+ value,
211
+ }));
212
+ }
213
+ else {
214
+ setDragOverrides(dragState.target.nodePath, selected_outline_types_1.translateFieldKey, remotion_1.Internals.makeStaticDragOverride(value));
215
+ }
216
+ }
217
+ }, [
218
+ currentSelection,
219
+ getCurrentFrame,
220
+ getDragOverrides,
221
+ getLatestOutlineTargetByKey,
222
+ getSelectableOutlines,
223
+ seekWithArrowKey,
224
+ setDragOverrides,
225
+ ]);
226
+ const onArrowKeyUp = (0, react_1.useCallback)((event) => {
227
+ const direction = (0, selected_outline_drag_1.getSelectedOutlineKeyboardNudgeDirection)(event.key);
228
+ if (direction === null || keyboardNudgeSessionRef.current === null) {
229
+ return;
230
+ }
231
+ event.preventDefault();
232
+ saveKeyboardNudgeSession();
233
+ }, [saveKeyboardNudgeSession]);
234
+ (0, react_1.useEffect)(() => {
235
+ const keyDownBindings = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].map((key) => keybindings.registerKeybinding({
236
+ event: 'keydown',
237
+ key,
238
+ callback: onArrowKeyDown,
239
+ commandCtrlKey: false,
240
+ preventDefault: false,
241
+ triggerIfInputFieldFocused: false,
242
+ keepRegisteredWhenNotHighestContext: false,
243
+ }));
244
+ const keyUpBindings = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].map((key) => keybindings.registerKeybinding({
245
+ event: 'keyup',
246
+ key,
247
+ callback: onArrowKeyUp,
248
+ commandCtrlKey: false,
249
+ preventDefault: false,
250
+ triggerIfInputFieldFocused: false,
251
+ keepRegisteredWhenNotHighestContext: false,
252
+ }));
253
+ return () => {
254
+ for (const binding of [...keyDownBindings, ...keyUpBindings]) {
255
+ binding.unregister();
256
+ }
257
+ };
258
+ }, [keybindings, onArrowKeyDown, onArrowKeyUp]);
259
+ return null;
260
+ };
261
+ exports.SelectedOutlineKeyboardControls = SelectedOutlineKeyboardControls;
@@ -1,23 +1,16 @@
1
1
  import React from 'react';
2
- import { type SelectedOutline } from './selected-outline-geometry';
3
- import { type SelectedOutlineTarget } from './selected-outline-types';
2
+ import { orderOutlinesForRendering } from './selected-outline-order';
3
+ export { orderOutlinesForRendering };
4
4
  export { applySelectedOutlineDragAxisLock, applySelectedOutlineTransformOriginAxisLock, compensateTranslateForTransformOrigin, getSelectedOutlineActiveSchema, getSelectedOutlineCropDragChanges, getSelectedOutlineCropDragValues, getSelectedOutlineCropFollowingTransformOrigin, getSelectedOutlineDragChanges, getSelectedOutlineDragValues, getSelectedOutlineKeyboardNudgeDelta, getSelectedOutlineKeyboardNudgeDeltas, getSelectedOutlineRotationDragChanges, getSelectedOutlineRotationDragStates, getSelectedOutlineRotationDragValues, getSelectedOutlineScaleDragChanges, getSelectedOutlineScaleDragStates, getSelectedOutlineScaleDragValues, getSelectedOutlineScaleEdgeInfo, getSelectedOutlineTransformOriginDragChanges, getSelectedOutlineTransformOriginLockedAxis, isSelectedOutlineDragPastThreshold, selectedOutlineTransformOriginSnapThresholdPx, selectedOutlineUvSnapThresholdPx, snapSelectedOutlineRotationDeltaDegrees, snapSelectedOutlineTransformOriginUv, snapSelectedOutlineUv, } from './selected-outline-drag';
5
5
  export { getOutlineSelectionInteraction, getSelectedCropInfo, getSelectedEffectFieldsBySequenceKey, getSelectedOutlineRotationCornerInfo, getSelectedOutlineRotationDeltaDegrees, getSelectedOutlineRotationPivot, getSelectedSequenceKeys, getSequencesWithSelectableOutlines, getTransformedSvgViewportPoints, } from './selected-outline-measurement';
6
6
  export { selectedOutlineDragThresholdPx } from './selected-outline-types';
7
7
  export type { SelectedOutlineDragState, SelectedOutlineRotationDragState, SelectedOutlineScaleDragState, } from './selected-outline-types';
8
- type OutlineSequenceParent = {
9
- readonly id: string;
10
- readonly parent: string | null;
11
- };
12
- export declare const orderOutlinesForRendering: ({ outlines, sequences, targetsByKey, }: {
13
- readonly outlines: readonly SelectedOutline[];
14
- readonly sequences: readonly OutlineSequenceParent[];
15
- readonly targetsByKey: ReadonlyMap<string, SelectedOutlineTarget>;
16
- }) => readonly SelectedOutline[];
17
- export declare const SelectedOutlineOverlay: React.FC<{
8
+ type SelectedOutlineOverlayProps = {
9
+ readonly canvasHovered: boolean;
18
10
  readonly compositionHeight: number;
19
11
  readonly compositionWidth: number;
20
12
  readonly scale: number;
21
13
  readonly translationX: number;
22
14
  readonly translationY: number;
23
- }>;
15
+ };
16
+ export declare const SelectedOutlineOverlay: React.NamedExoticComponent<SelectedOutlineOverlayProps>;