@remotion/studio 4.0.471 → 4.0.472

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 (91) hide show
  1. package/dist/components/AssetSelector.js +10 -1
  2. package/dist/components/Canvas.js +98 -0
  3. package/dist/components/CompositionSelectorItem.d.ts +1 -0
  4. package/dist/components/CompositionSelectorItem.js +12 -4
  5. package/dist/components/ContextMenu.js +54 -46
  6. package/dist/components/Editor.js +14 -6
  7. package/dist/components/Modals.js +3 -1
  8. package/dist/components/NewComposition/CodemodFooter.js +2 -2
  9. package/dist/components/NewComposition/DeleteFolder.d.ts +6 -0
  10. package/dist/components/NewComposition/DeleteFolder.js +39 -0
  11. package/dist/components/NewComposition/RenameFolder.d.ts +6 -0
  12. package/dist/components/NewComposition/RenameFolder.js +60 -0
  13. package/dist/components/SelectedOutlineOverlay.d.ts +81 -4
  14. package/dist/components/SelectedOutlineOverlay.js +405 -54
  15. package/dist/components/Splitter/SplitterContainer.js +9 -0
  16. package/dist/components/Splitter/SplitterHandle.js +63 -70
  17. package/dist/components/Timeline/Timeline.js +47 -2
  18. package/dist/components/Timeline/TimelineArrayField.d.ts +9 -0
  19. package/dist/components/Timeline/TimelineArrayField.js +210 -0
  20. package/dist/components/Timeline/TimelineBooleanField.d.ts +2 -2
  21. package/dist/components/Timeline/TimelineBooleanField.js +2 -2
  22. package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +20 -0
  23. package/dist/components/Timeline/TimelineClipboardKeybindings.js +265 -0
  24. package/dist/components/Timeline/TimelineColorField.d.ts +2 -2
  25. package/dist/components/Timeline/TimelineColorField.js +2 -8
  26. package/dist/components/Timeline/TimelineEffectItem.js +2 -2
  27. package/dist/components/Timeline/TimelineEffectPropItem.js +95 -25
  28. package/dist/components/Timeline/TimelineEnumField.d.ts +2 -2
  29. package/dist/components/Timeline/TimelineEnumField.js +3 -3
  30. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +4 -3
  31. package/dist/components/Timeline/TimelineKeyframeControls.js +37 -23
  32. package/dist/components/Timeline/TimelineKeyframedValue.d.ts +7 -2
  33. package/dist/components/Timeline/TimelineKeyframedValue.js +22 -8
  34. package/dist/components/Timeline/TimelineLayerEye.d.ts +1 -0
  35. package/dist/components/Timeline/TimelineLayerEye.js +8 -3
  36. package/dist/components/Timeline/TimelineNumberField.d.ts +2 -2
  37. package/dist/components/Timeline/TimelineNumberField.js +7 -11
  38. package/dist/components/Timeline/TimelinePrimitiveFieldValue.d.ts +17 -0
  39. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +53 -0
  40. package/dist/components/Timeline/TimelineRotationField.d.ts +2 -2
  41. package/dist/components/Timeline/TimelineRotationField.js +41 -24
  42. package/dist/components/Timeline/TimelineRowChrome.js +8 -7
  43. package/dist/components/Timeline/TimelineScaleField.d.ts +20 -0
  44. package/dist/components/Timeline/TimelineScaleField.js +314 -0
  45. package/dist/components/Timeline/TimelineSchemaField.d.ts +3 -2
  46. package/dist/components/Timeline/TimelineSchemaField.js +8 -42
  47. package/dist/components/Timeline/TimelineSelection.js +3 -2
  48. package/dist/components/Timeline/TimelineSequence.d.ts +1 -0
  49. package/dist/components/Timeline/TimelineSequence.js +51 -10
  50. package/dist/components/Timeline/TimelineSequenceFrame.js +1 -0
  51. package/dist/components/Timeline/TimelineSequenceItem.js +7 -7
  52. package/dist/components/Timeline/TimelineSequencePropItem.js +82 -21
  53. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +58 -0
  54. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +528 -0
  55. package/dist/components/Timeline/TimelineTrack.js +1 -1
  56. package/dist/components/Timeline/TimelineTranslateField.d.ts +2 -2
  57. package/dist/components/Timeline/TimelineTranslateField.js +21 -25
  58. package/dist/components/Timeline/TimelineUvCoordinateField.d.ts +2 -2
  59. package/dist/components/Timeline/TimelineUvCoordinateField.js +20 -26
  60. package/dist/components/Timeline/call-add-keyframe.js +2 -0
  61. package/dist/components/Timeline/get-node-keyframes.d.ts +5 -2
  62. package/dist/components/Timeline/get-node-keyframes.js +38 -5
  63. package/dist/components/Timeline/get-timeline-keyframes.js +4 -4
  64. package/dist/components/Timeline/reset-selected-timeline-props.js +19 -6
  65. package/dist/components/Timeline/timeline-field-utils.d.ts +1 -0
  66. package/dist/components/Timeline/timeline-field-utils.js +5 -1
  67. package/dist/components/Timeline/timeline-translate-utils.js +6 -2
  68. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +7 -0
  69. package/dist/components/TopPanel.d.ts +1 -1
  70. package/dist/components/folder-menu-items.d.ts +12 -0
  71. package/dist/components/folder-menu-items.js +147 -0
  72. package/dist/components/import-assets.d.ts +6 -0
  73. package/dist/components/import-assets.js +157 -0
  74. package/dist/esm/{chunk-z0z9d4r0.js → chunk-48grt472.js} +8936 -5886
  75. package/dist/esm/internals.mjs +8936 -5886
  76. package/dist/esm/previewEntry.mjs +8748 -5698
  77. package/dist/esm/renderEntry.mjs +1 -1
  78. package/dist/helpers/calculate-timeline.js +7 -3
  79. package/dist/helpers/create-folder-tree.js +1 -0
  80. package/dist/helpers/detect-file-type.d.ts +69 -0
  81. package/dist/helpers/detect-file-type.js +278 -0
  82. package/dist/helpers/get-folder-id.d.ts +4 -0
  83. package/dist/helpers/get-folder-id.js +7 -0
  84. package/dist/helpers/get-timeline-sequence-sort-key.d.ts +2 -0
  85. package/dist/helpers/timeline-layout.js +5 -1
  86. package/dist/helpers/validate-folder-rename.d.ts +6 -0
  87. package/dist/helpers/validate-folder-rename.js +19 -0
  88. package/dist/state/modals.d.ts +10 -0
  89. package/dist/state/scale-lock.d.ts +18 -0
  90. package/dist/state/scale-lock.js +59 -0
  91. package/package.json +10 -10
