@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
@@ -8,9 +8,10 @@ const client_id_1 = require("../../helpers/client-id");
8
8
  const interactivity_enabled_1 = require("../../helpers/interactivity-enabled");
9
9
  const use_media_metadata_1 = require("../../helpers/use-media-metadata");
10
10
  const audio_1 = require("../../icons/audio");
11
+ const background_removal_1 = require("../../icons/background-removal");
11
12
  const duplicate_1 = require("../../icons/duplicate");
12
- const scissors_1 = require("../../icons/scissors");
13
13
  const snowflake_1 = require("../../icons/snowflake");
14
+ const split_1 = require("../../icons/split");
14
15
  const transcription_1 = require("../../icons/transcription");
15
16
  const trash_1 = require("../../icons/trash");
16
17
  const modals_1 = require("../../state/modals");
@@ -30,18 +31,9 @@ const CollapsibleInspectorSection_1 = require("./CollapsibleInspectorSection");
30
31
  const common_1 = require("./common");
31
32
  const ConnectedCompositionsSection_1 = require("./ConnectedCompositionsSection");
32
33
  const SequenceInspectorHeader_1 = require("./SequenceInspectorHeader");
34
+ const SequenceWrapAction_1 = require("./SequenceWrapAction");
33
35
  const styles_1 = require("./styles");
34
36
  const use_track_for_selection_1 = require("./use-track-for-selection");
35
- const actionIconStyle = {
36
- display: 'block',
37
- height: 16,
38
- width: 16,
39
- };
40
- const largeActionIconStyle = {
41
- ...actionIconStyle,
42
- height: 20,
43
- width: 20,
44
- };
45
37
  const SplitSequenceQuickAction = ({ selection, track }) => {
46
38
  const timelinePosition = remotion_1.Internals.Timeline.useTimelinePosition();
47
39
  const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
@@ -71,7 +63,7 @@ const SplitSequenceQuickAction = ({ selection, track }) => {
71
63
  : eligibility.canSplit
72
64
  ? undefined
73
65
  : eligibility.reason;
74
- return (jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: !canSplit, onClick: onSplit, title: disabledReason, renderIcon: (color) => (jsx_runtime_1.jsx(scissors_1.ScissorsIcon, { style: actionIconStyle, color: color })), children: "Split clip" }));
66
+ return (jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: !canSplit, iconContainerStyle: common_1.largeInspectorActionIconContainerStyle, onClick: onSplit, "aria-label": disabledReason, renderIcon: (color) => (jsx_runtime_1.jsx(split_1.SplitIcon, { style: common_1.largeInspectorActionIconStyle, color: color })), children: "Split clip" }));
75
67
  };
76
68
  const SequenceSourceQuickActions = ({ selection, track, validatedSource }) => {
77
69
  var _a;
@@ -105,6 +97,11 @@ const SequenceSourceQuickActions = ({ selection, track, validatedSource }) => {
105
97
  : selection.nodePathInfo.numberOfSequencesWithThisNodePath > 1
106
98
  ? 'Programmatically duplicated media cannot be transcribed from source'
107
99
  : undefined;
100
+ const videoMattingDisabledReason = sourceActionsDisabled
101
+ ? 'Studio is read-only'
102
+ : selection.nodePathInfo.numberOfSequencesWithThisNodePath > 1
103
+ ? 'Programmatically duplicated videos cannot have their background removed from source'
104
+ : undefined;
108
105
  const onGenerateCaptions = (0, react_1.useCallback)(() => {
109
106
  if (transcriptionDisabledReason !== undefined || mediaSequence === null) {
110
107
  return;
@@ -130,6 +127,27 @@ const SequenceSourceQuickActions = ({ selection, track, validatedSource }) => {
130
127
  mediaSequence,
131
128
  transcriptionDisabledReason,
132
129
  ]);
130
+ const onRemoveBackground = (0, react_1.useCallback)(() => {
131
+ if (videoMattingDisabledReason !== undefined ||
132
+ track.sequence.type !== 'video') {
133
+ return;
134
+ }
135
+ const nodePath = selection.nodePathInfo.sequenceSubscriptionKey;
136
+ setSelectedModal({
137
+ type: 'video-matting',
138
+ src: track.sequence.src,
139
+ displayName: (0, public_output_name_1.getMediaFileName)(track.sequence.src, track.sequence.displayName),
140
+ target: {
141
+ fileName: nodePath.absolutePath,
142
+ nodePath,
143
+ },
144
+ });
145
+ }, [
146
+ selection.nodePathInfo,
147
+ setSelectedModal,
148
+ track.sequence,
149
+ videoMattingDisabledReason,
150
+ ]);
133
151
  const onDuplicate = (0, react_1.useCallback)(() => {
134
152
  if (sourceActionsDisabled) {
135
153
  return;
@@ -165,7 +183,8 @@ const SequenceSourceQuickActions = ({ selection, track, validatedSource }) => {
165
183
  (0, NotificationCenter_1.showNotification)(err.message, 4000);
166
184
  });
167
185
  }, [selection.nodePathInfo, splitVideoFromAudioDisabledReason]);
168
- return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [(freezeFrameMenuItem === null || freezeFrameMenuItem === void 0 ? void 0 : freezeFrameMenuItem.type) === 'item' ? (jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: Boolean(freezeFrameMenuItem.disabled), onClick: () => freezeFrameMenuItem.onClick(freezeFrameMenuItem.id, null), renderIcon: (color) => (jsx_runtime_1.jsx(snowflake_1.SnowflakeIcon, { style: largeActionIconStyle, color: color })), children: freezeFrameMenuItem.label })) : null, track.sequence.type === 'video' ? (jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: splitVideoFromAudioDisabledReason !== undefined, onClick: onSplitVideoFromAudio, title: splitVideoFromAudioDisabledReason, renderIcon: (color) => (jsx_runtime_1.jsx(audio_1.AudioIcon, { style: actionIconStyle, color: color })), children: "Split video from audio" })) : null, mediaSequence !== null && (mediaMetadata === null || mediaMetadata === void 0 ? void 0 : mediaMetadata.hasAudioTrack) !== false ? (jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: transcriptionDisabledReason !== undefined, onClick: onGenerateCaptions, title: transcriptionDisabledReason, renderIcon: (color) => (jsx_runtime_1.jsx(transcription_1.TranscriptionIcon, { style: actionIconStyle, color: color })), children: "Generate captions" })) : null, jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: sourceActionsDisabled, onClick: onDuplicate, renderIcon: (color) => (jsx_runtime_1.jsx(duplicate_1.DuplicateIcon, { style: largeActionIconStyle, color: color })), children: "Duplicate" }), jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: sourceActionsDisabled, onClick: onDelete, renderIcon: (color) => (jsx_runtime_1.jsx(trash_1.TrashIcon, { style: actionIconStyle, color: color })), children: "Delete" })] }));
186
+ // Pad the larger SVG glyphs so they have similar visible bounds at 22px.
187
+ return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [(freezeFrameMenuItem === null || freezeFrameMenuItem === void 0 ? void 0 : freezeFrameMenuItem.type) === 'item' ? (jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: Boolean(freezeFrameMenuItem.disabled), iconContainerStyle: common_1.largeInspectorActionIconContainerStyle, onClick: () => freezeFrameMenuItem.onClick(freezeFrameMenuItem.id, null), renderIcon: (color) => (jsx_runtime_1.jsx(snowflake_1.SnowflakeIcon, { style: common_1.largeInspectorActionIconStyle, color: color })), children: freezeFrameMenuItem.label })) : null, track.sequence.type === 'video' ? (jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: videoMattingDisabledReason !== undefined, iconContainerStyle: common_1.largeInspectorActionIconContainerStyle, onClick: onRemoveBackground, "aria-label": videoMattingDisabledReason, renderIcon: (color) => (jsx_runtime_1.jsx(background_removal_1.BackgroundRemovalIcon, { style: common_1.largeInspectorActionIconStyle, color: color, viewBox: "-32 -32 704 704" })), children: "Remove background" })) : null, track.sequence.type === 'video' ? (jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: splitVideoFromAudioDisabledReason !== undefined, iconContainerStyle: common_1.largeInspectorActionIconContainerStyle, onClick: onSplitVideoFromAudio, "aria-label": splitVideoFromAudioDisabledReason, renderIcon: (color) => (jsx_runtime_1.jsx(audio_1.AudioIcon, { style: common_1.largeInspectorActionIconStyle, color: color, viewBox: "-96 -64 704 640", preserveAspectRatio: "none" })), children: "Split video from audio" })) : null, mediaSequence !== null && (mediaMetadata === null || mediaMetadata === void 0 ? void 0 : mediaMetadata.hasAudioTrack) !== false ? (jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: transcriptionDisabledReason !== undefined, iconContainerStyle: common_1.largeInspectorActionIconContainerStyle, onClick: onGenerateCaptions, "aria-label": transcriptionDisabledReason, renderIcon: (color) => (jsx_runtime_1.jsx(transcription_1.TranscriptionIcon, { style: common_1.largeInspectorActionIconStyle, color: color, viewBox: "-96 -16 704 544", preserveAspectRatio: "none" })), children: "Generate captions" })) : null, jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: sourceActionsDisabled, iconContainerStyle: common_1.largeInspectorActionIconContainerStyle, onClick: onDuplicate, renderIcon: (color) => (jsx_runtime_1.jsx(duplicate_1.DuplicateIcon, { style: common_1.largeInspectorActionIconStyle, color: color, viewBox: "-32 -32 704 704" })), children: "Duplicate" }), jsx_runtime_1.jsx(SequenceWrapAction_1.SequenceWrapAction, { nodePathInfo: selection.nodePathInfo, sequence: track.sequence, sourceActionsDisabled: sourceActionsDisabled }), jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: sourceActionsDisabled, iconContainerStyle: common_1.largeInspectorActionIconContainerStyle, onClick: onDelete, renderIcon: (color) => (jsx_runtime_1.jsx(trash_1.TrashIcon, { style: common_1.largeInspectorActionIconStyle, color: color, viewBox: "-120 -96 688 688" })), children: "Delete" })] }));
169
188
  };
