@remotion/studio 4.0.526 → 4.0.528

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 (309) hide show
  1. package/dist/components/AgentPrompt.js +1 -2
  2. package/dist/components/AudioWaveform.d.ts +1 -0
  3. package/dist/components/AudioWaveform.js +10 -14
  4. package/dist/components/Canvas.js +88 -26
  5. package/dist/components/CanvasCaptureDropHandler.js +63 -0
  6. package/dist/components/CanvasOrLoading.js +10 -2
  7. package/dist/components/CodeFrame.js +1 -1
  8. package/dist/components/ColorPicker/checker.d.ts +1 -1
  9. package/dist/components/CompositionSelectorItem.js +1 -0
  10. package/dist/components/CurrentAsset.js +4 -2
  11. package/dist/components/EditorRuler/Ruler.js +6 -3
  12. package/dist/components/EffectPickerModal.js +69 -43
  13. package/dist/components/ElementInstallConfirmation.js +3 -3
  14. package/dist/components/ElementLibrariesSettings.d.ts +2 -0
  15. package/dist/components/ElementLibrariesSettings.js +200 -0
  16. package/dist/components/InitialCompositionLoader.js +4 -2
  17. package/dist/components/InlineDropdown.js +26 -2
  18. package/dist/components/InlineEditableTitle.js +1 -0
  19. package/dist/components/InspectorOpenInEditor.js +13 -0
  20. package/dist/components/InspectorPanel/AlignmentControls.js +28 -9
  21. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +2 -1
  22. package/dist/components/InspectorPanel/CompositionInspector.js +3 -3
  23. package/dist/components/InspectorPanel/CompositionMetadata.js +4 -0
  24. package/dist/components/InspectorPanel/EasingInspector.js +6 -2
  25. package/dist/components/InspectorPanel/ElementLibraryButton.js +2 -1
  26. package/dist/components/InspectorPanel/KeyframeEasingNavigator.js +1 -1
  27. package/dist/components/InspectorPanel/KeyframeInspector.js +28 -24
  28. package/dist/components/InspectorPanel/MultiSequenceInspector.js +32 -1
  29. package/dist/components/InspectorPanel/MultiSequenceNumberField.js +1 -1
  30. package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -1
  31. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +70 -2
  32. package/dist/components/InspectorPanel/SequenceWrapAction.d.ts +8 -0
  33. package/dist/components/InspectorPanel/SequenceWrapAction.js +151 -0
  34. package/dist/components/InspectorPanel/common.js +1 -0
  35. package/dist/components/InspectorPanel/easing-inspector-selection.d.ts +2 -1
  36. package/dist/components/InspectorPanel/easing-inspector-selection.js +4 -3
  37. package/dist/components/InspectorPanel/keyframe-inspector-frame.d.ts +2 -1
  38. package/dist/components/InspectorPanel/keyframe-inspector-frame.js +2 -2
  39. package/dist/components/InspectorPanel/styles.js +2 -0
  40. package/dist/components/InspectorPanel/use-composition-actions.js +1 -0
  41. package/dist/components/InspectorSequenceSection.d.ts +1 -0
  42. package/dist/components/InspectorSequenceSection.js +7 -5
  43. package/dist/components/InspectorSourceLocation.js +3 -0
  44. package/dist/components/KeyboardShortcutsSettings.js +1 -1
  45. package/dist/components/Menu/styles.d.ts +2 -2
  46. package/dist/components/MenuBuildIndicator.js +1 -0
  47. package/dist/components/Modals.js +7 -6
  48. package/dist/components/ModelManager.js +10 -9
  49. package/dist/components/NewComposition/CancelButton.js +11 -5
  50. package/dist/components/NewComposition/InputDragger.d.ts +3 -1
  51. package/dist/components/NewComposition/InputDragger.js +28 -9
  52. package/dist/components/NewComposition/NewComposition.js +7 -6
  53. package/dist/components/NewComposition/RemInput.d.ts +1 -1
  54. package/dist/components/NewComposition/menu-typeahead.js +1 -1
  55. package/dist/components/Preview.js +4 -0
  56. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -0
  57. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -0
  58. package/dist/components/RadioButton.js +1 -0
  59. package/dist/components/RenderModal/DataEditor.js +4 -1
  60. package/dist/components/RenderModal/SchemaEditor/create-zod-values.js +1 -2
  61. package/dist/components/RenderModal/WebRenderModalPicture.js +1 -2
  62. package/dist/components/RenderQueue/CaptionQueueItem.js +19 -7
  63. package/dist/components/RenderQueue/CaptionQueueProcessor.js +65 -15
  64. package/dist/components/RenderQueue/QueueJobError.d.ts +8 -0
  65. package/dist/components/RenderQueue/QueueJobError.js +24 -0
  66. package/dist/components/RenderQueue/QueueJobErrorModal.d.ts +8 -0
  67. package/dist/components/RenderQueue/QueueJobErrorModal.js +63 -0
  68. package/dist/components/RenderQueue/RenderQueueItemCancelButton.d.ts +3 -1
  69. package/dist/components/RenderQueue/RenderQueueItemCancelButton.js +11 -4
  70. package/dist/components/RenderQueue/RenderQueueRepeat.d.ts +3 -1
  71. package/dist/components/RenderQueue/RenderQueueRepeat.js +20 -3
  72. package/dist/components/RenderQueue/VideoMattingQueueItem.js +25 -27
  73. package/dist/components/RenderQueue/VideoMattingQueueProcessor.js +68 -28
  74. package/dist/components/RenderQueue/caption-job-types.d.ts +9 -1
  75. package/dist/components/RenderQueue/context.d.ts +4 -0
  76. package/dist/components/RenderQueue/context.js +58 -8
  77. package/dist/components/RenderQueue/index.js +3 -3
  78. package/dist/components/RenderQueue/load-model-for-job.d.ts +2 -1
  79. package/dist/components/RenderQueue/load-model-for-job.js +5 -1
  80. package/dist/components/RenderQueue/video-matting-job-types.d.ts +13 -6
  81. package/dist/components/RendersTab.js +2 -0
  82. package/dist/components/SelectedOutlineCropControls.js +2 -1
  83. package/dist/components/SelectedOutlineEditingHandles.js +9 -2
  84. package/dist/components/SelectedOutlineElement.js +9 -3
  85. package/dist/components/SelectedOutlineKeyboardControls.d.ts +2 -4
  86. package/dist/components/SelectedOutlineKeyboardControls.js +4 -22
  87. package/dist/components/SelectedOutlineOverlay.js +152 -106
  88. package/dist/components/SelectedOutlinePathPoints.d.ts +8 -0
  89. package/dist/components/SelectedOutlinePathPoints.js +433 -0
  90. package/dist/components/SelectedOutlinePolygon.js +21 -46
  91. package/dist/components/SelectedOutlineRenderer.d.ts +3 -5
  92. package/dist/components/SelectedOutlineRenderer.js +32 -136
  93. package/dist/components/SelectedOutlineSnapIndicators.d.ts +6 -0
  94. package/dist/components/SelectedOutlineSnapIndicators.js +16 -12
  95. package/dist/components/SelectedOutlineTransformOriginHandle.js +3 -2
  96. package/dist/components/SelectedOutlineUvControls.js +12 -7
  97. package/dist/components/SequencePropsSubscriptionProvider.d.ts +3 -0
  98. package/dist/components/SequencePropsSubscriptionProvider.js +8 -6
  99. package/dist/components/SettingsModal.js +30 -3
  100. package/dist/components/SettingsModalFooter.d.ts +1 -0
  101. package/dist/components/SettingsModalFooter.js +7 -3
  102. package/dist/components/ShowOutlinesProvider.js +1 -1
  103. package/dist/components/SkillsSettings.d.ts +0 -1
  104. package/dist/components/SkillsSettings.js +13 -14
  105. package/dist/components/Splitter/SplitterElement.js +1 -2
  106. package/dist/components/TimeValue.js +1 -1
  107. package/dist/components/Timeline/LoopedTimelineIndicators.d.ts +1 -0
  108. package/dist/components/Timeline/LoopedTimelineIndicators.js +7 -6
  109. package/dist/components/Timeline/TimelineArrayField.js +1 -1
  110. package/dist/components/Timeline/TimelineClipboardKeybindings.js +0 -1
  111. package/dist/components/Timeline/TimelineColorField.js +1 -1
  112. package/dist/components/Timeline/TimelineDeleteKeybindings.js +6 -9
  113. package/dist/components/Timeline/TimelineDragHandler.js +1 -1
  114. package/dist/components/Timeline/TimelineEffectItem.js +1 -0
  115. package/dist/components/Timeline/TimelineEffectPropItem.d.ts +1 -0
  116. package/dist/components/Timeline/TimelineEffectPropItem.js +12 -5
  117. package/dist/components/Timeline/TimelineExpandArrowButton.js +1 -0
  118. package/dist/components/Timeline/TimelineExpandedRow.d.ts +1 -0
  119. package/dist/components/Timeline/TimelineExpandedRow.js +6 -4
  120. package/dist/components/Timeline/TimelineExpandedSection.d.ts +1 -0
  121. package/dist/components/Timeline/TimelineExpandedSection.js +2 -2
  122. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.d.ts +1 -0
  123. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +3 -1
  124. package/dist/components/Timeline/TimelineFieldLabel.js +1 -0
  125. package/dist/components/Timeline/TimelineFontFamilyField.js +12 -12
  126. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +1 -0
  127. package/dist/components/Timeline/TimelineKeyframeControls.js +40 -28
  128. package/dist/components/Timeline/TimelineLayerChildren.js +1 -1
  129. package/dist/components/Timeline/TimelineList.js +1 -1
  130. package/dist/components/Timeline/TimelineNumberField.js +2 -4
  131. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +1 -1
  132. package/dist/components/Timeline/TimelineSelection.d.ts +9 -9
  133. package/dist/components/Timeline/TimelineSelection.js +16 -9
  134. package/dist/components/Timeline/TimelineSequence.d.ts +3 -1
  135. package/dist/components/Timeline/TimelineSequence.js +65 -21
  136. package/dist/components/Timeline/TimelineSequenceFrame.js +1 -0
  137. package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
  138. package/dist/components/Timeline/TimelineSequenceItem.js +46 -8
  139. package/dist/components/Timeline/TimelineSequencePropItem.d.ts +3 -0
  140. package/dist/components/Timeline/TimelineSequencePropItem.js +262 -25
  141. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +11 -13
  142. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +98 -77
  143. package/dist/components/Timeline/TimelineTextContentField.js +27 -4
  144. package/dist/components/Timeline/TimelineTimeIndicators.js +10 -5
  145. package/dist/components/Timeline/TimelineTrack.js +1 -1
  146. package/dist/components/Timeline/TimelineTrimTooltip.d.ts +11 -0
  147. package/dist/components/Timeline/TimelineTrimTooltip.js +41 -0
  148. package/dist/components/Timeline/TimelineVideoInfo.d.ts +1 -0
  149. package/dist/components/Timeline/TimelineVideoInfo.js +13 -10
  150. package/dist/components/Timeline/TimelineViewport.d.ts +1 -0
  151. package/dist/components/Timeline/TimelineViewport.js +10 -1
  152. package/dist/components/Timeline/delete-selected-keyframe.js +22 -8
  153. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +1 -5
  154. package/dist/components/Timeline/delete-selected-timeline-item.js +9 -95
  155. package/dist/components/Timeline/get-animation-item-selection-for-frame.d.ts +2 -1
  156. package/dist/components/Timeline/get-animation-item-selection-for-frame.js +7 -5
  157. package/dist/components/Timeline/get-keyframed-sequence-drag-targets.d.ts +23 -0
  158. package/dist/components/Timeline/get-keyframed-sequence-drag-targets.js +57 -0
  159. package/dist/components/Timeline/get-node-keyframes.d.ts +2 -1
  160. package/dist/components/Timeline/get-node-keyframes.js +6 -4
  161. package/dist/components/Timeline/get-playback-rate-keyframe-changes.d.ts +21 -0
  162. package/dist/components/Timeline/get-playback-rate-keyframe-changes.js +142 -0
  163. package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +3 -1
  164. package/dist/components/Timeline/get-sequence-context-menu-items.js +13 -1
  165. package/dist/components/Timeline/get-timeline-keyframes.d.ts +15 -2
  166. package/dist/components/Timeline/get-timeline-keyframes.js +44 -6
  167. package/dist/components/Timeline/keyframe-clipboard.js +17 -3
  168. package/dist/components/Timeline/split-selected-timeline-item.d.ts +13 -10
  169. package/dist/components/Timeline/split-selected-timeline-item.js +61 -35
  170. package/dist/components/Timeline/timeline-field-display-utils.js +1 -0
  171. package/dist/components/Timeline/timeline-field-row-layout.js +1 -0
  172. package/dist/components/Timeline/use-delete-timeline-items.js +17 -11
  173. package/dist/components/Timeline/use-expanded-track-keyframe-rows.d.ts +2 -1
  174. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +3 -1
  175. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +7 -3
  176. package/dist/components/Timeline/use-timeline-keyframe-drag.js +28 -19
  177. package/dist/components/TimelineCombobox.js +1 -0
  178. package/dist/components/Transcription/Models.js +1 -1
  179. package/dist/components/Transcription/TranscriptionModal.js +18 -11
  180. package/dist/components/Transcription/TranscriptionModalWithOptionalWhisper.js +1 -1
  181. package/dist/components/Transcription/resample-media-to-16-khz.d.ts +2 -1
  182. package/dist/components/Transcription/resample-media-to-16-khz.js +20 -2
  183. package/dist/components/UpdatesSettings.js +2 -0
  184. package/dist/components/VideoMatting/Models.js +1 -1
  185. package/dist/components/VideoMatting/VideoMattingModal.js +30 -47
  186. package/dist/components/VideoMatting/VideoMattingModalWithOptionalPackage.js +1 -1
  187. package/dist/components/WebMcp.js +23 -40
  188. package/dist/components/composition-drop-preview.d.ts +9 -2
  189. package/dist/components/composition-drop-preview.js +8 -4
  190. package/dist/components/composition-menu-items.js +4 -4
  191. package/dist/components/delete-jsx-nodes-api.d.ts +2 -0
  192. package/dist/components/{delete-jsx-node-api.js → delete-jsx-nodes-api.js} +5 -5
  193. package/dist/components/effect-drag-and-drop.d.ts +13 -5
  194. package/dist/components/effect-drag-and-drop.js +19 -4
  195. package/dist/components/get-open-in-menu-items.d.ts +2 -1
  196. package/dist/components/get-open-in-menu-items.js +24 -8
  197. package/dist/components/keyboard-shortcuts.d.ts +4 -4
  198. package/dist/components/keyboard-shortcuts.js +3 -1
  199. package/dist/components/public-output-name.d.ts +1 -0
  200. package/dist/components/public-output-name.js +7 -3
  201. package/dist/components/selected-outline-drag.d.ts +1 -6
  202. package/dist/components/selected-outline-drag.js +22 -6
  203. package/dist/components/selected-outline-geometry.d.ts +2 -18
  204. package/dist/components/selected-outline-measurement.d.ts +23 -41
  205. package/dist/components/selected-outline-measurement.js +14 -252
  206. package/dist/components/selected-outline-order.d.ts +4 -11
  207. package/dist/components/selected-outline-order.js +2 -254
  208. package/dist/components/selected-outline-snap.d.ts +1 -1
  209. package/dist/components/selected-outline-snap.js +2 -1
  210. package/dist/components/selected-outline-types.d.ts +18 -28
  211. package/dist/components/selected-outline-uv.d.ts +4 -4
  212. package/dist/components/selected-outline-uv.js +6 -111
  213. package/dist/components/sequence-props-api.js +0 -10
  214. package/dist/components/use-selected-outline-control-target.js +12 -21
  215. package/dist/components/wrap-jsx-node-api.d.ts +2 -0
  216. package/dist/components/wrap-jsx-node-api.js +13 -0
  217. package/dist/error-overlay/remotion-overlay/OpenInEditor.js +45 -2
  218. package/dist/error-overlay/remotion-overlay/StackFrame.js +32 -3
  219. package/dist/esm/{CaptionQueueProcessor-k0yrm3dj.mjs → CaptionQueueProcessor-nr7hjcga.mjs} +96 -19
  220. package/dist/esm/LazyModels-ajkn7fs3.mjs +12 -0
  221. package/dist/esm/LazyModels-g1g7cf4e.mjs +12 -0
  222. package/dist/esm/{TranscriptionModal-ymnx1c7m.mjs → TranscriptionModal-e18bzbkb.mjs} +30 -22
  223. package/dist/esm/{VideoMattingModal-05vpczks.mjs → VideoMattingModal-5bz2s4rs.mjs} +47 -62
  224. package/dist/esm/{VideoMattingQueueProcessor-t1hgm2rm.mjs → VideoMattingQueueProcessor-4tkj0f4k.mjs} +69 -26
  225. package/dist/esm/{index-v4tr1bft.mjs → index-09txs1bj.mjs} +5 -0
  226. package/dist/esm/{index-4dsz9035.mjs → index-5ycb9e9q.mjs} +2 -4
  227. package/dist/esm/index-890dd9b3.mjs +768 -0
  228. package/dist/esm/{index-5bfxbpca.mjs → index-8nt6a0mw.mjs} +3 -3
  229. package/dist/esm/{index-5gd8k9yv.mjs → index-9q9w8v9p.mjs} +3 -3
  230. package/dist/esm/{index-x40wwfmt.mjs → index-c2wabcdt.mjs} +8 -6
  231. package/dist/esm/index-dfy1t576.mjs +129 -0
  232. package/dist/esm/index-dh3zk2hv.mjs +220 -0
  233. package/dist/esm/{index-0gewwxse.mjs → index-dpyss74p.mjs} +6179 -5011
  234. package/dist/esm/{index-9x6e1dq0.mjs → index-hqxc6tzp.mjs} +40 -6
  235. package/dist/esm/{index-cdy8v54v.mjs → index-qve7mdfp.mjs} +36 -539
  236. package/dist/esm/{index-eb5txqp6.mjs → index-s6qya2gg.mjs} +8 -88
  237. package/dist/esm/index-t7tbt980.mjs +103 -0
  238. package/dist/esm/{index-g7k2dvar.mjs → index-t7xnxdf8.mjs} +44 -26
  239. package/dist/esm/index-wqc43mw0.mjs +158 -0
  240. package/dist/esm/{index-bs39wngg.mjs → index-x6r9bn12.mjs} +5623 -6218
  241. package/dist/esm/{index-f97r9e2g.mjs → index-xac20sv4.mjs} +46 -57
  242. package/dist/esm/index.mjs +4 -4
  243. package/dist/esm/internals.mjs +13 -10
  244. package/dist/esm/previewEntry.mjs +18 -12
  245. package/dist/esm/renderEntry.mjs +5 -1
  246. package/dist/esm/{resolve-composition-component-location-bt2d6qxq.mjs → resolve-composition-component-location-2hgf6g0a.mjs} +1 -1
  247. package/dist/helpers/calculate-timeline.d.ts +5 -1
  248. package/dist/helpers/calculate-timeline.js +1 -1
  249. package/dist/helpers/checkerboard-background.d.ts +2 -2
  250. package/dist/helpers/colors.d.ts +132 -112
  251. package/dist/helpers/colors.js +117 -95
  252. package/dist/helpers/copy-text.js +1 -16
  253. package/dist/helpers/create-folder-tree.js +2 -1
  254. package/dist/helpers/editor-guide-selection.d.ts +1 -1
  255. package/dist/helpers/editor-ruler.js +23 -12
  256. package/dist/helpers/get-connected-compositions.d.ts +6 -1
  257. package/dist/helpers/get-connected-compositions.js +1 -1
  258. package/dist/helpers/get-sequence-double-click-action.js +1 -1
  259. package/dist/helpers/get-sequence-visible-range.d.ts +1 -1
  260. package/dist/helpers/get-sequence-visible-range.js +2 -5
  261. package/dist/helpers/get-timeline-nestedness.d.ts +1 -1
  262. package/dist/helpers/get-timeline-nestedness.js +1 -1
  263. package/dist/helpers/get-timeline-sequence-sort-key.d.ts +1 -1
  264. package/dist/helpers/get-timeline-sequence-sort-key.js +1 -1
  265. package/dist/helpers/hoverable.js +6 -5
  266. package/dist/helpers/inject-css.js +5 -7
  267. package/dist/helpers/open-in-editor.js +1 -1
  268. package/dist/helpers/prism-vsc-dark-plus.d.ts +1 -1
  269. package/dist/helpers/prism-vsc-dark-plus.js +52 -51
  270. package/dist/helpers/resolve-studio-color.d.ts +1 -0
  271. package/dist/helpers/resolve-studio-color.js +11 -0
  272. package/dist/helpers/studio-css-variables.d.ts +1 -0
  273. package/dist/helpers/studio-css-variables.js +105 -0
  274. package/dist/helpers/studio-pixel-ratio.d.ts +1 -0
  275. package/dist/helpers/studio-pixel-ratio.js +7 -0
  276. package/dist/helpers/studio-runtime-config.d.ts +1 -1
  277. package/dist/helpers/timeline-node-path-key.d.ts +1 -1
  278. package/dist/helpers/timeline-node-path-key.js +2 -2
  279. package/dist/helpers/use-keybinding.d.ts +1 -1
  280. package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -2
  281. package/dist/helpers/use-menu-structure.js +15 -9
  282. package/dist/helpers/use-runtime-values.js +2 -28
  283. package/dist/hot-middleware-client/client.js +5 -3
  284. package/dist/icons/align-center-horizontal.js +2 -1
  285. package/dist/icons/align-left.js +2 -1
  286. package/dist/icons/align-right.js +2 -1
  287. package/dist/icons/{separation.d.ts → background-removal.d.ts} +1 -1
  288. package/dist/icons/background-removal.js +9 -0
  289. package/dist/icons/wrap.d.ts +4 -0
  290. package/dist/icons/wrap.js +10 -0
  291. package/dist/previewEntry.js +2 -0
  292. package/dist/renderEntry.js +2 -0
  293. package/dist/state/modals.d.ts +20 -1
  294. package/dist/state/timeline-sequence-hover.d.ts +6 -16
  295. package/dist/state/timeline-sequence-hover.js +6 -67
  296. package/dist/state/timeline-zoom.js +4 -0
  297. package/package.json +20 -19
  298. package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.d.ts +0 -15
  299. package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.js +0 -31
  300. package/dist/components/delete-jsx-node-api.d.ts +0 -2
  301. package/dist/esm/LazyModels-mtggyjye.mjs +0 -11
  302. package/dist/esm/LazyModels-nk7py0zt.mjs +0 -11
  303. package/dist/esm/index-cw0pnpg5.mjs +0 -50
  304. package/dist/esm/index-k426ye99.mjs +0 -139
  305. package/dist/helpers/get-box-quads-polyfill-internals.d.ts +0 -82
  306. package/dist/helpers/get-box-quads-polyfill-internals.js +0 -2403
  307. package/dist/helpers/get-box-quads-ponyfill.d.ts +0 -10
  308. package/dist/helpers/get-box-quads-ponyfill.js +0 -23
  309. package/dist/icons/separation.js +0 -7
