@remotion/studio 4.0.524 → 4.0.526
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/focus-default-props-path.js +7 -1
- package/dist/api/restart-studio.d.ts +1 -1
- package/dist/api/restart-studio.js +1 -1
- package/dist/components/ActionTooltip.d.ts +2 -0
- package/dist/components/ActionTooltip.js +14 -4
- package/dist/components/AgentPrompt.d.ts +6 -0
- package/dist/components/AgentPrompt.js +107 -0
- package/dist/components/AppLaunchButton.js +2 -0
- package/dist/components/AssetFileIcon.js +2 -0
- package/dist/components/AssetSelectorItem.d.ts +1 -23
- package/dist/components/AssetSelectorItem.js +10 -200
- package/dist/components/AssetSelectorModal.d.ts +6 -0
- package/dist/components/AssetSelectorModal.js +174 -0
- package/dist/components/Canvas.js +21 -4
- package/dist/components/CaptionInspector.js +9 -3
- package/dist/components/CheckboardToggle.js +2 -1
- package/dist/{error-overlay/remotion-overlay → components}/CodeFrame.d.ts +2 -0
- package/dist/components/CodeFrame.js +77 -0
- package/dist/components/ColorPicker/AlphaSlider.js +1 -1
- package/dist/components/ColorPicker/HueSlider.js +1 -1
- package/dist/components/ColorPicker/SaturationValueArea.js +1 -1
- package/dist/components/CompositionSelector.js +1 -0
- package/dist/components/CompositionSelectorItem.js +7 -17
- package/dist/components/CurrentAsset.js +5 -4
- package/dist/components/EditorGuides/Guide.js +1 -1
- package/dist/components/ElementInstallConfirmation.js +100 -61
- package/dist/components/FilePreview.js +4 -0
- package/dist/components/FixComputedValueModal.js +64 -96
- package/dist/components/FullscreenToggle.js +1 -1
- package/dist/components/GenerateWithAgentModal.d.ts +9 -0
- package/dist/components/GenerateWithAgentModal.js +39 -0
- package/dist/components/GlobalKeybindings.js +14 -0
- package/dist/components/InlineEditableTitle.js +2 -0
- package/dist/components/InspectorLocationCopy.js +1 -1
- package/dist/components/InspectorOpenInEditor.d.ts +1 -0
- package/dist/components/InspectorOpenInEditor.js +25 -18
- package/dist/components/InspectorPanel/CollapsibleInspectorSection.d.ts +7 -0
- package/dist/components/InspectorPanel/CollapsibleInspectorSection.js +14 -0
- package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.d.ts +1 -1
- package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +19 -8
- package/dist/components/InspectorPanel/CompositionInspector.js +30 -13
- package/dist/components/InspectorPanel/CompositionInspectorHeader.js +6 -7
- package/dist/components/InspectorPanel/CompositionMetadata.js +4 -0
- package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +6 -12
- package/dist/components/InspectorPanel/ElementLibraryButton.js +2 -0
- package/dist/components/InspectorPanel/GuideInspector.js +2 -3
- package/dist/components/InspectorPanel/KeyframeSettings.js +5 -6
- package/dist/components/InspectorPanel/MultiSequenceInspector.js +2 -1
- package/dist/components/InspectorPanel/SequenceInspectorHeader.js +4 -12
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +4 -3
- package/dist/components/InspectorPanel/common.d.ts +4 -0
- package/dist/components/InspectorPanel/common.js +14 -2
- package/dist/components/InspectorPanel/styles.d.ts +0 -3
- package/dist/components/InspectorPanel/styles.js +1 -27
- package/dist/components/InspectorPanel/use-composition-actions.d.ts +2 -0
- package/dist/components/InspectorPanel/use-composition-actions.js +15 -0
- package/dist/components/InspectorPanel/use-inspector-section-expanded.d.ts +1 -0
- package/dist/components/InspectorPanel/use-inspector-section-expanded.js +21 -0
- package/dist/components/InspectorSequenceSection.js +61 -43
- package/dist/components/InspectorSourceLocation.js +1 -0
- package/dist/components/KeyboardShortcutsSettings.js +12 -4
- package/dist/components/LoopToggle.js +2 -1
- package/dist/components/LutPreview.d.ts +4 -0
- package/dist/components/LutPreview.js +192 -0
- package/dist/components/Menu/MenuItem.js +1 -2
- package/dist/components/MenuBuildIndicator.js +1 -1
- package/dist/components/MenuCompositionName.js +4 -9
- package/dist/components/Modals.js +4 -6
- package/dist/components/ModelsSettings.js +15 -4
- package/dist/components/MuteToggle.js +2 -1
- package/dist/components/NewComposition/CodemodFooter.js +1 -0
- package/dist/components/NewComposition/DeleteComposition.js +42 -6
- package/dist/components/NewComposition/DeleteFolder.js +1 -0
- package/dist/components/NewComposition/DuplicateComposition.js +5 -0
- package/dist/components/NewComposition/InputDragger.js +2 -2
- package/dist/components/NewComposition/NewFolder.js +29 -2
- package/dist/components/NewComposition/RenameFolder.js +1 -0
- package/dist/components/NewComposition/duplicate-composition-api.d.ts +3 -2
- package/dist/components/NewComposition/duplicate-composition-api.js +9 -2
- package/dist/components/OutlineToggle.js +2 -1
- package/dist/components/PlayPause.js +1 -1
- package/dist/components/Preview.js +0 -3
- package/dist/components/PreviewToolbar.js +3 -6
- package/dist/components/PreviewToolbarOverflowButton.js +2 -1
- package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -1
- package/dist/components/QuickSwitcher/QuickSwitcherResult.js +4 -9
- package/dist/components/RenderButton.js +40 -4
- package/dist/components/RenderModal/SchemaEditor/scroll-to-default-props-path.d.ts +1 -0
- package/dist/components/RenderModal/SchemaEditor/scroll-to-default-props-path.js +2 -1
- package/dist/components/RenderModal/WebRenderModal.js +10 -2
- package/dist/components/RenderModal/WebRenderModalBasic.js +1 -1
- package/dist/components/RenderModal/render-modals.js +3 -0
- package/dist/components/RenderQueue/RenderQueueCopyToClipboard.js +1 -1
- package/dist/components/RenderQueue/RenderQueueItemCancelButton.js +1 -1
- package/dist/components/RenderQueue/actions.d.ts +2 -1
- package/dist/components/RenderQueue/actions.js +2 -1
- package/dist/components/RendersTab.js +2 -0
- package/dist/components/RulersAndGuidesToggle.js +2 -1
- package/dist/components/SegmentedButton.d.ts +1 -0
- package/dist/components/SegmentedButton.js +9 -3
- package/dist/components/SelectedOutlineElement.js +22 -6
- package/dist/components/SelectedOutlinePolygon.js +4 -2
- package/dist/components/SettingsButton.js +11 -2
- package/dist/components/SettingsContext.d.ts +8 -0
- package/dist/components/SettingsContext.js +57 -2
- package/dist/components/SettingsModal.d.ts +1 -2
- package/dist/components/SettingsModal.js +27 -6
- package/dist/components/SettingsModalFooter.js +17 -3
- package/dist/components/SidebarCollapserControls.js +1 -1
- package/dist/components/SkillsSettings.d.ts +5 -0
- package/dist/components/SkillsSettings.js +49 -15
- package/dist/components/SnappingToggle.js +2 -1
- package/dist/components/Splitter/SplitterHandle.js +1 -2
- package/dist/components/Tabs/vertical.d.ts +1 -1
- package/dist/components/Tabs/vertical.js +16 -2
- package/dist/components/Timeline/EasingEditorModal.js +2 -2
- package/dist/components/Timeline/Timeline.js +10 -11
- package/dist/components/Timeline/TimelineAssetField.js +178 -9
- package/dist/components/Timeline/TimelineDragHandler.js +1 -2
- package/dist/components/Timeline/TimelineEffectItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineEffectItem.js +2 -2
- package/dist/components/Timeline/TimelineEffectPropItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineEffectPropItem.js +2 -2
- package/dist/components/Timeline/TimelineExpandedRow.js +2 -2
- package/dist/components/Timeline/TimelineHeightContainer.js +11 -1
- package/dist/components/Timeline/TimelineInOutDragHandler.js +1 -2
- package/dist/components/Timeline/TimelineKeyframeControls.js +15 -1
- package/dist/components/Timeline/TimelineLayerChildren.d.ts +3 -3
- package/dist/components/Timeline/TimelineLayerChildren.js +11 -9
- package/dist/components/Timeline/TimelineLayerEye.d.ts +1 -1
- package/dist/components/Timeline/TimelineLayerEye.js +6 -3
- package/dist/components/Timeline/TimelineList.js +9 -3
- package/dist/components/Timeline/TimelineSchemaField.js +10 -7
- package/dist/components/Timeline/TimelineSelection.d.ts +17 -4
- package/dist/components/Timeline/TimelineSelection.js +121 -52
- package/dist/components/Timeline/TimelineSequence.js +8 -8
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +2 -0
- package/dist/components/Timeline/TimelineSequenceItem.js +29 -23
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +3 -12
- package/dist/components/Timeline/TimelineTranslateField.js +25 -12
- package/dist/components/Timeline/TimelineVirtualization.d.ts +3 -3
- package/dist/components/Timeline/TimelineZoomControls.js +1 -1
- package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +3 -1
- package/dist/components/Timeline/get-sequence-context-menu-items.js +152 -51
- package/dist/components/Timeline/normalize-font-weight-for-keyframe.d.ts +1 -0
- package/dist/components/Timeline/normalize-font-weight-for-keyframe.js +19 -0
- package/dist/components/Timeline/timeline-display-groups.d.ts +9 -0
- package/dist/components/Timeline/timeline-display-groups.js +66 -0
- package/dist/components/Timeline/timeline-field-display-utils.js +4 -2
- package/dist/components/Timeline/timeline-translate-utils.d.ts +17 -0
- package/dist/components/Timeline/timeline-translate-utils.js +53 -12
- package/dist/components/Timeline/use-open-sequence-in-apps.d.ts +2 -0
- package/dist/components/Timeline/use-open-sequence-in-apps.js +17 -0
- package/dist/components/Timeline/use-timeline-asset-drop.js +20 -6
- package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +2 -1
- package/dist/components/Timeline/use-timeline-expanded-tree.js +1 -2
- package/dist/components/Timeline/use-timeline-keyframe-drag.js +4 -4
- package/dist/components/TimelineCombobox.js +1 -0
- package/dist/components/UndoRedoButtons.js +11 -0
- package/dist/components/UpdateStatusContext.d.ts +2 -2
- package/dist/components/UpdateStatusContext.js +6 -7
- package/dist/components/UpdatesSettings.js +6 -6
- package/dist/components/WebMcp.js +40 -41
- package/dist/components/asset-context-menu.d.ts +32 -0
- package/dist/components/asset-context-menu.js +242 -0
- package/dist/components/composition-menu-items.d.ts +4 -6
- package/dist/components/composition-menu-items.js +212 -42
- package/dist/components/folder-menu-items.js +44 -0
- package/dist/components/get-open-in-menu-items.d.ts +6 -5
- package/dist/components/get-open-in-menu-items.js +16 -10
- package/dist/components/import-assets.d.ts +24 -1
- package/dist/components/import-assets.js +3 -1
- package/dist/components/keyboard-shortcuts.d.ts +4 -4
- package/dist/components/keyboard-shortcuts.js +5 -0
- package/dist/components/selected-outline-order.js +18 -12
- package/dist/components/use-open-in-menu-apps.d.ts +14 -0
- package/dist/components/use-open-in-menu-apps.js +33 -0
- package/dist/error-overlay/remotion-overlay/ErrorDisplay.js +2 -2
- package/dist/error-overlay/remotion-overlay/OpenInEditor.d.ts +1 -0
- package/dist/error-overlay/remotion-overlay/OpenInEditor.js +3 -3
- package/dist/error-overlay/remotion-overlay/StackFrame.d.ts +5 -1
- package/dist/error-overlay/remotion-overlay/StackFrame.js +26 -19
- package/dist/esm/{LazyModels-hc33szyn.mjs → LazyModels-mtggyjye.mjs} +3 -3
- package/dist/esm/{LazyModels-sg40rjw6.mjs → LazyModels-nk7py0zt.mjs} +3 -3
- package/dist/esm/{TranscriptionModal-3ctnxpt6.mjs → TranscriptionModal-ymnx1c7m.mjs} +6 -6
- package/dist/esm/{VideoMattingModal-b0r7e60n.mjs → VideoMattingModal-05vpczks.mjs} +6 -6
- package/dist/esm/{index-er3mh6em.mjs → index-0gewwxse.mjs} +7031 -5834
- package/dist/esm/{index-q5xv20xx.mjs → index-4dsz9035.mjs} +8 -8
- package/dist/esm/{index-wbmp5srk.mjs → index-5bfxbpca.mjs} +1 -1
- package/dist/esm/{index-e3zwf3e7.mjs → index-5gd8k9yv.mjs} +1 -1
- package/dist/esm/{index-c37kme2v.mjs → index-bs39wngg.mjs} +4929 -3801
- package/dist/esm/{index-yfrysr5f.mjs → index-cdy8v54v.mjs} +17 -3
- package/dist/esm/{index-9qtvmwtx.mjs → index-eb5txqp6.mjs} +12 -9
- package/dist/esm/{index-q2epbw93.mjs → index-f97r9e2g.mjs} +4 -21
- package/dist/esm/{index-2j3d1g81.mjs → index-g7k2dvar.mjs} +1 -1
- package/dist/esm/{index-1b9skrrd.mjs → index-x40wwfmt.mjs} +3 -3
- package/dist/esm/index.mjs +12 -6
- package/dist/esm/internals.mjs +7 -7
- package/dist/esm/previewEntry.mjs +7 -7
- package/dist/helpers/client-id.d.ts +1 -0
- package/dist/helpers/client-id.js +8 -4
- package/dist/helpers/cube-lut.d.ts +12 -0
- package/dist/helpers/cube-lut.js +160 -0
- package/dist/helpers/get-git-menu-item.d.ts +4 -0
- package/dist/helpers/get-git-menu-item.js +8 -1
- package/dist/helpers/get-preview-file-type.d.ts +1 -1
- package/dist/helpers/get-preview-file-type.js +3 -0
- package/dist/helpers/get-sequence-double-click-action.d.ts +3 -3
- package/dist/helpers/get-sequence-double-click-action.js +2 -2
- package/dist/helpers/open-in-editor.d.ts +5 -2
- package/dist/helpers/open-in-editor.js +12 -4
- package/dist/helpers/pointer-session.d.ts +1 -0
- package/dist/helpers/pointer-session.js +10 -1
- package/dist/helpers/settings-tab-availability.d.ts +14 -0
- package/dist/helpers/settings-tab-availability.js +35 -0
- package/dist/helpers/studio-runtime-config.d.ts +1 -1
- package/dist/helpers/use-create-composition.js +5 -0
- package/dist/helpers/use-keybinding.d.ts +1 -1
- package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -2
- package/dist/helpers/use-media-metadata.js +5 -1
- package/dist/helpers/use-menu-structure.js +21 -13
- package/dist/helpers/use-rename-composition.js +6 -1
- package/dist/icons/lut.d.ts +4 -0
- package/dist/icons/lut.js +6 -0
- package/dist/icons/sparkles.d.ts +4 -0
- package/dist/icons/sparkles.js +6 -0
- package/dist/state/modals.d.ts +25 -3
- package/dist/state/z-index.js +1 -3
- package/package.json +19 -19
- package/dist/error-overlay/remotion-overlay/CodeFrame.js +0 -62
|
@@ -91,6 +91,7 @@ export declare const extendTimelineMarqueeSelection: ({ currentSelection, marque
|
|
|
91
91
|
}) => readonly CanvasSelectionItem[];
|
|
92
92
|
type TimelineSelectionContextValue = {
|
|
93
93
|
readonly canSelect: boolean;
|
|
94
|
+
readonly inspectorRevealRequest: TimelineSelectionRevealRequest | null;
|
|
94
95
|
readonly revealRequest: TimelineSelectionRevealRequest | null;
|
|
95
96
|
readonly selectedItems: readonly TimelineSelection[];
|
|
96
97
|
readonly isSelected: (item: TimelineSelection) => boolean;
|
|
@@ -111,6 +112,7 @@ export declare const TimelineSelectionOrderProvider: React.FC<{
|
|
|
111
112
|
}>;
|
|
112
113
|
type TimelineSelectionOptions = {
|
|
113
114
|
readonly reveal?: boolean;
|
|
115
|
+
readonly revealInInspector?: boolean;
|
|
114
116
|
};
|
|
115
117
|
type TimelineSelectionRevealRequest = {
|
|
116
118
|
readonly item: TimelineSelection;
|
|
@@ -152,15 +154,21 @@ export declare const useTimelineMarqueeSelection: () => {
|
|
|
152
154
|
onPointerDownCapture: (event: React.PointerEvent<HTMLDivElement>) => void;
|
|
153
155
|
};
|
|
154
156
|
export declare const useTimelineMarqueeSelectableItem: (item: CanvasSelectionItem | null, ref: React.RefObject<Element | null>) => void;
|
|
155
|
-
export declare const useTimelineRowSelection: (nodePathInfo: SequenceNodePathInfo | null) => {
|
|
157
|
+
export declare const useTimelineRowSelection: (nodePathInfo: SequenceNodePathInfo | null, revealInInspector?: boolean) => {
|
|
158
|
+
clearSelection: () => void;
|
|
156
159
|
onSelect: (interaction?: CanvasSelectionInteraction | undefined) => void;
|
|
157
160
|
selectable: boolean;
|
|
161
|
+
selectedItems: readonly CanvasSelectionItem[];
|
|
162
|
+
selectItem: (item: CanvasSelectionItem, interaction?: CanvasSelectionInteraction | undefined, allSelectableItems?: readonly CanvasSelectionItem[] | undefined, options?: TimelineSelectionOptions | undefined) => void;
|
|
158
163
|
selectionItem: CanvasSelectionItem | null;
|
|
159
164
|
selected: boolean;
|
|
160
165
|
};
|
|
161
166
|
export declare const useTimelineKeyframeSelection: (nodePathInfo: SequenceNodePathInfo, frame: number) => {
|
|
167
|
+
clearSelection: () => void;
|
|
162
168
|
onSelect: (interaction?: CanvasSelectionInteraction | undefined) => void;
|
|
163
169
|
selectable: boolean;
|
|
170
|
+
selectedItems: readonly CanvasSelectionItem[];
|
|
171
|
+
selectItem: (item: CanvasSelectionItem, interaction?: CanvasSelectionInteraction | undefined, allSelectableItems?: readonly CanvasSelectionItem[] | undefined, options?: TimelineSelectionOptions | undefined) => void;
|
|
164
172
|
selectionItem: CanvasSelectionItem;
|
|
165
173
|
selected: boolean;
|
|
166
174
|
};
|
|
@@ -170,9 +178,11 @@ export declare const useTimelineEasingSelection: ({ nodePathInfo, fromFrame, toF
|
|
|
170
178
|
readonly toFrame: number;
|
|
171
179
|
readonly segmentIndex: number;
|
|
172
180
|
}) => {
|
|
181
|
+
clearSelection: () => void;
|
|
173
182
|
onSelect: (interaction?: CanvasSelectionInteraction | undefined) => void;
|
|
174
183
|
selectable: boolean;
|
|
175
|
-
|
|
184
|
+
selectedItems: readonly CanvasSelectionItem[];
|
|
185
|
+
selectItem: (item: CanvasSelectionItem, interaction?: CanvasSelectionInteraction | undefined, allSelectableItems?: readonly CanvasSelectionItem[] | undefined, options?: TimelineSelectionOptions | undefined) => void;
|
|
176
186
|
selectionItem: {
|
|
177
187
|
readonly type: "easing";
|
|
178
188
|
readonly nodePathInfo: SequenceNodePathInfo;
|
|
@@ -180,13 +190,16 @@ export declare const useTimelineEasingSelection: ({ nodePathInfo, fromFrame, toF
|
|
|
180
190
|
readonly toFrame: number;
|
|
181
191
|
readonly segmentIndex: number;
|
|
182
192
|
};
|
|
193
|
+
selected: boolean;
|
|
183
194
|
};
|
|
184
195
|
export declare const useTimelineGuideSelection: (guideId: string) => {
|
|
185
196
|
clearSelection: () => void;
|
|
186
|
-
onSelect: () => void;
|
|
197
|
+
onSelect: (interaction?: CanvasSelectionInteraction | undefined) => void;
|
|
187
198
|
selectable: boolean;
|
|
188
|
-
|
|
199
|
+
selectedItems: readonly CanvasSelectionItem[];
|
|
200
|
+
selectItem: (item: CanvasSelectionItem, interaction?: CanvasSelectionInteraction | undefined, allSelectableItems?: readonly CanvasSelectionItem[] | undefined, options?: TimelineSelectionOptions | undefined) => void;
|
|
189
201
|
selectionItem: CanvasSelectionItem;
|
|
202
|
+
selected: boolean;
|
|
190
203
|
};
|
|
191
204
|
export declare const useTimelineRowContainsSelection: (nodePathInfo: SequenceNodePathInfo | null) => boolean;
|
|
192
205
|
export declare const useTimelineRowHighlightBackground: (nodePathInfo: SequenceNodePathInfo | null, { hovered, selectedBackground, }: {
|
|
@@ -14,6 +14,7 @@ const pointer_session_1 = require("../../helpers/pointer-session");
|
|
|
14
14
|
const timeline_layout_1 = require("../../helpers/timeline-layout");
|
|
15
15
|
const timeline_node_path_key_1 = require("../../helpers/timeline-node-path-key");
|
|
16
16
|
const use_keybinding_1 = require("../../helpers/use-keybinding");
|
|
17
|
+
const use_sync_external_store_1 = require("../../helpers/use-sync-external-store");
|
|
17
18
|
const z_index_1 = require("../../state/z-index");
|
|
18
19
|
const ExpandedTracksProvider_1 = require("../ExpandedTracksProvider");
|
|
19
20
|
const options_sidebar_tabs_1 = require("../options-sidebar-tabs");
|
|
@@ -209,6 +210,7 @@ const extendTimelineMarqueeSelection = ({ currentSelection, marqueeSelection, })
|
|
|
209
210
|
exports.extendTimelineMarqueeSelection = extendTimelineMarqueeSelection;
|
|
210
211
|
const defaultTimelineSelectionContextValue = {
|
|
211
212
|
canSelect: false,
|
|
213
|
+
inspectorRevealRequest: null,
|
|
212
214
|
revealRequest: null,
|
|
213
215
|
selectedItems: [],
|
|
214
216
|
isSelected: () => false,
|
|
@@ -224,6 +226,7 @@ const defaultTimelineSelectionContextValue = {
|
|
|
224
226
|
clearSelection: () => undefined,
|
|
225
227
|
};
|
|
226
228
|
const TimelineSelectionContext = (0, react_1.createContext)(defaultTimelineSelectionContextValue);
|
|
229
|
+
const TimelineRowSelectionContext = (0, react_1.createContext)(null);
|
|
227
230
|
const EMPTY_SELECTABLE_TIMELINE_ITEMS = [];
|
|
228
231
|
const SelectableTimelineItemsContext = (0, react_1.createContext)({ current: EMPTY_SELECTABLE_TIMELINE_ITEMS });
|
|
229
232
|
const TimelineSelectionOrderProvider = ({ children, items }) => {
|
|
@@ -542,9 +545,12 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
542
545
|
const marqueeSelectableItems = (0, react_1.useRef)(new Map());
|
|
543
546
|
const marqueeRegistrationCounter = (0, react_1.useRef)(0);
|
|
544
547
|
const [revealRequest, setRevealRequest] = (0, react_1.useState)(null);
|
|
548
|
+
const [inspectorRevealRequest, setInspectorRevealRequest] = (0, react_1.useState)(null);
|
|
549
|
+
const inspectorRevealTokenCounter = (0, react_1.useRef)(0);
|
|
545
550
|
(0, react_1.useEffect)(() => {
|
|
546
551
|
if (!canSelect) {
|
|
547
552
|
selectionScope.current = null;
|
|
553
|
+
setInspectorRevealRequest(null);
|
|
548
554
|
setRevealRequest(null);
|
|
549
555
|
selectionController.clear();
|
|
550
556
|
}
|
|
@@ -557,6 +563,9 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
557
563
|
? selectionState
|
|
558
564
|
: exports.EMPTY_TIMELINE_SELECTION_STATE;
|
|
559
565
|
const availableSelectedItems = availableSelectionState.selectedItems;
|
|
566
|
+
const getAvailableSelectionState = (0, react_1.useCallback)(() => selectionScope.current === timelineSelectionScope
|
|
567
|
+
? selectionController.getSnapshot()
|
|
568
|
+
: exports.EMPTY_TIMELINE_SELECTION_STATE, [selectionController, timelineSelectionScope]);
|
|
560
569
|
const requestRevealSelectionItem = (0, react_1.useCallback)((item) => {
|
|
561
570
|
setRevealRequest((previousRequest) => {
|
|
562
571
|
var _a;
|
|
@@ -566,6 +575,13 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
566
575
|
});
|
|
567
576
|
});
|
|
568
577
|
}, []);
|
|
578
|
+
const requestRevealSelectionItemInInspector = (0, react_1.useCallback)((item) => {
|
|
579
|
+
inspectorRevealTokenCounter.current += 1;
|
|
580
|
+
setInspectorRevealRequest({
|
|
581
|
+
item,
|
|
582
|
+
token: inspectorRevealTokenCounter.current,
|
|
583
|
+
});
|
|
584
|
+
}, []);
|
|
569
585
|
const expandParentsForSelectionItems = (0, react_1.useCallback)((items) => {
|
|
570
586
|
for (const item of items) {
|
|
571
587
|
if (item.type === 'guide') {
|
|
@@ -603,6 +619,12 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
603
619
|
if (options.reveal) {
|
|
604
620
|
requestRevealSelectionItem(item);
|
|
605
621
|
}
|
|
622
|
+
if (options.revealInInspector) {
|
|
623
|
+
requestRevealSelectionItemInInspector(item);
|
|
624
|
+
}
|
|
625
|
+
else {
|
|
626
|
+
setInspectorRevealRequest(null);
|
|
627
|
+
}
|
|
606
628
|
if (selectionScope.current !== timelineSelectionScope) {
|
|
607
629
|
selectionController.clear();
|
|
608
630
|
}
|
|
@@ -611,6 +633,7 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
611
633
|
}, [
|
|
612
634
|
canSelectItem,
|
|
613
635
|
expandParentsForSelectionItem,
|
|
636
|
+
requestRevealSelectionItemInInspector,
|
|
614
637
|
requestRevealSelectionItem,
|
|
615
638
|
selectionController,
|
|
616
639
|
timelineSelectionScope,
|
|
@@ -627,10 +650,17 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
627
650
|
if (options.reveal && items.length === 1) {
|
|
628
651
|
requestRevealSelectionItem(items[0]);
|
|
629
652
|
}
|
|
653
|
+
if (options.revealInInspector && items.length === 1) {
|
|
654
|
+
requestRevealSelectionItemInInspector(items[0]);
|
|
655
|
+
}
|
|
656
|
+
else {
|
|
657
|
+
setInspectorRevealRequest(null);
|
|
658
|
+
}
|
|
630
659
|
selectionController.setSelectedItems(items);
|
|
631
660
|
}, [
|
|
632
661
|
canSelectItem,
|
|
633
662
|
expandParentsForSelectionItems,
|
|
663
|
+
requestRevealSelectionItemInInspector,
|
|
634
664
|
requestRevealSelectionItem,
|
|
635
665
|
selectionController,
|
|
636
666
|
timelineSelectionScope,
|
|
@@ -679,6 +709,7 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
679
709
|
}, [canSelectItem]);
|
|
680
710
|
const clearSelection = (0, react_1.useCallback)(() => {
|
|
681
711
|
selectionScope.current = null;
|
|
712
|
+
setInspectorRevealRequest(null);
|
|
682
713
|
selectionController.clear();
|
|
683
714
|
}, [selectionController]);
|
|
684
715
|
const containsSelection = (0, react_1.useCallback)((nodePathInfo) => {
|
|
@@ -737,6 +768,7 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
737
768
|
}, [selectionController]);
|
|
738
769
|
const value = (0, react_1.useMemo)(() => ({
|
|
739
770
|
canSelect,
|
|
771
|
+
inspectorRevealRequest,
|
|
740
772
|
revealRequest,
|
|
741
773
|
selectedItems: availableSelectedItems,
|
|
742
774
|
isSelected,
|
|
@@ -749,6 +781,7 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
749
781
|
clearSelection,
|
|
750
782
|
}), [
|
|
751
783
|
canSelect,
|
|
784
|
+
inspectorRevealRequest,
|
|
752
785
|
revealRequest,
|
|
753
786
|
availableSelectedItems,
|
|
754
787
|
isSelected,
|
|
@@ -762,9 +795,24 @@ const TimelineSelectionProvider = ({ children }) => {
|
|
|
762
795
|
]);
|
|
763
796
|
const currentSelection = (0, react_1.useRef)(value);
|
|
764
797
|
currentSelection.current = value;
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
798
|
+
const rowSelectionContextValue = (0, react_1.useMemo)(() => ({
|
|
799
|
+
canSelect,
|
|
800
|
+
clearSelection,
|
|
801
|
+
getSnapshot: getAvailableSelectionState,
|
|
802
|
+
registerMarqueeSelectableItem,
|
|
803
|
+
selectItem,
|
|
804
|
+
subscribe: selectionController.subscribe,
|
|
805
|
+
}), [
|
|
806
|
+
canSelect,
|
|
807
|
+
clearSelection,
|
|
808
|
+
getAvailableSelectionState,
|
|
809
|
+
registerMarqueeSelectableItem,
|
|
810
|
+
selectItem,
|
|
811
|
+
selectionController.subscribe,
|
|
812
|
+
]);
|
|
813
|
+
return (jsx_runtime_1.jsx(CurrentTimelineSelectionContext.Provider, { value: currentSelection, children: jsx_runtime_1.jsx(TimelineRowSelectionContext.Provider, { value: rowSelectionContextValue, children: jsx_runtime_1.jsxs(TimelineSelectionContext.Provider, { value: value, children: [children, jsx_runtime_1.jsx(TimelineEscapeKeybindings, {}), (0, interactivity_enabled_1.isStudioInteractivityEnabled)() ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
814
|
+
jsx_runtime_1.jsx(TimelineClipboardKeybindings_1.TimelineClipboardKeybindings, {}), jsx_runtime_1.jsx(TimelineDeleteKeybindings_1.TimelineDeleteKeybindings, {})
|
|
815
|
+
] })) : null] }) }) }));
|
|
768
816
|
};
|
|
769
817
|
exports.TimelineSelectionProvider = TimelineSelectionProvider;
|
|
770
818
|
const useTimelineSelection = () => {
|
|
@@ -929,8 +977,7 @@ const useTimelineMarqueeSelection = () => {
|
|
|
929
977
|
captureTarget: target,
|
|
930
978
|
onMove: onPointerMove,
|
|
931
979
|
onEnd: (reason, endEvent) => {
|
|
932
|
-
if ((
|
|
933
|
-
endEvent) {
|
|
980
|
+
if ((0, pointer_session_1.isPointerSessionRelease)(reason, endEvent)) {
|
|
934
981
|
updateSelection(endEvent.clientX, endEvent.clientY);
|
|
935
982
|
}
|
|
936
983
|
cleanup();
|
|
@@ -947,7 +994,11 @@ const useTimelineMarqueeSelection = () => {
|
|
|
947
994
|
};
|
|
948
995
|
exports.useTimelineMarqueeSelection = useTimelineMarqueeSelection;
|
|
949
996
|
const useTimelineMarqueeSelectableItem = (item, ref) => {
|
|
950
|
-
const
|
|
997
|
+
const selectionContext = (0, react_1.useContext)(TimelineRowSelectionContext);
|
|
998
|
+
if (selectionContext === null) {
|
|
999
|
+
throw new Error('useTimelineMarqueeSelectableItem must be used inside TimelineSelectionProvider');
|
|
1000
|
+
}
|
|
1001
|
+
const { registerMarqueeSelectableItem } = selectionContext;
|
|
951
1002
|
(0, react_1.useEffect)(() => {
|
|
952
1003
|
if (item === null) {
|
|
953
1004
|
return;
|
|
@@ -960,48 +1011,69 @@ const useTimelineMarqueeSelectableItem = (item, ref) => {
|
|
|
960
1011
|
}, [item, ref, registerMarqueeSelectableItem]);
|
|
961
1012
|
};
|
|
962
1013
|
exports.useTimelineMarqueeSelectableItem = useTimelineMarqueeSelectableItem;
|
|
963
|
-
const useTimelineRowSelection = (nodePathInfo) => {
|
|
964
|
-
const { canSelect, isSelected, selectItem } = (0, exports.useTimelineSelection)();
|
|
965
|
-
const selectableTimelineItemsRef = (0, react_1.useContext)(SelectableTimelineItemsContext);
|
|
1014
|
+
const useTimelineRowSelection = (nodePathInfo, revealInInspector = false) => {
|
|
966
1015
|
const selectionItem = (0, react_1.useMemo)(() => (0, exports.getTimelineSelectionFromNodePathInfo)(nodePathInfo), [nodePathInfo]);
|
|
967
|
-
|
|
1016
|
+
return useTimelineSelectionItem({
|
|
1017
|
+
revealInInspector,
|
|
1018
|
+
selectionItem,
|
|
1019
|
+
useSelectionOrder: true,
|
|
1020
|
+
});
|
|
1021
|
+
};
|
|
1022
|
+
exports.useTimelineRowSelection = useTimelineRowSelection;
|
|
1023
|
+
const useTimelineSelectionItem = ({ revealInInspector, selectionItem, useSelectionOrder, }) => {
|
|
1024
|
+
var _a;
|
|
1025
|
+
const selectionContext = (0, react_1.useContext)(TimelineRowSelectionContext);
|
|
1026
|
+
if (selectionContext === null) {
|
|
1027
|
+
throw new Error('useTimelineSelectionItem must be used inside TimelineSelectionProvider');
|
|
1028
|
+
}
|
|
1029
|
+
const selectableTimelineItemsRef = (0, react_1.useContext)(SelectableTimelineItemsContext);
|
|
1030
|
+
const selectionItemKey = (0, react_1.useMemo)(() => selectionItem === null ? null : (0, exports.getTimelineSelectionKey)(selectionItem), [selectionItem]);
|
|
1031
|
+
const getSelectedState = (0, react_1.useCallback)(() => {
|
|
1032
|
+
if (selectionItemKey === null) {
|
|
1033
|
+
return null;
|
|
1034
|
+
}
|
|
1035
|
+
const snapshot = selectionContext.getSnapshot();
|
|
1036
|
+
return snapshot.selectedItems.some((item) => (0, exports.getTimelineSelectionKey)(item) === selectionItemKey)
|
|
1037
|
+
? snapshot
|
|
1038
|
+
: null;
|
|
1039
|
+
}, [selectionContext, selectionItemKey]);
|
|
1040
|
+
const selectedState = (0, use_sync_external_store_1.useSyncExternalStore)(selectionContext.subscribe, getSelectedState, getSelectedState);
|
|
968
1041
|
const onSelect = (0, react_1.useCallback)((interaction) => {
|
|
969
1042
|
if (selectionItem === null) {
|
|
970
1043
|
return;
|
|
971
1044
|
}
|
|
972
|
-
selectItem(selectionItem, interaction, selectableTimelineItemsRef.current);
|
|
973
|
-
}, [
|
|
1045
|
+
selectionContext.selectItem(selectionItem, interaction, useSelectionOrder ? selectableTimelineItemsRef.current : undefined, { revealInInspector });
|
|
1046
|
+
}, [
|
|
1047
|
+
revealInInspector,
|
|
1048
|
+
selectableTimelineItemsRef,
|
|
1049
|
+
selectionContext,
|
|
1050
|
+
selectionItem,
|
|
1051
|
+
useSelectionOrder,
|
|
1052
|
+
]);
|
|
974
1053
|
return {
|
|
1054
|
+
clearSelection: selectionContext.clearSelection,
|
|
975
1055
|
onSelect,
|
|
976
|
-
selectable: canSelect && selectionItem !== null,
|
|
1056
|
+
selectable: selectionContext.canSelect && selectionItem !== null,
|
|
1057
|
+
selectedItems: (_a = selectedState === null || selectedState === void 0 ? void 0 : selectedState.selectedItems) !== null && _a !== void 0 ? _a : exports.EMPTY_TIMELINE_SELECTION_STATE.selectedItems,
|
|
1058
|
+
selectItem: selectionContext.selectItem,
|
|
977
1059
|
selectionItem,
|
|
978
|
-
selected,
|
|
1060
|
+
selected: selectedState !== null,
|
|
979
1061
|
};
|
|
980
1062
|
};
|
|
981
|
-
exports.useTimelineRowSelection = useTimelineRowSelection;
|
|
982
1063
|
const useTimelineKeyframeSelection = (nodePathInfo, frame) => {
|
|
983
|
-
const { canSelect, isSelected, selectItem } = (0, exports.useTimelineSelection)();
|
|
984
|
-
const selectableTimelineItemsRef = (0, react_1.useContext)(SelectableTimelineItemsContext);
|
|
985
1064
|
const selectionItem = (0, react_1.useMemo)(() => ({
|
|
986
1065
|
type: 'keyframe',
|
|
987
1066
|
nodePathInfo,
|
|
988
1067
|
frame,
|
|
989
1068
|
}), [nodePathInfo, frame]);
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
selectItem(selectionItem, interaction, selectableTimelineItemsRef.current);
|
|
993
|
-
}, [selectItem, selectableTimelineItemsRef, selectionItem]);
|
|
994
|
-
return {
|
|
995
|
-
onSelect,
|
|
996
|
-
selectable: canSelect,
|
|
1069
|
+
return useTimelineSelectionItem({
|
|
1070
|
+
revealInInspector: false,
|
|
997
1071
|
selectionItem,
|
|
998
|
-
|
|
999
|
-
};
|
|
1072
|
+
useSelectionOrder: true,
|
|
1073
|
+
});
|
|
1000
1074
|
};
|
|
1001
1075
|
exports.useTimelineKeyframeSelection = useTimelineKeyframeSelection;
|
|
1002
1076
|
const useTimelineEasingSelection = ({ nodePathInfo, fromFrame, toFrame, segmentIndex, }) => {
|
|
1003
|
-
const { canSelect, isSelected, selectItem } = (0, exports.useTimelineSelection)();
|
|
1004
|
-
const selectableTimelineItemsRef = (0, react_1.useContext)(SelectableTimelineItemsContext);
|
|
1005
1077
|
const selectionItem = (0, react_1.useMemo)(() => ({
|
|
1006
1078
|
type: 'easing',
|
|
1007
1079
|
nodePathInfo,
|
|
@@ -1009,43 +1081,40 @@ const useTimelineEasingSelection = ({ nodePathInfo, fromFrame, toFrame, segmentI
|
|
|
1009
1081
|
toFrame,
|
|
1010
1082
|
segmentIndex,
|
|
1011
1083
|
}), [nodePathInfo, fromFrame, segmentIndex, toFrame]);
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
selectItem(selectionItem, interaction, selectableTimelineItemsRef.current);
|
|
1015
|
-
}, [selectItem, selectableTimelineItemsRef, selectionItem]);
|
|
1016
|
-
return {
|
|
1017
|
-
onSelect,
|
|
1018
|
-
selectable: canSelect,
|
|
1019
|
-
selected,
|
|
1084
|
+
return useTimelineSelectionItem({
|
|
1085
|
+
revealInInspector: false,
|
|
1020
1086
|
selectionItem,
|
|
1021
|
-
|
|
1087
|
+
useSelectionOrder: true,
|
|
1088
|
+
});
|
|
1022
1089
|
};
|
|
1023
1090
|
exports.useTimelineEasingSelection = useTimelineEasingSelection;
|
|
1024
1091
|
const useTimelineGuideSelection = (guideId) => {
|
|
1025
|
-
const { canSelect, clearSelection, isSelected, selectItem } = (0, exports.useTimelineSelection)();
|
|
1026
1092
|
const selectionItem = (0, react_1.useMemo)(() => ({
|
|
1027
1093
|
type: 'guide',
|
|
1028
1094
|
guideId,
|
|
1029
1095
|
}), [guideId]);
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
selectItem(selectionItem);
|
|
1033
|
-
}, [selectItem, selectionItem]);
|
|
1034
|
-
return {
|
|
1035
|
-
clearSelection,
|
|
1036
|
-
onSelect,
|
|
1037
|
-
selectable: canSelect,
|
|
1038
|
-
selected,
|
|
1096
|
+
return useTimelineSelectionItem({
|
|
1097
|
+
revealInInspector: false,
|
|
1039
1098
|
selectionItem,
|
|
1040
|
-
|
|
1099
|
+
useSelectionOrder: false,
|
|
1100
|
+
});
|
|
1041
1101
|
};
|
|
1042
1102
|
exports.useTimelineGuideSelection = useTimelineGuideSelection;
|
|
1043
1103
|
const useTimelineRowContainsSelection = (nodePathInfo) => {
|
|
1044
|
-
const
|
|
1045
|
-
if (
|
|
1046
|
-
|
|
1104
|
+
const selectionContext = (0, react_1.useContext)(TimelineRowSelectionContext);
|
|
1105
|
+
if (selectionContext === null) {
|
|
1106
|
+
throw new Error('useTimelineRowContainsSelection must be used inside TimelineSelectionProvider');
|
|
1047
1107
|
}
|
|
1048
|
-
|
|
1108
|
+
const getContainsSelection = (0, react_1.useCallback)(() => {
|
|
1109
|
+
if (nodePathInfo === null) {
|
|
1110
|
+
return false;
|
|
1111
|
+
}
|
|
1112
|
+
return selectionContext
|
|
1113
|
+
.getSnapshot()
|
|
1114
|
+
.selectedItems.some((selected) => selected.type !== 'guide' &&
|
|
1115
|
+
nodePathDescendsFrom(selected.nodePathInfo, nodePathInfo));
|
|
1116
|
+
}, [nodePathInfo, selectionContext]);
|
|
1117
|
+
return (0, use_sync_external_store_1.useSyncExternalStore)(selectionContext.subscribe, getContainsSelection, getContainsSelection);
|
|
1049
1118
|
};
|
|
1050
1119
|
exports.useTimelineRowContainsSelection = useTimelineRowContainsSelection;
|
|
1051
1120
|
const useTimelineRowHighlightBackground = (nodePathInfo, { hovered, selectedBackground, }) => {
|
|
@@ -263,7 +263,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
263
263
|
? Infinity
|
|
264
264
|
: naturalMediaDuration;
|
|
265
265
|
const effectiveMaxMediaDuration = s.loopDisplay ? null : maxMediaDuration;
|
|
266
|
-
const { canOpenInEditor,
|
|
266
|
+
const { canConfigureApps, canOpenInEditor, canOpenSource, codingAgentInfo, editorInfo, openInCodingAgent, openInEditor, openSource, originalLocation, } = (0, use_open_sequence_in_apps_1.useOpenSequenceInApps)(s);
|
|
267
267
|
const validatedLocation = (0, react_1.useMemo)(() => {
|
|
268
268
|
var _a;
|
|
269
269
|
if (!originalLocation ||
|
|
@@ -304,8 +304,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
304
304
|
const selectComposition = (0, InitialCompositionLoader_1.useSelectComposition)();
|
|
305
305
|
const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
|
|
306
306
|
const deleteTimelineItems = (0, use_delete_timeline_items_1.useDeleteTimelineItems)();
|
|
307
|
-
const { onSelect, selectable, selected } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
|
|
308
|
-
const { selectedItems } = (0, TimelineSelection_1.useTimelineSelection)();
|
|
307
|
+
const { onSelect, selectable, selected, selectedItems } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
|
|
309
308
|
const selectedSequenceNodePathInfos = (0, react_1.useMemo)(() => {
|
|
310
309
|
if (!selected ||
|
|
311
310
|
selectedItems.length < 2 ||
|
|
@@ -321,7 +320,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
321
320
|
}
|
|
322
321
|
const action = (0, get_sequence_double_click_action_1.getSequenceDoubleClickAction)({
|
|
323
322
|
button: e.button,
|
|
324
|
-
|
|
323
|
+
canOpenSource,
|
|
325
324
|
numberOfConnectedCompositions: connectedCompositions.length,
|
|
326
325
|
sequenceWasDragged: dragAwareDoubleClick.consumePointerGestureWasDragged(),
|
|
327
326
|
});
|
|
@@ -338,12 +337,12 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
338
337
|
}));
|
|
339
338
|
return;
|
|
340
339
|
}
|
|
341
|
-
|
|
340
|
+
openSource();
|
|
342
341
|
}, [
|
|
343
|
-
|
|
342
|
+
canOpenSource,
|
|
344
343
|
connectedCompositions,
|
|
345
344
|
dragAwareDoubleClick,
|
|
346
|
-
|
|
345
|
+
openSource,
|
|
347
346
|
s,
|
|
348
347
|
selectComposition,
|
|
349
348
|
sequenceFrameOffset,
|
|
@@ -354,7 +353,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
354
353
|
}
|
|
355
354
|
performSequenceDoubleClick(e);
|
|
356
355
|
}, [dragAwareDoubleClick, performSequenceDoubleClick]);
|
|
357
|
-
const canHandleSequenceDoubleClick = connectedCompositions.length === 1 ||
|
|
356
|
+
const canHandleSequenceDoubleClick = connectedCompositions.length === 1 || canOpenSource;
|
|
358
357
|
const canDeleteFromSource = Boolean(nodePath && (validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source));
|
|
359
358
|
const deleteDisabled = !previewInteractive || !s.controls || !canDeleteFromSource;
|
|
360
359
|
const isProgrammaticallyDuplicated = ((_h = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.numberOfSequencesWithThisNodePath) !== null && _h !== void 0 ? _h : 1) > 1;
|
|
@@ -462,6 +461,7 @@ const TimelineSequenceInner = ({ s, connectedCompositions, windowWidth, nodePath
|
|
|
462
461
|
assetLinkInfo: mediaSrc ? (0, timeline_asset_link_1.getTimelineAssetLinkInfo)(mediaSrc) : null,
|
|
463
462
|
canOpenInEditor,
|
|
464
463
|
codingAgentInfo,
|
|
464
|
+
copyImageElement: null,
|
|
465
465
|
deleteDisabled,
|
|
466
466
|
disableInteractivityDisabled,
|
|
467
467
|
duplicateDisabled,
|
|
@@ -10,4 +10,6 @@ export declare const TimelineSequenceItem: React.NamedExoticComponent<{
|
|
|
10
10
|
readonly keyframeDisplayOffset: number;
|
|
11
11
|
readonly sequenceFrameOffset: number;
|
|
12
12
|
readonly siblingIndex: number;
|
|
13
|
+
readonly numberOfHiddenDuplicates: number;
|
|
14
|
+
readonly showProvisionalVisibilityToggle: boolean;
|
|
13
15
|
}>;
|
|
@@ -106,11 +106,12 @@ const effectDropHighlight = {
|
|
|
106
106
|
outline: colors_1.BORDER_TIMELINE_DROP_BLUE,
|
|
107
107
|
outlineOffset: -1,
|
|
108
108
|
};
|
|
109
|
-
const TimelineSequenceExpandArrowInner = ({ disabled, isExpanded, nodePathInfo, sequence }) => {
|
|
109
|
+
const TimelineSequenceExpandArrowInner = ({ disabled, isExpanded, nodePathInfo, selectedItems, sequence }) => {
|
|
110
110
|
const { toggleTrack } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksSetterContext);
|
|
111
111
|
const hasExpandableContent = (0, use_timeline_expanded_tree_1.useTimelineSequenceHasExpandableContent)({
|
|
112
112
|
sequence,
|
|
113
113
|
nodePathInfo,
|
|
114
|
+
selectedItems,
|
|
114
115
|
});
|
|
115
116
|
const onToggleExpand = (0, react_1.useCallback)(() => toggleTrack(nodePathInfo), [nodePathInfo, toggleTrack]);
|
|
116
117
|
if (!hasExpandableContent) {
|
|
@@ -122,6 +123,7 @@ const areTimelineSequenceExpandArrowPropsEqual = (first, second) => {
|
|
|
122
123
|
var _a, _b, _c, _d;
|
|
123
124
|
return (first.disabled === second.disabled &&
|
|
124
125
|
first.isExpanded === second.isExpanded &&
|
|
126
|
+
first.selectedItems === second.selectedItems &&
|
|
125
127
|
((_a = first.sequence.controls) === null || _a === void 0 ? void 0 : _a.schema) === ((_b = second.sequence.controls) === null || _b === void 0 ? void 0 : _b.schema) &&
|
|
126
128
|
((_c = first.sequence.controls) === null || _c === void 0 ? void 0 : _c.runtimeValues) ===
|
|
127
129
|
((_d = second.sequence.controls) === null || _d === void 0 ? void 0 : _d.runtimeValues) &&
|
|
@@ -169,9 +171,9 @@ const getSequencePointerDropTargetAtPoint = ({ clientX, clientY, }) => {
|
|
|
169
171
|
return null;
|
|
170
172
|
};
|
|
171
173
|
const SEQUENCE_REORDER_POINTER_THRESHOLD = 3;
|
|
172
|
-
const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions, nestedDepth, sequence, nodePathInfo, keyframeDisplayOffset, sequenceFrameOffset, siblingIndex, }) => {
|
|
174
|
+
const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions, nestedDepth, sequence, nodePathInfo, keyframeDisplayOffset, sequenceFrameOffset, siblingIndex, numberOfHiddenDuplicates, showProvisionalVisibilityToggle, }) => {
|
|
173
175
|
var _a, _b;
|
|
174
|
-
var _c, _d, _e
|
|
176
|
+
var _c, _d, _e;
|
|
175
177
|
const nodePath = (_c = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.sequenceSubscriptionKey) !== null && _c !== void 0 ? _c : null;
|
|
176
178
|
const { hovered, onPointerEnter, onPointerLeave } = (0, timeline_sequence_hover_1.useTimelineSequenceHover)(nodePathInfo);
|
|
177
179
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
@@ -187,8 +189,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
187
189
|
const assetContextMenu = (0, use_asset_timeline_context_menu_1.useAssetTimelineContextMenu)();
|
|
188
190
|
const selectComposition = (0, InitialCompositionLoader_1.useSelectComposition)();
|
|
189
191
|
const deleteTimelineItems = (0, use_delete_timeline_items_1.useDeleteTimelineItems)();
|
|
190
|
-
const { onSelect, selectable, selected } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
|
|
191
|
-
const { selectItem, selectedItems } = (0, TimelineSelection_1.useTimelineSelection)();
|
|
192
|
+
const { onSelect, selectable, selected, selectedItems, selectItem } = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo);
|
|
192
193
|
const selectedSequenceNodePathInfos = (0, react_1.useMemo)(() => {
|
|
193
194
|
if (!selected ||
|
|
194
195
|
selectedItems.length < 2 ||
|
|
@@ -204,7 +205,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
204
205
|
const sequenceReorderWrapperRef = (0, react_1.useRef)(null);
|
|
205
206
|
const stopSequencePointerSession = (0, react_1.useRef)(null);
|
|
206
207
|
const suppressNextClick = (0, react_1.useRef)(false);
|
|
207
|
-
const { canOpenInEditor,
|
|
208
|
+
const { canConfigureApps, canOpenInEditor, canOpenSource, codingAgentInfo, editorInfo, openInCodingAgent, openInEditor, openSource, originalLocation, } = (0, use_open_sequence_in_apps_1.useOpenSequenceInApps)(sequence);
|
|
208
209
|
const validatedLocation = (0, react_1.useMemo)(() => {
|
|
209
210
|
var _a;
|
|
210
211
|
if (!originalLocation ||
|
|
@@ -229,17 +230,16 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
229
230
|
const timelineDisplayName = sequence.displayName === '' && connectedCompositions.length === 1
|
|
230
231
|
? connectedCompositions[0].id
|
|
231
232
|
: displayName;
|
|
232
|
-
const numberOfHiddenDuplicates = Math.max(0, ((_d = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.numberOfSequencesWithThisNodePath) !== null && _d !== void 0 ? _d : 1) - 1);
|
|
233
233
|
const canDeleteFromSource = Boolean(nodePath && (validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source));
|
|
234
234
|
const nodePathKey = (0, react_1.useMemo)(() => nodePath ? remotion_1.Internals.makeSequencePropsSubscriptionKey(nodePath) : null, [nodePath]);
|
|
235
|
-
const parentId = (
|
|
235
|
+
const parentId = (_d = sequence.parent) !== null && _d !== void 0 ? _d : null;
|
|
236
236
|
const canReorderSequence = previewInteractive &&
|
|
237
237
|
Boolean(nodePath && nodePathKey && (validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) &&
|
|
238
238
|
(nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.numberOfSequencesWithThisNodePath) === 1;
|
|
239
239
|
const canHandleSequenceDrag = previewInteractive;
|
|
240
240
|
const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
|
|
241
241
|
const deleteDisabled = (0, react_1.useMemo)(() => !previewInteractive || !sequence.controls || !canDeleteFromSource, [previewInteractive, sequence.controls, canDeleteFromSource]);
|
|
242
|
-
const isProgrammaticallyDuplicated = ((
|
|
242
|
+
const isProgrammaticallyDuplicated = ((_e = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.numberOfSequencesWithThisNodePath) !== null && _e !== void 0 ? _e : 1) > 1;
|
|
243
243
|
const duplicateDisabled = deleteDisabled || isProgrammaticallyDuplicated;
|
|
244
244
|
const disableInteractivityDisabled = !previewInteractive ||
|
|
245
245
|
!sequence.showInTimeline ||
|
|
@@ -477,10 +477,10 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
477
477
|
updateDropTarget(currentClientY);
|
|
478
478
|
},
|
|
479
479
|
});
|
|
480
|
-
stopSequencePointerSession.current = (0, pointer_session_1.
|
|
480
|
+
stopSequencePointerSession.current = (0, pointer_session_1.startDeferredCapturedPointerSession)({
|
|
481
481
|
captureTarget: sourceElement,
|
|
482
482
|
event: e.nativeEvent,
|
|
483
|
-
onMove: (pointerEvent) => {
|
|
483
|
+
onMove: (pointerEvent, capturePointer) => {
|
|
484
484
|
currentClientY = pointerEvent.clientY;
|
|
485
485
|
if (!didDrag &&
|
|
486
486
|
Math.hypot(pointerEvent.clientX - startX, pointerEvent.clientY - startY) < SEQUENCE_REORDER_POINTER_THRESHOLD) {
|
|
@@ -488,6 +488,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
488
488
|
}
|
|
489
489
|
if (!didDrag) {
|
|
490
490
|
didDrag = true;
|
|
491
|
+
capturePointer();
|
|
491
492
|
previousUserSelect = document.body.style.userSelect;
|
|
492
493
|
previousWebkitUserSelect = document.body.style.webkitUserSelect;
|
|
493
494
|
document.body.style.userSelect = 'none';
|
|
@@ -515,7 +516,8 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
515
516
|
autoScroll.update({ clientX: startX, clientY: pointerEvent.clientY });
|
|
516
517
|
},
|
|
517
518
|
onEnd: (reason, pointerEvent) => {
|
|
518
|
-
|
|
519
|
+
const released = (0, pointer_session_1.isPointerSessionRelease)(reason, pointerEvent);
|
|
520
|
+
if (released && didDrag) {
|
|
519
521
|
updateDropTarget(pointerEvent.clientY);
|
|
520
522
|
}
|
|
521
523
|
autoScroll.stop();
|
|
@@ -531,7 +533,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
531
533
|
setTimeout(() => {
|
|
532
534
|
suppressNextClick.current = false;
|
|
533
535
|
}, 0);
|
|
534
|
-
if (
|
|
536
|
+
if (released && activeDrop) {
|
|
535
537
|
activeDropTarget === null || activeDropTarget === void 0 ? void 0 : activeDropTarget.reorder(activeDrop);
|
|
536
538
|
}
|
|
537
539
|
},
|
|
@@ -639,6 +641,8 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
639
641
|
codeHiddenStatus !== undefined &&
|
|
640
642
|
codeHiddenStatus !== null &&
|
|
641
643
|
codeHiddenStatus.status === 'static';
|
|
644
|
+
const showVisibilityToggle = canToggleVisibility ||
|
|
645
|
+
(previewInteractive && showProvisionalVisibilityToggle);
|
|
642
646
|
const onSequenceDoubleClick = (0, react_1.useCallback)((e) => {
|
|
643
647
|
if ((0, TimelineSelection_1.isTimelineSelectionModifierEvent)(e)) {
|
|
644
648
|
e.stopPropagation();
|
|
@@ -646,7 +650,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
646
650
|
}
|
|
647
651
|
const action = (0, get_sequence_double_click_action_1.getSequenceDoubleClickAction)({
|
|
648
652
|
button: e.button,
|
|
649
|
-
|
|
653
|
+
canOpenSource,
|
|
650
654
|
numberOfConnectedCompositions: connectedCompositions.length,
|
|
651
655
|
// The track list row reorders via native drag-and-drop, which
|
|
652
656
|
// already suppresses `dblclick` after a drag.
|
|
@@ -665,16 +669,16 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
665
669
|
}));
|
|
666
670
|
return;
|
|
667
671
|
}
|
|
668
|
-
|
|
672
|
+
openSource();
|
|
669
673
|
}, [
|
|
670
|
-
|
|
674
|
+
canOpenSource,
|
|
671
675
|
connectedCompositions,
|
|
672
|
-
|
|
676
|
+
openSource,
|
|
673
677
|
selectComposition,
|
|
674
678
|
sequence,
|
|
675
679
|
sequenceFrameOffset,
|
|
676
680
|
]);
|
|
677
|
-
const canHandleSequenceDoubleClick = connectedCompositions.length === 1 ||
|
|
681
|
+
const canHandleSequenceDoubleClick = connectedCompositions.length === 1 || canOpenSource;
|
|
678
682
|
const canRenameSelectedSequence = canRenameThisSequence &&
|
|
679
683
|
selected &&
|
|
680
684
|
selectedItems.length === 1 &&
|
|
@@ -702,7 +706,8 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
702
706
|
return;
|
|
703
707
|
}
|
|
704
708
|
if (document.activeElement instanceof HTMLInputElement ||
|
|
705
|
-
document.activeElement instanceof HTMLTextAreaElement
|
|
709
|
+
document.activeElement instanceof HTMLTextAreaElement ||
|
|
710
|
+
document.activeElement instanceof HTMLButtonElement) {
|
|
706
711
|
return;
|
|
707
712
|
}
|
|
708
713
|
e.preventDefault();
|
|
@@ -829,6 +834,7 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
829
834
|
assetLinkInfo: mediaSrc ? (0, timeline_asset_link_1.getTimelineAssetLinkInfo)(mediaSrc) : null,
|
|
830
835
|
canOpenInEditor,
|
|
831
836
|
codingAgentInfo,
|
|
837
|
+
copyImageElement: null,
|
|
832
838
|
deleteDisabled,
|
|
833
839
|
disableInteractivityDisabled,
|
|
834
840
|
duplicateDisabled,
|
|
@@ -1032,12 +1038,12 @@ const TimelineSequenceItemInner = ({ afterDropLineOffset, connectedCompositions,
|
|
|
1032
1038
|
clientId: previewServerState.clientId,
|
|
1033
1039
|
});
|
|
1034
1040
|
}, [canDropEffect, nodePath, previewServerState, validatedLocation]);
|
|
1035
|
-
const trackRow = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: nestedDepth, eye:
|
|
1041
|
+
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: [
|
|
1036
1042
|
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 })
|
|
1037
|
-
] })) : null, jsx_runtime_1.jsx(TimelineSequenceName_1.TimelineSequenceName, { displayName: timelineDisplayName, fallbackDisplayName: fallbackDisplayName, selected: selected, containsSelection: containsSelection, editing: isRenaming, onCancelEditing: onCancelRenaming, onSaveName: onSaveName }),
|
|
1038
|
-
jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(TimelineSequenceExpandArrow, { disabled: !previewInteractive, isExpanded: isExpanded, nodePathInfo: nodePathInfo, sequence: sequence })
|
|
1039
|
-
] })) : null, numberOfHiddenDuplicates > 0 ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
1043
|
+
] })) : null, jsx_runtime_1.jsx(TimelineSequenceName_1.TimelineSequenceName, { displayName: timelineDisplayName, fallbackDisplayName: fallbackDisplayName, selected: selected, containsSelection: containsSelection, editing: isRenaming, onCancelEditing: onCancelRenaming, onSaveName: onSaveName }), numberOfHiddenDuplicates > 0 ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
1040
1044
|
jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(TimelineDuplicateCount_1.TimelineDuplicateCount, { count: numberOfHiddenDuplicates })
|
|
1045
|
+
] })) : null, hasExpandableContent && nodePathInfo !== null ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
1046
|
+
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 })
|
|
1041
1047
|
] })) : null, mediaSrc ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
1042
1048
|
jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }),
|
|
1043
1049
|
" ",
|