170
189
  const SequenceExpandedInspector = ({ track, readOnlyStudio }) => {
171
190
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
@@ -210,7 +229,7 @@ const SequenceExpandedInspector = ({ track, readOnlyStudio }) => {
210
229
  return jsx_runtime_1.jsx(common_1.InspectorMessage, { children: "Sequence inspector unavailable" });
211
230
  }
212
231
  return (jsx_runtime_1.jsxs("div", { style: styles_1.selectedContainer, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, onPointerDown: selectSequenceOnInspectorPointerDown, children: [
213
- jsx_runtime_1.jsx(SequenceInspectorHeader_1.SequenceInspectorHeader, { sourceLocation: sourceLocation, track: track }, stackKey !== null && stackKey !== void 0 ? stackKey : track.sequence.id), jsx_runtime_1.jsx(SequenceInspectorHeader_1.SequenceInspectorDuplicationSection, { track: track }), connectedCompositions.length > 0 ? (jsx_runtime_1.jsx(ConnectedCompositionsSection_1.ConnectedCompositionsSection, { connectedCompositions: connectedCompositions })) : null, validatedLocation ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [jsx_runtime_1.jsx(InspectorSequenceSection_1.InspectorSequenceSection, { sequence: track.sequence, readOnlyStudio: readOnlyStudio, validatedLocation: validatedLocation, nodePathInfo: track.nodePathInfo, keyframeDisplayOffset: track.keyframeDisplayOffset, renderTransformControls: () => jsx_runtime_1.jsx(AlignmentControls_1.AlignmentControls, { track: track }) }), jsx_runtime_1.jsx(CollapsibleInspectorSection_1.CollapsibleInspectorSection, { collapsible: true, label: "Actions", sectionId: "sequence-actions", children: jsx_runtime_1.jsxs(common_1.InspectorQuickActionsSection, { children: [
232
+ jsx_runtime_1.jsx(SequenceInspectorHeader_1.SequenceInspectorHeader, { sourceLocation: sourceLocation, track: track }, stackKey !== null && stackKey !== void 0 ? stackKey : track.sequence.id), jsx_runtime_1.jsx(SequenceInspectorHeader_1.SequenceInspectorDuplicationSection, { track: track }), connectedCompositions.length > 0 ? (jsx_runtime_1.jsx(ConnectedCompositionsSection_1.ConnectedCompositionsSection, { connectedCompositions: connectedCompositions })) : null, validatedLocation ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [jsx_runtime_1.jsx(InspectorSequenceSection_1.InspectorSequenceSection, { sequence: track.sequence, readOnlyStudio: readOnlyStudio, validatedLocation: validatedLocation, nodePathInfo: track.nodePathInfo, keyframeDisplayOffset: track.keyframeDisplayOffset, keyframePlaybackRate: track.keyframePlaybackRate, renderTransformControls: () => jsx_runtime_1.jsx(AlignmentControls_1.AlignmentControls, { track: track }) }), jsx_runtime_1.jsx(CollapsibleInspectorSection_1.CollapsibleInspectorSection, { collapsible: true, label: "Actions", sectionId: "sequence-actions", children: jsx_runtime_1.jsxs(common_1.InspectorQuickActionsSection, { children: [
214
233
  jsx_runtime_1.jsx(SplitSequenceQuickAction, { selection: sequenceSelection, track: track }), jsx_runtime_1.jsx(SequenceSourceQuickActions, { selection: sequenceSelection, track: track, validatedSource: validatedLocation.source })
215
234
  ] }) })
216
235
  ] })) : (jsx_runtime_1.jsx(common_1.InspectorMessage, { children: "Source controls unavailable" }))] }));
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
3
+ import type { TimelineTrackData } from '../../helpers/get-timeline-sequence-sort-key';
4
+ export declare const SequenceWrapAction: React.FC<{
5
+ readonly nodePathInfo: SequenceNodePathInfo;
6
+ readonly sequence: TimelineTrackData['sequence'];
7
+ readonly sourceActionsDisabled: boolean;
8
+ }>;
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SequenceWrapAction = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const remotion_1 = require("remotion");
7
+ const colors_1 = require("../../helpers/colors");
8
+ const caret_1 = require("../../icons/caret");
9
+ const wrap_1 = require("../../icons/wrap");
10
+ const InspectorPanelLayout_1 = require("../InspectorPanelLayout");
11
+ const NotificationCenter_1 = require("../Notifications/NotificationCenter");
12
+ const SegmentedButton_1 = require("../SegmentedButton");
13
+ const wrap_jsx_node_api_1 = require("../wrap-jsx-node-api");
14
+ const common_1 = require("./common");
15
+ const wrapperNames = ['AbsoluteFill', 'Sequence', 'HtmlInCanvas'];
16
+ const buttonStyle = {
17
+ borderRadius: 4,
18
+ height: 28,
19
+ margin: '0 4px',
20
+ width: 'calc(100% - 8px)',
21
+ };
22
+ const segmentStyle = {
23
+ fontSize: 13,
24
+ gap: 8,
25
+ justifyContent: 'flex-start',
26
+ padding: `0 ${InspectorPanelLayout_1.INSPECTOR_PANEL_HORIZONTAL_PADDING - 4}px`,
27
+ width: '100%',
28
+ };
29
+ const labelStyle = {
30
+ flex: 1,
31
+ fontFamily: 'sans-serif',
32
+ fontSize: 13,
33
+ lineHeight: '18px',
34
+ minWidth: 0,
35
+ overflow: 'hidden',
36
+ textAlign: 'left',
37
+ textOverflow: 'ellipsis',
38
+ userSelect: 'none',
39
+ WebkitUserSelect: 'none',
40
+ whiteSpace: 'nowrap',
41
+ };
42
+ const caretStyle = {
43
+ display: 'flex',
44
+ flexShrink: 0,
45
+ height: 12,
46
+ width: 12,
47
+ };
48
+ const SequenceWrapAction = ({ nodePathInfo, sequence, sourceActionsDisabled }) => {
49
+ const { width, height } = (0, remotion_1.useVideoConfig)();
50
+ const nodePathKey = JSON.stringify(nodePathInfo.sequenceSubscriptionKey);
51
+ const [eligibility, setEligibility] = (0, react_1.useState)(null);
52
+ const [busy, setBusy] = (0, react_1.useState)(false);
53
+ (0, react_1.useEffect)(() => {
54
+ setEligibility(null);
55
+ if (sourceActionsDisabled) {
56
+ return;
57
+ }
58
+ let cancelled = false;
59
+ const nodePath = JSON.parse(nodePathKey);
60
+ (0, wrap_jsx_node_api_1.wrapJsxNode)({
61
+ fileName: nodePath.absolutePath,
62
+ nodePath: nodePath.nodePath,
63
+ wrapper: null,
64
+ width: null,
65
+ height: null,
66
+ })
67
+ .then((result) => {
68
+ if (!cancelled && result.success) {
69
+ setEligibility({
70
+ canWrap: result.canWrap,
71
+ canWrapHtmlInCanvas: result.canWrapHtmlInCanvas,
72
+ });
73
+ }
74
+ })
75
+ .catch(() => undefined);
76
+ return () => {
77
+ cancelled = true;
78
+ };
79
+ }, [nodePathKey, sequence, sourceActionsDisabled]);
80
+ const onWrap = (0, react_1.useCallback)((wrapper) => {
81
+ if (busy || sourceActionsDisabled || !(eligibility === null || eligibility === void 0 ? void 0 : eligibility.canWrap)) {
82
+ return;
83
+ }
84
+ setBusy(true);
85
+ const nodePath = JSON.parse(nodePathKey);
86
+ (0, wrap_jsx_node_api_1.wrapJsxNode)({
87
+ fileName: nodePath.absolutePath,
88
+ nodePath: nodePath.nodePath,
89
+ wrapper,
90
+ width,
91
+ height,
92
+ })
93
+ .then((result) => {
94
+ if (!result.success) {
95
+ (0, NotificationCenter_1.showNotification)(result.reason, 4000);
96
+ }
97
+ })
98
+ .catch((error) => {
99
+ (0, NotificationCenter_1.showNotification)(error.message, 4000);
100
+ })
101
+ .finally(() => setBusy(false));
102
+ }, [busy, eligibility, height, nodePathKey, sourceActionsDisabled, width]);
103
+ const values = (0, react_1.useMemo)(() => wrapperNames.map((wrapper) => ({
104
+ type: 'item',
105
+ id: wrapper,
106
+ label: `<${wrapper}>`,
107
+ value: wrapper,
108
+ onClick: () => onWrap(wrapper),
109
+ keyHint: null,
110
+ leftItem: null,
111
+ subMenu: null,
112
+ quickSwitcherLabel: null,
113
+ disabled: busy ||
114
+ (wrapper === 'HtmlInCanvas' &&
115
+ (!(eligibility === null || eligibility === void 0 ? void 0 : eligibility.canWrapHtmlInCanvas) || !(0, remotion_1.isHtmlInCanvasSupported)())),
116
+ })), [busy, eligibility, onWrap]);
117
+ const segments = (0, react_1.useMemo)(() => [
118
+ {
119
+ ariaLabel: nodePathInfo.numberOfSequencesWithThisNodePath > 1
120
+ ? `Wrap all ${nodePathInfo.numberOfSequencesWithThisNodePath} instances of this JSX element`
121
+ : 'Wrap this JSX element',
122
+ buttonId: null,
123
+ disabled: busy,
124
+ idleColor: colors_1.LIGHT_TEXT,
125
+ leaveLeftSpace: false,
126
+ onOpenChange: null,
127
+ renderContent: (color) => (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
128
+ jsx_runtime_1.jsx("span", { style: common_1.largeInspectorActionIconContainerStyle, children: jsx_runtime_1.jsx(wrap_1.WrapIcon, { color: color, style: common_1.largeInspectorActionIconStyle }) }), jsx_runtime_1.jsx("span", { style: labelStyle, children: "Wrap" }), jsx_runtime_1.jsx("span", { style: caretStyle, children: jsx_runtime_1.jsx(caret_1.CaretDown, { color: color }) })
129
+ ] })),
130
+ segmentId: 'wrap',
131
+ selectedId: null,
132
+ style: segmentStyle,
133
+ tooltipLabel: null,
134
+ type: 'menu',
135
+ values,
136
+ },
137
+ ], [busy, nodePathInfo.numberOfSequencesWithThisNodePath, values]);
138
+ if (!(eligibility === null || eligibility === void 0 ? void 0 : eligibility.canWrap) || sourceActionsDisabled) {
139
+ return null;
140
+ }
141
+ return jsx_runtime_1.jsx(SegmentedButton_1.SegmentedButton, { segments: segments, style: buttonStyle });
142
+ };
143
+ exports.SequenceWrapAction = SequenceWrapAction;
@@ -18,7 +18,7 @@ export declare const InspectorBackAction: React.FC<{
18
18
  readonly children: React.ReactNode;
19
19
  readonly disabled: boolean;
20
20
  readonly onClick: React.MouseEventHandler<HTMLButtonElement>;
21
- readonly title: string;
21
+ readonly 'aria-label': string;
22
22
  }>;
23
23
  export declare const InspectorMessage: React.FC<{
24
24
  readonly children: React.ReactNode;
@@ -27,6 +27,10 @@ export declare const InspectorDetailRow: React.FC<{
27
27
  readonly label: React.ReactNode | ((hovered: boolean) => React.ReactNode);
28
28
  readonly children: React.ReactNode;
29
29
  }>;
30
+ export declare const inspectorActionIconStyle: React.CSSProperties;
31
+ export declare const inspectorActionIconContainerStyle: React.CSSProperties;
32
+ export declare const largeInspectorActionIconStyle: React.CSSProperties;
33
+ export declare const largeInspectorActionIconContainerStyle: React.CSSProperties;
30
34
  export type InspectorQuickActionProps = {
31
35
  readonly children: React.ReactNode;
32
36
  readonly disabled: boolean;
@@ -35,7 +39,7 @@ export type InspectorQuickActionProps = {
35
39
  readonly renderIcon?: (color: string) => React.ReactNode;
36
40
  readonly size?: 'default' | 'compact';
37
41
  readonly style?: React.CSSProperties;
38
- readonly title?: string;
42
+ readonly 'aria-label'?: string;
39
43
  };
40
44
  export declare const InspectorQuickAction: React.FC<InspectorQuickActionProps>;
41
45
  export declare const InspectorDefaultPropsWarnings: React.FC<{
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.InspectorDefaultPropsWarnings = exports.InspectorQuickAction = exports.InspectorDetailRow = exports.InspectorMessage = exports.InspectorBackAction = exports.InspectorSection = exports.InspectorSectionBody = exports.InspectorQuickActionsSection = exports.InspectorSectionHeader = void 0;
6
+ exports.InspectorDefaultPropsWarnings = exports.InspectorQuickAction = exports.largeInspectorActionIconContainerStyle = exports.largeInspectorActionIconStyle = exports.inspectorActionIconContainerStyle = exports.inspectorActionIconStyle = exports.InspectorDetailRow = exports.InspectorMessage = exports.InspectorBackAction = exports.InspectorSection = exports.InspectorSectionBody = exports.InspectorQuickActionsSection = exports.InspectorSectionHeader = void 0;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const react_1 = __importDefault(require("react"));
9
9
  const colors_1 = require("../../helpers/colors");
@@ -41,8 +41,8 @@ const backArrowIcon = {
41
41
  const BackArrow = ({ color }) => {
42
42
  return (jsx_runtime_1.jsx("svg", { viewBox: "0 0 512 512", style: backArrowIcon, children: jsx_runtime_1.jsx("path", { d: "M7 239c-9.4 9.4-9.4 24.6 0 33.9L175 441c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L81.9 280 488 280c13.3 0 24-10.7 24-24s-10.7-24-24-24L81.9 232 209 105c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L7 239z", fill: color }) }));
43
43
  };
44
- const InspectorBackAction = ({ children, disabled, onClick, title }) => {
45
- return (jsx_runtime_1.jsx("div", { style: styles_1.inspectorQuickActionsSection, children: jsx_runtime_1.jsx(exports.InspectorQuickAction, { disabled: disabled, onClick: onClick, renderIcon: (color) => jsx_runtime_1.jsx(BackArrow, { color: color }), title: title, children: children }) }));
44
+ const InspectorBackAction = ({ children, disabled, onClick, 'aria-label': ariaLabel }) => {
45
+ return (jsx_runtime_1.jsx("div", { style: styles_1.inspectorQuickActionsSection, children: jsx_runtime_1.jsx(exports.InspectorQuickAction, { disabled: disabled, onClick: onClick, renderIcon: (color) => jsx_runtime_1.jsx(BackArrow, { color: color }), "aria-label": ariaLabel, children: children }) }));
46
46
  };
47
47
  exports.InspectorBackAction = InspectorBackAction;
48
48
  const InspectorMessage = ({ children }) => jsx_runtime_1.jsx("div", { style: styles_1.centeredMessage, children: children });
@@ -92,15 +92,31 @@ const inlineLabelText = {
92
92
  WebkitUserSelect: 'none',
93
93
  whiteSpace: 'nowrap',
94
94
  };
95
- const inlineLabelIcon = {
95
+ const INSPECTOR_ACTION_ICON_SIZE = 18;
96
+ exports.inspectorActionIconStyle = {
97
+ display: 'block',
98
+ height: INSPECTOR_ACTION_ICON_SIZE,
99
+ width: INSPECTOR_ACTION_ICON_SIZE,
100
+ };
101
+ exports.inspectorActionIconContainerStyle = {
96
102
  alignItems: 'center',
97
103
  display: 'flex',
98
104
  flexShrink: 0,
99
- height: 18,
105
+ height: INSPECTOR_ACTION_ICON_SIZE,
100
106
  justifyContent: 'center',
101
- width: 18,
107
+ width: INSPECTOR_ACTION_ICON_SIZE,
108
+ };
109
+ exports.largeInspectorActionIconStyle = {
110
+ height: 22,
111
+ width: 22,
112
+ };
113
+ exports.largeInspectorActionIconContainerStyle = {
114
+ height: 22,
115
+ marginLeft: -2,
116
+ marginRight: -2,
117
+ width: 22,
102
118
  };
103
- const InspectorQuickAction = ({ children, disabled, iconContainerStyle, onClick, renderIcon, size = 'default', style, title, }) => {
119
+ const InspectorQuickAction = ({ children, disabled, iconContainerStyle, onClick, renderIcon, size = 'default', style, 'aria-label': ariaLabel, }) => {
104
120
  const showsHover = !disabled && onClick !== null;
105
121
  const buttonStyle = react_1.default.useMemo(() => ({
106
122
  ...(disabled ? inlineLabelButtonDisabled : inlineLabelButton),
@@ -115,9 +131,9 @@ const InspectorQuickAction = ({ children, disabled, iconContainerStyle, onClick,
115
131
  ...(size === 'compact' ? compactInlineLabelButton : null),
116
132
  ...style,
117
133
  }), [disabled, showsHover, size, style]);
118
- const mainContent = (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [renderIcon ? (jsx_runtime_1.jsx("span", { style: { ...inlineLabelIcon, ...iconContainerStyle }, children: renderIcon(colors_1.CURRENT_COLOR) })) : null, jsx_runtime_1.jsx("span", { style: inlineLabelText, children: children })
134
+ const mainContent = (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [renderIcon ? (jsx_runtime_1.jsx("span", { style: { ...exports.inspectorActionIconContainerStyle, ...iconContainerStyle }, children: renderIcon(colors_1.CURRENT_COLOR) })) : null, jsx_runtime_1.jsx("span", { style: inlineLabelText, children: children })
119
135
  ] }));
120
- const mainAction = onClick ? (jsx_runtime_1.jsx("button", { className: `__remotion-inspector-quick-action ${hoverable_1.HOVERABLE_CLASS_NAME}`, type: "button", disabled: disabled, style: buttonStyle, title: title, onClick: onClick, children: mainContent })) : (jsx_runtime_1.jsx("div", { className: hoverable_1.HOVERABLE_CLASS_NAME, style: buttonStyle, title: title, children: mainContent }));
136
+ const mainAction = onClick ? (jsx_runtime_1.jsx("button", { className: `__remotion-inspector-quick-action ${hoverable_1.HOVERABLE_CLASS_NAME}`, type: "button", disabled: disabled, style: buttonStyle, "aria-label": ariaLabel, onClick: onClick, children: mainContent })) : (jsx_runtime_1.jsx("div", { className: hoverable_1.HOVERABLE_CLASS_NAME, style: buttonStyle, "aria-label": ariaLabel, role: "group", children: mainContent }));
121
137
  return mainAction;
122
138
  };
123
139
  exports.InspectorQuickAction = InspectorQuickAction;
@@ -1,7 +1,8 @@
1
1
  import type { CanUpdateSequencePropStatusKeyframed } from 'remotion';
2
2
  import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
3
- export declare const getEasingSelectionFromCurrentKeyframes: ({ keyframeDisplayOffset, nodePathInfo, propStatus, segmentIndex, }: {
3
+ export declare const getEasingSelectionFromCurrentKeyframes: ({ keyframeDisplayOffset, keyframePlaybackRate, nodePathInfo, propStatus, segmentIndex, }: {
4
4
  readonly keyframeDisplayOffset: number;
5
+ readonly keyframePlaybackRate: number;
5
6
  readonly nodePathInfo: SequenceNodePathInfo;
6
7
  readonly propStatus: CanUpdateSequencePropStatusKeyframed;
7
8
  readonly segmentIndex: number;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getEasingSelectionFromCurrentKeyframes = void 0;
4
4
  const get_timeline_keyframes_1 = require("../Timeline/get-timeline-keyframes");
5
- const getEasingSelectionFromCurrentKeyframes = ({ keyframeDisplayOffset, nodePathInfo, propStatus, segmentIndex, }) => {
5
+ const getEasingSelectionFromCurrentKeyframes = ({ keyframeDisplayOffset, keyframePlaybackRate, nodePathInfo, propStatus, segmentIndex, }) => {
6
6
  const fromKeyframe = propStatus.keyframes[segmentIndex];
7
7
  const toKeyframe = propStatus.keyframes[segmentIndex + 1];
8
8
  if (!fromKeyframe || !toKeyframe) {
@@ -11,12 +11,13 @@ const getEasingSelectionFromCurrentKeyframes = ({ keyframeDisplayOffset, nodePat
11
11
  const resolvedKeyframeDisplayOffset = (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
12
12
  propStatus,
13
13
  keyframeDisplayOffset,
14
+ keyframePlaybackRate,
14
15
  });
15
16
  return {
16
17
  type: 'easing',
17
18
  nodePathInfo,
18
- fromFrame: fromKeyframe.frame + resolvedKeyframeDisplayOffset,
19
- toFrame: toKeyframe.frame + resolvedKeyframeDisplayOffset,
19
+ fromFrame: fromKeyframe.frame / keyframePlaybackRate + resolvedKeyframeDisplayOffset,
20
+ toFrame: toKeyframe.frame / keyframePlaybackRate + resolvedKeyframeDisplayOffset,
20
21
  segmentIndex,
21
22
  };
22
23
  };
@@ -2,7 +2,8 @@ export declare const clampInspectorKeyframeDisplayFrame: ({ durationInFrames, fr
2
2
  readonly durationInFrames: number;
3
3
  readonly frame: number;
4
4
  }) => number;
5
- export declare const getInspectorKeyframeSourceFrame: ({ displayFrame, keyframeDisplayOffset, }: {
5
+ export declare const getInspectorKeyframeSourceFrame: ({ displayFrame, keyframeDisplayOffset, keyframePlaybackRate, }: {
6
6
  readonly displayFrame: number;
7
7
  readonly keyframeDisplayOffset: number;
8
+ readonly keyframePlaybackRate: number;
8
9
  }) => number;
@@ -8,7 +8,7 @@ const clampInspectorKeyframeDisplayFrame = ({ durationInFrames, frame, }) => {
8
8
  return Math.min(Math.max(Math.round(frame), 0), durationInFrames - 1);
9
9
  };
10
10
  exports.clampInspectorKeyframeDisplayFrame = clampInspectorKeyframeDisplayFrame;
11
- const getInspectorKeyframeSourceFrame = ({ displayFrame, keyframeDisplayOffset, }) => {
12
- return displayFrame - keyframeDisplayOffset;
11
+ const getInspectorKeyframeSourceFrame = ({ displayFrame, keyframeDisplayOffset, keyframePlaybackRate, }) => {
12
+ return (displayFrame - keyframeDisplayOffset) * keyframePlaybackRate;
13
13
  };
14
14
  exports.getInspectorKeyframeSourceFrame = getInspectorKeyframeSourceFrame;
@@ -14,6 +14,7 @@ export declare const InspectorSequenceSection: React.FC<{
14
14
  readonly validatedLocation: CodePosition;
15
15
  readonly nodePathInfo: SequenceNodePathInfo;
16
16
  readonly keyframeDisplayOffset: number;
17
+ readonly keyframePlaybackRate: number;
17
18
  readonly renderTransformControls: () => React.ReactNode;
18
19
  }>;
19
20
  export {};
@@ -200,7 +200,7 @@ const hasSequenceControls = (sequence) => {
200
200
  return sequence.controls !== null;
201
201
  };
202
202
  exports.hasSequenceControls = hasSequenceControls;
203
- const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation, nodePathInfo, keyframeDisplayOffset, renderTransformControls, }) => {
203
+ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation, nodePathInfo, keyframeDisplayOffset, keyframePlaybackRate, renderTransformControls, }) => {
204
204
  var _a;
205
205
  var _b;
206
206
  const { tree, propStatuses, runtimeValues } = (0, use_timeline_expanded_tree_1.useTimelineExpandedTree)({
@@ -209,7 +209,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
209
209
  includeTextContent: true,
210
210
  includeSourceControls: true,
211
211
  });
212
- const { inspectorRevealRequest, selectedItems } = (0, TimelineSelection_1.useTimelineSelection)();
212
+ const { inspectorRevealRequest, selectedItems, selectItems } = (0, TimelineSelection_1.useTimelineSelection)();
213
213
  const selectedEffect = selectedItems.length === 1 &&
214
214
  (selectedItems[0].type === 'sequence-effect' ||
215
215
  selectedItems[0].type === 'sequence-effect-prop')
@@ -248,7 +248,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
248
248
  disabled: false,
249
249
  onClick: () => (0, timeline_asset_link_1.openTimelineAssetLink)(linkInfo, selectAsset),
250
250
  renderIcon: (color) => (jsx_runtime_1.jsx(AssetFileIcon_1.AssetFileIcon, { color: color, fileType: (0, get_preview_file_type_1.getPreviewFileType)(linkInfo.assetPath), style: assetSelectorIcon })),
251
- title: linkInfo.assetPath,
251
+ 'aria-label': linkInfo.assetPath,
252
252
  };
253
253
  }
254
254
  if ((linkInfo === null || linkInfo === void 0 ? void 0 : linkInfo.kind) === 'remote') {
@@ -259,7 +259,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
259
259
  ] })),
260
260
  disabled: false,
261
261
  onClick: () => (0, timeline_asset_link_1.openTimelineAssetLink)(linkInfo, selectAsset),
262
- title: linkInfo.href,
262
+ 'aria-label': linkInfo.href,
263
263
  };
264
264
  }
265
265
  return null;
@@ -521,14 +521,16 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
521
521
  type: 'add-effect',
522
522
  clientId: previewServerState.clientId,
523
523
  fileName: validatedLocation.source,
524
- nodePath: nodePathInfo.sequenceSubscriptionKey,
524
+ nodePathInfo,
525
+ selectItems,
525
526
  });
526
527
  }, [
527
528
  canAddEffect,
528
- nodePathInfo.sequenceSubscriptionKey,
529
+ nodePathInfo,
529
530
  previewServerState,
530
531
  setAdditionalSectionExpanded,
531
532
  setSelectedModal,
533
+ selectItems,
532
534
  validatedLocation.source,
533
535
  ]);
534
536
  const onConvertBorderRadius = (0, react_1.useCallback)(() => {
@@ -561,21 +563,21 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
561
563
  validatedLocation.source,
562
564
  ]);
563
565
  const borderRadiusAction = borderRadiusGroup ? (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, disabled: borderRadiusConversion === null ||
564
- previewServerState.type !== 'connected', onClick: onConvertBorderRadius, title: borderRadiusConversion === null
566
+ previewServerState.type !== 'connected', onClick: onConvertBorderRadius, "aria-label": borderRadiusConversion === null
565
567
  ? borderRadiusUsesShorthand
566
568
  ? 'A static border radius is required to use individual corners'
567
569
  : 'All four corners must have the same static value'
568
570
  : borderRadiusUsesShorthand
569
571
  ? 'Use individual corner radii'
570
572
  : 'Use one border radius value', renderAction: (color) => borderRadiusUsesShorthand ? (jsx_runtime_1.jsx(fullscreen_1.FullscreenIcon, { color: color, style: borderRadiusToggleIcon })) : (jsx_runtime_1.jsx(border_radius_1.BorderRadiusIcon, { color: color, style: borderRadiusToggleIcon })) })) : null;
571
- const transform3DAction = (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, disabled: automaticallyEnabled3DTransform, onClick: onToggle3DTransform, title: automaticallyEnabled3DTransform
573
+ const transform3DAction = (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, disabled: automaticallyEnabled3DTransform, onClick: onToggle3DTransform, "aria-label": automaticallyEnabled3DTransform
572
574
  ? '3D controls are required by the current transform values'
573
575
  : show3DTransformControls
574
576
  ? 'Hide 3D transform controls'
575
577
  : 'Show 3D transform controls', hoveredColor: show3DTransformControls ? colors_1.BLUE : undefined, unhoveredColor: show3DTransformControls ? colors_1.BLUE : colors_1.LIGHT_TEXT, renderAction: (color) => (jsx_runtime_1.jsx(cube_1.CubeIcon, { color: color, style: transform3DToggleIcon })) }));
576
- const effectsHeader = (jsx_runtime_1.jsx(CollapsibleInspectorSectionHeader_1.CollapsibleInspectorSectionHeader, { action: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, disabled: !canAddEffect, onClick: onAddEffect, title: canAddEffect ? 'Add effect' : undefined, renderAction: (color) => jsx_runtime_1.jsx(plus_1.Plus, { color: color, style: plusIcon }) }), expanded: effectsExpanded, label: "Effects", onToggle: hasEffects ? () => toggleAdditionalSection('effects') : null }));
578
+ const effectsHeader = (jsx_runtime_1.jsx(CollapsibleInspectorSectionHeader_1.CollapsibleInspectorSectionHeader, { action: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, disabled: !canAddEffect, onClick: onAddEffect, "aria-label": canAddEffect ? 'Add effect' : undefined, renderAction: (color) => jsx_runtime_1.jsx(plus_1.Plus, { color: color, style: plusIcon }) }), expanded: effectsExpanded, label: "Effects", onToggle: hasEffects ? () => toggleAdditionalSection('effects') : null }));
577
579
  const renderRow = ({ node, depth }) => {
578
- return (jsx_runtime_1.jsx(TimelineRowLayoutContext_1.TimelineRowLayoutContext.Provider, { value: TimelineRowLayoutContext_1.INSPECTOR_TIMELINE_ROW_LAYOUT, children: jsx_runtime_1.jsx(TimelineExpandedRow_1.TimelineExpandedRow, { node: node, depth: depth, nestedDepth: 0, rowDepthBase: 0, getIsExpanded: getIsExpanded, toggleTrack: toggleTrack, validatedLocation: validatedLocation, nodePath: nodePathInfo.sequenceSubscriptionKey, schema: schema, keyframeDisplayOffset: keyframeDisplayOffset, keyframeControlsMode: "inspector" }) }, JSON.stringify(node.nodePathInfo)));
580
+ return (jsx_runtime_1.jsx(TimelineRowLayoutContext_1.TimelineRowLayoutContext.Provider, { value: TimelineRowLayoutContext_1.INSPECTOR_TIMELINE_ROW_LAYOUT, children: jsx_runtime_1.jsx(TimelineExpandedRow_1.TimelineExpandedRow, { node: node, depth: depth, nestedDepth: 0, rowDepthBase: 0, getIsExpanded: getIsExpanded, toggleTrack: toggleTrack, validatedLocation: validatedLocation, nodePath: nodePathInfo.sequenceSubscriptionKey, schema: schema, keyframeDisplayOffset: keyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate, keyframeControlsMode: "inspector" }) }, JSON.stringify(node.nodePathInfo)));
579
581
  };