@@ -2,10 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TimelineSequencePropItem = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const studio_shared_1 = require("@remotion/studio-shared");
5
6
  const react_1 = require("react");
6
7
  const remotion_1 = require("remotion");
7
8
  const client_id_1 = require("../../helpers/client-id");
8
9
  const ContextMenu_1 = require("../ContextMenu");
10
+ const call_add_keyframe_1 = require("./call-add-keyframe");
9
11
  const save_sequence_prop_1 = require("./save-sequence-prop");
10
12
  const timeline_field_row_layout_1 = require("./timeline-field-row-layout");
11
13
  const TimelineExpandArrowButton_1 = require("./TimelineExpandArrowButton");
@@ -17,6 +19,23 @@ const TimelineRowChrome_1 = require("./TimelineRowChrome");
17
19
  const TimelineSchemaField_1 = require("./TimelineSchemaField");
18
20
  const TimelineSelection_1 = require("./TimelineSelection");
19
21
  const fieldRowBase = {};
22
+ const isKeyframedStatus = (status) => {
23
+ return status.status === 'keyframed';
24
+ };
25
+ const isResettableStatus = ({ status, defaultValue, }) => {
26
+ var _a;
27
+ if (defaultValue === undefined) {
28
+ return false;
29
+ }
30
+ if (status.status === 'keyframed') {
31
+ return true;
32
+ }
33
+ if (status.status === 'computed') {
34
+ return false;
35
+ }
36
+ const effectiveCodeValue = (_a = status.codeValue) !== null && _a !== void 0 ? _a : defaultValue;
37
+ return JSON.stringify(effectiveCodeValue) !== JSON.stringify(defaultValue);
38
+ };
20
39
  const Value = ({ field, nodePath, validatedLocation, schema, codeValue }) => {
21
40
  const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
22
41
  const { setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
@@ -38,9 +57,6 @@ const Value = ({ field, nodePath, validatedLocation, schema, codeValue }) => {
38
57
  ? previewServerState.clientId
39
58
  : null;
40
59
  const onSave = (0, react_1.useCallback)((value) => {
41
- if (!codeValue || !codeValue.canUpdate) {
42
- return Promise.reject(new Error('Cannot save'));
43
- }
44
60
  if (!clientId) {
45
61
  return Promise.reject(new Error('Not connected to studio server'));
46
62
  }
@@ -79,7 +95,7 @@ const Value = ({ field, nodePath, validatedLocation, schema, codeValue }) => {
79
95
  if (nodePath === null) {
80
96
  throw new Error('Cannot drag value');
81
97
  }
82
- setDragOverrides(nodePath, field.key, value);
98
+ setDragOverrides(nodePath, field.key, remotion_1.Internals.makeStaticDragOverride(value));
83
99
  }, [setDragOverrides, nodePath, field.key]);
84
100
  const onDragEnd = (0, react_1.useCallback)(() => {
85
101
  if (nodePath === null) {
@@ -87,17 +103,22 @@ const Value = ({ field, nodePath, validatedLocation, schema, codeValue }) => {
87
103
  }
88
104
  clearDragOverrides(nodePath);
89
105
  }, [clearDragOverrides, nodePath]);
90
- return (jsx_runtime_1.jsx(TimelineSchemaField_1.TimelineFieldValue, { field: field, propStatus: codeValue, onSave: onSave, onDragValueChange: onDragValueChange, onDragEnd: onDragEnd, effectiveValue: effectiveValue }));
106
+ return (jsx_runtime_1.jsx(TimelineSchemaField_1.TimelineFieldValue, { field: field, propStatus: codeValue, onSave: onSave, onDragValueChange: onDragValueChange, onDragEnd: onDragEnd, effectiveValue: effectiveValue, scaleLockNodePath: nodePath }));
91
107
  };
92
108
  const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath, nodePathInfo, schema, keyframeDisplayOffset, }) => {
93
109
  var _a, _b;
94
110
  const { codeValues: visualModeCodeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeCodeValuesContext);
95
111
  const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
96
- const { setCodeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
112
+ const { setCodeValues, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
97
113
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
98
114
  const selection = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
115
+ const clientId = previewServerState.type === 'connected'
116
+ ? previewServerState.clientId
117
+ : null;
99
118
  const codeValuesForOverride = remotion_1.Internals.getCodeValuesCtx(visualModeCodeValues, nodePath);
100
119
  const codeValue = (_a = codeValuesForOverride === null || codeValuesForOverride === void 0 ? void 0 : codeValuesForOverride[field.key]) !== null && _a !== void 0 ? _a : null;
120
+ const timelinePosition = remotion_1.Internals.Timeline.useTimelinePosition();
121
+ const jsxFrame = timelinePosition - keyframeDisplayOffset;
101
122
  const dragOverrideValue = (0, react_1.useMemo)(() => {
102
123
  var _a;
103
124
  return ((_a = getDragOverrides(nodePath)) !== null && _a !== void 0 ? _a : {})[field.key];
@@ -106,6 +127,10 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
106
127
  (0, TimelineKeyframeControls_1.shouldShowTimelineKeyframeControls)({
107
128
  propStatus: codeValue,
108
129
  selected: selection.selected,
130
+ keyframable: (0, studio_shared_1.isSchemaFieldKeyframable)({
131
+ schema,
132
+ key: field.key,
133
+ }),
109
134
  }) ? (jsx_runtime_1.jsx(TimelineKeyframeControls_1.TimelineKeyframeControls, { fieldKey: field.key, propStatus: codeValue, nodePath: nodePath, fileName: validatedLocation.source, keyframeDisplayOffset: keyframeDisplayOffset, defaultValue: field.fieldSchema.default, dragOverrideValue: dragOverrideValue, schema: schema, effectIndex: null })) : null;
110
135
  const style = (0, react_1.useMemo)(() => {
111
136
  return {
@@ -113,23 +138,24 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
113
138
  height: field.rowHeight,
114
139
  };
115
140
  }, [field.rowHeight]);
116
- const isNonDefault = (0, react_1.useMemo)(() => {
117
- var _a;
118
- if (!codeValue || !codeValue.canUpdate) {
141
+ const canResetToDefault = (0, react_1.useMemo)(() => {
142
+ if (!codeValue || codeValue.status === 'computed') {
119
143
  return false;
120
144
  }
121
- const effectiveCodeValue = (_a = codeValue.codeValue) !== null && _a !== void 0 ? _a : field.fieldSchema.default;
122
- return (JSON.stringify(effectiveCodeValue) !==
123
- JSON.stringify(field.fieldSchema.default));
145
+ return isResettableStatus({
146
+ status: codeValue,
147
+ defaultValue: field.fieldSchema.default,
148
+ });
124
149
  }, [codeValue, field.fieldSchema.default]);
125
150
  const canPerformReset = previewServerState.type === 'connected' &&
126
151
  codeValue !== null &&
127
- codeValue.canUpdate;
152
+ codeValue.status !== 'computed';
153
+ const canShowReset = canPerformReset && field.fieldSchema.default !== undefined;
128
154
  const onReset = (0, react_1.useCallback)(() => {
129
- if (!canPerformReset ||
155
+ if (!canShowReset ||
156
+ !canResetToDefault ||
130
157
  previewServerState.type !== 'connected' ||
131
- codeValue === null ||
132
- !isNonDefault) {
158
+ codeValue === null) {
133
159
  return;
134
160
  }
135
161
  const defaultValue = field.fieldSchema.default !== undefined
@@ -146,10 +172,10 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
146
172
  clientId: previewServerState.clientId,
147
173
  });
148
174
  }, [
149
- canPerformReset,
175
+ canResetToDefault,
176
+ canShowReset,
150
177
  field.fieldSchema.default,
151
178
  field.key,
152
- isNonDefault,
153
179
  nodePath,
154
180
  previewServerState,
155
181
  schema,
@@ -157,6 +183,41 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
157
183
  validatedLocation.source,
158
184
  codeValue,
159
185
  ]);
186
+ const onSaveKeyframed = (0, react_1.useCallback)((value, sourceFrame) => {
187
+ if (!clientId) {
188
+ return Promise.reject(new Error('Not connected to studio server'));
189
+ }
190
+ return (0, call_add_keyframe_1.callAddSequenceKeyframe)({
191
+ fileName: validatedLocation.source,
192
+ nodePath,
193
+ fieldKey: field.key,
194
+ sourceFrame,
195
+ value,
196
+ schema,
197
+ setCodeValues,
198
+ clientId,
199
+ });
200
+ }, [
201
+ clientId,
202
+ field.key,
203
+ nodePath,
204
+ schema,
205
+ setCodeValues,
206
+ validatedLocation.source,
207
+ ]);
208
+ const onKeyframedDragValueChange = (0, react_1.useCallback)((value) => {
209
+ if (codeValue === null || !isKeyframedStatus(codeValue)) {
210
+ throw new Error('Expected keyframed status');
211
+ }
212
+ setDragOverrides(nodePath, field.key, remotion_1.Internals.makeKeyframedDragOverride({
213
+ status: codeValue,
214
+ frame: jsxFrame,
215
+ value,
216
+ }));
217
+ }, [codeValue, field.key, jsxFrame, nodePath, setDragOverrides]);
218
+ const onKeyframedDragEnd = (0, react_1.useCallback)(() => {
219
+ clearDragOverrides(nodePath);
220
+ }, [clearDragOverrides, nodePath]);
160
221
  const contextMenuValues = (0, react_1.useMemo)(() => {
161
222
  return [
162
223
  {
@@ -165,19 +226,19 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
165
226
  keyHint: null,
166
227
  label: 'Reset',
167
228
  leftItem: null,
168
- disabled: !canPerformReset,
229
+ disabled: !canShowReset,
169
230
  onClick: onReset,
170
231
  quickSwitcherLabel: null,
171
232
  subMenu: null,
172
233
  value: 'reset-sequence-field',
173
234
  },
174
235
  ];
175
- }, [canPerformReset, onReset]);
236
+ }, [canShowReset, onReset]);
176
237
  if (codeValue === null) {
177
238
  return null;
178
239
  }
179
240
  const row = (jsx_runtime_1.jsxs(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {}), keyframeControls: keyframeControls, arrow: jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}), style: style, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection: false, outerHeight: null, children: [
180
- jsx_runtime_1.jsx(TimelineFieldLabel_1.TimelineFieldLabel, { rowDepth: rowDepth, selected: selection.selected, label: (_b = field.description) !== null && _b !== void 0 ? _b : field.key }), codeValue.canUpdate ? (jsx_runtime_1.jsx("div", { style: timeline_field_row_layout_1.timelineFieldValueColumnStyle, children: jsx_runtime_1.jsx(Value, { field: field, nodePath: nodePath, validatedLocation: validatedLocation, schema: schema, codeValue: codeValue }) })) : codeValue.reason === 'keyframed' ? (jsx_runtime_1.jsx("div", { style: timeline_field_row_layout_1.timelineFieldValueColumnStyle, children: jsx_runtime_1.jsx(TimelineKeyframedValue_1.TimelineKeyframedValue, { field: field, propStatus: codeValue, keyframeDisplayOffset: keyframeDisplayOffset }) })) : (jsx_runtime_1.jsx("div", { style: timeline_field_row_layout_1.timelineFieldValueColumnStyle, children: jsx_runtime_1.jsx(TimelineSchemaField_1.TimelineNonEditableStatus, { propStatus: codeValue }) }))] }));
241
+ jsx_runtime_1.jsx(TimelineFieldLabel_1.TimelineFieldLabel, { rowDepth: rowDepth, selected: selection.selected, label: (_b = field.description) !== null && _b !== void 0 ? _b : field.key }), isKeyframedStatus(codeValue) ? (jsx_runtime_1.jsx("div", { style: timeline_field_row_layout_1.timelineFieldValueColumnStyle, children: jsx_runtime_1.jsx(TimelineKeyframedValue_1.TimelineKeyframedValue, { field: field, propStatus: codeValue, keyframeDisplayOffset: keyframeDisplayOffset, dragOverrideValue: dragOverrideValue, onSave: onSaveKeyframed, onDragValueChange: onKeyframedDragValueChange, onDragEnd: onKeyframedDragEnd, scaleLockNodePath: nodePath }) })) : codeValue.status === 'static' ? (jsx_runtime_1.jsx("div", { style: timeline_field_row_layout_1.timelineFieldValueColumnStyle, children: jsx_runtime_1.jsx(Value, { field: field, nodePath: nodePath, validatedLocation: validatedLocation, schema: schema, codeValue: codeValue }) })) : (jsx_runtime_1.jsx("div", { style: timeline_field_row_layout_1.timelineFieldValueColumnStyle, children: jsx_runtime_1.jsx(TimelineSchemaField_1.TimelineNonEditableStatus, { propStatus: codeValue }) }))] }));
181
242
  return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: contextMenuValues, onOpen: selection.selectable ? selection.onSelect : null, children: row }));
