@remotion/studio 4.0.521 → 4.0.523
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/api/install-package.js +4 -2
- package/dist/components/AssetAudioVolume.d.ts +5 -0
- package/dist/components/AssetAudioVolume.js +33 -0
- package/dist/components/Canvas.js +5 -6
- package/dist/components/CanvasIfSizeIsAvailable.js +7 -0
- package/dist/components/CaptionInspector.js +74 -20
- package/dist/components/CheckboardToggle.js +8 -6
- package/dist/components/Checkbox.d.ts +1 -0
- package/dist/components/Checkbox.js +2 -2
- package/dist/components/CompositionContextButton.js +4 -1
- package/dist/components/CompositionSelectorItem.js +2 -2
- package/dist/components/ConfigureLicenseModal.js +1 -1
- package/dist/components/CopyButton.js +7 -14
- package/dist/components/CurrentAsset.js +40 -6
- package/dist/components/Editor.js +6 -5
- package/dist/components/EditorContent.js +1 -1
- package/dist/components/EditorContexts.js +3 -1
- package/dist/components/ElementInstallConfirmation.js +290 -136
- package/dist/components/FixComputedValueModal.js +56 -16
- package/dist/components/FullscreenToggle.js +9 -8
- package/dist/components/GlobalKeybindings.js +50 -49
- package/dist/components/HighlightedElementSource.d.ts +5 -0
- package/dist/components/HighlightedElementSource.js +78 -0
- package/dist/components/InspectorLocationCopy.js +10 -5
- package/dist/components/InspectorPanel/MultiSequenceField.d.ts +12 -0
- package/dist/components/InspectorPanel/MultiSequenceField.js +131 -0
- package/dist/components/InspectorPanel/MultiSequenceInspector.d.ts +8 -0
- package/dist/components/InspectorPanel/MultiSequenceInspector.js +102 -0
- package/dist/components/InspectorPanel/MultiSequenceNumberField.d.ts +9 -0
- package/dist/components/InspectorPanel/MultiSequenceNumberField.js +88 -0
- package/dist/components/InspectorPanel.js +4 -0
- package/dist/components/InspectorSequenceSection.js +64 -1
- package/dist/components/InstallPackage.js +4 -5
- package/dist/components/KeyboardShortcutsSettings.js +212 -33
- package/dist/components/MenuBuildIndicator.js +7 -2
- package/dist/components/MenuCompositionName.js +62 -6
- package/dist/components/MenuToolbar.js +7 -5
- package/dist/components/ModalContainer.d.ts +1 -0
- package/dist/components/ModalContainer.js +2 -2
- package/dist/components/Modals.js +3 -1
- package/dist/components/ModelManager.d.ts +16 -0
- package/dist/components/ModelManager.js +200 -0
- package/dist/components/ModelsSettings.d.ts +2 -0
- package/dist/components/ModelsSettings.js +133 -0
- package/dist/components/NewComposition/DismissableModal.d.ts +1 -0
- package/dist/components/NewComposition/DismissableModal.js +2 -2
- package/dist/components/NewComposition/InputDragger.d.ts +2 -2
- package/dist/components/NewComposition/InputDragger.js +6 -6
- package/dist/components/NewComposition/NewFolder.js +11 -8
- package/dist/components/NewComposition/RenameFolder.js +17 -10
- package/dist/components/OptionalPackageModal.d.ts +11 -0
- package/dist/components/OptionalPackageModal.js +155 -0
- package/dist/components/PlayPause.js +4 -8
- package/dist/components/PlaybackKeyboardShortcutsManager.js +3 -6
- package/dist/components/PreviewToolbarOverflowButton.js +11 -2
- package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +5 -2
- package/dist/components/RadioButton.d.ts +1 -0
- package/dist/components/RadioButton.js +2 -2
- package/dist/components/RenderButton.js +5 -1
- package/dist/components/RenderModal/CliCopyButton.js +13 -27
- package/dist/components/RenderModal/NumberSetting.d.ts +6 -1
- package/dist/components/RenderModal/NumberSetting.js +2 -2
- package/dist/components/RenderModal/RenderModalBasic.js +1 -1
- package/dist/components/RenderModal/RenderModalOutputName.d.ts +3 -1
- package/dist/components/RenderModal/RenderModalOutputName.js +4 -4
- package/dist/components/RenderModal/SeparateAudioOption.js +1 -1
- package/dist/components/RenderModal/WebRenderModalBasic.js +1 -1
- package/dist/components/RenderQueue/CaptionQueueItem.d.ts +6 -0
- package/dist/components/RenderQueue/CaptionQueueItem.js +129 -0
- package/dist/components/RenderQueue/CaptionQueueProcessor.d.ts +1 -0
- package/dist/components/RenderQueue/CaptionQueueProcessor.js +110 -0
- package/dist/components/RenderQueue/CaptionQueueProcessorLoader.d.ts +2 -0
- package/dist/components/RenderQueue/CaptionQueueProcessorLoader.js +54 -0
- package/dist/components/RenderQueue/RenderQueueCopyToClipboard.js +7 -4
- package/dist/components/RenderQueue/RenderQueueItem.js +3 -3
- package/dist/components/RenderQueue/VideoMattingQueueItem.d.ts +6 -0
- package/dist/components/RenderQueue/VideoMattingQueueItem.js +129 -0
- package/dist/components/RenderQueue/VideoMattingQueueProcessor.d.ts +1 -0
- package/dist/components/RenderQueue/VideoMattingQueueProcessor.js +105 -0
- package/dist/components/RenderQueue/VideoMattingQueueProcessorLoader.d.ts +2 -0
- package/dist/components/RenderQueue/VideoMattingQueueProcessorLoader.js +54 -0
- package/dist/components/RenderQueue/caption-job-types.d.ts +47 -0
- package/dist/components/RenderQueue/caption-job-types.js +7 -0
- package/dist/components/RenderQueue/context.d.ts +16 -0
- package/dist/components/RenderQueue/context.js +224 -11
- package/dist/components/RenderQueue/index.js +34 -10
- package/dist/components/RenderQueue/item-style.d.ts +1 -0
- package/dist/components/RenderQueue/item-style.js +2 -1
- package/dist/components/RenderQueue/load-model-for-job.d.ts +11 -0
- package/dist/components/RenderQueue/load-model-for-job.js +14 -0
- package/dist/components/RenderQueue/video-matting-job-types.d.ts +38 -0
- package/dist/components/RenderQueue/video-matting-job-types.js +5 -0
- package/dist/components/RendersTab.js +4 -4
- package/dist/components/SegmentedControl.d.ts +2 -2
- package/dist/components/SegmentedControl.js +38 -13
- package/dist/components/SelectedOutlinePolygon.js +8 -2
- package/dist/components/SettingsButton.d.ts +4 -0
- package/dist/components/SettingsButton.js +49 -0
- package/dist/components/SettingsModal.d.ts +1 -1
- package/dist/components/SettingsModal.js +3 -1
- package/dist/components/ShowOutlinesProvider.js +12 -0
- package/dist/components/SidebarCollapserControls.js +21 -16
- package/dist/components/SizeSelector.js +10 -2
- package/dist/components/SkillsSettings.js +11 -8
- package/dist/components/SnappingToggle.js +5 -2
- package/dist/components/Splitter/SplitterContainer.js +63 -10
- package/dist/components/Splitter/SplitterContext.d.ts +3 -0
- package/dist/components/Splitter/SplitterContext.js +5 -1
- package/dist/components/Splitter/SplitterElement.js +11 -2
- package/dist/components/Splitter/SplitterHandle.d.ts +1 -0
- package/dist/components/Splitter/SplitterHandle.js +55 -25
- package/dist/components/Tabs/vertical.d.ts +1 -0
- package/dist/components/Tabs/vertical.js +2 -2
- package/dist/components/TimeValue.js +2 -3
- package/dist/components/Timeline/SequencePropsObserver.js +4 -0
- package/dist/components/Timeline/SubscribeToNodePaths.d.ts +2 -1
- package/dist/components/Timeline/SubscribeToNodePaths.js +2 -1
- package/dist/components/Timeline/Timeline.js +17 -46
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +2 -4
- package/dist/components/Timeline/TimelineDeleteKeybindings.js +3 -18
- package/dist/components/Timeline/TimelineDragHandler.js +11 -6
- package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +1 -0
- package/dist/components/Timeline/TimelinePinchZoom.js +6 -30
- package/dist/components/Timeline/TimelinePlayCursorSyncer.js +1 -7
- package/dist/components/Timeline/TimelineRowChrome.js +11 -3
- package/dist/components/Timeline/TimelineSchemaField.js +8 -4
- package/dist/components/Timeline/TimelineSelection.d.ts +2 -0
- package/dist/components/Timeline/TimelineSelection.js +55 -2
- package/dist/components/Timeline/TimelineSequence.js +148 -25
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +0 -1
- package/dist/components/Timeline/TimelineSequenceItem.js +220 -112
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +35 -5
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +233 -138
- package/dist/components/Timeline/TimelineSlider.js +1 -4
- package/dist/components/Timeline/TimelineTimeIndicators.js +1 -0
- package/dist/components/Timeline/TimelineWidthProvider.js +2 -5
- package/dist/components/Timeline/TimelineZoomControls.js +20 -20
- package/dist/components/Timeline/get-sequence-split-menu-item.d.ts +11 -0
- package/dist/components/Timeline/get-sequence-split-menu-item.js +55 -0
- package/dist/components/Timeline/use-asset-timeline-context-menu.d.ts +2 -0
- package/dist/components/Timeline/use-asset-timeline-context-menu.js +52 -0
- package/dist/components/Timeline/use-sequence-props-subscription.d.ts +3 -2
- package/dist/components/Timeline/use-sequence-props-subscription.js +4 -10
- package/dist/components/TimelineInOutToggle.js +20 -17
- package/dist/components/TopPanel.js +3 -19
- package/dist/components/Transcription/LazyModels.d.ts +1 -0
- package/dist/components/Transcription/LazyModels.js +5 -0
- package/dist/components/Transcription/Models.d.ts +6 -0
- package/dist/components/Transcription/Models.js +18 -0
- package/dist/components/Transcription/TranscriptionModal.d.ts +3 -0
- package/dist/components/Transcription/TranscriptionModal.js +428 -0
- package/dist/components/Transcription/TranscriptionModalWithOptionalWhisper.d.ts +5 -0
- package/dist/components/Transcription/TranscriptionModalWithOptionalWhisper.js +48 -0
- package/dist/components/Transcription/caption-output-name.d.ts +2 -0
- package/dist/components/Transcription/caption-output-name.js +10 -0
- package/dist/components/Transcription/resample-media-to-16-khz.d.ts +6 -0
- package/dist/components/Transcription/resample-media-to-16-khz.js +82 -0
- package/dist/components/Transcription/whisper-languages.d.ts +2 -0
- package/dist/components/Transcription/whisper-languages.js +104 -0
- package/dist/components/Transcription/whisper-webgpu-capability.d.ts +2 -0
- package/dist/components/Transcription/whisper-webgpu-capability.js +7 -0
- package/dist/components/UndoRedoButtons.js +13 -38
- package/dist/components/UpdatesSettings.js +17 -17
- package/dist/components/VideoMatting/LazyModels.d.ts +1 -0
- package/dist/components/VideoMatting/LazyModels.js +5 -0
- package/dist/components/VideoMatting/Models.d.ts +6 -0
- package/dist/components/VideoMatting/Models.js +18 -0
- package/dist/components/VideoMatting/VideoMattingModal.d.ts +3 -0
- package/dist/components/VideoMatting/VideoMattingModal.js +207 -0
- package/dist/components/VideoMatting/VideoMattingModalWithOptionalPackage.d.ts +5 -0
- package/dist/components/VideoMatting/VideoMattingModalWithOptionalPackage.js +46 -0
- package/dist/components/VideoMatting/video-matting-capability.d.ts +2 -0
- package/dist/components/VideoMatting/video-matting-capability.js +7 -0
- package/dist/components/WebMcp.js +439 -22
- package/dist/components/ZoomPersistor.js +6 -3
- package/dist/components/composition-menu-items.js +1 -1
- package/dist/components/import-assets.d.ts +3 -2
- package/dist/components/import-assets.js +5 -9
- package/dist/components/keyboard-shortcuts.d.ts +17 -1
- package/dist/components/keyboard-shortcuts.js +177 -89
- package/dist/components/public-output-name.d.ts +5 -0
- package/dist/components/public-output-name.js +60 -0
- package/dist/components/use-model-cache-status.d.ts +7 -0
- package/dist/components/use-model-cache-status.js +35 -0
- package/dist/esm/CaptionQueueProcessor-k0yrm3dj.mjs +211 -0
- package/dist/esm/HighlightedElementSource-jfc66k4p.mjs +1236 -0
- package/dist/esm/LazyModels-2trdm224.mjs +11 -0
- package/dist/esm/LazyModels-fjb5ckaq.mjs +11 -0
- package/dist/esm/TranscriptionModal-916jqhry.mjs +1011 -0
- package/dist/esm/VideoMattingModal-2tm79s9b.mjs +374 -0
- package/dist/esm/VideoMattingQueueProcessor-t1hgm2rm.mjs +109 -0
- package/dist/esm/index-1x7bsdh6.mjs +261 -0
- package/dist/esm/index-3hgr6gjx.mjs +41 -0
- package/dist/esm/index-5qddp5h7.mjs +36 -0
- package/dist/esm/index-5zrb1ft4.mjs +39 -0
- package/dist/esm/index-6cvm9a65.mjs +45923 -0
- package/dist/esm/index-7tt71e8n.mjs +36 -0
- package/dist/esm/index-9x6e1dq0.mjs +428 -0
- package/dist/esm/index-cw0pnpg5.mjs +50 -0
- package/dist/esm/index-czwvnn9g.mjs +35 -0
- package/dist/esm/index-hy4xcgty.mjs +1366 -0
- package/dist/esm/{chunk-je0h1bgt.js → index-jg13hf2g.mjs} +3 -1
- package/dist/esm/{chunk-6jf1natv.js → index-rcv7qkt5.mjs} +18 -1
- package/dist/esm/index-sgtmgc4h.mjs +423 -0
- package/dist/esm/index-te66vvrp.mjs +142 -0
- package/dist/esm/index-v4tr1bft.mjs +20 -0
- package/dist/esm/index-x7t2y7ws.mjs +54194 -0
- package/dist/esm/index-xhe2m2qr.mjs +1146 -0
- package/dist/esm/index.mjs +45 -933
- package/dist/esm/internals.mjs +13 -114127
- package/dist/esm/previewEntry.mjs +387 -114784
- package/dist/esm/renderEntry.mjs +3 -3
- package/dist/esm/{chunk-m0jqdbkr.js → resolve-composition-component-location-14148845.mjs} +1 -1
- package/dist/helpers/copy-text.js +1 -2
- package/dist/helpers/drag-aware-double-click.d.ts +2 -1
- package/dist/helpers/drag-aware-double-click.js +12 -1
- package/dist/helpers/get-asset-metadata.d.ts +1 -0
- package/dist/helpers/get-asset-metadata.js +4 -0
- package/dist/helpers/hoverable.js +8 -0
- package/dist/helpers/inject-css.js +2 -0
- package/dist/helpers/optional-package-dependencies.d.ts +3 -0
- package/dist/helpers/optional-package-dependencies.js +24 -0
- package/dist/helpers/pointer-session.d.ts +6 -0
- package/dist/helpers/pointer-session.js +36 -14
- package/dist/helpers/prism-tomorrow.d.ts +1 -0
- package/dist/helpers/prism-tomorrow.js +151 -0
- package/dist/helpers/sequence-node-path-mutations.js +11 -0
- package/dist/helpers/slugify-name.d.ts +1 -0
- package/dist/helpers/slugify-name.js +14 -0
- package/dist/helpers/studio-runtime-config.d.ts +1 -0
- package/dist/helpers/studio-runtime-config.js +6 -1
- package/dist/helpers/use-copy-feedback.d.ts +4 -0
- package/dist/helpers/use-copy-feedback.js +19 -0
- package/dist/helpers/use-keybinding.d.ts +9 -3
- package/dist/helpers/use-keybinding.js +8 -9
- package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -0
- package/dist/helpers/use-keyboard-shortcut-label.js +15 -0
- package/dist/helpers/use-menu-structure.js +58 -13
- package/dist/icons/copy.d.ts +5 -0
- package/dist/icons/copy.js +12 -0
- package/dist/icons/input-props.d.ts +1 -1
- package/dist/icons/input-props.js +2 -2
- package/dist/icons/models.d.ts +4 -0
- package/dist/icons/models.js +7 -0
- package/dist/icons/separation.d.ts +4 -0
- package/dist/icons/separation.js +7 -0
- package/dist/icons/transcription.d.ts +4 -0
- package/dist/icons/transcription.js +7 -0
- package/dist/icons/upload.js +1 -1
- package/dist/state/canvas-ref.d.ts +1 -0
- package/dist/state/canvas-ref.js +2 -1
- package/dist/state/modals.d.ts +14 -2
- package/dist/state/sidebar.d.ts +3 -0
- package/dist/state/sidebar.js +6 -1
- package/dist/state/timeline-zoom.d.ts +1 -1
- package/dist/state/timeline-zoom.js +3 -3
- package/dist/visual-controls/VisualControls.js +4 -0
- package/package.json +34 -20
- package/dist/components/UpdateCheck.d.ts +0 -1
- package/dist/components/UpdateCheck.js +0 -79
- package/dist/esm/chunk-emw4k5b0.js +0 -99527
- package/dist/esm/chunk-vkrvnx2h.js +0 -99378
- package/dist/helpers/use-max-media-duration.d.ts +0 -2
- package/dist/helpers/use-max-media-duration.js +0 -61
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.TimelineSequenceItem =
|
|
36
|
+
exports.TimelineSequenceItem = void 0;
|
|
37
37
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
38
|
const react_1 = __importStar(require("react"));
|
|
39
39
|
const remotion_1 = require("remotion");
|
|
@@ -43,6 +43,8 @@ const client_id_1 = require("../../helpers/client-id");
|
|
|
43
43
|
const colors_1 = require("../../helpers/colors");
|
|
44
44
|
const get_sequence_double_click_action_1 = require("../../helpers/get-sequence-double-click-action");
|
|
45
45
|
const interactivity_enabled_1 = require("../../helpers/interactivity-enabled");
|
|
46
|
+
const is_current_selected_still_1 = require("../../helpers/is-current-selected-still");
|
|
47
|
+
const pointer_session_1 = require("../../helpers/pointer-session");
|
|
46
48
|
const studio_runtime_config_1 = require("../../helpers/studio-runtime-config");
|
|
47
49
|
const timeline_layout_1 = require("../../helpers/timeline-layout");
|
|
48
50
|
const use_keybinding_1 = require("../../helpers/use-keybinding");
|
|
@@ -64,9 +66,12 @@ const use_select_asset_1 = require("../use-select-asset");
|
|
|
64
66
|
const disable_sequence_interactivity_1 = require("./disable-sequence-interactivity");
|
|
65
67
|
const duplicate_selected_timeline_item_1 = require("./duplicate-selected-timeline-item");
|
|
66
68
|
const get_sequence_context_menu_items_1 = require("./get-sequence-context-menu-items");
|
|
69
|
+
const get_sequence_split_menu_item_1 = require("./get-sequence-split-menu-item");
|
|
67
70
|
const imperative_state_1 = require("./imperative-state");
|
|
68
71
|
const save_sequence_prop_1 = require("./save-sequence-prop");
|
|
69
72
|
const timeline_asset_link_1 = require("./timeline-asset-link");
|
|
73
|
+
const timeline_refs_1 = require("./timeline-refs");
|
|
74
|
+
const timeline_scroll_logic_1 = require("./timeline-scroll-logic");
|
|
70
75
|
const TimelineDuplicateCount_1 = require("./TimelineDuplicateCount");
|
|
71
76
|
const TimelineExpandArrowButton_1 = require("./TimelineExpandArrowButton");
|
|
72
77
|
const TimelineExpandedSection_1 = require("./TimelineExpandedSection");
|
|
@@ -76,6 +81,8 @@ const TimelineMediaInfo_1 = require("./TimelineMediaInfo");
|
|
|
76
81
|
const TimelineRowChrome_1 = require("./TimelineRowChrome");
|
|
77
82
|
const TimelineSelection_1 = require("./TimelineSelection");
|
|
78
83
|
const TimelineSequenceName_1 = require("./TimelineSequenceName");
|
|
84
|
+
const TimelineTimeIndicators_1 = require("./TimelineTimeIndicators");
|
|
85
|
+
const use_asset_timeline_context_menu_1 = require("./use-asset-timeline-context-menu");
|
|
79
86
|
const use_delete_timeline_items_1 = require("./use-delete-timeline-items");
|
|
80
87
|
const use_open_sequence_in_apps_1 = require("./use-open-sequence-in-apps");
|
|
81
88
|
const use_rename_sequence_1 = require("./use-rename-sequence");
|
|
@@ -99,8 +106,6 @@ const effectDropHighlight = {
|
|
|
99
106
|
outline: colors_1.BORDER_TIMELINE_DROP_BLUE,
|
|
100
107
|
outlineOffset: -1,
|
|
101
108
|
};
|
|
102
|
-
exports.SEQUENCE_REORDER_MIME_TYPE = 'application/remotion-sequence-reorder';
|
|
103
|
-
let currentSequenceDrag = null;
|
|
104
109
|
const TimelineSequenceExpandArrowInner = ({ disabled, isExpanded, nodePathInfo, sequence }) => {
|
|
105
110
|
const { toggleTrack } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksSetterContext);
|
|
106
111
|
const hasExpandableContent = (0, use_timeline_expanded_tree_1.useTimelineSequenceHasExpandableContent)({
|
|
@@ -146,39 +151,24 @@ const sequenceReorderAfterLine = {
|
|
|
146
151
|
...sequenceReorderLineBase,
|
|
147
152
|
top: -1,
|
|
148
153
|
};
|
|
149
|
-
const
|
|
150
|
-
return
|
|
151
|
-
};
|
|
152
|
-
const isSequenceReorderDrag = (dataTransfer) => {
|
|
153
|
-
return (currentSequenceDrag !== null || hasSequenceReorderDragType(dataTransfer));
|
|
154
|
+
const getDestinationIndex = ({ fromIndex, insertionIndex, }) => {
|
|
155
|
+
return insertionIndex > fromIndex ? insertionIndex - 1 : insertionIndex;
|
|
154
156
|
};
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
if (typeof parsed.nodePathKey === 'string' &&
|
|
166
|
-
typeof parsed.siblingIndex === 'number' &&
|
|
167
|
-
(typeof parsed.parentId === 'string' || parsed.parentId === null) &&
|
|
168
|
-
typeof parsed.fileName === 'string' &&
|
|
169
|
-
parsed.nodePath &&
|
|
170
|
-
Array.isArray(parsed.nodePath.nodePath)) {
|
|
171
|
-
return parsed;
|
|
157
|
+
const sequencePointerDropTargets = new Map();
|
|
158
|
+
const getSequencePointerDropTargetAtPoint = ({ clientX, clientY, }) => {
|
|
159
|
+
for (const element of document.elementsFromPoint(clientX, clientY)) {
|
|
160
|
+
let current = element;
|
|
161
|
+
while (current) {
|
|
162
|
+
const dropTarget = sequencePointerDropTargets.get(current);
|
|
163
|
+
if (dropTarget) {
|
|
164
|
+
return dropTarget;
|
|
165
|
+
}
|
|
166
|
+
current = current.parentElement;
|
|
172
167
|
}
|
|
173
168
|
}
|
|
174
|
-
catch (_a) {
|
|
175
|
-
return null;
|
|
176
|
-
}
|
|
177
169
|
return null;
|
|
178
170
|
};
|
|
179
|
-
const
|
|
180
|
-
return insertionIndex > fromIndex ? insertionIndex - 1 : insertionIndex;
|
|
181
|
-
};
|
|
171
|
+
const SEQUENCE_REORDER_POINTER_THRESHOLD = 3;
|
|
182
172
|
const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions, nestedDepth, sequence, nodePathInfo, keyframeDisplayOffset, sequenceFrameOffset, siblingIndex, }) => {
|
|
183
173
|
var _a, _b;
|
|
184
174
|
var _c, _d, _e, _f;
|
|
@@ -187,12 +177,14 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
187
177
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
188
178
|
const previewConnected = previewServerState.type === 'connected';
|
|
189
179
|
const previewInteractive = previewConnected && (0, interactivity_enabled_1.isStudioInteractivityEnabled)();
|
|
180
|
+
const isStill = (0, is_current_selected_still_1.useIsStill)();
|
|
190
181
|
const canMutateEffects = previewConnected && (0, interactivity_enabled_1.isStudioSelectionEnabled)() && (0, browser_studio_operations_1.canUseEffectOperations)();
|
|
191
182
|
const { getIsExpanded } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksGetterContext);
|
|
192
183
|
const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
|
|
193
184
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
194
185
|
const { isHighestContext } = (0, use_keybinding_1.useKeybinding)();
|
|
195
186
|
const selectAsset = (0, use_select_asset_1.useSelectAsset)();
|
|
187
|
+
const assetContextMenu = (0, use_asset_timeline_context_menu_1.useAssetTimelineContextMenu)();
|
|
196
188
|
const selectComposition = (0, InitialCompositionLoader_1.useSelectComposition)();
|
|
197
189
|
const deleteTimelineItems = (0, use_delete_timeline_items_1.useDeleteTimelineItems)();
|
|
198
190
|
const { onSelect, selectable, selected } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
|
|
@@ -209,6 +201,9 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
209
201
|
const [effectDropHovered, setEffectDropHovered] = (0, react_1.useState)(false);
|
|
210
202
|
const [isRenaming, setIsRenaming] = (0, react_1.useState)(false);
|
|
211
203
|
const [sequenceDropIndicator, setSequenceDropIndicator] = (0, react_1.useState)(null);
|
|
204
|
+
const sequenceReorderWrapperRef = (0, react_1.useRef)(null);
|
|
205
|
+
const stopSequencePointerSession = (0, react_1.useRef)(null);
|
|
206
|
+
const suppressNextClick = (0, react_1.useRef)(false);
|
|
212
207
|
const { canOpenInEditor, canConfigureApps, codingAgentInfo, editorInfo, openInCodingAgent, openInEditor, originalLocation, } = (0, use_open_sequence_in_apps_1.useOpenSequenceInApps)(sequence);
|
|
213
208
|
const validatedLocation = (0, react_1.useMemo)(() => {
|
|
214
209
|
var _a;
|
|
@@ -306,11 +301,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
306
301
|
setPropStatuses,
|
|
307
302
|
validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
|
|
308
303
|
]);
|
|
309
|
-
const getSequenceDropTarget = (0, react_1.useCallback)((
|
|
310
|
-
const dragData = getSequenceReorderDragData(e.dataTransfer);
|
|
311
|
-
if (!dragData) {
|
|
312
|
-
return null;
|
|
313
|
-
}
|
|
304
|
+
const getSequenceDropTarget = (0, react_1.useCallback)((clientY, dragData) => {
|
|
314
305
|
if (!nodePath || !nodePathKey || !(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) {
|
|
315
306
|
return {
|
|
316
307
|
type: 'invalid',
|
|
@@ -336,8 +327,12 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
336
327
|
reason: 'Sequences can only be reordered with direct JSX siblings.',
|
|
337
328
|
};
|
|
338
329
|
}
|
|
339
|
-
const
|
|
340
|
-
|
|
330
|
+
const element = sequenceReorderWrapperRef.current;
|
|
331
|
+
if (!element) {
|
|
332
|
+
return null;
|
|
333
|
+
}
|
|
334
|
+
const rect = element.getBoundingClientRect();
|
|
335
|
+
const before = clientY < rect.top + rect.height / 2;
|
|
341
336
|
const insertionIndex = before ? siblingIndex : siblingIndex + 1;
|
|
342
337
|
const toIndex = getDestinationIndex({
|
|
343
338
|
fromIndex: dragData.siblingIndex,
|
|
@@ -362,78 +357,13 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
362
357
|
siblingIndex,
|
|
363
358
|
validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
|
|
364
359
|
]);
|
|
365
|
-
const
|
|
366
|
-
if (!canReorderSequence ||
|
|
367
|
-
!nodePath ||
|
|
368
|
-
!nodePathKey ||
|
|
369
|
-
!(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) {
|
|
370
|
-
e.preventDefault();
|
|
371
|
-
return;
|
|
372
|
-
}
|
|
373
|
-
const dragData = {
|
|
374
|
-
nodePath,
|
|
375
|
-
nodePathKey,
|
|
376
|
-
siblingIndex,
|
|
377
|
-
parentId,
|
|
378
|
-
fileName: validatedLocation.source,
|
|
379
|
-
};
|
|
380
|
-
currentSequenceDrag = dragData;
|
|
381
|
-
e.dataTransfer.effectAllowed = 'move';
|
|
382
|
-
e.dataTransfer.setData(exports.SEQUENCE_REORDER_MIME_TYPE, JSON.stringify(dragData));
|
|
383
|
-
e.stopPropagation();
|
|
384
|
-
}, [
|
|
385
|
-
canReorderSequence,
|
|
386
|
-
nodePath,
|
|
387
|
-
nodePathKey,
|
|
388
|
-
parentId,
|
|
389
|
-
siblingIndex,
|
|
390
|
-
validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
|
|
391
|
-
]);
|
|
392
|
-
const onSequenceDragEnd = (0, react_1.useCallback)(() => {
|
|
393
|
-
currentSequenceDrag = null;
|
|
394
|
-
setSequenceDropIndicator(null);
|
|
395
|
-
}, []);
|
|
396
|
-
const onSequenceDragOver = (0, react_1.useCallback)((e) => {
|
|
397
|
-
if (!hasSequenceReorderDragType(e.dataTransfer)) {
|
|
398
|
-
return;
|
|
399
|
-
}
|
|
400
|
-
const dropTarget = getSequenceDropTarget(e);
|
|
401
|
-
if (!dropTarget) {
|
|
402
|
-
setSequenceDropIndicator(null);
|
|
403
|
-
return;
|
|
404
|
-
}
|
|
405
|
-
if (dropTarget.type === 'invalid') {
|
|
406
|
-
setSequenceDropIndicator(null);
|
|
407
|
-
e.dataTransfer.dropEffect = 'none';
|
|
408
|
-
return;
|
|
409
|
-
}
|
|
410
|
-
e.preventDefault();
|
|
411
|
-
e.stopPropagation();
|
|
412
|
-
e.dataTransfer.dropEffect = 'move';
|
|
413
|
-
setSequenceDropIndicator(dropTarget.position);
|
|
414
|
-
}, [getSequenceDropTarget]);
|
|
415
|
-
const onSequenceDragLeave = (0, react_1.useCallback)((e) => {
|
|
416
|
-
if (e.currentTarget.contains(e.relatedTarget)) {
|
|
417
|
-
return;
|
|
418
|
-
}
|
|
419
|
-
setSequenceDropIndicator(null);
|
|
420
|
-
}, []);
|
|
421
|
-
const onSequenceDrop = (0, react_1.useCallback)(async (e) => {
|
|
360
|
+
const reorderSequenceFromPointer = (0, react_1.useCallback)(async (dropTarget) => {
|
|
422
361
|
if (!canReorderSequence ||
|
|
423
362
|
previewServerState.type !== 'connected' ||
|
|
424
363
|
!nodePath ||
|
|
425
364
|
!(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) {
|
|
426
365
|
return;
|
|
427
366
|
}
|
|
428
|
-
const dropTarget = getSequenceDropTarget(e);
|
|
429
|
-
if (!dropTarget || dropTarget.type === 'invalid') {
|
|
430
|
-
setSequenceDropIndicator(null);
|
|
431
|
-
return;
|
|
432
|
-
}
|
|
433
|
-
e.preventDefault();
|
|
434
|
-
e.stopPropagation();
|
|
435
|
-
setSequenceDropIndicator(null);
|
|
436
|
-
currentSequenceDrag = null;
|
|
437
367
|
try {
|
|
438
368
|
const result = await (0, reorder_sequence_api_1.reorderSequence)({
|
|
439
369
|
fileName: validatedLocation.source,
|
|
@@ -451,11 +381,178 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
451
381
|
}
|
|
452
382
|
}, [
|
|
453
383
|
canReorderSequence,
|
|
454
|
-
getSequenceDropTarget,
|
|
455
384
|
nodePath,
|
|
456
385
|
previewServerState,
|
|
457
386
|
validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
|
|
458
387
|
]);
|
|
388
|
+
(0, react_1.useEffect)(() => {
|
|
389
|
+
const element = sequenceReorderWrapperRef.current;
|
|
390
|
+
if (!element || !canHandleSequenceDrag) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
const pointerDropTarget = {
|
|
394
|
+
getDropTarget: getSequenceDropTarget,
|
|
395
|
+
reorder: (dropTarget) => {
|
|
396
|
+
reorderSequenceFromPointer(dropTarget).catch(() => undefined);
|
|
397
|
+
},
|
|
398
|
+
setDropIndicator: setSequenceDropIndicator,
|
|
399
|
+
};
|
|
400
|
+
sequencePointerDropTargets.set(element, pointerDropTarget);
|
|
401
|
+
return () => {
|
|
402
|
+
sequencePointerDropTargets.delete(element);
|
|
403
|
+
};
|
|
404
|
+
}, [
|
|
405
|
+
canHandleSequenceDrag,
|
|
406
|
+
getSequenceDropTarget,
|
|
407
|
+
reorderSequenceFromPointer,
|
|
408
|
+
]);
|
|
409
|
+
(0, react_1.useEffect)(() => {
|
|
410
|
+
return () => {
|
|
411
|
+
var _a;
|
|
412
|
+
return (_a = stopSequencePointerSession.current) === null || _a === void 0 ? void 0 : _a.call(stopSequencePointerSession);
|
|
413
|
+
};
|
|
414
|
+
}, []);
|
|
415
|
+
const onSequencePointerDown = (0, react_1.useCallback)((e) => {
|
|
416
|
+
var _a;
|
|
417
|
+
if (!(e.target instanceof Element)) {
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
if (e.button !== 0 ||
|
|
421
|
+
!e.isPrimary ||
|
|
422
|
+
e.target.closest('[data-remotion-sequence-reorder-row]') !==
|
|
423
|
+
e.currentTarget ||
|
|
424
|
+
e.target.closest('button, input, textarea, select, [contenteditable="true"], [data-timeline-layer-eye]') ||
|
|
425
|
+
!canReorderSequence ||
|
|
426
|
+
!nodePath ||
|
|
427
|
+
!nodePathKey ||
|
|
428
|
+
!(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) {
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
(_a = stopSequencePointerSession.current) === null || _a === void 0 ? void 0 : _a.call(stopSequencePointerSession);
|
|
432
|
+
const dragData = {
|
|
433
|
+
fileName: validatedLocation.source,
|
|
434
|
+
nodePath,
|
|
435
|
+
nodePathKey,
|
|
436
|
+
parentId,
|
|
437
|
+
siblingIndex,
|
|
438
|
+
};
|
|
439
|
+
const sourceElement = e.currentTarget;
|
|
440
|
+
const sourceRect = sourceElement.getBoundingClientRect();
|
|
441
|
+
const startX = e.clientX;
|
|
442
|
+
const startY = e.clientY;
|
|
443
|
+
let currentClientY = startY;
|
|
444
|
+
let dragPreview = null;
|
|
445
|
+
let activeDropTarget = null;
|
|
446
|
+
let activeDrop = null;
|
|
447
|
+
let didDrag = false;
|
|
448
|
+
let previousUserSelect = '';
|
|
449
|
+
let previousWebkitUserSelect = '';
|
|
450
|
+
const updateDropTarget = (clientY) => {
|
|
451
|
+
var _a;
|
|
452
|
+
const pointerDropTarget = getSequencePointerDropTargetAtPoint({
|
|
453
|
+
clientX: startX,
|
|
454
|
+
clientY,
|
|
455
|
+
});
|
|
456
|
+
const dropTarget = pointerDropTarget === null || pointerDropTarget === void 0 ? void 0 : pointerDropTarget.getDropTarget(clientY, dragData);
|
|
457
|
+
if (activeDropTarget !== pointerDropTarget) {
|
|
458
|
+
activeDropTarget === null || activeDropTarget === void 0 ? void 0 : activeDropTarget.setDropIndicator(null);
|
|
459
|
+
}
|
|
460
|
+
activeDropTarget = pointerDropTarget;
|
|
461
|
+
activeDrop = (dropTarget === null || dropTarget === void 0 ? void 0 : dropTarget.type) === 'valid' ? dropTarget : null;
|
|
462
|
+
activeDropTarget === null || activeDropTarget === void 0 ? void 0 : activeDropTarget.setDropIndicator((_a = activeDrop === null || activeDrop === void 0 ? void 0 : activeDrop.position) !== null && _a !== void 0 ? _a : null);
|
|
463
|
+
};
|
|
464
|
+
const verticalScroll = timeline_refs_1.timelineVerticalScroll.current;
|
|
465
|
+
const autoScroll = (0, timeline_scroll_logic_1.startTimelineEdgeAutoScroll)({
|
|
466
|
+
includeHorizontal: false,
|
|
467
|
+
includeVertical: true,
|
|
468
|
+
verticalTopOffset: isStill ? 0 : TimelineTimeIndicators_1.TIMELINE_TIME_INDICATOR_HEIGHT,
|
|
469
|
+
onTick: (directions) => {
|
|
470
|
+
if (directions.y === null || !verticalScroll) {
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
verticalScroll.scrollTop +=
|
|
474
|
+
directions.y === 'up'
|
|
475
|
+
? -timeline_scroll_logic_1.EDGE_SCROLL_VERTICAL_INCREMENT
|
|
476
|
+
: timeline_scroll_logic_1.EDGE_SCROLL_VERTICAL_INCREMENT;
|
|
477
|
+
updateDropTarget(currentClientY);
|
|
478
|
+
},
|
|
479
|
+
});
|
|
480
|
+
stopSequencePointerSession.current = (0, pointer_session_1.startCapturedPointerSession)({
|
|
481
|
+
captureTarget: sourceElement,
|
|
482
|
+
event: e.nativeEvent,
|
|
483
|
+
onMove: (pointerEvent) => {
|
|
484
|
+
currentClientY = pointerEvent.clientY;
|
|
485
|
+
if (!didDrag &&
|
|
486
|
+
Math.hypot(pointerEvent.clientX - startX, pointerEvent.clientY - startY) < SEQUENCE_REORDER_POINTER_THRESHOLD) {
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
if (!didDrag) {
|
|
490
|
+
didDrag = true;
|
|
491
|
+
previousUserSelect = document.body.style.userSelect;
|
|
492
|
+
previousWebkitUserSelect = document.body.style.webkitUserSelect;
|
|
493
|
+
document.body.style.userSelect = 'none';
|
|
494
|
+
document.body.style.webkitUserSelect = 'none';
|
|
495
|
+
dragPreview = sourceElement.cloneNode(true);
|
|
496
|
+
dragPreview.setAttribute('aria-hidden', 'true');
|
|
497
|
+
dragPreview.setAttribute('data-remotion-sequence-reorder-preview', 'true');
|
|
498
|
+
dragPreview.removeAttribute('data-remotion-sequence-reorder-row');
|
|
499
|
+
Object.assign(dragPreview.style, {
|
|
500
|
+
height: `${sourceRect.height}px`,
|
|
501
|
+
left: `${sourceRect.left}px`,
|
|
502
|
+
margin: '0',
|
|
503
|
+
opacity: '0.8',
|
|
504
|
+
pointerEvents: 'none',
|
|
505
|
+
position: 'fixed',
|
|
506
|
+
top: `${sourceRect.top}px`,
|
|
507
|
+
width: `${sourceRect.width}px`,
|
|
508
|
+
zIndex: '2147483647',
|
|
509
|
+
});
|
|
510
|
+
document.body.appendChild(dragPreview);
|
|
511
|
+
}
|
|
512
|
+
pointerEvent.preventDefault();
|
|
513
|
+
dragPreview.style.transform = `translate3d(0, ${pointerEvent.clientY - startY}px, 0)`;
|
|
514
|
+
updateDropTarget(pointerEvent.clientY);
|
|
515
|
+
autoScroll.update({ clientX: startX, clientY: pointerEvent.clientY });
|
|
516
|
+
},
|
|
517
|
+
onEnd: (reason, pointerEvent) => {
|
|
518
|
+
if (reason === 'pointerup' && pointerEvent && didDrag) {
|
|
519
|
+
updateDropTarget(pointerEvent.clientY);
|
|
520
|
+
}
|
|
521
|
+
autoScroll.stop();
|
|
522
|
+
activeDropTarget === null || activeDropTarget === void 0 ? void 0 : activeDropTarget.setDropIndicator(null);
|
|
523
|
+
dragPreview === null || dragPreview === void 0 ? void 0 : dragPreview.remove();
|
|
524
|
+
stopSequencePointerSession.current = null;
|
|
525
|
+
if (!didDrag) {
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
document.body.style.userSelect = previousUserSelect;
|
|
529
|
+
document.body.style.webkitUserSelect = previousWebkitUserSelect;
|
|
530
|
+
suppressNextClick.current = true;
|
|
531
|
+
setTimeout(() => {
|
|
532
|
+
suppressNextClick.current = false;
|
|
533
|
+
}, 0);
|
|
534
|
+
if (reason === 'pointerup' && pointerEvent && activeDrop) {
|
|
535
|
+
activeDropTarget === null || activeDropTarget === void 0 ? void 0 : activeDropTarget.reorder(activeDrop);
|
|
536
|
+
}
|
|
537
|
+
},
|
|
538
|
+
});
|
|
539
|
+
}, [
|
|
540
|
+
canReorderSequence,
|
|
541
|
+
isStill,
|
|
542
|
+
nodePath,
|
|
543
|
+
nodePathKey,
|
|
544
|
+
parentId,
|
|
545
|
+
siblingIndex,
|
|
546
|
+
validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source,
|
|
547
|
+
]);
|
|
548
|
+
const onSequenceClickCapture = (0, react_1.useCallback)((e) => {
|
|
549
|
+
if (!suppressNextClick.current) {
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
552
|
+
e.preventDefault();
|
|
553
|
+
e.stopPropagation();
|
|
554
|
+
suppressNextClick.current = false;
|
|
555
|
+
}, []);
|
|
459
556
|
const mediaSrc = sequence.type === 'audio' ||
|
|
460
557
|
sequence.type === 'video' ||
|
|
461
558
|
sequence.type === 'image'
|
|
@@ -694,6 +791,9 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
694
791
|
}, [canRotate, nodePathInfo, selectItem, setManuallyEnabled]);
|
|
695
792
|
const getContextMenuItems = (0, react_1.useCallback)(() => {
|
|
696
793
|
var _a;
|
|
794
|
+
if (assetContextMenu !== null) {
|
|
795
|
+
return assetContextMenu;
|
|
796
|
+
}
|
|
697
797
|
if (selectable && !selected) {
|
|
698
798
|
onSelect({ shiftKey: false, toggleKey: false });
|
|
699
799
|
}
|
|
@@ -705,6 +805,14 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
705
805
|
onDuplicateSelectedSequences,
|
|
706
806
|
});
|
|
707
807
|
}
|
|
808
|
+
const splitMenuItem = (0, get_sequence_split_menu_item_1.getSequenceSplitMenuItem)({
|
|
809
|
+
nodePathInfo,
|
|
810
|
+
sequence,
|
|
811
|
+
propStatuses: propStatusesForOverride,
|
|
812
|
+
splitFrame: (0, imperative_state_1.getCurrentFrame)(),
|
|
813
|
+
canEditSource: previewInteractive && Boolean(validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source),
|
|
814
|
+
hasMultipleSelection: selected && selectedItems.length > 1,
|
|
815
|
+
});
|
|
708
816
|
const freezeFrameMenuItem = (0, use_sequence_freeze_frame_menu_item_1.getSequenceFreezeFrameMenuItem)({
|
|
709
817
|
clientId: previewInteractive && previewServerState.type === 'connected'
|
|
710
818
|
? previewServerState.clientId
|
|
@@ -820,11 +928,13 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
820
928
|
subMenu: null,
|
|
821
929
|
value: 'rename-sequence',
|
|
822
930
|
},
|
|
931
|
+
...(splitMenuItem ? [splitMenuItem] : []),
|
|
823
932
|
...(freezeFrameMenuItem ? [freezeFrameMenuItem] : []),
|
|
824
933
|
]
|
|
825
934
|
: [],
|
|
826
935
|
});
|
|
827
936
|
}, [
|
|
937
|
+
assetContextMenu,
|
|
828
938
|
canAddEffect,
|
|
829
939
|
canCrop,
|
|
830
940
|
canRotate,
|
|
@@ -839,7 +949,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
839
949
|
isProgrammaticallyDuplicated,
|
|
840
950
|
mediaSrc,
|
|
841
951
|
nodePath,
|
|
842
|
-
nodePathInfo
|
|
952
|
+
nodePathInfo,
|
|
843
953
|
onAddEffect,
|
|
844
954
|
onCrop,
|
|
845
955
|
onRotate,
|
|
@@ -859,6 +969,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
859
969
|
selectAsset,
|
|
860
970
|
selectable,
|
|
861
971
|
selected,
|
|
972
|
+
selectedItems.length,
|
|
862
973
|
selectedSequenceNodePathInfos,
|
|
863
974
|
sequence,
|
|
864
975
|
sequenceFrameOffset,
|
|
@@ -880,9 +991,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
880
991
|
};
|
|
881
992
|
}, [sequenceDropIndicator]);
|
|
882
993
|
const onEffectDragOver = (0, react_1.useCallback)((e) => {
|
|
883
|
-
if (!canDropEffect ||
|
|
884
|
-
isSequenceReorderDrag(e.dataTransfer) ||
|
|
885
|
-
!(0, effect_drag_and_drop_1.hasEffectDragType)(e.dataTransfer)) {
|
|
994
|
+
if (!canDropEffect || !(0, effect_drag_and_drop_1.hasEffectDragType)(e.dataTransfer)) {
|
|
886
995
|
return;
|
|
887
996
|
}
|
|
888
997
|
e.preventDefault();
|
|
@@ -900,7 +1009,6 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
900
1009
|
previewServerState.type !== 'connected' ||
|
|
901
1010
|
nodePath === null ||
|
|
902
1011
|
validatedLocation === null ||
|
|
903
|
-
isSequenceReorderDrag(e.dataTransfer) ||
|
|
904
1012
|
!(0, effect_drag_and_drop_1.hasEffectDragType)(e.dataTransfer)) {
|
|
905
1013
|
return;
|
|
906
1014
|
}
|
|
@@ -935,11 +1043,11 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
935
1043
|
" ",
|
|
936
1044
|
jsx_runtime_1.jsx(TimelineMediaInfo_1.TimelineMediaInfo, { src: mediaSrc })
|
|
937
1045
|
] })) : null] }) }));
|
|
938
|
-
const
|
|
1046
|
+
const reorderableTrackRow = canHandleSequenceDrag ? (jsx_runtime_1.jsxs("div", { ref: sequenceReorderWrapperRef, "data-remotion-sequence-reorder-row": true, onClickCapture: onSequenceClickCapture, onPointerDownCapture: onSequencePointerDown, style: sequenceReorderWrapper, children: [sequenceReorderLineStyle ? (jsx_runtime_1.jsx("div", { style: sequenceReorderLineStyle })) : null, trackRow, sequenceDropIndicator === 'after' ? (jsx_runtime_1.jsx("div", { style: {
|
|
939
1047
|
...sequenceReorderAfterLineWrapper,
|
|
940
1048
|
top: afterDropLineOffset,
|
|
941
1049
|
}, children: jsx_runtime_1.jsx("div", { style: sequenceReorderAfterLine }) })) : null] })) : (trackRow);
|
|
942
|
-
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [previewConnected || window.remotion_isReadOnlyStudio ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children:
|
|
1050
|
+
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [previewConnected || window.remotion_isReadOnlyStudio ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: reorderableTrackRow })) : (reorderableTrackRow), previewConnected &&
|
|
943
1051
|
(0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
|
|
944
1052
|
isExpanded &&
|
|
945
1053
|
hasExpandableContent &&
|
|
@@ -4,9 +4,28 @@ import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-s
|
|
|
4
4
|
import type { MoveEffectKeyframeChange, MoveSequenceKeyframeChange } from './call-move-keyframe';
|
|
5
5
|
import { type SaveSequencePropChange } from './save-sequence-prop';
|
|
6
6
|
export declare const timelineSequenceFromDragSnapThresholdPx = 10;
|
|
7
|
+
export type TimelineSequenceMediaDurationDragLimits = {
|
|
8
|
+
readonly initialDuration: number;
|
|
9
|
+
readonly maximumDuration: number;
|
|
10
|
+
};
|
|
11
|
+
export declare const TimelineSequenceMediaDurationDragLimitsContext: React.Context<React.RefObject<Map<string, TimelineSequenceMediaDurationDragLimits | null>> | null>;
|
|
12
|
+
export declare const TimelineSequenceMediaDurationDragLimitsProvider: React.FC<{
|
|
13
|
+
readonly children: React.ReactNode;
|
|
14
|
+
}>;
|
|
15
|
+
export declare const getTimelineSequenceMediaDurationDragLimits: ({ cascadedStart, displayDurationInFrames, displayStart, effectiveMaxMediaDuration, explicitDurationInFrames, hasImplicitDuration, naturalMediaDuration, timelineDurationInFrames, }: {
|
|
16
|
+
readonly cascadedStart: number;
|
|
17
|
+
readonly displayDurationInFrames: number;
|
|
18
|
+
readonly displayStart: number;
|
|
19
|
+
readonly effectiveMaxMediaDuration: number | null;
|
|
20
|
+
readonly explicitDurationInFrames: number | null;
|
|
21
|
+
readonly hasImplicitDuration: boolean;
|
|
22
|
+
readonly naturalMediaDuration: number | null;
|
|
23
|
+
readonly timelineDurationInFrames: number;
|
|
24
|
+
}) => TimelineSequenceMediaDurationDragLimits | null;
|
|
7
25
|
export type TimelineSequenceDurationDragTarget = {
|
|
8
26
|
readonly fileName: string;
|
|
9
27
|
readonly initialDuration: number;
|
|
28
|
+
readonly maximumDuration: number;
|
|
10
29
|
readonly minimumDuration: number;
|
|
11
30
|
readonly nodePath: SequencePropsSubscriptionKey;
|
|
12
31
|
readonly schema: InteractivitySchema;
|
|
@@ -24,6 +43,8 @@ export type TimelineSequenceLeftEdgeDragTarget = {
|
|
|
24
43
|
};
|
|
25
44
|
export type TimelineSequenceFromDragTarget = {
|
|
26
45
|
readonly canSnapToTimelineStart: boolean;
|
|
46
|
+
readonly minimumDeltaFrames: number;
|
|
47
|
+
readonly initialTimelineStart: number;
|
|
27
48
|
readonly effectKeyframes: TimelineSequenceEffectKeyframeDragTarget[];
|
|
28
49
|
readonly fileName: string;
|
|
29
50
|
readonly initialFrom: number;
|
|
@@ -44,14 +65,14 @@ type TimelineSequenceEffectKeyframeDragTarget = TimelineSequenceKeyframeDragTarg
|
|
|
44
65
|
export declare const isTransitionSeriesSequence: (sequence: TSequence) => boolean;
|
|
45
66
|
export declare const isCascadingSequence: (sequence: TSequence) => boolean;
|
|
46
67
|
export declare const isTimelineSequenceDurationDraggable: (sequence: TSequence) => boolean;
|
|
47
|
-
export declare const canResizeTimelineSequenceDuration: ({
|
|
48
|
-
readonly sequence: TSequence;
|
|
68
|
+
export declare const canResizeTimelineSequenceDuration: ({ status, }: {
|
|
49
69
|
readonly status: CanUpdateSequencePropStatus | undefined;
|
|
50
70
|
}) => boolean;
|
|
51
71
|
export declare const isTimelineSequenceLeftEdgeDraggable: (sequence: TSequence) => boolean;
|
|
52
|
-
export declare const getTimelineSequenceDurationDragValue: ({ initialDuration, deltaFrames, minimumDuration, }: {
|
|
72
|
+
export declare const getTimelineSequenceDurationDragValue: ({ initialDuration, deltaFrames, maximumDuration, minimumDuration, }: {
|
|
53
73
|
readonly initialDuration: number;
|
|
54
74
|
readonly deltaFrames: number;
|
|
75
|
+
readonly maximumDuration: number;
|
|
55
76
|
readonly minimumDuration?: number | undefined;
|
|
56
77
|
}) => number;
|
|
57
78
|
export declare const getTimelineSequenceLeftEdgeDragDelta: ({ initialDuration, initialTrimBefore, deltaFrames, playbackRate, minimumDuration, }: {
|
|
@@ -85,8 +106,9 @@ export declare const getTimelineSequenceFromDragValue: ({ initialFrom, deltaFram
|
|
|
85
106
|
readonly initialFrom: number;
|
|
86
107
|
readonly deltaFrames: number;
|
|
87
108
|
}) => number;
|
|
88
|
-
export declare const getTimelineSequenceFromDragDelta: ({ deltaFrames, pxPerFrame, snappingEnabled, targets, }: {
|
|
109
|
+
export declare const getTimelineSequenceFromDragDelta: ({ deltaFrames, timelineDurationInFrames, pxPerFrame, snappingEnabled, targets, }: {
|
|
89
110
|
readonly deltaFrames: number;
|
|
111
|
+
readonly timelineDurationInFrames: number;
|
|
90
112
|
readonly pxPerFrame: number;
|
|
91
113
|
readonly snappingEnabled: boolean;
|
|
92
114
|
readonly targets: readonly TimelineSequenceFromDragTarget[];
|
|
@@ -102,12 +124,15 @@ export declare const getTimelineSequenceFromDragKeyframeMoves: ({ targets, delta
|
|
|
102
124
|
readonly effectKeyframes: MoveEffectKeyframeChange[];
|
|
103
125
|
readonly sequenceKeyframes: MoveSequenceKeyframeChange[];
|
|
104
126
|
};
|
|
105
|
-
export declare const getTimelineSequenceDurationDragTargets: ({ draggedNodePathInfo, selectedItems, sequences, overrideIdsToNodePaths, propStatuses, }: {
|
|
127
|
+
export declare const getTimelineSequenceDurationDragTargets: ({ draggedNodePathInfo, draggedSequenceMediaDurationDragLimits, selectedSequenceMediaDurationDragLimits, selectedItems, sequences, overrideIdsToNodePaths, propStatuses, timelineDurationInFrames, }: {
|
|
106
128
|
readonly draggedNodePathInfo: SequenceNodePathInfo;
|
|
129
|
+
readonly draggedSequenceMediaDurationDragLimits: TimelineSequenceMediaDurationDragLimits | null;
|
|
130
|
+
readonly selectedSequenceMediaDurationDragLimits: ReadonlyMap<string, TimelineSequenceMediaDurationDragLimits | null> | null;
|
|
107
131
|
readonly selectedItems: readonly import("@remotion/canvas").CanvasSelectionItem[];
|
|
108
132
|
readonly sequences: TSequence[];
|
|
109
133
|
readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
|
|
110
134
|
readonly propStatuses: PropStatuses;
|
|
135
|
+
readonly timelineDurationInFrames: number;
|
|
111
136
|
}) => TimelineSequenceDurationDragTarget[] | null;
|
|
112
137
|
export declare const getTimelineSequenceLeftEdgeDragTargets: ({ draggedNodePathInfo, selectedItems, sequences, overrideIdsToNodePaths, propStatuses, }: {
|
|
113
138
|
readonly draggedNodePathInfo: SequenceNodePathInfo;
|
|
@@ -128,6 +153,8 @@ export declare const TimelineSequenceLeftEdgeDragHandle: React.NamedExoticCompon
|
|
|
128
153
|
readonly windowWidth: number;
|
|
129
154
|
readonly timelineDurationInFrames: number;
|
|
130
155
|
readonly onDragEnd: (wasDragged: boolean) => void;
|
|
156
|
+
readonly onSelect: (interaction?: import("@remotion/canvas").CanvasSelectionInteraction | undefined) => void;
|
|
157
|
+
readonly selected: boolean;
|
|
131
158
|
}>;
|
|
132
159
|
export declare const useTimelineSequenceFromDrag: ({ nodePathInfo, windowWidth, timelineDurationInFrames, onDragEnd, }: {
|
|
133
160
|
readonly nodePathInfo: SequenceNodePathInfo | null;
|
|
@@ -139,8 +166,11 @@ export declare const useTimelineSequenceFromDrag: ({ nodePathInfo, windowWidth,
|
|
|
139
166
|
};
|
|
140
167
|
export declare const TimelineSequenceRightEdgeDragHandle: React.NamedExoticComponent<{
|
|
141
168
|
readonly nodePathInfo: SequenceNodePathInfo;
|
|
169
|
+
readonly mediaDurationDragLimits: TimelineSequenceMediaDurationDragLimits | null;
|
|
142
170
|
readonly windowWidth: number;
|
|
143
171
|
readonly timelineDurationInFrames: number;
|
|
144
172
|
readonly onDragEnd: (wasDragged: boolean) => void;
|
|
173
|
+
readonly onSelect: (interaction?: import("@remotion/canvas").CanvasSelectionInteraction | undefined) => void;
|
|
174
|
+
readonly selected: boolean;
|
|
145
175
|
}>;
|
|
146
176
|
export {};
|