580
582
  const renderControlGroupHeader = (group) => {
581
583
  const expanded = isControlGroupExpanded(group);
@@ -90,9 +90,9 @@ const InspectorSourceLocation = ({ location, canOpen, onOpen, renderIcon, size =
90
90
  return null;
91
91
  }
92
92
  if (size === 'quick-action') {
93
- return (jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: !canOpen, onClick: onClick, renderIcon: (iconColor) => renderIcon === null || renderIcon === void 0 ? void 0 : renderIcon(iconColor), style: quickActionStyle, title: fileLocation !== null && fileLocation !== void 0 ? fileLocation : undefined, children: label }));
93
+ return (jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: !canOpen, onClick: onClick, renderIcon: (iconColor) => renderIcon === null || renderIcon === void 0 ? void 0 : renderIcon(iconColor), style: quickActionStyle, "aria-label": fileLocation !== null && fileLocation !== void 0 ? fileLocation : undefined, children: label }));
94
94
  }
95
- return (jsx_runtime_1.jsxs("button", { type: "button", style: style, title: fileLocation !== null && fileLocation !== void 0 ? fileLocation : undefined, onClick: onClick, onPointerEnter: () => setHovered(true), onPointerLeave: () => setHovered(false), children: [renderIcon ? renderIcon(color) : null, jsx_runtime_1.jsx("span", { style: sourceLocationLabelStyle, children: label })
95
+ return (jsx_runtime_1.jsxs("button", { type: "button", style: style, "aria-label": fileLocation !== null && fileLocation !== void 0 ? fileLocation : undefined, onClick: onClick, onPointerEnter: () => setHovered(true), onPointerLeave: () => setHovered(false), children: [renderIcon ? renderIcon(color) : null, jsx_runtime_1.jsx("span", { style: sourceLocationLabelStyle, children: label })
96
96
  ] }));
97
97
  };
98
98
  exports.InspectorSourceLocation = InspectorSourceLocation;
@@ -125,7 +125,7 @@ const key = {
125
125
  };
126
126
  const chordButton = {
127
127
  alignItems: 'center',
128
- background: 'transparent',
128
+ background: colors_1.TRANSPARENT,
129
129
  border: 0,
130
130
  cursor: 'pointer',
131
131
  display: 'flex',
@@ -354,7 +354,7 @@ const KeyboardShortcutsSettings = () => {
354
354
  });
355
355
  setShortcutsEdited(true);
356
356
  setRecording(null);
357
- }, children: recording === shortcut.actionId ? (jsx_runtime_1.jsx("span", { style: emptyShortcut, children: "Press shortcut\u2026" })) : (jsx_runtime_1.jsx(ShortcutChords, { values: shortcutValues })) }) }), jsx_runtime_1.jsx("span", { style: actionCell, children: jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { renderAction: (color) => jsx_runtime_1.jsx(caret_1.CaretDown, { color: color }), title: `Actions for ${shortcut.action}`, values: shortcutMenuItems, variant: "compact" }) })
357
+ }, children: recording === shortcut.actionId ? (jsx_runtime_1.jsx("span", { style: emptyShortcut, children: "Press shortcut\u2026" })) : (jsx_runtime_1.jsx(ShortcutChords, { values: shortcutValues })) }) }), jsx_runtime_1.jsx("span", { style: actionCell, children: jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { renderAction: (color) => jsx_runtime_1.jsx(caret_1.CaretDown, { color: color }), "aria-label": `Actions for ${shortcut.action}`, values: shortcutMenuItems, variant: "compact" }) })
358
358
  ] }))] }, shortcut.action));
