@remotion/studio 4.0.528 → 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 (185) hide show
  1. package/dist/Studio.js +2 -0
  2. package/dist/components/AgentPrompt.js +2 -2
  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/Button.d.ts +1 -1
  8. package/dist/components/Button.js +2 -2
  9. package/dist/components/CaptionInspector.js +1 -1
  10. package/dist/components/CaptionTextEditor.js +1 -1
  11. package/dist/components/CheckboardToggle.js +1 -1
  12. package/dist/components/CodingAgentButton.js +1 -1
  13. package/dist/components/ColorPicker/ColorPicker.d.ts +1 -1
  14. package/dist/components/ColorPicker/ColorPicker.js +2 -2
  15. package/dist/components/ColorPicker/ColorPickerPopup.js +1 -1
  16. package/dist/components/CompactExplanation.js +3 -3
  17. package/dist/components/CompositionSelectorItem.js +2 -2
  18. package/dist/components/ConfigSelect.js +1 -1
  19. package/dist/components/ConfigureDefaultEditorModal.js +2 -2
  20. package/dist/components/ControlButton.d.ts +0 -1
  21. package/dist/components/ControlButton.js +2 -2
  22. package/dist/components/CurrentAsset.js +1 -1
  23. package/dist/components/ElementLibrariesSettings.js +1 -1
  24. package/dist/components/ElementLibraryModal.js +1 -1
  25. package/dist/components/FramePersistor.js +3 -3
  26. package/dist/components/FullscreenToggle.js +1 -1
  27. package/dist/components/InitialCompositionLoader.js +3 -3
  28. package/dist/components/InlineAction.d.ts +2 -2
  29. package/dist/components/InlineAction.js +2 -3
  30. package/dist/components/InlineEditableTitle.d.ts +1 -1
  31. package/dist/components/InlineEditableTitle.js +3 -3
  32. package/dist/components/InspectorLocationCopy.js +1 -1
  33. package/dist/components/InspectorOpenInEditor.js +1 -3
  34. package/dist/components/InspectorPanel/AlignmentControls.js +3 -3
  35. package/dist/components/InspectorPanel/CompositionInspector.js +1 -5
  36. package/dist/components/InspectorPanel/CompositionMetadata.js +4 -4
  37. package/dist/components/InspectorPanel/EasingInspector.js +1 -1
  38. package/dist/components/InspectorPanel/ElementLibraryButton.js +3 -14
  39. package/dist/components/InspectorPanel/KeyframeEasingNavigator.js +6 -8
  40. package/dist/components/InspectorPanel/KeyframeInspector.js +1 -1
  41. package/dist/components/InspectorPanel/KeyframeSettings.js +16 -11
  42. package/dist/components/InspectorPanel/MultiSequenceField.js +1 -1
  43. package/dist/components/InspectorPanel/MultiSequenceInspector.js +2 -7
  44. package/dist/components/InspectorPanel/MultiSequenceNumberField.js +2 -2
  45. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +1 -1
  46. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +4 -13
  47. package/dist/components/InspectorPanel/SequenceWrapAction.js +6 -14
  48. package/dist/components/InspectorPanel/common.d.ts +6 -2
  49. package/dist/components/InspectorPanel/common.js +25 -9
  50. package/dist/components/InspectorSequenceSection.js +5 -5
  51. package/dist/components/InspectorSourceLocation.js +2 -2
  52. package/dist/components/KeyboardShortcutsSettings.js +1 -1
  53. package/dist/components/LicenseKeyValidation.js +2 -2
  54. package/dist/components/LoopToggle.js +1 -1
  55. package/dist/components/Menu/MenuSubItem.js +4 -2
  56. package/dist/components/MenuBuildIndicator.js +1 -1
  57. package/dist/components/MenuCompositionName.js +1 -1
  58. package/dist/components/ModelManager.js +1 -1
  59. package/dist/components/MuteToggle.js +1 -1
  60. package/dist/components/NewComposition/ComboBox.d.ts +1 -1
  61. package/dist/components/NewComposition/ComboBox.js +2 -2
  62. package/dist/components/NewComposition/DuplicateComposition.js +1 -1
  63. package/dist/components/NewComposition/InputDragger.d.ts +1 -1
  64. package/dist/components/NewComposition/InputDragger.js +1 -1
  65. package/dist/components/NewComposition/NewComposition.js +1 -1
  66. package/dist/components/OpenIssueButton.js +1 -1
  67. package/dist/components/OutlineToggle.js +1 -1
  68. package/dist/components/PlayPause.js +1 -1
  69. package/dist/components/PlaybackRateSelector.js +1 -1
  70. package/dist/components/Preview.js +2 -3
  71. package/dist/components/PreviewToolbarOverflowButton.js +1 -1
  72. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -1
  73. package/dist/components/RenderButton.js +2 -4
  74. package/dist/components/RenderModal/InfoBubble.d.ts +1 -1
  75. package/dist/components/RenderModal/InfoBubble.js +2 -2
  76. package/dist/components/RenderModal/NumberSetting.js +1 -1
  77. package/dist/components/RenderModal/OptionExplainerBubble.js +2 -2
  78. package/dist/components/RenderModal/RenderModalAdvanced.js +2 -2
  79. package/dist/components/RenderModal/RenderModalAudio.js +2 -2
  80. package/dist/components/RenderModal/RenderModalBasic.js +3 -3
  81. package/dist/components/RenderModal/RenderModalEncoding.js +4 -4
  82. package/dist/components/RenderModal/RenderModalOutputName.js +1 -1
  83. package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +1 -1
  84. package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +1 -1
  85. package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +1 -1
  86. package/dist/components/RenderModal/SchemaEditor/ZodFieldValidation.js +1 -1
  87. package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
  88. package/dist/components/RenderModal/WebRenderModalAdvanced.js +2 -2
  89. package/dist/components/RenderModal/WebRenderModalAudio.js +2 -2
  90. package/dist/components/RenderModal/WebRenderModalBasic.js +3 -3
  91. package/dist/components/RenderModal/WebRenderModalPicture.js +1 -1
  92. package/dist/components/RenderQueue/CaptionQueueItem.js +1 -1
  93. package/dist/components/RenderQueue/QueueJobError.js +1 -1
  94. package/dist/components/RenderQueue/RenderQueueError.js +1 -1
  95. package/dist/components/RenderQueue/RenderQueueOutputName.js +1 -1
  96. package/dist/components/RenderQueue/RenderQueueProgressMessage.js +1 -1
  97. package/dist/components/RenderQueue/VideoMattingQueueItem.js +1 -1
  98. package/dist/components/RenderingSettings.js +6 -6
  99. package/dist/components/RulersAndGuidesToggle.js +1 -1
  100. package/dist/components/SegmentedButton.d.ts +0 -2
  101. package/dist/components/SegmentedButton.js +6 -6
  102. package/dist/components/SelectedOutlineOverlay.js +15 -2
  103. package/dist/components/SelectedOutlinePathPoints.js +45 -21
  104. package/dist/components/SelectedOutlineRenderer.js +1 -1
  105. package/dist/components/SettingsButton.js +1 -1
  106. package/dist/components/SettingsModalFooter.js +1 -1
  107. package/dist/components/SizeSelector.js +1 -1
  108. package/dist/components/SkillsSettings.js +2 -2
  109. package/dist/components/SnappingToggle.js +1 -1
  110. package/dist/components/StudioSettings.js +2 -2
  111. package/dist/components/TimeValue.js +1 -3
  112. package/dist/components/Timeline/EasingEditorModal.js +3 -3
  113. package/dist/components/Timeline/TimelineArrayField.js +2 -2
  114. package/dist/components/Timeline/TimelineAssetField.js +3 -3
  115. package/dist/components/Timeline/TimelineColorField.js +2 -2
  116. package/dist/components/Timeline/TimelineDragHandler.js +3 -3
  117. package/dist/components/Timeline/TimelineDuplicateCount.js +1 -1
  118. package/dist/components/Timeline/TimelineEffectItem.js +1 -1
  119. package/dist/components/Timeline/TimelineEnumField.js +1 -1
  120. package/dist/components/Timeline/TimelineFieldLabel.js +1 -1
  121. package/dist/components/Timeline/TimelineFontFamilyField.js +2 -2
  122. package/dist/components/Timeline/TimelineFontWeightField.js +1 -1
  123. package/dist/components/Timeline/TimelineKeyframeControls.js +4 -4
  124. package/dist/components/Timeline/TimelineKeyframeDiamond.js +1 -1
  125. package/dist/components/Timeline/TimelineKeyframeEasingLine.js +1 -1
  126. package/dist/components/Timeline/TimelineLayerChildren.js +1 -1
  127. package/dist/components/Timeline/TimelineList.js +15 -7
  128. package/dist/components/Timeline/TimelineMediaInfo.js +1 -1
  129. package/dist/components/Timeline/TimelineScaleField.js +1 -1
  130. package/dist/components/Timeline/TimelineSchemaField.js +2 -2
  131. package/dist/components/Timeline/TimelineSequence.js +1 -1
  132. package/dist/components/Timeline/TimelineSequenceItem.js +34 -16
  133. package/dist/components/Timeline/TimelineSequenceName.d.ts +1 -0
  134. package/dist/components/Timeline/TimelineSequenceName.js +38 -6
  135. package/dist/components/Timeline/TimelineSequencePropItem.js +6 -4
  136. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +2 -2
  137. package/dist/components/Timeline/TimelineZoomControls.js +2 -2
  138. package/dist/components/Timeline/get-sequence-split-menu-item.js +2 -2
  139. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +1 -1
  140. package/dist/components/Timeline/use-timeline-expanded-tree.js +3 -0
  141. package/dist/components/TimelineCombobox.d.ts +1 -1
  142. package/dist/components/TimelineCombobox.js +5 -6
  143. package/dist/components/TimelineInOutToggle.js +1 -1
  144. package/dist/components/Transcription/TranscriptionModal.js +6 -6
  145. package/dist/components/UndoRedoButtons.js +1 -1
  146. package/dist/components/UpdatesSettings.js +2 -2
  147. package/dist/components/VideoMatting/VideoMattingModal.js +4 -4
  148. package/dist/components/selected-outline-types.d.ts +2 -0
  149. package/dist/error-overlay/remotion-overlay/CompositionIdListItem.js +1 -1
  150. package/dist/error-overlay/remotion-overlay/OpenInEditor.js +1 -1
  151. package/dist/error-overlay/remotion-overlay/StackFrame.js +1 -1
  152. package/dist/esm/{CaptionQueueProcessor-nr7hjcga.mjs → CaptionQueueProcessor-qj37c6r2.mjs} +2 -2
  153. package/dist/esm/{LazyModels-ajkn7fs3.mjs → LazyModels-rjsrgap5.mjs} +4 -4
  154. package/dist/esm/{LazyModels-g1g7cf4e.mjs → LazyModels-rnbjx98t.mjs} +4 -4
  155. package/dist/esm/{TranscriptionModal-e18bzbkb.mjs → TranscriptionModal-y7zeqj2d.mjs} +15 -15
  156. package/dist/esm/{VideoMattingModal-5bz2s4rs.mjs → VideoMattingModal-jzrkhah1.mjs} +13 -13
  157. package/dist/esm/{index-s6qya2gg.mjs → index-19d05w9e.mjs} +1 -1
  158. package/dist/esm/{index-t7tbt980.mjs → index-24wge6y5.mjs} +2 -3
  159. package/dist/esm/{index-wqc43mw0.mjs → index-3qb54r5j.mjs} +4 -5
  160. package/dist/esm/{index-c2wabcdt.mjs → index-cakcjjy2.mjs} +6 -6
  161. package/dist/esm/{index-9q9w8v9p.mjs → index-f9hxt5yh.mjs} +1 -1
  162. package/dist/esm/{index-8nt6a0mw.mjs → index-jc22b2wb.mjs} +1 -1
  163. package/dist/esm/{index-890dd9b3.mjs → index-m01zjph7.mjs} +3 -5
  164. package/dist/esm/{index-x6r9bn12.mjs → index-m2a95v3p.mjs} +925 -237
  165. package/dist/esm/{index-xac20sv4.mjs → index-r9bj4tta.mjs} +7 -7
  166. package/dist/esm/{index-t7xnxdf8.mjs → index-vnc2wdfd.mjs} +4 -5
  167. package/dist/esm/{index-dh3zk2hv.mjs → index-vtr5qzam.mjs} +1 -1
  168. package/dist/esm/{index-dpyss74p.mjs → index-x7kg7jqv.mjs} +814 -723
  169. package/dist/esm/index.mjs +2 -2
  170. package/dist/esm/internals.mjs +9 -9
  171. package/dist/esm/previewEntry.mjs +9 -9
  172. package/dist/esm/renderEntry.mjs +2 -2
  173. package/dist/helpers/checkerboard-background.d.ts +2 -2
  174. package/dist/helpers/checkerboard-background.js +1 -1
  175. package/dist/helpers/colors.d.ts +1 -2
  176. package/dist/helpers/colors.js +7 -8
  177. package/dist/helpers/studio-css-variables.d.ts +1 -1
  178. package/dist/helpers/studio-css-variables.js +2 -3
  179. package/dist/icons/snowflake.js +1 -3
  180. package/dist/icons/{scissors.d.ts → split.d.ts} +1 -1
  181. package/dist/icons/split.js +8 -0
  182. package/dist/icons/trash.js +2 -2
  183. package/dist/icons/wrap.js +1 -1
  184. package/package.json +20 -20
  185. package/dist/icons/scissors.js +0 -8