@@ -35,34 +35,27 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.SelectedOutlineRenderer = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const canvas_1 = require("@remotion/canvas");
38
39
  const react_1 = __importStar(require("react"));
39
40
  const timeline_node_path_key_1 = require("../helpers/timeline-node-path-key");
40
41
  const timeline_sequence_hover_1 = require("../state/timeline-sequence-hover");
41
42
  const ContextMenu_1 = require("./ContextMenu");
42
- const selected_outline_measurement_1 = require("./selected-outline-measurement");
43
- const selected_outline_order_1 = require("./selected-outline-order");
44
43
  const SelectedOutlineEditingHandles_1 = require("./SelectedOutlineEditingHandles");
45
44
  const SelectedOutlineElement_1 = require("./SelectedOutlineElement");
45
+ const SelectedOutlinePathPoints_1 = require("./SelectedOutlinePathPoints");
46
46
  const SelectedOutlinePolygon_1 = require("./SelectedOutlinePolygon");
47
47
  const SelectedOutlineSnapIndicators_1 = require("./SelectedOutlineSnapIndicators");
48
48
  const SelectedOutlineTransformOriginHandle_1 = require("./SelectedOutlineTransformOriginHandle");
49
49
  const SelectedOutlineUvControls_1 = require("./SelectedOutlineUvControls");