359
359
  }) })
360
360
  ] }, group.name))), (error !== null && error !== void 0 ? error : settingsError) ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
@@ -102,9 +102,9 @@ const LicenseKeyDetailsDisplay = ({ details }) => {
102
102
  const projectUrl = `${PRO_HOST}/projects/${details.projectSlug}`;
103
103
  const usageUrl = `${projectUrl}/usage#client-renders-usage`;
104
104
  const hasActiveLicense = (0, exports.hasActiveCompanyLicense)(details);
105
- return (jsx_runtime_1.jsxs("div", { children: [jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: false, onClick: () => window.open(usageUrl, '_blank', 'noopener,noreferrer'), renderIcon: (color) => (jsx_runtime_1.jsx(check_circle_filled_1.CheckCircleFilled, { style: { ...iconStyle, fill: color } })), style: actionStyle, title: "View license usage", children: jsx_runtime_1.jsxs("span", { style: actionContent, children: [
105
+ return (jsx_runtime_1.jsxs("div", { children: [jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: false, onClick: () => window.open(usageUrl, '_blank', 'noopener,noreferrer'), renderIcon: (color) => (jsx_runtime_1.jsx(check_circle_filled_1.CheckCircleFilled, { style: { ...iconStyle, fill: color } })), style: actionStyle, "aria-label": "View license usage", children: jsx_runtime_1.jsxs("span", { style: actionContent, children: [
106
106
  jsx_runtime_1.jsxs("span", { style: actionText, children: ["Belongs to ", details.projectName] }), jsx_runtime_1.jsx("span", { style: actionLabel, children: "View usage" })
107
- ] }) }), jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: false, onClick: () => window.open(projectUrl, '_blank', 'noopener,noreferrer'), renderIcon: (color) => hasActiveLicense ? (jsx_runtime_1.jsx(check_circle_filled_1.CheckCircleFilled, { style: { ...iconStyle, fill: color } })) : (jsx_runtime_1.jsx(ErrorIcon, {})), style: actionStyle, title: "Manage Company License", children: jsx_runtime_1.jsxs("span", { style: actionContent, children: [
107
+ ] }) }), jsx_runtime_1.jsx(common_1.InspectorQuickAction, { disabled: false, onClick: () => window.open(projectUrl, '_blank', 'noopener,noreferrer'), renderIcon: (color) => hasActiveLicense ? (jsx_runtime_1.jsx(check_circle_filled_1.CheckCircleFilled, { style: { ...iconStyle, fill: color } })) : (jsx_runtime_1.jsx(ErrorIcon, {})), style: actionStyle, "aria-label": "Manage Company License", children: jsx_runtime_1.jsxs("span", { style: actionContent, children: [
108
108
  jsx_runtime_1.jsx("span", { style: hasActiveLicense ? actionText : inactiveLicenseText, children: hasActiveLicense
109
109
  ? 'Active Company License'
110
110
  : 'No active Company License' }), jsx_runtime_1.jsx("span", { style: actionLabel, children: "Manage" })
@@ -25,6 +25,6 @@ const LoopToggle = ({ loop, setLoop }) => {
25
25
  const onClick = (0, react_1.useCallback)(() => {
26
26
  (0, exports.toggleLoop)(setLoop);
27
27
  }, [setLoop]);
28
- return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: accessibilityLabel, shortcut: shortcutsDisabled ? null : shortcut, delay: 800, dismissOnClick: false, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: "", "aria-label": accessibilityLabel, "aria-keyshortcuts": shortcutsDisabled ? undefined : ariaShortcut || undefined, "aria-pressed": loop, onClick: onClick, style: buttonStyle, children: (color) => (jsx_runtime_1.jsx("svg", { viewBox: "0 0 512 512", style: { width: 18, height: 18 }, children: jsx_runtime_1.jsx("path", { fill: loop ? colors_1.BLUE : color, d: "M384 150.3V41.6l64 53.3v2l-64 53.3zM352 23.5V80H192C86 80 0 166 0 272c0 8.8 7.2 16 16 16s16-7.2 16-16c0-88.4 71.6-160 160-160h160v56.5c0 13 10.5 23.5 23.5 23.5 5.5 0 10.8-1.9 15-5.4l78-65c7.3-6.1 11.5-15.1 11.5-24.6v-2c0-9.5-4.2-18.5-11.5-24.6l-78-65c-4.2-3.5-9.5-5.4-15-5.4-13 0-23.5 10.5-23.5 23.5zM128 415.9v54.5l-64-53.3v-2l64-53.3v54.1zM160 400v-56.5c0-13-10.5-23.5-23.5-23.5-5.5 0-10.8 1.9-15 5.4l-78 65C36.2 396.5 32 405.5 32 415v2c0 9.5 4.2 18.5 11.5 24.6l78 65c4.2 3.5 9.5 5.4 15 5.4 13 0 23.5-10.5 23.5-23.5V432h160c106 0 192-86 192-192 0-8.8-7.2-16-16-16s-16 7.2-16 16c0 88.4-71.6 160-160 160H160z" }) })) }) }));
28
+ return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: accessibilityLabel, shortcut: shortcutsDisabled ? null : shortcut, delay: 800, dismissOnClick: false, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { "aria-label": accessibilityLabel, "aria-keyshortcuts": shortcutsDisabled ? undefined : ariaShortcut || undefined, "aria-pressed": loop, onClick: onClick, style: buttonStyle, children: (color) => (jsx_runtime_1.jsx("svg", { viewBox: "0 0 512 512", style: { width: 18, height: 18 }, children: jsx_runtime_1.jsx("path", { fill: loop ? colors_1.BLUE : color, d: "M384 150.3V41.6l64 53.3v2l-64 53.3zM352 23.5V80H192C86 80 0 166 0 272c0 8.8 7.2 16 16 16s16-7.2 16-16c0-88.4 71.6-160 160-160h160v56.5c0 13 10.5 23.5 23.5 23.5 5.5 0 10.8-1.9 15-5.4l78-65c7.3-6.1 11.5-15.1 11.5-24.6v-2c0-9.5-4.2-18.5-11.5-24.6l-78-65c-4.2-3.5-9.5-5.4-15-5.4-13 0-23.5 10.5-23.5 23.5zM128 415.9v54.5l-64-53.3v-2l64-53.3v54.1zM160 400v-56.5c0-13-10.5-23.5-23.5-23.5-5.5 0-10.8 1.9-15 5.4l-78 65C36.2 396.5 32 405.5 32 415v2c0 9.5 4.2 18.5 11.5 24.6l78 65c4.2 3.5 9.5 5.4 15 5.4 13 0 23.5-10.5 23.5-23.5V432h160c106 0 192-86 192-192 0-8.8-7.2-16-16-16s-16 7.2-16 16c0 88.4-71.6 160-160 160H160z" }) })) }) }));
29
29
  };
30
30
  exports.LoopToggle = LoopToggle;
@@ -124,9 +124,11 @@ const MenuSubItem = ({ label, leaveLeftSpace, leftItem, onActionChosen, id, sele
124
124
  });
125
125
  }
126
126
  }, [selected]);
127
- return (jsx_runtime_1.jsx("div", { ref: ref, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, style: style, onPointerUp: onPointerUp, role: "button", className: is_menu_item_1.MENU_ITEM_CLASSNAME, children: jsx_runtime_1.jsxs(layout_1.Row, { align: "center", children: [leaveLeftSpace ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
127
+ return (jsx_runtime_1.jsx("div", { ref: ref, "aria-label": typeof label === 'string' ? label : undefined, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, style: style, onPointerUp: onPointerUp, role: "button", className: is_menu_item_1.MENU_ITEM_CLASSNAME, children: jsx_runtime_1.jsxs(layout_1.Row, { align: "center", children: [leaveLeftSpace ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
128
128
  jsx_runtime_1.jsx("div", { style: leftSpace, children: leftItem }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 })
129
- ] })) : null, jsx_runtime_1.jsx("div", { style: labelStyle, title: typeof label === 'string' ? label : undefined, children: label }), ' ', jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), subMenu ? jsx_runtime_1.jsx(caret_1.CaretRight, {}) : null, keyHint && !(0, use_keybinding_1.areKeyboardShortcutsDisabled)() ? (jsx_runtime_1.jsx("span", { style: keyHintCss, children: keyHint })) : null, portalStyle && subMenu
129
+ ] })) : null, jsx_runtime_1.jsx("div", { style: labelStyle, children: label }),
130
+ " ",
131
+ jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), subMenu ? jsx_runtime_1.jsx(caret_1.CaretRight, {}) : null, keyHint && !(0, use_keybinding_1.areKeyboardShortcutsDisabled)() ? (jsx_runtime_1.jsx("span", { style: keyHintCss, children: keyHint })) : null, portalStyle && subMenu
130
132
  ? react_dom_1.default.createPortal(jsx_runtime_1.jsx(SubMenu_1.SubMenuComponent, { onQuitFullMenu: onQuitMenu, subMenu: subMenu, onQuitSubMenu: onQuitSubmenu, portalStyle: portalStyle, subMenuActivated: subMenuActivated }), (0, portals_1.getPortal)(currentZIndex))
131
133
  : null] }) }));
