@remotion/studio 4.0.527 → 4.0.529

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. package/dist/Studio.js +2 -0
  2. package/dist/components/AgentPrompt.js +3 -4
  3. package/dist/components/AppLaunchButton.d.ts +0 -1
  4. package/dist/components/AppLaunchButton.js +2 -5
  5. package/dist/components/AssetAudioVolume.js +2 -2
  6. package/dist/components/AssetSelectorItem.js +5 -5
  7. package/dist/components/AudioWaveform.d.ts +1 -0
  8. package/dist/components/AudioWaveform.js +10 -14
  9. package/dist/components/Button.d.ts +1 -1
  10. package/dist/components/Button.js +2 -2
  11. package/dist/components/CaptionInspector.js +1 -1
  12. package/dist/components/CaptionTextEditor.js +1 -1
  13. package/dist/components/CheckboardToggle.js +1 -1
  14. package/dist/components/CodeFrame.js +1 -1
  15. package/dist/components/CodingAgentButton.js +1 -1
  16. package/dist/components/ColorPicker/ColorPicker.d.ts +1 -1
  17. package/dist/components/ColorPicker/ColorPicker.js +2 -2
  18. package/dist/components/ColorPicker/ColorPickerPopup.js +1 -1
  19. package/dist/components/ColorPicker/checker.d.ts +1 -1
  20. package/dist/components/CompactExplanation.js +3 -3
  21. package/dist/components/CompositionSelectorItem.js +2 -2
  22. package/dist/components/ConfigSelect.js +1 -1
  23. package/dist/components/ConfigureDefaultEditorModal.js +2 -2
  24. package/dist/components/ControlButton.d.ts +0 -1
  25. package/dist/components/ControlButton.js +2 -2
  26. package/dist/components/CurrentAsset.js +4 -3
  27. package/dist/components/EditorRuler/Ruler.js +6 -3
  28. package/dist/components/EffectPickerModal.js +69 -43
  29. package/dist/components/ElementInstallConfirmation.js +3 -3
  30. package/dist/components/ElementLibrariesSettings.d.ts +2 -0
  31. package/dist/components/ElementLibrariesSettings.js +200 -0
  32. package/dist/components/ElementLibraryModal.js +1 -1
  33. package/dist/components/FramePersistor.js +3 -3
  34. package/dist/components/FullscreenToggle.js +1 -1
  35. package/dist/components/InitialCompositionLoader.js +5 -3
  36. package/dist/components/InlineAction.d.ts +2 -2
  37. package/dist/components/InlineAction.js +2 -3
  38. package/dist/components/InlineEditableTitle.d.ts +1 -1
  39. package/dist/components/InlineEditableTitle.js +3 -3
  40. package/dist/components/InspectorLocationCopy.js +1 -1
  41. package/dist/components/InspectorOpenInEditor.js +14 -3
  42. package/dist/components/InspectorPanel/AlignmentControls.js +31 -12
  43. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +1 -1
  44. package/dist/components/InspectorPanel/CompositionInspector.js +1 -5
  45. package/dist/components/InspectorPanel/CompositionMetadata.js +4 -4
  46. package/dist/components/InspectorPanel/EasingInspector.js +7 -3
  47. package/dist/components/InspectorPanel/ElementLibraryButton.js +3 -14
  48. package/dist/components/InspectorPanel/KeyframeEasingNavigator.js +6 -8
  49. package/dist/components/InspectorPanel/KeyframeInspector.js +29 -25
  50. package/dist/components/InspectorPanel/KeyframeSettings.js +16 -11
  51. package/dist/components/InspectorPanel/MultiSequenceField.js +1 -1
  52. package/dist/components/InspectorPanel/MultiSequenceInspector.js +2 -7
  53. package/dist/components/InspectorPanel/MultiSequenceNumberField.js +2 -2
  54. package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -1
  55. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +1 -1
  56. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +33 -14
  57. package/dist/components/InspectorPanel/SequenceWrapAction.d.ts +8 -0
  58. package/dist/components/InspectorPanel/SequenceWrapAction.js +143 -0
  59. package/dist/components/InspectorPanel/common.d.ts +6 -2
  60. package/dist/components/InspectorPanel/common.js +25 -9
  61. package/dist/components/InspectorPanel/easing-inspector-selection.d.ts +2 -1
  62. package/dist/components/InspectorPanel/easing-inspector-selection.js +4 -3
  63. package/dist/components/InspectorPanel/keyframe-inspector-frame.d.ts +2 -1
  64. package/dist/components/InspectorPanel/keyframe-inspector-frame.js +2 -2
  65. package/dist/components/InspectorSequenceSection.d.ts +1 -0
  66. package/dist/components/InspectorSequenceSection.js +12 -10
  67. package/dist/components/InspectorSourceLocation.js +2 -2
  68. package/dist/components/KeyboardShortcutsSettings.js +2 -2
  69. package/dist/components/LicenseKeyValidation.js +2 -2
  70. package/dist/components/LoopToggle.js +1 -1
  71. package/dist/components/Menu/MenuSubItem.js +4 -2
  72. package/dist/components/Menu/styles.d.ts +2 -2
  73. package/dist/components/MenuBuildIndicator.js +1 -1
  74. package/dist/components/MenuCompositionName.js +1 -1
  75. package/dist/components/Modals.js +7 -6
  76. package/dist/components/ModelManager.js +10 -9
  77. package/dist/components/MuteToggle.js +1 -1
  78. package/dist/components/NewComposition/CancelButton.js +10 -4
  79. package/dist/components/NewComposition/ComboBox.d.ts +1 -1
  80. package/dist/components/NewComposition/ComboBox.js +2 -2
  81. package/dist/components/NewComposition/DuplicateComposition.js +1 -1
  82. package/dist/components/NewComposition/InputDragger.d.ts +4 -2
  83. package/dist/components/NewComposition/InputDragger.js +29 -10
  84. package/dist/components/NewComposition/NewComposition.js +8 -7
  85. package/dist/components/NewComposition/RemInput.d.ts +1 -1
  86. package/dist/components/NewComposition/menu-typeahead.js +1 -1
  87. package/dist/components/OpenIssueButton.js +1 -1
  88. package/dist/components/OutlineToggle.js +1 -1
  89. package/dist/components/PlayPause.js +1 -1
  90. package/dist/components/PlaybackRateSelector.js +1 -1
  91. package/dist/components/PreviewToolbarOverflowButton.js +1 -1
  92. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -1
  93. package/dist/components/RenderButton.js +2 -4
  94. package/dist/components/RenderModal/InfoBubble.d.ts +1 -1
  95. package/dist/components/RenderModal/InfoBubble.js +2 -2
  96. package/dist/components/RenderModal/NumberSetting.js +1 -1
  97. package/dist/components/RenderModal/OptionExplainerBubble.js +2 -2
  98. package/dist/components/RenderModal/RenderModalAdvanced.js +2 -2
  99. package/dist/components/RenderModal/RenderModalAudio.js +2 -2
  100. package/dist/components/RenderModal/RenderModalBasic.js +3 -3
  101. package/dist/components/RenderModal/RenderModalEncoding.js +4 -4
  102. package/dist/components/RenderModal/RenderModalOutputName.js +1 -1
  103. package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +1 -1
  104. package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +1 -1
  105. package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +1 -1
  106. package/dist/components/RenderModal/SchemaEditor/ZodFieldValidation.js +1 -1
  107. package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
  108. package/dist/components/RenderModal/SchemaEditor/create-zod-values.js +1 -2
  109. package/dist/components/RenderModal/WebRenderModalAdvanced.js +2 -2
  110. package/dist/components/RenderModal/WebRenderModalAudio.js +2 -2
  111. package/dist/components/RenderModal/WebRenderModalBasic.js +3 -3
  112. package/dist/components/RenderModal/WebRenderModalPicture.js +2 -3
  113. package/dist/components/RenderQueue/CaptionQueueItem.js +14 -5
  114. package/dist/components/RenderQueue/CaptionQueueProcessor.js +30 -7
  115. package/dist/components/RenderQueue/QueueJobError.d.ts +8 -0
  116. package/dist/components/RenderQueue/QueueJobError.js +24 -0
  117. package/dist/components/RenderQueue/QueueJobErrorModal.d.ts +8 -0
  118. package/dist/components/RenderQueue/QueueJobErrorModal.js +63 -0
  119. package/dist/components/RenderQueue/RenderQueueError.js +1 -1
  120. package/dist/components/RenderQueue/RenderQueueItemCancelButton.d.ts +3 -1
  121. package/dist/components/RenderQueue/RenderQueueItemCancelButton.js +11 -4
  122. package/dist/components/RenderQueue/RenderQueueOutputName.js +1 -1
  123. package/dist/components/RenderQueue/RenderQueueProgressMessage.js +1 -1
  124. package/dist/components/RenderQueue/RenderQueueRepeat.d.ts +3 -1
  125. package/dist/components/RenderQueue/RenderQueueRepeat.js +20 -3
  126. package/dist/components/RenderQueue/VideoMattingQueueItem.js +24 -27
  127. package/dist/components/RenderQueue/VideoMattingQueueProcessor.js +68 -28
  128. package/dist/components/RenderQueue/caption-job-types.d.ts +3 -1
  129. package/dist/components/RenderQueue/context.d.ts +4 -0
  130. package/dist/components/RenderQueue/context.js +58 -8
  131. package/dist/components/RenderQueue/index.js +2 -3
  132. package/dist/components/RenderQueue/load-model-for-job.d.ts +2 -1
  133. package/dist/components/RenderQueue/load-model-for-job.js +5 -1
  134. package/dist/components/RenderQueue/video-matting-job-types.d.ts +13 -6
  135. package/dist/components/RenderingSettings.js +6 -6
  136. package/dist/components/RulersAndGuidesToggle.js +1 -1
  137. package/dist/components/SegmentedButton.d.ts +0 -2
  138. package/dist/components/SegmentedButton.js +6 -6
  139. package/dist/components/SelectedOutlineCropControls.js +2 -1
  140. package/dist/components/SelectedOutlineEditingHandles.js +9 -2
  141. package/dist/components/SelectedOutlineElement.js +9 -3
  142. package/dist/components/SelectedOutlineKeyboardControls.d.ts +2 -4
  143. package/dist/components/SelectedOutlineKeyboardControls.js +4 -22
  144. package/dist/components/SelectedOutlineOverlay.js +165 -106
  145. package/dist/components/SelectedOutlinePathPoints.d.ts +8 -0
  146. package/dist/components/SelectedOutlinePathPoints.js +457 -0
  147. package/dist/components/SelectedOutlinePolygon.js +21 -46
  148. package/dist/components/SelectedOutlineRenderer.d.ts +3 -5
  149. package/dist/components/SelectedOutlineRenderer.js +32 -136
  150. package/dist/components/SelectedOutlineTransformOriginHandle.js +3 -2
  151. package/dist/components/SelectedOutlineUvControls.js +12 -7
  152. package/dist/components/SettingsButton.js +1 -1
  153. package/dist/components/SettingsModal.js +30 -3
  154. package/dist/components/SettingsModalFooter.d.ts +1 -0
  155. package/dist/components/SettingsModalFooter.js +7 -3
  156. package/dist/components/ShowOutlinesProvider.js +1 -1
  157. package/dist/components/SizeSelector.js +1 -1
  158. package/dist/components/SkillsSettings.d.ts +0 -1
  159. package/dist/components/SkillsSettings.js +14 -15
  160. package/dist/components/SnappingToggle.js +1 -1
  161. package/dist/components/Splitter/SplitterElement.js +1 -2
  162. package/dist/components/StudioSettings.js +2 -2
  163. package/dist/components/TimeValue.js +2 -4
  164. package/dist/components/Timeline/EasingEditorModal.js +3 -3
  165. package/dist/components/Timeline/LoopedTimelineIndicators.d.ts +1 -0
  166. package/dist/components/Timeline/LoopedTimelineIndicators.js +7 -6
  167. package/dist/components/Timeline/TimelineArrayField.js +3 -3
  168. package/dist/components/Timeline/TimelineAssetField.js +3 -3
  169. package/dist/components/Timeline/TimelineClipboardKeybindings.js +0 -1
  170. package/dist/components/Timeline/TimelineColorField.js +3 -3
  171. package/dist/components/Timeline/TimelineDragHandler.js +3 -3
  172. package/dist/components/Timeline/TimelineDuplicateCount.js +1 -1
  173. package/dist/components/Timeline/TimelineEffectItem.js +1 -1
  174. package/dist/components/Timeline/TimelineEffectPropItem.d.ts +1 -0
  175. package/dist/components/Timeline/TimelineEffectPropItem.js +12 -5
  176. package/dist/components/Timeline/TimelineEnumField.js +1 -1
  177. package/dist/components/Timeline/TimelineExpandedRow.d.ts +1 -0
  178. package/dist/components/Timeline/TimelineExpandedRow.js +5 -4
  179. package/dist/components/Timeline/TimelineExpandedSection.d.ts +1 -0
  180. package/dist/components/Timeline/TimelineExpandedSection.js +2 -2
  181. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.d.ts +1 -0
  182. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +3 -1
  183. package/dist/components/Timeline/TimelineFieldLabel.js +1 -1
  184. package/dist/components/Timeline/TimelineFontFamilyField.js +14 -14
  185. package/dist/components/Timeline/TimelineFontWeightField.js +1 -1
  186. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +1 -0
  187. package/dist/components/Timeline/TimelineKeyframeControls.js +42 -31
  188. package/dist/components/Timeline/TimelineKeyframeDiamond.js +1 -1
  189. package/dist/components/Timeline/TimelineKeyframeEasingLine.js +1 -1
  190. package/dist/components/Timeline/TimelineLayerChildren.js +2 -2
  191. package/dist/components/Timeline/TimelineList.js +16 -8
  192. package/dist/components/Timeline/TimelineMediaInfo.js +1 -1
  193. package/dist/components/Timeline/TimelineNumberField.js +2 -4
  194. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +1 -1
  195. package/dist/components/Timeline/TimelineScaleField.js +1 -1
  196. package/dist/components/Timeline/TimelineSchemaField.js +2 -2
  197. package/dist/components/Timeline/TimelineSelection.d.ts +9 -9
  198. package/dist/components/Timeline/TimelineSelection.js +16 -9
  199. package/dist/components/Timeline/TimelineSequence.d.ts +3 -1
  200. package/dist/components/Timeline/TimelineSequence.js +40 -22
  201. package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
  202. package/dist/components/Timeline/TimelineSequenceItem.js +52 -24
  203. package/dist/components/Timeline/TimelineSequenceName.d.ts +1 -0
  204. package/dist/components/Timeline/TimelineSequenceName.js +38 -6
  205. package/dist/components/Timeline/TimelineSequencePropItem.d.ts +3 -0
  206. package/dist/components/Timeline/TimelineSequencePropItem.js +266 -27
  207. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +11 -13
  208. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +98 -77
  209. package/dist/components/Timeline/TimelineTextContentField.js +27 -4
  210. package/dist/components/Timeline/TimelineTimeIndicators.js +10 -5
  211. package/dist/components/Timeline/TimelineTrack.js +1 -1
  212. package/dist/components/Timeline/TimelineTrimTooltip.d.ts +11 -0
  213. package/dist/components/Timeline/TimelineTrimTooltip.js +41 -0
  214. package/dist/components/Timeline/TimelineVideoInfo.d.ts +1 -0
  215. package/dist/components/Timeline/TimelineVideoInfo.js +13 -10
  216. package/dist/components/Timeline/TimelineZoomControls.js +2 -2
  217. package/dist/components/Timeline/delete-selected-keyframe.js +22 -8
  218. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +1 -5
  219. package/dist/components/Timeline/delete-selected-timeline-item.js +7 -93
  220. package/dist/components/Timeline/get-animation-item-selection-for-frame.d.ts +2 -1
  221. package/dist/components/Timeline/get-animation-item-selection-for-frame.js +7 -5
  222. package/dist/components/Timeline/get-keyframed-sequence-drag-targets.d.ts +23 -0
  223. package/dist/components/Timeline/get-keyframed-sequence-drag-targets.js +57 -0
  224. package/dist/components/Timeline/get-node-keyframes.d.ts +2 -1
  225. package/dist/components/Timeline/get-node-keyframes.js +6 -4
  226. package/dist/components/Timeline/get-playback-rate-keyframe-changes.d.ts +21 -0
  227. package/dist/components/Timeline/get-playback-rate-keyframe-changes.js +142 -0
  228. package/dist/components/Timeline/get-sequence-split-menu-item.js +2 -2
  229. package/dist/components/Timeline/get-timeline-keyframes.d.ts +15 -2
  230. package/dist/components/Timeline/get-timeline-keyframes.js +44 -6
  231. package/dist/components/Timeline/keyframe-clipboard.js +17 -3
  232. package/dist/components/Timeline/split-selected-timeline-item.js +4 -1
  233. package/dist/components/Timeline/timeline-field-display-utils.js +1 -0
  234. package/dist/components/Timeline/timeline-field-row-layout.js +1 -0
  235. package/dist/components/Timeline/use-delete-timeline-items.js +17 -11
  236. package/dist/components/Timeline/use-expanded-track-keyframe-rows.d.ts +2 -1
  237. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +3 -1
  238. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +7 -3
  239. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +1 -1
  240. package/dist/components/Timeline/use-timeline-expanded-tree.js +3 -0
  241. package/dist/components/Timeline/use-timeline-keyframe-drag.js +28 -19
  242. package/dist/components/TimelineCombobox.d.ts +1 -1
  243. package/dist/components/TimelineCombobox.js +5 -6
  244. package/dist/components/TimelineInOutToggle.js +1 -1
  245. package/dist/components/Transcription/Models.js +1 -1
  246. package/dist/components/Transcription/TranscriptionModal.js +9 -7
  247. package/dist/components/Transcription/resample-media-to-16-khz.d.ts +2 -1
  248. package/dist/components/Transcription/resample-media-to-16-khz.js +20 -2
  249. package/dist/components/UndoRedoButtons.js +1 -1
  250. package/dist/components/UpdatesSettings.js +4 -2
  251. package/dist/components/VideoMatting/Models.js +1 -1
  252. package/dist/components/VideoMatting/VideoMattingModal.js +34 -51
  253. package/dist/components/VideoMatting/VideoMattingModalWithOptionalPackage.js +1 -1
  254. package/dist/components/WebMcp.js +22 -40
  255. package/dist/components/composition-drop-preview.js +1 -0
  256. package/dist/components/effect-drag-and-drop.d.ts +13 -5
  257. package/dist/components/effect-drag-and-drop.js +19 -4
  258. package/dist/components/get-open-in-menu-items.d.ts +2 -1
  259. package/dist/components/get-open-in-menu-items.js +17 -1
  260. package/dist/components/selected-outline-drag.d.ts +1 -6
  261. package/dist/components/selected-outline-drag.js +22 -6
  262. package/dist/components/selected-outline-geometry.d.ts +2 -18
  263. package/dist/components/selected-outline-measurement.d.ts +23 -41
  264. package/dist/components/selected-outline-measurement.js +14 -252
  265. package/dist/components/selected-outline-order.d.ts +4 -11
  266. package/dist/components/selected-outline-order.js +2 -254
  267. package/dist/components/selected-outline-snap.d.ts +1 -1
  268. package/dist/components/selected-outline-snap.js +2 -1
  269. package/dist/components/selected-outline-types.d.ts +20 -28
  270. package/dist/components/selected-outline-uv.d.ts +4 -4
  271. package/dist/components/selected-outline-uv.js +6 -111
  272. package/dist/components/sequence-props-api.js +0 -10
  273. package/dist/components/use-selected-outline-control-target.js +12 -21
  274. package/dist/components/wrap-jsx-node-api.d.ts +2 -0
  275. package/dist/components/wrap-jsx-node-api.js +13 -0
  276. package/dist/error-overlay/remotion-overlay/CompositionIdListItem.js +1 -1
  277. package/dist/error-overlay/remotion-overlay/OpenInEditor.js +46 -3
  278. package/dist/error-overlay/remotion-overlay/StackFrame.js +32 -3
  279. package/dist/esm/{CaptionQueueProcessor-npa6szn1.mjs → CaptionQueueProcessor-qj37c6r2.mjs} +63 -17
  280. package/dist/esm/LazyModels-rjsrgap5.mjs +12 -0
  281. package/dist/esm/LazyModels-rnbjx98t.mjs +12 -0
  282. package/dist/esm/{TranscriptionModal-79m5wgcj.mjs → TranscriptionModal-y7zeqj2d.mjs} +21 -21
  283. package/dist/esm/{VideoMattingModal-31pew0xj.mjs → VideoMattingModal-jzrkhah1.mjs} +51 -69
  284. package/dist/esm/{VideoMattingQueueProcessor-t1hgm2rm.mjs → VideoMattingQueueProcessor-4tkj0f4k.mjs} +69 -26
  285. package/dist/esm/{index-v4tr1bft.mjs → index-09txs1bj.mjs} +5 -0
  286. package/dist/esm/{index-e855w59j.mjs → index-19d05w9e.mjs} +3 -5
  287. package/dist/esm/index-24wge6y5.mjs +102 -0
  288. package/dist/esm/index-3qb54r5j.mjs +157 -0
  289. package/dist/esm/{index-n5gmcvhz.mjs → index-5ycb9e9q.mjs} +2 -4
  290. package/dist/esm/{index-s7qa3xbw.mjs → index-cakcjjy2.mjs} +7 -7
  291. package/dist/esm/{index-r1gr3j3a.mjs → index-dfy1t576.mjs} +50 -1
  292. package/dist/esm/{index-614tdz2q.mjs → index-f9hxt5yh.mjs} +3 -3
  293. package/dist/esm/{index-9x6e1dq0.mjs → index-hqxc6tzp.mjs} +40 -6
  294. package/dist/esm/{index-ac5550e7.mjs → index-jc22b2wb.mjs} +3 -3
  295. package/dist/esm/{index-5t2dwxsk.mjs → index-m01zjph7.mjs} +261 -25
  296. package/dist/esm/{index-ppspzgn9.mjs → index-m2a95v3p.mjs} +4904 -4951
  297. package/dist/esm/{index-9xxg6218.mjs → index-qve7mdfp.mjs} +19 -1
  298. package/dist/esm/{index-vxwg66ar.mjs → index-r9bj4tta.mjs} +47 -60
  299. package/dist/esm/{index-r0ejh5sy.mjs → index-vnc2wdfd.mjs} +44 -27
  300. package/dist/esm/{index-21hxsfaa.mjs → index-vtr5qzam.mjs} +6 -25
  301. package/dist/esm/{index-4zen9prq.mjs → index-x7kg7jqv.mjs} +6809 -5640
  302. package/dist/esm/index.mjs +4 -5
  303. package/dist/esm/internals.mjs +13 -13
  304. package/dist/esm/previewEntry.mjs +18 -15
  305. package/dist/esm/renderEntry.mjs +5 -1
  306. package/dist/helpers/calculate-timeline.d.ts +5 -1
  307. package/dist/helpers/calculate-timeline.js +1 -1
  308. package/dist/helpers/checkerboard-background.d.ts +2 -2
  309. package/dist/helpers/checkerboard-background.js +1 -1
  310. package/dist/helpers/colors.d.ts +131 -112
  311. package/dist/helpers/colors.js +121 -100
  312. package/dist/helpers/create-folder-tree.js +2 -1
  313. package/dist/helpers/editor-guide-selection.d.ts +1 -1
  314. package/dist/helpers/editor-ruler.js +23 -12
  315. package/dist/helpers/get-connected-compositions.d.ts +6 -1
  316. package/dist/helpers/get-connected-compositions.js +1 -1
  317. package/dist/helpers/get-sequence-double-click-action.js +1 -1
  318. package/dist/helpers/get-sequence-visible-range.d.ts +1 -1
  319. package/dist/helpers/get-sequence-visible-range.js +2 -5
  320. package/dist/helpers/get-timeline-nestedness.d.ts +1 -1
  321. package/dist/helpers/get-timeline-nestedness.js +1 -1
  322. package/dist/helpers/get-timeline-sequence-sort-key.d.ts +1 -1
  323. package/dist/helpers/get-timeline-sequence-sort-key.js +1 -1
  324. package/dist/helpers/hoverable.js +4 -4
  325. package/dist/helpers/inject-css.js +5 -7
  326. package/dist/helpers/prism-vsc-dark-plus.d.ts +1 -1
  327. package/dist/helpers/prism-vsc-dark-plus.js +52 -51
  328. package/dist/helpers/resolve-studio-color.d.ts +1 -0
  329. package/dist/helpers/resolve-studio-color.js +11 -0
  330. package/dist/helpers/studio-css-variables.d.ts +1 -0
  331. package/dist/helpers/studio-css-variables.js +104 -0
  332. package/dist/helpers/studio-pixel-ratio.d.ts +1 -0
  333. package/dist/helpers/studio-pixel-ratio.js +7 -0
  334. package/dist/helpers/timeline-node-path-key.d.ts +1 -1
  335. package/dist/helpers/timeline-node-path-key.js +2 -2
  336. package/dist/helpers/use-runtime-values.js +2 -28
  337. package/dist/hot-middleware-client/client.js +5 -3
  338. package/dist/icons/align-center-horizontal.js +2 -1
  339. package/dist/icons/align-left.js +2 -1
  340. package/dist/icons/align-right.js +2 -1
  341. package/dist/icons/{separation.d.ts → background-removal.d.ts} +1 -1
  342. package/dist/icons/background-removal.js +9 -0
  343. package/dist/icons/snowflake.js +1 -3
  344. package/dist/icons/{scissors.d.ts → split.d.ts} +1 -1
  345. package/dist/icons/split.js +8 -0
  346. package/dist/icons/trash.js +2 -2
  347. package/dist/icons/wrap.d.ts +4 -0
  348. package/dist/icons/wrap.js +10 -0
  349. package/dist/previewEntry.js +2 -0
  350. package/dist/renderEntry.js +2 -0
  351. package/dist/state/modals.d.ts +15 -1
  352. package/dist/state/timeline-sequence-hover.d.ts +6 -16
  353. package/dist/state/timeline-sequence-hover.js +6 -67
  354. package/package.json +20 -19
  355. package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.d.ts +0 -15
  356. package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.js +0 -31
  357. package/dist/esm/LazyModels-nh3c8h9p.mjs +0 -12
  358. package/dist/esm/LazyModels-rr5v8h5y.mjs +0 -12
  359. package/dist/esm/index-cw0pnpg5.mjs +0 -50
  360. package/dist/esm/index-k426ye99.mjs +0 -139
  361. package/dist/helpers/get-box-quads-polyfill-internals.d.ts +0 -82
  362. package/dist/helpers/get-box-quads-polyfill-internals.js +0 -2403
  363. package/dist/helpers/get-box-quads-ponyfill.d.ts +0 -10
  364. package/dist/helpers/get-box-quads-ponyfill.js +0 -23
  365. package/dist/icons/scissors.js +0 -8
  366. package/dist/icons/separation.js +0 -7
  367. /package/dist/esm/{resolve-composition-component-location-qrp05g62.mjs → resolve-composition-component-location-2hgf6g0a.mjs} +0 -0
