@remotion/studio 4.0.478 → 4.0.481
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/components/AssetSelector.js +8 -14
- package/dist/components/AudioWaveform.js +19 -11
- package/dist/components/Button.d.ts +2 -0
- package/dist/components/Button.js +9 -6
- package/dist/components/CompactExplanation.d.ts +12 -0
- package/dist/components/CompactExplanation.js +52 -0
- package/dist/components/CompositionSelector.js +2 -4
- package/dist/components/CurrentAsset.d.ts +3 -1
- package/dist/components/CurrentAsset.js +42 -34
- package/dist/components/CurrentComposition.d.ts +1 -1
- package/dist/components/CurrentComposition.js +38 -31
- package/dist/components/CurrentCompositionSideEffects.d.ts +0 -3
- package/dist/components/CurrentCompositionSideEffects.js +1 -37
- package/dist/components/DefaultPropsEditor.d.ts +12 -2
- package/dist/components/DefaultPropsEditor.js +2 -2
- package/dist/components/Editor.js +2 -5
- package/dist/components/EditorContent.js +2 -1
- package/dist/components/EffectPickerModal.d.ts +5 -0
- package/dist/components/EffectPickerModal.js +179 -0
- package/dist/components/ExpandedTracksProvider.d.ts +1 -0
- package/dist/components/ExpandedTracksProvider.js +81 -7
- package/dist/components/GlobalKeybindings.d.ts +3 -1
- package/dist/components/GlobalKeybindings.js +104 -10
- package/dist/components/InspectorInfoHeader.d.ts +11 -0
- package/dist/components/InspectorInfoHeader.js +55 -0
- package/dist/components/InspectorPanel/DefaultInspector.d.ts +8 -0
- package/dist/components/InspectorPanel/DefaultInspector.js +93 -0
- package/dist/components/InspectorPanel/EasingInspector.d.ts +5 -0
- package/dist/components/InspectorPanel/EasingInspector.js +41 -0
- package/dist/components/InspectorPanel/GuideInspector.d.ts +7 -0
- package/dist/components/InspectorPanel/GuideInspector.js +55 -0
- package/dist/components/InspectorPanel/KeyframeInspector.d.ts +7 -0
- package/dist/components/InspectorPanel/KeyframeInspector.js +109 -0
- package/dist/components/InspectorPanel/SelectedInspector.d.ts +5 -0
- package/dist/components/InspectorPanel/SelectedInspector.js +26 -0
- package/dist/components/InspectorPanel/SequenceSelectionInspector.d.ts +5 -0
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +117 -0
- package/dist/components/InspectorPanel/common.d.ts +15 -0
- package/dist/components/InspectorPanel/common.js +18 -0
- package/dist/components/InspectorPanel/inspector-selection.d.ts +10 -0
- package/dist/components/InspectorPanel/inspector-selection.js +35 -0
- package/dist/components/InspectorPanel/styles.d.ts +28 -0
- package/dist/components/InspectorPanel/styles.js +196 -0
- package/dist/components/InspectorPanel/use-track-for-selection.d.ts +2 -0
- package/dist/components/InspectorPanel/use-track-for-selection.js +22 -0
- package/dist/components/InspectorPanel.d.ts +8 -0
- package/dist/components/InspectorPanel.js +26 -0
- package/dist/components/InspectorPanelLayout.d.ts +1 -0
- package/dist/components/InspectorPanelLayout.js +4 -0
- package/dist/components/InspectorSequenceSection.d.ts +19 -0
- package/dist/components/InspectorSequenceSection.js +157 -0
- package/dist/components/InspectorSourceLocation.d.ts +7 -0
- package/dist/components/InspectorSourceLocation.js +71 -0
- package/dist/components/KeyboardShortcutsExplainer.js +10 -2
- package/dist/components/Modals.js +3 -3
- package/dist/components/NewComposition/InputDragger.js +1 -1
- package/dist/components/NewComposition/RemInput.d.ts +1 -0
- package/dist/components/NewComposition/RemInput.js +8 -2
- package/dist/components/NewComposition/RemTextarea.d.ts +1 -0
- package/dist/components/NewComposition/RemTextarea.js +8 -2
- package/dist/components/NewComposition/ValidationMessage.d.ts +3 -0
- package/dist/components/NewComposition/ValidationMessage.js +16 -5
- package/dist/components/OptionsPanel.d.ts +1 -1
- package/dist/components/OptionsPanel.js +8 -17
- package/dist/components/QuickSwitcher/QuickSwitcherContent.js +2 -7
- package/dist/components/QuickSwitcher/QuickSwitcherResult.js +3 -10
- package/dist/components/QuickSwitcher/shared.d.ts +4 -0
- package/dist/components/QuickSwitcher/shared.js +24 -0
- package/dist/components/RenderModal/DataEditor.d.ts +29 -2
- package/dist/components/RenderModal/DataEditor.js +107 -56
- package/dist/components/RenderModal/RenderModalJSONPropsEditor.d.ts +1 -0
- package/dist/components/RenderModal/RenderModalJSONPropsEditor.js +25 -7
- package/dist/components/RenderModal/SchemaEditor/Fieldset.d.ts +2 -1
- package/dist/components/RenderModal/SchemaEditor/Fieldset.js +10 -5
- package/dist/components/RenderModal/SchemaEditor/SchemaEditor.d.ts +4 -0
- package/dist/components/RenderModal/SchemaEditor/SchemaEditor.js +27 -4
- package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.d.ts +12 -4
- package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.js +23 -9
- package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +3 -3
- package/dist/components/RenderModal/SchemaEditor/SchemaSeparationLine.js +8 -1
- package/dist/components/RenderModal/SchemaEditor/ZodColorEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodDateEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodErrorMessages.d.ts +1 -0
- package/dist/components/RenderModal/SchemaEditor/ZodErrorMessages.js +23 -6
- package/dist/components/RenderModal/SchemaEditor/ZodFieldValidation.js +2 -2
- package/dist/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +2 -1
- package/dist/components/RenderModal/SchemaEditor/ZodNumberEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodObjectEditor.js +9 -11
- package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodStringEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodTextareaEditor.js +1 -1
- package/dist/components/RenderModal/WarningIndicatorButton.d.ts +1 -0
- package/dist/components/RenderModal/WarningIndicatorButton.js +17 -4
- package/dist/components/RenderModal/get-render-modal-warnings.d.ts +2 -1
- package/dist/components/RenderModal/get-render-modal-warnings.js +6 -3
- package/dist/components/RendersTab.js +1 -1
- package/dist/components/ResetZoomButton.d.ts +2 -1
- package/dist/components/ResetZoomButton.js +5 -1
- package/dist/components/SegmentedControl.d.ts +3 -0
- package/dist/components/SegmentedControl.js +11 -5
- package/dist/components/SelectedOutlineElement.js +96 -24
- package/dist/components/SelectedOutlineOverlay.d.ts +1 -1
- package/dist/components/SelectedOutlineOverlay.js +44 -30
- package/dist/components/SelectedOutlineUvControls.d.ts +9 -0
- package/dist/components/SelectedOutlineUvControls.js +64 -10
- package/dist/components/Tabs/index.js +4 -4
- package/dist/components/Timeline/EasingEditorModal.d.ts +5 -4
- package/dist/components/Timeline/EasingEditorModal.js +597 -124
- package/dist/components/Timeline/KeyframeSettingsModal.d.ts +2 -2
- package/dist/components/Timeline/SubscribeToNodePaths.d.ts +2 -2
- package/dist/components/Timeline/Timeline.js +9 -9
- package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +15 -3
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +85 -1
- package/dist/components/Timeline/TimelineDeleteKeybindings.js +10 -3
- package/dist/components/Timeline/TimelineEffectItem.d.ts +2 -2
- package/dist/components/Timeline/TimelineEffectItem.js +1 -1
- package/dist/components/Timeline/TimelineEffectPropItem.d.ts +8 -0
- package/dist/components/Timeline/TimelineEffectPropItem.js +25 -21
- package/dist/components/Timeline/TimelineExpandArrowButton.js +42 -2
- package/dist/components/Timeline/TimelineExpandedRow.d.ts +5 -2
- package/dist/components/Timeline/TimelineExpandedRow.js +6 -6
- package/dist/components/Timeline/TimelineExpandedSection.d.ts +1 -1
- package/dist/components/Timeline/TimelineExpandedSection.js +10 -25
- package/dist/components/Timeline/TimelineKeyframeControls.d.ts +8 -2
- package/dist/components/Timeline/TimelineKeyframeControls.js +24 -3
- package/dist/components/Timeline/TimelineKeyframeEasingLine.js +2 -47
- package/dist/components/Timeline/TimelineKeyframedValue.d.ts +1 -1
- package/dist/components/Timeline/TimelineKeyframedValue.js +8 -10
- package/dist/components/Timeline/TimelineNumberField.js +5 -11
- package/dist/components/Timeline/TimelineRotationField.js +5 -6
- package/dist/components/Timeline/TimelineRowChrome.d.ts +2 -0
- package/dist/components/Timeline/TimelineRowChrome.js +5 -3
- package/dist/components/Timeline/TimelineScaleField.js +4 -8
- package/dist/components/Timeline/TimelineSelection.d.ts +28 -2
- package/dist/components/Timeline/TimelineSelection.js +342 -61
- package/dist/components/Timeline/TimelineSequence.js +19 -3
- package/dist/components/Timeline/TimelineSequenceItem.js +68 -64
- package/dist/components/Timeline/TimelineSequencePropItem.d.ts +12 -2
- package/dist/components/Timeline/TimelineSequencePropItem.js +57 -53
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +6 -4
- package/dist/components/Timeline/TimelineTransformOriginField.js +4 -5
- package/dist/components/Timeline/TimelineTranslateField.js +4 -5
- package/dist/components/Timeline/TimelineUvCoordinateField.js +4 -4
- package/dist/components/Timeline/call-add-keyframe.d.ts +4 -4
- package/dist/components/Timeline/call-delete-keyframe.d.ts +4 -4
- package/dist/components/Timeline/call-move-keyframe.d.ts +2 -2
- package/dist/components/Timeline/call-update-keyframe-settings.d.ts +3 -3
- package/dist/components/Timeline/delete-selected-timeline-item.d.ts +2 -1
- package/dist/components/Timeline/delete-selected-timeline-item.js +27 -1
- package/dist/components/Timeline/find-track-for-node-path-info.js +2 -2
- package/dist/components/Timeline/get-node-keyframes.d.ts +7 -0
- package/dist/components/Timeline/get-node-keyframes.js +26 -1
- package/dist/components/Timeline/parse-keyframe-field-from-node-path.js +2 -2
- package/dist/components/Timeline/reset-selected-timeline-props.d.ts +3 -3
- package/dist/components/Timeline/reset-selected-timeline-props.js +34 -7
- package/dist/components/Timeline/save-effect-prop.d.ts +2 -2
- package/dist/components/Timeline/save-sequence-prop.d.ts +2 -2
- package/dist/components/Timeline/sequence-props-subscription-store.d.ts +3 -3
- package/dist/components/Timeline/timeline-expanded-filter.d.ts +12 -0
- package/dist/components/Timeline/timeline-expanded-filter.js +38 -0
- package/dist/components/Timeline/timeline-field-display-utils.d.ts +5 -0
- package/dist/components/Timeline/timeline-field-display-utils.js +244 -0
- package/dist/components/Timeline/update-selected-easing.d.ts +47 -4
- package/dist/components/Timeline/update-selected-easing.js +40 -9
- package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +50 -18
- package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.d.ts +13 -0
- package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +73 -0
- package/dist/components/Timeline/use-sequence-props-subscription.d.ts +3 -3
- package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +12 -0
- package/dist/components/Timeline/use-timeline-expanded-tree.js +60 -0
- package/dist/components/Timeline/use-timeline-height.js +51 -7
- package/dist/components/Timeline/use-timeline-keyframe-drag.js +12 -6
- package/dist/components/TopPanel.js +1 -1
- package/dist/components/VisualControls/VisualControlsContent.d.ts +1 -1
- package/dist/components/VisualControls/VisualControlsContent.js +4 -5
- package/dist/components/effect-drag-and-drop.d.ts +10 -0
- package/dist/components/effect-drag-and-drop.js +17 -8
- package/dist/components/effect-picker-search.d.ts +5 -0
- package/dist/components/effect-picker-search.js +77 -0
- package/dist/components/selected-outline-drag.d.ts +21 -2
- package/dist/components/selected-outline-drag.js +31 -6
- package/dist/components/selected-outline-measurement.js +48 -14
- package/dist/components/selected-outline-types.d.ts +7 -7
- package/dist/components/selected-outline-uv.d.ts +4 -3
- package/dist/components/selected-outline-uv.js +6 -2
- package/dist/error-overlay/remotion-overlay/ErrorLoader.js +8 -1
- package/dist/esm/{chunk-hrw9799x.js → chunk-4rq5gt8c.js} +30557 -26640
- package/dist/esm/internals.mjs +30557 -26640
- package/dist/esm/previewEntry.mjs +18584 -14665
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/migrate-expanded-tracks-for-subscription-key.js +3 -3
- package/dist/helpers/render-codec-label.d.ts +2 -0
- package/dist/helpers/render-codec-label.js +49 -0
- package/dist/helpers/timeline-layout.d.ts +4 -4
- package/dist/helpers/use-media-metadata.d.ts +8 -2
- package/dist/helpers/use-media-metadata.js +17 -4
- package/dist/state/modals.d.ts +9 -4
- package/package.json +12 -12
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useTimelineRowContainsSelection = exports.useTimelineGuideSelection = exports.useTimelineEasingSelection = exports.useTimelineKeyframeSelection = exports.useTimelineRowSelection = exports.useTimelineMarqueeSelectableItem = exports.useTimelineMarqueeSelection = exports.useCurrentTimelineSelectionStateAsRef = exports.TIMELINE_SCRUBBER_ATTR = exports.TIMELINE_MARQUEE_ITEM_ATTR = exports.useTimelineSelection = exports.TimelineSelectionProvider = exports.TimelineSelectAllKeybindings = exports.getTimelineSequenceSelectionKey = exports.getSelectableTimelineSequenceSelections = exports.getTimelineSelectionKey = exports.getTimelineSelectionFromNodePathInfo = exports.getTimelineMarqueeSelection = exports.timelineMarqueeRectsIntersect = exports.getClampedTimelineMarqueePoint = exports.getNormalizedTimelineMarqueeRect = exports.getTimelineSelectionAfterInteraction = exports.shouldSelectTimelineRowOnPointerDown = exports.isTimelineSelectionModifierEvent = exports.TIMELINE_TICKS_BACKGROUND = exports.TIMELINE_BACKGROUND = exports.getTimelineSelectedTrackHighlightStyle = exports.getTimelineColor = exports.getTimelineSelectedLabelStyle = exports.TIMELINE_SELECTED_LABEL_HORIZONTAL_PADDING = exports.TIMELINE_SELECTED_LABEL_TEXT = exports.TIMELINE_SELECTED_LABEL_BACKGROUND = exports.TIMELINE_SELECTED_BACKGROUND = void 0;
|
|
3
|
+
exports.useTimelineRowContainsSelection = exports.useTimelineGuideSelection = exports.useTimelineEasingSelection = exports.useTimelineKeyframeSelection = exports.useTimelineRowSelection = exports.useTimelineFocusableItem = exports.useTimelineMarqueeSelectableItem = exports.useTimelineMarqueeSelection = exports.useCurrentTimelineSelectionStateAsRef = exports.TIMELINE_SCRUBBER_ATTR = exports.TIMELINE_MARQUEE_ITEM_ATTR = exports.useTimelineSelection = exports.TimelineSelectionProvider = exports.TimelineSelectableItemsProvider = exports.TimelineSelectAllKeybindings = exports.getTimelineSequenceSelectionKey = exports.getSelectableTimelineItems = exports.getSelectableTimelineSequenceSelections = exports.getTimelineSelectionKey = exports.getTimelineSelectionFromNodePathInfo = exports.TimelineSelectionOrderProvider = exports.getTimelineMarqueeSelection = exports.timelineMarqueeRectsIntersect = exports.getClampedTimelineMarqueePoint = exports.getNormalizedTimelineMarqueeRect = exports.getAvailableTimelineSelectionState = exports.getTimelineSelectionAfterInteraction = exports.EMPTY_TIMELINE_SELECTION_STATE = exports.shouldSelectTimelineRowOnPointerDown = exports.isTimelineSelectionModifierEvent = exports.TIMELINE_TICKS_BACKGROUND = exports.TIMELINE_BACKGROUND = exports.getTimelineSelectedTrackHighlightStyle = exports.getTimelineColor = exports.getTimelineSelectedLabelStyle = exports.TIMELINE_SELECTED_LABEL_HORIZONTAL_PADDING = exports.TIMELINE_SELECTED_LABEL_TEXT = exports.TIMELINE_SELECTED_LABEL_BACKGROUND = exports.TIMELINE_SELECTED_BACKGROUND = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
6
6
|
const react_1 = require("react");
|
|
7
|
+
const remotion_1 = require("remotion");
|
|
7
8
|
const client_id_1 = require("../../helpers/client-id");
|
|
8
9
|
const colors_1 = require("../../helpers/colors");
|
|
9
10
|
const timeline_layout_1 = require("../../helpers/timeline-layout");
|
|
10
11
|
const timeline_node_path_key_1 = require("../../helpers/timeline-node-path-key");
|
|
11
12
|
const use_keybinding_1 = require("../../helpers/use-keybinding");
|
|
12
13
|
const z_index_1 = require("../../state/z-index");
|
|
14
|
+
const ExpandedTracksProvider_1 = require("../ExpandedTracksProvider");
|
|
15
|
+
const get_node_keyframes_1 = require("./get-node-keyframes");
|
|
16
|
+
const get_timeline_easing_segments_1 = require("./get-timeline-easing-segments");
|
|
17
|
+
const timeline_expanded_filter_1 = require("./timeline-expanded-filter");
|
|
18
|
+
const timeline_refs_1 = require("./timeline-refs");
|
|
13
19
|
const TimelineClipboardKeybindings_1 = require("./TimelineClipboardKeybindings");
|
|
14
20
|
const TimelineDeleteKeybindings_1 = require("./TimelineDeleteKeybindings");
|
|
15
21
|
exports.TIMELINE_SELECTED_BACKGROUND = '#3B3F42';
|
|
@@ -56,6 +62,10 @@ const shouldSelectTimelineRowOnPointerDown = ({ selected, shiftKey, metaKey, ctr
|
|
|
56
62
|
return (!selected || (0, exports.isTimelineSelectionModifierEvent)({ shiftKey, metaKey, ctrlKey }));
|
|
57
63
|
};
|
|
58
64
|
exports.shouldSelectTimelineRowOnPointerDown = shouldSelectTimelineRowOnPointerDown;
|
|
65
|
+
exports.EMPTY_TIMELINE_SELECTION_STATE = {
|
|
66
|
+
selectedItems: [],
|
|
67
|
+
anchor: null,
|
|
68
|
+
};
|
|
59
69
|
const getTimelineSelectionType = (item) => item.type;
|
|
60
70
|
const areTimelineSelectionTypesCompatible = (firstType, secondType) => {
|
|
61
71
|
if (firstType === secondType) {
|
|
@@ -144,6 +154,32 @@ const getTimelineSelectionAfterInteraction = ({ currentState, clickedItem, inter
|
|
|
144
154
|
};
|
|
145
155
|
};
|
|
146
156
|
exports.getTimelineSelectionAfterInteraction = getTimelineSelectionAfterInteraction;
|
|
157
|
+
const getAvailableTimelineSelectionState = ({ availableKeys, availableItemsByKey, state, }) => {
|
|
158
|
+
if (state.selectedItems.length === 0 && state.anchor === null) {
|
|
159
|
+
return state;
|
|
160
|
+
}
|
|
161
|
+
const getCurrentSelectionItem = (item) => {
|
|
162
|
+
var _a;
|
|
163
|
+
const key = (0, exports.getTimelineSelectionKey)(item);
|
|
164
|
+
if (!availableKeys.has(key)) {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
return (_a = availableItemsByKey === null || availableItemsByKey === void 0 ? void 0 : availableItemsByKey.get(key)) !== null && _a !== void 0 ? _a : item;
|
|
168
|
+
};
|
|
169
|
+
const selectedItems = state.selectedItems
|
|
170
|
+
.map(getCurrentSelectionItem)
|
|
171
|
+
.filter((item) => item !== null);
|
|
172
|
+
const anchor = state.anchor ? getCurrentSelectionItem(state.anchor) : null;
|
|
173
|
+
if (selectedItems.length === state.selectedItems.length &&
|
|
174
|
+
anchor === state.anchor) {
|
|
175
|
+
return state;
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
selectedItems,
|
|
179
|
+
anchor,
|
|
180
|
+
};
|
|
181
|
+
};
|
|
182
|
+
exports.getAvailableTimelineSelectionState = getAvailableTimelineSelectionState;
|
|
147
183
|
const getNormalizedTimelineMarqueeRect = ({ startX, startY, currentX, currentY, }) => ({
|
|
148
184
|
left: Math.min(startX, currentX),
|
|
149
185
|
top: Math.min(startY, currentY),
|
|
@@ -211,8 +247,8 @@ const defaultTimelineSelectionContextValue = {
|
|
|
211
247
|
isSelected: () => false,
|
|
212
248
|
selectItem: () => undefined,
|
|
213
249
|
selectItems: () => undefined,
|
|
214
|
-
registerSelectableItem: () => () => undefined,
|
|
215
250
|
registerMarqueeSelectableItem: () => () => undefined,
|
|
251
|
+
registerFocusableItem: () => () => undefined,
|
|
216
252
|
getMarqueeSelection: () => ({
|
|
217
253
|
lockedSelectionKind: null,
|
|
218
254
|
selectedItems: [],
|
|
@@ -221,7 +257,16 @@ const defaultTimelineSelectionContextValue = {
|
|
|
221
257
|
clearSelection: () => undefined,
|
|
222
258
|
};
|
|
223
259
|
const TimelineSelectionContext = (0, react_1.createContext)(defaultTimelineSelectionContextValue);
|
|
260
|
+
const EMPTY_SELECTABLE_TIMELINE_ITEMS = [];
|
|
261
|
+
const SelectableTimelineItemsContext = (0, react_1.createContext)({ current: EMPTY_SELECTABLE_TIMELINE_ITEMS });
|
|
262
|
+
const TimelineSelectionOrderProvider = ({ children, items }) => {
|
|
263
|
+
const itemsRef = (0, react_1.useRef)(items);
|
|
264
|
+
itemsRef.current = items;
|
|
265
|
+
return (jsx_runtime_1.jsx(SelectableTimelineItemsContext.Provider, { value: itemsRef, children: children }));
|
|
266
|
+
};
|
|
267
|
+
exports.TimelineSelectionOrderProvider = TimelineSelectionOrderProvider;
|
|
224
268
|
const CurrentTimelineSelectionContext = (0, react_1.createContext)(null);
|
|
269
|
+
const TIMELINE_SELECTION_FOCUS_PADDING = 8;
|
|
225
270
|
const parseEffectIndex = (effectIndex) => {
|
|
226
271
|
const parsed = Number(effectIndex);
|
|
227
272
|
if (!Number.isInteger(parsed) || parsed < 0) {
|
|
@@ -310,6 +355,108 @@ const getSelectableTimelineSequenceSelections = (tracks) => {
|
|
|
310
355
|
});
|
|
311
356
|
};
|
|
312
357
|
exports.getSelectableTimelineSequenceSelections = getSelectableTimelineSequenceSelections;
|
|
358
|
+
const canEditEasingForInterpolationFunction = (interpolationFunction) => interpolationFunction === 'interpolate' ||
|
|
359
|
+
interpolationFunction === 'interpolateColors';
|
|
360
|
+
const getTimelineTreeNodeCanEditEasing = ({ node, nodePathInfo, propStatuses, }) => {
|
|
361
|
+
var _a;
|
|
362
|
+
if (node.kind !== 'field' || node.field === null) {
|
|
363
|
+
return false;
|
|
364
|
+
}
|
|
365
|
+
if (node.field.kind === 'sequence-field') {
|
|
366
|
+
const sequencePropStatus = (_a = remotion_1.Internals.getPropStatusesCtx(propStatuses, nodePathInfo.sequenceSubscriptionKey)) === null || _a === void 0 ? void 0 : _a[node.field.key];
|
|
367
|
+
return ((sequencePropStatus === null || sequencePropStatus === void 0 ? void 0 : sequencePropStatus.status) === 'keyframed' &&
|
|
368
|
+
canEditEasingForInterpolationFunction(sequencePropStatus.interpolationFunction));
|
|
369
|
+
}
|
|
370
|
+
const effectStatus = remotion_1.Internals.getEffectPropStatusesCtx({
|
|
371
|
+
propStatuses,
|
|
372
|
+
nodePath: nodePathInfo.sequenceSubscriptionKey,
|
|
373
|
+
effectIndex: node.field.effectIndex,
|
|
374
|
+
});
|
|
375
|
+
const effectPropStatus = effectStatus.type === 'can-update-effect'
|
|
376
|
+
? effectStatus.props[node.field.key]
|
|
377
|
+
: null;
|
|
378
|
+
return ((effectPropStatus === null || effectPropStatus === void 0 ? void 0 : effectPropStatus.status) === 'keyframed' &&
|
|
379
|
+
canEditEasingForInterpolationFunction(effectPropStatus.interpolationFunction));
|
|
380
|
+
};
|
|
381
|
+
const getSelectableTimelineItems = ({ getDragOverrides, getEffectDragOverrides, getIsExpanded, propStatuses, selectedItems, timeline, timelinePosition, }) => {
|
|
382
|
+
const selectedRowKeys = (0, timeline_expanded_filter_1.getSelectedTimelineExpandedRowKeys)(selectedItems);
|
|
383
|
+
return timeline.flatMap((track) => {
|
|
384
|
+
const { nodePathInfo } = track;
|
|
385
|
+
if (nodePathInfo === null) {
|
|
386
|
+
return [];
|
|
387
|
+
}
|
|
388
|
+
const sequenceSelection = (0, exports.getTimelineSelectionFromNodePathInfo)(nodePathInfo);
|
|
389
|
+
if (sequenceSelection === null) {
|
|
390
|
+
return [];
|
|
391
|
+
}
|
|
392
|
+
if (!getIsExpanded(nodePathInfo)) {
|
|
393
|
+
return [sequenceSelection];
|
|
394
|
+
}
|
|
395
|
+
const tree = (0, timeline_layout_1.buildTimelineTree)({
|
|
396
|
+
sequence: track.sequence,
|
|
397
|
+
nodePathInfo,
|
|
398
|
+
getDragOverrides,
|
|
399
|
+
getEffectDragOverrides,
|
|
400
|
+
propStatuses,
|
|
401
|
+
});
|
|
402
|
+
const filteredTree = (0, timeline_expanded_filter_1.filterTimelineExpandedTree)({
|
|
403
|
+
nodes: tree,
|
|
404
|
+
shouldShowNode: (node) => (0, timeline_expanded_filter_1.isTimelineExpandedNodeSelected)({
|
|
405
|
+
nodePathInfo: node.nodePathInfo,
|
|
406
|
+
selectedRowKeys,
|
|
407
|
+
}) ||
|
|
408
|
+
(0, get_node_keyframes_1.getNodeHasKeyframes)({
|
|
409
|
+
node,
|
|
410
|
+
nodePath: nodePathInfo.sequenceSubscriptionKey,
|
|
411
|
+
propStatuses,
|
|
412
|
+
getDragOverrides,
|
|
413
|
+
getEffectDragOverrides,
|
|
414
|
+
}),
|
|
415
|
+
});
|
|
416
|
+
const visibleTreeRows = (0, timeline_layout_1.flattenVisibleTreeNodes)({
|
|
417
|
+
nodes: filteredTree,
|
|
418
|
+
getIsExpanded,
|
|
419
|
+
});
|
|
420
|
+
return [
|
|
421
|
+
sequenceSelection,
|
|
422
|
+
...visibleTreeRows.flatMap(({ node }) => {
|
|
423
|
+
const rowSelection = (0, exports.getTimelineSelectionFromNodePathInfo)(node.nodePathInfo);
|
|
424
|
+
if (rowSelection === null) {
|
|
425
|
+
return [];
|
|
426
|
+
}
|
|
427
|
+
const keyframes = (0, get_node_keyframes_1.getNodeKeyframes)({
|
|
428
|
+
node,
|
|
429
|
+
nodePath: nodePathInfo.sequenceSubscriptionKey,
|
|
430
|
+
propStatuses,
|
|
431
|
+
keyframeDisplayOffset: track.keyframeDisplayOffset,
|
|
432
|
+
getDragOverrides,
|
|
433
|
+
getEffectDragOverrides,
|
|
434
|
+
timelinePosition,
|
|
435
|
+
});
|
|
436
|
+
const keyframeSelections = keyframes.map((keyframe) => ({
|
|
437
|
+
type: 'keyframe',
|
|
438
|
+
nodePathInfo: node.nodePathInfo,
|
|
439
|
+
frame: keyframe.frame,
|
|
440
|
+
}));
|
|
441
|
+
const easingSelections = getTimelineTreeNodeCanEditEasing({
|
|
442
|
+
node,
|
|
443
|
+
nodePathInfo,
|
|
444
|
+
propStatuses,
|
|
445
|
+
})
|
|
446
|
+
? (0, get_timeline_easing_segments_1.getTimelineEasingSegments)(keyframes).map((segment) => ({
|
|
447
|
+
type: 'easing',
|
|
448
|
+
nodePathInfo: node.nodePathInfo,
|
|
449
|
+
fromFrame: segment.fromFrame,
|
|
450
|
+
toFrame: segment.toFrame,
|
|
451
|
+
segmentIndex: segment.segmentIndex,
|
|
452
|
+
}))
|
|
453
|
+
: [];
|
|
454
|
+
return [rowSelection, ...easingSelections, ...keyframeSelections];
|
|
455
|
+
}),
|
|
456
|
+
];
|
|
457
|
+
});
|
|
458
|
+
};
|
|
459
|
+
exports.getSelectableTimelineItems = getSelectableTimelineItems;
|
|
313
460
|
const getTimelineSequenceSelectionKey = (nodePathInfo) => (0, timeline_node_path_key_1.timelineNodePathInfoToKey)({ ...nodePathInfo, auxiliaryKeys: [] });
|
|
314
461
|
exports.getTimelineSequenceSelectionKey = getTimelineSequenceSelectionKey;
|
|
315
462
|
const TimelineSelectAllKeybindings = ({ timeline }) => {
|
|
@@ -345,74 +492,196 @@ const TimelineSelectAllKeybindings = ({ timeline }) => {
|
|
|
345
492
|
return null;
|
|
346
493
|
};
|
|
347
494
|
exports.TimelineSelectAllKeybindings = TimelineSelectAllKeybindings;
|
|
495
|
+
const TimelineEscapeKeybindings = () => {
|
|
496
|
+
const keybindings = (0, use_keybinding_1.useKeybinding)();
|
|
497
|
+
const currentSelection = (0, exports.useCurrentTimelineSelectionStateAsRef)();
|
|
498
|
+
(0, react_1.useEffect)(() => {
|
|
499
|
+
const escape = keybindings.registerKeybinding({
|
|
500
|
+
event: 'keydown',
|
|
501
|
+
key: 'Escape',
|
|
502
|
+
callback: (event) => {
|
|
503
|
+
const { selectedItems, clearSelection } = currentSelection.current;
|
|
504
|
+
if (selectedItems.length === 0) {
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
clearSelection();
|
|
508
|
+
event.preventDefault();
|
|
509
|
+
},
|
|
510
|
+
commandCtrlKey: false,
|
|
511
|
+
preventDefault: false,
|
|
512
|
+
triggerIfInputFieldFocused: false,
|
|
513
|
+
keepRegisteredWhenNotHighestContext: false,
|
|
514
|
+
});
|
|
515
|
+
return () => {
|
|
516
|
+
escape.unregister();
|
|
517
|
+
};
|
|
518
|
+
}, [currentSelection, keybindings]);
|
|
519
|
+
return null;
|
|
520
|
+
};
|
|
521
|
+
const TimelineSelectableItemsProvider = ({ children, timeline }) => {
|
|
522
|
+
const { getIsExpanded } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksGetterContext);
|
|
523
|
+
const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
|
|
524
|
+
const { getDragOverrides, getEffectDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
525
|
+
const timelinePosition = remotion_1.Internals.Timeline.useTimelinePosition();
|
|
526
|
+
const { selectedItems } = (0, exports.useTimelineSelection)();
|
|
527
|
+
const selectableItems = (0, react_1.useMemo)(() => (0, exports.getSelectableTimelineItems)({
|
|
528
|
+
getDragOverrides,
|
|
529
|
+
getEffectDragOverrides,
|
|
530
|
+
getIsExpanded,
|
|
531
|
+
propStatuses,
|
|
532
|
+
selectedItems,
|
|
533
|
+
timeline,
|
|
534
|
+
timelinePosition,
|
|
535
|
+
}), [
|
|
536
|
+
getDragOverrides,
|
|
537
|
+
getEffectDragOverrides,
|
|
538
|
+
getIsExpanded,
|
|
539
|
+
propStatuses,
|
|
540
|
+
selectedItems,
|
|
541
|
+
timeline,
|
|
542
|
+
timelinePosition,
|
|
543
|
+
]);
|
|
544
|
+
return (jsx_runtime_1.jsx(exports.TimelineSelectionOrderProvider, { items: selectableItems, children: children }));
|
|
545
|
+
};
|
|
546
|
+
exports.TimelineSelectableItemsProvider = TimelineSelectableItemsProvider;
|
|
348
547
|
const TimelineSelectionProvider = ({ children }) => {
|
|
349
548
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
549
|
+
const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
550
|
+
const timelineSelectionScope = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'composition' ? canvasContent.compositionId : null;
|
|
551
|
+
const { expandParentTracks } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksSetterContext);
|
|
350
552
|
const canSelect = previewServerState.type === 'connected' &&
|
|
351
553
|
!window.remotion_isReadOnlyStudio;
|
|
352
554
|
const [selectedItems, setSelectedItems] = (0, react_1.useState)([]);
|
|
353
555
|
const selectionAnchor = (0, react_1.useRef)(null);
|
|
354
|
-
const
|
|
355
|
-
const selectableItems = (0, react_1.useRef)(new Map());
|
|
556
|
+
const selectionScope = (0, react_1.useRef)(null);
|
|
356
557
|
const marqueeSelectableItems = (0, react_1.useRef)(new Map());
|
|
357
|
-
const registrationCounter = (0, react_1.useRef)(0);
|
|
358
558
|
const marqueeRegistrationCounter = (0, react_1.useRef)(0);
|
|
559
|
+
const focusableItems = (0, react_1.useRef)(new Map());
|
|
560
|
+
const previousSingleSelectionKey = (0, react_1.useRef)(null);
|
|
359
561
|
(0, react_1.useEffect)(() => {
|
|
360
562
|
if (!canSelect) {
|
|
563
|
+
selectionScope.current = null;
|
|
564
|
+
selectionAnchor.current = null;
|
|
361
565
|
setSelectedItems([]);
|
|
362
566
|
}
|
|
363
567
|
}, [canSelect]);
|
|
364
568
|
const canSelectItem = (0, react_1.useCallback)((_item) => canSelect, [canSelect]);
|
|
365
|
-
const
|
|
569
|
+
const getCurrentAvailableSelectionState = (0, react_1.useCallback)((currentSelectedItems) => {
|
|
570
|
+
if (selectionScope.current !== timelineSelectionScope) {
|
|
571
|
+
return exports.EMPTY_TIMELINE_SELECTION_STATE;
|
|
572
|
+
}
|
|
573
|
+
return {
|
|
574
|
+
selectedItems: currentSelectedItems,
|
|
575
|
+
anchor: selectionAnchor.current,
|
|
576
|
+
};
|
|
577
|
+
}, [timelineSelectionScope]);
|
|
578
|
+
const availableSelectionState = getCurrentAvailableSelectionState(selectedItems);
|
|
579
|
+
const availableSelectedItems = availableSelectionState.selectedItems;
|
|
580
|
+
(0, react_1.useEffect)(() => {
|
|
581
|
+
if (availableSelectedItems.length !== 1) {
|
|
582
|
+
previousSingleSelectionKey.current = null;
|
|
583
|
+
return;
|
|
584
|
+
}
|
|
585
|
+
const selectedKey = (0, exports.getTimelineSelectionKey)(availableSelectedItems[0]);
|
|
586
|
+
if (previousSingleSelectionKey.current === selectedKey) {
|
|
587
|
+
return;
|
|
588
|
+
}
|
|
589
|
+
previousSingleSelectionKey.current = selectedKey;
|
|
590
|
+
const animationFrame = requestAnimationFrame(() => {
|
|
591
|
+
var _a;
|
|
592
|
+
const registered = (_a = focusableItems.current.get(selectedKey)) !== null && _a !== void 0 ? _a : marqueeSelectableItems.current.get(selectedKey);
|
|
593
|
+
const scrollParent = timeline_refs_1.timelineVerticalScroll.current;
|
|
594
|
+
const rect = registered === null || registered === void 0 ? void 0 : registered.getRect();
|
|
595
|
+
if (!scrollParent || !rect) {
|
|
596
|
+
return;
|
|
597
|
+
}
|
|
598
|
+
const parentRect = scrollParent.getBoundingClientRect();
|
|
599
|
+
if (rect.top < parentRect.top) {
|
|
600
|
+
scrollParent.scrollTop -=
|
|
601
|
+
parentRect.top - rect.top + TIMELINE_SELECTION_FOCUS_PADDING;
|
|
602
|
+
return;
|
|
603
|
+
}
|
|
604
|
+
if (rect.bottom > parentRect.bottom) {
|
|
605
|
+
scrollParent.scrollTop +=
|
|
606
|
+
rect.bottom - parentRect.bottom + TIMELINE_SELECTION_FOCUS_PADDING;
|
|
607
|
+
}
|
|
608
|
+
});
|
|
609
|
+
return () => cancelAnimationFrame(animationFrame);
|
|
610
|
+
}, [availableSelectedItems]);
|
|
611
|
+
const expandParentsForSelectionItems = (0, react_1.useCallback)((items) => {
|
|
612
|
+
for (const item of items) {
|
|
613
|
+
if (item.type === 'guide') {
|
|
614
|
+
continue;
|
|
615
|
+
}
|
|
616
|
+
expandParentTracks(item.nodePathInfo);
|
|
617
|
+
}
|
|
618
|
+
}, [expandParentTracks]);
|
|
619
|
+
const expandParentsForSelectionItem = (0, react_1.useCallback)((item) => {
|
|
620
|
+
if (item.type === 'guide') {
|
|
621
|
+
return;
|
|
622
|
+
}
|
|
623
|
+
expandParentTracks(item.nodePathInfo);
|
|
624
|
+
}, [expandParentTracks]);
|
|
625
|
+
(0, react_1.useEffect)(() => {
|
|
626
|
+
setSelectedItems((currentSelectedItems) => {
|
|
627
|
+
const nextState = selectionScope.current === timelineSelectionScope
|
|
628
|
+
? {
|
|
629
|
+
selectedItems: currentSelectedItems,
|
|
630
|
+
anchor: selectionAnchor.current,
|
|
631
|
+
}
|
|
632
|
+
: exports.EMPTY_TIMELINE_SELECTION_STATE;
|
|
633
|
+
selectionScope.current = timelineSelectionScope;
|
|
634
|
+
selectionAnchor.current = nextState.anchor;
|
|
635
|
+
if (nextState.selectedItems.length === currentSelectedItems.length &&
|
|
636
|
+
nextState.selectedItems.every((item, index) => item === currentSelectedItems[index])) {
|
|
637
|
+
return currentSelectedItems;
|
|
638
|
+
}
|
|
639
|
+
return nextState.selectedItems;
|
|
640
|
+
});
|
|
641
|
+
}, [timelineSelectionScope]);
|
|
642
|
+
const selectedKeys = (0, react_1.useMemo)(() => new Set(availableSelectedItems.map(exports.getTimelineSelectionKey)), [availableSelectedItems]);
|
|
366
643
|
const isSelected = (0, react_1.useCallback)((item) => {
|
|
367
644
|
return selectedKeys.has((0, exports.getTimelineSelectionKey)(item));
|
|
368
645
|
}, [selectedKeys]);
|
|
369
646
|
const selectItem = (0, react_1.useCallback)((item, interaction = {
|
|
370
647
|
shiftKey: false,
|
|
371
648
|
toggleKey: false,
|
|
372
|
-
}) => {
|
|
649
|
+
}, allSelectableItems = []) => {
|
|
373
650
|
if (!canSelectItem(item)) {
|
|
374
651
|
return;
|
|
375
652
|
}
|
|
653
|
+
expandParentsForSelectionItem(item);
|
|
376
654
|
setSelectedItems((currentSelectedItems) => {
|
|
377
|
-
const
|
|
378
|
-
...selectableItems.current.values(),
|
|
379
|
-
].sort((a, b) => {
|
|
380
|
-
var _a, _b;
|
|
381
|
-
return (((_a = selectableItemsOrder.current.get((0, exports.getTimelineSelectionKey)(a))) !== null && _a !== void 0 ? _a : 0) -
|
|
382
|
-
((_b = selectableItemsOrder.current.get((0, exports.getTimelineSelectionKey)(b))) !== null && _b !== void 0 ? _b : 0));
|
|
383
|
-
});
|
|
655
|
+
const currentSelectionState = getCurrentAvailableSelectionState(currentSelectedItems);
|
|
384
656
|
const nextState = (0, exports.getTimelineSelectionAfterInteraction)({
|
|
385
657
|
currentState: {
|
|
386
|
-
selectedItems:
|
|
387
|
-
anchor:
|
|
658
|
+
selectedItems: currentSelectionState.selectedItems,
|
|
659
|
+
anchor: currentSelectionState.anchor,
|
|
388
660
|
},
|
|
389
661
|
clickedItem: item,
|
|
390
662
|
interaction,
|
|
391
|
-
allSelectableItems
|
|
663
|
+
allSelectableItems,
|
|
392
664
|
});
|
|
665
|
+
selectionScope.current = timelineSelectionScope;
|
|
393
666
|
selectionAnchor.current = nextState.anchor;
|
|
394
667
|
return nextState.selectedItems;
|
|
395
668
|
});
|
|
396
|
-
}, [
|
|
669
|
+
}, [
|
|
670
|
+
canSelectItem,
|
|
671
|
+
expandParentsForSelectionItem,
|
|
672
|
+
getCurrentAvailableSelectionState,
|
|
673
|
+
timelineSelectionScope,
|
|
674
|
+
]);
|
|
397
675
|
const selectItems = (0, react_1.useCallback)((items) => {
|
|
398
676
|
if (!items.every(canSelectItem)) {
|
|
399
677
|
return;
|
|
400
678
|
}
|
|
679
|
+
selectionScope.current = timelineSelectionScope;
|
|
401
680
|
selectionAnchor.current =
|
|
402
681
|
items.length === 0 ? null : items[items.length - 1];
|
|
682
|
+
expandParentsForSelectionItems(items);
|
|
403
683
|
setSelectedItems(items);
|
|
404
|
-
}, [canSelectItem]);
|
|
405
|
-
const registerSelectableItem = (0, react_1.useCallback)((item) => {
|
|
406
|
-
const key = (0, exports.getTimelineSelectionKey)(item);
|
|
407
|
-
const registrationOrder = registrationCounter.current;
|
|
408
|
-
registrationCounter.current += 1;
|
|
409
|
-
selectableItems.current.set(key, item);
|
|
410
|
-
selectableItemsOrder.current.set(key, registrationOrder);
|
|
411
|
-
return () => {
|
|
412
|
-
selectableItems.current.delete(key);
|
|
413
|
-
selectableItemsOrder.current.delete(key);
|
|
414
|
-
};
|
|
415
|
-
}, []);
|
|
684
|
+
}, [canSelectItem, expandParentsForSelectionItems, timelineSelectionScope]);
|
|
416
685
|
const registerMarqueeSelectableItem = (0, react_1.useCallback)((item, getRect) => {
|
|
417
686
|
const key = (0, exports.getTimelineSelectionKey)(item);
|
|
418
687
|
const registrationOrder = marqueeRegistrationCounter.current;
|
|
@@ -426,6 +695,15 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
426
695
|
marqueeSelectableItems.current.delete(key);
|
|
427
696
|
};
|
|
428
697
|
}, []);
|
|
698
|
+
const registerFocusableItem = (0, react_1.useCallback)((item, getRect) => {
|
|
699
|
+
const key = (0, exports.getTimelineSelectionKey)(item);
|
|
700
|
+
focusableItems.current.set(key, {
|
|
701
|
+
getRect,
|
|
702
|
+
});
|
|
703
|
+
return () => {
|
|
704
|
+
focusableItems.current.delete(key);
|
|
705
|
+
};
|
|
706
|
+
}, []);
|
|
429
707
|
const getMarqueeSelectionForRect = (0, react_1.useCallback)((marqueeRect, lockedSelectionKind) => {
|
|
430
708
|
const candidates = [...marqueeSelectableItems.current.values()]
|
|
431
709
|
.sort((a, b) => a.order - b.order)
|
|
@@ -456,39 +734,40 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
456
734
|
});
|
|
457
735
|
}, [canSelectItem]);
|
|
458
736
|
const clearSelection = (0, react_1.useCallback)(() => {
|
|
737
|
+
selectionScope.current = null;
|
|
459
738
|
selectionAnchor.current = null;
|
|
460
739
|
setSelectedItems([]);
|
|
461
740
|
}, []);
|
|
462
741
|
const containsSelection = (0, react_1.useCallback)((nodePathInfo) => {
|
|
463
|
-
return
|
|
742
|
+
return availableSelectedItems.some((selected) => selected.type !== 'guide' &&
|
|
464
743
|
nodePathDescendsFrom(selected.nodePathInfo, nodePathInfo));
|
|
465
|
-
}, [
|
|
744
|
+
}, [availableSelectedItems]);
|
|
466
745
|
const value = (0, react_1.useMemo)(() => ({
|
|
467
746
|
canSelect,
|
|
468
|
-
selectedItems,
|
|
747
|
+
selectedItems: availableSelectedItems,
|
|
469
748
|
isSelected,
|
|
470
749
|
selectItem,
|
|
471
750
|
selectItems,
|
|
472
|
-
registerSelectableItem,
|
|
473
751
|
registerMarqueeSelectableItem,
|
|
752
|
+
registerFocusableItem,
|
|
474
753
|
getMarqueeSelection: getMarqueeSelectionForRect,
|
|
475
754
|
containsSelection,
|
|
476
755
|
clearSelection,
|
|
477
756
|
}), [
|
|
478
757
|
canSelect,
|
|
479
|
-
|
|
758
|
+
availableSelectedItems,
|
|
480
759
|
isSelected,
|
|
481
760
|
selectItem,
|
|
482
761
|
selectItems,
|
|
483
|
-
registerSelectableItem,
|
|
484
762
|
registerMarqueeSelectableItem,
|
|
763
|
+
registerFocusableItem,
|
|
485
764
|
getMarqueeSelectionForRect,
|
|
486
765
|
containsSelection,
|
|
487
766
|
clearSelection,
|
|
488
767
|
]);
|
|
489
768
|
const currentSelection = (0, react_1.useRef)(value);
|
|
490
769
|
currentSelection.current = value;
|
|
491
|
-
return (jsx_runtime_1.jsx(CurrentTimelineSelectionContext.Provider, { value: currentSelection, children: jsx_runtime_1.jsxs(TimelineSelectionContext.Provider, { value: value, children: [children, jsx_runtime_1.jsx(TimelineClipboardKeybindings_1.TimelineClipboardKeybindings, {}), jsx_runtime_1.jsx(TimelineDeleteKeybindings_1.TimelineDeleteKeybindings, {})
|
|
770
|
+
return (jsx_runtime_1.jsx(CurrentTimelineSelectionContext.Provider, { value: currentSelection, children: jsx_runtime_1.jsxs(TimelineSelectionContext.Provider, { value: value, children: [children, jsx_runtime_1.jsx(TimelineEscapeKeybindings, {}), jsx_runtime_1.jsx(TimelineClipboardKeybindings_1.TimelineClipboardKeybindings, {}), jsx_runtime_1.jsx(TimelineDeleteKeybindings_1.TimelineDeleteKeybindings, {})
|
|
492
771
|
] }) }));
|
|
493
772
|
};
|
|
494
773
|
exports.TimelineSelectionProvider = TimelineSelectionProvider;
|
|
@@ -617,22 +896,31 @@ const useTimelineMarqueeSelectableItem = (item, ref) => {
|
|
|
617
896
|
}, [item, ref, registerMarqueeSelectableItem]);
|
|
618
897
|
};
|
|
619
898
|
exports.useTimelineMarqueeSelectableItem = useTimelineMarqueeSelectableItem;
|
|
620
|
-
const
|
|
621
|
-
const {
|
|
622
|
-
const selectionItem = (0, react_1.useMemo)(() => (0, exports.getTimelineSelectionFromNodePathInfo)(nodePathInfo), [nodePathInfo]);
|
|
899
|
+
const useTimelineFocusableItem = (item, ref) => {
|
|
900
|
+
const { registerFocusableItem } = (0, exports.useTimelineSelection)();
|
|
623
901
|
(0, react_1.useEffect)(() => {
|
|
624
|
-
if (
|
|
902
|
+
if (item === null) {
|
|
625
903
|
return;
|
|
626
904
|
}
|
|
627
|
-
return
|
|
628
|
-
|
|
905
|
+
return registerFocusableItem(item, () => {
|
|
906
|
+
var _a;
|
|
907
|
+
var _b;
|
|
908
|
+
return (_b = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) !== null && _b !== void 0 ? _b : null;
|
|
909
|
+
});
|
|
910
|
+
}, [item, ref, registerFocusableItem]);
|
|
911
|
+
};
|
|
912
|
+
exports.useTimelineFocusableItem = useTimelineFocusableItem;
|
|
913
|
+
const useTimelineRowSelection = (nodePathInfo) => {
|
|
914
|
+
const { canSelect, isSelected, selectItem } = (0, exports.useTimelineSelection)();
|
|
915
|
+
const selectableTimelineItemsRef = (0, react_1.useContext)(SelectableTimelineItemsContext);
|
|
916
|
+
const selectionItem = (0, react_1.useMemo)(() => (0, exports.getTimelineSelectionFromNodePathInfo)(nodePathInfo), [nodePathInfo]);
|
|
629
917
|
const selected = selectionItem === null ? false : isSelected(selectionItem);
|
|
630
918
|
const onSelect = (0, react_1.useCallback)((interaction) => {
|
|
631
919
|
if (selectionItem === null) {
|
|
632
920
|
return;
|
|
633
921
|
}
|
|
634
|
-
selectItem(selectionItem, interaction);
|
|
635
|
-
}, [selectItem, selectionItem]);
|
|
922
|
+
selectItem(selectionItem, interaction, selectableTimelineItemsRef.current);
|
|
923
|
+
}, [selectItem, selectableTimelineItemsRef, selectionItem]);
|
|
636
924
|
return {
|
|
637
925
|
onSelect,
|
|
638
926
|
selectable: canSelect && selectionItem !== null,
|
|
@@ -642,19 +930,17 @@ const useTimelineRowSelection = (nodePathInfo) => {
|
|
|
642
930
|
};
|
|
643
931
|
exports.useTimelineRowSelection = useTimelineRowSelection;
|
|
644
932
|
const useTimelineKeyframeSelection = (nodePathInfo, frame) => {
|
|
645
|
-
const { canSelect, isSelected, selectItem
|
|
933
|
+
const { canSelect, isSelected, selectItem } = (0, exports.useTimelineSelection)();
|
|
934
|
+
const selectableTimelineItemsRef = (0, react_1.useContext)(SelectableTimelineItemsContext);
|
|
646
935
|
const selectionItem = (0, react_1.useMemo)(() => ({
|
|
647
936
|
type: 'keyframe',
|
|
648
937
|
nodePathInfo,
|
|
649
938
|
frame,
|
|
650
939
|
}), [nodePathInfo, frame]);
|
|
651
|
-
(0, react_1.useEffect)(() => {
|
|
652
|
-
return registerSelectableItem(selectionItem);
|
|
653
|
-
}, [registerSelectableItem, selectionItem]);
|
|
654
940
|
const selected = isSelected(selectionItem);
|
|
655
941
|
const onSelect = (0, react_1.useCallback)((interaction) => {
|
|
656
|
-
selectItem(selectionItem, interaction);
|
|
657
|
-
}, [selectItem, selectionItem]);
|
|
942
|
+
selectItem(selectionItem, interaction, selectableTimelineItemsRef.current);
|
|
943
|
+
}, [selectItem, selectableTimelineItemsRef, selectionItem]);
|
|
658
944
|
return {
|
|
659
945
|
onSelect,
|
|
660
946
|
selectable: canSelect,
|
|
@@ -664,7 +950,8 @@ const useTimelineKeyframeSelection = (nodePathInfo, frame) => {
|
|
|
664
950
|
};
|
|
665
951
|
exports.useTimelineKeyframeSelection = useTimelineKeyframeSelection;
|
|
666
952
|
const useTimelineEasingSelection = ({ nodePathInfo, fromFrame, toFrame, segmentIndex, }) => {
|
|
667
|
-
const { canSelect, isSelected, selectItem
|
|
953
|
+
const { canSelect, isSelected, selectItem } = (0, exports.useTimelineSelection)();
|
|
954
|
+
const selectableTimelineItemsRef = (0, react_1.useContext)(SelectableTimelineItemsContext);
|
|
668
955
|
const selectionItem = (0, react_1.useMemo)(() => ({
|
|
669
956
|
type: 'easing',
|
|
670
957
|
nodePathInfo,
|
|
@@ -672,13 +959,10 @@ const useTimelineEasingSelection = ({ nodePathInfo, fromFrame, toFrame, segmentI
|
|
|
672
959
|
toFrame,
|
|
673
960
|
segmentIndex,
|
|
674
961
|
}), [nodePathInfo, fromFrame, segmentIndex, toFrame]);
|
|
675
|
-
(0, react_1.useEffect)(() => {
|
|
676
|
-
return registerSelectableItem(selectionItem);
|
|
677
|
-
}, [registerSelectableItem, selectionItem]);
|
|
678
962
|
const selected = isSelected(selectionItem);
|
|
679
963
|
const onSelect = (0, react_1.useCallback)((interaction) => {
|
|
680
|
-
selectItem(selectionItem, interaction);
|
|
681
|
-
}, [selectItem, selectionItem]);
|
|
964
|
+
selectItem(selectionItem, interaction, selectableTimelineItemsRef.current);
|
|
965
|
+
}, [selectItem, selectableTimelineItemsRef, selectionItem]);
|
|
682
966
|
return {
|
|
683
967
|
onSelect,
|
|
684
968
|
selectable: canSelect,
|
|
@@ -688,14 +972,11 @@ const useTimelineEasingSelection = ({ nodePathInfo, fromFrame, toFrame, segmentI
|
|
|
688
972
|
};
|
|
689
973
|
exports.useTimelineEasingSelection = useTimelineEasingSelection;
|
|
690
974
|
const useTimelineGuideSelection = (guideId) => {
|
|
691
|
-
const { canSelect, clearSelection, isSelected, selectItem
|
|
975
|
+
const { canSelect, clearSelection, isSelected, selectItem } = (0, exports.useTimelineSelection)();
|
|
692
976
|
const selectionItem = (0, react_1.useMemo)(() => ({
|
|
693
977
|
type: 'guide',
|
|
694
978
|
guideId,
|
|
695
979
|
}), [guideId]);
|
|
696
|
-
(0, react_1.useEffect)(() => {
|
|
697
|
-
return registerSelectableItem(selectionItem);
|
|
698
|
-
}, [registerSelectableItem, selectionItem]);
|
|
699
980
|
const selected = isSelected(selectionItem);
|
|
700
981
|
const onSelect = (0, react_1.useCallback)(() => {
|
|
701
982
|
selectItem(selectionItem);
|