@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
@@ -90,6 +90,6 @@ const MenuCompositionName = () => {
90
90
  }
91
91
  const name = (_b = composition === null || composition === void 0 ? void 0 : composition.id) !== null && _b !== void 0 ? _b : asset;
92
92
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
93
- jsx_runtime_1.jsx("span", { style: slashStyle, children: "/" }), composition ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, style: contextMenuStyle, children: jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { "aria-label": "Open composition menu", className: hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME, getItems: getContextMenuItems, hoveredColor: colors_1.WHITE, renderAction: () => composition.id, style: compositionNameStyle, title: "Open composition menu", unhoveredColor: colors_1.WHITE_ALPHA_80, variant: null }) })) : (jsx_runtime_1.jsx("span", { style: assetNameStyle, children: name }))] }));
93
+ jsx_runtime_1.jsx("span", { style: slashStyle, children: "/" }), composition ? (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, style: contextMenuStyle, children: jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { "aria-label": "Open composition menu", className: hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME, getItems: getContextMenuItems, hoveredColor: colors_1.WHITE, renderAction: () => composition.id, style: compositionNameStyle, unhoveredColor: colors_1.WHITE_ALPHA_80, variant: null }) })) : (jsx_runtime_1.jsx("span", { style: assetNameStyle, children: name }))] }));
94
94
  };
95
95
  exports.MenuCompositionName = MenuCompositionName;
@@ -33,6 +33,7 @@ const QuickSwitcher_1 = __importDefault(require("./QuickSwitcher/QuickSwitcher")
33
33
  const RenderStatusModal_1 = require("./RenderModal/RenderStatusModal");
34
34
  const ServerRenderModal_1 = require("./RenderModal/ServerRenderModal");
35
35
  const WebRenderModal_1 = require("./RenderModal/WebRenderModal");
36
+ const QueueJobErrorModal_1 = require("./RenderQueue/QueueJobErrorModal");
36
37
  const SettingsModal_1 = require("./SettingsModal");
37
38
  const SvgImportDialog_1 = require("./SvgImportDialog");
38
39
  const TranscriptionModalWithOptionalWhisper_1 = require("./Transcription/TranscriptionModalWithOptionalWhisper");
@@ -70,16 +71,16 @@ const Modals = ({ readOnlyStudio }) => {
70
71
  }
71
72
  (async () => {
72
73
  const confirmed = await confirm({
73
- title: 'Add Element catalog',
74
+ title: 'Add Element Library',
74
75
  message: (jsx_runtime_1.jsx(ElementInstallConfirmation_1.ElementLibraryAddConfirmation, { displayName: event.displayName, origin: event.origin, url: event.url })),
75
- confirmLabel: 'Add catalog',
76
+ confirmLabel: 'Add Element Library',
76
77
  cancelLabel: 'Cancel',
77
78
  });
78
79
  if (!confirmed) {
79
80
  return;
80
81
  }
81
82
  if (previewServerState.type !== 'connected') {
82
- (0, NotificationCenter_1.showNotification)('Could not add catalog: Studio disconnected', 4000);
83
+ (0, NotificationCenter_1.showNotification)('Could not add Element Library: Studio disconnected', 4000);
83
84
  return;
84
85
  }
85
86
  try {
@@ -96,17 +97,17 @@ const Modals = ({ readOnlyStudio }) => {
96
97
  ],
97
98
  });
98
99
  if (!result.success) {
99
- (0, NotificationCenter_1.showNotification)(`Could not add catalog: ${result.reason}`, 4000);
100
+ (0, NotificationCenter_1.showNotification)(`Could not add Element Library: ${result.reason}`, 4000);
100
101
  }
101
102
  }
102
103
  catch (error) {
103
- (0, NotificationCenter_1.showNotification)(`Could not add catalog: ${error.message}`, 4000);
104
+ (0, NotificationCenter_1.showNotification)(`Could not add Element Library: ${error.message}`, 4000);
104
105
  }
105
106
  })();
106
107
  });
107
108
  }, [confirm, isBrowserStudio, previewServerState, subscribeToEvent]);