@@ -162,7 +162,7 @@ const WebRenderModalAdvanced = ({ renderMode, delayRenderTimeout, setDelayRender
162
162
  jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(OptionExplainerBubble_1.WebRendererOptionExplainerBubble, { apiName: "mediaCacheSizeInBytes", id: "mediaCacheSizeInBytesOption" })
163
163
  ] }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(Checkbox_1.Checkbox, { checked: mediaCacheSizeInBytes !== null, onChange: toggleCustomMediaCacheSizeInBytes, name: "media-cache-size" }) })
164
164
  ] }), mediaCacheSizeInBytes === null ? null : (jsx_runtime_1.jsx(NumberSetting_1.NumberSetting, { name: "@remotion/media cache size", formatter: (w) => `${w} bytes`, min: 0, max: 10000000000, step: 10 * 1024 * 1024, value: mediaCacheSizeInBytes, onValueChanged: changeMediaCacheSizeInBytes })), renderMode === 'video' ? (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
165
- jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Hardware Acceleration" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: hardwareAccelerationOptions, selectedId: hardwareAcceleration, title: "Hardware Acceleration" }) })
165
+ jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Hardware Acceleration" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: hardwareAccelerationOptions, selectedId: hardwareAcceleration, "aria-label": "Hardware Acceleration" }) })
166
166
  ] })) : null, jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
167
167
  jsx_runtime_1.jsxs("div", { style: layout_2.label, children: ["Allow HTML-in-canvas ",
168
168
  jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(OptionExplainerBubble_1.WebRendererOptionExplainerBubble, { apiName: "allowHtmlInCanvas", id: "allowHtmlInCanvasOption" })
@@ -171,7 +171,7 @@ const WebRenderModalAdvanced = ({ renderMode, delayRenderTimeout, setDelayRender
171
171
  jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
172
172
  jsx_runtime_1.jsxs("div", { style: layout_2.label, children: ["Page Responsiveness ",
173
173
  jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(OptionExplainerBubble_1.WebRendererCustomOptionExplainerBubble, { apiName: "pageResponsiveness", description: jsx_runtime_1.jsx(PageResponsivenessDescription, {}), docLink: "https://www.remotion.dev/docs/client-side-rendering/page-responsiveness", name: "Page responsiveness" })
174
- ] }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: pageResponsivenessOptions, selectedId: selectedPageResponsiveness, title: "Page Responsiveness" }) })
174
+ ] }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: pageResponsivenessOptions, selectedId: selectedPageResponsiveness, "aria-label": "Page Responsiveness" }) })
175
175
  ] }), typeof pageResponsiveness === 'number' ? (jsx_runtime_1.jsx(NumberSetting_1.NumberSetting, { name: "Responsiveness Interval", formatter: (v) => `${v}ms`, min: 1, max: 1000000000, step: 1, value: pageResponsiveness, onValueChanged: setCustomPageResponsiveness })) : null] }))] }));
176
176
  };
177
177
  exports.WebRenderModalAdvanced = WebRenderModalAdvanced;
@@ -73,11 +73,11 @@ const WebRenderModalAudio = ({ renderMode, muted, setMuted, audioCodec, setAudio
73
73
  return (jsx_runtime_1.jsxs("div", { style: container, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: [isAudioOnly ? null : (jsx_runtime_1.jsx(MutedSetting_1.MutedSetting, { enforceAudioTrack: false, muted: muted, setMuted: setMuted })), showAudioSettings ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [isAudioOnly ? null : jsx_runtime_1.jsx(RenderModalHr_1.RenderModalHr, {}), jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
74
74
  jsx_runtime_1.jsxs("div", { style: layout_2.label, children: ["Audio Quality",
75
75
  jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 })
76
- ] }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: audioBitrateOptions, selectedId: audioBitrate, title: "Audio Quality" }) })
76
+ ] }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: audioBitrateOptions, selectedId: audioBitrate, "aria-label": "Audio Quality" }) })
77
77
  ] }), showAudioCodecSetting ? (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
78
78
  jsx_runtime_1.jsxs("div", { style: layout_2.label, children: ["Audio Codec",
79
79
  jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 })
80
- ] }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: audioCodecOptions, selectedId: audioCodec, title: "Audio Codec" }) })
80
+ ] }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: audioCodecOptions, selectedId: audioCodec, "aria-label": "Audio Codec" }) })
81
81
  ] })) : null, showAudioCodecSetting && effectiveAudioCodec !== audioCodec ? (jsx_runtime_1.jsxs("div", { style: fallbackNoticeStyle, children: [humanReadableWebAudioCodec(audioCodec), " is not available in this browser. Using ", humanReadableWebAudioCodec(effectiveAudioCodec), ' ', "instead."] })) : null] })) : null] }));
82
82
  };
83
83
  exports.WebRenderModalAudio = WebRenderModalAudio;
@@ -115,16 +115,16 @@ const WebRenderModalBasic = ({ renderMode, resolvedComposition, imageFormat, set
115
115
  jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Frame" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(RemInput_1.RightAlignInput, { children: jsx_runtime_1.jsx(InputDragger_1.InputDragger, { value: frame, onTextChange: onFrameChanged, placeholder: `0-${resolvedComposition.durationInFrames - 1}`, onValueChange: onFrameSetDirectly, name: "frame", step: 1, min: 0, status: "ok", max: resolvedComposition.durationInFrames - 1, rightAlign: true }) }) })
116
116
  ] })) : null] })) : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
117
117
  jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
