@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.
Files changed (230) hide show
  1. package/dist/api/focus-default-props-path.js +7 -1
  2. package/dist/api/restart-studio.d.ts +1 -1
  3. package/dist/api/restart-studio.js +1 -1
  4. package/dist/components/ActionTooltip.d.ts +2 -0
  5. package/dist/components/ActionTooltip.js +14 -4
  6. package/dist/components/AgentPrompt.d.ts +6 -0
  7. package/dist/components/AgentPrompt.js +107 -0
  8. package/dist/components/AppLaunchButton.js +2 -0
  9. package/dist/components/AssetFileIcon.js +2 -0
  10. package/dist/components/AssetSelectorItem.d.ts +1 -23
  11. package/dist/components/AssetSelectorItem.js +10 -200
  12. package/dist/components/AssetSelectorModal.d.ts +6 -0
  13. package/dist/components/AssetSelectorModal.js +174 -0
  14. package/dist/components/Canvas.js +21 -4
  15. package/dist/components/CaptionInspector.js +9 -3
  16. package/dist/components/CheckboardToggle.js +2 -1
  17. package/dist/{error-overlay/remotion-overlay → components}/CodeFrame.d.ts +2 -0
  18. package/dist/components/CodeFrame.js +77 -0
  19. package/dist/components/ColorPicker/AlphaSlider.js +1 -1
  20. package/dist/components/ColorPicker/HueSlider.js +1 -1
  21. package/dist/components/ColorPicker/SaturationValueArea.js +1 -1
  22. package/dist/components/CompositionSelector.js +1 -0
  23. package/dist/components/CompositionSelectorItem.js +7 -17
  24. package/dist/components/CurrentAsset.js +5 -4
  25. package/dist/components/EditorGuides/Guide.js +1 -1
  26. package/dist/components/ElementInstallConfirmation.js +100 -61
  27. package/dist/components/FilePreview.js +4 -0
  28. package/dist/components/FixComputedValueModal.js +64 -96
  29. package/dist/components/FullscreenToggle.js +1 -1
  30. package/dist/components/GenerateWithAgentModal.d.ts +9 -0
  31. package/dist/components/GenerateWithAgentModal.js +39 -0
  32. package/dist/components/GlobalKeybindings.js +14 -0
  33. package/dist/components/InlineEditableTitle.js +2 -0
  34. package/dist/components/InspectorLocationCopy.js +1 -1
  35. package/dist/components/InspectorOpenInEditor.d.ts +1 -0
  36. package/dist/components/InspectorOpenInEditor.js +25 -18
  37. package/dist/components/InspectorPanel/CollapsibleInspectorSection.d.ts +7 -0
  38. package/dist/components/InspectorPanel/CollapsibleInspectorSection.js +14 -0
  39. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.d.ts +1 -1
  40. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +19 -8
  41. package/dist/components/InspectorPanel/CompositionInspector.js +30 -13
  42. package/dist/components/InspectorPanel/CompositionInspectorHeader.js +6 -7
  43. package/dist/components/InspectorPanel/CompositionMetadata.js +4 -0
  44. package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +6 -12
  45. package/dist/components/InspectorPanel/ElementLibraryButton.js +2 -0
  46. package/dist/components/InspectorPanel/GuideInspector.js +2 -3
  47. package/dist/components/InspectorPanel/KeyframeSettings.js +5 -6
  48. package/dist/components/InspectorPanel/MultiSequenceInspector.js +2 -1
  49. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +4 -12
  50. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +4 -3
  51. package/dist/components/InspectorPanel/common.d.ts +4 -0
  52. package/dist/components/InspectorPanel/common.js +14 -2
  53. package/dist/components/InspectorPanel/styles.d.ts +0 -3
  54. package/dist/components/InspectorPanel/styles.js +1 -27
  55. package/dist/components/InspectorPanel/use-composition-actions.d.ts +2 -0
  56. package/dist/components/InspectorPanel/use-composition-actions.js +15 -0
  57. package/dist/components/InspectorPanel/use-inspector-section-expanded.d.ts +1 -0
  58. package/dist/components/InspectorPanel/use-inspector-section-expanded.js +21 -0
  59. package/dist/components/InspectorSequenceSection.js +61 -43
  60. package/dist/components/InspectorSourceLocation.js +1 -0
  61. package/dist/components/KeyboardShortcutsSettings.js +12 -4
  62. package/dist/components/LoopToggle.js +2 -1
  63. package/dist/components/LutPreview.d.ts +4 -0
  64. package/dist/components/LutPreview.js +192 -0
  65. package/dist/components/Menu/MenuItem.js +1 -2
  66. package/dist/components/MenuBuildIndicator.js +1 -1
  67. package/dist/components/MenuCompositionName.js +4 -9
  68. package/dist/components/Modals.js +4 -6
  69. package/dist/components/ModelsSettings.js +15 -4
  70. package/dist/components/MuteToggle.js +2 -1
  71. package/dist/components/NewComposition/CodemodFooter.js +1 -0
  72. package/dist/components/NewComposition/DeleteComposition.js +42 -6
  73. package/dist/components/NewComposition/DeleteFolder.js +1 -0
  74. package/dist/components/NewComposition/DuplicateComposition.js +5 -0
  75. package/dist/components/NewComposition/InputDragger.js +2 -2
  76. package/dist/components/NewComposition/NewFolder.js +29 -2
  77. package/dist/components/NewComposition/RenameFolder.js +1 -0
  78. package/dist/components/NewComposition/duplicate-composition-api.d.ts +3 -2
  79. package/dist/components/NewComposition/duplicate-composition-api.js +9 -2
  80. package/dist/components/OutlineToggle.js +2 -1
  81. package/dist/components/PlayPause.js +1 -1
  82. package/dist/components/Preview.js +0 -3
  83. package/dist/components/PreviewToolbar.js +3 -6
  84. package/dist/components/PreviewToolbarOverflowButton.js +2 -1
  85. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -1
  86. package/dist/components/QuickSwitcher/QuickSwitcherResult.js +4 -9
  87. package/dist/components/RenderButton.js +40 -4
  88. package/dist/components/RenderModal/SchemaEditor/scroll-to-default-props-path.d.ts +1 -0
  89. package/dist/components/RenderModal/SchemaEditor/scroll-to-default-props-path.js +2 -1
  90. package/dist/components/RenderModal/WebRenderModal.js +10 -2
  91. package/dist/components/RenderModal/WebRenderModalBasic.js +1 -1
  92. package/dist/components/RenderModal/render-modals.js +3 -0
  93. package/dist/components/RenderQueue/RenderQueueCopyToClipboard.js +1 -1
  94. package/dist/components/RenderQueue/RenderQueueItemCancelButton.js +1 -1
  95. package/dist/components/RenderQueue/actions.d.ts +2 -1
  96. package/dist/components/RenderQueue/actions.js +2 -1
  97. package/dist/components/RendersTab.js +2 -0
  98. package/dist/components/RulersAndGuidesToggle.js +2 -1
  99. package/dist/components/SegmentedButton.d.ts +1 -0
  100. package/dist/components/SegmentedButton.js +9 -3
  101. package/dist/components/SelectedOutlineElement.js +22 -6
  102. package/dist/components/SelectedOutlinePolygon.js +4 -2
  103. package/dist/components/SettingsButton.js +11 -2
  104. package/dist/components/SettingsContext.d.ts +8 -0
  105. package/dist/components/SettingsContext.js +57 -2
  106. package/dist/components/SettingsModal.d.ts +1 -2
  107. package/dist/components/SettingsModal.js +27 -6
  108. package/dist/components/SettingsModalFooter.js +17 -3
  109. package/dist/components/SidebarCollapserControls.js +1 -1
  110. package/dist/components/SkillsSettings.d.ts +5 -0
  111. package/dist/components/SkillsSettings.js +49 -15
  112. package/dist/components/SnappingToggle.js +2 -1
  113. package/dist/components/Splitter/SplitterHandle.js +1 -2
  114. package/dist/components/Tabs/vertical.d.ts +1 -1
  115. package/dist/components/Tabs/vertical.js +16 -2
  116. package/dist/components/Timeline/EasingEditorModal.js +2 -2
  117. package/dist/components/Timeline/Timeline.js +10 -11
  118. package/dist/components/Timeline/TimelineAssetField.js +178 -9
  119. package/dist/components/Timeline/TimelineDragHandler.js +1 -2
  120. package/dist/components/Timeline/TimelineEffectItem.d.ts +1 -0
  121. package/dist/components/Timeline/TimelineEffectItem.js +2 -2
  122. package/dist/components/Timeline/TimelineEffectPropItem.d.ts +1 -0
  123. package/dist/components/Timeline/TimelineEffectPropItem.js +2 -2
  124. package/dist/components/Timeline/TimelineExpandedRow.js +2 -2
  125. package/dist/components/Timeline/TimelineHeightContainer.js +11 -1
  126. package/dist/components/Timeline/TimelineInOutDragHandler.js +1 -2
  127. package/dist/components/Timeline/TimelineKeyframeControls.js +15 -1
  128. package/dist/components/Timeline/TimelineLayerChildren.d.ts +3 -3
  129. package/dist/components/Timeline/TimelineLayerChildren.js +11 -9
  130. package/dist/components/Timeline/TimelineLayerEye.d.ts +1 -1
  131. package/dist/components/Timeline/TimelineLayerEye.js +6 -3
  132. package/dist/components/Timeline/TimelineList.js +9 -3
  133. package/dist/components/Timeline/TimelineSchemaField.js +10 -7
  134. package/dist/components/Timeline/TimelineSelection.d.ts +17 -4
  135. package/dist/components/Timeline/TimelineSelection.js +121 -52
  136. package/dist/components/Timeline/TimelineSequence.js +8 -8
  137. package/dist/components/Timeline/TimelineSequenceItem.d.ts +2 -0
  138. package/dist/components/Timeline/TimelineSequenceItem.js +29 -23
  139. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +3 -12
  140. package/dist/components/Timeline/TimelineTranslateField.js +25 -12
  141. package/dist/components/Timeline/TimelineVirtualization.d.ts +3 -3
  142. package/dist/components/Timeline/TimelineZoomControls.js +1 -1
  143. package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +3 -1
  144. package/dist/components/Timeline/get-sequence-context-menu-items.js +152 -51
  145. package/dist/components/Timeline/normalize-font-weight-for-keyframe.d.ts +1 -0
  146. package/dist/components/Timeline/normalize-font-weight-for-keyframe.js +19 -0
  147. package/dist/components/Timeline/timeline-display-groups.d.ts +9 -0
  148. package/dist/components/Timeline/timeline-display-groups.js +66 -0
  149. package/dist/components/Timeline/timeline-field-display-utils.js +4 -2
  150. package/dist/components/Timeline/timeline-translate-utils.d.ts +17 -0
  151. package/dist/components/Timeline/timeline-translate-utils.js +53 -12
  152. package/dist/components/Timeline/use-open-sequence-in-apps.d.ts +2 -0
  153. package/dist/components/Timeline/use-open-sequence-in-apps.js +17 -0
  154. package/dist/components/Timeline/use-timeline-asset-drop.js +20 -6
  155. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +2 -1
  156. package/dist/components/Timeline/use-timeline-expanded-tree.js +1 -2
  157. package/dist/components/Timeline/use-timeline-keyframe-drag.js +4 -4
  158. package/dist/components/TimelineCombobox.js +1 -0
  159. package/dist/components/UndoRedoButtons.js +11 -0
  160. package/dist/components/UpdateStatusContext.d.ts +2 -2
  161. package/dist/components/UpdateStatusContext.js +6 -7
  162. package/dist/components/UpdatesSettings.js +6 -6
  163. package/dist/components/WebMcp.js +40 -41
  164. package/dist/components/asset-context-menu.d.ts +32 -0
  165. package/dist/components/asset-context-menu.js +242 -0
  166. package/dist/components/composition-menu-items.d.ts +4 -6
  167. package/dist/components/composition-menu-items.js +212 -42
  168. package/dist/components/folder-menu-items.js +44 -0
  169. package/dist/components/get-open-in-menu-items.d.ts +6 -5
  170. package/dist/components/get-open-in-menu-items.js +16 -10
  171. package/dist/components/import-assets.d.ts +24 -1
  172. package/dist/components/import-assets.js +3 -1
  173. package/dist/components/keyboard-shortcuts.d.ts +4 -4
  174. package/dist/components/keyboard-shortcuts.js +5 -0
  175. package/dist/components/selected-outline-order.js +18 -12
  176. package/dist/components/use-open-in-menu-apps.d.ts +14 -0
  177. package/dist/components/use-open-in-menu-apps.js +33 -0
  178. package/dist/error-overlay/remotion-overlay/ErrorDisplay.js +2 -2
  179. package/dist/error-overlay/remotion-overlay/OpenInEditor.d.ts +1 -0
  180. package/dist/error-overlay/remotion-overlay/OpenInEditor.js +3 -3
  181. package/dist/error-overlay/remotion-overlay/StackFrame.d.ts +5 -1
  182. package/dist/error-overlay/remotion-overlay/StackFrame.js +26 -19
  183. package/dist/esm/{LazyModels-hc33szyn.mjs → LazyModels-mtggyjye.mjs} +3 -3
  184. package/dist/esm/{LazyModels-sg40rjw6.mjs → LazyModels-nk7py0zt.mjs} +3 -3
  185. package/dist/esm/{TranscriptionModal-3ctnxpt6.mjs → TranscriptionModal-ymnx1c7m.mjs} +6 -6
  186. package/dist/esm/{VideoMattingModal-b0r7e60n.mjs → VideoMattingModal-05vpczks.mjs} +6 -6
  187. package/dist/esm/{index-er3mh6em.mjs → index-0gewwxse.mjs} +7031 -5834
  188. package/dist/esm/{index-q5xv20xx.mjs → index-4dsz9035.mjs} +8 -8
  189. package/dist/esm/{index-wbmp5srk.mjs → index-5bfxbpca.mjs} +1 -1
  190. package/dist/esm/{index-e3zwf3e7.mjs → index-5gd8k9yv.mjs} +1 -1
  191. package/dist/esm/{index-c37kme2v.mjs → index-bs39wngg.mjs} +4929 -3801
  192. package/dist/esm/{index-yfrysr5f.mjs → index-cdy8v54v.mjs} +17 -3
  193. package/dist/esm/{index-9qtvmwtx.mjs → index-eb5txqp6.mjs} +12 -9
  194. package/dist/esm/{index-q2epbw93.mjs → index-f97r9e2g.mjs} +4 -21
  195. package/dist/esm/{index-2j3d1g81.mjs → index-g7k2dvar.mjs} +1 -1
  196. package/dist/esm/{index-1b9skrrd.mjs → index-x40wwfmt.mjs} +3 -3
  197. package/dist/esm/index.mjs +12 -6
  198. package/dist/esm/internals.mjs +7 -7
  199. package/dist/esm/previewEntry.mjs +7 -7
  200. package/dist/helpers/client-id.d.ts +1 -0
  201. package/dist/helpers/client-id.js +8 -4
  202. package/dist/helpers/cube-lut.d.ts +12 -0
  203. package/dist/helpers/cube-lut.js +160 -0
  204. package/dist/helpers/get-git-menu-item.d.ts +4 -0
  205. package/dist/helpers/get-git-menu-item.js +8 -1
  206. package/dist/helpers/get-preview-file-type.d.ts +1 -1
  207. package/dist/helpers/get-preview-file-type.js +3 -0
  208. package/dist/helpers/get-sequence-double-click-action.d.ts +3 -3
  209. package/dist/helpers/get-sequence-double-click-action.js +2 -2
  210. package/dist/helpers/open-in-editor.d.ts +5 -2
  211. package/dist/helpers/open-in-editor.js +12 -4
  212. package/dist/helpers/pointer-session.d.ts +1 -0
  213. package/dist/helpers/pointer-session.js +10 -1
  214. package/dist/helpers/settings-tab-availability.d.ts +14 -0
  215. package/dist/helpers/settings-tab-availability.js +35 -0
  216. package/dist/helpers/studio-runtime-config.d.ts +1 -1
  217. package/dist/helpers/use-create-composition.js +5 -0
  218. package/dist/helpers/use-keybinding.d.ts +1 -1
  219. package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -2
  220. package/dist/helpers/use-media-metadata.js +5 -1
  221. package/dist/helpers/use-menu-structure.js +21 -13
  222. package/dist/helpers/use-rename-composition.js +6 -1
  223. package/dist/icons/lut.d.ts +4 -0
  224. package/dist/icons/lut.js +6 -0
  225. package/dist/icons/sparkles.d.ts +4 -0
  226. package/dist/icons/sparkles.js +6 -0
  227. package/dist/state/modals.d.ts +25 -3
  228. package/dist/state/z-index.js +1 -3
  229. package/package.json +19 -19
  230. 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