182
243
  };
183
244
  exports.TimelineSequencePropItem = TimelineSequencePropItem;
@@ -0,0 +1,58 @@
1
+ import React from 'react';
2
+ import type { CodeValues, OverrideIdToNodePaths, SequencePropsSubscriptionKey, TSequence } from 'remotion';
3
+ import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
4
+ import { type SaveSequencePropChange } from './save-sequence-prop';
5
+ import { type TimelineSelection } from './TimelineSelection';
6
+ export type TimelineSequenceDurationDragTarget = {
7
+ readonly fileName: string;
8
+ readonly initialDuration: number;
9
+ readonly nodePath: SequencePropsSubscriptionKey;
10
+ };
11
+ export type TimelineSequenceFromDragTarget = {
12
+ readonly fileName: string;
13
+ readonly initialFrom: number;
14
+ readonly nodePath: SequencePropsSubscriptionKey;
15
+ };
16
+ export declare const getTimelineSequenceDurationDragValue: ({ initialDuration, deltaFrames, }: {
17
+ readonly initialDuration: number;
18
+ readonly deltaFrames: number;
19
+ }) => number;
20
+ export declare const getTimelineSequenceDurationDragChanges: ({ targets, deltaFrames, }: {
21
+ readonly targets: readonly TimelineSequenceDurationDragTarget[];
22
+ readonly deltaFrames: number;
23
+ }) => SaveSequencePropChange[];
24
+ export declare const getTimelineSequenceFromDragValue: ({ initialFrom, deltaFrames, }: {
25
+ readonly initialFrom: number;
26
+ readonly deltaFrames: number;
27
+ }) => number;
28
+ export declare const getTimelineSequenceFromDragChanges: ({ targets, deltaFrames, }: {
29
+ readonly targets: readonly TimelineSequenceFromDragTarget[];
30
+ readonly deltaFrames: number;
31
+ }) => SaveSequencePropChange[];
32
+ export declare const getTimelineSequenceDurationDragTargets: ({ draggedNodePathInfo, selectedItems, sequences, overrideIdsToNodePaths, codeValues, }: {
33
+ readonly draggedNodePathInfo: SequenceNodePathInfo;
34
+ readonly selectedItems: readonly TimelineSelection[];
35
+ readonly sequences: TSequence[];
36
+ readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
37
+ readonly codeValues: CodeValues;
38
+ }) => TimelineSequenceDurationDragTarget[] | null;
39
+ export declare const getTimelineSequenceFromDragTargets: ({ draggedNodePathInfo, selectedItems, sequences, overrideIdsToNodePaths, codeValues, }: {
40
+ readonly draggedNodePathInfo: SequenceNodePathInfo;
41
+ readonly selectedItems: readonly TimelineSelection[];
42
+ readonly sequences: TSequence[];
43
+ readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
44
+ readonly codeValues: CodeValues;
45
+ }) => TimelineSequenceFromDragTarget[] | null;
46
+ export declare const useTimelineSequenceFromDrag: ({ nodePathInfo, windowWidth, timelineDurationInFrames, }: {
47
+ readonly nodePathInfo: SequenceNodePathInfo | null;
48
+ readonly windowWidth: number;
49
+ readonly timelineDurationInFrames: number;
50
+ }) => {
51
+ dragging: boolean;
52
+ onPointerDown: (e: React.PointerEvent<HTMLDivElement>) => void;
53
+ };
54
+ export declare const TimelineSequenceRightEdgeDragHandle: React.FC<{
55
+ readonly nodePathInfo: SequenceNodePathInfo;
56
+ readonly windowWidth: number;
57
+ readonly timelineDurationInFrames: number;
58
+ }>;