50
+ const { useCanvasOutlines } = canvas_1.CanvasInternals;
50
51
  const outlineContainer = {
51
52
  position: 'absolute',
52
53
  inset: 0,
53
54
  pointerEvents: 'none',
54
55
  overflow: 'visible',
55
56
  };
56
- const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth, dragging, getLatestOutlineTargetByKey, outlineTargets, onDraggingChange, onContextMenuOpenChange, onSelect, scale, sequences, updateOutlinesRef, }) => {
57
- var _a;
58
- // Targets are derived props and can receive a new identity on every render.
59
- // Keep only measured geometry in state to avoid layout-effect update loops.
60
- const [outlines, setOutlines] = (0, react_1.useState)([]);
61
- const outlinesRef = (0, react_1.useRef)(outlines);
57
+ const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth, dragging, getAllDragTargets, getLatestOutlineTargetByKey, outlineTargets, onDraggingChange, onContextMenuOpenChange, onSelect, scale, sequences, updateOutlinesRef, }) => {
62
58
  const overlayRef = (0, react_1.useRef)(null);
63
- const resizeObserverRef = (0, react_1.useRef)(null);
64
- const resizeObserverAnimationFrameRef = (0, react_1.useRef)(null);
65
- const observedOutlineElementsRef = (0, react_1.useRef)(new Set());
66
59
  const contextMenuOpenHandlersRef = (0, react_1.useRef)(new Map());
67
60
  const registerContextMenuOpen = (0, react_1.useCallback)((key, handler) => {
68
61
  if (handler === null) {
@@ -86,121 +79,15 @@ const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth
86
79
  const key = polygon.getAttribute(SelectedOutlinePolygon_1.SELECTED_OUTLINE_KEY_ATTR);
87
80
  return key === null ? false : ((_b = (_a = getContextMenuOpenByKey(key)) === null || _a === void 0 ? void 0 : _a()) !== null && _b !== void 0 ? _b : false);
88
81
  }, [getContextMenuOpenByKey]);
89
- const hoveredSequence = (0, timeline_sequence_hover_1.useTimelineSequenceHoverState)();
90
- const setHoveredSequence = (0, timeline_sequence_hover_1.useSetTimelineSequenceHover)();
91
- const hoveredNodePathKey = (_a = hoveredSequence === null || hoveredSequence === void 0 ? void 0 : hoveredSequence.nodePathKey) !== null && _a !== void 0 ? _a : null;
92
- const hoveredTimelineNodePathKey = (hoveredSequence === null || hoveredSequence === void 0 ? void 0 : hoveredSequence.source) === 'timeline' ? hoveredNodePathKey : null;
93
- const updateOutlines = (0, react_1.useCallback)(() => {
94
- if (overlayRef.current === null || outlineTargets.length === 0) {
95
- if (outlinesRef.current.length === 0) {
96
- return;
97
- }
98
- outlinesRef.current = [];
99
- setOutlines(outlinesRef.current);
100
- return;
101
- }
102
- const nextOutlines = (0, selected_outline_measurement_1.measureOutlines)(overlayRef.current, outlineTargets, hoveredTimelineNodePathKey);
103
- if ((0, selected_outline_measurement_1.outlinesAreEqual)(outlinesRef.current, nextOutlines)) {
104
- return;
105
- }
106
- outlinesRef.current = nextOutlines;
107
- setOutlines(nextOutlines);
108
- }, [hoveredTimelineNodePathKey, outlineTargets]);
109
- (0, react_1.useLayoutEffect)(() => {
110
- updateOutlinesRef.current = updateOutlines;
111
- updateOutlines();
112
- return () => {
113
- if (updateOutlinesRef.current === updateOutlines) {
114
- updateOutlinesRef.current = () => undefined;
115
- }
116
- };
117
- }, [updateOutlines, updateOutlinesRef]);
118
- (0, react_1.useLayoutEffect)(() => {
119
- if (typeof ResizeObserver === 'undefined') {
120
- return;
121
- }
122
- const resizeObserver = new ResizeObserver(() => {
123
- if (resizeObserverAnimationFrameRef.current !== null) {
124
- return;
125
- }
126
- resizeObserverAnimationFrameRef.current = requestAnimationFrame(() => {
127
- resizeObserverAnimationFrameRef.current = null;
128
- updateOutlinesRef.current();
129
- });
130
- });
131
- resizeObserverRef.current = resizeObserver;
132
- return () => {
133
- if (resizeObserverAnimationFrameRef.current !== null) {
134
- cancelAnimationFrame(resizeObserverAnimationFrameRef.current);
135
- resizeObserverAnimationFrameRef.current = null;
136
- }
137
- resizeObserver.disconnect();
138
- resizeObserverRef.current = null;
139
- observedOutlineElementsRef.current = new Set();
140
- };
141
- }, [updateOutlinesRef]);
142
- (0, react_1.useLayoutEffect)(() => {
143
- const resizeObserver = resizeObserverRef.current;
144
- if (resizeObserver === null) {
145
- return;
146
- }
147
- const nextObservedElements = new Set();
148
- if (overlayRef.current !== null) {
149
- nextObservedElements.add(overlayRef.current);
150
- }
151
- for (const target of outlineTargets) {
152
- if (target.ref.current !== null) {
153
- nextObservedElements.add(target.ref.current);
154
- }
155
- }
156
- for (const element of observedOutlineElementsRef.current) {
157
- if (!nextObservedElements.has(element)) {
158
- resizeObserver.unobserve(element);
159
- }
160
- }
161
- for (const element of nextObservedElements) {
162
- if (!observedOutlineElementsRef.current.has(element)) {
163
- resizeObserver.observe(element);
164
- }
165
- }
166
- observedOutlineElementsRef.current = nextObservedElements;
167
- }, [outlineTargets]);
168
- const targetsByKey = (0, react_1.useMemo)(() => {
169
- return new Map(outlineTargets.map((target) => [target.key, target]));
170
- }, [outlineTargets]);
171
- (0, react_1.useEffect)(() => {
172
- if ((hoveredSequence === null || hoveredSequence === void 0 ? void 0 : hoveredSequence.source) === 'canvas' &&
173
- !outlineTargets.some((target) => target.key === hoveredSequence.key)) {
174
- setHoveredSequence((currentHover) => (currentHover === null || currentHover === void 0 ? void 0 : currentHover.source) === 'canvas' ? null : currentHover);
175
- }
176
- }, [hoveredSequence, outlineTargets, setHoveredSequence]);
177
- // Reordering a captured SVG target can cancel the active pointer session.
178
- const outlineRenderingOrderRef = (0, react_1.useRef)([]);
179
- const outlinesForRendering = (0, react_1.useMemo)(() => {
180
- if (!dragging || outlineRenderingOrderRef.current.length === 0) {
181
- const orderedOutlines = (0, selected_outline_order_1.orderOutlinesForRendering)({
182
- outlines,
183
- sequences,
184
- targetsByKey,
185
- });
186
- outlineRenderingOrderRef.current = orderedOutlines.map((outline) => outline.key);
187
- return orderedOutlines;
188
- }
189
- const currentOutlinesByKey = new Map(outlines.map((outline) => [outline.key, outline]));
190
- const frozenKeys = new Set(outlineRenderingOrderRef.current);
191
- const newOutlines = outlines.filter((outline) => !frozenKeys.has(outline.key));
192
- outlineRenderingOrderRef.current = [
193
- ...outlineRenderingOrderRef.current,
194
- ...newOutlines.map((outline) => outline.key),
195
- ];
196
- return outlineRenderingOrderRef.current.flatMap((key) => {
197
- const outline = currentOutlinesByKey.get(key);
198
- return outline === undefined ? [] : [outline];
199
- });
200
- }, [dragging, outlines, sequences, targetsByKey]);
201
- const outlinesByKey = (0, react_1.useMemo)(() => {
202
- return new Map(outlines.map((outline) => [outline.key, outline]));
203
- }, [outlines]);
82
+ const hoverController = (0, react_1.useContext)(timeline_sequence_hover_1.TimelineSequenceHoverContext);
83
+ const { outlinesForRendering, outlinesByKey, targetsByKey, hoveredNodePathKey, } = useCanvasOutlines({
84
+ containerRef: overlayRef,
85
+ targets: outlineTargets,
86
+ sequences,
87
+ hoverController,
88
+ freezeOrder: dragging,
89
+ updateOutlinesRef,
90
+ });
204
91
  const { outlinesForEditingHandles, outlinesForTransformOrigin, outlinesForUvHandles, } = (0, react_1.useMemo)(() => {
205
92
  const editingHandles = [];
206
93
  const transformOrigin = [];
@@ -232,15 +119,6 @@ const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth
232
119
  targetsRef.current = outlineTargets;
233
120
  outlinesByKeyRef.current = outlinesByKey;
234
121
  }, [outlineTargets, outlinesByKey]);
235
- const getAllDragTargets = (0, react_1.useCallback)(() => targetsRef.current.flatMap((target) => {
236
- var _a;
237
- var _b;
238
- if (!target.selected && !target.containsSelection) {
239
- return [];
240
- }
241
- const drag = (_b = (_a = getLatestOutlineTargetByKey(target.key)) === null || _a === void 0 ? void 0 : _a.drag) !== null && _b !== void 0 ? _b : null;
242
- return drag === null ? [] : [drag];
243
- }), [getLatestOutlineTargetByKey]);
244
122
  const getAllDragOutlines = (0, react_1.useCallback)(() => targetsRef.current.flatMap((target) => {
245
123
  var _a;
246
124
  var _b;
@@ -254,6 +132,11 @@ const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth
254
132
  const getAllScaleDragTargets = (0, react_1.useCallback)(() => targetsRef.current.flatMap((target) => {
255
133
  var _a;
256
134
  var _b;
135
+ const outline = outlinesByKeyRef.current.get(target.key);
136
+ if (outline !== undefined && outline.path !== null) {
137
+ // Path outlines do not render scale handles.
138
+ return [];
139
+ }
257
140
  const scaleDrag = target.selected
258
141
  ? ((_b = (_a = getLatestOutlineTargetByKey(target.key)) === null || _a === void 0 ? void 0 : _a.scaleDrag) !== null && _b !== void 0 ? _b : null)
259
142
  : null;
@@ -262,6 +145,11 @@ const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth
262
145
  const getAllRotationDragTargets = (0, react_1.useCallback)(() => targetsRef.current.flatMap((target) => {
263
146
  var _a;
264
147
  var _b;
148
+ const outline = outlinesByKeyRef.current.get(target.key);
149
+ if (outline !== undefined && outline.path !== null) {
150
+ // Path outlines do not render rotation handles.
151
+ return [];
152
+ }
265
153
  const rotationDrag = target.selected
266
154
  ? ((_b = (_a = getLatestOutlineTargetByKey(target.key)) === null || _a === void 0 ? void 0 : _a.rotationDrag) !== null && _b !== void 0 ? _b : null)
267
155
  : null;
@@ -270,6 +158,14 @@ const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth
270
158
  const updateSnapPointsRef = (0, react_1.useRef)(() => undefined);
271
159
  const onSnapPointsChange = (0, react_1.useCallback)((snapPoints) => updateSnapPointsRef.current(snapPoints), []);
272
160
  return (jsx_runtime_1.jsxs("svg", { ref: overlayRef, style: outlineContainer, width: "100%", height: "100%", "aria-hidden": "true", children: [
273
- jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: overlayRef, getItems: getDelegatedContextMenuItems, onOpenChange: onContextMenuOpenChange }), jsx_runtime_1.jsx(SelectedOutlineSnapIndicators_1.SelectedOutlineSnapIndicators, { compositionHeight: compositionHeight, compositionWidth: compositionWidth, scale: scale, updateSnapPointsRef: updateSnapPointsRef }), outlinesForRendering.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineElement_1.SelectedOutlineElement, { compositionHeight: compositionHeight, compositionWidth: compositionWidth, dragging: dragging, getAllDragOutlines: getAllDragOutlines, getAllDragTargets: getAllDragTargets, getLatestTargetByKey: getLatestOutlineTargetByKey, outline: outline, onDraggingChange: onDraggingChange, onSnapPointsChange: onSnapPointsChange, onSelect: onSelect, registerContextMenuOpen: registerContextMenuOpen, scale: scale, layoutTarget: targetsByKey.get(outline.key) }, outline.key))), outlinesForEditingHandles.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineEditingHandles_1.SelectedOutlineEditingHandles, { dragging: dragging, getAllRotationDragTargets: getAllRotationDragTargets, getAllScaleDragTargets: getAllScaleDragTargets, getContextMenuOpenByKey: getContextMenuOpenByKey, getLatestTargetByKey: getLatestOutlineTargetByKey, layoutTarget: targetsByKey.get(outline.key), onContextMenuOpenChange: onContextMenuOpenChange, onDraggingChange: onDraggingChange, onSelect: onSelect, outline: outline }, `${outline.key}-editing-handles`))), outlinesForUvHandles.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineUvControls_1.SelectedOutlineUvHandleConnectionLayer, { outline: outline, layoutTarget: targetsByKey.get(outline.key) }, `${outline.key}-uv-connection-lines`))), outlinesForUvHandles.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineUvControls_1.SelectedOutlineUvHandleCircleLayer, { onDraggingChange: onDraggingChange, onSelect: onSelect, outline: outline, layoutTarget: targetsByKey.get(outline.key) }, `${outline.key}-uv-handles`))), outlinesForTransformOrigin.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineTransformOriginHandle_1.SelectedOutlineTransformOriginHandle, { outline: outline, onDraggingChange: onDraggingChange, getLatestTargetByKey: getLatestOutlineTargetByKey, layoutTarget: targetsByKey.get(outline.key) }, `${outline.key}-transform-origin`)))] }));
161
+ jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: overlayRef, getItems: getDelegatedContextMenuItems, onOpenChange: onContextMenuOpenChange }), jsx_runtime_1.jsx(SelectedOutlineSnapIndicators_1.SelectedOutlineSnapIndicators, { compositionHeight: compositionHeight, compositionWidth: compositionWidth, scale: scale, updateSnapPointsRef: updateSnapPointsRef }), outlinesForRendering.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineElement_1.SelectedOutlineElement, { compositionHeight: compositionHeight, compositionWidth: compositionWidth, dragging: dragging, getAllDragOutlines: getAllDragOutlines, getAllDragTargets: getAllDragTargets, getLatestTargetByKey: getLatestOutlineTargetByKey, outline: outline, onDraggingChange: onDraggingChange, onSnapPointsChange: onSnapPointsChange, onSelect: onSelect, registerContextMenuOpen: registerContextMenuOpen, scale: scale, layoutTarget: targetsByKey.get(outline.key) }, outline.key))), outlinesForRendering.map((outline) => {
162
+ var _a;
163
+ var _b;
164
+ const target = targetsByKey.get(outline.key);
165
+ const pathDrag = (target === null || target === void 0 ? void 0 : target.selected)
166
+ ? ((_b = (_a = getLatestOutlineTargetByKey(outline.key)) === null || _a === void 0 ? void 0 : _a.pathDrag) !== null && _b !== void 0 ? _b : null)
167
+ : null;
168
+ return outline.path !== null && pathDrag !== null ? (jsx_runtime_1.jsx(SelectedOutlinePathPoints_1.SelectedOutlinePathPoints, { outline: outline, pathDrag: pathDrag, onDraggingChange: onDraggingChange }, `${outline.key}-path-points`)) : null;
169
+ }), outlinesForEditingHandles.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineEditingHandles_1.SelectedOutlineEditingHandles, { dragging: dragging, getAllRotationDragTargets: getAllRotationDragTargets, getAllScaleDragTargets: getAllScaleDragTargets, getContextMenuOpenByKey: getContextMenuOpenByKey, getLatestTargetByKey: getLatestOutlineTargetByKey, layoutTarget: targetsByKey.get(outline.key), onContextMenuOpenChange: onContextMenuOpenChange, onDraggingChange: onDraggingChange, onSelect: onSelect, outline: outline }, `${outline.key}-editing-handles`))), outlinesForUvHandles.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineUvControls_1.SelectedOutlineUvHandleConnectionLayer, { outline: outline, layoutTarget: targetsByKey.get(outline.key) }, `${outline.key}-uv-connection-lines`))), outlinesForUvHandles.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineUvControls_1.SelectedOutlineUvHandleCircleLayer, { onDraggingChange: onDraggingChange, onSelect: onSelect, outline: outline, layoutTarget: targetsByKey.get(outline.key) }, `${outline.key}-uv-handles`))), outlinesForTransformOrigin.map((outline) => (jsx_runtime_1.jsx(SelectedOutlineTransformOriginHandle_1.SelectedOutlineTransformOriginHandle, { outline: outline, onDraggingChange: onDraggingChange, getLatestTargetByKey: getLatestOutlineTargetByKey, layoutTarget: targetsByKey.get(outline.key) }, `${outline.key}-transform-origin`)))] }));
274
170
  };