118
- jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Container" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: containerOptions, selectedId: container, title: "Container" }) })
118
+ jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Container" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: containerOptions, selectedId: container, "aria-label": "Container" }) })
119
119
  ] }), renderMode === 'video' ? (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
120
120
  jsx_runtime_1.jsxs("div", { style: layout_2.label, children: ["Codec",
121
121
  jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(OptionExplainerBubble_1.WebRendererOptionExplainerBubble, { apiName: "codec", id: "videoCodecOption" })
122
- ] }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: codecOptions, selectedId: effectiveVideoCodec, title: "Codec" }) })
122
+ ] }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: codecOptions, selectedId: effectiveVideoCodec, "aria-label": "Codec" }) })
123
123
  ] })) : null, jsx_runtime_1.jsx(FrameRangeSetting_1.FrameRangeSetting, { durationInFrames: resolvedComposition.durationInFrames, startFrame: startFrame !== null && startFrame !== void 0 ? startFrame : 0, endFrame: endFrame !== null && endFrame !== void 0 ? endFrame : resolvedComposition.durationInFrames - 1, setStartFrame: setStartFrame, setEndFrame: setEndFrame })
124
124
  ] })), jsx_runtime_1.jsx(RenderModalOutputName_1.RenderModalOutputName, { ariaLabel: window.remotion_isReadOnlyStudio ? 'Download name' : 'Output name', existingOutputPath: null, existence: false, inputStyle: layout_2.input, outName: outName, onValueChange: onOutNameChange, validationMessage: validationMessage, label: window.remotion_isReadOnlyStudio ? 'Download name' : 'Output name' }), jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
125
125
  jsx_runtime_1.jsxs("div", { style: layout_2.label, children: ["Log Level ",
126
126
  jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(OptionExplainerBubble_1.WebRendererOptionExplainerBubble, { apiName: "logLevel", id: "logLevelOption" })
127
- ] }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: logLevelOptions, selectedId: logLevel, title: "Log Level" }) })
127
+ ] }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: logLevelOptions, selectedId: logLevel, "aria-label": "Log Level" }) })
128
128
  ] })
129
129
  ] }));
130
130
  };
@@ -20,7 +20,7 @@ const WebRenderModalPicture = ({ renderMode, videoBitrate, setVideoBitrate, keyf
20
20
  return (jsx_runtime_1.jsxs("div", { style: tabContainer, children: [
21
21
  jsx_runtime_1.jsx(ScaleSetting_1.ScaleSetting, { scale: scale, setScale: setScale, compositionWidth: compositionWidth, compositionHeight: compositionHeight }), renderMode !== 'video' ? null : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
22
22
  jsx_runtime_1.jsxs("div", { style: layout_1.optionRow, children: [
23
- jsx_runtime_1.jsx("div", { style: layout_1.label, children: "Quality" }), jsx_runtime_1.jsx("div", { style: layout_1.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: qualityOptions, selectedId: videoBitrate, title: "Quality" }) })
23
+ jsx_runtime_1.jsx("div", { style: layout_1.label, children: "Quality" }), jsx_runtime_1.jsx("div", { style: layout_1.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: qualityOptions, selectedId: videoBitrate, "aria-label": "Quality" }) })
24
24
  ] }), jsx_runtime_1.jsx(NumberSetting_1.NumberSetting, { name: "Keyframe Interval", formatter: (v) => `${v}s`, min: 1, max: 300, step: 1, value: keyframeIntervalInSeconds, onValueChanged: setKeyframeIntervalInSeconds }), jsx_runtime_1.jsxs("div", { style: layout_1.optionRow, children: [
25
25
  jsx_runtime_1.jsx("div", { style: layout_1.label, children: "Transparent" }), jsx_runtime_1.jsx("div", { style: layout_1.rightRow, children: jsx_runtime_1.jsx(Checkbox_1.Checkbox, { checked: transparent, onChange: onTransparentChanged, name: "transparent" }) })
26
26
  ] })
@@ -134,7 +134,7 @@ const CaptionQueueItem = ({ job, selected }) => {
134
134
  }, [job]);
135
135
  return (jsx_runtime_1.jsxs(layout_1.Row, { "data-render-queue-item": job.id, style: containerStyle, align: "center", onClick: onClick, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, className: selected ? item_style_1.RENDER_QUEUE_ITEM_SELECTED_CLASSNAME : undefined, children: [
136
136
  jsx_runtime_1.jsx(CaptionJobStatus, { job: job }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsxs("div", { style: right, children: [
137
- jsx_runtime_1.jsx("div", { style: title, children: job.displayName }), jsx_runtime_1.jsx("div", { style: subtitleContainer, children: job.status === 'cancelled' ? (jsx_runtime_1.jsx(RenderQueueCancelledMessage_1.RenderQueueCancelledMessage, {})) : job.status === 'failed' ? (jsx_runtime_1.jsx(QueueJobError_1.QueueJobError, { error: job.error, modalTitle: "Transcription failed" })) : (jsx_runtime_1.jsx("span", { style: subtitle, title: message, children: message })) })
137
+ jsx_runtime_1.jsx("div", { style: title, children: job.displayName }), jsx_runtime_1.jsx("div", { style: subtitleContainer, children: job.status === 'cancelled' ? (jsx_runtime_1.jsx(RenderQueueCancelledMessage_1.RenderQueueCancelledMessage, {})) : job.status === 'failed' ? (jsx_runtime_1.jsx(QueueJobError_1.QueueJobError, { error: job.error, modalTitle: "Transcription failed" })) : (jsx_runtime_1.jsx("span", { role: "group", style: subtitle, "aria-label": message, children: message })) })
138
138
  ] }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), job.status === 'done' ||
139
139
  job.status === 'failed' ||
140
140
  job.status === 'cancelled' ? (jsx_runtime_1.jsx(RenderQueueRepeat_1.RenderQueueRepeatItem, { job: job })) : null, job.status === 'running' ? (jsx_runtime_1.jsx(RenderQueueItemCancelButton_1.RenderQueueCancelButton, { job: job })) : job.status === 'saving' ? null : (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Clear", shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { renderAction: renderRemoveAction, onClick: onRemove, "aria-label": "Clear", variant: null }) }))] }));
@@ -19,6 +19,6 @@ const QueueJobError = ({ error, modalTitle }) => {
19
19
  error: { message: error.message, stack: (_a = error.stack) !== null && _a !== void 0 ? _a : null },
20
20
  });
21
21
  }, [error, modalTitle, setSelectedModal]);
22
- return (jsx_runtime_1.jsx("button", { onClick: onClick, type: "button", style: errorStyle, title: error.message, children: error.message }));
22
+ return (jsx_runtime_1.jsx("button", { onClick: onClick, type: "button", style: errorStyle, "aria-label": error.message, children: error.message }));
23
23
  };
24
24
  exports.QueueJobError = QueueJobError;
@@ -21,6 +21,6 @@ const RenderQueueError = ({ job }) => {
21
21
  if (job.status !== 'failed') {
22
22
  throw new Error('should not have rendered this component');
23
23
  }
24
- return (jsx_runtime_1.jsx("button", { onClick: onClick, type: "button", style: outputLocation, tabIndex: tabIndex, title: job.error.message, children: job.error.message }));
24
+ return (jsx_runtime_1.jsx("button", { onClick: onClick, type: "button", style: outputLocation, tabIndex: tabIndex, "aria-label": job.error.message, children: job.error.message }));
25
25
  };
26
26
  exports.RenderQueueError = RenderQueueError;
@@ -20,6 +20,6 @@ const RenderQueueOutputName = ({ job }) => {
20
20
  }
21
21
  return job.outName;
22
22
  };
23
- return (jsx_runtime_1.jsx("span", { style: style, title: getTitle(), children: job.outName }));
23
+ return (jsx_runtime_1.jsx("span", { role: "group", style: style, "aria-label": getTitle(), children: job.outName }));
24
24
  };
25
25
  exports.RenderQueueOutputName = RenderQueueOutputName;
@@ -27,6 +27,6 @@ const RenderQueueProgressMessage = ({ job }) => {
27
27
  const message = isClientJob
28
28
  ? (0, client_render_progress_1.getClientRenderProgressMessage)(job.progress)
29
29
  : job.progress.message;
30
- return (jsx_runtime_1.jsx("button", { onClick: onClick, type: "button", style: outputLocation, tabIndex: tabIndex, title: message, children: message }));
30
+ return (jsx_runtime_1.jsx("button", { onClick: onClick, type: "button", style: outputLocation, tabIndex: tabIndex, "aria-label": message, children: message }));
31
31
  };
32
32
  exports.RenderQueueProgressMessage = RenderQueueProgressMessage;
@@ -120,7 +120,7 @@ const VideoMattingQueueItem = ({ job, selected }) => {
120
120
  const renderRemove = (0, react_1.useCallback)((color) => (jsx_runtime_1.jsx("svg", { style: removeIcon, viewBox: "0 0 320 512", children: jsx_runtime_1.jsx("path", { fill: color, d: "M310.6 150.6 205.3 256l105.3 105.4-45.3 45.3L160 301.3 54.6 406.6 9.4 361.4 114.7 256 9.4 150.6l45.2-45.2L160 210.7l105.3-105.3z" }) })), []);
121
121
  return (jsx_runtime_1.jsxs(layout_1.Row, { "data-render-queue-item": job.id, style: style, align: "center", onClick: onClick, onPointerEnter: () => setHovered(true), onPointerLeave: () => setHovered(false), children: [
122
122
  jsx_runtime_1.jsx(Status, { job: job }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsxs("div", { style: right, children: [
123
- jsx_runtime_1.jsx("div", { style: title, children: job.displayName }), jsx_runtime_1.jsx("div", { style: subtitles, title: tooltip, children: job.status === 'cancelled' ? (jsx_runtime_1.jsx(RenderQueueCancelledMessage_1.RenderQueueCancelledMessage, {})) : job.status === 'failed' ? (jsx_runtime_1.jsx(QueueJobError_1.QueueJobError, { error: job.error, modalTitle: "Background removal failed" })) : (messages.map((message) => (jsx_runtime_1.jsx("span", { style: subtitle, children: message }, message)))) })
123
+ jsx_runtime_1.jsx("div", { style: title, children: job.displayName }), jsx_runtime_1.jsx("div", { role: "group", style: subtitles, "aria-label": tooltip, children: job.status === 'cancelled' ? (jsx_runtime_1.jsx(RenderQueueCancelledMessage_1.RenderQueueCancelledMessage, {})) : job.status === 'failed' ? (jsx_runtime_1.jsx(QueueJobError_1.QueueJobError, { error: job.error, modalTitle: "Background removal failed" })) : (messages.map((message) => (jsx_runtime_1.jsx("span", { style: subtitle, children: message }, message)))) })
124
124
  ] }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), done ? (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Reveal output", shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { renderAction: (color) => (jsx_runtime_1.jsx(ellipsis_1.EllipsisIcon, { fill: color, svgProps: ellipsisIconStyle })), "aria-label": "Reveal output", values: revealItems, variant: null }) })) : null, job.status === 'done' ||
125
125
  job.status === 'failed' ||
126
126
  job.status === 'cancelled' ? (jsx_runtime_1.jsx(RenderQueueRepeat_1.RenderQueueRepeatItem, { job: job })) : null, job.status === 'running' ? (jsx_runtime_1.jsx(RenderQueueItemCancelButton_1.RenderQueueCancelButton, { job: job })) : job.status === 'saving' ? null : (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Clear", shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { renderAction: renderRemove, onClick: onRemove, "aria-label": "Clear", variant: null }) }))] }));
@@ -331,11 +331,11 @@ const RenderingSettings = () => {
331
331
  }
332
332
  return (jsx_runtime_1.jsxs("div", { style: container, children: [
333
333
  jsx_runtime_1.jsx("p", { style: dividerLabel, children: "Output" }), jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
334
- jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Default codec" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: codecValues, selectedId: codec !== null && codec !== void 0 ? codec : REMOTION_DEFAULT, title: "Codec" }) })
334
+ jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Default codec" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: codecValues, selectedId: codec !== null && codec !== void 0 ? codec : REMOTION_DEFAULT, "aria-label": "Codec" }) })
335
335
  ] }), jsx_runtime_1.jsx(NumberSetting_1.NumberSetting, { name: "Scale", value: scale, onValueChanged: changeScale, min: 0.1, step: 0.1 }), jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
336
- jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Still image format" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: stillFormatValues, selectedId: stillImageFormat !== null && stillImageFormat !== void 0 ? stillImageFormat : REMOTION_DEFAULT, title: "Still image format" }) })
336
+ jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Still image format" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: stillFormatValues, selectedId: stillImageFormat !== null && stillImageFormat !== void 0 ? stillImageFormat : REMOTION_DEFAULT, "aria-label": "Still image format" }) })
337
337
  ] }), jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
338
- jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Video frame format" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: videoFormatValues, selectedId: videoImageFormat !== null && videoImageFormat !== void 0 ? videoImageFormat : REMOTION_DEFAULT, title: "Video frame format" }) })
338
+ jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Video frame format" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: videoFormatValues, selectedId: videoImageFormat !== null && videoImageFormat !== void 0 ? videoImageFormat : REMOTION_DEFAULT, "aria-label": "Video frame format" }) })
339
339
  ] }), jsx_runtime_1.jsx("p", { style: sectionTitle, children: "Encoding" }), client_1.BrowserSafeApis.codecSupportsCrf(resolvedCodec) &&
340
340
  client_1.BrowserSafeApis.codecSupportsVideoBitrate(resolvedCodec) ? (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
341
341
  jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Quality control" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(SegmentedControl_1.SegmentedControl, { items: qualityModeValues, needsWrapping: true }) })
@@ -345,11 +345,11 @@ const RenderingSettings = () => {
345
345
  client_1.BrowserSafeApis.codecSupportsVideoBitrate(resolvedCodec) ? (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
346
346
  jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Video bitrate" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(RemInput_1.RemotionInput, { style: { ...layout_2.input, ...fullWidth }, value: videoBitrate, onChange: onVideoBitrateChange, onBlur: onVideoBitrateBlur, status: "ok", rightAlign: true }) })
347
347
  ] })) : null, resolvedCodec === 'prores' ? (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
348
- jsx_runtime_1.jsx("div", { style: layout_2.label, children: "ProRes profile" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: profileValues, selectedId: proResProfile !== null && proResProfile !== void 0 ? proResProfile : REMOTION_DEFAULT, title: "ProRes profile" }) })
348
+ jsx_runtime_1.jsx("div", { style: layout_2.label, children: "ProRes profile" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: profileValues, selectedId: proResProfile !== null && proResProfile !== void 0 ? proResProfile : REMOTION_DEFAULT, "aria-label": "ProRes profile" }) })
349
349
  ] })) : null, resolvedCodec === 'h264' ? (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
350
- jsx_runtime_1.jsx("div", { style: layout_2.label, children: "x264 preset" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: presetValues, selectedId: x264Preset !== null && x264Preset !== void 0 ? x264Preset : REMOTION_DEFAULT, title: "x264 preset" }) })
350
+ jsx_runtime_1.jsx("div", { style: layout_2.label, children: "x264 preset" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: presetValues, selectedId: x264Preset !== null && x264Preset !== void 0 ? x264Preset : REMOTION_DEFAULT, "aria-label": "x264 preset" }) })
351
351
  ] })) : null, jsx_runtime_1.jsx("p", { style: sectionTitle, children: "Audio" }), jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
