@remotion/studio 4.0.528 → 4.0.529
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/Studio.js +2 -0
- package/dist/components/AgentPrompt.js +2 -2
- package/dist/components/AppLaunchButton.d.ts +0 -1
- package/dist/components/AppLaunchButton.js +2 -5
- package/dist/components/AssetAudioVolume.js +2 -2
- package/dist/components/AssetSelectorItem.js +5 -5
- package/dist/components/Button.d.ts +1 -1
- package/dist/components/Button.js +2 -2
- package/dist/components/CaptionInspector.js +1 -1
- package/dist/components/CaptionTextEditor.js +1 -1
- package/dist/components/CheckboardToggle.js +1 -1
- package/dist/components/CodingAgentButton.js +1 -1
- package/dist/components/ColorPicker/ColorPicker.d.ts +1 -1
- package/dist/components/ColorPicker/ColorPicker.js +2 -2
- package/dist/components/ColorPicker/ColorPickerPopup.js +1 -1
- package/dist/components/CompactExplanation.js +3 -3
- package/dist/components/CompositionSelectorItem.js +2 -2
- package/dist/components/ConfigSelect.js +1 -1
- package/dist/components/ConfigureDefaultEditorModal.js +2 -2
- package/dist/components/ControlButton.d.ts +0 -1
- package/dist/components/ControlButton.js +2 -2
- package/dist/components/CurrentAsset.js +1 -1
- package/dist/components/ElementLibrariesSettings.js +1 -1
- package/dist/components/ElementLibraryModal.js +1 -1
- package/dist/components/FramePersistor.js +3 -3
- package/dist/components/FullscreenToggle.js +1 -1
- package/dist/components/InitialCompositionLoader.js +3 -3
- package/dist/components/InlineAction.d.ts +2 -2
- package/dist/components/InlineAction.js +2 -3
- package/dist/components/InlineEditableTitle.d.ts +1 -1
- package/dist/components/InlineEditableTitle.js +3 -3
- package/dist/components/InspectorLocationCopy.js +1 -1
- package/dist/components/InspectorOpenInEditor.js +1 -3
- package/dist/components/InspectorPanel/AlignmentControls.js +3 -3
- package/dist/components/InspectorPanel/CompositionInspector.js +1 -5
- package/dist/components/InspectorPanel/CompositionMetadata.js +4 -4
- package/dist/components/InspectorPanel/EasingInspector.js +1 -1
- package/dist/components/InspectorPanel/ElementLibraryButton.js +3 -14
- package/dist/components/InspectorPanel/KeyframeEasingNavigator.js +6 -8
- package/dist/components/InspectorPanel/KeyframeInspector.js +1 -1
- package/dist/components/InspectorPanel/KeyframeSettings.js +16 -11
- package/dist/components/InspectorPanel/MultiSequenceField.js +1 -1
- package/dist/components/InspectorPanel/MultiSequenceInspector.js +2 -7
- package/dist/components/InspectorPanel/MultiSequenceNumberField.js +2 -2
- package/dist/components/InspectorPanel/SequenceInspectorHeader.js +1 -1
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +4 -13
- package/dist/components/InspectorPanel/SequenceWrapAction.js +6 -14
- package/dist/components/InspectorPanel/common.d.ts +6 -2
- package/dist/components/InspectorPanel/common.js +25 -9
- package/dist/components/InspectorSequenceSection.js +5 -5
- package/dist/components/InspectorSourceLocation.js +2 -2
- package/dist/components/KeyboardShortcutsSettings.js +1 -1
- package/dist/components/LicenseKeyValidation.js +2 -2
- package/dist/components/LoopToggle.js +1 -1
- package/dist/components/Menu/MenuSubItem.js +4 -2
- package/dist/components/MenuBuildIndicator.js +1 -1
- package/dist/components/MenuCompositionName.js +1 -1
- package/dist/components/ModelManager.js +1 -1
- package/dist/components/MuteToggle.js +1 -1
- package/dist/components/NewComposition/ComboBox.d.ts +1 -1
- package/dist/components/NewComposition/ComboBox.js +2 -2
- package/dist/components/NewComposition/DuplicateComposition.js +1 -1
- package/dist/components/NewComposition/InputDragger.d.ts +1 -1
- package/dist/components/NewComposition/InputDragger.js +1 -1
- package/dist/components/NewComposition/NewComposition.js +1 -1
- package/dist/components/OpenIssueButton.js +1 -1
- package/dist/components/OutlineToggle.js +1 -1
- package/dist/components/PlayPause.js +1 -1
- package/dist/components/PlaybackRateSelector.js +1 -1
- package/dist/components/Preview.js +2 -3
- package/dist/components/PreviewToolbarOverflowButton.js +1 -1
- package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -1
- package/dist/components/RenderButton.js +2 -4
- package/dist/components/RenderModal/InfoBubble.d.ts +1 -1
- package/dist/components/RenderModal/InfoBubble.js +2 -2
- package/dist/components/RenderModal/NumberSetting.js +1 -1
- package/dist/components/RenderModal/OptionExplainerBubble.js +2 -2
- package/dist/components/RenderModal/RenderModalAdvanced.js +2 -2
- package/dist/components/RenderModal/RenderModalAudio.js +2 -2
- package/dist/components/RenderModal/RenderModalBasic.js +3 -3
- package/dist/components/RenderModal/RenderModalEncoding.js +4 -4
- package/dist/components/RenderModal/RenderModalOutputName.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/SchemaLabel.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/ZodFieldValidation.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
- package/dist/components/RenderModal/WebRenderModalAdvanced.js +2 -2
- package/dist/components/RenderModal/WebRenderModalAudio.js +2 -2
- package/dist/components/RenderModal/WebRenderModalBasic.js +3 -3
- package/dist/components/RenderModal/WebRenderModalPicture.js +1 -1
- package/dist/components/RenderQueue/CaptionQueueItem.js +1 -1
- package/dist/components/RenderQueue/QueueJobError.js +1 -1
- package/dist/components/RenderQueue/RenderQueueError.js +1 -1
- package/dist/components/RenderQueue/RenderQueueOutputName.js +1 -1
- package/dist/components/RenderQueue/RenderQueueProgressMessage.js +1 -1
- package/dist/components/RenderQueue/VideoMattingQueueItem.js +1 -1
- package/dist/components/RenderingSettings.js +6 -6
- package/dist/components/RulersAndGuidesToggle.js +1 -1
- package/dist/components/SegmentedButton.d.ts +0 -2
- package/dist/components/SegmentedButton.js +6 -6
- package/dist/components/SelectedOutlineOverlay.js +15 -2
- package/dist/components/SelectedOutlinePathPoints.js +45 -21
- package/dist/components/SelectedOutlineRenderer.js +1 -1
- package/dist/components/SettingsButton.js +1 -1
- package/dist/components/SettingsModalFooter.js +1 -1
- package/dist/components/SizeSelector.js +1 -1
- package/dist/components/SkillsSettings.js +2 -2
- package/dist/components/SnappingToggle.js +1 -1
- package/dist/components/StudioSettings.js +2 -2
- package/dist/components/TimeValue.js +1 -3
- package/dist/components/Timeline/EasingEditorModal.js +3 -3
- package/dist/components/Timeline/TimelineArrayField.js +2 -2
- package/dist/components/Timeline/TimelineAssetField.js +3 -3
- package/dist/components/Timeline/TimelineColorField.js +2 -2
- package/dist/components/Timeline/TimelineDragHandler.js +3 -3
- package/dist/components/Timeline/TimelineDuplicateCount.js +1 -1
- package/dist/components/Timeline/TimelineEffectItem.js +1 -1
- package/dist/components/Timeline/TimelineEnumField.js +1 -1
- package/dist/components/Timeline/TimelineFieldLabel.js +1 -1
- package/dist/components/Timeline/TimelineFontFamilyField.js +2 -2
- package/dist/components/Timeline/TimelineFontWeightField.js +1 -1
- package/dist/components/Timeline/TimelineKeyframeControls.js +4 -4
- package/dist/components/Timeline/TimelineKeyframeDiamond.js +1 -1
- package/dist/components/Timeline/TimelineKeyframeEasingLine.js +1 -1
- package/dist/components/Timeline/TimelineLayerChildren.js +1 -1
- package/dist/components/Timeline/TimelineList.js +15 -7
- package/dist/components/Timeline/TimelineMediaInfo.js +1 -1
- package/dist/components/Timeline/TimelineScaleField.js +1 -1
- package/dist/components/Timeline/TimelineSchemaField.js +2 -2
- package/dist/components/Timeline/TimelineSequence.js +1 -1
- package/dist/components/Timeline/TimelineSequenceItem.js +34 -16
- package/dist/components/Timeline/TimelineSequenceName.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequenceName.js +38 -6
- package/dist/components/Timeline/TimelineSequencePropItem.js +6 -4
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +2 -2
- package/dist/components/Timeline/TimelineZoomControls.js +2 -2
- package/dist/components/Timeline/get-sequence-split-menu-item.js +2 -2
- package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +1 -1
- package/dist/components/Timeline/use-timeline-expanded-tree.js +3 -0
- package/dist/components/TimelineCombobox.d.ts +1 -1
- package/dist/components/TimelineCombobox.js +5 -6
- package/dist/components/TimelineInOutToggle.js +1 -1
- package/dist/components/Transcription/TranscriptionModal.js +6 -6
- package/dist/components/UndoRedoButtons.js +1 -1
- package/dist/components/UpdatesSettings.js +2 -2
- package/dist/components/VideoMatting/VideoMattingModal.js +4 -4
- package/dist/components/selected-outline-types.d.ts +2 -0
- package/dist/error-overlay/remotion-overlay/CompositionIdListItem.js +1 -1
- package/dist/error-overlay/remotion-overlay/OpenInEditor.js +1 -1
- package/dist/error-overlay/remotion-overlay/StackFrame.js +1 -1
- package/dist/esm/{CaptionQueueProcessor-nr7hjcga.mjs → CaptionQueueProcessor-qj37c6r2.mjs} +2 -2
- package/dist/esm/{LazyModels-ajkn7fs3.mjs → LazyModels-rjsrgap5.mjs} +4 -4
- package/dist/esm/{LazyModels-g1g7cf4e.mjs → LazyModels-rnbjx98t.mjs} +4 -4
- package/dist/esm/{TranscriptionModal-e18bzbkb.mjs → TranscriptionModal-y7zeqj2d.mjs} +15 -15
- package/dist/esm/{VideoMattingModal-5bz2s4rs.mjs → VideoMattingModal-jzrkhah1.mjs} +13 -13
- package/dist/esm/{index-s6qya2gg.mjs → index-19d05w9e.mjs} +1 -1
- package/dist/esm/{index-t7tbt980.mjs → index-24wge6y5.mjs} +2 -3
- package/dist/esm/{index-wqc43mw0.mjs → index-3qb54r5j.mjs} +4 -5
- package/dist/esm/{index-c2wabcdt.mjs → index-cakcjjy2.mjs} +6 -6
- package/dist/esm/{index-9q9w8v9p.mjs → index-f9hxt5yh.mjs} +1 -1
- package/dist/esm/{index-8nt6a0mw.mjs → index-jc22b2wb.mjs} +1 -1
- package/dist/esm/{index-890dd9b3.mjs → index-m01zjph7.mjs} +3 -5
- package/dist/esm/{index-x6r9bn12.mjs → index-m2a95v3p.mjs} +925 -237
- package/dist/esm/{index-xac20sv4.mjs → index-r9bj4tta.mjs} +7 -7
- package/dist/esm/{index-t7xnxdf8.mjs → index-vnc2wdfd.mjs} +4 -5
- package/dist/esm/{index-dh3zk2hv.mjs → index-vtr5qzam.mjs} +1 -1
- package/dist/esm/{index-dpyss74p.mjs → index-x7kg7jqv.mjs} +814 -723
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/internals.mjs +9 -9
- package/dist/esm/previewEntry.mjs +9 -9
- package/dist/esm/renderEntry.mjs +2 -2
- package/dist/helpers/checkerboard-background.d.ts +2 -2
- package/dist/helpers/checkerboard-background.js +1 -1
- package/dist/helpers/colors.d.ts +1 -2
- package/dist/helpers/colors.js +7 -8
- package/dist/helpers/studio-css-variables.d.ts +1 -1
- package/dist/helpers/studio-css-variables.js +2 -3
- package/dist/icons/snowflake.js +1 -3
- package/dist/icons/{scissors.d.ts → split.d.ts} +1 -1
- package/dist/icons/split.js +8 -0
- package/dist/icons/trash.js +2 -2
- package/dist/icons/wrap.js +1 -1
- package/package.json +20 -20
- package/dist/icons/scissors.js +0 -8
|
@@ -229,7 +229,7 @@ const TimelineAssetField = ({ field, effectiveValue, propStatus, onSave, onDragV
|
|
|
229
229
|
selectFile,
|
|
230
230
|
setSelectedModal,
|
|
231
231
|
]);
|
|
232
|
-
const action = (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: openAssetSelection, disabled: window.remotion_isReadOnlyStudio,
|
|
232
|
+
const action = (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: openAssetSelection, disabled: window.remotion_isReadOnlyStudio, "aria-label": "Change source", renderAction: (color) => jsx_runtime_1.jsx(pen_1.PenIcon, { color: color, style: penIcon }) }));
|
|
233
233
|
if (imageLinkInfo !== null) {
|
|
234
234
|
const linkInfo = imageLinkInfo;
|
|
235
235
|
let name;
|
|
@@ -258,7 +258,7 @@ const TimelineAssetField = ({ field, effectiveValue, propStatus, onSave, onDragV
|
|
|
258
258
|
const opensSource = linkInfo.kind === 'local' &&
|
|
259
259
|
inlineSourceAction !== null &&
|
|
260
260
|
inlineSourceAction.onClick !== null;
|
|
261
|
-
const
|
|
261
|
+
const sourceDescription = (_b = inlineSourceAction === null || inlineSourceAction === void 0 ? void 0 : inlineSourceAction['aria-label']) !== null && _b !== void 0 ? _b : linkInfo.title;
|
|
262
262
|
const onPreviewClick = opensSource
|
|
263
263
|
? inlineSourceAction.onClick
|
|
264
264
|
: openAssetSelection;
|
|
@@ -277,7 +277,7 @@ const TimelineAssetField = ({ field, effectiveValue, propStatus, onSave, onDragV
|
|
|
277
277
|
hoverColor: previewDisabled ? colors_1.LIGHT_TEXT : colors_1.WHITE,
|
|
278
278
|
}),
|
|
279
279
|
};
|
|
280
|
-
const previewAction = (jsx_runtime_1.jsxs("button", { "aria-label": previewLabel, className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME}`, disabled: previewDisabled, onClick: onPreviewClick, style: previewButtonStyle,
|
|
280
|
+
const previewAction = (jsx_runtime_1.jsxs("button", { "aria-label": previewLabel, "aria-description": sourceDescription, className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME}`, disabled: previewDisabled, onClick: onPreviewClick, style: previewButtonStyle, type: "button", children: [
|
|
281
281
|
jsx_runtime_1.jsx("span", { style: thumbnailContainer, children: jsx_runtime_1.jsx("img", { alt: "", draggable: false, src: previewSrc, style: thumbnail }) }), jsx_runtime_1.jsxs("span", { style: imageAssetInfo, children: [
|
|
282
282
|
jsx_runtime_1.jsx("span", { style: imageAssetName, children: name }), source === null ? null : (jsx_runtime_1.jsx("span", { style: imageAssetSource, children: source }))] })
|
|
283
283
|
] }));
|
|
@@ -44,9 +44,9 @@ const TimelineColorField = ({ field, effectiveValue, propStatus, onSave, onDragV
|
|
|
44
44
|
}, [onSave, onDragEnd, propStatus]);
|
|
45
45
|
if (currentValue === 'none') {
|
|
46
46
|
return (jsx_runtime_1.jsxs("span", { style: containerStyle, children: [
|
|
47
|
-
jsx_runtime_1.jsx("span", { style: noneLabelStyle, children: "None" }), jsx_runtime_1.jsx("button", { type: "button", style: setButtonStyle,
|
|
47
|
+
jsx_runtime_1.jsx("span", { style: noneLabelStyle, children: "None" }), jsx_runtime_1.jsx("button", { type: "button", style: setButtonStyle, "aria-label": `Set ${(_b = field.description) !== null && _b !== void 0 ? _b : field.key} to gray`, onClick: () => onChangeComplete(DEFAULT_SET_COLOR), children: "Set" })
|
|
48
48
|
] }));
|
|
49
49
|
}
|
|
50
|
-
return (jsx_runtime_1.jsx("span", { style: containerStyle, children: jsx_runtime_1.jsx(ColorPicker_1.ColorPicker, { value: currentValue, status: "ok", onChange: onChange, onChangeComplete: onChangeComplete, width: SWATCH_WIDTH, height: SWATCH_HEIGHT, disabled: false, name: field.key,
|
|
50
|
+
return (jsx_runtime_1.jsx("span", { style: containerStyle, children: jsx_runtime_1.jsx(ColorPicker_1.ColorPicker, { value: currentValue, status: "ok", onChange: onChange, onChangeComplete: onChangeComplete, width: SWATCH_WIDTH, height: SWATCH_HEIGHT, disabled: false, name: field.key, "aria-label": currentValue }) }));
|
|
51
51
|
};
|
|
52
52
|
exports.TimelineColorField = TimelineColorField;
|
|
@@ -122,7 +122,7 @@ const TimelineDragHandlerInner = () => {
|
|
|
122
122
|
shouldApplyCssTransforms: true,
|
|
123
123
|
});
|
|
124
124
|
const { isHighestContext } = (0, z_index_1.useZIndex)();
|
|
125
|
-
const
|
|
125
|
+
const seekFrame = remotion_1.Internals.Timeline.useTimelineSeekFrame();
|
|
126
126
|
const width = (0, timeline_scroll_logic_1.getTimelineContentWidth)();
|
|
127
127
|
const left = (_a = size === null || size === void 0 ? void 0 : size.left) !== null && _a !== void 0 ? _a : 0;
|
|
128
128
|
const [dragging, setDragging] = (0, react_1.useState)({
|
|
@@ -238,7 +238,7 @@ const TimelineDragHandlerInner = () => {
|
|
|
238
238
|
width,
|
|
239
239
|
extrapolate: 'clamp',
|
|
240
240
|
});
|
|
241
|
-
|
|
241
|
+
seekFrame((c) => {
|
|
242
242
|
if (c[videoConfig.id] === frame) {
|
|
243
243
|
return c;
|
|
244
244
|
}
|
|
@@ -249,7 +249,7 @@ const TimelineDragHandlerInner = () => {
|
|
|
249
249
|
if (dragging.wasPlaying) {
|
|
250
250
|
play();
|
|
251
251
|
}
|
|
252
|
-
}, [dragging, left, play, videoConfig,
|
|
252
|
+
}, [dragging, left, play, videoConfig, seekFrame, width]);
|
|
253
253
|
const onPointerCancelScrubbing = (0, react_1.useCallback)(() => {
|
|
254
254
|
var _a;
|
|
255
255
|
(_a = autoScroller.current) === null || _a === void 0 ? void 0 : _a.stop();
|
|
@@ -23,6 +23,6 @@ const badgeStyle = {
|
|
|
23
23
|
};
|
|
24
24
|
const TimelineDuplicateCount = ({ count }) => {
|
|
25
25
|
const label = `${count} other programmatically duplicated ${count === 1 ? 'instance is' : 'instances are'} hidden`;
|
|
26
|
-
return (jsx_runtime_1.jsxs("span", {
|
|
26
|
+
return (jsx_runtime_1.jsxs("span", { role: "group", style: badgeStyle, "aria-label": label, children: ["+", count] }));
|
|
27
27
|
};
|
|
28
28
|
exports.TimelineDuplicateCount = TimelineDuplicateCount;
|
|
@@ -351,7 +351,7 @@ const TimelineEffectItem = ({ label, nodePathInfo, effectIndex, effectSchema, do
|
|
|
351
351
|
};
|
|
352
352
|
}, [dropIndicator]);
|
|
353
353
|
const row = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: canToggle ? (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEye, { type: "effect", hidden: isDisabled, onInvoked: onToggle })) : (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {})), arrow: labelNextToToggle ? null : jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}), style: rowStyle, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection: containsSelection, outerHeight: null, children: jsx_runtime_1.jsxs("div", { style: labelContainerStyle, children: [
|
|
354
|
-
jsx_runtime_1.jsx("span", {
|
|
354
|
+
jsx_runtime_1.jsx("span", { role: "group", "aria-label": label, style: labelStyle, children: label }), jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowButton, { isExpanded: isExpanded, onClick: () => toggleTrack(nodePathInfo), label: `${label} section`, disabled: false })
|
|
355
355
|
] }) }));
|
|
356
356
|
const draggableRow = canReorder ? (jsx_runtime_1.jsxs("div", { draggable: true, onDragStart: onDragStart, onDragEnd: onDragEnd, onDragOver: onDragOver, onDragLeave: onDragLeave, onDrop: onDrop, style: reorderWrapper, children: [reorderLineStyle ? jsx_runtime_1.jsx("div", { style: reorderLineStyle }) : null, row] })) : (row);
|
|
357
357
|
return previewConnected ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: draggableRow })) : (draggableRow);
|
|
@@ -34,6 +34,6 @@ const TimelineEnumField = ({ field, propStatus, effectiveValue, onSave, onDragVa
|
|
|
34
34
|
disabled: false,
|
|
35
35
|
}));
|
|
36
36
|
}, [variantKeys, onSelect]);
|
|
37
|
-
return (jsx_runtime_1.jsx(ComboBox_1.Combobox, { size: "small",
|
|
37
|
+
return (jsx_runtime_1.jsx(ComboBox_1.Combobox, { size: "small", "aria-label": field.key, selectedId: current, values: items }));
|
|
38
38
|
};
|
|
39
39
|
exports.TimelineEnumField = TimelineEnumField;
|
|
@@ -33,6 +33,6 @@ const TimelineFieldLabel = ({ rowDepth, selected, label, stacked = false }) => {
|
|
|
33
33
|
...fieldNameBase,
|
|
34
34
|
color: (0, TimelineSelection_1.getTimelineColor)(selected, true),
|
|
35
35
|
}), [selected]);
|
|
36
|
-
return (jsx_runtime_1.jsx("div", { style: labelRowStyle, children: jsx_runtime_1.jsx("span", { style: fieldNameStyle,
|
|
36
|
+
return (jsx_runtime_1.jsx("div", { style: labelRowStyle, children: jsx_runtime_1.jsx("span", { role: "group", style: fieldNameStyle, "aria-label": label, children: label }) }));
|
|
37
37
|
};
|
|
38
38
|
exports.TimelineFieldLabel = TimelineFieldLabel;
|
|
@@ -495,7 +495,7 @@ const TimelineFontFamilyField = ({ field, propStatus, effectiveValue, onSave, on
|
|
|
495
495
|
}, [hovered, opened]);
|
|
496
496
|
const selectedPreviewStyle = getOptionPreviewStyle(selected);
|
|
497
497
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
498
|
-
jsx_runtime_1.jsxs("button", { ref: buttonRef,
|
|
498
|
+
jsx_runtime_1.jsxs("button", { ref: buttonRef, "aria-label": field.key, tabIndex: tabIndex, type: "button", style: style, className: is_menu_item_1.MENU_INITIATOR_CLASSNAME, onPointerDown: (event) => {
|
|
499
499
|
event.stopPropagation();
|
|
500
500
|
toggleOpened();
|
|
501
501
|
}, onClick: (event) => {
|
|
@@ -504,7 +504,7 @@ const TimelineFontFamilyField = ({ field, propStatus, effectiveValue, onSave, on
|
|
|
504
504
|
toggleOpened();
|
|
505
505
|
}
|
|
506
506
|
}, onMouseEnter: () => setHovered(true), onMouseLeave: () => setHovered(false), children: [
|
|
507
|
-
jsx_runtime_1.jsx("div", {
|
|
507
|
+
jsx_runtime_1.jsx("div", { role: "group", "aria-label": selected.label, style: { ...triggerLabel, ...selectedPreviewStyle }, children: selected.label }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(caret_1.CaretDown, { small: true })
|
|
508
508
|
] }), saveError === null ? null : jsx_runtime_1.jsx("div", { style: errorText, children: saveError }), opened && size
|
|
509
509
|
? react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { style: styles_1.fullScreenOverlay, onPointerDown: (event) => event.stopPropagation(), children: jsx_runtime_1.jsx("div", { style: styles_1.outerPortal, className: "css-reset", children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onOutsideClick: hide, onEscape: hide, children: jsx_runtime_1.jsxs("div", { style: portalStyle({ size }), children: [
|
|
510
510
|
jsx_runtime_1.jsx("div", { style: { padding: 6 }, children: jsx_runtime_1.jsx("input", { ref: inputRef, value: query, onChange: (event) => setQuery(event.target.value), onKeyDown: onKeyDown, placeholder: "Search fonts", style: searchInput }) }), filteredOptions.length === 0 ? (jsx_runtime_1.jsx("div", { style: noResults, children: "No fonts found" })) : (jsx_runtime_1.jsxs("div", { ref: listRef, style: listStyle, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, onScroll: (event) => {
|
|
@@ -41,7 +41,7 @@ const TimelineFontWeightField = ({ field, propStatus, effectiveValue, onSave, on
|
|
|
41
41
|
return (jsx_runtime_1.jsx(TimelineNumberField_1.TimelineNumberField, { effectiveValue: currentValue, field: field, onDragEnd: onDragEnd, onDragValueChange: onDragValueChange, onSave: onSave, propStatus: propStatus }));
|
|
42
42
|
}
|
|
43
43
|
if (FONT_WEIGHT_KEYWORDS.includes(sourceValue)) {
|
|
44
|
-
return (jsx_runtime_1.jsx(ComboBox_1.Combobox, { size: "small",
|
|
44
|
+
return (jsx_runtime_1.jsx(ComboBox_1.Combobox, { size: "small", "aria-label": field.key, selectedId: String(currentValue), values: keywordItems }));
|
|
45
45
|
}
|
|
46
46
|
return (jsx_runtime_1.jsx(RemInput_1.RemotionInput, { status: "ok", rightAlign: false, small: true, defaultValue: String(currentValue !== null && currentValue !== void 0 ? currentValue : ''), onBlur: (event) => {
|
|
47
47
|
const newValue = event.currentTarget.value;
|
|
@@ -330,7 +330,7 @@ exports.shouldShowTimelineKeyframeNavigation = shouldShowTimelineKeyframeNavigat
|
|
|
330
330
|
const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, keyframeDisplayOffset, keyframePlaybackRate, defaultValue, dragOverrideValue, schema, effectIndex, nodePathInfo, mode = 'timeline', }) => {
|
|
331
331
|
const videoConfig = (0, remotion_1.useVideoConfig)();
|
|
332
332
|
const timelinePosition = remotion_1.Internals.Timeline.useTimelinePosition();
|
|
333
|
-
const
|
|
333
|
+
const seekFrame = remotion_1.Internals.Timeline.useTimelineSeekFrame();
|
|
334
334
|
const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
335
335
|
const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
|
|
336
336
|
const { getDragOverrides, getEffectDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
@@ -440,7 +440,7 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
440
440
|
tracks,
|
|
441
441
|
]);
|
|
442
442
|
const seekToDisplayFrame = (0, react_1.useCallback)((frame, direction) => {
|
|
443
|
-
|
|
443
|
+
seekFrame((current) => {
|
|
444
444
|
const next = { ...current, [videoConfig.id]: frame };
|
|
445
445
|
remotion_1.Internals.persistCurrentFrame(next);
|
|
446
446
|
return next;
|
|
@@ -450,7 +450,7 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
450
450
|
durationInFrames: videoConfig.durationInFrames,
|
|
451
451
|
frame,
|
|
452
452
|
});
|
|
453
|
-
}, [
|
|
453
|
+
}, [seekFrame, videoConfig.durationInFrames, videoConfig.id]);
|
|
454
454
|
const onPrevious = (0, react_1.useCallback)((e) => {
|
|
455
455
|
e.stopPropagation();
|
|
456
456
|
if (previousDisplayFrame !== null) {
|
|
@@ -549,7 +549,7 @@ const TimelineKeyframeControls = ({ fieldKey, propStatus, nodePath, fileName, ke
|
|
|
549
549
|
return (jsx_runtime_1.jsxs("div", { style: mode === 'inspector'
|
|
550
550
|
? inspectorControlsContainerStyle
|
|
551
551
|
: controlsContainerStyle, children: [
|
|
552
|
-
jsx_runtime_1.jsx("button", { type: "button", style: previousStyle, disabled: previousDisabled, onPointerDown: previousDisabled ? undefined : onPrevious, "aria-label": "Go to previous keyframe",
|
|
552
|
+
jsx_runtime_1.jsx("button", { type: "button", style: previousStyle, disabled: previousDisabled, onPointerDown: previousDisabled ? undefined : onPrevious, "aria-label": "Go to previous keyframe", children: jsx_runtime_1.jsx("svg", { width: "14", height: "14", viewBox: "0 0 10 10", style: svgStyle, children: jsx_runtime_1.jsx("path", { d: "M7 1.5L3 5L7 8.5Z", fill: colors_1.LIGHT_GRAY }) }) }), jsx_runtime_1.jsx("button", { type: "button", style: diamondStyle, disabled: !canToggleKeyframe || !clientId, onPointerDown: canToggleKeyframe && clientId ? onToggleKeyframe : undefined, "aria-label": hasKeyframeAtCurrentFrame ? 'Remove keyframe' : 'Add keyframe', children: jsx_runtime_1.jsx(TimelineKeyframeDiamondIcon_1.TimelineKeyframeDiamondIcon, { color: diamondColor, size: 12 }) }), jsx_runtime_1.jsx("button", { type: "button", style: nextStyle, disabled: nextDisabled, onPointerDown: nextDisabled ? undefined : onNext, "aria-label": "Go to next keyframe", children: jsx_runtime_1.jsx("svg", { width: "14", height: "14", viewBox: "0 0 10 10", style: svgStyle, children: jsx_runtime_1.jsx("path", { d: "M3 1.5L7 5L3 8.5Z", fill: colors_1.LIGHT_GRAY }) }) })
|
|
553
553
|
] }));
|
|
554
554
|
};
|
|
555
555
|
exports.TimelineKeyframeControls = TimelineKeyframeControls;
|
|
@@ -87,6 +87,6 @@ const TimelineKeyframeDiamondUnmemoized = ({ frame, rowHeight, nodePathInfo }) =
|
|
|
87
87
|
if (style === null) {
|
|
88
88
|
return null;
|
|
89
89
|
}
|
|
90
|
-
return (jsx_runtime_1.jsx("button", { ref: ref, [TimelineSelection_1.TIMELINE_MARQUEE_ITEM_ATTR]: true, type: "button", style: style,
|
|
90
|
+
return (jsx_runtime_1.jsx("button", { ref: ref, [TimelineSelection_1.TIMELINE_MARQUEE_ITEM_ATTR]: true, type: "button", style: style, "aria-label": `Select keyframe at frame ${frame}`, onPointerDown: selectable ? onPointerDown : undefined, children: jsx_runtime_1.jsx(TimelineKeyframeDiamondIcon_1.TimelineKeyframeDiamondIcon, { color: colors_1.LIGHT_TEXT, selected: visuallySelected, size: diamondSize }) }));
|
|
91
91
|
};
|
|
92
92
|
exports.TimelineKeyframeDiamond = react_1.default.memo(TimelineKeyframeDiamondUnmemoized);
|
|
@@ -167,7 +167,7 @@ const TimelineKeyframeEasingLineInteraction = ({ fromFrame, toFrame, nodePathInf
|
|
|
167
167
|
selectionItem,
|
|
168
168
|
});
|
|
169
169
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
170
|
-
jsx_runtime_1.jsx("button", { ref: buttonRef, [TimelineSelection_1.TIMELINE_MARQUEE_ITEM_ATTR]: true, type: "button", style: interactiveStyle,
|
|
170
|
+
jsx_runtime_1.jsx("button", { ref: buttonRef, [TimelineSelection_1.TIMELINE_MARQUEE_ITEM_ATTR]: true, type: "button", style: interactiveStyle, "aria-label": `Select easing from frame ${fromFrame} to ${toFrame}`, onPointerDown: selectable ? onPointerDown : undefined, children: jsx_runtime_1.jsx(exports.TimelineKeyframeEasingLineVisual, { selected: selected }) }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: buttonRef, getItems: getContextMenuItems })
|
|
171
171
|
] }));
|
|
172
172
|
};
|
|
173
173
|
const TimelineKeyframeEasingLineUnmemoized = ({ fromFrame, toFrame, rowHeight, nodePathInfo, segmentIndex }) => {
|
|
@@ -118,7 +118,7 @@ const TimelineLayerChildrenToggle = ({ sequence }) => {
|
|
|
118
118
|
return jsx_runtime_1.jsx("div", { style: toggleLayout });
|
|
119
119
|
}
|
|
120
120
|
const label = `${isCollapsed ? 'Expand' : 'Collapse'} children of ${sequence.displayName}`;
|
|
121
|
-
return (jsx_runtime_1.jsx("button", { type: "button", className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME}`, "aria-label": label, "aria-expanded": !isCollapsed,
|
|
121
|
+
return (jsx_runtime_1.jsx("button", { type: "button", className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME}`, "aria-label": label, "aria-expanded": !isCollapsed, onClick: onClick, onPointerDown: stopPropagation, onDoubleClick: stopPropagation, style: {
|
|
122
122
|
...(0, hoverable_1.hoverableStyle)({
|
|
123
123
|
idleBackground: colors_1.TRANSPARENT,
|
|
124
124
|
hoverBackground: colors_1.TRANSPARENT,
|
|
@@ -23,12 +23,20 @@ const TimelineListTrack = react_1.default.memo(({ row }) => {
|
|
|
23
23
|
});
|
|
24
24
|
const TimelineList = () => {
|
|
25
25
|
const { rows, tracksEnd, virtualItems } = (0, TimelineVirtualization_1.useTimelineVirtualization)();
|
|
26
|
-
return (jsx_runtime_1.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
return (jsx_runtime_1.jsxs("div", { style: { ...container, height: tracksEnd }, children: [
|
|
27
|
+
jsx_runtime_1.jsx("style", { children: `.remotion-timeline-sequence-name-measure::before {
|
|
28
|
+
content: attr(data-name);
|
|
29
|
+
display: block;
|
|
30
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
31
|
+
font-size: 12px;
|
|
32
|
+
line-height: normal;
|
|
33
|
+
visibility: hidden;
|
|
34
|
+
}` }), virtualItems.map((virtualItem) => (jsx_runtime_1.jsx("div", { style: {
|
|
35
|
+
height: virtualItem.size,
|
|
36
|
+
left: 0,
|
|
37
|
+
position: 'absolute',
|
|
38
|
+
top: virtualItem.start,
|
|
39
|
+
width: '100%',
|
|
40
|
+
}, children: jsx_runtime_1.jsx(TimelineListTrack, { row: rows[virtualItem.index] }) }, virtualItem.key)))] }));
|
|
33
41
|
};
|
|
34
42
|
exports.TimelineList = TimelineList;
|
|
@@ -36,6 +36,6 @@ const useAssetLink = (src) => {
|
|
|
36
36
|
const TimelineMediaInfo = ({ src }) => {
|
|
37
37
|
const fileName = (0, react_1.useMemo)(() => remotion_1.Internals.getAssetDisplayName(src), [src]);
|
|
38
38
|
const { linkInfo, fileNameStyle } = useAssetLink(src);
|
|
39
|
-
return (jsx_runtime_1.jsx("div", { style: fileNameStyle,
|
|
39
|
+
return (jsx_runtime_1.jsx("div", { role: "group", style: fileNameStyle, "aria-label": linkInfo ? linkInfo.title : fileName, children: fileName }));
|
|
40
40
|
};
|
|
41
41
|
exports.TimelineMediaInfo = TimelineMediaInfo;
|
|
@@ -81,7 +81,7 @@ const LinkToggle = ({ linked, onToggle }) => {
|
|
|
81
81
|
e.stopPropagation();
|
|
82
82
|
onToggle();
|
|
83
83
|
}, [onToggle]);
|
|
84
|
-
return (jsx_runtime_1.jsx("button", { type: "button", style: toggleStyle, onPointerDown: onPointerDown,
|
|
84
|
+
return (jsx_runtime_1.jsx("button", { type: "button", style: toggleStyle, onPointerDown: onPointerDown, "aria-label": linked ? 'Unlink scale axes' : 'Link scale axes', children: linked ? (jsx_runtime_1.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 640 640", style: linkIconStyle, children: jsx_runtime_1.jsx("path", { fill: colors_1.CURRENT_COLOR_LOWERCASE, d: "M32 320C32 214 118 128 224 128L288 128L288 192L224 192C153.3 192 96 249.3 96 320C96 390.7 153.3 448 224 448L288 448L288 512L224 512C118 512 32 426 32 320zM608 320C608 426 522 512 416 512L352 512L352 448L416 448C486.7 448 544 390.7 544 320C544 249.3 486.7 192 416 192L352 192L352 128L416 128C522 128 608 214 608 320zM224 288L448 288L448 352L192 352L192 288L224 288z" }) })) : null }));
|
|
85
85
|
};
|
|
86
86
|
const TimelineScaleField = ({ field, propStatus, effectiveValue, onSave, onDragValueChange, onDragEnd, scaleLockNodePath, }) => {
|
|
87
87
|
var _a, _b;
|
|
@@ -107,8 +107,8 @@ const UnsupportedStatus = ({ label, onFix, formattedValue }) => {
|
|
|
107
107
|
const stopPointerPropagation = (event) => {
|
|
108
108
|
event.stopPropagation();
|
|
109
109
|
};
|
|
110
|
-
return (jsx_runtime_1.jsxs("span", { style: unsupportedStatusWrapper, onPointerEnter: () => setHovered(true), onPointerLeave: () => setHovered(false),
|
|
111
|
-
jsx_runtime_1.jsx("span", { style: formattedValue ? computedValue : unsupportedLabel, inert: formattedValue, children: label }), onFix ? (jsx_runtime_1.jsx("button", { type: "button", className: `${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME} ${hoverable_1.HOVERABLE_CLASS_NAME}`, style: fixLink,
|
|
110
|
+
return (jsx_runtime_1.jsxs("span", { role: "group", style: unsupportedStatusWrapper, onPointerEnter: () => setHovered(true), onPointerLeave: () => setHovered(false), "aria-label": formattedValue && typeof label === 'string' ? label : undefined, children: [
|
|
111
|
+
jsx_runtime_1.jsx("span", { style: formattedValue ? computedValue : unsupportedLabel, inert: formattedValue, children: label }), onFix ? (jsx_runtime_1.jsx("button", { type: "button", className: `${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME} ${hoverable_1.HOVERABLE_CLASS_NAME}`, style: fixLink, "aria-label": "Fix computed Studio value", onClick: (event) => {
|
|
112
112
|
stopMousePropagation(event);
|
|
113
113
|
onFix();
|
|
114
114
|
}, onDoubleClick: stopMousePropagation, onPointerDown: stopPointerPropagation, onFocus: () => setFocused(true), onBlur: () => setFocused(false), tabIndex: visible ? 0 : -1, children: "Fix" })) : null] }));
|
|
@@ -207,7 +207,7 @@ const TimelineSequenceCurrentFrame = ({ s, displayDurationInFrames, premount, po
|
|
|
207
207
|
display: 'flex',
|
|
208
208
|
alignItems: 'center',
|
|
209
209
|
}, children: jsx_runtime_1.jsx(TimelineSequenceFrame_1.TimelineSequenceFrame, { premounted: isPremounting, postmounted: isPostmounting ? s.duration - 1 : null, roundedFrame: roundedFrame, frozenFrame: frozenFrame }) })) : null] }));
|
|
210
|
-
return (jsx_runtime_1.jsxs("div", { ref: ref, [TimelineSelection_1.TIMELINE_MARQUEE_ITEM_ATTR]: true, style: actualStyle,
|
|
210
|
+
return (jsx_runtime_1.jsxs("div", { ref: ref, role: "group", [TimelineSelection_1.TIMELINE_MARQUEE_ITEM_ATTR]: true, style: actualStyle, "aria-label": s.displayName, onPointerDownCapture: onPointerDownCapture, onPointerDown: selectable ? onPointerDown : undefined, onClick: onClick !== null && onClick !== void 0 ? onClick : undefined, children: [negativeStart ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
211
211
|
jsx_runtime_1.jsx(TimelineSequenceNegativeStart, { left: negativeStart.left, width: negativeStart.width, leftEdgeVisible: leftEdgeVisible, clipped: negativeStartClipped }), jsx_runtime_1.jsx("div", { style: {
|
|
212
212
|
background: style.background,
|
|
213
213
|
border: style.border,
|
|
@@ -108,31 +108,53 @@ const effectDropHighlight = {
|
|
|
108
108
|
outline: colors_1.BORDER_TIMELINE_DROP_BLUE,
|
|
109
109
|
outlineOffset: -1,
|
|
110
110
|
};
|
|
111
|
-
const
|
|
111
|
+
const TimelineSequenceLabelInner = ({ disabled, isExpanded, nodePathInfo, selectedItems, sequence, canHaveExpandableContent, displayName, fallbackDisplayName, selected, containsSelection, editing, onCancelEditing, onSaveName, numberOfHiddenDuplicates, }) => {
|
|
112
112
|
const { toggleTrack } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksSetterContext);
|
|
113
113
|
const hasExpandableContent = (0, use_timeline_expanded_tree_1.useTimelineSequenceHasExpandableContent)({
|
|
114
114
|
sequence,
|
|
115
115
|
nodePathInfo,
|
|
116
116
|
selectedItems,
|
|
117
117
|
});
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
118
|
+
const showChevronSlot = canHaveExpandableContent && nodePathInfo !== null;
|
|
119
|
+
const showChevron = showChevronSlot && hasExpandableContent;
|
|
120
|
+
const onToggleExpand = (0, react_1.useCallback)(() => {
|
|
121
|
+
if (nodePathInfo !== null) {
|
|
122
|
+
toggleTrack(nodePathInfo);
|
|
123
|
+
}
|
|
124
|
+
}, [nodePathInfo, toggleTrack]);
|
|
125
|
+
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
126
|
+
jsx_runtime_1.jsx(TimelineSequenceName_1.TimelineSequenceName, { displayName: displayName, fallbackDisplayName: fallbackDisplayName, selected: selected, containsSelection: containsSelection, editing: editing, onCancelEditing: onCancelEditing, onSaveName: onSaveName, chevronSlot: showChevronSlot && !editing && numberOfHiddenDuplicates === 0
|
|
127
|
+
? showChevron
|
|
128
|
+
? 'occupied'
|
|
129
|
+
: 'empty'
|
|
130
|
+
: 'none' }), numberOfHiddenDuplicates > 0 ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
131
|
+
jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(TimelineDuplicateCount_1.TimelineDuplicateCount, { count: numberOfHiddenDuplicates })
|
|
132
|
+
] })) : null, showChevronSlot ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
133
|
+
jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), showChevron ? (jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowButton, { isExpanded: isExpanded, onClick: onToggleExpand, label: "track properties", disabled: disabled })) : (jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}))] })) : null] }));
|
|
123
134
|
};
|
|
124
|
-
const
|
|
135
|
+
const TimelineSequenceLabel = react_1.default.memo(TimelineSequenceLabelInner, (first, second) => {
|
|
125
136
|
var _a, _b, _c, _d;
|
|
126
|
-
return
|
|
137
|
+
return first.disabled === second.disabled &&
|
|
127
138
|
first.isExpanded === second.isExpanded &&
|
|
128
139
|
first.selectedItems === second.selectedItems &&
|
|
140
|
+
first.canHaveExpandableContent === second.canHaveExpandableContent &&
|
|
141
|
+
first.displayName === second.displayName &&
|
|
142
|
+
first.fallbackDisplayName === second.fallbackDisplayName &&
|
|
143
|
+
first.selected === second.selected &&
|
|
144
|
+
first.containsSelection === second.containsSelection &&
|
|
145
|
+
first.editing === second.editing &&
|
|
146
|
+
first.onCancelEditing === second.onCancelEditing &&
|
|
147
|
+
first.onSaveName === second.onSaveName &&
|
|
148
|
+
first.numberOfHiddenDuplicates === second.numberOfHiddenDuplicates &&
|
|
129
149
|
((_a = first.sequence.controls) === null || _a === void 0 ? void 0 : _a.schema) === ((_b = second.sequence.controls) === null || _b === void 0 ? void 0 : _b.schema) &&
|
|
130
150
|
((_c = first.sequence.controls) === null || _c === void 0 ? void 0 : _c.runtimeValues) ===
|
|
131
151
|
((_d = second.sequence.controls) === null || _d === void 0 ? void 0 : _d.runtimeValues) &&
|
|
132
152
|
first.sequence.effects === second.sequence.effects &&
|
|
133
|
-
(
|
|
134
|
-
|
|
135
|
-
|
|
153
|
+
(first.nodePathInfo === second.nodePathInfo ||
|
|
154
|
+
(first.nodePathInfo !== null &&
|
|
155
|
+
second.nodePathInfo !== null &&
|
|
156
|
+
(0, are_sequence_node_path_infos_equal_1.areSequenceNodePathInfosEqual)(first.nodePathInfo, second.nodePathInfo)));
|
|
157
|
+
});
|
|
136
158
|
const sequenceReorderWrapper = {
|
|
137
159
|
position: 'relative',
|
|
138
160
|
};
|
|
@@ -1078,11 +1100,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
1078
1100
|
]);
|
|
1079
1101
|
const trackRow = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: nestedDepth, eye: showVisibilityToggle ? (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEye, { type: sequence.type === 'audio' ? 'speaker' : 'eye', hidden: isItemHidden, onInvoked: canToggleVisibility ? onToggleVisibility : null })) : (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {})), arrow: jsx_runtime_1.jsx(TimelineLayerChildren_1.TimelineLayerChildrenToggle, { sequence: sequence }), style: rowStyle, selected: selected, selectable: selectable, onSelect: onSelect, showSelectedBackground: true, containsSelection: containsSelection, hovered: hovered, outerHeight: outerHeight, onDragLeave: canDropEffect ? onEffectDragLeave : undefined, onDragOver: canDropEffect ? onEffectDragOver : undefined, onDrop: canDropEffect ? onEffectDrop : undefined, onDoubleClick: canHandleSequenceDoubleClick ? onSequenceDoubleClick : undefined, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, children: jsx_runtime_1.jsxs("div", { style: labelContainerStyle, children: [connectedCompositions.length > 0 ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
1080
1102
|
jsx_runtime_1.jsx(CompositionOrStillIcon_1.CompositionOrStillIcon, { color: (0, TimelineSelection_1.getTimelineColor)(false, false), composition: connectedCompositions[0], style: connectedCompositionIconStyle }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 })
|
|
1081
|
-
] })) : null, jsx_runtime_1.jsx(
|
|
1082
|
-
jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(TimelineDuplicateCount_1.TimelineDuplicateCount, { count: numberOfHiddenDuplicates })
|
|
1083
|
-
] })) : null, hasExpandableContent && nodePathInfo !== null ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
1084
|
-
jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(TimelineSequenceExpandArrow, { disabled: !previewInteractive, isExpanded: isExpanded, nodePathInfo: nodePathInfo, selectedItems: selectedItems, sequence: sequence })
|
|
1085
|
-
] })) : null, mediaSrc ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
1103
|
+
] })) : null, jsx_runtime_1.jsx(TimelineSequenceLabel, { displayName: timelineDisplayName, fallbackDisplayName: fallbackDisplayName, selected: selected, containsSelection: containsSelection, editing: isRenaming, onCancelEditing: onCancelRenaming, onSaveName: onSaveName, numberOfHiddenDuplicates: numberOfHiddenDuplicates, canHaveExpandableContent: hasExpandableContent, disabled: !previewInteractive, isExpanded: isExpanded, nodePathInfo: nodePathInfo, selectedItems: selectedItems, sequence: sequence }), mediaSrc ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
1086
1104
|
jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }),
|
|
1087
1105
|
" ",
|
|
1088
1106
|
jsx_runtime_1.jsx(TimelineMediaInfo_1.TimelineMediaInfo, { src: mediaSrc })
|
|
@@ -8,13 +8,16 @@ const TimelineSelection_1 = require("./TimelineSelection");
|
|
|
8
8
|
const MAX_DISPLAY_NAME_LENGTH = 1000;
|
|
9
9
|
const MAX_RENAME_INPUT_WIDTH = 240;
|
|
10
10
|
const RENAME_INPUT_CLASS_NAME = 'remotion-timeline-sequence-name-input';
|
|
11
|
+
const LABEL_FONT_FAMILY = 'Arial, Helvetica, sans-serif';
|
|
12
|
+
// 4px gap + 12px chevron + 4px chevron margin.
|
|
13
|
+
const CHEVRON_SLOT_WIDTH = 20;
|
|
11
14
|
const getTruncatedDisplayName = (displayName) => {
|
|
12
15
|
if (displayName.length > MAX_DISPLAY_NAME_LENGTH) {
|
|
13
16
|
return displayName.slice(0, MAX_DISPLAY_NAME_LENGTH) + '...';
|
|
14
17
|
}
|
|
15
18
|
return displayName;
|
|
16
19
|
};
|
|
17
|
-
const TimelineSequenceName = ({ displayName, fallbackDisplayName, selected, containsSelection, editing, onCancelEditing, onSaveName, }) => {
|
|
20
|
+
const TimelineSequenceName = ({ displayName, fallbackDisplayName, selected, containsSelection, editing, onCancelEditing, onSaveName, chevronSlot, }) => {
|
|
18
21
|
const inputRef = (0, react_1.useRef)(null);
|
|
19
22
|
const [draftName, setDraftName] = (0, react_1.useState)(displayName);
|
|
20
23
|
const cancelNextBlurRef = (0, react_1.useRef)(false);
|
|
@@ -25,11 +28,12 @@ const TimelineSequenceName = ({ displayName, fallbackDisplayName, selected, cont
|
|
|
25
28
|
...(0, TimelineSelection_1.getTimelineSelectedLabelStyle)(selected, false),
|
|
26
29
|
display: 'inline-flex',
|
|
27
30
|
flexShrink: 1,
|
|
28
|
-
fontFamily:
|
|
31
|
+
fontFamily: LABEL_FONT_FAMILY,
|
|
29
32
|
fontSize: 12,
|
|
30
33
|
lineHeight: 'normal',
|
|
31
34
|
minWidth: 0,
|
|
32
|
-
overflow: 'hidden',
|
|
35
|
+
overflow: chevronSlot === 'none' ? 'hidden' : 'visible',
|
|
36
|
+
position: chevronSlot === 'none' ? undefined : 'relative',
|
|
33
37
|
whiteSpace: 'nowrap',
|
|
34
38
|
textOverflow: 'ellipsis',
|
|
35
39
|
color: (0, TimelineSelection_1.getTimelineColor)(selected, false),
|
|
@@ -40,14 +44,14 @@ const TimelineSequenceName = ({ displayName, fallbackDisplayName, selected, cont
|
|
|
40
44
|
? `inset 0 0 0 2px ${TimelineSelection_1.TIMELINE_SELECTED_LABEL_BACKGROUND}`
|
|
41
45
|
: undefined,
|
|
42
46
|
};
|
|
43
|
-
}, [selected, containsSelection]);
|
|
47
|
+
}, [selected, containsSelection, chevronSlot]);
|
|
44
48
|
const inputStyle = (0, react_1.useMemo)(() => {
|
|
45
49
|
return {
|
|
46
50
|
...style,
|
|
47
51
|
background: colors_1.TRANSPARENT,
|
|
48
52
|
border: 0,
|
|
49
53
|
color: (0, TimelineSelection_1.getTimelineColor)(false, false),
|
|
50
|
-
fontFamily:
|
|
54
|
+
fontFamily: LABEL_FONT_FAMILY,
|
|
51
55
|
fontSize: 12,
|
|
52
56
|
outline: 'none',
|
|
53
57
|
paddingBottom: 0,
|
|
@@ -101,6 +105,34 @@ const TimelineSequenceName = ({ displayName, fallbackDisplayName, selected, cont
|
|
|
101
105
|
jsx_runtime_1.jsx("style", { children: `.${RENAME_INPUT_CLASS_NAME}::selection { background: ${colors_1.WHITE_ALPHA_72}; color: ${colors_1.BLACK}; }` }), jsx_runtime_1.jsx("input", { ref: inputRef, className: RENAME_INPUT_CLASS_NAME, value: draftName, onChange: (e) => setDraftName(e.target.value), onBlur: onBlur, onKeyDown: onKeyDown, size: Math.max(1, draftName.length), style: inputStyle })
|
|
102
106
|
] }));
|
|
103
107
|
}
|
|
104
|
-
|
|
108
|
+
if (chevronSlot !== 'none') {
|
|
109
|
+
// Keep the name's flex width fixed while its visible text uses the empty slot.
|
|
110
|
+
return (jsx_runtime_1.jsx("div", { className: "remotion-timeline-sequence-name-measure", "data-name": text, title: text, style: {
|
|
111
|
+
...style,
|
|
112
|
+
backgroundColor: undefined,
|
|
113
|
+
boxShadow: undefined,
|
|
114
|
+
clipPath: chevronSlot === 'occupied' ? 'inset(0)' : undefined,
|
|
115
|
+
}, children: jsx_runtime_1.jsx("div", { style: {
|
|
116
|
+
...(0, TimelineSelection_1.getTimelineSelectedLabelStyle)(selected, false),
|
|
117
|
+
alignItems: 'center',
|
|
118
|
+
boxShadow: style.boxShadow,
|
|
119
|
+
boxSizing: 'border-box',
|
|
120
|
+
color: (0, TimelineSelection_1.getTimelineColor)(selected, false),
|
|
121
|
+
display: 'inline-flex',
|
|
122
|
+
fontFamily: LABEL_FONT_FAMILY,
|
|
123
|
+
fontSize: 12,
|
|
124
|
+
height: '100%',
|
|
125
|
+
left: 0,
|
|
126
|
+
lineHeight: 'normal',
|
|
127
|
+
maxWidth: `calc(100% + ${CHEVRON_SLOT_WIDTH}px)`,
|
|
128
|
+
overflow: 'hidden',
|
|
129
|
+
position: 'absolute',
|
|
130
|
+
textOverflow: 'ellipsis',
|
|
131
|
+
top: 0,
|
|
132
|
+
whiteSpace: 'nowrap',
|
|
133
|
+
width: 'max-content',
|
|
134
|
+
}, children: text }) }));
|
|
135
|
+
}
|
|
136
|
+
return (jsx_runtime_1.jsx("div", { role: "group", "aria-label": text, style: style, children: text }));
|
|
105
137
|
};
|
|
106
138
|
exports.TimelineSequenceName = TimelineSequenceName;
|
|
@@ -53,6 +53,7 @@ const get_timeline_keyframes_1 = require("./get-timeline-keyframes");
|
|
|
53
53
|
const save_sequence_prop_1 = require("./save-sequence-prop");
|
|
54
54
|
const timeline_field_row_layout_1 = require("./timeline-field-row-layout");
|
|
55
55
|
const TimelineExpandArrowButton_1 = require("./TimelineExpandArrowButton");
|
|
56
|
+
const TimelineFieldLabel_1 = require("./TimelineFieldLabel");
|
|
56
57
|
const TimelineFieldRowContent_1 = require("./TimelineFieldRowContent");
|
|
57
58
|
const TimelineKeyframeControls_1 = require("./TimelineKeyframeControls");
|
|
58
59
|
const TimelineKeyframedValue_1 = require("./TimelineKeyframedValue");
|
|
@@ -415,7 +416,7 @@ const TimelineSequenceKeyframedValueUnmemoized = (props) => {
|
|
|
415
416
|
};
|
|
416
417
|
exports.TimelineSequenceKeyframedValue = react_1.default.memo(TimelineSequenceKeyframedValueUnmemoized);
|
|
417
418
|
const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath, nodePathInfo, schema, keyframeDisplayOffset, keyframePlaybackRate, keyframeControlsMode, runtimeValue, }) => {
|
|
418
|
-
var _a, _b;
|
|
419
|
+
var _a, _b, _c;
|
|
419
420
|
const { propStatuses: visualModePropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
|
|
420
421
|
const propStatusesRef = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesRefContext);
|
|
421
422
|
const sequencesRef = (0, react_1.useContext)(remotion_1.Internals.SequenceManagerRefContext);
|
|
@@ -445,11 +446,12 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
|
|
|
445
446
|
selected: selection.selected,
|
|
446
447
|
keyframable,
|
|
447
448
|
})) ? (jsx_runtime_1.jsx(TimelineKeyframeControls_1.TimelineKeyframeControls, { fieldKey: field.key, propStatus: propStatus, nodePath: nodePath, fileName: validatedLocation.source, keyframeDisplayOffset: keyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate, defaultValue: field.fieldSchema.default, dragOverrideValue: dragOverrideValue, schema: schema, effectIndex: null, nodePathInfo: nodePathInfo, mode: keyframeControlsMode })) : null;
|
|
449
|
+
const hidePathValue = keyframeControlsMode === 'timeline' && field.typeName === 'svg-path';
|
|
448
450
|
const style = (0, react_1.useMemo)(() => {
|
|
449
|
-
return (0, timeline_field_row_layout_1.isTimelineFieldStacked)({ field, transform3DMode })
|
|
451
|
+
return !hidePathValue && (0, timeline_field_row_layout_1.isTimelineFieldStacked)({ field, transform3DMode })
|
|
450
452
|
? fieldRowBase
|
|
451
453
|
: { ...fieldRowBase, height: field.rowHeight };
|
|
452
|
-
}, [field, transform3DMode]);
|
|
454
|
+
}, [field, hidePathValue, transform3DMode]);
|
|
453
455
|
const canResetToDefault = (0, react_1.useMemo)(() => {
|
|
454
456
|
if (!propStatus || propStatus.status === 'computed') {
|
|
455
457
|
return false;
|
|
@@ -614,7 +616,7 @@ const TimelineSequencePropItem = ({ field, validatedLocation, rowDepth, nodePath
|
|
|
614
616
|
...style,
|
|
615
617
|
}, children: fieldValue }));
|
|
616
618
|
}
|
|
617
|
-
const row = (jsx_runtime_1.jsx(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, onDoubleClick: onPropertyDoubleClick, showSelectedBackground: true, containsSelection: containsSelection, outerHeight: null, children: jsx_runtime_1.jsx(TimelineFieldRowContent_1.TimelineFieldRowContent, { field: field, rowDepth: rowDepth, selected: selection.selected || containsSelection, children: fieldValue }) }));
|
|
619
|
+
const row = (jsx_runtime_1.jsx(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, onDoubleClick: onPropertyDoubleClick, showSelectedBackground: true, containsSelection: containsSelection, outerHeight: null, children: hidePathValue ? (jsx_runtime_1.jsx(TimelineFieldLabel_1.TimelineFieldLabel, { rowDepth: rowDepth, selected: selection.selected || containsSelection, label: (_c = field.description) !== null && _c !== void 0 ? _c : field.key })) : (jsx_runtime_1.jsx(TimelineFieldRowContent_1.TimelineFieldRowContent, { field: field, rowDepth: rowDepth, selected: selection.selected || containsSelection, children: fieldValue })) }));
|
|
618
620
|
return jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: row });
|
|
619
621
|
};
|
|
620
622
|
exports.TimelineSequencePropItem = TimelineSequencePropItem;
|
|
@@ -925,7 +925,7 @@ const TimelineSequenceLeftEdgeDragHandleInner = ({ cursor, nodePathInfo, windowW
|
|
|
925
925
|
background: colors_1.TRANSPARENT,
|
|
926
926
|
};
|
|
927
927
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
928
|
-
jsx_runtime_1.jsx("div", { role: "separator", "aria-orientation": "vertical",
|
|
928
|
+
jsx_runtime_1.jsx("div", { role: "separator", "aria-orientation": "vertical", "aria-label": "Drag to trim start", style: style, onPointerDown: onPointerDown }), trimTooltip === null ? null : (jsx_runtime_1.jsx(TimelineTrimTooltip_1.TimelineTrimTooltip, { state: trimTooltip, fps: fps }))] }));
|
|
929
929
|
};
|
|
930
930
|
exports.TimelineSequenceLeftEdgeDragHandle = react_1.default.memo(TimelineSequenceLeftEdgeDragHandleInner);
|
|
931
931
|
const useTimelineSequenceFromDrag = ({ nodePathInfo, windowWidth, timelineDurationInFrames, onDragEnd, }) => {
|
|
@@ -1373,6 +1373,6 @@ const TimelineSequenceRightEdgeDragHandleInner = ({ cursor, nodePathInfo, mediaD
|
|
|
1373
1373
|
background: colors_1.TRANSPARENT,
|
|
1374
1374
|
};
|
|
1375
1375
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
1376
|
-
jsx_runtime_1.jsx("div", { role: "separator", "aria-orientation": "vertical",
|
|
1376
|
+
jsx_runtime_1.jsx("div", { role: "separator", "aria-orientation": "vertical", "aria-label": "Drag to change duration", style: style, onPointerDown: onPointerDown }), trimTooltip === null ? null : (jsx_runtime_1.jsx(TimelineTrimTooltip_1.TimelineTrimTooltip, { state: trimTooltip, fps: fps }))] }));
|
|
1377
1377
|
};
|
|
1378
1378
|
exports.TimelineSequenceRightEdgeDragHandle = react_1.default.memo(TimelineSequenceRightEdgeDragHandleInner);
|
|
@@ -85,7 +85,7 @@ const TimelineZoomSlider = ({ maxWidth, minZoom, timelineViewportWidth }) => {
|
|
|
85
85
|
zoom: (_b = zoomMap[videoConfig.id]) !== null && _b !== void 0 ? _b : null,
|
|
86
86
|
});
|
|
87
87
|
const roundedZoom = Math.round(zoom * 100) / 100;
|
|
88
|
-
return (jsx_runtime_1.jsx("input", { style: maxWidth === undefined ? undefined : { maxWidth },
|
|
88
|
+
return (jsx_runtime_1.jsx("input", { style: maxWidth === undefined ? undefined : { maxWidth }, "aria-label": `Timeline zoom (${roundedZoom}px/frame)`, alt: `Timeline zoom (${roundedZoom}px/frame)`, type: "range", min: get_timeline_max_zoom_1.TIMELINE_ZOOM_SLIDER_PROPS.min, max: get_timeline_max_zoom_1.TIMELINE_ZOOM_SLIDER_PROPS.max, step: get_timeline_max_zoom_1.TIMELINE_ZOOM_SLIDER_PROPS.step, value: (0, get_timeline_max_zoom_1.timelineZoomToSliderValue)({ zoom, minZoom }), onChange: onChange, className: "__remotion-timeline-slider", tabIndex: tabIndex }));
|
|
89
89
|
};
|
|
90
90
|
const TimelineZoomControlsInner = ({ sliderMaxWidth }) => {
|
|
91
91
|
var _a;
|
|
@@ -124,7 +124,7 @@ const TimelineZoomControlsInner = ({ sliderMaxWidth }) => {
|
|
|
124
124
|
return null;
|
|
125
125
|
}
|
|
126
126
|
return (jsx_runtime_1.jsxs("div", { style: container, children: [
|
|
127
|
-
jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Zoom out", shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { onClick: onMinusClicked, style: buttonStyle,
|
|
127
|
+
jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Zoom out", shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { onClick: onMinusClicked, style: buttonStyle, "aria-label": "Zoom out timeline", type: "button", children: (color) => jsx_runtime_1.jsx(canvas_zoom_1.CanvasZoomOutIcon, { color: color }) }) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(TimelineZoomSlider, { maxWidth: sliderMaxWidth, minZoom: minZoom, timelineViewportWidth: timelineViewportWidth }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Zoom in", shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { onClick: onPlusClicked, style: buttonStyle, "aria-label": "Zoom in timeline", type: "button", children: (color) => jsx_runtime_1.jsx(canvas_zoom_1.CanvasZoomIcon, { color: color }) }) })
|
|
128
128
|
] }));
|
|
129
129
|
};
|
|
130
130
|
exports.TimelineZoomControls = react_1.default.memo(TimelineZoomControlsInner);
|
|
@@ -28,12 +28,12 @@ const getSequenceSplitMenuItem = ({ nodePathInfo, sequence, propStatuses, splitF
|
|
|
28
28
|
return {
|
|
29
29
|
type: 'item',
|
|
30
30
|
id: 'split-sequence',
|
|
31
|
-
label: (jsx_runtime_1.jsx("span", { style: {
|
|
31
|
+
label: (jsx_runtime_1.jsx("span", { role: "group", style: {
|
|
32
32
|
fontFamily: 'inherit',
|
|
33
33
|
fontSize: 'inherit',
|
|
34
34
|
lineHeight: 'inherit',
|
|
35
35
|
color: 'inherit',
|
|
36
|
-
},
|
|
36
|
+
}, "aria-label": disabledReason !== null && disabledReason !== void 0 ? disabledReason : 'Split at the playhead', children: "Split clip" })),
|
|
37
37
|
value: 'split-sequence',
|
|
38
38
|
keyHint: null,
|
|
39
39
|
leftItem: null,
|
|
@@ -2,7 +2,7 @@ import { type TSequence } from 'remotion';
|
|
|
2
2
|
import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
|
|
3
3
|
export declare const useTimelineSequenceHasExpandableContent: ({ sequence, nodePathInfo, selectedItems, }: {
|
|
4
4
|
readonly sequence: TSequence;
|
|
5
|
-
readonly nodePathInfo: SequenceNodePathInfo;
|
|
5
|
+
readonly nodePathInfo: SequenceNodePathInfo | null;
|
|
6
6
|
readonly selectedItems: readonly import("@remotion/canvas").CanvasSelectionItem[];
|
|
7
7
|
}) => boolean;
|
|
8
8
|
export declare const useTimelineExpandedTree: ({ sequence, nodePathInfo, includeTextContent, includeSourceControls, }: {
|
|
@@ -14,6 +14,9 @@ const useTimelineSequenceHasExpandableContent = ({ sequence, nodePathInfo, selec
|
|
|
14
14
|
const { getDragOverrides, getEffectDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
15
15
|
const selectedRowKeys = (0, react_1.useMemo)(() => (0, timeline_expanded_filter_1.getSelectedTimelineExpandedRowKeys)(selectedItems), [selectedItems]);
|
|
16
16
|
const selectHasExpandableContent = (0, react_1.useCallback)((runtimeValues) => {
|
|
17
|
+
if (nodePathInfo === null) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
17
20
|
const tree = (0, timeline_layout_1.buildTimelineTree)({
|
|
18
21
|
sequence,
|
|
19
22
|
nodePathInfo,
|