275
171
  exports.SelectedOutlineRenderer = react_1.default.memo(SelectedOutlineRendererUnmemoized);
@@ -1,6 +1,12 @@
1
1
  import React from 'react';
2
2
  import { type SelectedOutlineSnapPoint } from './selected-outline-snap';
3
3
  export type UpdateSelectedOutlineSnapPoints = (snapPoints: readonly SelectedOutlineSnapPoint[]) => void;
4
+ export declare const SelectedOutlineSnapLines: React.FC<{
5
+ readonly compositionHeight: number;
6
+ readonly compositionWidth: number;
7
+ readonly scale: number;
8
+ readonly snapPoints: readonly SelectedOutlineSnapPoint[];
9
+ }>;
4
10
  export declare const SelectedOutlineSnapIndicators: React.FC<{
5
11
  readonly compositionHeight: number;
6
12
  readonly compositionWidth: number;
@@ -1,9 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SelectedOutlineSnapIndicators = void 0;
3
+ exports.SelectedOutlineSnapIndicators = exports.SelectedOutlineSnapLines = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const selected_outline_snap_1 = require("./selected-outline-snap");
7
+ const SelectedOutlineSnapLines = ({ compositionHeight, compositionWidth, scale, snapPoints }) => {
8
+ if (snapPoints.length === 0) {
9
+ return null;
10
+ }
11
+ return (jsx_runtime_1.jsx("g", { pointerEvents: "none", children: snapPoints.map((snapPoint) => {
12
+ if (snapPoint.target.axis === 'x') {
13
+ const x = snapPoint.target.position * scale;
14
+ return (jsx_runtime_1.jsx("line", { x1: x, x2: x, y1: 0, y2: compositionHeight * scale, stroke: selected_outline_snap_1.selectedOutlineSnapIndicatorColor, strokeWidth: 1, vectorEffect: "non-scaling-stroke" }, `${snapPoint.target.axis}-${snapPoint.target.type}-${snapPoint.target.position}-${snapPoint.edge}`));
15
+ }
16
+ const y = snapPoint.target.position * scale;
17
+ return (jsx_runtime_1.jsx("line", { x1: 0, x2: compositionWidth * scale, y1: y, y2: y, stroke: selected_outline_snap_1.selectedOutlineSnapIndicatorColor, strokeWidth: 1, vectorEffect: "non-scaling-stroke" }, `${snapPoint.target.axis}-${snapPoint.target.type}-${snapPoint.target.position}-${snapPoint.edge}`));
18
+ }) }));
19
+ };
20
+ exports.SelectedOutlineSnapLines = SelectedOutlineSnapLines;
7
21
  const SelectedOutlineSnapIndicators = ({ compositionHeight, compositionWidth, scale, updateSnapPointsRef }) => {
8
22
  const [activeSnapPoints, setActiveSnapPoints] = (0, react_1.useState)([]);
9
23
  (0, react_1.useLayoutEffect)(() => {
@@ -14,16 +28,6 @@ const SelectedOutlineSnapIndicators = ({ compositionHeight, compositionWidth, sc
14
28
  }
15
29
  };
16
30
  }, [updateSnapPointsRef]);
17
- if (activeSnapPoints.length === 0) {
18
- return null;
19
- }
20
- return (jsx_runtime_1.jsx("g", { pointerEvents: "none", children: activeSnapPoints.map((snapPoint) => {
21
- if (snapPoint.target.axis === 'x') {
22
- const x = snapPoint.target.position * scale;
23
- return (jsx_runtime_1.jsx("line", { x1: x, x2: x, y1: 0, y2: compositionHeight * scale, stroke: selected_outline_snap_1.selectedOutlineSnapIndicatorColor, strokeWidth: 1, vectorEffect: "non-scaling-stroke" }, `${snapPoint.target.axis}-${snapPoint.target.type}-${snapPoint.target.position}-${snapPoint.edge}`));
24
- }
25
- const y = snapPoint.target.position * scale;
26
- return (jsx_runtime_1.jsx("line", { x1: 0, x2: compositionWidth * scale, y1: y, y2: y, stroke: selected_outline_snap_1.selectedOutlineSnapIndicatorColor, strokeWidth: 1, vectorEffect: "non-scaling-stroke" }, `${snapPoint.target.axis}-${snapPoint.target.type}-${snapPoint.target.position}-${snapPoint.edge}`));
27
- }) }));
31
+ return (jsx_runtime_1.jsx(exports.SelectedOutlineSnapLines, { compositionHeight: compositionHeight, compositionWidth: compositionWidth, scale: scale, snapPoints: activeSnapPoints }));
28
32
  };
29
33
  exports.SelectedOutlineSnapIndicators = SelectedOutlineSnapIndicators;
@@ -48,6 +48,7 @@ const selected_outline_measurement_1 = require("./selected-outline-measurement")
48
48
  const selected_outline_types_1 = require("./selected-outline-types");
49
49
  const selected_outline_uv_1 = require("./selected-outline-uv");
50
50
  const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
51
+ const get_timeline_keyframes_1 = require("./Timeline/get-timeline-keyframes");
51
52
  const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
52
53
  const timeline_rotation_utils_1 = require("./Timeline/timeline-rotation-utils");
53
54
  const timeline_translate_utils_1 = require("./Timeline/timeline-translate-utils");
@@ -183,7 +184,7 @@ const SelectedOutlineTransformOriginHandle = ({ getLatestTargetByKey, layoutTarg
183
184
  setDragOverrides(transformOriginDrag.nodePath, selected_outline_types_1.transformOriginFieldKey, transformOriginDrag.originPropStatus.status === 'keyframed'
184
185
  ? remotion_1.Internals.makeKeyframedDragOverride({
185
186
  status: transformOriginDrag.originPropStatus,
186
- frame: transformOriginDrag.sourceFrame,
187
+ frame: (0, get_timeline_keyframes_1.resolveKeyframeSourceFrame)(transformOriginDrag.sourceFrame, transformOriginDrag.originPropStatus),
187
188
  value: origin,
188
189
  })
189
190
  : remotion_1.Internals.makeStaticDragOverride(origin));
@@ -191,7 +192,7 @@ const SelectedOutlineTransformOriginHandle = ({ getLatestTargetByKey, layoutTarg
191
192
  ? transformOriginDrag.originPropStatus.status === 'keyframed'
192
193
  ? remotion_1.Internals.makeKeyframedDragOverride({
193
194
  status: transformOriginDrag.translatePropStatus,
194
- frame: transformOriginDrag.sourceFrame,
195
+ frame: (0, get_timeline_keyframes_1.resolveKeyframeSourceFrame)(transformOriginDrag.sourceFrame, transformOriginDrag.translatePropStatus),
195
196
  value: translate,
196
197
  })
197
198
  : {
@@ -47,6 +47,7 @@ const selected_outline_measurement_1 = require("./selected-outline-measurement")
47
47
  const selected_outline_measurement_2 = require("./selected-outline-measurement");
48
48
  const selected_outline_uv_1 = require("./selected-outline-uv");
49
49
  const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
50
+ const get_timeline_keyframes_1 = require("./Timeline/get-timeline-keyframes");
50
51
  const save_effect_prop_1 = require("./Timeline/save-effect-prop");
51
52
  const TimelineSelection_1 = require("./Timeline/TimelineSelection");
52
53
  const getSvgPointFromPointerEvent = ({ event, rect, }) => {
@@ -113,7 +114,7 @@ const saveNumericEffectField = ({ clearEffectDragOverrides, clientId, effectInde
113
114
  nodePath,
114
115
  effectIndex,
115
116
  fieldKey: field.fieldKey,
116
- sourceFrame,
117
+ sourceFrame: (0, get_timeline_keyframes_1.resolveKeyframeSourceFrame)(sourceFrame, field.propStatus),
117
118
  value: lastValue,
118
119
  schema,
119
120
  setPropStatuses,
@@ -200,7 +201,7 @@ const SelectedUvEllipseStartHandle = ({ control, onDraggingChange, outline }) =>
200
201
  setEffectDragOverrides(control.handle.nodePath, control.handle.effectIndex, field.fieldKey, field.propStatus.status === 'keyframed'
201
202
  ? remotion_1.Internals.makeKeyframedDragOverride({
202
203
  status: field.propStatus,
203
- frame: control.handle.sourceFrame,
204
+ frame: (0, get_timeline_keyframes_1.resolveKeyframeSourceFrame)(control.handle.sourceFrame, field.propStatus),
204
205
  value: nextValue,
205
206
  })
206
207
  : remotion_1.Internals.makeStaticDragOverride(nextValue));
@@ -300,7 +301,7 @@ const SelectedUvEllipseResizeHandle = ({ axis, control, onDraggingChange, outlin
300
301
  setEffectDragOverrides(control.handle.nodePath, control.handle.effectIndex, field.fieldKey, field.propStatus.status === 'keyframed'
301
302
  ? remotion_1.Internals.makeKeyframedDragOverride({
302
303
  status: field.propStatus,
303
- frame: control.handle.sourceFrame,
304
+ frame: (0, get_timeline_keyframes_1.resolveKeyframeSourceFrame)(control.handle.sourceFrame, field.propStatus),
304
305
  value: nextValue,
305
306
  })
306
307
  : remotion_1.Internals.makeStaticDragOverride(nextValue));
@@ -431,7 +432,7 @@ const SelectedUvEllipseRotationHandle = ({ control, onDraggingChange }) => {
431
432
  setEffectDragOverrides(control.handle.nodePath, control.handle.effectIndex, field.fieldKey, field.propStatus.status === 'keyframed'
432
433
  ? remotion_1.Internals.makeKeyframedDragOverride({
433
434
  status: field.propStatus,
434
- frame: control.handle.sourceFrame,
435
+ frame: (0, get_timeline_keyframes_1.resolveKeyframeSourceFrame)(control.handle.sourceFrame, field.propStatus),
435
436
  value: nextValue,
436
437
  })
437
438
  : remotion_1.Internals.makeStaticDragOverride(nextValue));
@@ -575,7 +576,7 @@ const SelectedUvHandleCircle = ({ handle, nodePathInfo, onDraggingChange, onSele
575
576
  setEffectDragOverrides(handle.nodePath, handle.effectIndex, handle.fieldKey, handle.propStatus.status === 'keyframed'
576
577
  ? remotion_1.Internals.makeKeyframedDragOverride({
577
578
  status: handle.propStatus,
578
- frame: handle.sourceFrame,
579
+ frame: (0, get_timeline_keyframes_1.resolveKeyframeSourceFrame)(handle.sourceFrame, handle.propStatus),
579
580
  value: nextValue,
580
581
  })
581
582
  : remotion_1.Internals.makeStaticDragOverride(nextValue));
@@ -624,7 +625,7 @@ const SelectedUvHandleCircle = ({ handle, nodePathInfo, onDraggingChange, onSele
624
625
  nodePath: handle.nodePath,
625
626
  effectIndex: handle.effectIndex,
626
627
  fieldKey: handle.fieldKey,
627
- sourceFrame: handle.sourceFrame,
628
+ sourceFrame: (0, get_timeline_keyframes_1.resolveKeyframeSourceFrame)(handle.sourceFrame, handle.propStatus),
628
629
  value: lastValue,
629
630
  schema: handle.schema,
630
631
  setPropStatuses,
@@ -684,7 +685,11 @@ const useSelectedOutlineUvTarget = (layoutTarget) => {
684
685
  nodePath: layoutTarget.nodePathInfo.sequenceSubscriptionKey,
685
686
  selectedEffects: selectedEffectsBySequenceKey.get(layoutTarget.key),
686
687
  sequence: layoutTarget.sequence,
687
- sourceFrame: timelinePosition - layoutTarget.keyframeDisplayOffset,
688
+ sourceFrame: {
689
+ displayFrame: timelinePosition,
690
+ keyframeDisplayOffset: layoutTarget.keyframeDisplayOffset,
691
+ keyframePlaybackRate: layoutTarget.keyframePlaybackRate,
692
+ },
688
693
  }),
689
694
  };
690
695
  }, [
@@ -1,4 +1,7 @@
1
1
  import type { OverrideIdToNodePaths, TSequence } from 'remotion';
2
+ export declare const OverrideIdToNodePathMappingsRefContext: import("react").Context<{
3
+ readonly current: OverrideIdToNodePaths;
4
+ }>;
2
5
  export declare const getReadOnlyOverrideIdToNodePathMappings: (sequences: readonly TSequence[]) => OverrideIdToNodePaths;
3
6
  export declare const SequencePropsSubscriptionProvider: React.FC<{
4
7
  readonly children: React.ReactNode;
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SequencePropsSubscriptionProvider = exports.getReadOnlyOverrideIdToNodePathMappings = void 0;
3
+ exports.SequencePropsSubscriptionProvider = exports.getReadOnlyOverrideIdToNodePathMappings = exports.OverrideIdToNodePathMappingsRefContext = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const remotion_1 = require("remotion");
7
+ exports.OverrideIdToNodePathMappingsRefContext = (0, react_1.createContext)({ current: {} });
7
8
  const getReadOnlyOverrideIdToNodePathMappings = (sequences) => {
8
9
  return Object.fromEntries(sequences.flatMap((sequence) => {
9
10
  var _a;
@@ -32,6 +33,9 @@ const SequencePropsSubscriptionProvider = ({ children }) => {
32
33
  const readOnlyOverrideToNodePathMap = (0, react_1.useMemo)(() => window.remotion_isReadOnlyStudio
33
34
  ? (0, exports.getReadOnlyOverrideIdToNodePathMappings)(sequences)
34
35
  : null, [sequences]);
36
+ const overrideIdToNodePathMappings = readOnlyOverrideToNodePathMap !== null && readOnlyOverrideToNodePathMap !== void 0 ? readOnlyOverrideToNodePathMap : overrideToNodePathMap;
37
+ const overrideIdToNodePathMappingsRef = (0, react_1.useRef)(overrideIdToNodePathMappings);
38
+ overrideIdToNodePathMappingsRef.current = overrideIdToNodePathMappings;
35
39
  const setOverrideIdToNodePath = (0, react_1.useCallback)((overrideId, state) => {
36
40
  setOverrideIdToNodePathMap((prev) => {
37
41
  const existing = prev[overrideId];
@@ -50,13 +54,11 @@ const SequencePropsSubscriptionProvider = ({ children }) => {
50
54
  });
51
55
  }, []);
52
56
  const getters = (0, react_1.useMemo)(() => {
53
- return {
54
- overrideIdToNodePathMappings: readOnlyOverrideToNodePathMap !== null && readOnlyOverrideToNodePathMap !== void 0 ? readOnlyOverrideToNodePathMap : overrideToNodePathMap,
55
- };
56
- }, [overrideToNodePathMap, readOnlyOverrideToNodePathMap]);
57
+ return { overrideIdToNodePathMappings };
58
+ }, [overrideIdToNodePathMappings]);
57
59
  const setters = (0, react_1.useMemo)(() => {
58
60
  return { setOverrideIdToNodePath };
59
61
  }, [setOverrideIdToNodePath]);
60
- return (jsx_runtime_1.jsx(remotion_1.Internals.OverrideIdsToNodePathsGettersContext.Provider, { value: getters, children: jsx_runtime_1.jsx(remotion_1.Internals.OverrideIdsToNodePathsSettersContext.Provider, { value: setters, children: children }) }));
62
+ return (jsx_runtime_1.jsx(exports.OverrideIdToNodePathMappingsRefContext.Provider, { value: overrideIdToNodePathMappingsRef, children: jsx_runtime_1.jsx(remotion_1.Internals.OverrideIdsToNodePathsGettersContext.Provider, { value: getters, children: jsx_runtime_1.jsx(remotion_1.Internals.OverrideIdsToNodePathsSettersContext.Provider, { value: setters, children: children }) }) }));
61
63
  };
62
64
  exports.SequencePropsSubscriptionProvider = SequencePropsSubscriptionProvider;
@@ -8,6 +8,7 @@ const can_show_updates_1 = require("../helpers/can-show-updates");
8
8
  const client_id_1 = require("../helpers/client-id");
9
9
  const settings_tab_availability_1 = require("../helpers/settings-tab-availability");
10
10
  const apps_1 = require("../icons/apps");
11
+ const browse_elements_1 = require("../icons/browse-elements");
11
12
  const cloud_download_1 = require("../icons/cloud-download");
12
13
  const keyboard_1 = require("../icons/keyboard");
13
14
  const license_1 = require("../icons/license");
@@ -19,6 +20,7 @@ const video_1 = require("../icons/video");
19
20
  const modals_1 = require("../state/modals");
20
21
  const ConfigureDefaultEditorModal_1 = require("./ConfigureDefaultEditorModal");
21
22
  const ConfigureLicenseModal_1 = require("./ConfigureLicenseModal");
23
+ const ElementLibrariesSettings_1 = require("./ElementLibrariesSettings");
22
24
  const InstallPackage_1 = require("./InstallPackage");
23
25
  const KeyboardShortcutsSettings_1 = require("./KeyboardShortcutsSettings");
24
26
  const is_menu_item_1 = require("./Menu/is-menu-item");
@@ -63,6 +65,20 @@ const keyboardIcon = {
63
65
  height: 16,
64
66
  width: 16,
65
67
  };
68
+ const elementsIcon = {
69
+ ...render_modals_1.icon,
70
+ flexShrink: 0,
71
+ height: 22,
72
+ width: 22,
73
+ };
74
+ const elementsIconContainer = {
75
+ ...render_modals_1.iconContainer,
76
+ flexShrink: 0,
77
+ height: 22,
78
+ marginLeft: -2,
79
+ marginRight: 6,
80
+ width: 22,
81
+ };
66
82
  const SettingsModal = ({ initialPublicLicenseKey, initialTab }) => {
67
83
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
68
84
  const { setPublicLicenseKey } = (0, SettingsContext_1.useSettings)();
@@ -93,6 +109,7 @@ const SettingsModal = ({ initialPublicLicenseKey, initialTab }) => {
93
109
  }), [isBrowserStudio, packageManager, previewServerConnected, showUpdates]);
94
110
  const safeInitialTab = (0, settings_tab_availability_1.getSafeSettingsTab)(initialTab, availableTabs);
95
111
  const [tab, setTab] = (0, react_1.useState)(safeInitialTab);
112
+ const [studioPane, setStudioPane] = (0, react_1.useState)('general');
96
113
  const [openedTabs, setOpenedTabs] = (0, react_1.useState)([safeInitialTab]);
97
114
  const [packagesFooterContainer, setPackagesFooterContainer] = (0, react_1.useState)(null);
98
115
  const dismiss = (0, react_1.useCallback)(() => {
@@ -118,13 +135,23 @@ const SettingsModal = ({ initialPublicLicenseKey, initialTab }) => {
118
135
  }, [initialPublicLicenseKey, setPublicLicenseKey]);
119
136
  return (jsx_runtime_1.jsx(DismissableModal_1.DismissableModal, { panelStyle: render_modals_1.outerModalStyle, children: jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
120
137
  jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: "Settings", onClose: dismiss }), jsx_runtime_1.jsxs("div", { style: render_modals_1.horizontalLayout, children: [
121
- jsx_runtime_1.jsxs("div", { style: settingsLeftSidebar, children: [availableTabs.includes('studio') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'studio', onClick: () => selectTab('studio'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(remotion_triangle_1.RemotionTriangleIcon, { color: color, style: render_modals_1.icon }) })), children: "Studio" })) : null, availableTabs.includes('rendering') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'rendering', onClick: () => selectTab('rendering'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(video_1.FilmIcon, { color: color, style: render_modals_1.icon }) })), children: "Defaults" })) : null, jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'shortcuts', onClick: () => selectTab('shortcuts'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(keyboard_1.KeyboardIcon, { color: color, style: keyboardIcon }) })), children: "Shortcuts" }), availableTabs.includes('packages') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'packages', onClick: () => selectTab('packages'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(package_1.PackageIcon, { color: color, style: render_modals_1.icon }) })), children: "Packages" })) : null, availableTabs.includes('skills') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'skills', onClick: () => selectTab('skills'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(skills_1.SkillsIcon, { color: color, style: skillsIcon }) })), children: "Skills" })) : null, availableTabs.includes('models') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'models', onClick: () => selectTab('models'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(models_1.ModelsIcon, { color: color, style: render_modals_1.icon }) })), children: "Models" })) : null, availableTabs.includes('apps') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'apps', onClick: () => selectTab('apps'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(apps_1.AppsIcon, { color: color, style: appsIcon }) })), children: "Apps" })) : null, availableTabs.includes('license') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'license', onClick: () => selectTab('license'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(license_1.LicenseIcon, { color: color, style: render_modals_1.icon }) })), children: "License" })) : null, availableTabs.includes('updates') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'updates', onClick: () => selectTab('updates'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(cloud_download_1.CloudDownloadIcon, { color: color, style: render_modals_1.icon }) })), children: "Updates" })) : null] }), availableTabs.includes('packages') &&
138
+ jsx_runtime_1.jsxs("div", { style: settingsLeftSidebar, children: [availableTabs.includes('studio') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'studio' && studioPane === 'general', onClick: () => {
139
+ selectTab('studio');
140
+ setStudioPane('general');
141
+ }, renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(remotion_triangle_1.RemotionTriangleIcon, { color: color, style: render_modals_1.icon }) })), children: "Studio" })) : null, availableTabs.includes('rendering') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'rendering', onClick: () => selectTab('rendering'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(video_1.FilmIcon, { color: color, style: render_modals_1.icon }) })), children: "Defaults" })) : null, jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'shortcuts', onClick: () => selectTab('shortcuts'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(keyboard_1.KeyboardIcon, { color: color, style: keyboardIcon }) })), children: "Shortcuts" }), availableTabs.includes('packages') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'packages', onClick: () => selectTab('packages'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(package_1.PackageIcon, { color: color, style: render_modals_1.icon }) })), children: "Packages" })) : null, availableTabs.includes('skills') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'skills', onClick: () => selectTab('skills'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(skills_1.SkillsIcon, { color: color, style: skillsIcon }) })), children: "Skills" })) : null, availableTabs.includes('studio') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'studio' && studioPane === 'elements', onClick: () => {
142
+ selectTab('studio');
143
+ setStudioPane('elements');
144
+ }, renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: elementsIconContainer, children: jsx_runtime_1.jsx(browse_elements_1.BrowseElementsIcon, { color: color, style: elementsIcon }) })), children: "Elements" })) : null, availableTabs.includes('models') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'models', onClick: () => selectTab('models'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(models_1.ModelsIcon, { color: color, style: render_modals_1.icon }) })), children: "Models" })) : null, availableTabs.includes('apps') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'apps', onClick: () => selectTab('apps'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(apps_1.AppsIcon, { color: color, style: appsIcon }) })), children: "Apps" })) : null, availableTabs.includes('license') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'license', onClick: () => selectTab('license'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(license_1.LicenseIcon, { color: color, style: render_modals_1.icon }) })), children: "License" })) : null, availableTabs.includes('updates') ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'updates', onClick: () => selectTab('updates'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(cloud_download_1.CloudDownloadIcon, { color: color, style: render_modals_1.icon }) })), children: "Updates" })) : null] }), availableTabs.includes('packages') &&
122
145
  openedTabs.includes('packages') ? (jsx_runtime_1.jsx("div", { style: tab === 'packages' ? render_modals_1.optionsPanel : hiddenPanel, children: jsx_runtime_1.jsx(InstallPackage_1.InstallPackageSettings, { footerContainer: packagesFooterContainer, packageManager: packageManager }) })) : null, availableTabs.includes('apps') && openedTabs.includes('apps') ? (jsx_runtime_1.jsx("div", { style: tab === 'apps' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(ConfigureDefaultEditorModal_1.DefaultEditorSettings, {}) })) : null, availableTabs.includes('models') && openedTabs.includes('models') ? (jsx_runtime_1.jsx("div", { style: tab === 'models' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(ModelsSettings_1.ModelsSettings, {}) })) : null, availableTabs.includes('license') &&