352
- jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Audio codec" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: audioCodecValues, selectedId: audioCodec !== null && audioCodec !== void 0 ? audioCodec : REMOTION_DEFAULT, title: "Audio codec" }) })
352
+ jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Audio codec" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: audioCodecValues, selectedId: audioCodec !== null && audioCodec !== void 0 ? audioCodec : REMOTION_DEFAULT, "aria-label": "Audio codec" }) })
353
353
  ] }), jsx_runtime_1.jsx("p", { style: sectionTitle, children: "Performance" }), jsx_runtime_1.jsx(NumberSetting_1.NumberSetting, { name: "Concurrency", value: concurrency, onValueChanged: changeConcurrency, min: renderDefaults.minConcurrency, max: renderDefaults.maxConcurrency, step: 1 }), (error !== null && error !== void 0 ? error : settingsError) ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
354
354
  jsx_runtime_1.jsx(layout_1.Spacing, { y: 1, block: true }), jsx_runtime_1.jsx("div", { style: { paddingLeft: 16, paddingRight: 16 }, children: jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { message: (_a = error !== null && error !== void 0 ? error : settingsError) !== null && _a !== void 0 ? _a : '', align: "flex-start", type: "error" }) })
355
355
  ] })) : null, jsx_runtime_1.jsx(layout_1.Spacing, { y: 2, block: true })
@@ -36,6 +36,6 @@ const RulersAndGuidesToggle = ({ showGuides }) => {
36
36
  : editorShowRulers
37
37
  ? 'Hide rulers'
38
38
  : 'Show rulers';
39
- return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: showGuides ? 'Rulers and Guides' : 'Rulers', 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": rulersOrGuidesAreVisible, onClick: onClick, style: buttonStyle, children: (color) => (jsx_runtime_1.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 576 512", style: { width: 18, height: 18 }, "aria-hidden": "true", focusable: "false", children: jsx_runtime_1.jsx("path", { fill: rulersOrGuidesAreVisible ? colors_1.BLUE : color, d: "M525.9 154.2L186.5 493.6c-6.2 6.2-16.4 6.2-22.6 0L50.7 380.5c-6.2-6.2-6.2-16.4 0-22.6l33.9-33.9 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 39.6-39.6 33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-33.9-33.9 39.6-39.6 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 39.6-39.6 33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-33.9-33.9 39.6-39.6 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 33.9-33.9c6.2-6.2 16.4-6.2 22.6 0L525.9 131.5c6.2 6.2 6.2 16.4 0 22.6zM73.3 289.9L28.1 335.2c-18.7 18.7-18.7 49.1 0 67.9L141.2 516.2c18.7 18.7 49.1 18.7 67.9 0L548.5 176.8c18.7-18.7 18.7-49.1 0-67.9L435.4-4.2C416.6-23 386.2-23 367.5-4.2 77.1 286.2 140.3 223 73.3 289.9z" }) })) }) }));
39
+ return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: showGuides ? 'Rulers and Guides' : 'Rulers', 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": rulersOrGuidesAreVisible, onClick: onClick, style: buttonStyle, children: (color) => (jsx_runtime_1.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 576 512", style: { width: 18, height: 18 }, "aria-hidden": "true", focusable: "false", children: jsx_runtime_1.jsx("path", { fill: rulersOrGuidesAreVisible ? colors_1.BLUE : color, d: "M525.9 154.2L186.5 493.6c-6.2 6.2-16.4 6.2-22.6 0L50.7 380.5c-6.2-6.2-6.2-16.4 0-22.6l33.9-33.9 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 39.6-39.6 33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-33.9-33.9 39.6-39.6 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 39.6-39.6 33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-33.9-33.9 39.6-39.6 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 33.9-33.9c6.2-6.2 16.4-6.2 22.6 0L525.9 131.5c6.2 6.2 6.2 16.4 0 22.6zM73.3 289.9L28.1 335.2c-18.7 18.7-18.7 49.1 0 67.9L141.2 516.2c18.7 18.7 49.1 18.7 67.9 0L548.5 176.8c18.7-18.7 18.7-49.1 0-67.9L435.4-4.2C416.6-23 386.2-23 367.5-4.2 77.1 286.2 140.3 223 73.3 289.9z" }) })) }) }));
40
40
  };
