@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.
Files changed (201) hide show
  1. package/dist/components/AssetSelector.js +8 -14
  2. package/dist/components/AudioWaveform.js +19 -11
  3. package/dist/components/Button.d.ts +2 -0
  4. package/dist/components/Button.js +9 -6
  5. package/dist/components/CompactExplanation.d.ts +12 -0
  6. package/dist/components/CompactExplanation.js +52 -0
  7. package/dist/components/CompositionSelector.js +2 -4
  8. package/dist/components/CurrentAsset.d.ts +3 -1
  9. package/dist/components/CurrentAsset.js +42 -34
  10. package/dist/components/CurrentComposition.d.ts +1 -1
  11. package/dist/components/CurrentComposition.js +38 -31
  12. package/dist/components/CurrentCompositionSideEffects.d.ts +0 -3
  13. package/dist/components/CurrentCompositionSideEffects.js +1 -37
  14. package/dist/components/DefaultPropsEditor.d.ts +12 -2
  15. package/dist/components/DefaultPropsEditor.js +2 -2
  16. package/dist/components/Editor.js +2 -5
  17. package/dist/components/EditorContent.js +2 -1
  18. package/dist/components/EffectPickerModal.d.ts +5 -0
  19. package/dist/components/EffectPickerModal.js +179 -0
  20. package/dist/components/ExpandedTracksProvider.d.ts +1 -0
  21. package/dist/components/ExpandedTracksProvider.js +81 -7
  22. package/dist/components/GlobalKeybindings.d.ts +3 -1
  23. package/dist/components/GlobalKeybindings.js +104 -10
  24. package/dist/components/InspectorInfoHeader.d.ts +11 -0
  25. package/dist/components/InspectorInfoHeader.js +55 -0
  26. package/dist/components/InspectorPanel/DefaultInspector.d.ts +8 -0
  27. package/dist/components/InspectorPanel/DefaultInspector.js +93 -0
  28. package/dist/components/InspectorPanel/EasingInspector.d.ts +5 -0
  29. package/dist/components/InspectorPanel/EasingInspector.js +41 -0
  30. package/dist/components/InspectorPanel/GuideInspector.d.ts +7 -0
  31. package/dist/components/InspectorPanel/GuideInspector.js +55 -0
  32. package/dist/components/InspectorPanel/KeyframeInspector.d.ts +7 -0
  33. package/dist/components/InspectorPanel/KeyframeInspector.js +109 -0
  34. package/dist/components/InspectorPanel/SelectedInspector.d.ts +5 -0
  35. package/dist/components/InspectorPanel/SelectedInspector.js +26 -0
  36. package/dist/components/InspectorPanel/SequenceSelectionInspector.d.ts +5 -0
  37. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +117 -0
  38. package/dist/components/InspectorPanel/common.d.ts +15 -0
  39. package/dist/components/InspectorPanel/common.js +18 -0
  40. package/dist/components/InspectorPanel/inspector-selection.d.ts +10 -0
  41. package/dist/components/InspectorPanel/inspector-selection.js +35 -0
  42. package/dist/components/InspectorPanel/styles.d.ts +28 -0
  43. package/dist/components/InspectorPanel/styles.js +196 -0
  44. package/dist/components/InspectorPanel/use-track-for-selection.d.ts +2 -0
  45. package/dist/components/InspectorPanel/use-track-for-selection.js +22 -0
  46. package/dist/components/InspectorPanel.d.ts +8 -0
  47. package/dist/components/InspectorPanel.js +26 -0
  48. package/dist/components/InspectorPanelLayout.d.ts +1 -0
  49. package/dist/components/InspectorPanelLayout.js +4 -0
  50. package/dist/components/InspectorSequenceSection.d.ts +19 -0
  51. package/dist/components/InspectorSequenceSection.js +157 -0
  52. package/dist/components/InspectorSourceLocation.d.ts +7 -0
  53. package/dist/components/InspectorSourceLocation.js +71 -0
  54. package/dist/components/KeyboardShortcutsExplainer.js +10 -2
  55. package/dist/components/Modals.js +3 -3
  56. package/dist/components/NewComposition/InputDragger.js +1 -1
  57. package/dist/components/NewComposition/RemInput.d.ts +1 -0
  58. package/dist/components/NewComposition/RemInput.js +8 -2
  59. package/dist/components/NewComposition/RemTextarea.d.ts +1 -0
  60. package/dist/components/NewComposition/RemTextarea.js +8 -2
  61. package/dist/components/NewComposition/ValidationMessage.d.ts +3 -0
  62. package/dist/components/NewComposition/ValidationMessage.js +16 -5
  63. package/dist/components/OptionsPanel.d.ts +1 -1
  64. package/dist/components/OptionsPanel.js +8 -17
  65. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +2 -7
  66. package/dist/components/QuickSwitcher/QuickSwitcherResult.js +3 -10
  67. package/dist/components/QuickSwitcher/shared.d.ts +4 -0
  68. package/dist/components/QuickSwitcher/shared.js +24 -0
  69. package/dist/components/RenderModal/DataEditor.d.ts +29 -2
  70. package/dist/components/RenderModal/DataEditor.js +107 -56
  71. package/dist/components/RenderModal/RenderModalJSONPropsEditor.d.ts +1 -0
  72. package/dist/components/RenderModal/RenderModalJSONPropsEditor.js +25 -7
  73. package/dist/components/RenderModal/SchemaEditor/Fieldset.d.ts +2 -1
  74. package/dist/components/RenderModal/SchemaEditor/Fieldset.js +10 -5
  75. package/dist/components/RenderModal/SchemaEditor/SchemaEditor.d.ts +4 -0
  76. package/dist/components/RenderModal/SchemaEditor/SchemaEditor.js +27 -4
  77. package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.d.ts +12 -4
  78. package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.js +23 -9
  79. package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +3 -3
  80. package/dist/components/RenderModal/SchemaEditor/SchemaSeparationLine.js +8 -1
  81. package/dist/components/RenderModal/SchemaEditor/ZodColorEditor.js +1 -1
  82. package/dist/components/RenderModal/SchemaEditor/ZodDateEditor.js +1 -1
  83. package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +1 -1
  84. package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +1 -1
  85. package/dist/components/RenderModal/SchemaEditor/ZodErrorMessages.d.ts +1 -0
  86. package/dist/components/RenderModal/SchemaEditor/ZodErrorMessages.js +23 -6
  87. package/dist/components/RenderModal/SchemaEditor/ZodFieldValidation.js +2 -2
  88. package/dist/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +2 -1
  89. package/dist/components/RenderModal/SchemaEditor/ZodNumberEditor.js +1 -1
  90. package/dist/components/RenderModal/SchemaEditor/ZodObjectEditor.js +9 -11
  91. package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +1 -1
  92. package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
  93. package/dist/components/RenderModal/SchemaEditor/ZodStringEditor.js +1 -1
  94. package/dist/components/RenderModal/SchemaEditor/ZodTextareaEditor.js +1 -1
  95. package/dist/components/RenderModal/WarningIndicatorButton.d.ts +1 -0
  96. package/dist/components/RenderModal/WarningIndicatorButton.js +17 -4
  97. package/dist/components/RenderModal/get-render-modal-warnings.d.ts +2 -1
  98. package/dist/components/RenderModal/get-render-modal-warnings.js +6 -3
  99. package/dist/components/RendersTab.js +1 -1
  100. package/dist/components/ResetZoomButton.d.ts +2 -1
  101. package/dist/components/ResetZoomButton.js +5 -1
  102. package/dist/components/SegmentedControl.d.ts +3 -0
  103. package/dist/components/SegmentedControl.js +11 -5
  104. package/dist/components/SelectedOutlineElement.js +96 -24
  105. package/dist/components/SelectedOutlineOverlay.d.ts +1 -1
  106. package/dist/components/SelectedOutlineOverlay.js +44 -30
  107. package/dist/components/SelectedOutlineUvControls.d.ts +9 -0
  108. package/dist/components/SelectedOutlineUvControls.js +64 -10
  109. package/dist/components/Tabs/index.js +4 -4
  110. package/dist/components/Timeline/EasingEditorModal.d.ts +5 -4
  111. package/dist/components/Timeline/EasingEditorModal.js +597 -124
  112. package/dist/components/Timeline/KeyframeSettingsModal.d.ts +2 -2
  113. package/dist/components/Timeline/SubscribeToNodePaths.d.ts +2 -2
  114. package/dist/components/Timeline/Timeline.js +9 -9
  115. package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +15 -3
  116. package/dist/components/Timeline/TimelineClipboardKeybindings.js +85 -1
  117. package/dist/components/Timeline/TimelineDeleteKeybindings.js +10 -3
  118. package/dist/components/Timeline/TimelineEffectItem.d.ts +2 -2
  119. package/dist/components/Timeline/TimelineEffectItem.js +1 -1
  120. package/dist/components/Timeline/TimelineEffectPropItem.d.ts +8 -0
  121. package/dist/components/Timeline/TimelineEffectPropItem.js +25 -21
  122. package/dist/components/Timeline/TimelineExpandArrowButton.js +42 -2
  123. package/dist/components/Timeline/TimelineExpandedRow.d.ts +5 -2
  124. package/dist/components/Timeline/TimelineExpandedRow.js +6 -6
  125. package/dist/components/Timeline/TimelineExpandedSection.d.ts +1 -1
  126. package/dist/components/Timeline/TimelineExpandedSection.js +10 -25
  127. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +8 -2
  128. package/dist/components/Timeline/TimelineKeyframeControls.js +24 -3
  129. package/dist/components/Timeline/TimelineKeyframeEasingLine.js +2 -47
  130. package/dist/components/Timeline/TimelineKeyframedValue.d.ts +1 -1
  131. package/dist/components/Timeline/TimelineKeyframedValue.js +8 -10
  132. package/dist/components/Timeline/TimelineNumberField.js +5 -11
  133. package/dist/components/Timeline/TimelineRotationField.js +5 -6
  134. package/dist/components/Timeline/TimelineRowChrome.d.ts +2 -0
  135. package/dist/components/Timeline/TimelineRowChrome.js +5 -3
  136. package/dist/components/Timeline/TimelineScaleField.js +4 -8
  137. package/dist/components/Timeline/TimelineSelection.d.ts +28 -2
  138. package/dist/components/Timeline/TimelineSelection.js +342 -61
  139. package/dist/components/Timeline/TimelineSequence.js +19 -3
  140. package/dist/components/Timeline/TimelineSequenceItem.js +68 -64
  141. package/dist/components/Timeline/TimelineSequencePropItem.d.ts +12 -2
  142. package/dist/components/Timeline/TimelineSequencePropItem.js +57 -53
  143. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +6 -4
  144. package/dist/components/Timeline/TimelineTransformOriginField.js +4 -5
  145. package/dist/components/Timeline/TimelineTranslateField.js +4 -5
  146. package/dist/components/Timeline/TimelineUvCoordinateField.js +4 -4
  147. package/dist/components/Timeline/call-add-keyframe.d.ts +4 -4
  148. package/dist/components/Timeline/call-delete-keyframe.d.ts +4 -4
  149. package/dist/components/Timeline/call-move-keyframe.d.ts +2 -2
  150. package/dist/components/Timeline/call-update-keyframe-settings.d.ts +3 -3
  151. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +2 -1
  152. package/dist/components/Timeline/delete-selected-timeline-item.js +27 -1
  153. package/dist/components/Timeline/find-track-for-node-path-info.js +2 -2
  154. package/dist/components/Timeline/get-node-keyframes.d.ts +7 -0
  155. package/dist/components/Timeline/get-node-keyframes.js +26 -1
  156. package/dist/components/Timeline/parse-keyframe-field-from-node-path.js +2 -2
  157. package/dist/components/Timeline/reset-selected-timeline-props.d.ts +3 -3
  158. package/dist/components/Timeline/reset-selected-timeline-props.js +34 -7
  159. package/dist/components/Timeline/save-effect-prop.d.ts +2 -2
  160. package/dist/components/Timeline/save-sequence-prop.d.ts +2 -2
  161. package/dist/components/Timeline/sequence-props-subscription-store.d.ts +3 -3
  162. package/dist/components/Timeline/timeline-expanded-filter.d.ts +12 -0
  163. package/dist/components/Timeline/timeline-expanded-filter.js +38 -0
  164. package/dist/components/Timeline/timeline-field-display-utils.d.ts +5 -0
  165. package/dist/components/Timeline/timeline-field-display-utils.js +244 -0
  166. package/dist/components/Timeline/update-selected-easing.d.ts +47 -4
  167. package/dist/components/Timeline/update-selected-easing.js +40 -9
  168. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +50 -18
  169. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.d.ts +13 -0
  170. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +73 -0
  171. package/dist/components/Timeline/use-sequence-props-subscription.d.ts +3 -3
  172. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +12 -0
  173. package/dist/components/Timeline/use-timeline-expanded-tree.js +60 -0
  174. package/dist/components/Timeline/use-timeline-height.js +51 -7
  175. package/dist/components/Timeline/use-timeline-keyframe-drag.js +12 -6
  176. package/dist/components/TopPanel.js +1 -1
  177. package/dist/components/VisualControls/VisualControlsContent.d.ts +1 -1
  178. package/dist/components/VisualControls/VisualControlsContent.js +4 -5
  179. package/dist/components/effect-drag-and-drop.d.ts +10 -0
  180. package/dist/components/effect-drag-and-drop.js +17 -8
  181. package/dist/components/effect-picker-search.d.ts +5 -0
  182. package/dist/components/effect-picker-search.js +77 -0
  183. package/dist/components/selected-outline-drag.d.ts +21 -2
  184. package/dist/components/selected-outline-drag.js +31 -6
  185. package/dist/components/selected-outline-measurement.js +48 -14
  186. package/dist/components/selected-outline-types.d.ts +7 -7
  187. package/dist/components/selected-outline-uv.d.ts +4 -3
  188. package/dist/components/selected-outline-uv.js +6 -2
  189. package/dist/error-overlay/remotion-overlay/ErrorLoader.js +8 -1
  190. package/dist/esm/{chunk-hrw9799x.js → chunk-4rq5gt8c.js} +30557 -26640
  191. package/dist/esm/internals.mjs +30557 -26640
  192. package/dist/esm/previewEntry.mjs +18584 -14665
  193. package/dist/esm/renderEntry.mjs +1 -1
  194. package/dist/helpers/migrate-expanded-tracks-for-subscription-key.js +3 -3
  195. package/dist/helpers/render-codec-label.d.ts +2 -0
  196. package/dist/helpers/render-codec-label.js +49 -0
  197. package/dist/helpers/timeline-layout.d.ts +4 -4
  198. package/dist/helpers/use-media-metadata.d.ts +8 -2
  199. package/dist/helpers/use-media-metadata.js +17 -4
  200. package/dist/state/modals.d.ts +9 -4
  201. package/package.json +12 -12
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatTimelineFieldValueForDisplay = void 0;
4
+ const timeline_field_utils_1 = require("./timeline-field-utils");
5
+ const timeline_rotation_utils_1 = require("./timeline-rotation-utils");
6
+ const timeline_translate_utils_1 = require("./timeline-translate-utils");
7
+ const transform_origin_utils_1 = require("./transform-origin-utils");
8
+ const DISPLAY_FALLBACK_DECIMAL_PLACES = 3;
9
+ const DEFAULT_SCALE_VALUE = [1, 1, 1];
10
+ const getFiniteNumericValue = (value) => {
11
+ if (typeof value !== 'number' && typeof value !== 'string') {
12
+ return null;
13
+ }
14
+ const numericValue = Number(value);
15
+ return Number.isFinite(numericValue) ? numericValue : null;
16
+ };
17
+ const parseScaleStringForDisplay = (value) => {
18
+ var _a, _b;
19
+ const parts = value.trim().split(/\s+/);
20
+ if (parts.length < 1 || parts.length > 3 || parts[0] === '') {
21
+ return null;
22
+ }
23
+ const parsed = parts.map((part) => Number(part));
24
+ if (!parsed.every((part) => Number.isFinite(part))) {
25
+ return null;
26
+ }
27
+ const x = parsed[0];
28
+ const y = (_a = parsed[1]) !== null && _a !== void 0 ? _a : x;
29
+ const z = (_b = parsed[2]) !== null && _b !== void 0 ? _b : 1;
30
+ return [x, y, z];
31
+ };
32
+ const parseScaleValueForDisplay = (value) => {
33
+ var _a;
34
+ if (typeof value === 'number') {
35
+ return Number.isFinite(value) ? [value, value, 1] : DEFAULT_SCALE_VALUE;
36
+ }
37
+ if (typeof value === 'string') {
38
+ return (_a = parseScaleStringForDisplay(value)) !== null && _a !== void 0 ? _a : DEFAULT_SCALE_VALUE;
39
+ }
40
+ return DEFAULT_SCALE_VALUE;
41
+ };
42
+ const formatUnknownNumberForDisplay = (value) => {
43
+ if (!Number.isFinite(value)) {
44
+ return String(value);
45
+ }
46
+ return (0, timeline_field_utils_1.formatTimelineNumber)({
47
+ decimalPlaces: DISPLAY_FALLBACK_DECIMAL_PLACES,
48
+ fixed: false,
49
+ value: (0, timeline_field_utils_1.normalizeTimelineNumber)(value),
50
+ });
51
+ };
52
+ const normalizeUnknownForDisplay = (value) => {
53
+ if (typeof value === 'number' && Number.isFinite(value)) {
54
+ return (0, timeline_field_utils_1.roundToDecimalPlaces)((0, timeline_field_utils_1.normalizeTimelineNumber)(value), DISPLAY_FALLBACK_DECIMAL_PLACES);
55
+ }
56
+ if (Array.isArray(value)) {
57
+ return value.map(normalizeUnknownForDisplay);
58
+ }
59
+ if (value && typeof value === 'object') {
60
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [
61
+ key,
62
+ normalizeUnknownForDisplay(item),
63
+ ]));
64
+ }
65
+ return value;
66
+ };
67
+ const formatUnknownTimelineValueForDisplay = (value) => {
68
+ var _a;
69
+ if (typeof value === 'number') {
70
+ return formatUnknownNumberForDisplay(value);
71
+ }
72
+ if (value === null ||
73
+ typeof value === 'string' ||
74
+ typeof value === 'boolean' ||
75
+ typeof value === 'bigint') {
76
+ return String(value);
77
+ }
78
+ if (value === undefined) {
79
+ return 'undefined';
80
+ }
81
+ try {
82
+ return (_a = JSON.stringify(normalizeUnknownForDisplay(value))) !== null && _a !== void 0 ? _a : String(value);
83
+ }
84
+ catch (_b) {
85
+ return String(value);
86
+ }
87
+ };
88
+ const formatNumberTimelineFieldValueForDisplay = ({ fieldSchema, value, }) => {
89
+ const numericValue = getFiniteNumericValue(value);
90
+ if (numericValue === null) {
91
+ return null;
92
+ }
93
+ const stepDecimals = fieldSchema.step === undefined ? null : (0, timeline_field_utils_1.getDecimalPlaces)(fieldSchema.step);
94
+ if (stepDecimals === null) {
95
+ const digits = (0, timeline_field_utils_1.getDecimalPlaces)(numericValue);
96
+ return digits === 0 ? String(numericValue) : numericValue.toFixed(digits);
97
+ }
98
+ return (0, timeline_field_utils_1.formatTimelineNumber)({
99
+ decimalPlaces: stepDecimals,
100
+ fixed: true,
101
+ value: numericValue,
102
+ });
103
+ };
104
+ const formatRotationTimelineFieldValueForDisplay = ({ fieldSchema, value, }) => {
105
+ const configuredStep = fieldSchema.type === 'rotation-css' ||
106
+ fieldSchema.type === 'rotation-degrees'
107
+ ? fieldSchema.step
108
+ : undefined;
109
+ const decimalPlaces = (0, timeline_field_utils_1.getTimelineDisplayDecimalPlaces)({
110
+ defaultDecimalPlaces: 1,
111
+ step: configuredStep,
112
+ });
113
+ const degrees = fieldSchema.type === 'rotation-css'
114
+ ? (0, timeline_rotation_utils_1.parseCssRotationToDegrees)(String(value !== null && value !== void 0 ? value : '0deg'))
115
+ : getFiniteNumericValue(value);
116
+ if (degrees === null || !Number.isFinite(degrees)) {
117
+ return null;
118
+ }
119
+ return `${(0, timeline_field_utils_1.formatTimelineNumber)({
120
+ decimalPlaces,
121
+ fixed: false,
122
+ value: (0, timeline_field_utils_1.normalizeTimelineNumber)(degrees),
123
+ })}\u00B0`;
124
+ };
125
+ const formatScaleTimelineFieldValueForDisplay = ({ fieldSchema, value, }) => {
126
+ const decimalPlaces = (0, timeline_field_utils_1.getTimelineDisplayDecimalPlaces)({
127
+ defaultDecimalPlaces: 3,
128
+ step: fieldSchema.step,
129
+ });
130
+ const formatScalePart = (part) => (0, timeline_field_utils_1.formatTimelineNumber)({
131
+ decimalPlaces,
132
+ fixed: true,
133
+ value: part,
134
+ });
135
+ const [x, y, z] = parseScaleValueForDisplay(value);
136
+ const parts = x === y && z === 1 ? [x] : z === 1 ? [x, y] : [x, y, z];
137
+ return parts.map(formatScalePart).join(' ');
138
+ };
139
+ const formatTranslateCoordinateForDisplay = (value, decimalPlaces) => `${(0, timeline_field_utils_1.formatTimelineNumber)({
140
+ decimalPlaces,
141
+ fixed: false,
142
+ value,
143
+ })}px`;
144
+ const formatTranslateTimelineFieldValueForDisplay = ({ fieldSchema, value, }) => {
145
+ const decimalPlaces = (0, timeline_field_utils_1.getTimelineDisplayDecimalPlaces)({
146
+ defaultDecimalPlaces: 1,
147
+ step: fieldSchema.step,
148
+ });
149
+ const numericValue = getFiniteNumericValue(value);
150
+ if (numericValue !== null) {
151
+ return formatTranslateCoordinateForDisplay(numericValue, decimalPlaces);
152
+ }
153
+ const [x, y] = (0, timeline_translate_utils_1.parseTranslate)(String(value !== null && value !== void 0 ? value : '0px 0px'));
154
+ return (0, timeline_translate_utils_1.serializeTranslate)(x, y, decimalPlaces);
155
+ };
156
+ const formatTransformOriginAxisValueForDisplay = ({ decimalPlaces, unit, value, }) => {
157
+ return `${(0, timeline_field_utils_1.formatTimelineNumber)({
158
+ decimalPlaces,
159
+ fixed: false,
160
+ value,
161
+ })}${unit}`;
162
+ };
163
+ const formatTransformOriginTimelineFieldValueForDisplay = ({ fieldSchema, value, }) => {
164
+ const decimalPlaces = (0, timeline_field_utils_1.getTimelineDisplayDecimalPlaces)({
165
+ defaultDecimalPlaces: 2,
166
+ step: fieldSchema.step,
167
+ });
168
+ const numericValue = getFiniteNumericValue(value);
169
+ if (numericValue !== null) {
170
+ return formatTransformOriginAxisValueForDisplay({
171
+ decimalPlaces,
172
+ unit: '%',
173
+ value: numericValue,
174
+ });
175
+ }
176
+ const parsed = (0, transform_origin_utils_1.parseTransformOrigin)(value);
177
+ if (parsed === null) {
178
+ return null;
179
+ }
180
+ const xy = `${formatTransformOriginAxisValueForDisplay({
181
+ decimalPlaces,
182
+ unit: parsed.x.unit,
183
+ value: parsed.x.value,
184
+ })} ${formatTransformOriginAxisValueForDisplay({
185
+ decimalPlaces,
186
+ unit: parsed.y.unit,
187
+ value: parsed.y.value,
188
+ })}`;
189
+ return parsed.z === null ? xy : `${xy} ${parsed.z}`;
190
+ };
191
+ const formatUvCoordinatePartForDisplay = (value, decimalPlaces) => (0, timeline_field_utils_1.formatTimelineNumber)({
192
+ decimalPlaces,
193
+ fixed: true,
194
+ value,
195
+ });
196
+ const formatUvCoordinateTimelineFieldValueForDisplay = ({ fieldSchema, value, }) => {
197
+ const decimalPlaces = (0, timeline_field_utils_1.getTimelineDisplayDecimalPlaces)({
198
+ defaultDecimalPlaces: 2,
199
+ step: fieldSchema.step,
200
+ });
201
+ const numericValue = getFiniteNumericValue(value);
202
+ if (numericValue !== null) {
203
+ return formatUvCoordinatePartForDisplay(numericValue, decimalPlaces);
204
+ }
205
+ if (!Array.isArray(value) ||
206
+ value.length !== 2 ||
207
+ !value.every((item) => typeof item === 'number' && Number.isFinite(item))) {
208
+ return null;
209
+ }
210
+ return `${formatUvCoordinatePartForDisplay(value[0], decimalPlaces)}, ${formatUvCoordinatePartForDisplay(value[1], decimalPlaces)}`;
211
+ };
212
+ const formatTimelineFieldValueForDisplay = ({ fieldSchema, value, }) => {
213
+ var _a, _b, _c, _d, _e;
214
+ if (!fieldSchema) {
215
+ return formatUnknownTimelineValueForDisplay(value);
216
+ }
217
+ switch (fieldSchema.type) {
218
+ case 'number':
219
+ return ((_a = formatNumberTimelineFieldValueForDisplay({ fieldSchema, value })) !== null && _a !== void 0 ? _a : formatUnknownTimelineValueForDisplay(value));
220
+ case 'rotation-css':
221
+ case 'rotation-degrees':
222
+ return ((_b = formatRotationTimelineFieldValueForDisplay({ fieldSchema, value })) !== null && _b !== void 0 ? _b : formatUnknownTimelineValueForDisplay(value));
223
+ case 'scale':
224
+ return formatScaleTimelineFieldValueForDisplay({ fieldSchema, value });
225
+ case 'translate':
226
+ return ((_c = formatTranslateTimelineFieldValueForDisplay({ fieldSchema, value })) !== null && _c !== void 0 ? _c : formatUnknownTimelineValueForDisplay(value));
227
+ case 'transform-origin':
228
+ return ((_d = formatTransformOriginTimelineFieldValueForDisplay({
229
+ fieldSchema,
230
+ value,
231
+ })) !== null && _d !== void 0 ? _d : formatUnknownTimelineValueForDisplay(value));
232
+ case 'uv-coordinate':
233
+ return ((_e = formatUvCoordinateTimelineFieldValueForDisplay({ fieldSchema, value })) !== null && _e !== void 0 ? _e : formatUnknownTimelineValueForDisplay(value));
234
+ case 'array':
235
+ case 'boolean':
236
+ case 'color':
237
+ case 'enum':
238
+ case 'hidden':
239
+ return formatUnknownTimelineValueForDisplay(value);
240
+ default:
241
+ return formatUnknownTimelineValueForDisplay(value);
242
+ }
243
+ };
244
+ exports.formatTimelineFieldValueForDisplay = formatTimelineFieldValueForDisplay;
@@ -1,8 +1,51 @@
1
- import type { OverrideIdToNodePaths, PropStatuses, TSequence } from 'remotion';
1
+ import type { CanUpdateSequencePropStatusKeyframed, CanUpdateSequencePropStatusEasing, DragOverrideValue, OverrideIdToNodePaths, PropStatuses, SequencePropsSubscriptionKey, InteractivitySchema, TSequence } from 'remotion';
2
2
  import type { SetPropStatuses } from './save-sequence-prop';