108
109
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'new-comp' && (jsx_runtime_1.jsx(NewComposition_1.NewComposition, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack, canvasCapture: modalContextType.canvasCapture })), modalContextType && modalContextType.type === 'new-folder' && (jsx_runtime_1.jsx(NewFolder_1.NewFolder, { parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'duplicate-comp' && (jsx_runtime_1.jsx(DuplicateComposition_1.DuplicateComposition, { compositionType: modalContextType.compositionType, compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-comp' && (jsx_runtime_1.jsx(DeleteComposition_1.DeleteComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'rename-comp' && (jsx_runtime_1.jsx(RenameComposition_1.RenameComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-folder' && (jsx_runtime_1.jsx(DeleteFolder_1.DeleteFolder, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'rename-folder' && (jsx_runtime_1.jsx(RenameFolder_1.RenameFolder, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'rename-static-file' && (jsx_runtime_1.jsx(RenameStaticFile_1.RenameStaticFileModal, { relativePath: modalContextType.relativePath })), modalContextType && modalContextType.type === 'input-props-override' && (jsx_runtime_1.jsx(OverrideInputProps_1.OverrideInputPropsModal, {})), modalContextType && modalContextType.type === 'settings' ? (jsx_runtime_1.jsx(SettingsModal_1.SettingsModal, { initialTab: modalContextType.initialTab, initialPublicLicenseKey: modalContextType.initialPublicLicenseKey }, `${modalContextType.initialTab}-${modalContextType.initialPublicLicenseKey}`)) : null, modalContextType && modalContextType.type === 'web-render' && (jsx_runtime_1.jsx(WebRenderModal_1.WebRenderModalWithLoader, { ...modalContextType })), modalContextType &&
109
110
  modalContextType.type === 'server-render' &&
110
- (canRender || modalContextType.readOnlyStudio) ? (jsx_runtime_1.jsx(ServerRenderModal_1.RenderModalWithLoader, { readOnlyStudio: (_a = modalContextType.readOnlyStudio) !== null && _a !== void 0 ? _a : false, initialFrame: modalContextType.initialFrame, initialDarkMode: modalContextType.initialDarkMode, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialOffthreadVideoThreads: modalContextType.initialOffthreadVideoThreads, initialMediaCacheSizeInBytes: modalContextType.initialMediaCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialGopSize: modalContextType.initialGopSize, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, initialEncodingBufferSize: modalContextType.initialEncodingBufferSize, initialEncodingMaxRate: modalContextType.initialEncodingMaxRate, initialUserAgent: modalContextType.initialUserAgent, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux, initialRepro: modalContextType.initialRepro, initialBeep: modalContextType.initialBeep, initialForSeamlessAacConcatenation: modalContextType.initialForSeamlessAacConcatenation, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec, renderTypeOfLastRender: modalContextType.renderTypeOfLastRender, defaultMetadata: modalContextType.defaulMetadata, initialHardwareAcceleration: modalContextType.initialHardwareAcceleration, initialSampleRate: modalContextType.initialSampleRate, initialChromeMode: modalContextType.initialChromeMode, renderDefaults: modalContextType.renderDefaults })) : null, modalContextType && modalContextType.type === 'render-progress' && (jsx_runtime_1.jsx(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'transcribe' ? (jsx_runtime_1.jsx(TranscriptionModalWithOptionalWhisper_1.TranscriptionModalWithOptionalWhisper, { state: modalContextType })) : null, modalContextType && modalContextType.type === 'video-matting' ? (jsx_runtime_1.jsx(VideoMattingModalWithOptionalPackage_1.VideoMattingModalWithOptionalPackage, { state: modalContextType })) : null, modalContextType && modalContextType.type === 'fix-computed-value' && (jsx_runtime_1.jsx(FixComputedValueModal_1.FixComputedValueModal, { state: modalContextType })), modalContextType && modalContextType.type === 'generate-with-agent' ? (jsx_runtime_1.jsx(GenerateWithAgentModal_1.GenerateWithAgentModal, { state: modalContextType })) : null, modalContextType && modalContextType.type === 'quick-switcher' && (jsx_runtime_1.jsx(QuickSwitcher_1.default, { readOnlyStudio: readOnlyStudio, invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode, assetSelection: modalContextType.assetSelection, compositionSelection: modalContextType.compositionSelection })), modalContextType && modalContextType.type === 'asset-selection' ? (jsx_runtime_1.jsx(AssetSelectorModal_1.AssetSelectorModal, { readOnlyStudio: readOnlyStudio, state: modalContextType })) : null, modalContextType && modalContextType.type === 'element-library' && (jsx_runtime_1.jsx(ElementLibraryModal_1.ElementLibraryModal, { name: modalContextType.name, url: modalContextType.url })), modalContextType && modalContextType.type === 'element-install' && (jsx_runtime_1.jsx(ElementInstallConfirmation_1.ElementInstallConfirmation, { state: modalContextType })), modalContextType && modalContextType.type === 'add-effect' && (jsx_runtime_1.jsx(EffectPickerModal_1.EffectPickerModal, { state: modalContextType })), modalContextType && modalContextType.type === 'confirmation-dialog' && (jsx_runtime_1.jsx(ConfirmationDialog_1.ConfirmationDialog, { state: modalContextType })), modalContextType && modalContextType.type === 'svg-import-dialog' && (jsx_runtime_1.jsx(SvgImportDialog_1.SvgImportDialog, { state: modalContextType })), (0, studio_runtime_config_1.getStudioAskAIEnabled)() && jsx_runtime_1.jsx(AskAiModal_1.AskAiModal, {})] }));
111
+ (canRender || modalContextType.readOnlyStudio) ? (jsx_runtime_1.jsx(ServerRenderModal_1.RenderModalWithLoader, { readOnlyStudio: (_a = modalContextType.readOnlyStudio) !== null && _a !== void 0 ? _a : false, initialFrame: modalContextType.initialFrame, initialDarkMode: modalContextType.initialDarkMode, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialOffthreadVideoThreads: modalContextType.initialOffthreadVideoThreads, initialMediaCacheSizeInBytes: modalContextType.initialMediaCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialGopSize: modalContextType.initialGopSize, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, initialEncodingBufferSize: modalContextType.initialEncodingBufferSize, initialEncodingMaxRate: modalContextType.initialEncodingMaxRate, initialUserAgent: modalContextType.initialUserAgent, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux, initialRepro: modalContextType.initialRepro, initialBeep: modalContextType.initialBeep, initialForSeamlessAacConcatenation: modalContextType.initialForSeamlessAacConcatenation, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec, renderTypeOfLastRender: modalContextType.renderTypeOfLastRender, defaultMetadata: modalContextType.defaulMetadata, initialHardwareAcceleration: modalContextType.initialHardwareAcceleration, initialSampleRate: modalContextType.initialSampleRate, initialChromeMode: modalContextType.initialChromeMode, renderDefaults: modalContextType.renderDefaults })) : null, modalContextType && modalContextType.type === 'render-progress' && (jsx_runtime_1.jsx(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'queue-job-error' ? (jsx_runtime_1.jsx(QueueJobErrorModal_1.QueueJobErrorModal, { title: modalContextType.title, error: modalContextType.error })) : null, modalContextType && modalContextType.type === 'transcribe' ? (jsx_runtime_1.jsx(TranscriptionModalWithOptionalWhisper_1.TranscriptionModalWithOptionalWhisper, { state: modalContextType })) : null, modalContextType && modalContextType.type === 'video-matting' ? (jsx_runtime_1.jsx(VideoMattingModalWithOptionalPackage_1.VideoMattingModalWithOptionalPackage, { state: modalContextType })) : null, modalContextType && modalContextType.type === 'fix-computed-value' && (jsx_runtime_1.jsx(FixComputedValueModal_1.FixComputedValueModal, { state: modalContextType })), modalContextType && modalContextType.type === 'generate-with-agent' ? (jsx_runtime_1.jsx(GenerateWithAgentModal_1.GenerateWithAgentModal, { state: modalContextType })) : null, modalContextType && modalContextType.type === 'quick-switcher' && (jsx_runtime_1.jsx(QuickSwitcher_1.default, { readOnlyStudio: readOnlyStudio, invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode, assetSelection: modalContextType.assetSelection, compositionSelection: modalContextType.compositionSelection })), modalContextType && modalContextType.type === 'asset-selection' ? (jsx_runtime_1.jsx(AssetSelectorModal_1.AssetSelectorModal, { readOnlyStudio: readOnlyStudio, state: modalContextType })) : null, modalContextType && modalContextType.type === 'element-library' && (jsx_runtime_1.jsx(ElementLibraryModal_1.ElementLibraryModal, { name: modalContextType.name, url: modalContextType.url })), modalContextType && modalContextType.type === 'element-install' && (jsx_runtime_1.jsx(ElementInstallConfirmation_1.ElementInstallConfirmation, { state: modalContextType })), modalContextType && modalContextType.type === 'add-effect' && (jsx_runtime_1.jsx(EffectPickerModal_1.EffectPickerModal, { state: modalContextType })), modalContextType && modalContextType.type === 'confirmation-dialog' && (jsx_runtime_1.jsx(ConfirmationDialog_1.ConfirmationDialog, { state: modalContextType })), modalContextType && modalContextType.type === 'svg-import-dialog' && (jsx_runtime_1.jsx(SvgImportDialog_1.SvgImportDialog, { state: modalContextType })), (0, studio_runtime_config_1.getStudioAskAIEnabled)() && jsx_runtime_1.jsx(AskAiModal_1.AskAiModal, {})] }));
111
112
  };
112
113
  exports.Modals = Modals;
@@ -7,7 +7,9 @@ const react_1 = require("react");
7
7
  const colors_1 = require("../helpers/colors");
8
8
  const check_circle_filled_1 = require("../icons/check-circle-filled");
9
9
  const cloud_download_1 = require("../icons/cloud-download");
10
+ const models_1 = require("../icons/models");
10
11
  const trash_1 = require("../icons/trash");
12
+ const ActionTooltip_1 = require("./ActionTooltip");
11
13
  const InlineAction_1 = require("./InlineAction");
12
14
  const is_menu_item_1 = require("./Menu/is-menu-item");
13
15
  const ValidationMessage_1 = require("./NewComposition/ValidationMessage");
@@ -40,15 +42,14 @@ const descriptionStyle = {
40
42
  const list = { marginTop: 14 };
41
43
  const modelRow = {
42
44
  alignItems: 'center',
43
- borderBottom: colors_1.BORDER_WHITE_ALPHA_12,
44
45
  display: 'flex',
45
46
  gap: 10,
46
47
  minHeight: 38,
47
- padding: '0 10px',
48
48
  };
49
- const lastModelRow = {
50
- ...modelRow,
51
- borderBottom: 'none',
49
+ const modelIcon = {
50
+ flexShrink: 0,
51
+ height: 16,
52
+ width: 16,
52
53
  };
53
54
  const statusIcon = {
54
55
  flexShrink: 0,
@@ -56,7 +57,7 @@ const statusIcon = {
56
57
  width: 14,
57
58
  };
58
59
  const modelName = {
59
- color: colors_1.WHITE,
60
+ color: colors_1.LIGHT_TEXT,
60
61
  flex: 1,
61
62
  fontFamily: 'monospace',
62
63
  fontSize: 13,
@@ -175,7 +176,7 @@ const ModelManager = ({ ariaLabel, availableModels, description, indent, isModel
175
176
  return jsx_runtime_1.jsx(trash_1.TrashIcon, { color: color, style: actionIcon });
176
177
  }, []);
177
178
  const actionInProgress = actionState.type === 'downloading' || actionState.type === 'removing';
178
- return (jsx_runtime_1.jsx("div", { style: visible ? modelPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsxs("div", { style: indent ? container : flushContainer, children: [description === null ? null : (jsx_runtime_1.jsx("p", { style: descriptionStyle, children: description })), cacheCheckError ? (jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { align: "flex-start", message: cacheCheckError, type: "error" })) : null, jsx_runtime_1.jsx("div", { style: description === null ? undefined : list, role: "list", "aria-label": ariaLabel, children: availableModels.map((model, index) => {
179
+ return (jsx_runtime_1.jsx("div", { style: visible ? modelPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsxs("div", { style: indent ? container : flushContainer, children: [description === null ? null : (jsx_runtime_1.jsx("p", { style: descriptionStyle, children: description })), cacheCheckError ? (jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { align: "flex-start", message: cacheCheckError, type: "error" })) : null, jsx_runtime_1.jsx("div", { style: description === null ? undefined : list, role: "list", "aria-label": ariaLabel, children: availableModels.map((model) => {
179
180
  var _a;
180
181
  const cached = (_a = cachedModels === null || cachedModels === void 0 ? void 0 : cachedModels.has(model.name)) !== null && _a !== void 0 ? _a : false;
181
182
  const processingThisModel = actionState.type !== 'idle' &&
@@ -192,8 +193,8 @@ const ModelManager = ({ ariaLabel, availableModels, description, indent, isModel
192
193
  : actionState.type === 'error' && actionState.model === model.name
193
194
  ? actionState.message
194
195
  : (0, studio_shared_1.formatBytes)(model.webGpuDownloadSize);
195
- return (jsx_runtime_1.jsxs("div", { role: "listitem", style: index === availableModels.length - 1 ? lastModelRow : modelRow, children: [
196
- jsx_runtime_1.jsx("span", { style: modelName, children: model.name }), jsx_runtime_1.jsx("span", { style: status, title: modelStatus, children: modelStatus }), cached ? (jsx_runtime_1.jsx(check_circle_filled_1.CheckCircleFilled, { "aria-hidden": true, style: { ...statusIcon, fill: colors_1.BLUE } })) : null, processingThisModel ? (jsx_runtime_1.jsx("span", { style: actionSlot, children: jsx_runtime_1.jsx(Spinner_1.Spinner, { duration: 0.5, size: 14 }) })) : cached ? (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { disabled: actionInProgress, onClick: () => remove(model.name), renderAction: renderRemoveIcon, title: `Remove ${model.name}`, variant: null })) : (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { disabled: cachedModels === null || actionInProgress, onClick: () => downloadModel(model.name), renderAction: renderDownloadIcon, title: `Download ${model.name}`, variant: null }))] }, model.name));
196
+ return (jsx_runtime_1.jsxs("div", { role: "listitem", style: modelRow, children: [
197
+ jsx_runtime_1.jsx(models_1.ModelsIcon, { "aria-hidden": true, color: colors_1.LIGHT_TEXT, style: modelIcon }), jsx_runtime_1.jsx("span", { style: modelName, children: model.name }), jsx_runtime_1.jsx("span", { role: "group", style: status, "aria-label": modelStatus, children: modelStatus }), cached ? (jsx_runtime_1.jsx(check_circle_filled_1.CheckCircleFilled, { "aria-hidden": true, style: { ...statusIcon, fill: colors_1.BLUE } })) : null, processingThisModel ? (jsx_runtime_1.jsx("span", { style: actionSlot, children: jsx_runtime_1.jsx(Spinner_1.Spinner, { duration: 0.5, size: 14 }) })) : cached ? (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Uninstall", shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { "aria-label": `Remove ${model.name}`, disabled: actionInProgress, onClick: () => remove(model.name), renderAction: renderRemoveIcon, variant: null }) })) : (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Install", shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { "aria-label": `Download ${model.name}`, disabled: cachedModels === null || actionInProgress, onClick: () => downloadModel(model.name), renderAction: renderDownloadIcon, variant: null }) }))] }, model.name));
197
198
  }) })
198
199
  ] }) }));
199
200
  };
@@ -26,6 +26,6 @@ const MuteToggle = ({ muted, setMuted }) => {
26
26
  (0, exports.toggleMute)(setMuted);
27
27
  }, [setMuted]);
28
28
  const accessibilityLabel = muted ? 'Unmute video' : 'Mute video';
29
- return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Mute", 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, onClick: onClick, style: buttonStyle, children: (color) => muted ? (jsx_runtime_1.jsx(media_volume_1.VolumeOffIcon, { color: colors_1.BLUE })) : (jsx_runtime_1.jsx(media_volume_1.VolumeOnIcon, { color: color })) }) }));
29
+ return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Mute", 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, onClick: onClick, style: buttonStyle, children: (color) => muted ? (jsx_runtime_1.jsx(media_volume_1.VolumeOffIcon, { color: colors_1.BLUE })) : (jsx_runtime_1.jsx(media_volume_1.VolumeOnIcon, { color: color })) }) }));
30
30
  };
31
31
  exports.MuteToggle = MuteToggle;
@@ -3,16 +3,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CancelButton = exports.CancelIcon = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const colors_1 = require("../../helpers/colors");
6
+ const hoverable_1 = require("../../helpers/hoverable");
6
7
  const z_index_1 = require("../../state/z-index");
7
8
  const style = {
8
9
  appearance: 'none',
9
10
  border: 'none',
10
- backgroundColor: colors_1.TRANSPARENT,
11
- color: colors_1.WHITE,
12
- cursor: 'pointer',
11
+ borderRadius: 4,
12
+ cursor: 'default',
13
13
  display: 'inline-flex',
14
14
  justifyContent: 'center',
15
15
  alignItems: 'center',
16
+ ...(0, hoverable_1.hoverableStyle)({
17
+ idleBackground: colors_1.TRANSPARENT,
18
+ hoverBackground: colors_1.WHITE_ALPHA_06,
19
+ idleColor: colors_1.LIGHT_TEXT,
20
+ hoverColor: colors_1.WHITE,
21
+ }),
16
22
  };
17
23
  const CancelIcon = (props) => {
18
24
  return (jsx_runtime_1.jsx("svg", { viewBox: "0 0 640 640", ...props, children: jsx_runtime_1.jsx("path", { fill: colors_1.CURRENT_COLOR, d: "M507.3 155.3C513.5 149.1 513.5 138.9 507.3 132.7C501.1 126.5 490.9 126.5 484.7 132.7L320 297.4L155.3 132.7C149.1 126.5 138.9 126.5 132.7 132.7C126.5 138.9 126.5 149.1 132.7 155.3L297.4 320L132.7 484.7C126.5 490.9 126.5 501.1 132.7 507.3C138.9 513.5 149.1 513.5 155.3 507.3L320 342.6L484.7 507.3C490.9 513.5 501.1 513.5 507.3 507.3C513.5 501.1 513.5 490.9 507.3 484.7L342.6 320L507.3 155.3z" }) }));
@@ -20,6 +26,6 @@ const CancelIcon = (props) => {
20
26
  exports.CancelIcon = CancelIcon;
21
27
  const CancelButton = ({ onPress, ...props }) => {
22
28
  const { tabIndex } = (0, z_index_1.useZIndex)();
23
- return (jsx_runtime_1.jsx("button", { tabIndex: tabIndex, style: style, type: "button", onClick: onPress, children: jsx_runtime_1.jsx(exports.CancelIcon, { ...props }) }));
29
+ return (jsx_runtime_1.jsx("button", { "aria-label": "Close dialog", className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME}`, tabIndex: tabIndex, style: style, type: "button", onClick: onPress, children: jsx_runtime_1.jsx(exports.CancelIcon, { ...props }) }));
24
30
  };
25
31
  exports.CancelButton = CancelButton;
@@ -31,7 +31,7 @@ export declare const Combobox: React.FC<{
31
31
  readonly values: ComboboxValue[];
32
32
  readonly selectedId: string | number;
33
33
  readonly style?: React.CSSProperties;
34
- readonly title: string;
34
+ readonly 'aria-label': string;
35
35
  readonly size?: ComboboxSize;
36
36
  readonly unhoveredIconColor?: string;
37
37
  }>;
@@ -61,7 +61,7 @@ const smallLabel = {
61
61
  fontSize: 11,
62
62
  lineHeight: '12px',
63
63
  };
64
- const Combobox = ({ values, selectedId, style: customStyle, title, size: controlSize = 'default', unhoveredIconColor = colors_1.LIGHT_TEXT, }) => {
64
+ const Combobox = ({ values, selectedId, style: customStyle, 'aria-label': ariaLabel, size: controlSize = 'default', unhoveredIconColor = colors_1.LIGHT_TEXT, }) => {
65
65
  const [hovered, setIsHovered] = (0, react_1.useState)(false);
66
66
  const [opened, setOpened] = (0, react_1.useState)(false);
67
67
  const ref = (0, react_1.useRef)(null);
@@ -206,7 +206,7 @@ const Combobox = ({ values, selectedId, style: customStyle, title, size: control
206
206
  ? compactLabel
207
207
  : label;
208
208
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
209
- jsx_runtime_1.jsxs("button", { ref: ref, title: title, tabIndex: tabIndex, type: "button", style: style, className: is_menu_item_1.MENU_INITIATOR_CLASSNAME, children: [selected ? (jsx_runtime_1.jsx("div", { title: typeof selected.label === 'string' ? selected.label : undefined, style: selectedLabelStyle, children: selected === null || selected === void 0 ? void 0 : selected.label })) : null, jsx_runtime_1.jsx(layout_1.Spacing, { x: controlSize === 'default' ? 1 : 0.5 }), ' ', jsx_runtime_1.jsx(caret_1.CaretDown, { color: hovered || opened ? colors_1.WHITE : unhoveredIconColor, small: controlSize === 'small' })
209
+ jsx_runtime_1.jsxs("button", { ref: ref, "aria-label": ariaLabel, tabIndex: tabIndex, type: "button", style: style, className: is_menu_item_1.MENU_INITIATOR_CLASSNAME, children: [selected ? (jsx_runtime_1.jsx("div", { role: "group", "aria-label": typeof selected.label === 'string' ? selected.label : undefined, style: selectedLabelStyle, children: selected === null || selected === void 0 ? void 0 : selected.label })) : null, jsx_runtime_1.jsx(layout_1.Spacing, { x: controlSize === 'default' ? 1 : 0.5 }), ' ', jsx_runtime_1.jsx(caret_1.CaretDown, { color: hovered || opened ? colors_1.WHITE : unhoveredIconColor, small: controlSize === 'small' })
210
210
  ] }), portalStyle
211
211
  ? react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { style: styles_1.fullScreenOverlay, onPointerDown: onOverlayPointerDown, children: jsx_runtime_1.jsx("div", { style: styles_1.outerPortal, className: "css-reset", children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onOutsideClick: onHide, onEscape: onHide, children: jsx_runtime_1.jsx("div", { style: portalStyle, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: noop_1.noop, onPreviousMenu: noop_1.noop, values: values, onHide: onHide, leaveLeftSpace: true, preselectIndex: values.findIndex((v) => selected && v.id === selected.id), topItemCanBeUnselected: false, fixedHeight: derivedMaxHeight }) }) }) }) }), (0, portals_1.getPortal)(currentZIndex))
212
212
  : null] }));
@@ -183,7 +183,7 @@ const DuplicateCompositionLoaded = ({ initialType }) => {
183
183
  // We allow converting from a composition to a still, but
184
184
  // not the other way around
185
185
  jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
186
- jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Type" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { title: "Type of composition", style: comboBoxStyle, values: typeValues, selectedId: type }) })
186
+ jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Type" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { "aria-label": "Type of composition", style: comboBoxStyle, values: typeValues, selectedId: type }) })
187
187
  ] })) : null, jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
188
188
  jsx_runtime_1.jsx("div", { style: layout_2.label, children: "ID" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsxs(InputAndValidationContainer_1.InputAndValidationContainer, { children: [
189
189
  jsx_runtime_1.jsx(RemInput_1.RemotionInput, { value: newId, onChange: onNameChange, type: "text", autoFocus: true, placeholder: "Composition ID", status: "ok", rightAlign: true }), compNameErrMessage ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
@@ -22,11 +22,12 @@ export declare const isInputDraggerValueAlignedToStep: ({ min, step, value, }: {
22
22
  readonly step: string | number | undefined;
23
23
  readonly value: number;
24
24
  }) => boolean;
25
- export declare const validateInputDraggerValue: ({ max, min, step, value, }: {
25
+ export declare const validateInputDraggerValue: ({ max, min, step, value, integerOnly, }: {
26
26
  readonly max: string | number | undefined;
27
27
  readonly min: string | number | undefined;
28
28
  readonly step: string | number | undefined;
29
29
  readonly value: string;
30
+ readonly integerOnly?: boolean | undefined;
30
31
  }) => InputDraggerValidationResult;
31
32
  export declare const deriveInputDraggerArrowValue: ({ direction, max, min, step, value, }: {
32
33
  readonly direction: -1 | 1;
@@ -54,7 +55,7 @@ export declare const deriveInputDraggerValueDiff: ({ dragSensitivity, step, xDis
54
55
  readonly step: number;
55
56
  readonly xDistance: number;
56
57
  }) => number;
57
- export declare const InputDragger: React.ForwardRefExoticComponent<InputHTMLAttributes<HTMLInputElement> & {
58
+ export declare const InputDragger: React.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "title"> & {
58
59
  readonly onValueChange: (newVal: number, source: "drag" | "input") => void;
59
60
  readonly onValueChangeEnd?: ((newVal: number, source: "drag" | "input") => void) | undefined;
60
61
  readonly onTextChange: (newVal: string) => void;
@@ -67,6 +68,7 @@ export declare const InputDragger: React.ForwardRefExoticComponent<InputHTMLAttr
67
68
  readonly rightAlign: boolean;
68
69
  readonly small?: boolean | undefined;
69
70
  readonly allowStepMismatch?: boolean | undefined;
71
+ readonly integerOnly?: boolean | undefined;
70
72
  readonly snapToStep?: boolean | undefined;
71
73
  readonly dragDecimalPlaces?: number | undefined;
72
74
  readonly dragSensitivity?: number | undefined;
@@ -236,7 +236,7 @@ const isInputDraggerValueAlignedToStep = ({ min, step, value, }) => {
236
236
  return Math.abs(stepsFromBase - Math.round(stepsFromBase)) <= tolerance;
237
237
  };
238
238
  exports.isInputDraggerValueAlignedToStep = isInputDraggerValueAlignedToStep;
239
- const validateInputDraggerValue = ({ max, min, step, value, }) => {
239
+ const validateInputDraggerValue = ({ max, min, step, value, integerOnly = false, }) => {
240
240
  const parsed = (0, exports.parseInputDraggerNumber)(value);
241
241
  if (parsed === null) {
242
242
  return {
@@ -258,6 +258,12 @@ const validateInputDraggerValue = ({ max, min, step, value, }) => {
258
258
  message: `Value must be less than or equal to ${numericMax}.`,
259
259
  };
260
260
  }
261
+ if (integerOnly && !Number.isInteger(parsed)) {
262
+ return {
263
+ valid: false,
264
+ message: 'Value must be an integer.',
265
+ };
266
+ }
261
267
  if (!(0, exports.isInputDraggerValueAlignedToStep)({ min, step, value: parsed })) {
262
268
  return {
263
269
  valid: false,
@@ -324,7 +330,7 @@ const deriveInputDraggerValueDiff = ({ dragSensitivity, step, xDistance, }) => {
324
330
  return (0, remotion_1.interpolate)(xDistance, [-5, -4, 0, 4, 5], [-step * dragSensitivity, 0, 0, 0, step * dragSensitivity]);
325
331
  };
326
332
  exports.deriveInputDraggerValueDiff = deriveInputDraggerValueDiff;
327
- const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min, max: _max, step: _step, value, onTextChange, formatter = (q) => String(q), formatterStyle, formatterSubtitle, formatterSubtitleStyle, buttonStyle, style: inputStyle, status, rightAlign, small, allowStepMismatch = false, snapToStep = true, dragDecimalPlaces, dragSensitivity = 1, type: _type, ...props }, ref) => {
333
+ const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min, max: _max, step: _step, value, onTextChange, formatter = (q) => String(q), formatterStyle, formatterSubtitle, formatterSubtitleStyle, buttonStyle, style: inputStyle, status, rightAlign, small, allowStepMismatch = false, integerOnly = false, snapToStep = true, dragDecimalPlaces, dragSensitivity = 1, type: _type, ...props }, ref) => {
328
334
  const [inputFallback, setInputFallback] = (0, react_1.useState)(false);
329
335
  const [dragging, setDragging] = (0, react_1.useState)(false);
330
336
  const fallbackRef = (0, react_1.useRef)(null);
@@ -336,9 +342,9 @@ const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min,
336
342
  step: _step,
337
343
  });
338
344
  }, [_min, _step, snapToStep]);
339
- const validationStep = allowStepMismatch ? 'any' : deriveStep;
345
+ const validationStep = allowStepMismatch || integerOnly ? 'any' : deriveStep;
340
346
  const span = (0, react_1.useMemo)(() => ({
341
- color: dragging ? 'var(--remotion-cli-internals-blue-hovered)' : colors_1.BLUE,
347
+ color: dragging ? colors_1.BLUE_HOVERED : colors_1.BLUE,
342
348
  cursor: 'ew-resize',
343
349
  userSelect: 'none',
344
350
  WebkitUserSelect: 'none',
@@ -380,6 +386,7 @@ const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min,
380
386
  e.target.setCustomValidity('');
381
387
  const parsed = (0, exports.parseInputDraggerNumber)(e.target.value);
382
388
  if (parsed !== null &&
389
+ (!integerOnly || Number.isInteger(parsed)) &&
383
390
  (0, exports.isInputDraggerValueInRange)({
384
391
  max: _max,
385
392
  min: _min,
@@ -387,7 +394,7 @@ const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min,
387
394
  })) {
388
395
  onValueChange(parsed, 'input');
389
396
  }
390
- }, [_max, _min, onValueChange]);
397
+ }, [_max, _min, integerOnly, onValueChange]);
391
398
  const onBlur = (0, react_1.useCallback)(() => {
392
399
  if (!fallbackRef.current) {
393
400
  return;
@@ -402,6 +409,7 @@ const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min,
402
409
  min: _min,
403
410
  step: validationStep,
404
411
  value: newValue,
412
+ integerOnly,
405
413
  });
406
414
  if (validation.valid) {
407
415
  fallbackRef.current.setCustomValidity('');
@@ -412,7 +420,7 @@ const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min,
412
420
  fallbackRef.current.setCustomValidity(validation.message);
413
421
  fallbackRef.current.reportValidity();
414
422
  }
415
- }, [_max, _min, onEscape, onValueChangeEnd, validationStep]);
423
+ }, [_max, _min, integerOnly, onEscape, onValueChangeEnd, validationStep]);
416
424
  const onInputKeyDown = (0, react_1.useCallback)((e) => {
417
425
  var _a;
418
426
  if (e.key === 'Tab') {
@@ -432,17 +440,22 @@ const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min,
432
440
  min: _min,
433
441
  value,
434
442
  });
435
- const nextValue = (0, exports.deriveInputDraggerArrowValue)({
443
+ const steppedValue = (0, exports.deriveInputDraggerArrowValue)({
436
444
  direction: e.key === 'ArrowUp' ? 1 : -1,
437
445
  max: _max,
438
446
  min: _min,
439
447
  step: deriveStep,
440
448
  value: currentValue,
441
449
  });
450
+ const nextValue = integerOnly ? Math.round(steppedValue) : steppedValue;
451
+ if (integerOnly &&
452
+ !(0, exports.isInputDraggerValueInRange)({ max: _max, min: _min, value: nextValue })) {
453
+ return;
454
+ }
442
455
  e.currentTarget.value = String(nextValue);
443
456
  e.currentTarget.setCustomValidity('');
444
457
  onValueChange(nextValue, 'input');
445
- }, [_max, _min, deriveStep, onValueChange, value]);
458
+ }, [_max, _min, deriveStep, integerOnly, onValueChange, value]);
446
459
  const roundToStep = (val, stepSize) => {
447
460
  const factor = 1 / stepSize;
448
461
  return Math.ceil(val * factor) / factor;
@@ -478,11 +491,16 @@ const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min,
478
491
  xDistance,
479
492
  });
480
493
  const newValue = Math.min(max, Math.max(min, dragStartValue + diff));
481
- const nextValue = snapToStep
494
+ const steppedValue = snapToStep
482
495
  ? roundToStep(newValue, step)
483
496
  : dragDecimalPlaces === undefined
484
497
  ? newValue
485
498
  : roundToDecimalPlaces(newValue, dragDecimalPlaces);
499
+ const nextValue = integerOnly ? Math.round(steppedValue) : steppedValue;
500
+ if (integerOnly &&
501
+ !(0, exports.isInputDraggerValueInRange)({ max: _max, min: _min, value: nextValue })) {
502
+ return;
503
+ }
486
504
  lastDragValue = nextValue;
487
505
  onValueChange(nextValue, 'drag');
488
506
  };
@@ -508,6 +526,7 @@ const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min,
508
526
  _min,
509
527
  _max,
510
528
  value,
529
+ integerOnly,
511
530
  onValueChange,
512
531
  onValueChangeEnd,
513
532
  snapToStep,
@@ -529,7 +548,7 @@ const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min,
529
548
  }
530
549
  : inputStyle, type: "text" }) }));
531
550
  }
532
- return (jsx_runtime_1.jsxs("button", { ref: ref, type: "button", "aria-label": props['aria-label'], title: props.title, className: '__remotion_input_dragger', style: buttonStyle
551
+ return (jsx_runtime_1.jsxs("button", { ref: ref, type: "button", "aria-label": props['aria-label'], className: '__remotion_input_dragger', style: buttonStyle
533
552
  ? {
534
553
  ...(small
535
554
  ? compactInputDraggerContainerStyle
@@ -28,6 +28,7 @@ const NewCompDuration_1 = require("./NewCompDuration");
28
28
  const RemInput_1 = require("./RemInput");
29
29
  const SlugPreview_1 = require("./SlugPreview");
30
30
  const ValidationMessage_1 = require("./ValidationMessage");
31
+ const { sortItemsByCommitOrder } = canvas_1.CanvasInternals;
31
32
  const content = {
32
33
  padding: 12,
33
34
  paddingRight: 12,
@@ -62,9 +63,9 @@ const folderLabelTextStyle = {
62
63
  textOverflow: 'ellipsis',
63
64
  whiteSpace: 'nowrap',
64
65
  };
65
- const FolderDropdownLabel = ({ folderPath, indentation }) => {
66
+ const FolderDropdownLabel = ({ folderName, indentation }) => {
66
67
  return (jsx_runtime_1.jsxs("div", { style: folderLabelStyle, children: [
67
- jsx_runtime_1.jsx(layout_1.Spacing, { x: indentation * 1.5 }), folderPath === null ? (jsx_runtime_1.jsx("div", { style: folderIconStyle })) : (jsx_runtime_1.jsx(folder_1.CollapsedFolderIcon, { color: colors_1.LIGHT_TEXT, style: folderIconStyle })), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("span", { style: folderLabelTextStyle, children: folderPath !== null && folderPath !== void 0 ? folderPath : 'None' })
68
+ jsx_runtime_1.jsx(layout_1.Spacing, { x: indentation * 1.5 }), folderName === null ? (jsx_runtime_1.jsx("div", { style: folderIconStyle })) : (jsx_runtime_1.jsx(folder_1.CollapsedFolderIcon, { color: colors_1.LIGHT_TEXT, style: folderIconStyle })), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("span", { style: folderLabelTextStyle, children: folderName !== null && folderName !== void 0 ? folderName : 'None' })
68
69
  ] }));
69
70
  };
70
71
  const rootFolderId = 'new-composition-root-folder';
@@ -84,7 +85,7 @@ const NewCompositionFields = ({ compositionId, heightValidationMessage, inputRef
84
85
  ? folders
85
86
  .slice()
86
87
  .sort((a, b) => a.name.localeCompare(b.name, undefined, { numeric: true }))
87
- : (0, canvas_1.sortItemsByCommitOrder)(folders, (folder) => folder.order);
88
+ : sortItemsByCommitOrder(folders, (folder) => folder.order);
88
89
  const appendFolders = (parent) => {
89
90
  sortedFolders
90
91
  .filter((folder) => folder.parent === parent)
@@ -98,7 +99,7 @@ const NewCompositionFields = ({ compositionId, heightValidationMessage, inputRef
98
99
  {
99
100
  id: rootFolderId,
100
101
  keyHint: null,
101
- label: jsx_runtime_1.jsx(FolderDropdownLabel, { folderPath: null, indentation: 0 }),
102
+ label: jsx_runtime_1.jsx(FolderDropdownLabel, { folderName: null, indentation: 0 }),
102
103
  leftItem: values.folder.folderName === null ? jsx_runtime_1.jsx(Checkmark_1.Checkmark, {}) : null,
103
104
  onClick: () => {
104
105
  setValues((current) => ({
@@ -135,7 +136,7 @@ const NewCompositionFields = ({ compositionId, heightValidationMessage, inputRef
135
136
  return {
136
137
  id,
137
138
  keyHint: null,
138
- label: (jsx_runtime_1.jsx(FolderDropdownLabel, { folderPath: folderPath, indentation: indentation })),
139
+ label: (jsx_runtime_1.jsx(FolderDropdownLabel, { folderName: folder.name, indentation: indentation })),
139
140
  leftItem: selectedFolderId === id ? jsx_runtime_1.jsx(Checkmark_1.Checkmark, {}) : null,
140
141
  onClick: () => {
141
142
  setValues((current) => ({
@@ -147,7 +148,7 @@ const NewCompositionFields = ({ compositionId, heightValidationMessage, inputRef
147
148
  },
148
149
  }));
149
150
  },
150
- quickSwitcherLabel: folderPath,
151
+ quickSwitcherLabel: folder.name,
151
152
  subMenu: null,
152
153
  type: 'item',
153
154
  value: id,
@@ -205,7 +206,7 @@ const NewCompositionFields = ({ compositionId, heightValidationMessage, inputRef
205
206
  }, [setValues]);
206
207
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
207
208
  jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
208
- jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Folder" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: folderValues, selectedId: selectedFolderId, style: folderSelectStyle, title: "Folder" }) })
209
+ jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Folder" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: folderValues, selectedId: selectedFolderId, style: folderSelectStyle, "aria-label": "Folder" }) })
209
210
  ] }), jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
210
211
  jsx_runtime_1.jsx("div", { style: layout_2.label, children: "ID" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsxs(InputAndValidationContainer_1.InputAndValidationContainer, { children: [
211
212
  jsx_runtime_1.jsx(RemInput_1.RemotionInput, { ref: inputRef, value: values.id, onChange: onNameChange, type: "text", autoFocus: true, placeholder: "Composition ID", status: "ok", rightAlign: true }), jsx_runtime_1.jsx(SlugPreview_1.SlugPreview, { action: "create", currentName: null, input: values.id, slug: compositionId }), nameValidationMessage ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
@@ -13,6 +13,6 @@ export declare const getInputBorderColor: ({ status, isFocused, isHovered, }: {
13
13
  status: "error" | "ok" | "warning";
14
14
  isFocused: boolean;
15
15
  isHovered: boolean;
16
- }) => "#f1c40f" | "#ff3232" | "hsla(0, 0%, 100%, 0.15)" | "rgba(0, 0, 0, 0.6)" | "rgba(255, 255, 255, 0.05)";
16
+ }) => "var(--remotion-studio-black-alpha-60)" | "var(--remotion-studio-fail-color)" | "var(--remotion-studio-warning-color)" | "var(--remotion-studio-white-alpha-05)" | "var(--remotion-studio-white-alpha-15)";
17
17
  export declare const RemotionInput: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<HTMLInputElement>>;
18
18
  export {};
@@ -8,7 +8,7 @@ const getLabelToMatch = (value) => {
8
8
  if (typeof value.label === 'string') {
9
9
  return value.label;
10
10
  }
11
- return null;
11
+ return value.quickSwitcherLabel;
12
12
  };
13
13
  const findTypeaheadMenuItem = ({ query, values, }) => {
14
14
  const normalizedQuery = query.trim().toLowerCase();
@@ -32,6 +32,6 @@ const OpenIssueButton = ({ link }) => {
32
32
  const onPointerLeave = (0, react_1.useCallback)(() => {
33
33
  setHovered(false);
34
34
  }, []);
35
- return (jsx_runtime_1.jsx("button", { title: buttonTooltip, type: "button", onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, style: buttonStyle, onClick: handleClick, children: openInEditorSvg }));
35
+ return (jsx_runtime_1.jsx("button", { "aria-label": buttonTooltip, type: "button", onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, style: buttonStyle, onClick: handleClick, children: openInEditorSvg }));
36
36
  };
37
37
  exports.OpenIssueButton = OpenIssueButton;
@@ -21,7 +21,7 @@ const OutlineToggle = () => {
21
21
  const accessibilityLabel = editorShowOutlines
22
22
  ? 'Hide outlines'
23
23
  : 'Show outlines';
24
- return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Outlines", 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": editorShowOutlines, onClick: onClick, style: buttonStyle, children: (color) => {
24
+ return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Outlines", 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": editorShowOutlines, onClick: onClick, style: buttonStyle, children: (color) => {
25
25
  const iconColor = editorShowOutlines ? colors_1.BLUE : color;
26
26
  return (jsx_runtime_1.jsxs("svg", { style: { width: 17, height: 17 }, viewBox: "0 0 512 512", fill: "none", "aria-hidden": "true", focusable: "false", children: [
27
27
  jsx_runtime_1.jsx("path", { d: "M64 64H448V448H64V64Z", stroke: iconColor, strokeWidth: "36" }), [
@@ -235,6 +235,6 @@ const PlayPauseInner = ({ playbackRate, loop, bufferStateDelayInMilliseconds, mu
235
235
  };
236
236
  }, [bufferStateDelayInMilliseconds, emitter]);
237
237
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
238
- jsx_runtime_1.jsx(PlaybackManager, { loop: loop, playbackRate: playbackRate, muted: muted, inFrame: inFrame, outFrame: outFrame, getCurrentFrame: getCurrentFrame }), hideNavigationControls ? null : (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Go to beginning", shortcut: jumpToBeginningShortcut, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { "aria-label": "Go to beginning", "aria-keyshortcuts": jumpToBeginningAriaShortcut || undefined, title: "", disabled: !videoConfig, onClick: jumpToStart, children: (color) => jsx_runtime_1.jsx(jump_to_start_1.JumpToStart, { style: backStyle, color: color }) }) })), hideNavigationControls ? null : (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Previous frame", shortcut: "\u2190", delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { "aria-label": "Go back 1 frame", "aria-keyshortcuts": "ArrowLeft", title: "", disabled: !videoConfig, onClick: oneFrameBack, children: (color) => jsx_runtime_1.jsx(step_back_1.StepBack, { style: forwardBackStyle, color: color }) }) })), jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: playing ? 'Pause' : 'Play', shortcut: playPauseShortcut, delay: 800, dismissOnClick: false, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { "aria-label": playing ? 'Pause' : 'Play', "aria-keyshortcuts": playPauseAriaShortcut || undefined, title: "", onClick: playing ? pause : play, disabled: !videoConfig, children: (color) => playing ? (showBufferIndicator ? (jsx_runtime_1.jsx(player_1.PlayerInternals.BufferingIndicator, { type: "studio", color: color })) : (jsx_runtime_1.jsx(pause_1.Pause, { style: iconButton, color: color }))) : (jsx_runtime_1.jsx(play_1.Play, { style: iconButton, color: color })) }) }), hideNavigationControls ? null : (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Next frame", shortcut: "\u2192", delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { "aria-label": "Go forward 1 frame", "aria-keyshortcuts": "ArrowRight", title: "", disabled: !videoConfig, onClick: oneFrameForward, children: (color) => jsx_runtime_1.jsx(step_forward_1.StepForward, { style: forwardBackStyle, color: color }) }) }))] }));
238
+ jsx_runtime_1.jsx(PlaybackManager, { loop: loop, playbackRate: playbackRate, muted: muted, inFrame: inFrame, outFrame: outFrame, getCurrentFrame: getCurrentFrame }), hideNavigationControls ? null : (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Go to beginning", shortcut: jumpToBeginningShortcut, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { "aria-label": "Go to beginning", "aria-keyshortcuts": jumpToBeginningAriaShortcut || undefined, disabled: !videoConfig, onClick: jumpToStart, children: (color) => jsx_runtime_1.jsx(jump_to_start_1.JumpToStart, { style: backStyle, color: color }) }) })), hideNavigationControls ? null : (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Previous frame", shortcut: "\u2190", delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { "aria-label": "Go back 1 frame", "aria-keyshortcuts": "ArrowLeft", disabled: !videoConfig, onClick: oneFrameBack, children: (color) => jsx_runtime_1.jsx(step_back_1.StepBack, { style: forwardBackStyle, color: color }) }) })), jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: playing ? 'Pause' : 'Play', shortcut: playPauseShortcut, delay: 800, dismissOnClick: false, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { "aria-label": playing ? 'Pause' : 'Play', "aria-keyshortcuts": playPauseAriaShortcut || undefined, onClick: playing ? pause : play, disabled: !videoConfig, children: (color) => playing ? (showBufferIndicator ? (jsx_runtime_1.jsx(player_1.PlayerInternals.BufferingIndicator, { type: "studio", color: color })) : (jsx_runtime_1.jsx(pause_1.Pause, { style: iconButton, color: color }))) : (jsx_runtime_1.jsx(play_1.Play, { style: iconButton, color: color })) }) }), hideNavigationControls ? null : (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Next frame", shortcut: "\u2192", delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { "aria-label": "Go forward 1 frame", "aria-keyshortcuts": "ArrowRight", disabled: !videoConfig, onClick: oneFrameForward, children: (color) => jsx_runtime_1.jsx(step_forward_1.StepForward, { style: forwardBackStyle, color: color }) }) }))] }));
239
239
  };
240
240
  exports.PlayPause = react_1.default.memo(PlayPauseInner);
@@ -57,6 +57,6 @@ const PlaybackRateSelector = ({ playbackRate, setPlaybackRate, }) => {
57
57
  if (isStill || canvasContent === null) {
58
58
  return null;
59
59
  }
60
- return (jsx_runtime_1.jsx(TimelineCombobox_1.TimelineCombobox, { title: accessibilityLabel, tooltipDelay: 800, labelWidth: 30, selectedId: selectedId, values: items, renderLeftItem: (color) => (jsx_runtime_1.jsx(playback_rate_1.PlaybackRateIcon, { color: color, playbackRate: playbackRate })), unhoveredIconColor: colors_1.WHITE_ALPHA_80 }));
60
+ return (jsx_runtime_1.jsx(TimelineCombobox_1.TimelineCombobox, { "aria-label": accessibilityLabel, tooltipDelay: 800, labelWidth: 30, selectedId: selectedId, values: items, renderLeftItem: (color) => (jsx_runtime_1.jsx(playback_rate_1.PlaybackRateIcon, { color: color, playbackRate: playbackRate })), unhoveredIconColor: colors_1.WHITE_ALPHA_80 }));
61
61
  };
62
62
  exports.PlaybackRateSelector = PlaybackRateSelector;
@@ -194,6 +194,6 @@ const PreviewToolbarOverflowButton = ({ showFullscreen, showPlaybackRate, showLo
194
194
  if (values.length === 0) {
195
195
  return null;
196
196
  }
197
- return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "View options", shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { variant: null, renderAction: renderAction, values: values, title: "More actions", unhoveredColor: colors_1.WHITE_ALPHA_80 }) }));
197
+ return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "View options", shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { variant: null, renderAction: renderAction, values: values, "aria-label": "More actions", unhoveredColor: colors_1.WHITE_ALPHA_80 }) }));
198
198
  };
199
199
  exports.PreviewToolbarOverflowButton = PreviewToolbarOverflowButton;
@@ -65,7 +65,7 @@ const ExplorerQuickSwitcherTrigger = ({ mode, showShortcut, tabIndex, getActions
65
65
  return (jsx_runtime_1.jsxs("div", { style: quickSwitcherArea, children: [
66
66
  jsx_runtime_1.jsxs("button", { type: "button", style: quickSwitcherTrigger, onClick: openQuickSwitcher, tabIndex: tabIndex, className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME}`, children: ["Search...", showShortcut &&
67
67
  !(0, use_keybinding_1.areKeyboardShortcutsDisabled)() &&
68
- quickSwitcherShortcut !== '' ? (jsx_runtime_1.jsx("span", { style: shortcutLabel, children: quickSwitcherShortcut })) : null] }), jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { variant: null, title: moreActionsTitle, renderAction: renderMoreActions, getItems: getActions, className: hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME })
68
+ quickSwitcherShortcut !== '' ? (jsx_runtime_1.jsx("span", { style: shortcutLabel, children: quickSwitcherShortcut })) : null] }), jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { variant: null, "aria-label": moreActionsTitle, renderAction: renderMoreActions, getItems: getActions, className: hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME })
69
69
  ] }));
70
70
  };
71
71
  exports.ExplorerQuickSwitcherTrigger = ExplorerQuickSwitcherTrigger;
@@ -379,7 +379,7 @@ const RenderButtonInner = ({ readOnlyStudio, size: controlSize = 'default', narr
379
379
  const segments = (0, react_1.useMemo)(() => {
380
380
  return [
381
381
  {
382
- ariaLabel: renderLabel,
382
+ ariaLabel: showRenderLabel ? tooltip : renderLabel,
383
383
  buttonId: 'render-modal-button',
384
384
  disabled: false,
385
385
  idleColor: colors_1.WHITE_ALPHA_80,
@@ -395,7 +395,6 @@ const RenderButtonInner = ({ readOnlyStudio, size: controlSize = 'default', narr
395
395
  style: controlSize === 'compact'
396
396
  ? compactMainSegmentStyle
397
397
  : defaultMainSegmentStyle,
398
- title: showRenderLabel ? tooltip : null,
399
398
  tooltipLabel: showRenderLabel ? null : renderLabel,
400
399
  type: 'action',
401
400
  },
@@ -412,7 +411,6 @@ const RenderButtonInner = ({ readOnlyStudio, size: controlSize = 'default', narr
412
411
  style: controlSize === 'compact'
413
412
  ? compactDropdownSegmentStyle
414
413
  : defaultDropdownSegmentStyle,
415
- title: 'Select render type',
416
414
  tooltipLabel: null,
417
415
  type: 'menu',
418
416
  values: dropdownValues,
@@ -432,7 +430,7 @@ const RenderButtonInner = ({ readOnlyStudio, size: controlSize = 'default', narr
432
430
  return null;
433
431
  }
434
432
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
435
- jsx_runtime_1.jsx("button", { style: { display: 'none' }, id: "render-modal-button-server", disabled: !canServerRender, onClick: () => openServerRenderModal(false), type: "button" }), ' ', jsx_runtime_1.jsx("button", { style: { display: 'none' }, id: "render-modal-button-client", onClick: openClientRenderModal, type: "button" }), jsx_runtime_1.jsx("button", { style: { display: 'none' }, id: "render-modal-button-command", onClick: () => openServerRenderModal(true), type: "button" }), jsx_runtime_1.jsx(SegmentedButton_1.SegmentedButton, { segments: segments, style: segmentedButtonStyle, title: showRenderLabel ? tooltip : null })
433
+ jsx_runtime_1.jsx("button", { style: { display: 'none' }, id: "render-modal-button-server", disabled: !canServerRender, onClick: () => openServerRenderModal(false), type: "button" }), ' ', jsx_runtime_1.jsx("button", { style: { display: 'none' }, id: "render-modal-button-client", onClick: openClientRenderModal, type: "button" }), jsx_runtime_1.jsx("button", { style: { display: 'none' }, id: "render-modal-button-command", onClick: () => openServerRenderModal(true), type: "button" }), jsx_runtime_1.jsx(SegmentedButton_1.SegmentedButton, { segments: segments, style: segmentedButtonStyle })
436
434
  ] }));
437
435
  };
438
436
  exports.RenderButton = react_1.default.memo(RenderButtonInner);
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  export declare const InfoBubble: React.FC<{
3
- readonly title: string;
3
+ readonly 'aria-label': string;
4
4
  readonly children: React.ReactNode;
5
5
  readonly horizontalAlignment?: 'left' | 'right';
6
6
  }>;