41
41
  exports.RulersAndGuidesToggle = RulersAndGuidesToggle;
@@ -8,7 +8,6 @@ type SegmentedButtonSegmentCommon = {
8
8
  readonly renderContent: (color: string) => React.ReactNode;
9
9
  readonly segmentId: string;
10
10
  readonly style: React.CSSProperties | null;
11
- readonly title: string | null;
12
11
  readonly tooltipLabel: string | null;
13
12
  };
14
13
  export type SegmentedButtonSegment = SegmentedButtonSegmentCommon & ({
@@ -25,6 +24,5 @@ export type SegmentedButtonSegment = SegmentedButtonSegmentCommon & ({
25
24
  export declare const SegmentedButton: React.FC<{
26
25
  readonly segments: SegmentedButtonSegment[];
27
26
  readonly style: React.CSSProperties | null;
28
- readonly title: string | null;
29
27
  }>;
30
28
  export {};
@@ -80,7 +80,7 @@ const preventMouseFocus = (event) => {
80
80
  event.preventDefault();
81
81
  };
82
82
  const SegmentedButtonAction = ({ index, segment, segmentCount }) => {
83
- var _a, _b;
83
+ var _a;
84
84
  const { tabIndex } = (0, z_index_1.useZIndex)();
85
85
  const style = (0, react_1.useMemo)(() => {
86
86
  return {
@@ -108,14 +108,14 @@ const SegmentedButtonAction = ({ index, segment, segmentCount }) => {
108
108
  (_a = segment.onPointerDown) === null || _a === void 0 ? void 0 : _a.call(segment, event);
109
109
  preventPointerFocus(event);
110
110
  }, [segment]);
111
- const button = (jsx_runtime_1.jsx("button", { "aria-label": segment.ariaLabel, className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME}`, disabled: segment.disabled, id: (_a = segment.buttonId) !== null && _a !== void 0 ? _a : undefined, onClick: onClick, onMouseDown: preventMouseFocus, onPointerDown: onPointerDown, style: style, tabIndex: tabIndex, title: (_b = segment.title) !== null && _b !== void 0 ? _b : undefined, type: "button", children: segment.renderContent(colors_1.CURRENT_COLOR) }));
111
+ const button = (jsx_runtime_1.jsx("button", { "aria-label": segment.ariaLabel, className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME}`, disabled: segment.disabled, id: (_a = segment.buttonId) !== null && _a !== void 0 ? _a : undefined, onClick: onClick, onMouseDown: preventMouseFocus, onPointerDown: onPointerDown, style: style, tabIndex: tabIndex, type: "button", children: segment.renderContent(colors_1.CURRENT_COLOR) }));
112
112
  if (segment.tooltipLabel === null) {
113
113
  return button;
114
114
  }
115
115
  return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: segment.tooltipLabel, shortcut: null, delay: 800, dismissOnClick: true, triggerStyle: tooltipTriggerStyle, children: button }));
116
116
  };
117
117
  const SegmentedButtonMenu = ({ index, segment, segmentCount }) => {
118
- var _a, _b;
118
+ var _a;
119
119
  const [opened, setOpened] = (0, react_1.useState)(false);
120
120
  const ref = (0, react_1.useRef)(null);
121
121
  const { currentZIndex, tabIndex } = (0, z_index_1.useZIndex)();
@@ -214,15 +214,15 @@ const SegmentedButtonMenu = ({ index, segment, segmentCount }) => {
214
214
  ...segment.style,
215
215
  };
216
216
  }, [index, opened, segment, segmentCount]);
217
- const button = (jsx_runtime_1.jsx("button", { ref: ref, "aria-expanded": opened, "aria-haspopup": "menu", "aria-label": segment.ariaLabel, className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME} ${is_menu_item_1.MENU_INITIATOR_CLASSNAME}`, disabled: segment.disabled, id: (_a = segment.buttonId) !== null && _a !== void 0 ? _a : undefined, onClick: onClick, onMouseDown: preventMouseFocus, onPointerDown: onPointerDown, style: style, tabIndex: tabIndex, title: (_b = segment.title) !== null && _b !== void 0 ? _b : undefined, type: "button", children: segment.renderContent(colors_1.CURRENT_COLOR) }));
217
+ const button = (jsx_runtime_1.jsx("button", { ref: ref, "aria-expanded": opened, "aria-haspopup": "menu", "aria-label": segment.ariaLabel, className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME} ${is_menu_item_1.MENU_INITIATOR_CLASSNAME}`, disabled: segment.disabled, id: (_a = segment.buttonId) !== null && _a !== void 0 ? _a : undefined, onClick: onClick, onMouseDown: preventMouseFocus, onPointerDown: onPointerDown, style: style, tabIndex: tabIndex, type: "button", children: segment.renderContent(colors_1.CURRENT_COLOR) }));
218
218
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [segment.tooltipLabel === null ? (button) : (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: segment.tooltipLabel, shortcut: null, delay: 800, dismissOnClick: true, triggerStyle: tooltipTriggerStyle, children: button })), portalStyle
219
219
  ? react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { style: styles_1.fullScreenOverlay, onPointerDown: (event) => event.stopPropagation(), children: jsx_runtime_1.jsx("div", { style: styles_1.outerPortal, className: "css-reset", children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onOutsideClick: onOutsideClick, onEscape: onHide, children: jsx_runtime_1.jsx("div", { style: portalStyle, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { fixedHeight: Math.max(spaceToBottom, spaceToTop), leaveLeftSpace: segment.leaveLeftSpace, onHide: onHide, onNextMenu: noop_1.noop, onPreviousMenu: noop_1.noop, preselectIndex: segment.selectedId === null
220
220
  ? false
221
221
  : segment.values.findIndex((value) => value.id === segment.selectedId), topItemCanBeUnselected: false, values: segment.values }) }) }) }) }), (0, portals_1.getPortal)(currentZIndex))
222
222
  : null] }));
223
223
  };