123
146
  openedTabs.includes('license') ? (jsx_runtime_1.jsx("div", { style: tab === 'license' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(ConfigureLicenseModal_1.LicenseSettings, {}) })) : null, availableTabs.includes('skills') && openedTabs.includes('skills') ? (jsx_runtime_1.jsx("div", { style: tab === 'skills' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(SkillsSettings_1.SkillsSettings, {}) })) : null, openedTabs.includes('shortcuts') ? (jsx_runtime_1.jsx("div", { style: tab === 'shortcuts' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(KeyboardShortcutsSettings_1.KeyboardShortcutsSettings, {}) })) : null, availableTabs.includes('rendering') &&
124
- openedTabs.includes('rendering') ? (jsx_runtime_1.jsx("div", { style: tab === 'rendering' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(RenderingSettings_1.RenderingSettings, {}) })) : null, availableTabs.includes('studio') && openedTabs.includes('studio') ? (jsx_runtime_1.jsx("div", { style: tab === 'studio' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(StudioSettings_1.StudioSettings, {}) })) : null, availableTabs.includes('updates') &&
147
+ openedTabs.includes('rendering') ? (jsx_runtime_1.jsx("div", { style: tab === 'rendering' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(RenderingSettings_1.RenderingSettings, {}) })) : null, availableTabs.includes('studio') && openedTabs.includes('studio') ? (jsx_runtime_1.jsx("div", { style: tab === 'studio' && studioPane === 'general'
148
+ ? settingsOptionsPanel
149
+ : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(StudioSettings_1.StudioSettings, {}) })) : null, availableTabs.includes('studio') && openedTabs.includes('studio') ? (jsx_runtime_1.jsx("div", { style: tab === 'studio' && studioPane === 'elements'
150
+ ? settingsOptionsPanel
151
+ : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(ElementLibrariesSettings_1.ElementLibrariesSettings, {}) })) : null, availableTabs.includes('updates') &&
125
152
  openedTabs.includes('updates') ? (jsx_runtime_1.jsx("div", { style: tab === 'updates' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(UpdatesSettings_1.UpdatesSettings, {}) })) : null] }), tab === 'packages' ? (jsx_runtime_1.jsx("div", { ref: setPackagesFooterContainer })) : !canEditConfig ||