@@ -6,19 +6,17 @@ const studio_shared_1 = require("@remotion/studio-shared");
6
6
  const react_1 = require("react");
7
7
  const colors_1 = require("../helpers/colors");
8
8
  const use_keybinding_1 = require("../helpers/use-keybinding");
9
- const effects_1 = require("../icons/effects");
10
9
  const external_link_1 = require("../icons/external-link");
11
10
  const modals_1 = require("../state/modals");
12
11
  const ContextMenu_1 = require("./ContextMenu");
13
12
  const effect_drag_and_drop_1 = require("./effect-drag-and-drop");
14
13
  const effect_picker_search_1 = require("./effect-picker-search");
15
- const layout_1 = require("./layout");
16
14
  const is_menu_item_1 = require("./Menu/is-menu-item");
17
15
  const DismissableModal_1 = require("./NewComposition/DismissableModal");
18
16
  const RemInput_1 = require("./NewComposition/RemInput");
19
17
  const shared_1 = require("./QuickSwitcher/shared");
20
18
  const container = {
21
- width: 400,
19
+ width: 440,
22
20
  };
23
21
  const panelStyle = {
24
22
  borderRadius: 6,
@@ -68,9 +66,13 @@ const aboutEffectsIcon = {
68
66
  width: 12,
69
67
  };
70
68
  const resultList = {
71
- height: 320,
69
+ height: 420,
70
+ display: 'grid',
71
+ gridTemplateColumns: 'repeat(3, minmax(0, 1fr))',
72
+ alignContent: 'start',
73
+ gap: 4,
72
74
  overflowY: 'auto',
73
- paddingBottom: 10,
75
+ padding: '0 12px 10px',
74
76
  };
75
77
  const noResults = {
76
78
  color: colors_1.LIGHT_TEXT,
@@ -80,40 +82,34 @@ const noResults = {
80
82
  const resultContainer = {
81
83
  cursor: 'default',
82
84
  display: 'flex',
83
- flexDirection: 'row',
84
- alignItems: 'center',
85
- paddingLeft: 16,
86
- paddingRight: 16,
87
- marginBottom: 1,
88
- marginLeft: 4,
89
- marginRight: 4,
85
+ flexDirection: 'column',
86
+ gap: 1,
87
+ padding: '3px 3px 1px',
88
+ minWidth: 0,
90
89
  borderRadius: 4,
91
90
  };
92
- const iconStyle = {
93
- width: 18,
94
- height: 18,
95
- flexShrink: 0,
96
- };
97
- const labelContainer = {
98
- flex: 1,
99
- minWidth: 0,
91
+ const previewFrame = {
92
+ width: '100%',
93
+ aspectRatio: '3 / 2',
94
+ position: 'relative',
95
+ backgroundColor: colors_1.WHITE_ALPHA_06,
96
+ borderRadius: 3,
100
97
  overflow: 'hidden',
101
- paddingTop: 5,
102
- paddingBottom: 5,
103
98
  };
104
- const label = {
105
- fontSize: shared_1.QUICK_SWITCHER_RESULT_LABEL_FONT_SIZE,
106
- overflow: 'hidden',
107
- textOverflow: 'ellipsis',
108
- whiteSpace: 'nowrap',
99
+ const preview = {
100
+ position: 'absolute',
101
+ inset: 0,
102
+ width: '100%',
103
+ height: '100%',
104
+ objectFit: 'cover',
109
105
  };
110
- const category = {
111
- color: colors_1.LIGHT_TEXT,
112
- fontSize: 11,
113
- flexShrink: 0,
106
+ const label = {
107
+ fontSize: shared_1.QUICK_SWITCHER_RESULT_LABEL_FONT_SIZE - 2,
108
+ overflowWrap: 'anywhere',
114
109
  };
115
110
  const EffectPickerResult = ({ item, selected, onSelected }) => {
116
111
  const [hovered, setHovered] = (0, react_1.useState)(false);
112
+ const [previewLoaded, setPreviewLoaded] = (0, react_1.useState)(false);
117
113
  const ref = (0, react_1.useRef)(null);
118
114
  (0, shared_1.useScrollIntoViewOnSelected)(ref, selected);
119
115
  const style = (0, react_1.useMemo)(() => {
@@ -151,7 +147,10 @@ const EffectPickerResult = ({ item, selected, onSelected }) => {
151
147
  ];
152
148
  }, [item]);
153
149
  return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: jsx_runtime_1.jsxs("div", { ref: ref, style: style, onClick: onClick, onMouseEnter: () => setHovered(true), onMouseLeave: () => setHovered(false), children: [
154
- jsx_runtime_1.jsx(effects_1.EffectsIcon, { color: selected || hovered ? colors_1.WHITE : colors_1.LIGHT_TEXT, style: iconStyle }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("div", { style: labelContainer, children: jsx_runtime_1.jsx("div", { style: labelStyle, children: item.label }) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("div", { style: category, children: item.category })
150
+ jsx_runtime_1.jsx("div", { style: previewFrame, children: jsx_runtime_1.jsx("img", { src: `https://www.remotion.dev${(0, studio_shared_1.getEffectPreviewSource)(item)}`, alt: (0, studio_shared_1.getEffectPreviewAlt)(item), style: {
151
+ ...preview,
152
+ visibility: previewLoaded ? 'visible' : 'hidden',
153
+ }, loading: "lazy", onLoad: () => setPreviewLoaded(true) }) }), jsx_runtime_1.jsx("div", { style: labelStyle, children: item.label })
155
154
  ] }) }));
156
155
  };
157
156
  const EffectPickerContent = ({ state }) => {
@@ -171,15 +170,22 @@ const EffectPickerContent = ({ state }) => {
171
170
  clientId: state.clientId,
172
171
  effect: item.effect,
173
172
  fileName: state.fileName,
174
- nodePath: state.nodePath,
173
+ nodePathInfo: state.nodePathInfo,
174
+ selectItems: state.selectItems,
175
175
  });
176
- }, [setSelectedModal, state.clientId, state.fileName, state.nodePath]);
177
- const onArrowDown = (0, react_1.useCallback)(() => {
178
- setSelectedIndex((i) => i + 1);
179
- }, []);
180
- const onArrowUp = (0, react_1.useCallback)(() => {
181
- setSelectedIndex((i) => i - 1);
182
- }, []);
176
+ }, [
177
+ setSelectedModal,
178
+ state.clientId,
179
+ state.fileName,
180
+ state.nodePathInfo,
181
+ state.selectItems,
182
+ ]);
183
+ const moveSelection = (0, react_1.useCallback)((offset) => {
184
+ if (results.length === 0) {
185
+ return;
186
+ }
187
+ setSelectedIndex((i) => (((i + offset) % results.length) + results.length) % results.length);
188
+ }, [results.length]);
183
189
  const onEnter = (0, react_1.useCallback)(() => {
184
190
  if (selectedIndexRounded === -1) {
185
191
  return;
@@ -189,7 +195,7 @@ const EffectPickerContent = ({ state }) => {
189
195
  (0, react_1.useEffect)(() => {
190
196
  const downBinding = keybindings.registerKeybinding({
191
197
  key: 'ArrowDown',
192
- callback: onArrowDown,
198
+ callback: () => moveSelection(3),
193
199
  commandCtrlKey: false,
194
200
  event: 'keydown',
195
201
  preventDefault: true,
@@ -198,7 +204,25 @@ const EffectPickerContent = ({ state }) => {
198
204
  });
199
205
  const upBinding = keybindings.registerKeybinding({
200
206
  key: 'ArrowUp',
201
- callback: onArrowUp,
207
+ callback: () => moveSelection(-3),
208
+ commandCtrlKey: false,
209
+ event: 'keydown',
210
+ preventDefault: true,
211
+ triggerIfInputFieldFocused: true,
212
+ keepRegisteredWhenNotHighestContext: false,
213
+ });
214
+ const rightBinding = keybindings.registerKeybinding({
215
+ key: 'ArrowRight',
216
+ callback: () => moveSelection(1),
217
+ commandCtrlKey: false,
218
+ event: 'keydown',
219
+ preventDefault: true,
220
+ triggerIfInputFieldFocused: true,
221
+ keepRegisteredWhenNotHighestContext: false,
222
+ });
223
+ const leftBinding = keybindings.registerKeybinding({
224
+ key: 'ArrowLeft',
225
+ callback: () => moveSelection(-1),
202
226
  commandCtrlKey: false,
203
227
  event: 'keydown',
204
228
  preventDefault: true,
@@ -217,9 +241,11 @@ const EffectPickerContent = ({ state }) => {
217
241
  return () => {
218
242
  downBinding.unregister();
219
243
  upBinding.unregister();
244
+ rightBinding.unregister();
245
+ leftBinding.unregister();
220
246
  enterBinding.unregister();
221
247
  };
222
- }, [keybindings, onArrowDown, onArrowUp, onEnter]);
248
+ }, [keybindings, moveSelection, onEnter]);
223
249
  const onTextChange = (0, react_1.useCallback)((e) => {
224
250
  setQuery(e.target.value);
225
251
  setSelectedIndex(0);
@@ -234,15 +234,15 @@ const makeSourceControlsVisible = (sourceCode) => {
234
234
  };
235
235
  const ElementLibraryAddConfirmation = ({ displayName, origin, url }) => {
236
236
  return (jsx_runtime_1.jsxs("div", { style: container, children: [
237
- jsx_runtime_1.jsxs("dl", { style: metadataStyle, "aria-label": "Catalog details", children: [displayName === null ? null : (jsx_runtime_1.jsxs("div", { style: metadataRowStyle, children: [
237
+ jsx_runtime_1.jsxs("dl", { style: metadataStyle, "aria-label": "Element Library details", children: [displayName === null ? null : (jsx_runtime_1.jsxs("div", { style: metadataRowStyle, children: [
238
238
  jsx_runtime_1.jsx("dt", { style: metadataTermStyle, children: "Display name" }), jsx_runtime_1.jsx("dd", { style: metadataDescriptionStyle, children: displayName })
239
239
  ] })), jsx_runtime_1.jsxs("div", { style: metadataRowStyle, children: [
240
240
  jsx_runtime_1.jsx("dt", { style: metadataTermStyle, children: "Request source" }), jsx_runtime_1.jsx("dd", { style: metadataDescriptionStyle, children: origin })
241
241
  ] }), jsx_runtime_1.jsxs("div", { style: metadataRowStyle, children: [
242
- jsx_runtime_1.jsx("dt", { style: metadataTermStyle, children: "Catalog URL" }), jsx_runtime_1.jsx("dd", { style: metadataDescriptionStyle, children: jsx_runtime_1.jsx("code", { style: codeStyle, children: url }) })
242
+ jsx_runtime_1.jsx("dt", { style: metadataTermStyle, children: "Element Library URL" }), jsx_runtime_1.jsx("dd", { style: metadataDescriptionStyle, children: jsx_runtime_1.jsx("code", { style: codeStyle, children: url }) })
243
243
  ] })
244
244
  ] }), jsx_runtime_1.jsxs("div", { style: warningStyle, children: [
245
- jsx_runtime_1.jsx(ValidationMessage_1.WarningTriangle, { style: warningIconStyle }), jsx_runtime_1.jsxs("p", { style: warningDescriptionStyle, children: ["This adds the catalog to", ' ', jsx_runtime_1.jsx("strong", { style: browseElementsStyle, children: "Browse Elements" }),
245
+ jsx_runtime_1.jsx(ValidationMessage_1.WarningTriangle, { style: warningIconStyle }), jsx_runtime_1.jsxs("p", { style: warningDescriptionStyle, children: ["This adds the Element Library to", ' ', jsx_runtime_1.jsx("strong", { style: browseElementsStyle, children: "Browse Elements" }),
246
246
  " when nothing is selected on the canvas. It is saved in", ' ', jsx_runtime_1.jsx("code", { style: codeStyle, children: "remotion.config.ts" }),
247
247
  "."] })
248
248
  ] })
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const ElementLibrariesSettings: React.FC;
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ElementLibrariesSettings = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const client_id_1 = require("../helpers/client-id");
7
+ const colors_1 = require("../helpers/colors");
8
+ const browse_elements_1 = require("../icons/browse-elements");
9
+ const trash_1 = require("../icons/trash");
10
+ const ActionTooltip_1 = require("./ActionTooltip");
11
+ const Button_1 = require("./Button");
12
+ const call_api_1 = require("./call-api");
13
+ const InlineAction_1 = require("./InlineAction");
14
+ const styles_1 = require("./InspectorPanel/styles");
15
+ const RemInput_1 = require("./NewComposition/RemInput");
16
+ const ValidationMessage_1 = require("./NewComposition/ValidationMessage");
17
+ const SettingsContext_1 = require("./SettingsContext");
18
+ const Spinner_1 = require("./Spinner");
19
+ const REMOTION_ELEMENTS_URL = 'https://www.remotion.dev/elements';
20
+ const container = {
21
+ alignSelf: 'flex-start',
22
+ boxSizing: 'border-box',
23
+ flex: 1,
24
+ minWidth: 0,
25
+ width: '100%',
26
+ };
27
+ const description = {
28
+ color: colors_1.LIGHT_TEXT,
29
+ fontSize: 13,
30
+ lineHeight: 1.5,
31
+ margin: '16px 16px 12px',
32
+ };
33
+ const addLibraryHeading = {
34
+ ...styles_1.sectionHeader,
35
+ margin: '12px 0 0',
36
+ padding: '4px 16px',
37
+ };
38
+ const libraryRow = {
39
+ alignItems: 'center',
40
+ display: 'flex',
41
+ gap: 10,
42
+ minHeight: 38,
43
+ padding: '4px 16px',
44
+ };
45
+ const libraryIcon = {
46
+ flexShrink: 0,
47
+ height: 22,
48
+ width: 22,
49
+ };
50
+ const libraryDetails = {
51
+ alignItems: 'flex-start',
52
+ display: 'flex',
53
+ flex: 1,
54
+ flexDirection: 'column',
55
+ minWidth: 0,
56
+ };
57
+ const libraryName = {
58
+ fontSize: 13,
59
+ maxWidth: '100%',
60
+ overflow: 'hidden',
61
+ textOverflow: 'ellipsis',
62
+ whiteSpace: 'nowrap',
63
+ };
64
+ const libraryUrlStyle = {
65
+ cursor: 'pointer',
66
+ fontSize: 12,
67
+ maxWidth: '100%',
68
+ minWidth: 0,
69
+ outline: 'none',
70
+ overflow: 'hidden',
71
+ textDecoration: 'none',
72
+ textOverflow: 'ellipsis',
73
+ whiteSpace: 'nowrap',
74
+ };
75
+ const inputRow = {
76
+ display: 'flex',
77
+ gap: 8,
78
+ padding: '4px 16px',
79
+ };
80
+ const input = {
81
+ flex: 1,
82
+ minWidth: 0,
83
+ };
84
+ const message = {
85
+ padding: '4px 16px',
86
+ };
87
+ const trashIcon = {
88
+ height: 14,
89
+ width: 14,
90
+ };
91
+ const ElementLibrariesSettings = () => {
92
+ var _a;
93
+ const { studioRuntimeConfig } = (0, SettingsContext_1.useSettings)();
94
+ const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
95
+ const [url, setUrl] = (0, react_1.useState)('');
96
+ const [displayName, setDisplayName] = (0, react_1.useState)('');
97
+ const [busy, setBusy] = (0, react_1.useState)(null);
98
+ const [error, setError] = (0, react_1.useState)(null);
99
+ const [hoveredUrl, setHoveredUrl] = (0, react_1.useState)(null);
100
+ const libraries = ((_a = studioRuntimeConfig === null || studioRuntimeConfig === void 0 ? void 0 : studioRuntimeConfig.elementLibraries) !== null && _a !== void 0 ? _a : []).filter((library) => library.url !== REMOTION_ELEMENTS_URL);
101
+ let normalizedUrl = null;
102
+ try {
103
+ const parsedUrl = new URL(url.trim());
104
+ if (parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:') {
105
+ normalizedUrl = parsedUrl.href;
106
+ }
107
+ }
108
+ catch (_b) {
109
+ // Keep the Add button disabled until a valid URL is entered.
110
+ }
111
+ const duplicate = normalizedUrl === REMOTION_ELEMENTS_URL ||
112
+ libraries.some((library) => library.url === normalizedUrl);
113
+ const canSave = previewServerState.type === 'connected' && busy === null;
114
+ const addLibrary = (0, react_1.useCallback)(async () => {
115
+ if (!canSave || normalizedUrl === null || duplicate) {
116
+ return;
117
+ }
118
+ setBusy('add');
119
+ setError(null);
120
+ try {
121
+ const response = await (0, call_api_1.callApi)('/api/update-config', {
122
+ clientId: previewServerState.clientId,
123
+ updates: [
124
+ {
125
+ setter: 'addElementLibrary',
126
+ type: 'set',
127
+ value: displayName.trim()
128
+ ? { url: normalizedUrl, displayName: displayName.trim() }
129
+ : { url: normalizedUrl },
130
+ },
131
+ ],
132
+ });
133
+ if (!response.success) {
134
+ setError(response.reason);
135
+ return;
136
+ }
137
+ setUrl('');
138
+ setDisplayName('');
139
+ }
140
+ catch (err) {
141
+ setError(err.message);
142
+ }
143
+ finally {
144
+ setBusy(null);
145
+ }
146
+ }, [canSave, displayName, duplicate, normalizedUrl, previewServerState]);
147
+ const removeLibrary = (0, react_1.useCallback)(async (libraryUrl) => {
148
+ if (previewServerState.type !== 'connected' || busy !== null) {
149
+ return;
150
+ }
151
+ setBusy(libraryUrl);
152
+ setError(null);
153
+ try {
154
+ const response = await (0, call_api_1.callApi)('/api/update-config', {
155
+ clientId: previewServerState.clientId,
156
+ updates: [
157
+ {
158
+ setter: 'addElementLibrary',
159
+ type: 'delete',
160
+ value: libraryUrl,
161
+ },
162
+ ],
163
+ });
164
+ if (!response.success) {
165
+ setError(response.reason);
166
+ }
167
+ }
168
+ catch (err) {
169
+ setError(err.message);
170
+ }
171
+ finally {
172
+ setBusy(null);
173
+ }
174
+ }, [busy, previewServerState]);
175
+ const renderTrash = (0, react_1.useCallback)((color) => {
176
+ return jsx_runtime_1.jsx(trash_1.TrashIcon, { color: color, style: trashIcon });
177
+ }, []);
178
+ return (jsx_runtime_1.jsxs("section", { style: container, children: [
179
+ jsx_runtime_1.jsx("p", { style: description, children: "Add libraries to browse their elements in Studio." }), jsx_runtime_1.jsxs("div", { role: "list", "aria-label": "Element Libraries", children: [
180
+ jsx_runtime_1.jsxs("div", { role: "listitem", style: libraryRow, children: [
181
+ jsx_runtime_1.jsx(browse_elements_1.BrowseElementsIcon, { "aria-hidden": true, color: colors_1.LIGHT_TEXT, style: libraryIcon }), jsx_runtime_1.jsxs("div", { style: libraryDetails, children: [
182
+ jsx_runtime_1.jsx("div", { style: libraryName, children: "Remotion Elements" }), jsx_runtime_1.jsx("a", { href: REMOTION_ELEMENTS_URL, target: "_blank", rel: "noopener noreferrer", style: {
183
+ ...libraryUrlStyle,
184
+ color: hoveredUrl === REMOTION_ELEMENTS_URL ? colors_1.WHITE : colors_1.LIGHT_TEXT,
185
+ }, onMouseEnter: () => setHoveredUrl(REMOTION_ELEMENTS_URL), onMouseLeave: () => setHoveredUrl(null), children: REMOTION_ELEMENTS_URL.replace(/^https?:\/\//, '') })
186
+ ] })
187
+ ] }), libraries.map((library) => {
188
+ var _a, _b;
189
+ return (jsx_runtime_1.jsxs("div", { role: "listitem", style: libraryRow, children: [
190
+ jsx_runtime_1.jsx(browse_elements_1.BrowseElementsIcon, { "aria-hidden": true, color: colors_1.LIGHT_TEXT, style: libraryIcon }), jsx_runtime_1.jsxs("div", { style: libraryDetails, children: [
191
+ jsx_runtime_1.jsx("div", { style: libraryName, children: (_a = library.displayName) !== null && _a !== void 0 ? _a : new URL(library.url).host }), jsx_runtime_1.jsx("a", { href: library.url, target: "_blank", rel: "noopener noreferrer", style: {
192
+ ...libraryUrlStyle,
193
+ color: hoveredUrl === library.url ? colors_1.WHITE : colors_1.LIGHT_TEXT,
194
+ }, onMouseEnter: () => setHoveredUrl(library.url), onMouseLeave: () => setHoveredUrl(null), children: library.url.replace(/^https?:\/\//, '') })
195
+ ] }), busy === library.url ? (jsx_runtime_1.jsx(Spinner_1.Spinner, { duration: 0.5, size: 14 })) : (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Remove", shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { "aria-label": `Remove ${(_b = library.displayName) !== null && _b !== void 0 ? _b : library.url}`, disabled: !canSave, onClick: () => removeLibrary(library.url), renderAction: renderTrash, variant: null }) }))] }, library.url));
196
+ })] }), jsx_runtime_1.jsx("h3", { style: addLibraryHeading, children: "Add new library" }), jsx_runtime_1.jsxs("div", { style: inputRow, children: [
197
+ jsx_runtime_1.jsx(RemInput_1.RemotionInput, { "aria-label": "Element Library URL", placeholder: "https://example.com/elements", status: "ok", rightAlign: false, style: input, value: url, onChange: (event) => setUrl(event.target.value) }), jsx_runtime_1.jsx(RemInput_1.RemotionInput, { "aria-label": "Element Library name", placeholder: "Name (optional)", status: "ok", rightAlign: false, style: input, value: displayName, onChange: (event) => setDisplayName(event.target.value) })
198
+ ] }), jsx_runtime_1.jsx("div", { style: inputRow, children: jsx_runtime_1.jsx(Button_1.Button, { disabled: !canSave || normalizedUrl === null || duplicate, onClick: addLibrary, size: "compact", children: busy === 'add' ? 'Adding…' : '+ Add Element Library' }) }), duplicate ? (jsx_runtime_1.jsx("div", { style: message, children: jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { align: "flex-start", type: "warning", message: "This library is already added." }) })) : null, error ? (jsx_runtime_1.jsx("div", { style: message, children: jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { align: "flex-start", type: "error", message: error }) })) : null] }));
199
+ };
200
+ exports.ElementLibrariesSettings = ElementLibrariesSettings;
@@ -36,7 +36,7 @@ const ElementLibraryModal = ({ name, url }) => {
36
36
  iframe.src = iframeUrl.toString();
37
37
  }, [url]);
38
38
  return (jsx_runtime_1.jsxs(DismissableModal_1.DismissableModal, { panelStyle: panelStyle, children: [
39
- jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: name }), jsx_runtime_1.jsx("iframe", { ref: iframeRef, allow: "local-network-access; loopback-network", "data-remotion-element-library": "", style: iframeStyle, title: `${name} library` })
39
+ jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: name }), jsx_runtime_1.jsx("iframe", { ref: iframeRef, allow: "local-network-access; loopback-network", "data-remotion-element-library": "", style: iframeStyle, "aria-label": `${name} library` })
40
40
  ] }));
41
41
  };
42
42
  exports.ElementLibraryModal = ElementLibraryModal;
@@ -7,16 +7,16 @@ const FramePersistor = () => {
7
7
  const playing = remotion_1.Internals.usePlaying();
8
8
  const config = (0, remotion_1.useVideoConfig)();
9
9
  const frame = remotion_1.Internals.Timeline.useTimelinePosition();
10
- const setFrame = remotion_1.Internals.useTimelineSetFrame();
10
+ const setFrameWithoutSeek = remotion_1.Internals.useTimelineSetFrameWithoutSeek();
11
11
  (0, react_1.useEffect)(() => {
12
12
  if (!playing) {
13
- setFrame((f) => {
13
+ setFrameWithoutSeek((f) => {
14
14
  const newObj = f[config.id] === frame ? f : { ...f, [config.id]: frame };
15
15
  remotion_1.Internals.persistCurrentFrame(newObj);
16
16
  return newObj;
17
17
  });
18
18
  }
19
- }, [config.id, frame, playing, setFrame]);
19
+ }, [config.id, frame, playing, setFrameWithoutSeek]);
20
20
  return null;
21
21
  };
22
22
  exports.FramePersistor = FramePersistor;
@@ -42,6 +42,6 @@ const FullScreenToggle = ({ hidden }) => {
42
42
  f.unregister();
43
43
  };
44
44
  }, [keybindings, onClick]);
45
- return hidden ? (jsx_runtime_1.jsx("button", { id: "fullscreen-toggle", type: "button", style: { display: 'none' }, onClick: onClick })) : (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Fullscreen", shortcut: shortcutsDisabled ? null : shortcut, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { id: "fullscreen-toggle", title: "", "aria-label": accessibilityLabel, "aria-keyshortcuts": shortcutsDisabled ? undefined : ariaKeyShortcuts || undefined, onClick: onClick, children: (color) => (jsx_runtime_1.jsx(fullscreen_1.FullscreenIcon, { color: color, style: { width: 18, height: 18 } })) }) }));
45
+ return hidden ? (jsx_runtime_1.jsx("button", { id: "fullscreen-toggle", type: "button", style: { display: 'none' }, onClick: onClick })) : (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Fullscreen", shortcut: shortcutsDisabled ? null : shortcut, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { id: "fullscreen-toggle", "aria-label": accessibilityLabel, "aria-keyshortcuts": shortcutsDisabled ? undefined : ariaKeyShortcuts || undefined, onClick: onClick, children: (color) => (jsx_runtime_1.jsx(fullscreen_1.FullscreenIcon, { color: color, style: { width: 18, height: 18 } })) }) }));
46
46
  };
47
47
  exports.FullScreenToggle = FullScreenToggle;
@@ -15,7 +15,9 @@ const use_static_files_1 = require("./use-static-files");
15
15
  const useSelectComposition = () => {
16
16
  const { setCompositionFoldersExpanded } = (0, react_1.useContext)(folders_1.FolderContext);
17
17
  const { setCanvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionSetters);
18
- const setFrame = remotion_1.Internals.useTimelineSetFrame();
18
+ // A supplied frame is explicit navigation (for example, opening a nested
19
+ // composition at its sequence's frame). Plain selection does not seek.
20
+ const seekFrame = remotion_1.Internals.Timeline.useTimelineSeekFrame();
19
21
  return (0, react_1.useCallback)((c, push, frame = null) => {
20
22
  var _a;
21
23
  if (push) {
@@ -23,7 +25,7 @@ const useSelectComposition = () => {
23
25
  }
24
26
  (_a = ExplorerPanelRef_1.explorerSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectCompositionPanel();
25
27
  if (frame !== null) {
26
- setFrame((current) => ({ ...current, [c.id]: frame }));
28
+ seekFrame((current) => ({ ...current, [c.id]: frame }));
27
29
  }
28
30
  setCanvasContent({ type: 'composition', compositionId: c.id });
29
31
  const { folderName, parentFolderName } = c;
@@ -40,7 +42,7 @@ const useSelectComposition = () => {
40
42
  return newState;
41
43
  });
42
44
  }
43
- }, [setCanvasContent, setCompositionFoldersExpanded, setFrame]);
45
+ }, [setCanvasContent, setCompositionFoldersExpanded, seekFrame]);
44
46
  };
45
47
  exports.useSelectComposition = useSelectComposition;
46
48
  const InitialCompositionLoader = () => {
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  export type RenderInlineAction = (color: string) => React.ReactNode;
3
- export type InlineActionProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'onClick' | 'style'> & {
3
+ export type InlineActionProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'onClick' | 'style' | 'title'> & {
4
4
  readonly onClick: React.MouseEventHandler<HTMLButtonElement>;
5
5
  readonly renderAction: RenderInlineAction;
6
6
  readonly hoveredColor?: string;
@@ -8,4 +8,4 @@ export type InlineActionProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElemen
8
8
  readonly variant: 'compact' | null;
9
9
  readonly style?: React.CSSProperties;
10
10
  };
11
- export declare const InlineAction: ({ renderAction, onClick, disabled, title, hoveredColor, unhoveredColor, variant, style: customStyle, className, onPointerDown: onPointerDownProp, ...buttonProps }: InlineActionProps) => import("react/jsx-runtime").JSX.Element;
11
+ export declare const InlineAction: ({ renderAction, onClick, disabled, hoveredColor, unhoveredColor, variant, style: customStyle, className, onPointerDown: onPointerDownProp, ...buttonProps }: InlineActionProps) => import("react/jsx-runtime").JSX.Element;
@@ -6,8 +6,7 @@ const react_1 = require("react");
6
6
  const colors_1 = require("../helpers/colors");
7
7
  const hoverable_1 = require("../helpers/hoverable");
8
8
  const z_index_1 = require("../state/z-index");
9
- const InlineAction = ({ renderAction, onClick, disabled, title, hoveredColor = colors_1.WHITE, unhoveredColor = colors_1.LIGHT_TEXT, variant, style: customStyle, className, onPointerDown: onPointerDownProp, ...buttonProps }) => {
10
- var _a;
9
+ const InlineAction = ({ renderAction, onClick, disabled, hoveredColor = colors_1.WHITE, unhoveredColor = colors_1.LIGHT_TEXT, variant, style: customStyle, className, onPointerDown: onPointerDownProp, ...buttonProps }) => {
11
10
  const { tabIndex } = (0, z_index_1.useZIndex)();
12
11
  const onPointerDown = (0, react_1.useCallback)((event) => {
13
12
  onPointerDownProp === null || onPointerDownProp === void 0 ? void 0 : onPointerDownProp(event);
@@ -44,6 +43,6 @@ const InlineAction = ({ renderAction, onClick, disabled, title, hoveredColor = c
44
43
  }, [customStyle, disabled, hoveredColor, unhoveredColor, variant]);
45
44
  return (jsx_runtime_1.jsx("button", { ...buttonProps, type: "button", className: className
46
45
  ? `${hoverable_1.HOVERABLE_CLASS_NAME} ${className}`
47
- : hoverable_1.HOVERABLE_CLASS_NAME, disabled: disabled, onClick: onClick, onPointerDown: onPointerDown, style: style, tabIndex: tabIndex, title: title, "aria-label": (_a = buttonProps['aria-label']) !== null && _a !== void 0 ? _a : title, children: renderAction(colors_1.CURRENT_COLOR) }));
46
+ : hoverable_1.HOVERABLE_CLASS_NAME, disabled: disabled, onClick: onClick, onPointerDown: onPointerDown, style: style, tabIndex: tabIndex, children: renderAction(colors_1.CURRENT_COLOR) }));
48
47
  };
49
48
  exports.InlineAction = InlineAction;
@@ -6,5 +6,5 @@ export declare const InlineEditableTitle: React.FC<{
6
6
  readonly onClick?: () => void;
7
7
  readonly onCommit: (newValue: string) => void;
8
8
  readonly size?: 'default' | 'inspector';
9
- readonly title?: string;
9
+ readonly 'aria-label'?: string;
10
10
  }>;
@@ -90,7 +90,7 @@ const inspectorTitleInput = {
90
90
  fontFamily: 'sans-serif',
91
91
  fontSize: 13,
92
92
  };
93
- const InlineEditableTitle = ({ value, canRename, getInitialSelection, onClick, onCommit, size = 'default', title, }) => {
93
+ const InlineEditableTitle = ({ value, canRename, getInitialSelection, onClick, onCommit, size = 'default', 'aria-label': ariaLabel, }) => {
94
94
  const [isEditing, setIsEditing] = (0, react_1.useState)(false);
95
95
  const [isHovered, setIsHovered] = (0, react_1.useState)(false);
96
96
  const [draftValue, setDraftValue] = (0, react_1.useState)(value);
@@ -179,10 +179,10 @@ const InlineEditableTitle = ({ value, canRename, getInitialSelection, onClick, o
179
179
  ? inspectorTitleGridItem
180
180
  : titleGridItem;
181
181
  const inputStyle = isInspectorSize ? inspectorTitleInput : titleInput;
182
- return (jsx_runtime_1.jsx("div", { style: isInspectorSize ? inspectorTitleWrapper : titleWrapper, title: title !== null && title !== void 0 ? title : value, children: jsx_runtime_1.jsxs("span", { style: innerStyle, onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), onClick: isEditing || !isInteractive ? undefined : handleClick, children: [
182
+ return (jsx_runtime_1.jsx("div", { style: isInspectorSize ? inspectorTitleWrapper : titleWrapper, "aria-label": ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : value, role: "group", children: jsx_runtime_1.jsxs("span", { style: innerStyle, onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), onClick: isEditing || !isInteractive ? undefined : handleClick, children: [
183
183
  jsx_runtime_1.jsx("span", { "aria-hidden": isEditing, style: {
184
184
  ...gridItemStyle,
185
185
  visibility: isEditing ? 'hidden' : 'visible',
186
- }, children: value }), isEditing ? (jsx_runtime_1.jsx("input", { ref: focusInput, style: { ...gridItemStyle, ...inputStyle }, value: draftValue, onChange: onChange, onBlur: onBlur, onKeyDown: onKeyDown })) : null] }) }));
186
+ }, children: value }), isEditing ? (jsx_runtime_1.jsx("input", { ref: focusInput, "aria-label": ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : value, style: { ...gridItemStyle, ...inputStyle }, value: draftValue, onChange: onChange, onBlur: onBlur, onKeyDown: onKeyDown })) : null] }) }));
187
187
  };
188
188
  exports.InlineEditableTitle = InlineEditableTitle;
@@ -69,6 +69,6 @@ const InspectorLocationCopy = ({ children, location, name, openInEditorLocation
69
69
  opacity: showAction ? 1 : 0,
70
70
  pointerEvents: showAction ? 'auto' : 'none',
71
71
  }, children: [
72
- jsx_runtime_1.jsx(InspectorOpenInEditor_1.InspectorOpenInEditor, { locationType: null, contextForAgents: contextForAgents, location: openInEditorLocation, showTooltips: false }), contextForAgents ? (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: onCopy, renderAction: renderCopyAction, title: "Copy context for agents" })) : null] })) : null] }));
72
+ jsx_runtime_1.jsx(InspectorOpenInEditor_1.InspectorOpenInEditor, { locationType: null, contextForAgents: contextForAgents, location: openInEditorLocation, showTooltips: false }), contextForAgents ? (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: onCopy, renderAction: renderCopyAction, "aria-label": "Copy context for agents" })) : null] })) : null] }));
73
73
  };
74
74
  exports.InspectorLocationCopy = InspectorLocationCopy;
@@ -6,6 +6,7 @@ const react_1 = require("react");
6
6
  const browser_studio_operations_1 = require("../helpers/browser-studio-operations");
7
7
  const client_id_1 = require("../helpers/client-id");
8
8
  const colors_1 = require("../helpers/colors");
9
+ const copy_text_1 = require("../helpers/copy-text");
9
10
  const get_git_menu_item_1 = require("../helpers/get-git-menu-item");
10
11
  const open_in_editor_1 = require("../helpers/open-in-editor");
11
12
  const caret_1 = require("../icons/caret");
@@ -57,6 +58,16 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location, locat
57
58
  (0, NotificationCenter_1.showNotification)(err.message, 2000);
58
59
  }
59
60
  }, [contextForAgents]);
61
+ const copyPath = (0, react_1.useCallback)(() => {
62
+ if (!(location === null || location === void 0 ? void 0 : location.source)) {
63
+ return;
64
+ }
65
+ (0, copy_text_1.copyText)(location.source)
66
+ .then(() => (0, NotificationCenter_1.showNotification)('Copied path', 1500))
67
+ .catch((err) => {
68
+ (0, NotificationCenter_1.showNotification)(`Could not copy path: ${err.message}`, 2000);
69
+ });
70
+ }, [location]);
60
71
  const defaultAppName = defaultOpenInTarget === 'git-source'
61
72
  ? 'GitHub'
62
73
  : (defaultEditorName !== null && defaultEditorName !== void 0 ? defaultEditorName : 'default editor');
@@ -89,6 +100,7 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location, locat
89
100
  folder: locationType === 'folder',
90
101
  gitSourceDisabled: location === null,
91
102
  onConfigureApps: configureDefaultApps,
103
+ onCopyPath: locationType === 'folder' && (location === null || location === void 0 ? void 0 : location.source) ? copyPath : undefined,
92
104
  onOpenInCodingAgent: (codingAgentId, codingAgentName) => {
93
105
  openWithCodingAgent(codingAgentId, codingAgentName).catch(() => undefined);
94
106
  },
@@ -138,6 +150,7 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location, locat
138
150
  canConfigureApps,
139
151
  canOpenInEditor,
140
152
  configureDefaultApps,
153
+ copyPath,
141
154
  defaultEditorId,
142
155
  defaultOpenInTarget,
143
156
  editorInfo,
@@ -159,7 +172,6 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location, locat
159
172
  renderContent: () => (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [label, defaultOpenInTarget === 'git-source' ? (jsx_runtime_1.jsx(github_1.GitHubIcon, { size: githubButtonIconSize })) : (jsx_runtime_1.jsx(editor_1.EditorIcon, { editorId: defaultEditorId, size: editorButtonIconSize }))] })),
160
173
  segmentId: 'default-editor',
161
174
  style: mainSegmentStyle,
162
- title: showTooltips ? '' : `Open in ${defaultAppName}`,
163
175
  tooltipLabel: showTooltips ? `Open in ${defaultAppName}` : null,
164
176
  type: 'action',
165
177
  },
@@ -176,7 +188,6 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location, locat
176
188
  segmentId: 'another-app',
177
189
  selectedId: null,
178
190
  style: dropdownSegmentStyle,
179
- title: showTooltips ? '' : 'Open in another app',
180
191
  tooltipLabel: showTooltips ? 'Open in another app' : null,
181
192
  type: 'menu',
182
193
  values: menuItems,
@@ -199,6 +210,6 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location, locat
199
210
  if (previewServerState.type !== 'connected' && defaultOpenInTarget === null) {
200
211
  return null;
201
212
  }
202
- return jsx_runtime_1.jsx(SegmentedButton_1.SegmentedButton, { segments: segments, style: null, title: null });
213
+ return jsx_runtime_1.jsx(SegmentedButton_1.SegmentedButton, { segments: segments, style: null });
203
214
  };
204
215
  exports.InspectorOpenInEditor = InspectorOpenInEditor;