224
- const SegmentedButton = ({ segments, style, title }) => {
225
- return (jsx_runtime_1.jsx("div", { style: { ...containerStyle, ...style }, title: title !== null && title !== void 0 ? title : undefined, children: segments.map((segment, index) => {
224
+ const SegmentedButton = ({ segments, style }) => {
225
+ return (jsx_runtime_1.jsx("div", { style: { ...containerStyle, ...style }, children: segments.map((segment, index) => {
226
226
  if (segment.type === 'action') {
227
227
  return (jsx_runtime_1.jsx(SegmentedButtonAction, { index: index, segment: segment, segmentCount: segments.length }, segment.segmentId));
228
228
  }
@@ -338,12 +338,25 @@ const calculateOutlineTargets = ({ connectedClientId, editorShowOutlines, getDra
338
338
  pathDrag: previewInteractive &&
339
339
  controls !== null &&
340
340
  (pathFieldSchema === null || pathFieldSchema === void 0 ? void 0 : pathFieldSchema.type) === 'svg-path' &&
341
- (pathPropStatus === null || pathPropStatus === void 0 ? void 0 : pathPropStatus.status) === 'static' &&
342
- typeof pathPropStatus.codeValue === 'string'
341
+ (((pathPropStatus === null || pathPropStatus === void 0 ? void 0 : pathPropStatus.status) === 'static' &&
342
+ typeof pathPropStatus.codeValue === 'string') ||
343
+ ((pathPropStatus === null || pathPropStatus === void 0 ? void 0 : pathPropStatus.status) === 'keyframed' &&
344
+ pathFieldSchema.keyframable !== false &&
345
+ pathPropStatus.interpolationFunction === 'interpolatePaths'))
343
346
  ? {
344
347
  clientId: connectedClientId,
345
348
  nodePath,
349
+ propStatus: pathPropStatus,
346
350
  schema: controls.schema,
351
+ sourceFrame: {
352
+ displayFrame: targetTimelinePosition,
353
+ keyframeDisplayOffset: (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
354
+ propStatus: pathPropStatus,
355
+ keyframeDisplayOffset,
356
+ keyframePlaybackRate,
357
+ }),
358
+ keyframePlaybackRate,
359
+ },
347
360
  }
348
361
  : null,
349
362
  canCrop: previewInteractive && controls !== null && cropFields !== null,
@@ -8,6 +8,8 @@ const remotion_1 = require("remotion");
8
8
  const colors_1 = require("../helpers/colors");
9
9
  const pointer_session_1 = require("../helpers/pointer-session");
10
10
  const NotificationCenter_1 = require("./Notifications/NotificationCenter");
11
+ const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
12
+ const get_timeline_keyframes_1 = require("./Timeline/get-timeline-keyframes");
11
13
  const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
12
14
  const SelectedOutlinePathPoints = ({ outline, pathDrag, onDraggingChange }) => {
13
15
  const { setDragOverrides, clearDragOverrides, setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
@@ -251,7 +253,17 @@ const SelectedOutlinePathPoints = ({ outline, pathDrag, onDraggingChange }) => {
251
253
  const startX = event.clientX;
252
254
  const startY = event.clientY;
253
255
  const originalD = (0, paths_1.serializeInstructions)(instructions);
256
+ const sourceFrame = (0, get_timeline_keyframes_1.resolveKeyframeSourceFrame)(pathDrag.sourceFrame, pathDrag.propStatus);
254
257
  let lastD = originalD;
258
+ const updatePathOverride = (value) => {
259
+ setDragOverrides(pathDrag.nodePath, 'd', pathDrag.propStatus.status === 'keyframed'
260
+ ? remotion_1.Internals.makeKeyframedDragOverride({
261
+ status: pathDrag.propStatus,
262
+ frame: sourceFrame,
263
+ value,
264
+ })
265
+ : remotion_1.Internals.makeStaticDragOverride(value));
266
+ };
255
267
  (0, pointer_session_1.startCapturedPointerSession)({
256
268
  event,
257
269
  captureTarget: svg,
@@ -264,7 +276,7 @@ const SelectedOutlinePathPoints = ({ outline, pathDrag, onDraggingChange }) => {
264
276
  if (localDeltaX === 0 && localDeltaY === 0) {
265
277
  if (lastD !== originalD) {
266
278
  lastD = originalD;
267
- setDragOverrides(pathDrag.nodePath, 'd', remotion_1.Internals.makeStaticDragOverride(originalD));
279
+ updatePathOverride(originalD);
268
280
  }
269
281
  return;
270
282
  }
@@ -393,7 +405,7 @@ const SelectedOutlinePathPoints = ({ outline, pathDrag, onDraggingChange }) => {
393
405
  return;
394
406
  }
395
407
  lastD = nextD;
396
- setDragOverrides(pathDrag.nodePath, 'd', remotion_1.Internals.makeStaticDragOverride(nextD));
408
+ updatePathOverride(nextD);
397
409
  },
398
410
  onEnd: (reason, endEvent) => {
399
411
  onDraggingChange(false);
@@ -401,24 +413,36 @@ const SelectedOutlinePathPoints = ({ outline, pathDrag, onDraggingChange }) => {
401
413
  clearDragOverrides(pathDrag.nodePath);
402
414
  return;
403
415
  }
404
- (0, save_sequence_prop_1.saveSequenceProps)({
405
- changes: [
406
- {
407
- fileName: pathDrag.nodePath.absolutePath,
408
- nodePath: pathDrag.nodePath,
409
- fieldKey: 'd',
410
- value: lastD,
411
- defaultValue: null,
412
- schema: pathDrag.schema,
413
- },
414
- ],
415
- addedKeyframes: null,
416
- movedKeyframes: null,
417
- setPropStatuses,
418
- clientId: pathDrag.clientId,
419
- undoLabel: 'Edit path point',
420
- redoLabel: 'Edit path point back',
421
- })
416
+ const promise = pathDrag.propStatus.status === 'keyframed'
417
+ ? (0, call_add_keyframe_1.callAddSequenceKeyframe)({
418
+ fileName: pathDrag.nodePath.absolutePath,
419
+ nodePath: pathDrag.nodePath,
420
+ fieldKey: 'd',
421
+ sourceFrame,
422
+ value: lastD,
423
+ schema: pathDrag.schema,
424
+ setPropStatuses,
425
+ clientId: pathDrag.clientId,
426
+ })
427
+ : (0, save_sequence_prop_1.saveSequenceProps)({
428
+ changes: [
429
+ {
430
+ fileName: pathDrag.nodePath.absolutePath,
431
+ nodePath: pathDrag.nodePath,
432
+ fieldKey: 'd',
433
+ value: lastD,
434
+ defaultValue: null,
435
+ schema: pathDrag.schema,
436
+ },
437
+ ],
438
+ addedKeyframes: null,
439
+ movedKeyframes: null,
440
+ setPropStatuses,
441
+ clientId: pathDrag.clientId,
442
+ undoLabel: 'Edit path point',
443
+ redoLabel: 'Edit path point back',
444
+ });
445
+ promise
422
446
  .catch((error) => {
423
447
  (0, NotificationCenter_1.showNotification)(`Could not save path: ${error instanceof Error ? error.message : String(error)}`, 3000);
424
448
  })
@@ -427,7 +451,7 @@ const SelectedOutlinePathPoints = ({ outline, pathDrag, onDraggingChange }) => {
427
451
  });
428
452
  };
429
453
  return (jsx_runtime_1.jsxs("g", { children: [connections.map((connection) => (jsx_runtime_1.jsx("line", { x1: connection.x1, y1: connection.y1, x2: connection.x2, y2: connection.y2, stroke: colors_1.BLUE, strokeWidth: 2, pointerEvents: "none" }, connection.key))), points.map((point) => (jsx_runtime_1.jsxs("g", { children: [
430
- jsx_runtime_1.jsx("circle", { cx: point.x, cy: point.y, r: 10, fill: "transparent", pointerEvents: "all", onPointerDown: (event) => onPointPointerDown(event, point), style: { cursor: 'pointer' } }), jsx_runtime_1.jsx("circle", { cx: point.x, cy: point.y, r: 4.5, fill: colors_1.WHITE, stroke: colors_1.BLUE, strokeWidth: 2, pointerEvents: "none" })
454
+ jsx_runtime_1.jsx("circle", { cx: point.x, cy: point.y, r: 10, fill: "transparent", pointerEvents: "all", onPointerDown: (event) => onPointPointerDown(event, point), style: { cursor: 'default' } }), jsx_runtime_1.jsx("circle", { cx: point.x, cy: point.y, r: 4.5, fill: colors_1.WHITE, stroke: colors_1.BLUE, strokeWidth: 2, pointerEvents: "none" })
431
455
  ] }, point.key)))] }));
432
456
  };
433
457
  exports.SelectedOutlinePathPoints = SelectedOutlinePathPoints;
@@ -162,7 +162,7 @@ const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth
162
162
  var _a;
163
163
  var _b;
164
164
  const target = targetsByKey.get(outline.key);
165
- const pathDrag = (target === null || target === void 0 ? void 0 : target.selected)
165
+ const pathDrag = (target === null || target === void 0 ? void 0 : target.containsSelection)
166
166
  ? ((_b = (_a = getLatestOutlineTargetByKey(outline.key)) === null || _a === void 0 ? void 0 : _a.pathDrag) !== null && _b !== void 0 ? _b : null)
167
167
  : null;
168
168
  return outline.path !== null && pathDrag !== null ? (jsx_runtime_1.jsx(SelectedOutlinePathPoints_1.SelectedOutlinePathPoints, { outline: outline, pathDrag: pathDrag, onDraggingChange: onDraggingChange }, `${outline.key}-path-points`)) : null;
@@ -55,6 +55,6 @@ const SettingsButton = ({ showUpdates }) => {
55
55
  : updateAvailable
56
56
  ? 'Update available'
57
57
  : 'Settings';
58
- return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: label, shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: openModal, renderAction: updateAvailable ? renderUpdateIcon : renderGearIcon, unhoveredColor: hasBugfixesAvailable ? colors_1.WARNING_COLOR : colors_1.WHITE_ALPHA_80, title: "", "aria-label": label }) }));
58
+ return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: label, shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: openModal, renderAction: updateAvailable ? renderUpdateIcon : renderGearIcon, unhoveredColor: hasBugfixesAvailable ? colors_1.WARNING_COLOR : colors_1.WHITE_ALPHA_80, "aria-label": label }) }));
59
59
  };
60
60
  exports.SettingsButton = SettingsButton;
@@ -70,7 +70,7 @@ const SettingsModalFooter = ({ showAboutElements, showLicenseFaq }) => {
70
70
  return (jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { style: footer, children: jsx_runtime_1.jsxs("div", { style: footerRow, children: [
71
71
  jsx_runtime_1.jsx("div", { style: configFileHint, children: restartRequired ? ('Restart the server to apply changes') : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: ["Changes save to",
72
72
  jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(InspectorOpenInEditor_1.InspectorOpenInEditor, { locationType: null, location: configFileLocation, label: jsx_runtime_1.jsx("strong", { style: configFileName, children: "remotion.config.ts" }), showTooltips: false })
73
- ] })) }), restartRequired ? (jsx_runtime_1.jsx(ModalButton_1.ModalButton, { disabled: restarting, onClick: restart, size: "compact", title: "Restart Studio to apply config file changes", children: restarting ? 'Restarting...' : 'Restart Studio' })) : showLicenseFaq || showAboutElements ? (jsx_runtime_1.jsxs(common_1.InspectorQuickAction, { disabled: false, onClick: showLicenseFaq ? openLicenseFaq : openAboutElements, style: { flex: 'none', width: 'fit-content' }, title: showLicenseFaq
73
+ ] })) }), restartRequired ? (jsx_runtime_1.jsx(ModalButton_1.ModalButton, { disabled: restarting, onClick: restart, size: "compact", "aria-label": "Restart Studio to apply config file changes", children: restarting ? 'Restarting...' : 'Restart Studio' })) : showLicenseFaq || showAboutElements ? (jsx_runtime_1.jsxs(common_1.InspectorQuickAction, { disabled: false, onClick: showLicenseFaq ? openLicenseFaq : openAboutElements, style: { flex: 'none', width: 'fit-content' }, "aria-label": showLicenseFaq
74
74
  ? 'Open the Remotion License FAQ in a new tab'
75
75
  : 'Open Remotion Elements in a new tab', children: [showLicenseFaq ? 'License FAQ' : 'About Elements', jsx_runtime_1.jsx("svg", { "aria-hidden": "true", viewBox: "0 0 16 16", style: externalLinkIndicator, children: jsx_runtime_1.jsx("path", { d: "M4 12 12 4M6 4h6v6", fill: "none", stroke: colors_1.CURRENT_COLOR, strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "1.5" }) })
76
76
  ] })) : null] }) }));
