@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
|
@@ -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 =
|
|
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
|
-
}) =>
|
|
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:
|
|
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 :
|
|
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 :
|
|
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 =
|
|
94
|
-
|
|
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
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
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 {
|
|
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:
|
|
7
|
-
effects:
|
|
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
|
+
};
|