132
134
  };
@@ -3,8 +3,8 @@ export declare const MENU_VERTICAL_PADDING = 4;
3
3
  export declare const SUBMENU_LEFT_INSET = -8;
4
4
  export declare const MAX_MENU_WIDTH = 400;
5
5
  export declare const MAX_MOBILE_MENU_WIDTH = 300;
6
- export declare const SHADOW_TOWARDS_BOTTOM = "0 2px 8px rgba(0, 0, 0, 0.5)";
7
- export declare const SHADOW_TOWARDS_TOP = "0 -2px 8px rgba(0, 0, 0, 0.5)";
6
+ export declare const SHADOW_TOWARDS_BOTTOM = "0 2px 8px var(--remotion-studio-black-alpha-50)";
7
+ export declare const SHADOW_TOWARDS_TOP = "0 -2px 8px var(--remotion-studio-black-alpha-50)";
8
8
  export declare const menuContainerTowardsBottom: React.CSSProperties;
9
9
  export declare const menuContainerTowardsTop: React.CSSProperties;
10
10
  export declare const fullScreenOverlay: React.CSSProperties;
@@ -53,7 +53,7 @@ const MenuBuildIndicator = ({ mobileLayout }) => {
53
53
  window.remotion_finishedBuilding = undefined;
54
54
  };