@@ -126,6 +126,6 @@ const SizeSelector = () => {
126
126
  if (!zoomable) {
127
127
  return null;
128
128
  }
129
- return (jsx_runtime_1.jsx(TimelineCombobox_1.TimelineCombobox, { title: accessibilityLabel, tooltipDelay: 800, selectedId: selectedId, values: items, renderLeftItem: (color) => selectedId === 'auto' ? (jsx_runtime_1.jsx(canvas_zoom_1.CanvasFitIcon, { color: color })) : Number(selectedId) < 1 ? (jsx_runtime_1.jsx(canvas_zoom_1.CanvasZoomOutIcon, { color: color })) : (jsx_runtime_1.jsx(canvas_zoom_1.CanvasZoomIcon, { color: color })), unhoveredIconColor: colors_1.WHITE_ALPHA_80 }));
129
+ return (jsx_runtime_1.jsx(TimelineCombobox_1.TimelineCombobox, { "aria-label": accessibilityLabel, tooltipDelay: 800, selectedId: selectedId, values: items, renderLeftItem: (color) => selectedId === 'auto' ? (jsx_runtime_1.jsx(canvas_zoom_1.CanvasFitIcon, { color: color })) : Number(selectedId) < 1 ? (jsx_runtime_1.jsx(canvas_zoom_1.CanvasZoomOutIcon, { color: color })) : (jsx_runtime_1.jsx(canvas_zoom_1.CanvasZoomIcon, { color: color })), unhoveredIconColor: colors_1.WHITE_ALPHA_80 }));
130
130
  };
131
131
  exports.SizeSelector = SizeSelector;
@@ -129,7 +129,7 @@ const SkillSettingsRow = ({ skill }) => {
129
129
  return jsx_runtime_1.jsx(trash_1.TrashIcon, { color: color, style: actionIcon });
130
130
  }, []);
131
131
  return (jsx_runtime_1.jsxs("div", { role: "listitem", style: skillRow, children: [
132
- jsx_runtime_1.jsx(skills_1.SkillsIcon, { "aria-hidden": true, color: colors_1.LIGHT_TEXT, style: skillIcon }), jsx_runtime_1.jsxs("span", { style: skillName, children: ["/", skill.name] }), processingThisSkill ? (jsx_runtime_1.jsx("span", { style: status, children: skillAction.type === 'installing' ? 'Installing…' : 'Removing…' })) : installedLocation ? (jsx_runtime_1.jsx("span", { style: status, children: installedLocation })) : null, installed ? (jsx_runtime_1.jsx(check_circle_filled_1.CheckCircleFilled, { "aria-hidden": true, style: { ...statusIcon, fill: colors_1.BLUE } })) : null, processingThisSkill ? (jsx_runtime_1.jsx("span", { style: actionSlot, children: jsx_runtime_1.jsx(Spinner_1.Spinner, { duration: 0.5, size: 14 }) })) : installed && canInstall ? (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 ${skill.name}`, title: "", disabled: skillAction !== null, onClick: () => removeSkill(skill.name), renderAction: renderRemoveAction, variant: null }) })) : canInstall ? (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": `Install ${skill.name}`, title: "", disabled: skillAction !== null, onClick: () => installSkill(skill.name), renderAction: renderInstallAction, variant: null }) })) : null] }));
132
+ jsx_runtime_1.jsx(skills_1.SkillsIcon, { "aria-hidden": true, color: colors_1.LIGHT_TEXT, style: skillIcon }), jsx_runtime_1.jsxs("span", { style: skillName, children: ["/", skill.name] }), processingThisSkill ? (jsx_runtime_1.jsx("span", { style: status, children: skillAction.type === 'installing' ? 'Installing…' : 'Removing…' })) : installedLocation ? (jsx_runtime_1.jsx("span", { style: status, children: installedLocation })) : null, installed ? (jsx_runtime_1.jsx(check_circle_filled_1.CheckCircleFilled, { "aria-hidden": true, style: { ...statusIcon, fill: colors_1.BLUE } })) : null, processingThisSkill ? (jsx_runtime_1.jsx("span", { style: actionSlot, children: jsx_runtime_1.jsx(Spinner_1.Spinner, { duration: 0.5, size: 14 }) })) : installed && canInstall ? (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 ${skill.name}`, disabled: skillAction !== null, onClick: () => removeSkill(skill.name), renderAction: renderRemoveAction, variant: null }) })) : canInstall ? (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": `Install ${skill.name}`, disabled: skillAction !== null, onClick: () => installSkill(skill.name), renderAction: renderInstallAction, variant: null }) })) : null] }));
133
133
  };
134
134
  exports.SkillSettingsRow = SkillSettingsRow;
135
135
  const SkillsSettings = () => {
@@ -156,7 +156,7 @@ const SkillsSettings = () => {
156
156
  }, [copied]);