3
3
  import type { TimelineEasingSelection, TimelineSelection } from './TimelineSelection';
4
4
  export type EasingSelection = TimelineEasingSelection;
5
- export type TimelineEasingValue = 'linear' | [number, number, number, number];
5
+ export type TimelineEasingValue = CanUpdateSequencePropStatusEasing;
6
+ export type SelectedEasingUpdate = {
7
+ readonly type: 'sequence';
8
+ readonly fileName: string;
9
+ readonly nodePath: SequencePropsSubscriptionKey;
10
+ readonly fieldKey: string;
11
+ readonly schema: InteractivitySchema;
12
+ readonly segmentIndex: number;
13
+ readonly currentEasing: TimelineEasingValue;
14
+ readonly propStatus: CanUpdateSequencePropStatusKeyframed;
15
+ } | {
16
+ readonly type: 'effect';
17
+ readonly fileName: string;
18
+ readonly nodePath: SequencePropsSubscriptionKey;
19
+ readonly effectIndex: number;
20
+ readonly fieldKey: string;
21
+ readonly schema: InteractivitySchema;
22
+ readonly segmentIndex: number;
23
+ readonly currentEasing: TimelineEasingValue;
24
+ readonly propStatus: CanUpdateSequencePropStatusKeyframed;
25
+ };
26
+ export declare const getSelectedEasingUpdate: ({ selection, sequences, overrideIdsToNodePaths, propStatuses, }: {
27
+ selection: {
28
+ readonly type: "easing";
29
+ readonly nodePathInfo: import("../../helpers/get-timeline-sequence-sort-key").SequenceNodePathInfo;
30
+ readonly fromFrame: number;
31
+ readonly toFrame: number;
32
+ readonly segmentIndex: number;
33
+ };
34
+ sequences: TSequence[];
35
+ overrideIdsToNodePaths: OverrideIdToNodePaths;
36
+ propStatuses: PropStatuses;
37
+ }) => SelectedEasingUpdate | null;
38
+ export declare const getSelectedEasingUpdates: ({ selections, sequences, overrideIdsToNodePaths, propStatuses, }: {
39
+ readonly selections: readonly TimelineSelection[];
40
+ readonly sequences: TSequence[];
41
+ readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
42
+ readonly propStatuses: PropStatuses;
43
+ }) => SelectedEasingUpdate[];
44
+ export declare const makeEasingDragOverride: ({ status, segmentIndex, easing, }: {
45
+ readonly status: CanUpdateSequencePropStatusKeyframed;
46
+ readonly segmentIndex: number;
47
+ readonly easing: CanUpdateSequencePropStatusEasing;
48
+ }) => DragOverrideValue;
6
49
  export declare const getEasingSelections: (selections: readonly TimelineSelection[]) => {
7
50
  readonly type: "easing";
8
51
  readonly nodePathInfo: import("../../helpers/get-timeline-sequence-sort-key").SequenceNodePathInfo;
@@ -21,7 +64,7 @@ export declare const getTimelineEasingValueForSelection: ({ selection, sequences
21
64
  sequences: TSequence[];
22
65
  overrideIdsToNodePaths: OverrideIdToNodePaths;
23
66
  propStatuses: PropStatuses;
24
- }) => TimelineEasingValue | null;
67
+ }) => CanUpdateSequencePropStatusEasing | null;
25
68
  export declare const updateSelectedTimelineEasings: ({ selections, sequences, overrideIdsToNodePaths, propStatuses, setPropStatuses, clientId, easing, }: {
26
69
  selections: readonly TimelineSelection[];
27
70
  sequences: TSequence[];
@@ -29,5 +72,5 @@ export declare const updateSelectedTimelineEasings: ({ selections, sequences, ov
29
72
  propStatuses: PropStatuses;
30
73
  setPropStatuses: SetPropStatuses;
31
74
  clientId: string;
32
- easing: TimelineEasingValue;
75
+ easing: CanUpdateSequencePropStatusEasing;
33
76
  }) => Promise<void> | null;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateSelectedTimelineEasings = exports.getTimelineEasingValueForSelection = exports.getEasingSelections = void 0;
3
+ exports.updateSelectedTimelineEasings = exports.getTimelineEasingValueForSelection = exports.getEasingSelections = exports.makeEasingDragOverride = exports.getSelectedEasingUpdates = exports.getSelectedEasingUpdate = void 0;
4
+ const studio_shared_1 = require("@remotion/studio-shared");
4
5
  const remotion_1 = require("remotion");
5
6
  const call_update_keyframe_settings_1 = require("./call-update-keyframe-settings");
6
7
  const find_track_for_node_path_info_1 = require("./find-track-for-node-path-info");
@@ -42,7 +43,8 @@ const getSelectedEasingUpdate = ({ selection, sequences, overrideIdsToNodePaths,
42
43
  fieldKey: field.fieldKey,
43
44
  schema: sequence.controls.schema,
44
45
  segmentIndex: selection.segmentIndex,
45
- currentEasing: (_c = sequencePropStatus.easing[selection.segmentIndex]) !== null && _c !== void 0 ? _c : 'linear',
46
+ currentEasing: (_c = sequencePropStatus.easing[selection.segmentIndex]) !== null && _c !== void 0 ? _c : studio_shared_1.LINEAR_KEYFRAME_EASING,
47
+ propStatus: sequencePropStatus,
46
48
  };
47
49
  }
48
50
  const effect = sequence.effects[field.effectIndex];
@@ -69,15 +71,46 @@ const getSelectedEasingUpdate = ({ selection, sequences, overrideIdsToNodePaths,
69
71
  fieldKey: field.fieldKey,
70
72
  schema: effect.schema,
71
73
  segmentIndex: selection.segmentIndex,
72
- currentEasing: (_d = effectPropStatus.easing[selection.segmentIndex]) !== null && _d !== void 0 ? _d : 'linear',
74
+ currentEasing: (_d = effectPropStatus.easing[selection.segmentIndex]) !== null && _d !== void 0 ? _d : studio_shared_1.LINEAR_KEYFRAME_EASING,
75
+ propStatus: effectPropStatus,
73
76
  };
74
77
  };
78
+ exports.getSelectedEasingUpdate = getSelectedEasingUpdate;
79
+ const getSelectedEasingUpdates = ({ selections, sequences, overrideIdsToNodePaths, propStatuses, }) => {
80
+ return (0, exports.getEasingSelections)(selections)
81
+ .map((selection) => (0, exports.getSelectedEasingUpdate)({
82
+ selection,
83
+ sequences,
84
+ overrideIdsToNodePaths,
85
+ propStatuses,
86
+ }))
87
+ .filter((update) => update !== null);
88
+ };
89
+ exports.getSelectedEasingUpdates = getSelectedEasingUpdates;
90
+ const makeEasingDragOverride = ({ status, segmentIndex, easing, }) => {
91
+ const nextEasing = [...status.easing];
92
+ while (nextEasing.length < status.keyframes.length - 1) {
93
+ nextEasing.push(studio_shared_1.LINEAR_KEYFRAME_EASING);
94
+ }
95
+ if (nextEasing.length > status.keyframes.length - 1) {
96
+ nextEasing.length = status.keyframes.length - 1;
97
+ }
98
+ nextEasing[segmentIndex] = easing;
99
+ return {
100
+ type: 'keyframed',
101
+ status: {
102
+ ...status,
103
+ easing: nextEasing,
104
+ },
105
+ };
106
+ };
107
+ exports.makeEasingDragOverride = makeEasingDragOverride;
75
108
  const getEasingSelections = (selections) => selections.filter(isEasingSelection);
76
109
  exports.getEasingSelections = getEasingSelections;
77
110
  const getTimelineEasingValueForSelection = ({ selection, sequences, overrideIdsToNodePaths, propStatuses, }) => {
78
111
  var _a;
79
112
  var _b;
80
- return ((_b = (_a = getSelectedEasingUpdate({
113
+ return ((_b = (_a = (0, exports.getSelectedEasingUpdate)({
81
114
  selection,
82
115
  sequences,
83
116
  overrideIdsToNodePaths,
@@ -90,14 +123,12 @@ const updateSelectedTimelineEasings = ({ selections, sequences, overrideIdsToNod
90
123
  if (easingSelections.length === 0) {
91
124
  return null;
92
125
  }
93
- const updates = easingSelections
94
- .map((selection) => getSelectedEasingUpdate({
95
- selection,
126
+ const updates = (0, exports.getSelectedEasingUpdates)({
127
+ selections: easingSelections,
96
128
  sequences,
97
129
  overrideIdsToNodePaths,
98
130
  propStatuses,
99
- }))
100
- .filter((update) => update !== null);
131
+ });
101
132
  if (updates.length === 0) {
102
133
  return null;
103
134
  }
@@ -7,6 +7,8 @@ const timeline_layout_1 = require("../../helpers/timeline-layout");
7
7
  const timeline_node_path_key_1 = require("../../helpers/timeline-node-path-key");
8
8
  const ExpandedTracksProvider_1 = require("../ExpandedTracksProvider");
9
9
  const get_node_keyframes_1 = require("./get-node-keyframes");
10
+ const timeline_expanded_filter_1 = require("./timeline-expanded-filter");
11
+ const TimelineSelection_1 = require("./TimelineSelection");
10
12
  const canEditEasingForInterpolationFunction = (interpolationFunction) => interpolationFunction === 'interpolate' ||
11
13
  interpolationFunction === 'interpolateColors';
12
14
  const getNodeCanEditEasing = ({ node, nodePath, propStatuses, }) => {
@@ -34,6 +36,7 @@ const useExpandedTrackKeyframeRows = ({ sequence, nodePathInfo, keyframeDisplayO
34
36
  const { getIsExpanded } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksGetterContext);
35
37
  const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
36
38
  const { getDragOverrides, getEffectDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
39
+ const { selectedItems } = (0, TimelineSelection_1.useTimelineSelection)();
37
40
  const timelinePosition = remotion_1.Internals.Timeline.useTimelinePosition();
38
41
  const tree = (0, react_1.useMemo)(() => (0, timeline_layout_1.buildTimelineTree)({
39
42
  sequence,
@@ -48,16 +51,37 @@ const useExpandedTrackKeyframeRows = ({ sequence, nodePathInfo, keyframeDisplayO
48
51
  nodePathInfo,
49
52
  sequence,
50
53
  ]);
51
- const flat = (0, react_1.useMemo)(() => (0, timeline_layout_1.flattenVisibleTreeNodes)({ nodes: tree, getIsExpanded }), [tree, getIsExpanded]);
52
- const expandedHeight = (0, react_1.useMemo)(() => (0, timeline_layout_1.getExpandedTrackHeight)({
53
- sequence,
54
- nodePathInfo,
55
- getIsExpanded,
54
+ const selectedRowKeys = (0, react_1.useMemo)(() => (0, timeline_expanded_filter_1.getSelectedTimelineExpandedRowKeys)(selectedItems), [selectedItems]);
55
+ const filteredTree = (0, react_1.useMemo)(() => (0, timeline_expanded_filter_1.filterTimelineExpandedTree)({
56
+ nodes: tree,
57
+ shouldShowNode: (node) => (0, timeline_expanded_filter_1.isTimelineExpandedNodeSelected)({
58
+ nodePathInfo: node.nodePathInfo,
59
+ selectedRowKeys,
60
+ }) ||
61
+ (0, get_node_keyframes_1.getNodeHasKeyframes)({
62
+ node,
63
+ nodePath: nodePathInfo.sequenceSubscriptionKey,
64
+ propStatuses,
65
+ getDragOverrides,
66
+ getEffectDragOverrides,
67
+ }),
68
+ }), [
69
+ getDragOverrides,
70
+ getEffectDragOverrides,
71
+ nodePathInfo.sequenceSubscriptionKey,
56
72
  propStatuses,
57
- }), [propStatuses, getIsExpanded, nodePathInfo, sequence]);
58
- const rows = (0, react_1.useMemo)(() => flat.map(({ node }) => ({
59
- height: (0, timeline_layout_1.getTreeRowHeight)(node),
60
- keyframes: (0, get_node_keyframes_1.getNodeKeyframes)({
73
+ selectedRowKeys,
74
+ tree,
75
+ ]);
76
+ const flat = (0, react_1.useMemo)(() => (0, timeline_layout_1.flattenVisibleTreeNodes)({ nodes: filteredTree, getIsExpanded }), [filteredTree, getIsExpanded]);
77
+ const expandedHeight = (0, react_1.useMemo)(() => {
78
+ const totalRowsHeight = flat.reduce((sum, { node }) => sum + (0, timeline_layout_1.getTreeRowHeight)(node), 0);
79
+ const separators = Math.max(0, flat.length - 1);
80
+ return totalRowsHeight + separators;
81
+ }, [flat]);
82
+ const nodeKeyframes = (0, react_1.useMemo)(() => new Map(flat.map(({ node }) => [
83
+ (0, timeline_node_path_key_1.timelineNodePathInfoToKey)(node.nodePathInfo),
84
+ (0, get_node_keyframes_1.getNodeKeyframes)({
61
85
  node,
62
86
  nodePath: nodePathInfo.sequenceSubscriptionKey,
63
87
  propStatuses,
@@ -66,22 +90,30 @@ const useExpandedTrackKeyframeRows = ({ sequence, nodePathInfo, keyframeDisplayO
66
90
  getEffectDragOverrides,
67
91
  timelinePosition,
68
92
  }),
69
- canEditEasing: getNodeCanEditEasing({
70
- node,
71
- nodePath: nodePathInfo.sequenceSubscriptionKey,
72
- propStatuses,
73
- }),
74
- rowKey: (0, timeline_node_path_key_1.timelineNodePathInfoToKey)(node.nodePathInfo),
75
- nodePathInfo: node.nodePathInfo,
76
- })), [
77
- propStatuses,
93
+ ])), [
78
94
  flat,
79
95
  getDragOverrides,
80
96
  getEffectDragOverrides,
81
97
  keyframeDisplayOffset,
82
98
  nodePathInfo.sequenceSubscriptionKey,
99
+ propStatuses,
83
100
  timelinePosition,
84
101
  ]);
102
+ const rows = (0, react_1.useMemo)(() => flat.map(({ node }) => {
103
+ var _a;
104
+ const rowKey = (0, timeline_node_path_key_1.timelineNodePathInfoToKey)(node.nodePathInfo);
105
+ return {
106
+ height: (0, timeline_layout_1.getTreeRowHeight)(node),
107
+ keyframes: (_a = nodeKeyframes.get(rowKey)) !== null && _a !== void 0 ? _a : [],
108
+ canEditEasing: getNodeCanEditEasing({
109
+ node,
110
+ nodePath: nodePathInfo.sequenceSubscriptionKey,
111
+ propStatuses,
112
+ }),
113
+ rowKey,
114
+ nodePathInfo: node.nodePathInfo,
115
+ };
116
+ }), [propStatuses, flat, nodePathInfo.sequenceSubscriptionKey, nodeKeyframes]);
85
117
  return { rows, expandedHeight };
86
118
  };
87
119
  exports.useExpandedTrackKeyframeRows = useExpandedTrackKeyframeRows;
@@ -0,0 +1,13 @@
1
+ import type { CanUpdateSequencePropStatus, SequencePropsSubscriptionKey, TSequence } from 'remotion';
2
+ import type { ComboboxValue } from '../NewComposition/ComboBox';
3
+ import { type SetPropStatuses } from './save-sequence-prop';
4
+ export declare const useSequenceFreezeFrameMenuItem: ({ clientId, nodePath, propStatusesForOverride, sequence, sequenceFrameOffset, setPropStatuses, timelinePosition, validatedSource, }: {
5
+ readonly clientId: string | null;
6
+ readonly nodePath: SequencePropsSubscriptionKey | null;
7
+ readonly propStatusesForOverride: Record<string, CanUpdateSequencePropStatus> | undefined;
8
+ readonly sequence: TSequence;
9
+ readonly sequenceFrameOffset: number;
10
+ readonly setPropStatuses: SetPropStatuses;
11
+ readonly timelinePosition: number;
12
+ readonly validatedSource: string | null;
13
+ }) => ComboboxValue;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSequenceFreezeFrameMenuItem = void 0;
4
+ const react_1 = require("react");
5
+ const save_sequence_prop_1 = require("./save-sequence-prop");
6
+ const useSequenceFreezeFrameMenuItem = ({ clientId, nodePath, propStatusesForOverride, sequence, sequenceFrameOffset, setPropStatuses, timelinePosition, validatedSource, }) => {
7
+ const freezeStatus = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.freeze;
8
+ const isFrozen = (freezeStatus === null || freezeStatus === void 0 ? void 0 : freezeStatus.status) === 'static' &&
9
+ typeof freezeStatus.codeValue === 'number';
10
+ const canToggleFreeze = clientId !== null &&
11
+ Boolean(sequence.controls) &&
12
+ nodePath !== null &&
13
+ validatedSource !== null &&
14
+ freezeStatus !== undefined &&
15
+ freezeStatus !== null &&
16
+ freezeStatus.status === 'static';
17
+ const onToggleFreezeFrame = (0, react_1.useCallback)(() => {
18
+ if (!canToggleFreeze ||
19
+ !sequence.controls ||
20
+ nodePath === null ||
21
+ validatedSource === null ||
22
+ clientId === null) {
23
+ return;
24
+ }
25
+ const rawFreezeFrame = Math.round(timelinePosition - sequence.from + sequenceFrameOffset);
26
+ const maxFrame = Number.isFinite(sequence.duration)
27
+ ? Math.max(0, sequence.duration - 1)
28
+ : rawFreezeFrame;
29
+ const freezeFrame = Math.min(Math.max(0, rawFreezeFrame), maxFrame);
30
+ const remove = isFrozen;
31
+ (0, save_sequence_prop_1.saveSequenceProps)({
32
+ changes: [
33
+ {
34
+ fileName: validatedSource,
35
+ nodePath,
36
+ fieldKey: 'freeze',
37
+ value: remove ? null : freezeFrame,
38
+ defaultValue: null,
39
+ schema: sequence.controls.schema,
40
+ },
41
+ ],
42
+ setPropStatuses,
43
+ clientId,
44
+ undoLabel: remove ? 'Unfreeze sequence' : 'Freeze sequence',
45
+ redoLabel: remove ? 'Freeze sequence again' : 'Unfreeze sequence again',
46
+ });
47
+ }, [
48
+ canToggleFreeze,
49
+ clientId,
50
+ isFrozen,
51
+ nodePath,
52
+ sequence.controls,
53
+ sequence.duration,
54
+ sequence.from,
55
+ sequenceFrameOffset,
56
+ setPropStatuses,
57
+ timelinePosition,
58
+ validatedSource,
59
+ ]);
60
+ return (0, react_1.useMemo)(() => ({
61
+ type: 'item',
62
+ id: 'toggle-freeze-frame',
63
+ keyHint: null,
64
+ label: isFrozen ? 'Unfreeze frame' : 'Freeze frame',
65
+ leftItem: null,
66
+ disabled: !canToggleFreeze,
67
+ onClick: onToggleFreezeFrame,
68
+ quickSwitcherLabel: null,
69
+ subMenu: null,
70
+ value: 'toggle-freeze-frame',
71
+ }), [canToggleFreeze, isFrozen, onToggleFreezeFrame]);
72
+ };
73
+ exports.useSequenceFreezeFrameMenuItem = useSequenceFreezeFrameMenuItem;
@@ -1,9 +1,9 @@
1
- import type { SequenceSchema } from 'remotion';
1
+ import type { InteractivitySchema } from 'remotion';
2
2
  import type { OriginalPosition } from '../../error-overlay/react-overlay/utils/get-source-map';
3
3
  export declare const useSequencePropsSubscription: ({ originalLocation, overrideId, componentIdentity, schema, effects, }: {
4
4
  overrideId: string;
5
5
  componentIdentity: string | null;
6
- schema: SequenceSchema;
7
- effects: SequenceSchema[];
6
+ schema: InteractivitySchema;
7
+ effects: InteractivitySchema[];
8
8
  originalLocation: OriginalPosition | null;
9
9
  }) => void;
@@ -0,0 +1,12 @@
1
+ import { type TSequence } from 'remotion';
2
+ import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
3
+ export declare const useTimelineExpandedTree: ({ sequence, nodePathInfo, }: {
4
+ readonly sequence: TSequence;
5
+ readonly nodePathInfo: SequenceNodePathInfo;
6
+ }) => {
7
+ filteredTree: import("../../helpers/timeline-layout").TimelineTreeNode[];
8
+ getIsExpanded: import("../ExpandedTracksProvider").GetIsExpanded;
9
+ propStatuses: import("remotion").PropStatuses;
10
+ toggleTrack: (nodePathInfo: SequenceNodePathInfo) => void;
11
+ tree: import("../../helpers/timeline-layout").TimelineTreeNode[];
12
+ };