55
55
  }, []);
56
- return (jsx_runtime_1.jsxs("div", { style: cwd, title: window.remotion_cwd, children: [
56
+ return (jsx_runtime_1.jsxs("div", { role: "group", style: cwd, "aria-label": window.remotion_cwd, children: [
57
57
  jsx_runtime_1.jsx(layout_1.Spacing, { x: mobileLayout ? 0.5 : 2 }), window.remotion_projectName, jsx_runtime_1.jsx(MenuCompositionName_1.MenuCompositionName, {}), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("div", { style: openInEditor, children: jsx_runtime_1.jsx(InspectorOpenInEditor_1.InspectorOpenInEditor, { location: folderLocation, locationType: "folder", showTooltips: true }) }), mobileLayout ? null : jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), mobileLayout ? (isBuilding ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
58
58
  jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx("div", { style: spinner, children: jsx_runtime_1.jsx(Spinner_1.Spinner, { duration: 0.5, size: spinnerSize, color: colors_1.WHITE_ALPHA_80 }) })
59
59
  ] })) : null) : isBuilding ? (jsx_runtime_1.jsx("div", { style: spinner, children: jsx_runtime_1.jsx(Spinner_1.Spinner, { duration: 0.5, size: spinnerSize, color: colors_1.WHITE_ALPHA_80 }) })) : (jsx_runtime_1.jsx("div", { style: noSpinner }))] }));