126
153
  tab === 'models' ||
127
154
  tab === 'updates' ||
128
- tab === 'skills' ? null : (jsx_runtime_1.jsx(SettingsModalFooter_1.SettingsModalFooter, { showLicenseFaq: tab === 'license' }))] }) }));
155
+ tab === 'skills' ? null : (jsx_runtime_1.jsx(SettingsModalFooter_1.SettingsModalFooter, { showAboutElements: tab === 'studio' && studioPane === 'elements', showLicenseFaq: tab === 'license' }))] }) }));
129
156
  };
130
157
  exports.SettingsModal = SettingsModal;
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
2
  export declare const SettingsModalFooter: React.FC<{
3
+ readonly showAboutElements: boolean;
3
4
  readonly showLicenseFaq: boolean;
4
5
  }>;
@@ -44,7 +44,7 @@ const externalLinkIndicator = {
44
44
  verticalAlign: -2,
45
45
  width: 12,
46
46
  };
47
- const SettingsModalFooter = ({ showLicenseFaq }) => {
47
+ const SettingsModalFooter = ({ showAboutElements, showLicenseFaq }) => {
48
48
  const { restartRequired } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
49
49
  const [restarting, setRestarting] = (0, react_1.useState)(false);
50
50
  const configFileLocation = (0, react_1.useMemo)(() => {
@@ -57,6 +57,9 @@ const SettingsModalFooter = ({ showLicenseFaq }) => {
57
57
  const openLicenseFaq = (0, react_1.useCallback)(() => {
58
58
  window.open('https://www.remotion.dev/docs/license/faq', '_blank', 'noopener,noreferrer');
59
59
  }, []);
60
+ const openAboutElements = (0, react_1.useCallback)(() => {
61
+ window.open('https://www.remotion.dev/elements', '_blank', 'noopener,noreferrer');
62
+ }, []);
60
63
  const restart = (0, react_1.useCallback)(() => {
61
64
  setRestarting(true);
62
65
  (0, restart_studio_1.restartStudio)().catch((error) => {
@@ -67,8 +70,9 @@ const SettingsModalFooter = ({ showLicenseFaq }) => {
67
70
  return (jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { style: footer, children: jsx_runtime_1.jsxs("div", { style: footerRow, children: [
68
71
  jsx_runtime_1.jsx("div", { style: configFileHint, children: restartRequired ? ('Restart the server to apply changes') : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: ["Changes save to",
69
72
  jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(InspectorOpenInEditor_1.InspectorOpenInEditor, { locationType: null, location: configFileLocation, label: jsx_runtime_1.jsx("strong", { style: configFileName, children: "remotion.config.ts" }), showTooltips: false })
70
- ] })) }), restartRequired ? (jsx_runtime_1.jsx(ModalButton_1.ModalButton, { disabled: restarting, onClick: restart, size: "compact", title: "Restart Studio to apply config file changes", children: restarting ? 'Restarting...' : 'Restart Studio' })) : showLicenseFaq ? (jsx_runtime_1.jsxs(common_1.InspectorQuickAction, { disabled: false, onClick: openLicenseFaq, style: { flex: 'none', width: 'fit-content' }, title: "Open the Remotion License FAQ in a new tab", children: ["License FAQ",
71
- jsx_runtime_1.jsx("svg", { "aria-hidden": "true", viewBox: "0 0 16 16", style: externalLinkIndicator, children: jsx_runtime_1.jsx("path", { d: "M4 12 12 4M6 4h6v6", fill: "none", stroke: colors_1.CURRENT_COLOR, strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "1.5" }) })
73
+ ] })) }), restartRequired ? (jsx_runtime_1.jsx(ModalButton_1.ModalButton, { disabled: restarting, onClick: restart, size: "compact", title: "Restart Studio to apply config file changes", children: restarting ? 'Restarting...' : 'Restart Studio' })) : showLicenseFaq || showAboutElements ? (jsx_runtime_1.jsxs(common_1.InspectorQuickAction, { disabled: false, onClick: showLicenseFaq ? openLicenseFaq : openAboutElements, style: { flex: 'none', width: 'fit-content' }, title: showLicenseFaq
74
+ ? 'Open the Remotion License FAQ in a new tab'
75
+ : 'Open Remotion Elements in a new tab', children: [showLicenseFaq ? 'License FAQ' : 'About Elements', jsx_runtime_1.jsx("svg", { "aria-hidden": "true", viewBox: "0 0 16 16", style: externalLinkIndicator, children: jsx_runtime_1.jsx("path", { d: "M4 12 12 4M6 4h6v6", fill: "none", stroke: colors_1.CURRENT_COLOR, strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "1.5" }) })
72
76
  ] })) : null] }) }));
73
77
  };
74
78
  exports.SettingsModalFooter = SettingsModalFooter;
@@ -11,7 +11,7 @@ const ShowOutlinesProvider = ({ children }) => {
11
11
  const timelineSequenceHoverStore = (0, react_1.useMemo)(() => (0, timeline_sequence_hover_1.createTimelineSequenceHoverStore)(), []);
12
12
  (0, react_1.useEffect)(() => {
13
13
  const onPointerLeave = () => {
14
- timelineSequenceHoverStore.setHoveredSequence((hover) => (hover === null || hover === void 0 ? void 0 : hover.source) === 'timeline' ? null : hover);
14
+ timelineSequenceHoverStore.clear('timeline');
15
15
  };
16
16
  window.addEventListener('pointerleave', onPointerLeave);
17
17
  window.addEventListener(browserStudioPointerLeaveEvent, onPointerLeave);
@@ -1,7 +1,6 @@
1
1
  import type { GetRemotionSkillsInfoResponse } from '@remotion/studio-shared';
2
2
  import React from 'react';
3
3
  export declare const SkillSettingsRow: React.FC<{
4
- readonly isLast: boolean;
5
4
  readonly skill: GetRemotionSkillsInfoResponse['skills'][number];
6
5
  }>;
7
6
  export declare const SkillsSettings: React.FC;