157
157
  return (jsx_runtime_1.jsxs("div", { style: container, children: [remotionSkillsInfo === null && error === null ? (jsx_runtime_1.jsx("p", { style: loading, children: "Checking installed skills..." })) : null, remotionSkillsInfo === null && error ? (jsx_runtime_1.jsx("div", { style: { marginTop: 14 }, children: jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { message: error, align: "flex-start", type: "error" }) })) : null, missingSkills > 0 && canInstall ? (jsx_runtime_1.jsx("p", { style: description, children: "Install skills in this project to use them with your coding agent." })) : null, skillActionError ? (jsx_runtime_1.jsx("div", { style: { marginTop: 14 }, children: jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { message: skillActionError, align: "flex-start", type: "error" }) })) : null, missingSkills > 0 && !canInstall ? (jsx_runtime_1.jsxs("div", { children: [
158
158
  jsx_runtime_1.jsx("p", { style: description, children: "Not all skills are installed. Run this command in the project directory, then reload Studio and restart your coding agent." }), jsx_runtime_1.jsxs("div", { style: commandField, children: [
159
- jsx_runtime_1.jsx("pre", { style: command, children: INSTALL_COMMAND }), jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: onCopy, renderAction: renderCopyAction, title: "Copy install command" })
159
+ jsx_runtime_1.jsx("pre", { style: command, children: INSTALL_COMMAND }), jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: onCopy, renderAction: renderCopyAction, "aria-label": "Copy install command" })
160
160
  ] })
161
161
  ] })) : null, remotionSkillsInfo ? (jsx_runtime_1.jsx("div", { style: list, role: "list", "aria-label": "Remotion Agent Skills", children: remotionSkillsInfo.skills.map((skill) => {
162
162
  return jsx_runtime_1.jsx(exports.SkillSettingsRow, { skill: skill }, skill.name);
@@ -22,6 +22,6 @@ const SnappingToggle = () => {
22
22
  ? 'Disable snapping'
23
23
  : 'Enable snapping';
24
24
  const shortcutsDisabled = (0, use_keybinding_1.areKeyboardShortcutsDisabled)();
25
- return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Snapping", shortcut: shortcutsDisabled ? null : shortcut, delay: 800, dismissOnClick: false, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: "", "aria-label": accessibilityLabel, "aria-pressed": editorSnapping, "aria-keyshortcuts": shortcutsDisabled ? undefined : ariaKeyShortcuts || undefined, onClick: onClick, style: buttonStyle, children: (color) => (jsx_runtime_1.jsx(magnet_1.MagnetIcon, { style: { width: 18, height: 18, transform: 'translateY(1px)' }, color: editorSnapping ? colors_1.BLUE : color, "aria-hidden": "true", focusable: "false" })) }) }));
25
+ return (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Snapping", shortcut: shortcutsDisabled ? null : shortcut, delay: 800, dismissOnClick: false, children: jsx_runtime_1.jsx(ControlButton_1.ControlButton, { "aria-label": accessibilityLabel, "aria-pressed": editorSnapping, "aria-keyshortcuts": shortcutsDisabled ? undefined : ariaKeyShortcuts || undefined, onClick: onClick, style: buttonStyle, children: (color) => (jsx_runtime_1.jsx(magnet_1.MagnetIcon, { style: { width: 18, height: 18, transform: 'translateY(1px)' }, color: editorSnapping ? colors_1.BLUE : color, "aria-hidden": "true", focusable: "false" })) }) }));
26
26
  };
27
27
  exports.SnappingToggle = SnappingToggle;
@@ -52,7 +52,7 @@ const initialSettings = {
52
52
  const ConfigNumber = ({ defaultValue, name, onChange, onChangeEnd, value, }) => {
53
53
  return (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
54
54
  jsx_runtime_1.jsx("div", { style: layout_2.label, children: name }), jsx_runtime_1.jsxs("div", { style: { ...layout_2.rightRow, gap: 6 }, children: [
55
- jsx_runtime_1.jsx(InputDragger_1.InputDragger, { "aria-label": name, buttonStyle: { textAlign: 'right', width: 140 }, formatter: () => value === null ? `Default (${defaultValue})` : String(value), min: 0, onTextChange: () => undefined, onValueChange: onChange, onValueChangeEnd: onChangeEnd, placeholder: `Default (${defaultValue})`, rightAlign: true, status: "ok", step: 1, value: value !== null && value !== void 0 ? value : defaultValue }), jsx_runtime_1.jsx(Button_1.Button, { disabled: value === null, onClick: () => onChangeEnd(null), size: "compact", style: { color: colors_1.LIGHT_TEXT }, title: `Use default (${defaultValue})`, children: jsx_runtime_1.jsx(undo_1.UndoIcon, { style: resetIcon }) })
55
+ jsx_runtime_1.jsx(InputDragger_1.InputDragger, { "aria-label": name, buttonStyle: { textAlign: 'right', width: 140 }, formatter: () => value === null ? `Default (${defaultValue})` : String(value), min: 0, onTextChange: () => undefined, onValueChange: onChange, onValueChangeEnd: onChangeEnd, placeholder: `Default (${defaultValue})`, rightAlign: true, status: "ok", step: 1, value: value !== null && value !== void 0 ? value : defaultValue }), jsx_runtime_1.jsx(Button_1.Button, { disabled: value === null, onClick: () => onChangeEnd(null), size: "compact", style: { color: colors_1.LIGHT_TEXT }, "aria-label": `Use default (${defaultValue})`, children: jsx_runtime_1.jsx(undo_1.UndoIcon, { style: resetIcon }) })
56
56
  ] })
57
57
  ] }));
58
58
  };
@@ -130,7 +130,7 @@ const StudioSettings = () => {
130
130
  { label: 'Webpack', value: false },
131
131
  ], value: settings.rspack }), jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
132
132
  jsx_runtime_1.jsxs("div", { style: layout_2.label, children: ["Cross-site isolation",
133
- jsx_runtime_1.jsx(InfoBubble_1.InfoBubble, { title: "About cross-site isolation", horizontalAlignment: "right", children: jsx_runtime_1.jsx("div", { style: {
133
+ jsx_runtime_1.jsx(InfoBubble_1.InfoBubble, { "aria-label": "About cross-site isolation", horizontalAlignment: "right", children: jsx_runtime_1.jsx("div", { style: {
134
134
  padding: 12,
135
135
  maxWidth: 280,
136
136
  fontSize: 14,
@@ -124,9 +124,7 @@ const TimeValue = () => {
124
124
  }
125
125
  return (jsx_runtime_1.jsxs("div", { style: text, children: [
126
126
  jsx_runtime_1.jsxs("div", { style: currentTimeStack, children: [
127
- jsx_runtime_1.jsx(InputDragger_1.InputDragger, { ref: ref, "aria-label": String(frame), value: frame, onTextChange: onTextChange, onValueChange: onValueChange, formatter: formatter, formatterStyle: currentTimeTypography, buttonStyle: currentTimeButtonStyle, rightAlign: false, status: "ok", style: currentTimeInputStyle }), jsx_runtime_1.jsx("button", { type: "button", className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME}`, style: currentTimeSubtitle, onClick: toggleTickFormat, "aria-label": "Show timeline ticks as frames", "aria-pressed": showFrames, title: showFrames
128
- ? 'Show timeline ticks as timecode'
129
- : 'Show timeline ticks as frames', children: frame })
127
+ jsx_runtime_1.jsx(InputDragger_1.InputDragger, { ref: ref, "aria-label": String(frame), value: frame, onTextChange: onTextChange, onValueChange: onValueChange, formatter: formatter, formatterStyle: currentTimeTypography, buttonStyle: currentTimeButtonStyle, rightAlign: false, status: "ok", style: currentTimeInputStyle }), jsx_runtime_1.jsx("button", { type: "button", className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME}`, style: currentTimeSubtitle, onClick: toggleTickFormat, "aria-label": "Show timeline ticks as frames", "aria-pressed": showFrames, children: frame })
130
128
  ] }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), jsx_runtime_1.jsx(layout_1.Flex, {}), jsx_runtime_1.jsx(TimelineZoomControls_1.TimelineZoomControls, { sliderMaxWidth: 80 }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 })
131
129
  ] }));
132
130
  };
@@ -395,10 +395,10 @@ const EasingGraphScaffold = ({ labels }) => {
395
395
  const bottomLabelWidth = getEasingGraphLabelWidth(labels.start);
396
396
  const topLabelWidth = getEasingGraphLabelWidth(labels.end);
397
397
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
398
- jsx_runtime_1.jsx("line", { x1: PLOT_LEFT, y1: yZero, x2: PLOT_LEFT + PLOT_WIDTH, y2: yZero, stroke: EASING_GRAPH_GUIDE_COLOR, strokeWidth: 1 }), jsx_runtime_1.jsx("line", { x1: PLOT_LEFT, y1: yOne, x2: PLOT_LEFT + PLOT_WIDTH, y2: yOne, stroke: EASING_GRAPH_GUIDE_COLOR, strokeWidth: 1 }), jsx_runtime_1.jsx("foreignObject", { x: PLOT_LEFT - EASING_GRAPH_LABEL_HORIZONTAL_PADDING, y: yOne - EASING_GRAPH_LABEL_HEIGHT / 2, width: topLabelWidth, height: EASING_GRAPH_LABEL_HEIGHT, children: jsx_runtime_1.jsx("div", { style: getEasingGraphLabelStyle('left'), title: labels.end, children: labels.end }) }), jsx_runtime_1.jsx("foreignObject", { x: PLOT_LEFT +
398
+ jsx_runtime_1.jsx("line", { x1: PLOT_LEFT, y1: yZero, x2: PLOT_LEFT + PLOT_WIDTH, y2: yZero, stroke: EASING_GRAPH_GUIDE_COLOR, strokeWidth: 1 }), jsx_runtime_1.jsx("line", { x1: PLOT_LEFT, y1: yOne, x2: PLOT_LEFT + PLOT_WIDTH, y2: yOne, stroke: EASING_GRAPH_GUIDE_COLOR, strokeWidth: 1 }), jsx_runtime_1.jsx("foreignObject", { x: PLOT_LEFT - EASING_GRAPH_LABEL_HORIZONTAL_PADDING, y: yOne - EASING_GRAPH_LABEL_HEIGHT / 2, width: topLabelWidth, height: EASING_GRAPH_LABEL_HEIGHT, children: jsx_runtime_1.jsx("div", { role: "group", style: getEasingGraphLabelStyle('left'), "aria-label": labels.end, children: labels.end }) }), jsx_runtime_1.jsx("foreignObject", { x: PLOT_LEFT +
399
399
  PLOT_WIDTH -
400
400
  bottomLabelWidth +
401
- EASING_GRAPH_LABEL_HORIZONTAL_PADDING, y: yZero - EASING_GRAPH_LABEL_HEIGHT / 2, width: bottomLabelWidth, height: EASING_GRAPH_LABEL_HEIGHT, children: jsx_runtime_1.jsx("div", { style: getEasingGraphLabelStyle('right'), title: labels.start, children: labels.start }) })
401
+ EASING_GRAPH_LABEL_HORIZONTAL_PADDING, y: yZero - EASING_GRAPH_LABEL_HEIGHT / 2, width: bottomLabelWidth, height: EASING_GRAPH_LABEL_HEIGHT, children: jsx_runtime_1.jsx("div", { role: "group", style: getEasingGraphLabelStyle('right'), "aria-label": labels.start, children: labels.start }) })
402
402
  ] }));
403
403
  };
404
404
  const EasingPresetButton = ({ currentEasing, disabled, onClick, preset }) => {
@@ -419,7 +419,7 @@ const EasingPresetButton = ({ currentEasing, disabled, onClick, preset }) => {
419
419
  const handleClick = (0, react_1.useCallback)(() => {
420
420
  onClick(preset.easing);
421
421
  }, [onClick, preset.easing]);
422
- return (jsx_runtime_1.jsx("button", { type: "button", style: style, title: preset.label, "aria-label": `Apply ${preset.label} easing`, disabled: disabled, onClick: handleClick, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, children: jsx_runtime_1.jsx(exports.EasingPresetPreview, { color: selected || hovered ? colors_1.WHITE : colors_1.LIGHT_TEXT, easing: preset.easing }) }));
422
+ return (jsx_runtime_1.jsx("button", { type: "button", style: style, "aria-label": `Apply ${preset.label} easing`, disabled: disabled, onClick: handleClick, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, children: jsx_runtime_1.jsx(exports.EasingPresetPreview, { color: selected || hovered ? colors_1.WHITE : colors_1.LIGHT_TEXT, easing: preset.easing }) }));
423
423
  };
424
424
  const EasingEditor = ({ state, renderHeader }) => {
425
425
  var _a, _b;
@@ -205,8 +205,8 @@ const TimelineArrayField = ({ field, effectiveValue, onSave, onDragValueChange,
205
205
  return (jsx_runtime_1.jsxs("span", { style: container, children: [items.map((_item, index) => {
206
206
  const itemKey = itemKeys.current[index];
207
207
  return (jsx_runtime_1.jsxs("span", { style: itemContainer, children: [
208
- jsx_runtime_1.jsx("span", { style: itemLabel, children: index }), jsx_runtime_1.jsx(ItemEditor, { arrayField: arrayField, field: field, index: index, items: items, onDragEnd: onDragEnd, onDragValueChange: onDragValueChange, onSave: onSave }), jsx_runtime_1.jsx("button", { disabled: !canRemove, onClick: () => onRemove(index), style: canRemove ? button : disabledButton, title: `Remove item ${index}`, type: "button", children: "-" })
208
+ jsx_runtime_1.jsx("span", { style: itemLabel, children: index }), jsx_runtime_1.jsx(ItemEditor, { arrayField: arrayField, field: field, index: index, items: items, onDragEnd: onDragEnd, onDragValueChange: onDragValueChange, onSave: onSave }), jsx_runtime_1.jsx("button", { disabled: !canRemove, onClick: () => onRemove(index), style: canRemove ? button : disabledButton, "aria-label": `Remove item ${index}`, type: "button", children: "-" })
209
209
  ] }, itemKey));
210
- }), canAdd ? (jsx_runtime_1.jsx("span", { style: addButtonRow, children: jsx_runtime_1.jsx("button", { type: "button", style: button, onClick: onAdd, title: "Add item", children: "+" }) })) : null] }));
210
+ }), canAdd ? (jsx_runtime_1.jsx("span", { style: addButtonRow, children: jsx_runtime_1.jsx("button", { type: "button", style: button, onClick: onAdd, "aria-label": "Add item", children: "+" }) })) : null] }));
211
211
  };
212
212
  exports.TimelineArrayField = TimelineArrayField;