- selected: boolean;
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
- selected: boolean;
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
- return (jsx_runtime_1.jsx(CurrentTimelineSelectionContext.Provider, { value: currentSelection, 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: [
766
- jsx_runtime_1.jsx(TimelineClipboardKeybindings_1.TimelineClipboardKeybindings, {}), jsx_runtime_1.jsx(TimelineDeleteKeybindings_1.TimelineDeleteKeybindings, {})
767
- ] })) : null] }) }));
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 ((reason === 'pointerup' || reason === 'buttons-released') &&
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 { registerMarqueeSelectableItem } = (0, exports.useTimelineSelection)();
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
- const selected = selectionItem === null ? false : isSelected(selectionItem);
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
- }, [selectItem, selectableTimelineItemsRef, selectionItem]);
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
- const selected = isSelected(selectionItem);
991
- const onSelect = (0, react_1.useCallback)((interaction) => {
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
- selected,
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
- const selected = isSelected(selectionItem);
1013
- const onSelect = (0, react_1.useCallback)((interaction) => {
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
- const selected = isSelected(selectionItem);
1031
- const onSelect = (0, react_1.useCallback)(() => {
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 { containsSelection } = (0, exports.useTimelineSelection)();
1045
- if (nodePathInfo === null) {
1046
- return false;
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
- return containsSelection(nodePathInfo);
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, canConfigureApps, codingAgentInfo, editorInfo, openInCodingAgent, openInEditor, originalLocation, } = (0, use_open_sequence_in_apps_1.useOpenSequenceInApps)(s);
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
- canOpenInEditor,
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
- openInEditor(null);
340
+ openSource();
342
341
  }, [
343
- canOpenInEditor,
342
+ canOpenSource,
344
343
  connectedCompositions,
345
344
  dragAwareDoubleClick,
346
- openInEditor,
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 || canOpenInEditor;
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, _f;
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, canConfigureApps, codingAgentInfo, editorInfo, openInCodingAgent, openInEditor, originalLocation, } = (0, use_open_sequence_in_apps_1.useOpenSequenceInApps)(sequence);
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 = (_e = sequence.parent) !== null && _e !== void 0 ? _e : null;
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 = ((_f = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.numberOfSequencesWithThisNodePath) !== null && _f !== void 0 ? _f : 1) > 1;
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.startCapturedPointerSession)({
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
- if (reason === 'pointerup' && pointerEvent && didDrag) {
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 (reason === 'pointerup' && pointerEvent && activeDrop) {
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
- canOpenInEditor,
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
- openInEditor(null);
672
+ openSource();
669
673
  }, [
670
- canOpenInEditor,
674
+ canOpenSource,
671
675
  connectedCompositions,
672
- openInEditor,
676
+ openSource,
673
677
  selectComposition,
674
678
  sequence,
675
679
  sequenceFrameOffset,
676
680
  ]);
677
- const canHandleSequenceDoubleClick = connectedCompositions.length === 1 || canOpenInEditor;
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: canToggleVisibility ? (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEye, { type: sequence.type === 'audio' ? 'speaker' : 'eye', hidden: isItemHidden, onInvoked: onToggleVisibility })) : (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: [
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 }), hasExpandableContent && nodePathInfo !== null ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
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
  " ",