@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
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  installRequiredPackages,
3
3
  showNotification
4
- } from "./index-dh3zk2hv.mjs";
4
+ } from "./index-vtr5qzam.mjs";
5
5
  import {
6
6
  RenderQueueContext,
7
7
  isClientRenderJob,
@@ -60,7 +60,7 @@ import {
60
60
  useZodTypesIfPossible,
61
61
  watchPublicFolder,
62
62
  zodSafeParse
63
- } from "./index-s6qya2gg.mjs";
63
+ } from "./index-19d05w9e.mjs";
64
64
  import {
65
65
  BROWSER_STUDIO_OPERATIONS_READY_EVENT,
66
66
  callApi,
@@ -73,7 +73,7 @@ import {
73
73
  } from "./index-dfy1t576.mjs";
74
74
  import {
75
75
  studioCssVariables
76
- } from "./index-t7tbt980.mjs";
76
+ } from "./index-24wge6y5.mjs";
77
77
  import {
78
78
  ActionTooltip,
79
79
  COMPACT_CONTROL_ROW_HEIGHT,
@@ -106,7 +106,7 @@ import {
106
106
  menuContainerTowardsBottom,
107
107
  menuContainerTowardsTop,
108
108
  outerPortal
109
- } from "./index-890dd9b3.mjs";
109
+ } from "./index-m01zjph7.mjs";
110
110
  import {
111
111
  HigherZIndex,
112
112
  areKeyboardShortcutsDisabled,
@@ -181,7 +181,7 @@ import {
181
181
  WHITE_ALPHA_80,
182
182
  WHITE_HEX,
183
183
  getBackgroundFromHoverState
184
- } from "./index-wqc43mw0.mjs";
184
+ } from "./index-3qb54r5j.mjs";
185
185
  import {
186
186
  __require,
187
187
  __toESM
@@ -690,7 +690,7 @@ var button = {
690
690
  var ButtonRefForwardFunction = ({
691
691
  children,
692
692
  onClick,
693
- title,
693
+ "aria-label": ariaLabel,
694
694
  disabled,
695
695
  size = "default",
696
696
  style: style2,
@@ -735,7 +735,7 @@ var ButtonRefForwardFunction = ({
735
735
  onClick,
736
736
  onPointerDown,
737
737
  autoFocus,
738
- title,
738
+ "aria-label": ariaLabel,
739
739
  children: /* @__PURE__ */ jsx6("div", {
740
740
  className: "css-reset",
741
741
  style: buttonContainer,
@@ -1258,6 +1258,7 @@ var MenuSubItem = ({
1258
1258
  }, [selected]);
1259
1259
  return /* @__PURE__ */ jsx15("div", {
1260
1260
  ref,
1261
+ "aria-label": typeof label === "string" ? label : undefined,
1261
1262
  onPointerEnter,
1262
1263
  onPointerLeave,
1263
1264
  style: style2,
@@ -1280,7 +1281,6 @@ var MenuSubItem = ({
1280
1281
  }) : null,
1281
1282
  /* @__PURE__ */ jsx15("div", {
1282
1283
  style: labelStyle,
1283
- ...{ title: typeof label === "string" ? label : undefined },
1284
1284
  children: label
1285
1285
  }),
1286
1286
  " ",
@@ -1717,7 +1717,7 @@ var Combobox = ({
1717
1717
  values,
1718
1718
  selectedId,
1719
1719
  style: customStyle,
1720
- title,
1720
+ "aria-label": ariaLabel,
1721
1721
  size: controlSize = "default",
1722
1722
  unhoveredIconColor = LIGHT_TEXT
1723
1723
  }) => {
@@ -1846,14 +1846,15 @@ var Combobox = ({
1846
1846
  children: [
1847
1847
  /* @__PURE__ */ jsxs3("button", {
1848
1848
  ref,
1849
- title,
1849
+ "aria-label": ariaLabel,
1850
1850
  tabIndex,
1851
1851
  type: "button",
1852
1852
  style: style2,
1853
1853
  className: MENU_INITIATOR_CLASSNAME,
1854
1854
  children: [
1855
1855
  selected ? /* @__PURE__ */ jsx17("div", {
1856
- title: typeof selected.label === "string" ? selected.label : undefined,
1856
+ role: "group",
1857
+ "aria-label": typeof selected.label === "string" ? selected.label : undefined,
1857
1858
  style: selectedLabelStyle,
1858
1859
  children: selected?.label
1859
1860
  }) : null,
@@ -1978,7 +1979,7 @@ var container5 = {
1978
1979
  fontSize: 14,
1979
1980
  verticalAlign: "text-bottom"
1980
1981
  };
1981
- var InfoBubble = ({ title, children, horizontalAlignment = "left" }) => {
1982
+ var InfoBubble = ({ "aria-label": ariaLabel, children, horizontalAlignment = "left" }) => {
1982
1983
  const [hovered, setIsHovered] = useState8(false);
1983
1984
  const [opened, setOpened] = useState8(false);
1984
1985
  const ref = useRef7(null);
@@ -2069,7 +2070,7 @@ var InfoBubble = ({ title, children, horizontalAlignment = "left" }) => {
2069
2070
  ref,
2070
2071
  tabIndex,
2071
2072
  style: style2,
2072
- title,
2073
+ "aria-label": ariaLabel,
2073
2074
  type: "button",
2074
2075
  children: /* @__PURE__ */ jsx19("svg", {
2075
2076
  style: icon2,
@@ -2968,13 +2969,14 @@ var AssetAudioVolume = ({ src, waveformSampleRate }) => {
2968
2969
  });
2969
2970
  }, [src, waveformSampleRate]);
2970
2971
  return /* @__PURE__ */ jsx23("span", {
2972
+ role: "group",
2971
2973
  style: {
2972
2974
  fontFamily: "sans-serif",
2973
2975
  fontSize: 13,
2974
2976
  lineHeight: "20px",
2975
2977
  color: LIGHT_TEXT
2976
2978
  },
2977
- title: "RMS level across all channels over the full audio track, including silence.",
2979
+ "aria-label": "RMS level across all channels over the full audio track, including silence.",
2978
2980
  children: value
2979
2981
  });
2980
2982
  };
@@ -3078,7 +3080,7 @@ var InlineEditableTitle = ({
3078
3080
  onClick,
3079
3081
  onCommit,
3080
3082
  size = "default",
3081
- title
3083
+ "aria-label": ariaLabel
3082
3084
  }) => {
3083
3085
  const [isEditing, setIsEditing] = useState12(false);
3084
3086
  const [isHovered, setIsHovered] = useState12(false);
@@ -3159,7 +3161,8 @@ var InlineEditableTitle = ({
3159
3161
  const inputStyle = isInspectorSize ? inspectorTitleInput : titleInput;
3160
3162
  return /* @__PURE__ */ jsx24("div", {
3161
3163
  style: isInspectorSize ? inspectorTitleWrapper : titleWrapper,
3162
- title: title ?? value,
3164
+ "aria-label": ariaLabel ?? value,
3165
+ role: "group",
3163
3166
  children: /* @__PURE__ */ jsxs7("span", {
3164
3167
  style: innerStyle,
3165
3168
  onMouseEnter: () => setIsHovered(true),
@@ -3176,6 +3179,7 @@ var InlineEditableTitle = ({
3176
3179
  }),
3177
3180
  isEditing ? /* @__PURE__ */ jsx24("input", {
3178
3181
  ref: focusInput,
3182
+ "aria-label": ariaLabel ?? value,
3179
3183
  style: { ...gridItemStyle, ...inputStyle },
3180
3184
  value: draftValue,
3181
3185
  onChange,
@@ -3531,7 +3535,7 @@ var BackArrow = ({ color }) => {
3531
3535
  })
3532
3536
  });
3533
3537
  };
3534
- var InspectorBackAction = ({ children, disabled, onClick, title }) => {
3538
+ var InspectorBackAction = ({ children, disabled, onClick, "aria-label": ariaLabel }) => {
3535
3539
  return /* @__PURE__ */ jsx27("div", {
3536
3540
  style: inspectorQuickActionsSection,
3537
3541
  children: /* @__PURE__ */ jsx27(InspectorQuickAction, {
@@ -3540,7 +3544,7 @@ var InspectorBackAction = ({ children, disabled, onClick, title }) => {
3540
3544
  renderIcon: (color) => /* @__PURE__ */ jsx27(BackArrow, {
3541
3545
  color
3542
3546
  }),
3543
- title,
3547
+ "aria-label": ariaLabel,
3544
3548
  children
3545
3549
  })
3546
3550
  });
@@ -3605,13 +3609,29 @@ var inlineLabelText = {
3605
3609
  WebkitUserSelect: "none",
3606
3610
  whiteSpace: "nowrap"
3607
3611
  };
3608
- var inlineLabelIcon = {
3612
+ var INSPECTOR_ACTION_ICON_SIZE = 18;
3613
+ var inspectorActionIconStyle = {
3614
+ display: "block",
3615
+ height: INSPECTOR_ACTION_ICON_SIZE,
3616
+ width: INSPECTOR_ACTION_ICON_SIZE
3617
+ };
3618
+ var inspectorActionIconContainerStyle = {
3609
3619
  alignItems: "center",
3610
3620
  display: "flex",
3611
3621
  flexShrink: 0,
3612
- height: 18,
3622
+ height: INSPECTOR_ACTION_ICON_SIZE,
3613
3623
  justifyContent: "center",
3614
- width: 18
3624
+ width: INSPECTOR_ACTION_ICON_SIZE
3625
+ };
3626
+ var largeInspectorActionIconStyle = {
3627
+ height: 22,
3628
+ width: 22
3629
+ };
3630
+ var largeInspectorActionIconContainerStyle = {
3631
+ height: 22,
3632
+ marginLeft: -2,
3633
+ marginRight: -2,
3634
+ width: 22
3615
3635
  };
3616
3636
  var InspectorQuickAction = ({
3617
3637
  children,
@@ -3621,7 +3641,7 @@ var InspectorQuickAction = ({
3621
3641
  renderIcon,
3622
3642
  size = "default",
3623
3643
  style: style2,
3624
- title
3644
+ "aria-label": ariaLabel
3625
3645
  }) => {
3626
3646
  const showsHover = !disabled && onClick !== null;
3627
3647
  const buttonStyle = React16.useMemo(() => ({
@@ -3638,7 +3658,7 @@ var InspectorQuickAction = ({
3638
3658
  const mainContent = /* @__PURE__ */ jsxs9(Fragment4, {
3639
3659
  children: [
3640
3660
  renderIcon ? /* @__PURE__ */ jsx27("span", {
3641
- style: { ...inlineLabelIcon, ...iconContainerStyle },
3661
+ style: { ...inspectorActionIconContainerStyle, ...iconContainerStyle },
3642
3662
  children: renderIcon(CURRENT_COLOR)
3643
3663
  }) : null,
3644
3664
  /* @__PURE__ */ jsx27("span", {
@@ -3652,13 +3672,14 @@ var InspectorQuickAction = ({
3652
3672
  type: "button",
3653
3673
  disabled,
3654
3674
  style: buttonStyle,
3655
- title,
3675
+ "aria-label": ariaLabel,
3656
3676
  onClick,
3657
3677
  children: mainContent
3658
3678
  }) : /* @__PURE__ */ jsx27("div", {
3659
3679
  className: HOVERABLE_CLASS_NAME,
3660
3680
  style: buttonStyle,
3661
- title,
3681
+ "aria-label": ariaLabel,
3682
+ role: "group",
3662
3683
  children: mainContent
3663
3684
  });
3664
3685
  return mainAction;
@@ -4350,7 +4371,7 @@ var AssetInfo = ({ assetName, contentSized = false, onAssetClick, readOnlyStudio
4350
4371
  onClick: onAssetClick,
4351
4372
  onCommit: onRename,
4352
4373
  size: contentSized ? "default" : "inspector",
4353
- title: assetName
4374
+ "aria-label": assetName
4354
4375
  })
4355
4376
  }),
4356
4377
  fileDetails.length > 0 ? /* @__PURE__ */ jsx34(CollapsibleInspectorSection, {
@@ -4751,8 +4772,7 @@ var compactHelpIconPath = {
4751
4772
  };
4752
4773
  var CompactHelpLink = ({
4753
4774
  href,
4754
- ariaLabel,
4755
- title
4775
+ ariaLabel
4756
4776
  }) => {
4757
4777
  const [hovered, setHovered] = useState15(false);
4758
4778
  return /* @__PURE__ */ jsx41("a", {
@@ -4761,7 +4781,6 @@ var CompactHelpLink = ({
4761
4781
  rel: "noopener noreferrer",
4762
4782
  style: hovered ? compactHelpLinkHovered : compactHelpLink,
4763
4783
  "aria-label": ariaLabel,
4764
- title,
4765
4784
  onMouseEnter: () => setHovered(true),
4766
4785
  onMouseLeave: () => setHovered(false),
4767
4786
  children: /* @__PURE__ */ jsx41("svg", {
@@ -4789,8 +4808,7 @@ var CompactExplanation = ({
4789
4808
  children,
4790
4809
  learnMoreHref ? /* @__PURE__ */ jsx41(CompactHelpLink, {
4791
4810
  href: learnMoreHref,
4792
- ariaLabel: learnMoreAriaLabel ?? learnMoreTitle,
4793
- title: learnMoreTitle
4811
+ ariaLabel: learnMoreAriaLabel ?? learnMoreTitle
4794
4812
  }) : null
4795
4813
  ]
4796
4814
  });
@@ -6079,7 +6097,7 @@ var SchemaLabel = ({ jsonPath, onRemove, valid, suffix, handleClick, description
6079
6097
  children: labelContent
6080
6098
  }) : labelContent,
6081
6099
  displayedDescription ? /* @__PURE__ */ jsx49(InfoBubble, {
6082
- title: "Field description",
6100
+ "aria-label": "Field description",
6083
6101
  horizontalAlignment: "right",
6084
6102
  children: /* @__PURE__ */ jsx49("div", {
6085
6103
  style: descriptionStyle,
@@ -6349,7 +6367,7 @@ var ZodFieldValidation = ({ zodValidation, path }) => {
6349
6367
  x: 0.5
6350
6368
  }),
6351
6369
  /* @__PURE__ */ jsx54(InfoBubble, {
6352
- title: "Zod validation failure",
6370
+ "aria-label": "Zod validation failure",
6353
6371
  children: /* @__PURE__ */ jsxs22("div", {
6354
6372
  style: stackTrace,
6355
6373
  children: [
@@ -7199,7 +7217,6 @@ var ColorPickerPopup = ({ value, onChange, onChangeComplete }) => {
7199
7217
  style: eyedropperButtonStyle,
7200
7218
  onClick: onPickWithEyeDropper,
7201
7219
  tabIndex,
7202
- title: "Pick color from screen",
7203
7220
  "aria-label": "Pick color from screen",
7204
7221
  children: /* @__PURE__ */ jsx61(EyedropperIcon, {
7205
7222
  style: { width: 14, height: 14 },
@@ -7207,8 +7224,9 @@ var ColorPickerPopup = ({ value, onChange, onChangeComplete }) => {
7207
7224
  })
7208
7225
  }) : null,
7209
7226
  /* @__PURE__ */ jsx61("div", {
7227
+ role: "group",
7210
7228
  style: previewSwatchStyle,
7211
- title: formatted,
7229
+ "aria-label": formatted,
7212
7230
  children: /* @__PURE__ */ jsx61("div", {
7213
7231
  style: previewFill
7214
7232
  })
@@ -7325,7 +7343,7 @@ var ColorPicker = ({
7325
7343
  width = 45,
7326
7344
  height = 25,
7327
7345
  borderRadius = 3,
7328
- title,
7346
+ "aria-label": ariaLabel,
7329
7347
  name,
7330
7348
  className,
7331
7349
  style: customStyle
@@ -7468,7 +7486,7 @@ var ColorPicker = ({
7468
7486
  className: [MENU_INITIATOR_CLASSNAME, SWATCH_CLASSNAME, className].filter(Boolean).join(" "),
7469
7487
  disabled,
7470
7488
  name,
7471
- title: title ?? value,
7489
+ "aria-label": ariaLabel ?? value,
7472
7490
  tabIndex,
7473
7491
  style: swatchStyle,
7474
7492
  onPointerDown: onTriggerPointerDown,
@@ -7484,7 +7502,6 @@ var ColorPicker = ({
7484
7502
  onPointerDown: onEyeDropperPointerDown,
7485
7503
  onClick: onPickWithEyeDropper,
7486
7504
  tabIndex,
7487
- title: "Pick color from screen",
7488
7505
  "aria-label": "Pick color from screen",
7489
7506
  children: /* @__PURE__ */ jsx62(EyedropperIcon, {
7490
7507
  style: eyedropperIconStyle,
@@ -7764,7 +7781,7 @@ var ZodEnumEditor = ({ schema, jsonPath, setValue, value, onRemove, mayPad }) =>
7764
7781
  children: /* @__PURE__ */ jsx67(Combobox, {
7765
7782
  values: comboBoxValues,
7766
7783
  selectedId: value,
7767
- title: value,
7784
+ "aria-label": value,
7768
7785
  size: "small"
7769
7786
  })
7770
7787
  }),
@@ -8631,7 +8648,6 @@ var InputDraggerForwardRefFn = ({
8631
8648
  ref: ref2,
8632
8649
  type: "button",
8633
8650
  "aria-label": props["aria-label"],
8634
- title: props.title,
8635
8651
  className: "__remotion_input_dragger",
8636
8652
  style: buttonStyle2 ? {
8637
8653
  ...small ? compactInputDraggerContainerStyle : inputDraggerContainerStyle,
@@ -8828,7 +8844,7 @@ var ZodStaticFileEditor = ({ schema, jsonPath, setValue, value, onRemove, mayPad
8828
8844
  children: /* @__PURE__ */ jsx76(Combobox, {
8829
8845
  values: comboBoxValues,
8830
8846
  selectedId: value,
8831
- title: value,
8847
+ "aria-label": value,
8832
8848
  size: "small"
8833
8849
  })
8834
8850
  }),
@@ -9490,7 +9506,7 @@ var ZodDiscriminatedUnionEditor = ({ schema, setValue, value, mayPad, jsonPath,
9490
9506
  valid: zodValidation.success
9491
9507
  }),
9492
9508
  /* @__PURE__ */ jsx84(Combobox, {
9493
- title: "Select type",
9509
+ "aria-label": "Select type",
9494
9510
  values: comboBoxValues,
9495
9511
  selectedId: value[discriminator],
9496
9512
  size: "small"
@@ -12156,7 +12172,6 @@ var SegmentedButtonAction = ({ index, segment, segmentCount }) => {
12156
12172
  onPointerDown,
12157
12173
  style: style4,
12158
12174
  tabIndex,
12159
- title: segment.title ?? undefined,
12160
12175
  type: "button",
12161
12176
  children: segment.renderContent(CURRENT_COLOR)
12162
12177
  });
@@ -12269,7 +12284,6 @@ var SegmentedButtonMenu = ({ index, segment, segmentCount }) => {
12269
12284
  onPointerDown,
12270
12285
  style: style4,
12271
12286
  tabIndex,
12272
- title: segment.title ?? undefined,
12273
12287
  type: "button",
12274
12288
  children: segment.renderContent(CURRENT_COLOR)
12275
12289
  });
@@ -12311,10 +12325,9 @@ var SegmentedButtonMenu = ({ index, segment, segmentCount }) => {
12311
12325
  ]
12312
12326
  });
12313
12327
  };
12314
- var SegmentedButton = ({ segments, style: style4, title }) => {
12328
+ var SegmentedButton = ({ segments, style: style4 }) => {
12315
12329
  return /* @__PURE__ */ jsx104("div", {
12316
12330
  style: { ...containerStyle3, ...style4 },
12317
- title: title ?? undefined,
12318
12331
  children: segments.map((segment, index) => {
12319
12332
  if (segment.type === "action") {
12320
12333
  return /* @__PURE__ */ jsx104(SegmentedButtonAction, {
@@ -12520,7 +12533,6 @@ var InspectorOpenInEditor = ({
12520
12533
  }),
12521
12534
  segmentId: "default-editor",
12522
12535
  style: mainSegmentStyle,
12523
- title: showTooltips ? "" : `Open in ${defaultAppName}`,
12524
12536
  tooltipLabel: showTooltips ? `Open in ${defaultAppName}` : null,
12525
12537
  type: "action"
12526
12538
  }
@@ -12539,7 +12551,6 @@ var InspectorOpenInEditor = ({
12539
12551
  segmentId: "another-app",
12540
12552
  selectedId: null,
12541
12553
  style: dropdownSegmentStyle,
12542
- title: showTooltips ? "" : "Open in another app",
12543
12554
  tooltipLabel: showTooltips ? "Open in another app" : null,
12544
12555
  type: "menu",
12545
12556
  values: menuItems
@@ -12564,8 +12575,7 @@ var InspectorOpenInEditor = ({
12564
12575
  }
12565
12576
  return /* @__PURE__ */ jsx105(SegmentedButton, {
12566
12577
  segments,
12567
- style: null,
12568
- title: null
12578
+ style: null
12569
12579
  });
12570
12580
  };
12571
12581
 
@@ -12656,7 +12666,7 @@ var InspectorLocationCopy = ({ children, location, name, openInEditorLocation })
12656
12666
  variant: null,
12657
12667
  onClick: onCopy,
12658
12668
  renderAction: renderCopyAction,
12659
- title: "Copy context for agents"
12669
+ "aria-label": "Copy context for agents"
12660
12670
  }) : null
12661
12671
  ]
12662
12672
  }) : null
@@ -12755,14 +12765,14 @@ var InspectorSourceLocation = ({ location, canOpen, onOpen, renderIcon, size = "
12755
12765
  onClick,
12756
12766
  renderIcon: (iconColor) => renderIcon?.(iconColor),
12757
12767
  style: quickActionStyle,
12758
- title: fileLocation ?? undefined,
12768
+ "aria-label": fileLocation ?? undefined,
12759
12769
  children: label3
12760
12770
  });
12761
12771
  }
12762
12772
  return /* @__PURE__ */ jsxs52("button", {
12763
12773
  type: "button",
12764
12774
  style: style4,
12765
- title: fileLocation ?? undefined,
12775
+ "aria-label": fileLocation ?? undefined,
12766
12776
  onClick,
12767
12777
  onPointerEnter: () => setHovered(true),
12768
12778
  onPointerLeave: () => setHovered(false),
@@ -13221,7 +13231,7 @@ var dimensionPresets = [
13221
13231
  { height: 1080, label: "Square", width: 1080 }
13222
13232
  ];
13223
13233
  var frameRatePresets = [23.976, 24, 25, 29.97, 30, 50, 60];
13224
- var PresetDropdown = ({ disabled, title, values, visible }) => {
13234
+ var PresetDropdown = ({ disabled, "aria-label": ariaLabel, values, visible }) => {
13225
13235
  const renderAction = useCallback58((color) => {
13226
13236
  return /* @__PURE__ */ jsx110("span", {
13227
13237
  style: presetButtonIcon,
@@ -13238,7 +13248,7 @@ var PresetDropdown = ({ disabled, title, values, visible }) => {
13238
13248
  children: /* @__PURE__ */ jsx110(InlineDropdown, {
13239
13249
  disabled,
13240
13250
  renderAction,
13241
- title,
13251
+ "aria-label": ariaLabel,
13242
13252
  values,
13243
13253
  variant: "compact"
13244
13254
  })
@@ -13446,7 +13456,7 @@ var CompositionMetadata = ({ compositionId, disabled, stack }) => {
13446
13456
  }),
13447
13457
  disabled || widthIsComputed || heightIsComputed ? null : /* @__PURE__ */ jsx110(PresetDropdown, {
13448
13458
  disabled: pendingValues.width !== undefined || pendingValues.height !== undefined,
13449
- title: "Choose dimension preset",
13459
+ "aria-label": "Choose dimension preset",
13450
13460
  values: dimensionPresetValues,
13451
13461
  visible: hovered
13452
13462
  })
@@ -13486,7 +13496,7 @@ var CompositionMetadata = ({ compositionId, disabled, stack }) => {
13486
13496
  }),
13487
13497
  disabled || fpsIsComputed ? null : /* @__PURE__ */ jsx110(PresetDropdown, {
13488
13498
  disabled: pendingValues.fps !== undefined,
13489
- title: "Choose frame rate preset",
13499
+ "aria-label": "Choose frame rate preset",
13490
13500
  values: frameRatePresetValues,
13491
13501
  visible: hovered
13492
13502
  })
@@ -13541,16 +13551,6 @@ var BrowseElementsIcon = ({ color, ...props }) => {
13541
13551
  // src/components/InspectorPanel/ElementLibraryButton.tsx
13542
13552
  import { jsx as jsx112, jsxs as jsxs56, Fragment as Fragment15 } from "react/jsx-runtime";
13543
13553
  var noElementLibraries = [];
13544
- var browseElementsIconStyle = {
13545
- height: 22,
13546
- width: 22
13547
- };
13548
- var browseElementsIconContainerStyle = {
13549
- height: 22,
13550
- marginLeft: -2,
13551
- marginRight: -2,
13552
- width: 22
13553
- };
13554
13554
  var elementLibraryDropdownStyle = {
13555
13555
  borderRadius: 4,
13556
13556
  height: 28,
@@ -13607,10 +13607,10 @@ var ElementLibraryButton = () => {
13607
13607
  renderContent: (color) => /* @__PURE__ */ jsxs56(Fragment15, {
13608
13608
  children: [
13609
13609
  /* @__PURE__ */ jsx112("span", {
13610
- style: browseElementsIconContainerStyle,
13610
+ style: largeInspectorActionIconContainerStyle,
13611
13611
  children: /* @__PURE__ */ jsx112(BrowseElementsIcon, {
13612
13612
  color,
13613
- style: browseElementsIconStyle
13613
+ style: largeInspectorActionIconStyle
13614
13614
  })
13615
13615
  }),
13616
13616
  /* @__PURE__ */ jsx112("span", {
@@ -13628,7 +13628,6 @@ var ElementLibraryButton = () => {
13628
13628
  segmentId: "element-library",
13629
13629
  selectedId: null,
13630
13630
  style: elementLibraryDropdownSegmentStyle,
13631
- title: "Choose an Element Library to browse inside Studio.",
13632
13631
  tooltipLabel: null,
13633
13632
  type: "menu",
13634
13633
  values: [
@@ -13667,19 +13666,18 @@ var ElementLibraryButton = () => {
13667
13666
  if (elementLibraries.length > 0) {
13668
13667
  return /* @__PURE__ */ jsx112(SegmentedButton, {
13669
13668
  segments: elementLibraryDropdownSegments,
13670
- style: elementLibraryDropdownStyle,
13671
- title: null
13669
+ style: elementLibraryDropdownStyle
13672
13670
  });
13673
13671
  }
13674
13672
  return /* @__PURE__ */ jsx112(InspectorQuickAction, {
13675
13673
  disabled: false,
13676
- iconContainerStyle: browseElementsIconContainerStyle,
13674
+ iconContainerStyle: largeInspectorActionIconContainerStyle,
13677
13675
  onClick: openElementsLibrary,
13678
13676
  renderIcon: (color) => /* @__PURE__ */ jsx112(BrowseElementsIcon, {
13679
13677
  color,
13680
- style: browseElementsIconStyle
13678
+ style: largeInspectorActionIconStyle
13681
13679
  }),
13682
- title: "Browse the Remotion Elements library inside Studio.",
13680
+ "aria-label": "Browse the Remotion Elements library inside Studio.",
13683
13681
  children: "Browse Elements"
13684
13682
  });
13685
13683
  };
@@ -14864,10 +14862,6 @@ var useCompositionActions = () => {
14864
14862
 
14865
14863
  // src/components/InspectorPanel/CompositionInspector.tsx
14866
14864
  import { jsx as jsx113, jsxs as jsxs57, Fragment as Fragment16 } from "react/jsx-runtime";
14867
- var actionIconStyle = {
14868
- height: 18,
14869
- width: 18
14870
- };
14871
14865
  var downloadLicenseAgreement = {
14872
14866
  color: LIGHT_TEXT,
14873
14867
  fontFamily: "sans-serif",
@@ -14952,7 +14946,7 @@ var CompositionActions = () => {
14952
14946
  onClick: insertSolid,
14953
14947
  renderIcon: (color) => /* @__PURE__ */ jsx113(SolidIcon, {
14954
14948
  color,
14955
- style: actionIconStyle
14949
+ style: inspectorActionIconStyle
14956
14950
  }),
14957
14951
  children: "Add Solid"
14958
14952
  }) : null,
@@ -14961,7 +14955,7 @@ var CompositionActions = () => {
14961
14955
  onClick: insertAsset,
14962
14956
  renderIcon: (color) => /* @__PURE__ */ jsx113(PicIcon, {
14963
14957
  color,
14964
- style: actionIconStyle
14958
+ style: inspectorActionIconStyle
14965
14959
  }),
14966
14960
  children: "Add asset..."
14967
14961
  }) : null,
@@ -14970,16 +14964,17 @@ var CompositionActions = () => {
14970
14964
  onClick: insertComposition2,
14971
14965
  renderIcon: (color) => /* @__PURE__ */ jsx113(FilmIcon, {
14972
14966
  color,
14973
- style: actionIconStyle
14967
+ style: inspectorActionIconStyle
14974
14968
  }),
14975
14969
  children: "Add composition..."
14976
14970
  }) : null,
14977
14971
  canShowGenerateWithAgent ? /* @__PURE__ */ jsx113(InspectorQuickAction, {
14978
14972
  disabled: false,
14973
+ iconContainerStyle: largeInspectorActionIconContainerStyle,
14979
14974
  onClick: generateWithAgent,
14980
14975
  renderIcon: (color) => /* @__PURE__ */ jsx113(SparklesIcon, {
14981
14976
  color,
14982
- style: actionIconStyle
14977
+ style: largeInspectorActionIconStyle
14983
14978
  }),
14984
14979
  children: "Generate with agent..."
14985
14980
  }) : null,
@@ -14989,7 +14984,7 @@ var CompositionActions = () => {
14989
14984
  onClick: onDownloadProject,
14990
14985
  renderIcon: (color) => /* @__PURE__ */ jsx113(CloudDownloadIcon, {
14991
14986
  color,
14992
- style: actionIconStyle
14987
+ style: inspectorActionIconStyle
14993
14988
  }),
14994
14989
  children: "Download project"
14995
14990
  }) : null
@@ -21276,16 +21271,19 @@ import {
21276
21271
  } from "react";
21277
21272
  import { Internals as Internals32 } from "remotion";
21278
21273
 
21279
- // src/icons/scissors.tsx
21274
+ // src/icons/split.tsx
21280
21275
  import { jsx as jsx122 } from "react/jsx-runtime";
21281
- var ScissorsIcon = ({ color, ...props }) => {
21276
+ var SplitIcon = ({ color, ...props }) => {
21282
21277
  return /* @__PURE__ */ jsx122("svg", {
21283
- xmlns: "http://www.w3.org/2000/svg",
21284
- viewBox: "0 0 512 512",
21278
+ viewBox: "0 0 640 640",
21285
21279
  ...props,
21286
21280
  children: /* @__PURE__ */ jsx122("path", {
21287
- fill: color,
21288
- d: "M48 112a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zm176 0C224 50.1 173.9 0 112 0S0 50.1 0 112 50.1 224 112 224c24 0 46.3-7.6 64.5-20.4l57.3 52.4-57.3 52.4C158.3 295.6 136 288 112 288 50.1 288 0 338.1 0 400s50.1 112 112 112 112-50.1 112-112c0-20.5-5.5-39.6-15.1-56.2L504.2 73.7c9.8-8.9 10.5-24.1 1.5-33.9s-24.1-10.5-33.9-1.5l-202.4 185.2-60.5-55.3c9.6-16.5 15.1-35.7 15.1-56.2zM471.8 473.7c9.8 8.9 25 8.3 33.9-1.5s8.3-25-1.5-33.9L338.6 286.8 302.7 319 471.8 473.7zM48 400a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z"
21281
+ d: "M152 112h72c26.5 0 48 21.5 48 48v320c0 26.5-21.5 48-48 48h-72M488 112h-72c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h72",
21282
+ fill: "none",
21283
+ stroke: color,
21284
+ strokeWidth: 32,
21285
+ strokeLinecap: "round",
21286
+ strokeLinejoin: "round"
21289
21287
  })
21290
21288
  });
21291
21289
  };
@@ -21470,8 +21468,9 @@ var TimelineFieldLabel = ({ rowDepth, selected, label: label3, stacked = false }
21470
21468
  return /* @__PURE__ */ jsx124("div", {
21471
21469
  style: labelRowStyle,
21472
21470
  children: /* @__PURE__ */ jsx124("span", {
21471
+ role: "group",
21473
21472
  style: fieldNameStyle,
21474
- title: label3,
21473
+ "aria-label": label3,
21475
21474
  children: label3
21476
21475
  })
21477
21476
  });
@@ -23452,7 +23451,7 @@ var TimelineAssetField = ({
23452
23451
  variant: null,
23453
23452
  onClick: openAssetSelection,
23454
23453
  disabled: window.remotion_isReadOnlyStudio,
23455
- title: "Change source",
23454
+ "aria-label": "Change source",
23456
23455
  renderAction: (color) => /* @__PURE__ */ jsx131(PenIcon, {
23457
23456
  color,
23458
23457
  style: penIcon
@@ -23480,7 +23479,7 @@ var TimelineAssetField = ({
23480
23479
  }
23481
23480
  }
23482
23481
  const opensSource = linkInfo.kind === "local" && inlineSourceAction !== null && inlineSourceAction.onClick !== null;
23483
- const title = inlineSourceAction?.title ?? linkInfo.title;
23482
+ const sourceDescription = inlineSourceAction?.["aria-label"] ?? linkInfo.title;
23484
23483
  const onPreviewClick = opensSource ? inlineSourceAction.onClick : openAssetSelection;
23485
23484
  const previewLabel = `${opensSource ? "Open" : "Replace"} ${name}`;
23486
23485
  const previewDisabled = opensSource ? inlineSourceAction.disabled : window.remotion_isReadOnlyStudio;
@@ -23495,11 +23494,11 @@ var TimelineAssetField = ({
23495
23494
  };
23496
23495
  const previewAction = /* @__PURE__ */ jsxs63("button", {
23497
23496
  "aria-label": previewLabel,
23497
+ "aria-description": sourceDescription,
23498
23498
  className: `${HOVERABLE_CLASS_NAME} ${FOCUS_VISIBLE_ONLY_CLASS_NAME}`,
23499
23499
  disabled: previewDisabled,
23500
23500
  onClick: onPreviewClick,
23501
23501
  style: previewButtonStyle,
23502
- title,
23503
23502
  type: "button",
23504
23503
  children: [
23505
23504
  /* @__PURE__ */ jsx131("span", {
@@ -23632,7 +23631,7 @@ var TimelineColorField = ({
23632
23631
  /* @__PURE__ */ jsx133("button", {
23633
23632
  type: "button",
23634
23633
  style: setButtonStyle,
23635
- title: `Set ${field.description ?? field.key} to gray`,
23634
+ "aria-label": `Set ${field.description ?? field.key} to gray`,
23636
23635
  onClick: () => onChangeComplete(DEFAULT_SET_COLOR),
23637
23636
  children: "Set"
23638
23637
  })
@@ -23650,7 +23649,7 @@ var TimelineColorField = ({
23650
23649
  height: SWATCH_HEIGHT,
23651
23650
  disabled: false,
23652
23651
  name: field.key,
23653
- title: currentValue
23652
+ "aria-label": currentValue
23654
23653
  })
23655
23654
  });
23656
23655
  };
@@ -23697,7 +23696,7 @@ var TimelineEnumField = ({
23697
23696
  }, [variantKeys, onSelect]);
23698
23697
  return /* @__PURE__ */ jsx134(Combobox, {
23699
23698
  size: "small",
23700
- title: field.key,
23699
+ "aria-label": field.key,
23701
23700
  selectedId: current,
23702
23701
  values: items
23703
23702
  });
@@ -25714,7 +25713,7 @@ var TimelineFontFamilyField = ({
25714
25713
  children: [
25715
25714
  /* @__PURE__ */ jsxs65("button", {
25716
25715
  ref: buttonRef,
25717
- title: field.key,
25716
+ "aria-label": field.key,
25718
25717
  tabIndex,
25719
25718
  type: "button",
25720
25719
  style: style4,
@@ -25733,7 +25732,8 @@ var TimelineFontFamilyField = ({
25733
25732
  onMouseLeave: () => setHovered(false),
25734
25733
  children: [
25735
25734
  /* @__PURE__ */ jsx135("div", {
25736
- title: selected.label,
25735
+ role: "group",
25736
+ "aria-label": selected.label,
25737
25737
  style: { ...triggerLabel, ...selectedPreviewStyle },
25738
25738
  children: selected.label
25739
25739
  }),
@@ -25968,7 +25968,7 @@ var TimelineFontWeightField = ({
25968
25968
  if (FONT_WEIGHT_KEYWORDS.includes(sourceValue)) {
25969
25969
  return /* @__PURE__ */ jsx137(Combobox, {
25970
25970
  size: "small",
25971
- title: field.key,
25971
+ "aria-label": field.key,
25972
25972
  selectedId: String(currentValue),
25973
25973
  values: keywordItems
25974
25974
  });
@@ -26296,7 +26296,6 @@ var LinkToggle = ({ linked, onToggle }) => {
26296
26296
  type: "button",
26297
26297
  style: toggleStyle,
26298
26298
  onPointerDown,
26299
- title: linked ? "Unlink scale axes" : "Link scale axes",
26300
26299
  "aria-label": linked ? "Unlink scale axes" : "Link scale axes",
26301
26300
  children: linked ? /* @__PURE__ */ jsx140("svg", {
26302
26301
  xmlns: "http://www.w3.org/2000/svg",
@@ -26649,6 +26648,9 @@ var TimelineScaleField = ({
26649
26648
  };
26650
26649
 
26651
26650
  // ../paths/dist/esm/index.mjs
26651
+ import {
26652
+ interpolate as interpolate3
26653
+ } from "remotion/no-react";
26652
26654
  var length = {
26653
26655
  a: 7,
26654
26656
  A: 7,
@@ -26922,7 +26924,352 @@ var parsePath = (path) => {
26922
26924
  throw new Error(`Invalid path element ${segmentString}`);
26923
26925
  }, []).flat(1);
26924
26926
  };
26927
+ var convertQToCInstruction = (instruction, startPoint) => {
26928
+ const cp1x = startPoint.x + 2 / 3 * (instruction.cpx - startPoint.x);
26929
+ const cp1y = startPoint.y + 2 / 3 * (instruction.cpy - startPoint.y);
26930
+ const cp2x = instruction.x + 2 / 3 * (instruction.cpx - instruction.x);
26931
+ const cp2y = instruction.y + 2 / 3 * (instruction.cpy - instruction.y);
26932
+ return {
26933
+ type: "C",
26934
+ cp1x,
26935
+ cp1y,
26936
+ cp2x,
26937
+ cp2y,
26938
+ x: instruction.x,
26939
+ y: instruction.y
26940
+ };
26941
+ };
26942
+ var iterateOverSegments = ({
26943
+ segments,
26944
+ iterate
26945
+ }) => {
26946
+ let x = 0;
26947
+ let y = 0;
26948
+ let initialX = 0;
26949
+ let initialY = 0;
26950
+ let cpX = null;
26951
+ let cpY = null;
26952
+ const newSegments = segments.map((s, i) => {
26953
+ const newSeg = iterate({
26954
+ segment: s,
26955
+ x,
26956
+ y,
26957
+ prevSegment: segments[i - 1] ?? null,
26958
+ initialX,
26959
+ initialY,
26960
+ cpX,
26961
+ cpY
26962
+ });
26963
+ switch (s.type) {
26964
+ case "M":
26965
+ initialX = s.x;
26966
+ initialY = s.y;
26967
+ x = s.x;
26968
+ y = s.y;
26969
+ cpX = null;
26970
+ cpY = null;
26971
+ break;
26972
+ case "Q":
26973
+ x = s.x;
26974
+ y = s.y;
26975
+ cpX = s.cpx;
26976
+ cpY = s.cpy;
26977
+ break;
26978
+ case "A":
26979
+ x = s.x;
26980
+ y = s.y;
26981
+ cpX = null;
26982
+ cpY = null;
26983
+ break;
26984
+ case "C":
26985
+ x = s.x;
26986
+ y = s.y;
26987
+ cpX = s.cp2x;
26988
+ cpY = s.cp2y;
26989
+ break;
26990
+ case "S":
26991
+ x = s.x;
26992
+ y = s.y;
26993
+ cpX = s.cpx;
26994
+ cpY = s.cpy;
26995
+ break;
26996
+ case "T":
26997
+ if (cpX !== null && cpY !== null) {
26998
+ cpX = x - (cpX - x);
26999
+ cpY = y - (cpY - y);
27000
+ }
27001
+ x = s.x;
27002
+ y = s.y;
27003
+ break;
27004
+ case "L":
27005
+ x = s.x;
27006
+ y = s.y;
27007
+ cpX = null;
27008
+ cpY = null;
27009
+ break;
27010
+ case "V":
27011
+ y = s.y;
27012
+ cpX = null;
27013
+ cpY = null;
27014
+ break;
27015
+ case "H":
27016
+ x = s.x;
27017
+ cpX = null;
27018
+ cpY = null;
27019
+ break;
27020
+ case "Z":
27021
+ x = initialX;
27022
+ y = initialY;
27023
+ cpX = null;
27024
+ cpY = null;
27025
+ break;
27026
+ default:
27027
+ throw new Error(`Unexpected instruction ${s.type}`);
27028
+ }
27029
+ return newSeg;
27030
+ });
27031
+ return newSegments.flat(1);
27032
+ };
26925
27033
  var TAU = Math.PI * 2;
27034
+ function approximate_unit_arc(theta1, delta_theta) {
27035
+ const alpha = 4 / 3 * Math.tan(delta_theta / 4);
27036
+ const x1 = Math.cos(theta1);
27037
+ const y1 = Math.sin(theta1);
27038
+ const x2 = Math.cos(theta1 + delta_theta);
27039
+ const y2 = Math.sin(theta1 + delta_theta);
27040
+ return [
27041
+ x1,
27042
+ y1,
27043
+ x1 - y1 * alpha,
27044
+ y1 + x1 * alpha,
27045
+ x2 + y2 * alpha,
27046
+ y2 - x2 * alpha,
27047
+ x2,
27048
+ y2
27049
+ ];
27050
+ }
27051
+ function unit_vector_angle(ux, uy, vx, vy) {
27052
+ const sign = ux * vy - uy * vx < 0 ? -1 : 1;
27053
+ let dot = ux * vx + uy * vy;
27054
+ if (dot > 1) {
27055
+ dot = 1;
27056
+ }
27057
+ if (dot < -1) {
27058
+ dot = -1;
27059
+ }
27060
+ return sign * Math.acos(dot);
27061
+ }
27062
+ function get_arc_center({
27063
+ x1,
27064
+ y1,
27065
+ x2,
27066
+ y2,
27067
+ largeArcFlag,
27068
+ sweepFlag,
27069
+ rx,
27070
+ ry,
27071
+ sin_phi,
27072
+ cos_phi
27073
+ }) {
27074
+ const x1p = cos_phi * (x1 - x2) / 2 + sin_phi * (y1 - y2) / 2;
27075
+ const y1p = -sin_phi * (x1 - x2) / 2 + cos_phi * (y1 - y2) / 2;
27076
+ const rx_sq = rx * rx;
27077
+ const ry_sq = ry * ry;
27078
+ const x1p_sq = x1p * x1p;
27079
+ const y1p_sq = y1p * y1p;
27080
+ let radicant = rx_sq * ry_sq - rx_sq * y1p_sq - ry_sq * x1p_sq;
27081
+ if (radicant < 0) {
27082
+ radicant = 0;
27083
+ }
27084
+ radicant /= rx_sq * y1p_sq + ry_sq * x1p_sq;
27085
+ radicant = Math.sqrt(radicant) * (largeArcFlag === sweepFlag ? -1 : 1);
27086
+ const cxp = radicant * rx / ry * y1p;
27087
+ const cyp = radicant * -ry / rx * x1p;
27088
+ const cx = cos_phi * cxp - sin_phi * cyp + (x1 + x2) / 2;
27089
+ const cy = sin_phi * cxp + cos_phi * cyp + (y1 + y2) / 2;
27090
+ const v1x = (x1p - cxp) / rx;
27091
+ const v1y = (y1p - cyp) / ry;
27092
+ const v2x = (-x1p - cxp) / rx;
27093
+ const v2y = (-y1p - cyp) / ry;
27094
+ const theta1 = unit_vector_angle(1, 0, v1x, v1y);
27095
+ let delta_theta = unit_vector_angle(v1x, v1y, v2x, v2y);
27096
+ if (sweepFlag === false && delta_theta > 0) {
27097
+ delta_theta -= TAU;
27098
+ }
27099
+ if (sweepFlag === true && delta_theta < 0) {
27100
+ delta_theta += TAU;
27101
+ }
27102
+ return [cx, cy, theta1, delta_theta];
27103
+ }
27104
+ function arcToCircle({
27105
+ x1,
27106
+ y1,
27107
+ x2,
27108
+ y2,
27109
+ largeArcFlag,
27110
+ sweepFlag,
27111
+ rx,
27112
+ ry,
27113
+ phi
27114
+ }) {
27115
+ const sin_phi = Math.sin(phi * TAU / 360);
27116
+ const cos_phi = Math.cos(phi * TAU / 360);
27117
+ const x1p = cos_phi * (x1 - x2) / 2 + sin_phi * (y1 - y2) / 2;
27118
+ const y1p = -sin_phi * (x1 - x2) / 2 + cos_phi * (y1 - y2) / 2;
27119
+ if (x1p === 0 && y1p === 0) {
27120
+ return [];
27121
+ }
27122
+ if (rx === 0 || ry === 0) {
27123
+ return [];
27124
+ }
27125
+ rx = Math.abs(rx);
27126
+ ry = Math.abs(ry);
27127
+ const lambda = x1p * x1p / (rx * rx) + y1p * y1p / (ry * ry);
27128
+ if (lambda > 1) {
27129
+ rx *= Math.sqrt(lambda);
27130
+ ry *= Math.sqrt(lambda);
27131
+ }
27132
+ const cc = get_arc_center({
27133
+ x1,
27134
+ y1,
27135
+ x2,
27136
+ y2,
27137
+ largeArcFlag,
27138
+ sweepFlag,
27139
+ rx,
27140
+ ry,
27141
+ sin_phi,
27142
+ cos_phi
27143
+ });
27144
+ const result = [];
27145
+ let theta1 = cc[2];
27146
+ let delta_theta = cc[3];
27147
+ const segments = Math.max(Math.ceil(Math.abs(delta_theta) / (TAU / 4)), 1);
27148
+ delta_theta /= segments;
27149
+ for (let i = 0;i < segments; i++) {
27150
+ result.push(approximate_unit_arc(theta1, delta_theta));
27151
+ theta1 += delta_theta;
27152
+ }
27153
+ return result.map((curve) => {
27154
+ for (let i = 0;i < curve.length; i += 2) {
27155
+ let x = curve[i + 0];
27156
+ let y = curve[i + 1];
27157
+ x *= rx;
27158
+ y *= ry;
27159
+ const xp = cos_phi * x - sin_phi * y;
27160
+ const yp = sin_phi * x + cos_phi * y;
27161
+ curve[i + 0] = xp + cc[0];
27162
+ curve[i + 1] = yp + cc[1];
27163
+ }
27164
+ return curve;
27165
+ });
27166
+ }
27167
+ var removeATSHVQInstructions = (segments) => {
27168
+ return iterateOverSegments({
27169
+ segments,
27170
+ iterate: ({ segment, prevSegment, x, y, cpX, cpY }) => {
27171
+ if (segment.type === "H") {
27172
+ return [{ type: "L", x: segment.x, y }];
27173
+ }
27174
+ if (segment.type === "V") {
27175
+ return [{ type: "L", x, y: segment.y }];
27176
+ }
27177
+ if (segment.type === "A") {
27178
+ const nextX = segment.x;
27179
+ const nextY = segment.y;
27180
+ const new_segments = arcToCircle({
27181
+ x1: x,
27182
+ y1: y,
27183
+ x2: nextX,
27184
+ y2: nextY,
27185
+ largeArcFlag: segment.largeArcFlag,
27186
+ sweepFlag: segment.sweepFlag,
27187
+ rx: segment.rx,
27188
+ ry: segment.ry,
27189
+ phi: segment.xAxisRotation
27190
+ });
27191
+ if (new_segments.length === 0) {
27192
+ return [
27193
+ {
27194
+ type: "L",
27195
+ x: segment.x,
27196
+ y: segment.y
27197
+ }
27198
+ ];
27199
+ }
27200
+ const result = new_segments.map((_s) => {
27201
+ return {
27202
+ type: "C",
27203
+ cp1x: _s[2],
27204
+ cp1y: _s[3],
27205
+ cp2x: _s[4],
27206
+ cp2y: _s[5],
27207
+ x: _s[6],
27208
+ y: _s[7]
27209
+ };
27210
+ });
27211
+ return result;
27212
+ }
27213
+ if (segment.type === "T") {
27214
+ let prevControlX = 0;
27215
+ let prevControlY = 0;
27216
+ if (prevSegment && (prevSegment.type === "Q" || prevSegment.type === "T")) {
27217
+ prevControlX = cpX;
27218
+ prevControlY = cpY;
27219
+ } else {
27220
+ prevControlX = x;
27221
+ prevControlY = y;
27222
+ }
27223
+ const vectorX = prevControlX - x;
27224
+ const vectorY = prevControlY - y;
27225
+ const newControlX = x - vectorX;
27226
+ const newControlY = y - vectorY;
27227
+ return [
27228
+ convertQToCInstruction({
27229
+ type: "Q",
27230
+ cpx: newControlX,
27231
+ cpy: newControlY,
27232
+ x: segment.x,
27233
+ y: segment.y
27234
+ }, { x, y })
27235
+ ];
27236
+ }
27237
+ if (segment.type === "S") {
27238
+ let prevControlX = 0;
27239
+ let prevControlY = 0;
27240
+ if (prevSegment && prevSegment.type === "C") {
27241
+ prevControlX = prevSegment.cp2x;
27242
+ prevControlY = prevSegment.cp2y;
27243
+ } else if (prevSegment && prevSegment.type === "S") {
27244
+ prevControlX = prevSegment.cpx;
27245
+ prevControlY = prevSegment.cpy;
27246
+ } else {
27247
+ prevControlX = x;
27248
+ prevControlY = y;
27249
+ }
27250
+ const vectorX = prevControlX - x;
27251
+ const vectorY = prevControlY - y;
27252
+ const newControlX = x - vectorX;
27253
+ const newControlY = y - vectorY;
27254
+ return [
27255
+ {
27256
+ type: "C",
27257
+ cp1x: newControlX,
27258
+ cp1y: newControlY,
27259
+ cp2x: segment.cpx,
27260
+ cp2y: segment.cpy,
27261
+ x: segment.x,
27262
+ y: segment.y
27263
+ }
27264
+ ];
27265
+ }
27266
+ if (segment.type === "Q") {
27267
+ return [convertQToCInstruction(segment, { x, y })];
27268
+ }
27269
+ return [segment];
27270
+ }
27271
+ });
27272
+ };
26926
27273
  var serializeInstruction = (instruction) => {
26927
27274
  if (instruction.type === "A") {
26928
27275
  return `A ${instruction.rx} ${instruction.ry} ${instruction.xAxisRotation} ${Number(instruction.largeArcFlag)} ${Number(instruction.sweepFlag)} ${instruction.x} ${instruction.y}`;
@@ -27125,6 +27472,337 @@ var normalizePath = (path) => {
27125
27472
  const normalized = normalizeInstructions(instructions);
27126
27473
  return serializeInstructions(normalized);
27127
27474
  };
27475
+ var reduceInstructions = (instruction) => {
27476
+ const simplified = normalizeInstructions(instruction);
27477
+ return removeATSHVQInstructions(simplified);
27478
+ };
27479
+ var getEndPosition = (instructions) => {
27480
+ let x = 0;
27481
+ let y = 0;
27482
+ let moveX = 0;
27483
+ let moveY = 0;
27484
+ for (let i = 0;i < instructions.length; i++) {
27485
+ const instruction = instructions[i];
27486
+ if (instruction.type === "M") {
27487
+ moveX = instruction.x;
27488
+ moveY = instruction.y;
27489
+ } else if (instruction.type === "m") {
27490
+ moveX += instruction.dx;
27491
+ moveY += instruction.dy;
27492
+ }
27493
+ if (instruction.type === "A" || instruction.type === "C" || instruction.type === "L" || instruction.type === "M" || instruction.type === "Q" || instruction.type === "S" || instruction.type === "T") {
27494
+ x = instruction.x;
27495
+ y = instruction.y;
27496
+ continue;
27497
+ }
27498
+ if (instruction.type === "a" || instruction.type === "c" || instruction.type === "l" || instruction.type === "m" || instruction.type === "q" || instruction.type === "s" || instruction.type === "t") {
27499
+ x += instruction.dx;
27500
+ y += instruction.dy;
27501
+ continue;
27502
+ }
27503
+ if (instruction.type === "H") {
27504
+ x = instruction.x;
27505
+ continue;
27506
+ }
27507
+ if (instruction.type === "V") {
27508
+ y = instruction.y;
27509
+ continue;
27510
+ }
27511
+ if (instruction.type === "Z") {
27512
+ x = moveX;
27513
+ y = moveY;
27514
+ continue;
27515
+ }
27516
+ if (instruction.type === "h") {
27517
+ x += instruction.dx;
27518
+ continue;
27519
+ }
27520
+ if (instruction.type === "v") {
27521
+ y += instruction.dy;
27522
+ continue;
27523
+ }
27524
+ throw new Error("Unknown instruction type: " + instruction.type);
27525
+ }
27526
+ return {
27527
+ x,
27528
+ y
27529
+ };
27530
+ };
27531
+ var convertToLCommand = (command) => {
27532
+ if (command.type === "M" || command.type === "L" || command.type === "Z") {
27533
+ throw new Error("unexpected");
27534
+ }
27535
+ return {
27536
+ type: "L",
27537
+ x: command.x,
27538
+ y: command.y
27539
+ };
27540
+ };
27541
+ var convertToCCommand = (command, currentPoint) => {
27542
+ if (command.type === "M" || command.type === "C" || command.type === "Z") {
27543
+ throw new Error("unexpected");
27544
+ }
27545
+ if (command.type === "L") {
27546
+ return {
27547
+ type: "C",
27548
+ cp1x: currentPoint.x,
27549
+ cp1y: currentPoint.y,
27550
+ cp2x: command.x,
27551
+ cp2y: command.y,
27552
+ x: command.x,
27553
+ y: command.y
27554
+ };
27555
+ }
27556
+ throw new Error("all types should be handled");
27557
+ };
27558
+ function convertToSameInstructionType(aCommand, bCommand, currentPoint) {
27559
+ if (aCommand.type === "M" || bCommand.type === "M") {
27560
+ return { ...aCommand };
27561
+ }
27562
+ if (aCommand.type === bCommand.type) {
27563
+ return { ...aCommand };
27564
+ }
27565
+ if (bCommand.type === "C") {
27566
+ return convertToCCommand(aCommand, currentPoint);
27567
+ }
27568
+ if (bCommand.type === "L") {
27569
+ return convertToLCommand(aCommand);
27570
+ }
27571
+ if (bCommand.type === "Z") {
27572
+ return {
27573
+ type: "Z"
27574
+ };
27575
+ }
27576
+ throw new TypeError("unhandled");
27577
+ }
27578
+ function pointsToInstruction(points) {
27579
+ const x = points[points.length - 1][0];
27580
+ const y = points[points.length - 1][1];
27581
+ if (points.length === 4) {
27582
+ const x1 = points[1][0];
27583
+ const y1 = points[1][1];
27584
+ const x2 = points[2][0];
27585
+ const y2 = points[2][1];
27586
+ return {
27587
+ type: "C",
27588
+ cp1x: x1,
27589
+ cp1y: y1,
27590
+ cp2x: x2,
27591
+ cp2y: y2,
27592
+ x,
27593
+ y
27594
+ };
27595
+ }
27596
+ if (points.length === 3) {
27597
+ const x1 = points[1][0];
27598
+ const y1 = points[1][1];
27599
+ return convertQToCInstruction({
27600
+ type: "Q",
27601
+ cpx: x1,
27602
+ cpy: y1,
27603
+ x,
27604
+ y
27605
+ }, {
27606
+ x: points[0][0],
27607
+ y: points[0][1]
27608
+ });
27609
+ }
27610
+ return {
27611
+ type: "L",
27612
+ x,
27613
+ y
27614
+ };
27615
+ }
27616
+ function decasteljau(points, t) {
27617
+ const left = [];
27618
+ const right = [];
27619
+ function decasteljauRecurse(_points, _t) {
27620
+ if (_points.length === 1) {
27621
+ left.push(_points[0]);
27622
+ right.push(_points[0]);
27623
+ } else {
27624
+ const newPoints = Array(_points.length - 1);
27625
+ for (let i = 0;i < newPoints.length; i++) {
27626
+ if (i === 0) {
27627
+ left.push(_points[0]);
27628
+ }
27629
+ if (i === newPoints.length - 1) {
27630
+ right.push(_points[i + 1]);
27631
+ }
27632
+ newPoints[i] = [
27633
+ (1 - _t) * _points[i][0] + _t * _points[i + 1][0],
27634
+ (1 - _t) * _points[i][1] + _t * _points[i + 1][1]
27635
+ ];
27636
+ }
27637
+ decasteljauRecurse(newPoints, _t);
27638
+ }
27639
+ }
27640
+ if (points.length) {
27641
+ decasteljauRecurse(points, t);
27642
+ }
27643
+ return { left, right: right.reverse() };
27644
+ }
27645
+ function splitCurveAsPoints(points, segmentCount = 2) {
27646
+ const segments = [];
27647
+ let remainingCurve = points;
27648
+ const tIncrement = 1 / segmentCount;
27649
+ for (let i = 0;i < segmentCount - 1; i++) {
27650
+ const tRelative = tIncrement / (1 - tIncrement * i);
27651
+ const split = decasteljau(remainingCurve, tRelative);
27652
+ segments.push(split.left);
27653
+ remainingCurve = split.right;
27654
+ }
27655
+ segments.push(remainingCurve);
27656
+ return segments;
27657
+ }
27658
+ var splitCurveInstructions = (instructionStartX, instructionStartY, instructionEnd, segmentCount) => {
27659
+ const points = [[instructionStartX, instructionStartY]];
27660
+ if (instructionEnd.type === "Q") {
27661
+ points.push([instructionEnd.cpx, instructionEnd.cpy]);
27662
+ }
27663
+ if (instructionEnd.type === "C") {
27664
+ points.push([instructionEnd.cp1x, instructionEnd.cp1y]);
27665
+ points.push([instructionEnd.cp2x, instructionEnd.cp2y]);
27666
+ }
27667
+ points.push([instructionEnd.x, instructionEnd.y]);
27668
+ return splitCurveAsPoints(points, segmentCount).map((p) => {
27669
+ return pointsToInstruction(p);
27670
+ });
27671
+ };
27672
+ function splitSegmentInstructions(commandStart, commandEnd, segmentCount) {
27673
+ let segments = [];
27674
+ if (commandEnd.type === "L" || commandEnd.type === "C") {
27675
+ if (commandStart.type !== "Z") {
27676
+ segments = segments.concat(splitCurveInstructions(commandStart.x, commandStart.y, commandEnd, segmentCount));
27677
+ }
27678
+ } else {
27679
+ const copyCommand = commandStart.type === "M" ? {
27680
+ type: "L",
27681
+ x: commandStart.x,
27682
+ y: commandStart.y
27683
+ } : commandStart;
27684
+ segments = segments.concat(new Array(segmentCount - 1).fill(true).map(() => copyCommand));
27685
+ segments.push(commandEnd);
27686
+ }
27687
+ return segments;
27688
+ }
27689
+ function extendInstruction(commandsToExtend, referenceCommands) {
27690
+ const numSegmentsToExtend = commandsToExtend.length - 1;
27691
+ const numReferenceSegments = referenceCommands.length - 1;
27692
+ const segmentRatio = numSegmentsToExtend / numReferenceSegments;
27693
+ const countPointsPerSegment = new Array(numReferenceSegments).fill(undefined).reduce((accum, _d, i) => {
27694
+ const insertIndex = Math.floor(segmentRatio * i);
27695
+ accum[insertIndex] = (accum[insertIndex] || 0) + 1;
27696
+ return accum;
27697
+ }, []);
27698
+ const extended = countPointsPerSegment.reduce((_extended, segmentCount, i) => {
27699
+ if (i === commandsToExtend.length - 1) {
27700
+ const lastCommandCopies = new Array(segmentCount).fill({
27701
+ ...commandsToExtend[commandsToExtend.length - 1]
27702
+ });
27703
+ if (lastCommandCopies[0].type === "M") {
27704
+ lastCommandCopies.forEach((d) => {
27705
+ d.type = "L";
27706
+ });
27707
+ }
27708
+ return _extended.concat(lastCommandCopies);
27709
+ }
27710
+ return _extended.concat(splitSegmentInstructions(commandsToExtend[i], commandsToExtend[i + 1], segmentCount));
27711
+ }, []);
27712
+ extended.unshift(commandsToExtend[0]);
27713
+ return extended;
27714
+ }
27715
+ var normalizeInterpolatedPath = (path) => {
27716
+ return path.replace(/-?\d*\.?\d+(?:e[+-]?\d+)?/gi, (value) => {
27717
+ const number = Number(value);
27718
+ return Number.isInteger(number) ? value : String(Number(number.toPrecision(15)));
27719
+ });
27720
+ };
27721
+ var interpolatePaths = (input2, inputRange, outputRange, options) => {
27722
+ if (!Array.isArray(outputRange)) {
27723
+ throw new TypeError("outputRange must be an array of SVG path strings");
27724
+ }
27725
+ for (const path of outputRange) {
27726
+ if (typeof path !== "string") {
27727
+ throw new TypeError("outputRange must contain only SVG path strings");
27728
+ }
27729
+ }
27730
+ for (const side of ["extrapolateLeft", "extrapolateRight"]) {
27731
+ const extrapolation = options?.[side];
27732
+ if (extrapolation !== undefined && extrapolation !== "extend" && extrapolation !== "clamp" && extrapolation !== "wrap") {
27733
+ throw new TypeError(`${side} must be "extend", "clamp", or "wrap" for interpolatePaths()`);
27734
+ }
27735
+ }
27736
+ const weights = interpolate3(input2, inputRange, outputRange.map((_, pathIndex) => outputRange.map((__, index) => index === pathIndex ? 1 : 0)), options);
27737
+ const exactPathIndex = weights.findIndex((weight, index) => weight === 1 && weights.every((otherWeight, otherIndex) => otherIndex === index ? true : otherWeight === 0));
27738
+ if (exactPathIndex !== -1) {
27739
+ return outputRange[exactPathIndex];
27740
+ }
27741
+ const contributingPaths = outputRange.map((path, index) => ({ path, weight: weights[index] })).filter(({ weight }) => weight !== 0);
27742
+ const paths = contributingPaths.map(({ path }) => {
27743
+ const commands = reduceInstructions(parsePath(path));
27744
+ if (commands.length === 0) {
27745
+ throw new TypeError(`SVG Path "${path}" is not valid`);
27746
+ }
27747
+ return commands;
27748
+ });
27749
+ const closed = paths.every((commands) => commands[commands.length - 1].type === "Z");
27750
+ const openPaths = paths.map((commands) => commands[commands.length - 1].type === "Z" ? commands.slice(0, -1) : commands);
27751
+ const reference = openPaths.reduce((longest, commands) => commands.length > longest.length ? commands : longest);
27752
+ const extendedPaths = openPaths.map((commands) => commands.length < reference.length ? extendInstruction(commands, reference) : commands);
27753
+ const result = reference.map((_, instructionIndex) => {
27754
+ const commands = extendedPaths.map((path) => path[instructionIndex]);
27755
+ if (commands.some((command) => command.type === "Z")) {
27756
+ if (commands.every((command) => command.type === "Z")) {
27757
+ return { type: "Z" };
27758
+ }
27759
+ throw new TypeError("Cannot interpolate SVG paths with different subpath structures");
27760
+ }
27761
+ const target = commands.find((command) => command.type === "C") ?? commands[0];
27762
+ const normalized = commands.map((command, pathIndex) => {
27763
+ if (command.type === "M" !== (target.type === "M")) {
27764
+ throw new TypeError("Cannot interpolate SVG paths with different subpath structures");
27765
+ }
27766
+ return convertToSameInstructionType(command, target, getEndPosition(extendedPaths[pathIndex].slice(0, instructionIndex)));
27767
+ });
27768
+ const coordinates = normalized.map((command) => {
27769
+ if (command.type === "Z") {
27770
+ return [];
27771
+ }
27772
+ return command.type === "C" ? [
27773
+ command.x,
27774
+ command.y,
27775
+ command.cp1x,
27776
+ command.cp1y,
27777
+ command.cp2x,
27778
+ command.cp2y
27779
+ ] : [command.x, command.y];
27780
+ });
27781
+ const values = coordinates[0].map((base, coordinateIndex) => {
27782
+ const interpolated = coordinates.reduce((value, path, pathIndex) => value + (path[coordinateIndex] - base) * contributingPaths[pathIndex].weight, base);
27783
+ if (Number.isFinite(interpolated)) {
27784
+ return interpolated;
27785
+ }
27786
+ return coordinates.reduce((sum, path, pathIndex) => sum + path[coordinateIndex] * contributingPaths[pathIndex].weight, 0);
27787
+ });
27788
+ if (target.type === "C") {
27789
+ return {
27790
+ type: "C",
27791
+ x: values[0],
27792
+ y: values[1],
27793
+ cp1x: values[2],
27794
+ cp1y: values[3],
27795
+ cp2x: values[4],
27796
+ cp2y: values[5]
27797
+ };
27798
+ }
27799
+ return { type: target.type, x: values[0], y: values[1] };
27800
+ });
27801
+ if (closed) {
27802
+ result.push({ type: "Z" });
27803
+ }
27804
+ return normalizeInterpolatedPath(serializeInstructions(result));
27805
+ };
27128
27806
 
27129
27807
  // src/components/Timeline/TimelineTextContentField.tsx
27130
27808
  import { useCallback as useCallback82, useRef as useRef28, useState as useState52 } from "react";
@@ -28374,7 +29052,7 @@ var TimelineArrayField = ({ field, effectiveValue, onSave, onDragValueChange, on
28374
29052
  disabled: !canRemove,
28375
29053
  onClick: () => onRemove(index),
28376
29054
  style: canRemove ? button2 : disabledButton,
28377
- title: `Remove item ${index}`,
29055
+ "aria-label": `Remove item ${index}`,
28378
29056
  type: "button",
28379
29057
  children: "-"
28380
29058
  })
@@ -28387,7 +29065,7 @@ var TimelineArrayField = ({ field, effectiveValue, onSave, onDragValueChange, on
28387
29065
  type: "button",
28388
29066
  style: button2,
28389
29067
  onClick: onAdd,
28390
- title: "Add item",
29068
+ "aria-label": "Add item",
28391
29069
  children: "+"
28392
29070
  })
28393
29071
  }) : null
@@ -28463,10 +29141,11 @@ var UnsupportedStatus = ({ label: label3, onFix, formattedValue }) => {
28463
29141
  event.stopPropagation();
28464
29142
  };
28465
29143
  return /* @__PURE__ */ jsxs71("span", {
29144
+ role: "group",
28466
29145
  style: unsupportedStatusWrapper,
28467
29146
  onPointerEnter: () => setHovered(true),
28468
29147
  onPointerLeave: () => setHovered(false),
28469
- title: formattedValue && typeof label3 === "string" ? label3 : undefined,
29148
+ "aria-label": formattedValue && typeof label3 === "string" ? label3 : undefined,
28470
29149
  children: [
28471
29150
  /* @__PURE__ */ jsx147("span", {
28472
29151
  style: formattedValue ? computedValue : unsupportedLabel,
@@ -28477,7 +29156,7 @@ var UnsupportedStatus = ({ label: label3, onFix, formattedValue }) => {
28477
29156
  type: "button",
28478
29157
  className: `${FOCUS_VISIBLE_ONLY_CLASS_NAME} ${HOVERABLE_CLASS_NAME}`,
28479
29158
  style: fixLink,
28480
- title: "Fix computed Studio value",
29159
+ "aria-label": "Fix computed Studio value",
28481
29160
  onClick: (event) => {
28482
29161
  stopMousePropagation(event);
28483
29162
  onFix();
@@ -28595,9 +29274,9 @@ var NumericAxis = ({ field, values, axis, onPreview, onSave, onClear }) => {
28595
29274
  },
28596
29275
  children: /* @__PURE__ */ jsx148(InputDragger, {
28597
29276
  type: "number",
29277
+ "aria-description": "Type to set all values; drag to adjust each value",
28598
29278
  value: dragValue ?? coordinates[0],
28599
29279
  "aria-label": axis === null ? field.description ?? field.key : `Offset ${["X", "Y", "Z"][axis]}`,
28600
- title: "Type to set all values; drag to adjust each value",
28601
29280
  status: "ok",
28602
29281
  small: true,
28603
29282
  rightAlign: false,
@@ -28723,7 +29402,7 @@ var MultiSequenceField = ({ field, targets, readOnlyStudio }) => {
28723
29402
  fontSize: 12,
28724
29403
  padding: 0
28725
29404
  },
28726
- title: "Set a value for all selected sequences",
29405
+ "aria-label": "Set a value for all selected sequences",
28727
29406
  onClick: () => setEditingMixed(true),
28728
29407
  children: "Mixed"
28729
29408
  });
@@ -28783,11 +29462,6 @@ var selectionCountStyle = {
28783
29462
  textOverflow: "ellipsis",
28784
29463
  whiteSpace: "nowrap"
28785
29464
  };
28786
- var actionIconStyle2 = {
28787
- display: "block",
28788
- height: 16,
28789
- width: 16
28790
- };
28791
29465
  var MultiSequenceInspector = ({ selections, readOnlyStudio }) => {
28792
29466
  const { sequences } = useContext45(Internals32.SequenceManager);
28793
29467
  const timelinePosition = Internals32.Timeline.useTimelinePosition();
@@ -28914,10 +29588,11 @@ var MultiSequenceInspector = ({ selections, readOnlyStudio }) => {
28914
29588
  children: /* @__PURE__ */ jsx150(InspectorQuickActionsSection, {
28915
29589
  children: /* @__PURE__ */ jsx150(InspectorQuickAction, {
28916
29590
  disabled: !canSplit,
29591
+ iconContainerStyle: largeInspectorActionIconContainerStyle,
28917
29592
  onClick: onSplit,
28918
- title: canSplit ? undefined : "Studio is read-only",
28919
- renderIcon: (color) => /* @__PURE__ */ jsx150(ScissorsIcon, {
28920
- style: actionIconStyle2,
29593
+ "aria-label": canSplit ? undefined : "Studio is read-only",
29594
+ renderIcon: (color) => /* @__PURE__ */ jsx150(SplitIcon, {
29595
+ style: largeInspectorActionIconStyle,
28921
29596
  color
28922
29597
  }),
28923
29598
  children: "Split selected"
@@ -29420,8 +30095,9 @@ var EasingGraphScaffold = ({ labels }) => {
29420
30095
  width: topLabelWidth,
29421
30096
  height: EASING_GRAPH_LABEL_HEIGHT,
29422
30097
  children: /* @__PURE__ */ jsx151("div", {
30098
+ role: "group",
29423
30099
  style: getEasingGraphLabelStyle("left"),
29424
- title: labels.end,
30100
+ "aria-label": labels.end,
29425
30101
  children: labels.end
29426
30102
  })
29427
30103
  }),
@@ -29431,8 +30107,9 @@ var EasingGraphScaffold = ({ labels }) => {
29431
30107
  width: bottomLabelWidth,
29432
30108
  height: EASING_GRAPH_LABEL_HEIGHT,
29433
30109
  children: /* @__PURE__ */ jsx151("div", {
30110
+ role: "group",
29434
30111
  style: getEasingGraphLabelStyle("right"),
29435
- title: labels.start,
30112
+ "aria-label": labels.start,
29436
30113
  children: labels.start
29437
30114
  })
29438
30115
  })
@@ -29460,7 +30137,6 @@ var EasingPresetButton = ({ currentEasing, disabled, onClick, preset }) => {
29460
30137
  return /* @__PURE__ */ jsx151("button", {
29461
30138
  type: "button",
29462
30139
  style: style4,
29463
- title: preset.label,
29464
30140
  "aria-label": `Apply ${preset.label} easing`,
29465
30141
  disabled,
29466
30142
  onClick: handleClick,
@@ -31276,7 +31952,6 @@ var TimelineKeyframeEasingLineInteraction = ({ fromFrame, toFrame, nodePathInfo,
31276
31952
  ...{ [TIMELINE_MARQUEE_ITEM_ATTR]: true },
31277
31953
  type: "button",
31278
31954
  style: interactiveStyle,
31279
- title: `Easing from frame ${fromFrame} to ${toFrame}`,
31280
31955
  "aria-label": `Select easing from frame ${fromFrame} to ${toFrame}`,
31281
31956
  onPointerDown: selectable ? onPointerDown : undefined,
31282
31957
  children: /* @__PURE__ */ jsx154(TimelineKeyframeEasingLineVisual, {
@@ -31472,7 +32147,6 @@ var TimelineNavigatorItem = ({ extendLineLeft, extendLineRight, item: item2, onS
31472
32147
  type: "button",
31473
32148
  style: buttonStyle2,
31474
32149
  onClick,
31475
- title: item2.type === "keyframe" ? `Keyframe at frame ${item2.selection.frame}` : `Easing from frame ${item2.selection.fromFrame} to ${item2.selection.toFrame}`,
31476
32150
  "aria-label": item2.type === "keyframe" ? `Select keyframe at frame ${item2.selection.frame}` : `Select easing from frame ${item2.selection.fromFrame} to ${item2.selection.toFrame}`,
31477
32151
  children: item2.type === "keyframe" ? /* @__PURE__ */ jsx155(TimelineKeyframeDiamondIcon, {
31478
32152
  color: LIGHT_TEXT,
@@ -31491,7 +32165,7 @@ var TimelineNavigatorItem = ({ extendLineLeft, extendLineRight, item: item2, onS
31491
32165
  };
31492
32166
  var KeyframeEasingNavigator = ({ currentSelection, includeEasings, keyframes, nodePathInfo }) => {
31493
32167
  const { isSelected, selectItems } = useTimelineSelection();
31494
- const setFrame = Internals36.Timeline.useTimelineSeekFrame();
32168
+ const seekFrame = Internals36.Timeline.useTimelineSeekFrame();
31495
32169
  const videoConfig = useVideoConfig4();
31496
32170
  const items = useMemo91(() => getKeyframeEasingNavigatorItems({
31497
32171
  includeEasings,
@@ -31508,7 +32182,7 @@ var KeyframeEasingNavigator = ({ currentSelection, includeEasings, keyframes, no
31508
32182
  }, [selectItems]);
31509
32183
  const seekToItem = useCallback95((item2, direction) => {
31510
32184
  const frame = getNavigatorItemPlayheadFrame(item2);
31511
- setFrame((current) => {
32185
+ seekFrame((current) => {
31512
32186
  const next = { ...current, [videoConfig.id]: frame };
31513
32187
  Internals36.persistCurrentFrame(next);
31514
32188
  return next;
@@ -31518,7 +32192,7 @@ var KeyframeEasingNavigator = ({ currentSelection, includeEasings, keyframes, no
31518
32192
  durationInFrames: videoConfig.durationInFrames,
31519
32193
  frame
31520
32194
  });
31521
- }, [setFrame, videoConfig.durationInFrames, videoConfig.id]);
32195
+ }, [seekFrame, videoConfig.durationInFrames, videoConfig.id]);
31522
32196
  const selectPrevious = useCallback95(() => {
31523
32197
  if (previousItem === null) {
31524
32198
  return;
@@ -31543,7 +32217,7 @@ var KeyframeEasingNavigator = ({ currentSelection, includeEasings, keyframes, no
31543
32217
  variant: null,
31544
32218
  disabled: previousItem === null,
31545
32219
  onClick: selectPrevious,
31546
- title: "Previous animation item",
32220
+ "aria-label": "Previous animation item",
31547
32221
  renderAction: (color) => /* @__PURE__ */ jsx155(NavigationChevron, {
31548
32222
  color: previousItem === null ? disabledChevronColor : color,
31549
32223
  direction: "left"
@@ -31579,7 +32253,7 @@ var KeyframeEasingNavigator = ({ currentSelection, includeEasings, keyframes, no
31579
32253
  variant: null,
31580
32254
  disabled: nextItem === null,
31581
32255
  onClick: selectNext,
31582
- title: "Next animation item",
32256
+ "aria-label": "Next animation item",
31583
32257
  renderAction: (color) => /* @__PURE__ */ jsx155(NavigationChevron, {
31584
32258
  color: nextItem === null ? disabledChevronColor : color,
31585
32259
  direction: "right"
@@ -31613,8 +32287,8 @@ var extrapolateOptions = [
31613
32287
  "wrap"
31614
32288
  ];
31615
32289
  var labelForExtrapolate = (value) => value[0].toUpperCase() + value.slice(1);
31616
- var getExtrapolateValues = (onSelect, disabled) => {
31617
- return extrapolateOptions.map((value) => ({
32290
+ var getExtrapolateValues = (onSelect, disabled, allowIdentity) => {
32291
+ return extrapolateOptions.filter((value) => allowIdentity || value !== "identity").map((value) => ({
31618
32292
  type: "item",
31619
32293
  id: value,
31620
32294
  keyHint: null,
@@ -31653,7 +32327,8 @@ var KeyframeSettings = ({ update }) => {
31653
32327
  const { previewServerState } = useContext50(StudioServerConnectionCtx);
31654
32328
  const { propStatus } = update;
31655
32329
  const [posterize, setPosterize] = useState60(propStatus.posterize ?? 0);
31656
- const canEditInterpolationSettings = propStatus.interpolationFunction === "interpolate";
32330
+ const canEditExtrapolation = propStatus.interpolationFunction === "interpolate" || propStatus.interpolationFunction === "interpolatePaths";
32331
+ const canEditOutput = propStatus.interpolationFunction === "interpolate";
31657
32332
  const disabled = previewServerState.type !== "connected";
31658
32333
  useEffect39(() => {
31659
32334
  setPosterize(propStatus.posterize ?? 0);
@@ -31697,12 +32372,13 @@ var KeyframeSettings = ({ update }) => {
31697
32372
  }) => {
31698
32373
  save({
31699
32374
  type: "settings",
31700
- clamping: canEditInterpolationSettings ? { left, right } : undefined,
31701
- output: canEditInterpolationSettings ? output : undefined,
32375
+ clamping: canEditExtrapolation ? { left, right } : undefined,
32376
+ output: canEditOutput ? output : undefined,
31702
32377
  posterize: nextPosterize <= 0 ? undefined : nextPosterize
31703
32378
  });
31704
32379
  }, [
31705
- canEditInterpolationSettings,
32380
+ canEditExtrapolation,
32381
+ canEditOutput,
31706
32382
  propStatus.clamping.left,
31707
32383
  propStatus.clamping.right,
31708
32384
  propStatus.output,
@@ -31712,8 +32388,8 @@ var KeyframeSettings = ({ update }) => {
31712
32388
  const onSelectLeft = useCallback96((left) => saveSettings({ left }), [saveSettings]);
31713
32389
  const onSelectRight = useCallback96((right) => saveSettings({ right }), [saveSettings]);
31714
32390
  const onSelectOutput = useCallback96((output) => saveSettings({ output }), [saveSettings]);
31715
- const leftValues = useMemo92(() => getExtrapolateValues(onSelectLeft, disabled), [disabled, onSelectLeft]);
31716
- const rightValues = useMemo92(() => getExtrapolateValues(onSelectRight, disabled), [disabled, onSelectRight]);
32391
+ const leftValues = useMemo92(() => getExtrapolateValues(onSelectLeft, disabled, canEditOutput), [canEditOutput, disabled, onSelectLeft]);
32392
+ const rightValues = useMemo92(() => getExtrapolateValues(onSelectRight, disabled, canEditOutput), [canEditOutput, disabled, onSelectRight]);
31717
32393
  const outputValues = useMemo92(() => getOutputValues(onSelectOutput, disabled), [disabled, onSelectOutput]);
31718
32394
  const onPosterizeChange = useCallback96((value) => {
31719
32395
  setPosterize(Math.max(0, Math.round(value)));
@@ -31733,14 +32409,14 @@ var KeyframeSettings = ({ update }) => {
31733
32409
  children: /* @__PURE__ */ jsxs78("div", {
31734
32410
  style: keyframeSettingsContainer,
31735
32411
  children: [
31736
- canEditInterpolationSettings ? /* @__PURE__ */ jsxs78(Fragment28, {
32412
+ canEditExtrapolation ? /* @__PURE__ */ jsxs78(Fragment28, {
31737
32413
  children: [
31738
32414
  /* @__PURE__ */ jsx156(InspectorDetailRow, {
31739
32415
  label: "Extrapolate left",
31740
32416
  children: /* @__PURE__ */ jsx156(Combobox, {
31741
32417
  values: leftValues,
31742
32418
  selectedId: propStatus.clamping.left,
31743
- title: "Extrapolate left",
32419
+ "aria-label": "Extrapolate left",
31744
32420
  style: comboStyle,
31745
32421
  size: "small"
31746
32422
  })
@@ -31750,23 +32426,23 @@ var KeyframeSettings = ({ update }) => {
31750
32426
  children: /* @__PURE__ */ jsx156(Combobox, {
31751
32427
  values: rightValues,
31752
32428
  selectedId: propStatus.clamping.right,
31753
- title: "Extrapolate right",
31754
- style: comboStyle,
31755
- size: "small"
31756
- })
31757
- }),
31758
- /* @__PURE__ */ jsx156(InspectorDetailRow, {
31759
- label: "Output",
31760
- children: /* @__PURE__ */ jsx156(Combobox, {
31761
- values: outputValues,
31762
- selectedId: propStatus.output ?? "linear",
31763
- title: "Output",
32429
+ "aria-label": "Extrapolate right",
31764
32430
  style: comboStyle,
31765
32431
  size: "small"
31766
32432
  })
31767
32433
  })
31768
32434
  ]
31769
32435
  }) : null,
32436
+ canEditOutput ? /* @__PURE__ */ jsx156(InspectorDetailRow, {
32437
+ label: "Output",
32438
+ children: /* @__PURE__ */ jsx156(Combobox, {
32439
+ values: outputValues,
32440
+ selectedId: propStatus.output ?? "linear",
32441
+ "aria-label": "Output",
32442
+ style: comboStyle,
32443
+ size: "small"
32444
+ })
32445
+ }) : null,
31770
32446
  /* @__PURE__ */ jsx156(InspectorDetailRow, {
31771
32447
  label: "Posterize",
31772
32448
  children: /* @__PURE__ */ jsx156(InputDragger, {
@@ -32793,14 +33469,14 @@ var useSelectAsset = () => {
32793
33469
  var useSelectComposition = () => {
32794
33470
  const { setCompositionFoldersExpanded } = useContext55(FolderContext);
32795
33471
  const { setCanvasContent } = useContext55(Internals40.CompositionSetters);
32796
- const setFrame = Internals40.Timeline.useTimelineSeekFrame();
33472
+ const seekFrame = Internals40.Timeline.useTimelineSeekFrame();
32797
33473
  return useCallback101((c, push, frame = null) => {
32798
33474
  if (push) {
32799
33475
  pushUrl(`/${c.id}`);
32800
33476
  }
32801
33477
  explorerSidebarTabs.current?.selectCompositionPanel();
32802
33478
  if (frame !== null) {
32803
- setFrame((current) => ({ ...current, [c.id]: frame }));
33479
+ seekFrame((current) => ({ ...current, [c.id]: frame }));
32804
33480
  }
32805
33481
  setCanvasContent({ type: "composition", compositionId: c.id });
32806
33482
  const { folderName, parentFolderName } = c;
@@ -32817,7 +33493,7 @@ var useSelectComposition = () => {
32817
33493
  return newState;
32818
33494
  });
32819
33495
  }
32820
- }, [setCanvasContent, setCompositionFoldersExpanded, setFrame]);
33496
+ }, [setCanvasContent, setCompositionFoldersExpanded, seekFrame]);
32821
33497
  };
32822
33498
  var InitialCompositionLoader = () => {
32823
33499
  const { compositions, canvasContent } = useContext55(Internals40.CompositionManager);
@@ -33117,7 +33793,7 @@ var SequenceInspectorHeader = ({ sourceLocation, track }) => {
33117
33793
  documentationLink ? /* @__PURE__ */ jsxs79(InspectorQuickAction, {
33118
33794
  disabled: false,
33119
33795
  style: defaultCursor,
33120
- title: "Open component docs",
33796
+ "aria-label": "Open component docs",
33121
33797
  onClick: openDocumentationLink,
33122
33798
  children: [
33123
33799
  componentName,
@@ -33396,7 +34072,7 @@ var EasingInspector = ({ selection }) => {
33396
34072
  /* @__PURE__ */ jsx162(InspectorBackAction, {
33397
34073
  disabled: parentSelection === null,
33398
34074
  onClick: onSelectParent,
33399
- title: "Back to property",
34075
+ "aria-label": "Back to property",
33400
34076
  children: fieldLabel
33401
34077
  }),
33402
34078
  easingUpdate === null || track === null ? null : /* @__PURE__ */ jsx162(KeyframeEasingNavigator, {
@@ -33973,7 +34649,7 @@ var TimelineKeyframeControls = ({
33973
34649
  }) => {
33974
34650
  const videoConfig = useVideoConfig6();
33975
34651
  const timelinePosition = Internals44.Timeline.useTimelinePosition();
33976
- const setFrame = Internals44.Timeline.useTimelineSeekFrame();
34652
+ const seekFrame = Internals44.Timeline.useTimelineSeekFrame();
33977
34653
  const { setPropStatuses } = useContext63(Internals44.VisualModeSettersContext);
33978
34654
  const { propStatuses } = useContext63(Internals44.VisualModePropStatusesContext);
33979
34655
  const { getDragOverrides, getEffectDragOverrides } = useContext63(Internals44.VisualModeDragOverridesContext);
@@ -34078,7 +34754,7 @@ var TimelineKeyframeControls = ({
34078
34754
  tracks
34079
34755
  ]);
34080
34756
  const seekToDisplayFrame = useCallback106((frame, direction) => {
34081
- setFrame((current) => {
34757
+ seekFrame((current) => {
34082
34758
  const next = { ...current, [videoConfig.id]: frame };
34083
34759
  Internals44.persistCurrentFrame(next);
34084
34760
  return next;
@@ -34088,7 +34764,7 @@ var TimelineKeyframeControls = ({
34088
34764
  durationInFrames: videoConfig.durationInFrames,
34089
34765
  frame
34090
34766
  });
34091
- }, [setFrame, videoConfig.durationInFrames, videoConfig.id]);
34767
+ }, [seekFrame, videoConfig.durationInFrames, videoConfig.id]);
34092
34768
  const onPrevious = useCallback106((e) => {
34093
34769
  e.stopPropagation();
34094
34770
  if (previousDisplayFrame !== null) {
@@ -34192,7 +34868,6 @@ var TimelineKeyframeControls = ({
34192
34868
  disabled: previousDisabled,
34193
34869
  onPointerDown: previousDisabled ? undefined : onPrevious,
34194
34870
  "aria-label": "Go to previous keyframe",
34195
- title: "Previous keyframe",
34196
34871
  children: /* @__PURE__ */ jsx165("svg", {
34197
34872
  width: "14",
34198
34873
  height: "14",
@@ -34210,7 +34885,6 @@ var TimelineKeyframeControls = ({
34210
34885
  disabled: !canToggleKeyframe || !clientId,
34211
34886
  onPointerDown: canToggleKeyframe && clientId ? onToggleKeyframe : undefined,
34212
34887
  "aria-label": hasKeyframeAtCurrentFrame ? "Remove keyframe" : "Add keyframe",
34213
- title: hasKeyframeAtCurrentFrame ? "Remove keyframe" : "Add keyframe",
34214
34888
  children: /* @__PURE__ */ jsx165(TimelineKeyframeDiamondIcon, {
34215
34889
  color: diamondColor,
34216
34890
  size: 12
@@ -34222,7 +34896,6 @@ var TimelineKeyframeControls = ({
34222
34896
  disabled: nextDisabled,
34223
34897
  onPointerDown: nextDisabled ? undefined : onNext,
34224
34898
  "aria-label": "Go to next keyframe",
34225
- title: "Next keyframe",
34226
34899
  children: /* @__PURE__ */ jsx165("svg", {
34227
34900
  width: "14",
34228
34901
  height: "14",
@@ -35330,9 +36003,10 @@ var TimelineSequencePropItem = ({
35330
36003
  nodePathInfo,
35331
36004
  mode: keyframeControlsMode
35332
36005
  }) : null;
36006
+ const hidePathValue = keyframeControlsMode === "timeline" && field.typeName === "svg-path";
35333
36007
  const style4 = useMemo105(() => {
35334
- return isTimelineFieldStacked({ field, transform3DMode }) ? fieldRowBase2 : { ...fieldRowBase2, height: field.rowHeight };
35335
- }, [field, transform3DMode]);
36008
+ return !hidePathValue && isTimelineFieldStacked({ field, transform3DMode }) ? fieldRowBase2 : { ...fieldRowBase2, height: field.rowHeight };
36009
+ }, [field, hidePathValue, transform3DMode]);
35336
36010
  const canResetToDefault = useMemo105(() => {
35337
36011
  if (!propStatus || propStatus.status === "computed") {
35338
36012
  return false;
@@ -35505,7 +36179,11 @@ var TimelineSequencePropItem = ({
35505
36179
  showSelectedBackground: true,
35506
36180
  containsSelection,
35507
36181
  outerHeight: null,
35508
- children: /* @__PURE__ */ jsx168(TimelineFieldRowContent, {
36182
+ children: hidePathValue ? /* @__PURE__ */ jsx168(TimelineFieldLabel, {
36183
+ rowDepth,
36184
+ selected: selection.selected || containsSelection,
36185
+ label: field.description ?? field.key
36186
+ }) : /* @__PURE__ */ jsx168(TimelineFieldRowContent, {
35509
36187
  field,
35510
36188
  rowDepth,
35511
36189
  selected: selection.selected || containsSelection,
@@ -35874,7 +36552,7 @@ var KeyframeInspector = ({ selection }) => {
35874
36552
  /* @__PURE__ */ jsx169(InspectorBackAction, {
35875
36553
  disabled: parentSelection === null,
35876
36554
  onClick: onSelectParent,
35877
- title: "Back to property",
36555
+ "aria-label": "Back to property",
35878
36556
  children: details.fieldLabel
35879
36557
  }),
35880
36558
  /* @__PURE__ */ jsx169(KeyframeEasingNavigator, {
@@ -36002,8 +36680,12 @@ var SnowflakeIcon = ({ color, ...props }) => {
36002
36680
  viewBox: "0 0 640 640",
36003
36681
  ...props,
36004
36682
  children: /* @__PURE__ */ jsx172("path", {
36005
- fill: color,
36006
- d: "M344.1 56C344.1 42.7 333.4 32 320.1 32C306.8 32 296.1 42.7 296.1 56L296.1 134.1L273.1 111.1C263.7 101.7 248.5 101.7 239.2 111.1C229.9 120.5 229.8 135.7 239.2 145L296.2 202L296.2 278.5L230 240.3L209.1 162.5C205.7 149.7 192.5 142.1 179.7 145.5C166.9 148.9 159.2 162 162.7 174.8L171.1 206.3L103.5 167.3C92 160.6 77.3 164.5 70.7 176C64.1 187.5 68 202.2 79.5 208.8L147.1 247.8L115.6 256.2C102.8 259.6 95.2 272.8 98.6 285.6C102 298.4 115.2 306 128 302.6L205.8 281.7L272 319.9L205.8 358.1L128 337.2C115.2 333.8 102 341.4 98.6 354.2C95.2 367 102.8 380.2 115.6 383.6L147.1 392L79.5 431C68 437.8 64.1 452.5 70.7 464C77.3 475.5 92 479.4 103.5 472.8L171.1 433.8L162.7 465.3C159.3 478.1 166.9 491.3 179.7 494.7C192.5 498.1 205.7 490.5 209.1 477.7L230 399.9L296.2 361.7L296.2 438.2L239.2 495.2C229.8 504.6 229.8 519.8 239.2 529.1C248.6 538.4 263.8 538.5 273.1 529.1L296.1 506.1L296.1 584.2C296.1 597.5 306.8 608.2 320.1 608.2C333.4 608.2 344.1 597.5 344.1 584.2L344.1 506.1L367.1 529.1C376.5 538.5 391.7 538.5 401 529.1C410.3 519.7 410.4 504.5 401 495.2L344 438.2L344 361.7L410.2 399.9L431.1 477.7C434.5 490.5 447.7 498.1 460.5 494.7C473.3 491.3 480.9 478.1 477.5 465.3L469.1 433.8L536.7 472.8C548.2 479.4 562.9 475.5 569.5 464C576.1 452.5 572.2 437.8 560.7 431.2L493.1 392.2L524.6 383.8C537.4 380.4 545 367.2 541.6 354.4C538.2 341.6 525 334 512.2 337.4L434.4 358.3L368.2 320.1L434.4 281.9L512.2 302.8C525 306.2 538.2 298.6 541.6 285.8C545 273 537.4 259.8 524.6 256.4L493.1 248L560.7 209C572.2 202.4 576.1 187.7 569.5 176.2C562.9 164.7 548.2 160.8 536.7 167.4L469.1 206.4L477.5 174.9C480.9 162.1 473.3 148.9 460.5 145.5C447.7 142.1 434.5 149.7 431.1 162.5L410.2 240.3L344 278.5L344 202L401 145C410.4 135.6 410.4 120.4 401 111.1C391.6 101.8 376.4 101.7 367.1 111.1L344.1 134.1L344.1 56z"
36683
+ d: "M320 80V560M112 200L528 440M112 440L528 200M272 112L320 160L368 112M272 528L320 480L368 528M181 184L181 240L128 264M459 184L459 240L512 264M181 456L181 400L128 376M459 456L459 400L512 376",
36684
+ fill: "none",
36685
+ stroke: color,
36686
+ strokeWidth: 28,
36687
+ strokeLinecap: "round",
36688
+ strokeLinejoin: "round"
36007
36689
  })
36008
36690
  });
36009
36691
  };
@@ -36407,7 +37089,7 @@ var CaptionTextEditor = ({ captions, onChange, onSave, onCancel, readOnly }) =>
36407
37089
  focusable: "false",
36408
37090
  style: { height: 16, width: 16 }
36409
37091
  }),
36410
- title: pageBreakTitle,
37092
+ "aria-label": pageBreakTitle,
36411
37093
  variant: null
36412
37094
  })
36413
37095
  ]
@@ -36580,6 +37262,7 @@ var CaptionInspector = ({
36580
37262
  }),
36581
37263
  /* @__PURE__ */ jsx185(InlineAction, {
36582
37264
  "aria-label": "Import captions",
37265
+ "aria-description": importTooltip,
36583
37266
  className: FOCUS_VISIBLE_ONLY_CLASS_NAME,
36584
37267
  disabled: isImporting,
36585
37268
  onClick: openCaptionSelection,
@@ -36589,14 +37272,14 @@ var CaptionInspector = ({
36589
37272
  focusable: "false",
36590
37273
  style: { height: 14, width: 14 }
36591
37274
  }),
36592
- title: importTooltip,
36593
37275
  variant: null
36594
37276
  })
36595
37277
  ]
36596
37278
  }),
36597
37279
  readOnly ? /* @__PURE__ */ jsx185("div", {
37280
+ role: "group",
36598
37281
  style: readOnlyStatus,
36599
- title: readOnlyTitle ?? undefined,
37282
+ "aria-label": readOnlyTitle ?? undefined,
36600
37283
  children: "Read only"
36601
37284
  }) : null
36602
37285
  ]
@@ -37346,7 +38029,8 @@ var TimelineEffectItem = ({
37346
38029
  style: labelContainerStyle,
37347
38030
  children: [
37348
38031
  /* @__PURE__ */ jsx187("span", {
37349
- title: label3,
38032
+ role: "group",
38033
+ "aria-label": label3,
37350
38034
  style: labelStyle4,
37351
38035
  children: label3
37352
38036
  }),
@@ -37561,6 +38245,9 @@ var useTimelineSequenceHasExpandableContent = ({
37561
38245
  const { getDragOverrides, getEffectDragOverrides } = useContext69(Internals53.VisualModeDragOverridesContext);
37562
38246
  const selectedRowKeys = useMemo110(() => getSelectedTimelineExpandedRowKeys(selectedItems), [selectedItems]);
37563
38247
  const selectHasExpandableContent = useCallback116((runtimeValues) => {
38248
+ if (nodePathInfo === null) {
38249
+ return false;
38250
+ }
37564
38251
  const tree = buildTimelineTree({
37565
38252
  sequence,
37566
38253
  nodePathInfo,
@@ -37867,7 +38554,7 @@ var InspectorSequenceSection = ({
37867
38554
  fileType: getPreviewFileType(linkInfo.assetPath),
37868
38555
  style: assetSelectorIcon
37869
38556
  }),
37870
- title: linkInfo.assetPath
38557
+ "aria-label": linkInfo.assetPath
37871
38558
  };
37872
38559
  }
37873
38560
  if (linkInfo?.kind === "remote") {
@@ -37888,7 +38575,7 @@ var InspectorSequenceSection = ({
37888
38575
  }),
37889
38576
  disabled: false,
37890
38577
  onClick: () => openTimelineAssetLink(linkInfo, selectAsset),
37891
- title: linkInfo.href
38578
+ "aria-label": linkInfo.href
37892
38579
  };
37893
38580
  }
37894
38581
  return null;
@@ -38170,7 +38857,7 @@ var InspectorSequenceSection = ({
38170
38857
  variant: null,
38171
38858
  disabled: borderRadiusConversion === null || previewServerState.type !== "connected",
38172
38859
  onClick: onConvertBorderRadius,
38173
- title: borderRadiusConversion === null ? borderRadiusUsesShorthand ? "A static border radius is required to use individual corners" : "All four corners must have the same static value" : borderRadiusUsesShorthand ? "Use individual corner radii" : "Use one border radius value",
38860
+ "aria-label": borderRadiusConversion === null ? borderRadiusUsesShorthand ? "A static border radius is required to use individual corners" : "All four corners must have the same static value" : borderRadiusUsesShorthand ? "Use individual corner radii" : "Use one border radius value",
38174
38861
  renderAction: (color) => borderRadiusUsesShorthand ? /* @__PURE__ */ jsx189(FullscreenIcon, {
38175
38862
  color,
38176
38863
  style: borderRadiusToggleIcon
@@ -38183,7 +38870,7 @@ var InspectorSequenceSection = ({
38183
38870
  variant: null,
38184
38871
  disabled: automaticallyEnabled3DTransform,
38185
38872
  onClick: onToggle3DTransform,
38186
- title: automaticallyEnabled3DTransform ? "3D controls are required by the current transform values" : show3DTransformControls ? "Hide 3D transform controls" : "Show 3D transform controls",
38873
+ "aria-label": automaticallyEnabled3DTransform ? "3D controls are required by the current transform values" : show3DTransformControls ? "Hide 3D transform controls" : "Show 3D transform controls",
38187
38874
  hoveredColor: show3DTransformControls ? BLUE : undefined,
38188
38875
  unhoveredColor: show3DTransformControls ? BLUE : LIGHT_TEXT,
38189
38876
  renderAction: (color) => /* @__PURE__ */ jsx189(CubeIcon, {
@@ -38196,7 +38883,7 @@ var InspectorSequenceSection = ({
38196
38883
  variant: null,
38197
38884
  disabled: !canAddEffect,
38198
38885
  onClick: onAddEffect,
38199
- title: canAddEffect ? "Add effect" : undefined,
38886
+ "aria-label": canAddEffect ? "Add effect" : undefined,
38200
38887
  renderAction: (color) => /* @__PURE__ */ jsx189(Plus, {
38201
38888
  color,
38202
38889
  style: plusIcon
@@ -40176,10 +40863,10 @@ var verticalSpacer = {
40176
40863
  height: 16,
40177
40864
  margin: "0 8px"
40178
40865
  };
40179
- var AlignmentButton = ({ onClick, title, Icon, disabled }) => {
40866
+ var AlignmentButton = ({ onClick, "aria-label": ariaLabel, Icon, disabled }) => {
40180
40867
  return /* @__PURE__ */ jsx196(InlineAction, {
40181
40868
  variant: null,
40182
- title,
40869
+ "aria-label": ariaLabel,
40183
40870
  onClick,
40184
40871
  renderAction: (color) => /* @__PURE__ */ jsx196(Icon, {
40185
40872
  style: iconStyle,
@@ -40362,19 +41049,19 @@ var AlignmentControls = ({ track }) => {
40362
41049
  style: container19,
40363
41050
  children: [
40364
41051
  /* @__PURE__ */ jsx196(AlignmentButton, {
40365
- title: "Align left",
41052
+ "aria-label": "Align left",
40366
41053
  onClick: () => handleAlign("left"),
40367
41054
  Icon: AlignLeftIcon,
40368
41055
  disabled: alignmentDisabled
40369
41056
  }),
40370
41057
  /* @__PURE__ */ jsx196(AlignmentButton, {
40371
- title: "Align center horizontally",
41058
+ "aria-label": "Align center horizontally",
40372
41059
  onClick: () => handleAlign("center-h"),
40373
41060
  Icon: AlignCenterHorizontalIcon,
40374
41061
  disabled: alignmentDisabled
40375
41062
  }),
40376
41063
  /* @__PURE__ */ jsx196(AlignmentButton, {
40377
- title: "Align right",
41064
+ "aria-label": "Align right",
40378
41065
  onClick: () => handleAlign("right"),
40379
41066
  Icon: AlignRightIcon,
40380
41067
  disabled: alignmentDisabled
@@ -40383,19 +41070,19 @@ var AlignmentControls = ({ track }) => {
40383
41070
  style: verticalSpacer
40384
41071
  }),
40385
41072
  /* @__PURE__ */ jsx196(AlignmentButton, {
40386
- title: "Align top",
41073
+ "aria-label": "Align top",
40387
41074
  onClick: () => handleAlign("top"),
40388
41075
  Icon: AlignTopIcon,
40389
41076
  disabled: alignmentDisabled
40390
41077
  }),
40391
41078
  /* @__PURE__ */ jsx196(AlignmentButton, {
40392
- title: "Align center vertically",
41079
+ "aria-label": "Align center vertically",
40393
41080
  onClick: () => handleAlign("center-v"),
40394
41081
  Icon: AlignCenterVerticalIcon,
40395
41082
  disabled: alignmentDisabled
40396
41083
  }),
40397
41084
  /* @__PURE__ */ jsx196(AlignmentButton, {
40398
- title: "Align bottom",
41085
+ "aria-label": "Align bottom",
40399
41086
  onClick: () => handleAlign("bottom"),
40400
41087
  Icon: AlignBottomIcon,
40401
41088
  disabled: alignmentDisabled
@@ -40416,8 +41103,12 @@ var WrapIcon = ({ color, ...props }) => {
40416
41103
  xmlns: "http://www.w3.org/2000/svg",
40417
41104
  viewBox: "0 0 640 640",
40418
41105
  children: /* @__PURE__ */ jsx197("path", {
40419
- fill: color,
40420
- d: "M480 128C497.7 128 512 142.3 512 160L512 224C512 241.7 497.7 256 480 256L160 256C142.3 256 128 241.7 128 224L128 160C128 142.3 142.3 128 160 128L480 128zM208 288L480 288C515.3 288 544 259.3 544 224L544 160C544 124.7 515.3 96 480 96L160 96C124.7 96 96 124.7 96 160L96 224C96 259.3 124.7 288 160 288L176 288L176 384C176 428.2 211.8 464 256 464L288 464L288 480C288 515.3 316.7 544 352 544L480 544C515.3 544 544 515.3 544 480L544 416C544 380.7 515.3 352 480 352L352 352C316.7 352 288 380.7 288 416L288 432L256 432C229.5 432 208 410.5 208 384L208 288zM320 432L320 416C320 398.3 334.3 384 352 384L480 384C497.7 384 512 398.3 512 416L512 480C512 497.7 497.7 512 480 512L352 512C334.3 512 320 497.7 320 480L320 432z"
41106
+ d: "M160 112h320c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H160c-26.5 0-48-21.5-48-48v-64c0-26.5 21.5-48 48-48ZM192 272v112c0 35.3 28.7 64 64 64h48M352 368h128c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H352c-26.5 0-48-21.5-48-48v-64c0-26.5 21.5-48 48-48Z",
41107
+ fill: "none",
41108
+ stroke: color,
41109
+ strokeWidth: 28,
41110
+ strokeLinecap: "round",
41111
+ strokeLinejoin: "round"
40421
41112
  })
40422
41113
  });
40423
41114
  };
@@ -40447,14 +41138,6 @@ var segmentStyle2 = {
40447
41138
  padding: `0 ${INSPECTOR_PANEL_HORIZONTAL_PADDING - 4}px`,
40448
41139
  width: "100%"
40449
41140
  };
40450
- var iconStyle2 = { height: 22, width: 22 };
40451
- var iconContainerStyle = {
40452
- flexShrink: 0,
40453
- height: 22,
40454
- marginLeft: -2,
40455
- marginRight: -2,
40456
- width: 22
40457
- };
40458
41141
  var labelStyle4 = {
40459
41142
  flex: 1,
40460
41143
  fontFamily: "sans-serif",
@@ -40540,7 +41223,7 @@ var SequenceWrapAction = ({ nodePathInfo, sequence, sourceActionsDisabled }) =>
40540
41223
  })), [busy, eligibility, onWrap]);
40541
41224
  const segments = useMemo113(() => [
40542
41225
  {
40543
- ariaLabel: "Wrap",
41226
+ ariaLabel: nodePathInfo.numberOfSequencesWithThisNodePath > 1 ? `Wrap all ${nodePathInfo.numberOfSequencesWithThisNodePath} instances of this JSX element` : "Wrap this JSX element",
40544
41227
  buttonId: null,
40545
41228
  disabled: busy,
40546
41229
  idleColor: LIGHT_TEXT,
@@ -40549,10 +41232,10 @@ var SequenceWrapAction = ({ nodePathInfo, sequence, sourceActionsDisabled }) =>
40549
41232
  renderContent: (color) => /* @__PURE__ */ jsxs91(Fragment32, {
40550
41233
  children: [
40551
41234
  /* @__PURE__ */ jsx198("span", {
40552
- style: iconContainerStyle,
41235
+ style: largeInspectorActionIconContainerStyle,
40553
41236
  children: /* @__PURE__ */ jsx198(WrapIcon, {
40554
41237
  color,
40555
- style: iconStyle2
41238
+ style: largeInspectorActionIconStyle
40556
41239
  })
40557
41240
  }),
40558
41241
  /* @__PURE__ */ jsx198("span", {
@@ -40570,7 +41253,6 @@ var SequenceWrapAction = ({ nodePathInfo, sequence, sourceActionsDisabled }) =>
40570
41253
  segmentId: "wrap",
40571
41254
  selectedId: null,
40572
41255
  style: segmentStyle2,
40573
- title: nodePathInfo.numberOfSequencesWithThisNodePath > 1 ? `Wrap all ${nodePathInfo.numberOfSequencesWithThisNodePath} instances of this JSX element` : "Wrap this JSX element",
40574
41256
  tooltipLabel: null,
40575
41257
  type: "menu",
40576
41258
  values
@@ -40581,23 +41263,12 @@ var SequenceWrapAction = ({ nodePathInfo, sequence, sourceActionsDisabled }) =>
40581
41263
  }
40582
41264
  return /* @__PURE__ */ jsx198(SegmentedButton, {
40583
41265
  segments,
40584
- style: buttonStyle2,
40585
- title: null
41266
+ style: buttonStyle2
40586
41267
  });
40587
41268
  };
40588
41269
 
40589
41270
  // src/components/InspectorPanel/SequenceSelectionInspector.tsx
40590
41271
  import { jsx as jsx199, jsxs as jsxs92, Fragment as Fragment33 } from "react/jsx-runtime";
40591
- var actionIconStyle3 = {
40592
- display: "block",
40593
- height: 16,
40594
- width: 16
40595
- };
40596
- var largeActionIconStyle = {
40597
- ...actionIconStyle3,
40598
- height: 20,
40599
- width: 20
40600
- };
40601
41272
  var SplitSequenceQuickAction = ({ selection, track }) => {
40602
41273
  const timelinePosition = Internals58.Timeline.useTimelinePosition();
40603
41274
  const { propStatuses } = useContext72(Internals58.VisualModePropStatusesContext);
@@ -40623,10 +41294,11 @@ var SplitSequenceQuickAction = ({ selection, track }) => {
40623
41294
  const disabledReason = !isStudioInteractivityEnabled() ? "Studio is read-only" : sequencePropStatuses === undefined ? "Waiting for sequence prop status" : eligibility.canSplit ? undefined : eligibility.reason;
40624
41295
  return /* @__PURE__ */ jsx199(InspectorQuickAction, {
40625
41296
  disabled: !canSplit,
41297
+ iconContainerStyle: largeInspectorActionIconContainerStyle,
40626
41298
  onClick: onSplit,
40627
- title: disabledReason,
40628
- renderIcon: (color) => /* @__PURE__ */ jsx199(ScissorsIcon, {
40629
- style: actionIconStyle3,
41299
+ "aria-label": disabledReason,
41300
+ renderIcon: (color) => /* @__PURE__ */ jsx199(SplitIcon, {
41301
+ style: largeInspectorActionIconStyle,
40630
41302
  color
40631
41303
  }),
40632
41304
  children: "Split clip"
@@ -40734,49 +41406,60 @@ var SequenceSourceQuickActions = ({ selection, track, validatedSource }) => {
40734
41406
  children: [
40735
41407
  freezeFrameMenuItem?.type === "item" ? /* @__PURE__ */ jsx199(InspectorQuickAction, {
40736
41408
  disabled: Boolean(freezeFrameMenuItem.disabled),
41409
+ iconContainerStyle: largeInspectorActionIconContainerStyle,
40737
41410
  onClick: () => freezeFrameMenuItem.onClick(freezeFrameMenuItem.id, null),
40738
41411
  renderIcon: (color) => /* @__PURE__ */ jsx199(SnowflakeIcon, {
40739
- style: largeActionIconStyle,
41412
+ style: largeInspectorActionIconStyle,
40740
41413
  color
40741
41414
  }),
40742
41415
  children: freezeFrameMenuItem.label
40743
41416
  }) : null,
40744
41417
  track.sequence.type === "video" ? /* @__PURE__ */ jsx199(InspectorQuickAction, {
40745
41418
  disabled: videoMattingDisabledReason !== undefined,
41419
+ iconContainerStyle: largeInspectorActionIconContainerStyle,
40746
41420
  onClick: onRemoveBackground,
40747
- title: videoMattingDisabledReason,
41421
+ "aria-label": videoMattingDisabledReason,
40748
41422
  renderIcon: (color) => /* @__PURE__ */ jsx199(BackgroundRemovalIcon, {
40749
- style: actionIconStyle3,
40750
- color
41423
+ style: largeInspectorActionIconStyle,
41424
+ color,
41425
+ viewBox: "-32 -32 704 704"
40751
41426
  }),
40752
41427
  children: "Remove background"
40753
41428
  }) : null,
40754
41429
  track.sequence.type === "video" ? /* @__PURE__ */ jsx199(InspectorQuickAction, {
40755
41430
  disabled: splitVideoFromAudioDisabledReason !== undefined,
41431
+ iconContainerStyle: largeInspectorActionIconContainerStyle,
40756
41432
  onClick: onSplitVideoFromAudio,
40757
- title: splitVideoFromAudioDisabledReason,
41433
+ "aria-label": splitVideoFromAudioDisabledReason,
40758
41434
  renderIcon: (color) => /* @__PURE__ */ jsx199(AudioIcon, {
40759
- style: actionIconStyle3,
40760
- color
41435
+ style: largeInspectorActionIconStyle,
41436
+ color,
41437
+ viewBox: "-96 -64 704 640",
41438
+ preserveAspectRatio: "none"
40761
41439
  }),
40762
41440
  children: "Split video from audio"
40763
41441
  }) : null,
40764
41442
  mediaSequence !== null && mediaMetadata?.hasAudioTrack !== false ? /* @__PURE__ */ jsx199(InspectorQuickAction, {
40765
41443
  disabled: transcriptionDisabledReason !== undefined,
41444
+ iconContainerStyle: largeInspectorActionIconContainerStyle,
40766
41445
  onClick: onGenerateCaptions,
40767
- title: transcriptionDisabledReason,
41446
+ "aria-label": transcriptionDisabledReason,
40768
41447
  renderIcon: (color) => /* @__PURE__ */ jsx199(TranscriptionIcon, {
40769
- style: actionIconStyle3,
40770
- color
41448
+ style: largeInspectorActionIconStyle,
41449
+ color,
41450
+ viewBox: "-96 -16 704 544",
41451
+ preserveAspectRatio: "none"
40771
41452
  }),
40772
41453
  children: "Generate captions"
40773
41454
  }) : null,
40774
41455
  /* @__PURE__ */ jsx199(InspectorQuickAction, {
40775
41456
  disabled: sourceActionsDisabled,
41457
+ iconContainerStyle: largeInspectorActionIconContainerStyle,
40776
41458
  onClick: onDuplicate,
40777
41459
  renderIcon: (color) => /* @__PURE__ */ jsx199(DuplicateIcon, {
40778
- style: largeActionIconStyle,
40779
- color
41460
+ style: largeInspectorActionIconStyle,
41461
+ color,
41462
+ viewBox: "-32 -32 704 704"
40780
41463
  }),
40781
41464
  children: "Duplicate"
40782
41465
  }),
@@ -40787,10 +41470,12 @@ var SequenceSourceQuickActions = ({ selection, track, validatedSource }) => {
40787
41470
  }),
40788
41471
  /* @__PURE__ */ jsx199(InspectorQuickAction, {
40789
41472
  disabled: sourceActionsDisabled,
41473
+ iconContainerStyle: largeInspectorActionIconContainerStyle,
40790
41474
  onClick: onDelete,
40791
41475
  renderIcon: (color) => /* @__PURE__ */ jsx199(TrashIcon, {
40792
- style: actionIconStyle3,
40793
- color
41476
+ style: largeInspectorActionIconStyle,
41477
+ color,
41478
+ viewBox: "-120 -96 688 688"
40794
41479
  }),
40795
41480
  children: "Delete"
40796
41481
  })
@@ -41103,7 +41788,7 @@ var QueueJobError = ({ error, modalTitle }) => {
41103
41788
  onClick,
41104
41789
  type: "button",
41105
41790
  style: errorStyle,
41106
- title: error.message,
41791
+ "aria-label": error.message,
41107
41792
  children: error.message
41108
41793
  });
41109
41794
  };
@@ -41435,13 +42120,13 @@ var RenderQueueRepeatItem = ({ job }) => {
41435
42120
 
41436
42121
  // src/components/RenderQueue/SuccessIcon.tsx
41437
42122
  import { jsx as jsx208 } from "react/jsx-runtime";
41438
- var iconStyle3 = {
42123
+ var iconStyle2 = {
41439
42124
  height: RENDER_STATUS_INDICATOR_SIZE,
41440
42125
  width: RENDER_STATUS_INDICATOR_SIZE
41441
42126
  };
41442
42127
  var SuccessIcon = () => {
41443
42128
  return /* @__PURE__ */ jsx208("svg", {
41444
- style: iconStyle3,
42129
+ style: iconStyle2,
41445
42130
  viewBox: "0 0 512 512",
41446
42131
  children: /* @__PURE__ */ jsx208("path", {
41447
42132
  fill: LIGHT_TEXT,
@@ -41625,8 +42310,9 @@ var CaptionQueueItem = ({ job, selected }) => {
41625
42310
  error: job.error,
41626
42311
  modalTitle: "Transcription failed"
41627
42312
  }) : /* @__PURE__ */ jsx209("span", {
42313
+ role: "group",
41628
42314
  style: subtitle2,
41629
- title: message,
42315
+ "aria-label": message,
41630
42316
  children: message
41631
42317
  })
41632
42318
  })
@@ -41951,7 +42637,7 @@ var RenderQueueError = ({ job }) => {
41951
42637
  type: "button",
41952
42638
  style: outputLocation,
41953
42639
  tabIndex,
41954
- title: job.error.message,
42640
+ "aria-label": job.error.message,
41955
42641
  children: job.error.message
41956
42642
  });
41957
42643
  };
@@ -41959,7 +42645,7 @@ var RenderQueueError = ({ job }) => {
41959
42645
  // src/components/RenderQueue/RenderQueueItemStatus.tsx
41960
42646
  import React130, { useCallback as useCallback129, useContext as useContext79 } from "react";
41961
42647
  import { jsx as jsx213 } from "react/jsx-runtime";
41962
- var iconStyle4 = {
42648
+ var iconStyle3 = {
41963
42649
  height: RENDER_STATUS_INDICATOR_SIZE,
41964
42650
  width: RENDER_STATUS_INDICATOR_SIZE
41965
42651
  };
@@ -41993,7 +42679,7 @@ var RenderQueueItemStatus = ({ job }) => {
41993
42679
  style: invisibleStyle,
41994
42680
  onClick,
41995
42681
  children: /* @__PURE__ */ jsx213("svg", {
41996
- style: iconStyle4,
42682
+ style: iconStyle3,
41997
42683
  viewBox: "0 0 512 512",
41998
42684
  children: /* @__PURE__ */ jsx213("path", {
41999
42685
  fill: FAIL_COLOR,
@@ -42004,7 +42690,7 @@ var RenderQueueItemStatus = ({ job }) => {
42004
42690
  }
42005
42691
  if (job.status === "idle") {
42006
42692
  return /* @__PURE__ */ jsx213("svg", {
42007
- style: iconStyle4,
42693
+ style: iconStyle3,
42008
42694
  viewBox: "0 0 512 512",
42009
42695
  children: /* @__PURE__ */ jsx213("path", {
42010
42696
  fill: LIGHT_TEXT,
@@ -42020,7 +42706,7 @@ var RenderQueueItemStatus = ({ job }) => {
42020
42706
  onPointerLeave,
42021
42707
  onClick,
42022
42708
  children: /* @__PURE__ */ jsx213("svg", {
42023
- style: iconStyle4,
42709
+ style: iconStyle3,
42024
42710
  viewBox: "0 0 512 512",
42025
42711
  children: /* @__PURE__ */ jsx213("path", {
42026
42712
  fill: hovered ? WHITE : LIGHT_TEXT,
@@ -42057,7 +42743,7 @@ var RenderQueueItemStatus = ({ job }) => {
42057
42743
  }
42058
42744
  if (job.status === "cancelled") {
42059
42745
  return /* @__PURE__ */ jsx213("svg", {
42060
- style: iconStyle4,
42746
+ style: iconStyle3,
42061
42747
  viewBox: "0 0 512 512",
42062
42748
  children: /* @__PURE__ */ jsx213("path", {
42063
42749
  fill: FAIL_COLOR,
@@ -42125,8 +42811,9 @@ var RenderQueueOutputName = ({ job }) => {
42125
42811
  return job.outName;
42126
42812
  };
42127
42813
  return /* @__PURE__ */ jsx215("span", {
42814
+ role: "group",
42128
42815
  style: style4,
42129
- title: getTitle(),
42816
+ "aria-label": getTitle(),
42130
42817
  children: job.outName
42131
42818
  });
42132
42819
  };
@@ -42184,7 +42871,7 @@ var RenderQueueProgressMessage = ({ job }) => {
42184
42871
  type: "button",
42185
42872
  style: outputLocation2,
42186
42873
  tabIndex,
42187
- title: message,
42874
+ "aria-label": message,
42188
42875
  children: message
42189
42876
  });
42190
42877
  };
@@ -46147,8 +46834,9 @@ var VideoMattingQueueItem = ({ job, selected }) => {
46147
46834
  children: job.displayName
46148
46835
  }),
46149
46836
  /* @__PURE__ */ jsx221("div", {
46837
+ role: "group",
46150
46838
  style: subtitles,
46151
- title: tooltip,
46839
+ "aria-label": tooltip,
46152
46840
  children: job.status === "cancelled" ? /* @__PURE__ */ jsx221(RenderQueueCancelledMessage, {}) : job.status === "failed" ? /* @__PURE__ */ jsx221(QueueJobError, {
46153
46841
  error: job.error,
46154
46842
  modalTitle: "Background removal failed"
@@ -46739,4 +47427,4 @@ var RenderModalHr = () => {
46739
47427
  });
46740
47428
  };
46741
47429
 
46742
- export { subscribeToPreviewServerEvents, getNavigationWindow, pushUrl, clearUrl, reloadUrl, getRoute, StudioServerConnectionCtx, PreviewServerConnection, useStudioConfigRevision, noop, compositionListRenderedRef, CompositionListContext, CompositionListProvider, ScaleLockContext, ScaleLockProvider, getCurrentZoom, setCurrentZoom, getCurrentFrame, setCurrentFrame, getCurrentDuration, setCurrentDuration, getCurrentFps, setCurrentFps, sliderAreaRef, scrollableRef, timelineVerticalScroll, TIMELINE_PADDING, TIMELINE_BORDER, TIMELINE_ITEM_BORDER_BOTTOM, buildTimelineTree, flattenVisibleTreeNodes, getTreeRowHeight, TIMELINE_LAYER_FILMSTRIP_HEIGHT, TIMELINE_VIDEO_INFO_WAVEFORM_HEIGHT, TIMELINE_LAYER_HEIGHT_AUDIO, TIMELINE_LIST_ITEM_ROW_HEIGHT, getTimelineLayerHeight, getXPositionOfItemInTimelineImperatively, TIMELINE_FRAME_WIDTH_AT_MAX_ZOOM, getTimelineMinZoom, clampTimelineZoom, getTimelineZoom, getTimelineWidth, timelineZoomToNormalized, timelineZoomToSliderValue, normalizedToTimelineZoom, sliderValueToTimelineZoom, TIMELINE_ZOOM_SLIDER_PROPS, TimelineWidthContext, TimelineWidthProvider, redrawTimelineSliderFast, TimelineSlider, getTimelineContentWidth, EDGE_SCROLL_VERTICAL_INCREMENT, startTimelineEdgeAutoScroll, getFrameWhileScrollingLeft, isCursorInViewport, ensureFrameIsInViewport, scrollToTimelineXOffset, getScrollPositionForCursorOnLeftEdge, getScrollPositionForCursorOnRightEdge, getFrameIncrementFromWidth, getFrameWhileScrollingRight, getFrameFromX, getFrameFromTimelineDrop, viewportClientXToScrollContentX, TimelineViewportContext, TimelineViewportProvider, deriveCanvasContentFromUrl, ZoomPersistor, TimelineZoomCtx, TimelineZoomContext, SelectedModalContext, SetSelectedModalContext, StudioProtocolInternals, Transform3DModeStateContext, Transform3DModeStateProvider, calculateTimeline, getPreviewFileType, copyText, timelineSequenceNodePathToKey, timelineNodePathInfoToKey, persistEditorShowGuidesOption, loadEditorShowGuidesOption, persistGuidesList, loadGuidesList, EditorShowGuidesContext, ModalHeader, toggleBooleanMapKey, openFolderKey, persistExpandedFolders, ExpandedFoldersContext, buildAssetFolderStructure, splitParentIntoNameAndParent, getKeysToExpand, createFolderTree, sortFolderTreeAlphabetically, FolderContext, FolderContextProvider, CollapsedFolderIcon, ExpandedFolderIcon, ExpandedFolderIconSolid, getRelativeFileLocation, formatFileLocation, formatContextForAgents, getGitSourceName, getDefaultOpenInTarget, openGitSource, getGitMenuItem, getOriginalPosition, getSourceMap, resolveFileSource, parseError, getOriginalLocationFromStack, openInEditor, openInCodingAgent, openOriginalPositionInEditor, findOriginalPositionInFileAtProperty, useCachedCompositionComponentInfo, preloadCompositionComponentInfo, getFileManagerName, ClipboardIcon, getConfigureDefaultAppsMenuItems, getOpenInMenuItems, getCompositionMenuItems, getCompositionContextMenuItems, EllipsisIcon, useMobileLayout, MenuDivider, CaretDown, MenuContent, InlineDropdown, isCompositionStill, StillIcon, FilmIcon, CompositionOrStillIcon, ContextMenu, ContextMenuForTarget, hasResolvedStack, useResolvedStack, canShowUpdates, useUpdateStatus, SettingsProvider, useSettings, getPreferredEditorId, useEditorOpening, useDefaultCodingAgentInfo, useConfigureDefaultApps, useOpenInMenuApps, explorerSidebarTabs, useSelectAsset, StaticFilesProvider, useStaticFiles, useSelectComposition, InitialCompositionLoader, Checkmark, ExpandedTracksGetterContext, ExpandedTracksSetterContext, ExpandedTracksProvider, optionsSidebarTabs, getKeyframeSourceFrame, resolveKeyframeSourceFrame, getKeyframeDisplayOffset, getNodeKeyframes, getNodeHasKeyframes, getTimelineEasingSegments, parseKeyframeFieldFromNodePath, filterTimelineExpandedTree, getSelectedTimelineExpandedRowKeys, isTimelineExpandedNodeSelected, getClipboardFigmaHtml, getClipboardImageFiles, getClipboardSvgMarkup, ShortcutHint, Button, ModalButton, ModalFooterContainer, useConfirmationDialog, ConfirmationDialog, addEffect, callAddKeyframes, callAddEffectKeyframe, findTrackForNodePathInfo, saveEffectProp, subscribeToSequenceProps, unsubscribeFromSequenceProps, saveSequenceProps2 as saveSequenceProps, OverrideIdToNodePathMappingsRefContext, SequencePropsSubscriptionProvider, duplicateSequencesFromSource, getTimelineSequenceSplitEligibility, splitTimelineSequenceFromSource, splitSelectedTimelineItems, useDeleteTimelineItems, TIMELINE_SELECTED_BACKGROUND, TIMELINE_EXPANDED_SELECTED_BACKGROUND, TIMELINE_SELECTED_LABEL_BACKGROUND, getTimelineSelectedLabelStyle, getTimelineColor, getTimelineSelectedTrackHighlightStyle, TIMELINE_BACKGROUND, TIMELINE_TICKS_BACKGROUND, isTimelineSelectionModifierEvent, shouldSelectTimelineRowOnPointerDown, getTimelineSelectionFromNodePathInfo, getTimelineSequenceSelectionKey, TimelineSelectAllKeybindings, TimelineSelectableItemsProvider, TimelineSelectionProvider, useTimelineSelection, TIMELINE_MARQUEE_ITEM_ATTR, TIMELINE_SCRUBBER_ATTR, useCurrentTimelineSelectionStateAsRef, useTimelineMarqueeSelection, useTimelineMarqueeSelectableItem, useTimelineRowSelection, useTimelineKeyframeSelection, useTimelineGuideSelection, useTimelineRowContainsSelection, useTimelineRowHighlightBackground, SegmentedButton, SidebarContext, SidebarContextProvider, InspectorOpenInEditor, GearIcon, useBreakpoint, addAssetCacheBust, getCachedMediaMetadata, useMediaMetadata, remotion_outputsBase, getAssetPreviewMetadata, getAssetMetadata, prepareElementInstall, getFromForDrop, getAssetElementFromPath, hasSvgFile, getElementPositionForDrop, getCompositionPositionForDrop, pickFilesToImport, importAssets, importFigmaClipboard, insertSvgMarkup, importRemoteAsset, insertRemoteAudio, insertExistingAssets, insertComponent, insertComposition, insertElement, forceSpecificCursor, stopForcingSpecificCursor, ForceSpecificCursor, AudioIcon, AudioFileIcon, RightAlignInput, RemotionInput, RemTextarea, useRuntimeValue, useRuntimeValueSelector, useRuntimeValueSnapshots, cropFieldKeys, canEditSelectedOutlineCrop, translateFieldKey, scaleFieldKey, rotateFieldKey, transformOriginFieldKey, getUvHandlePosition, getUvCoordinateForPoint, tuplesEqual2 as tuplesEqual, getUvHandleConnectionLines, getUvHandleConnectionEllipses, getUvEllipseInteractiveControls, constrainUv, roundUvCoordinate, roundNumericUvEllipseValue, getSelectedUvHandles, parseTransformOrigin, parsedTransformOriginToUv, serializeTransformOrigin, getOutlineSelectionInteraction, getSelectedSequenceKeys, getSequenceKeysContainingSelection, measureOutlineTargets, midpoint, dot, vectorLength, vectorBetween, getAngleDegrees, getSelectedOutlineRotationDeltaDegrees, getRotationCursor, getSelectedOutlineRotationCornerInfo, getSelectedOutlineRotationPivot, getSelectedEffectFieldsBySequenceKey, getSelectedCropInfo, getSelectedTransformOriginInfo, getSelectedRotationInfo, getSequencesWithSelectableOutlines, parseCssRotation, parseTranslate, serializeTranslate, InputDragger, TimelineLayerEye, TimelineLayerEyeSpacer, getSelectedOutlineActiveSchema, getSelectedOutlineDragStates, getSelectedOutlineDragValues, applySelectedOutlineDragAxisLock, isSelectedOutlineDragPastThreshold, getSelectedOutlineDragChanges, getSelectedOutlineCropFollowingTransformOrigin, getSelectedOutlineCropDragValues, getSelectedOutlineCropDragChanges, getSelectedOutlineKeyboardNudgeDeltas, getSelectedOutlineScaleEdgeInfo, getSelectedOutlineScaleDragStates, getSelectedOutlineScaleDragValues, getSelectedOutlineScaleDragChanges, getSelectedOutlineRotationDragStates, getSelectedOutline3DRotationDragValues, getSelectedOutlineRotationDragValues, selectedOutlineRotationSnapStepDegrees, snapSelectedOutlineRotationDeltaDegrees, getSelectedOutlineRotationDragChanges, clearSelectedOutlineDragOverrides, getSelectedOutlineKeyboardNudgeDirection, clearSelectedOutlineScaleDragOverrides, clearSelectedOutlineRotationDragOverrides, compensateTranslateForTransformOrigin, getSelectedOutlineTransformOriginDragChanges, uvsEqual, getSelectedOutlineTransformOriginLockedAxis, applySelectedOutlineTransformOriginAxisLock, snapSelectedOutlineUv, snapSelectedOutlineTransformOriginUv, commitPendingInspectorFields, getConnectedCompositions, createDragAwareDoubleClickTracker, getCopyContextForAgentsMenuItem, getTimelineAssetLinkInfo, openTimelineAssetLink, parsePath, serializeInstructions, normalizePath, propStatusHas3DTransformValue, getCachedImageMetadata, getAssetActionAvailability, useAssetContextMenuItems, FileIcon, PicIcon, AssetFileIcon, Tabs, Tab, ObserveDefaultProps, TranscriptionIcon, sectionHeader2 as sectionHeader, InspectorQuickAction, getStaticFileBaseName, getStaticFileRenameSelection, getRenamedStaticFilePath, validateStaticFileRename, useRenameStaticFile, downloadBlob, SegmentedControl, Combobox, InfoBubble, InlineRemoveButton, optionRow, label2 as label, rightRow, input, Checkbox, DataEditor, LicenseExplanation, FastRefreshContext, resolvedStackToSymbolicated, slugifyName, validateCompositionName, validateCompositionDimension, validateCompositionDuration, useRenameComposition, useCopyFeedback, CopyIcon, BrowseElementsIcon, TimelineExpandArrowButton, TimelineExpandArrowSpacer, TimelineRowSelectedBackgroundContext, TimelineRowChrome, renderFrame, TimelineKeyframeDiamondIcon, TimelineKeyframeDragStateProvider, useTimelineKeyframeDragState, useTimelineKeyframeDrag, TimelineKeyframeEasingLine, useResolveStackAndReactToChange, useOpenSequenceInApps, useRenameSequence, TimelineKeyframeTracksProvider, getKeyframedSequenceDragTargets, SnowflakeIcon, FullscreenIcon, UploadIcon, TimelineExpandedRow, useTimelineSequenceHasExpandableContent, useTimelineExpandedTree, getDefaultOutputBaseName, validatePublicOutputName, getSequenceFreezeFrameMenuItem, CircularProgress, makeRetryPayload, makeClientRetryPayload, SuccessIcon, isRestoredClientJob, RenderQueueOpenInFinderItem, getClientRenderProgressMessage, saveOutputFile, registerClientRender, persistSelectedOptionsSidebarPanel, OptionsPanel, DismissableModal, VerticalTab, RenderModalHr };
47430
+ export { parsePath, serializeInstructions, normalizePath, interpolatePaths, subscribeToPreviewServerEvents, getNavigationWindow, pushUrl, clearUrl, reloadUrl, getRoute, StudioServerConnectionCtx, PreviewServerConnection, useStudioConfigRevision, noop, compositionListRenderedRef, CompositionListContext, CompositionListProvider, ScaleLockContext, ScaleLockProvider, getCurrentZoom, setCurrentZoom, getCurrentFrame, setCurrentFrame, getCurrentDuration, setCurrentDuration, getCurrentFps, setCurrentFps, sliderAreaRef, scrollableRef, timelineVerticalScroll, TIMELINE_PADDING, TIMELINE_BORDER, TIMELINE_ITEM_BORDER_BOTTOM, buildTimelineTree, flattenVisibleTreeNodes, getTreeRowHeight, TIMELINE_LAYER_FILMSTRIP_HEIGHT, TIMELINE_VIDEO_INFO_WAVEFORM_HEIGHT, TIMELINE_LAYER_HEIGHT_AUDIO, TIMELINE_LIST_ITEM_ROW_HEIGHT, getTimelineLayerHeight, getXPositionOfItemInTimelineImperatively, TIMELINE_FRAME_WIDTH_AT_MAX_ZOOM, getTimelineMinZoom, clampTimelineZoom, getTimelineZoom, getTimelineWidth, timelineZoomToNormalized, timelineZoomToSliderValue, normalizedToTimelineZoom, sliderValueToTimelineZoom, TIMELINE_ZOOM_SLIDER_PROPS, TimelineWidthContext, TimelineWidthProvider, redrawTimelineSliderFast, TimelineSlider, getTimelineContentWidth, EDGE_SCROLL_VERTICAL_INCREMENT, startTimelineEdgeAutoScroll, getFrameWhileScrollingLeft, isCursorInViewport, ensureFrameIsInViewport, scrollToTimelineXOffset, getScrollPositionForCursorOnLeftEdge, getScrollPositionForCursorOnRightEdge, getFrameIncrementFromWidth, getFrameWhileScrollingRight, getFrameFromX, getFrameFromTimelineDrop, viewportClientXToScrollContentX, TimelineViewportContext, TimelineViewportProvider, deriveCanvasContentFromUrl, ZoomPersistor, TimelineZoomCtx, TimelineZoomContext, SelectedModalContext, SetSelectedModalContext, StudioProtocolInternals, Transform3DModeStateContext, Transform3DModeStateProvider, calculateTimeline, getPreviewFileType, copyText, timelineSequenceNodePathToKey, timelineNodePathInfoToKey, persistEditorShowGuidesOption, loadEditorShowGuidesOption, persistGuidesList, loadGuidesList, EditorShowGuidesContext, ModalHeader, toggleBooleanMapKey, openFolderKey, persistExpandedFolders, ExpandedFoldersContext, buildAssetFolderStructure, splitParentIntoNameAndParent, getKeysToExpand, createFolderTree, sortFolderTreeAlphabetically, FolderContext, FolderContextProvider, CollapsedFolderIcon, ExpandedFolderIcon, ExpandedFolderIconSolid, getRelativeFileLocation, formatFileLocation, formatContextForAgents, getGitSourceName, getDefaultOpenInTarget, openGitSource, getGitMenuItem, getOriginalPosition, getSourceMap, resolveFileSource, parseError, getOriginalLocationFromStack, openInEditor, openInCodingAgent, openOriginalPositionInEditor, findOriginalPositionInFileAtProperty, useCachedCompositionComponentInfo, preloadCompositionComponentInfo, getFileManagerName, ClipboardIcon, getConfigureDefaultAppsMenuItems, getOpenInMenuItems, getCompositionMenuItems, getCompositionContextMenuItems, EllipsisIcon, useMobileLayout, MenuDivider, CaretDown, MenuContent, InlineDropdown, isCompositionStill, StillIcon, FilmIcon, CompositionOrStillIcon, ContextMenu, ContextMenuForTarget, hasResolvedStack, useResolvedStack, canShowUpdates, useUpdateStatus, SettingsProvider, useSettings, getPreferredEditorId, useEditorOpening, useDefaultCodingAgentInfo, useConfigureDefaultApps, useOpenInMenuApps, explorerSidebarTabs, useSelectAsset, StaticFilesProvider, useStaticFiles, useSelectComposition, InitialCompositionLoader, Checkmark, ExpandedTracksGetterContext, ExpandedTracksSetterContext, ExpandedTracksProvider, optionsSidebarTabs, getKeyframeSourceFrame, resolveKeyframeSourceFrame, getKeyframeDisplayOffset, getNodeKeyframes, getNodeHasKeyframes, getTimelineEasingSegments, parseKeyframeFieldFromNodePath, filterTimelineExpandedTree, getSelectedTimelineExpandedRowKeys, isTimelineExpandedNodeSelected, getClipboardFigmaHtml, getClipboardImageFiles, getClipboardSvgMarkup, ShortcutHint, Button, ModalButton, ModalFooterContainer, useConfirmationDialog, ConfirmationDialog, addEffect, callAddSequenceKeyframe, callAddKeyframes, callAddEffectKeyframe, findTrackForNodePathInfo, saveEffectProp, subscribeToSequenceProps, unsubscribeFromSequenceProps, saveSequenceProps2 as saveSequenceProps, OverrideIdToNodePathMappingsRefContext, SequencePropsSubscriptionProvider, duplicateSequencesFromSource, getTimelineSequenceSplitEligibility, splitTimelineSequenceFromSource, splitSelectedTimelineItems, useDeleteTimelineItems, TIMELINE_SELECTED_BACKGROUND, TIMELINE_EXPANDED_SELECTED_BACKGROUND, TIMELINE_SELECTED_LABEL_BACKGROUND, getTimelineSelectedLabelStyle, getTimelineColor, getTimelineSelectedTrackHighlightStyle, TIMELINE_BACKGROUND, TIMELINE_TICKS_BACKGROUND, isTimelineSelectionModifierEvent, shouldSelectTimelineRowOnPointerDown, getTimelineSelectionFromNodePathInfo, getTimelineSequenceSelectionKey, TimelineSelectAllKeybindings, TimelineSelectableItemsProvider, TimelineSelectionProvider, useTimelineSelection, TIMELINE_MARQUEE_ITEM_ATTR, TIMELINE_SCRUBBER_ATTR, useCurrentTimelineSelectionStateAsRef, useTimelineMarqueeSelection, useTimelineMarqueeSelectableItem, useTimelineRowSelection, useTimelineKeyframeSelection, useTimelineGuideSelection, useTimelineRowContainsSelection, useTimelineRowHighlightBackground, SegmentedButton, SidebarContext, SidebarContextProvider, InspectorOpenInEditor, GearIcon, useBreakpoint, addAssetCacheBust, getCachedMediaMetadata, useMediaMetadata, remotion_outputsBase, getAssetPreviewMetadata, getAssetMetadata, prepareElementInstall, getFromForDrop, getAssetElementFromPath, hasSvgFile, getElementPositionForDrop, getCompositionPositionForDrop, pickFilesToImport, importAssets, importFigmaClipboard, insertSvgMarkup, importRemoteAsset, insertRemoteAudio, insertExistingAssets, insertComponent, insertComposition, insertElement, forceSpecificCursor, stopForcingSpecificCursor, ForceSpecificCursor, AudioIcon, AudioFileIcon, RightAlignInput, RemotionInput, RemTextarea, useRuntimeValue, useRuntimeValueSelector, useRuntimeValueSnapshots, cropFieldKeys, canEditSelectedOutlineCrop, translateFieldKey, scaleFieldKey, rotateFieldKey, transformOriginFieldKey, getUvHandlePosition, getUvCoordinateForPoint, tuplesEqual2 as tuplesEqual, getUvHandleConnectionLines, getUvHandleConnectionEllipses, getUvEllipseInteractiveControls, constrainUv, roundUvCoordinate, roundNumericUvEllipseValue, getSelectedUvHandles, parseTransformOrigin, parsedTransformOriginToUv, serializeTransformOrigin, getOutlineSelectionInteraction, getSelectedSequenceKeys, getSequenceKeysContainingSelection, measureOutlineTargets, midpoint, dot, vectorLength, vectorBetween, getAngleDegrees, getSelectedOutlineRotationDeltaDegrees, getRotationCursor, getSelectedOutlineRotationCornerInfo, getSelectedOutlineRotationPivot, getSelectedEffectFieldsBySequenceKey, getSelectedCropInfo, getSelectedTransformOriginInfo, getSelectedRotationInfo, getSequencesWithSelectableOutlines, parseCssRotation, parseTranslate, serializeTranslate, InputDragger, TimelineLayerEye, TimelineLayerEyeSpacer, getSelectedOutlineActiveSchema, getSelectedOutlineDragStates, getSelectedOutlineDragValues, applySelectedOutlineDragAxisLock, isSelectedOutlineDragPastThreshold, getSelectedOutlineDragChanges, getSelectedOutlineCropFollowingTransformOrigin, getSelectedOutlineCropDragValues, getSelectedOutlineCropDragChanges, getSelectedOutlineKeyboardNudgeDeltas, getSelectedOutlineScaleEdgeInfo, getSelectedOutlineScaleDragStates, getSelectedOutlineScaleDragValues, getSelectedOutlineScaleDragChanges, getSelectedOutlineRotationDragStates, getSelectedOutline3DRotationDragValues, getSelectedOutlineRotationDragValues, selectedOutlineRotationSnapStepDegrees, snapSelectedOutlineRotationDeltaDegrees, getSelectedOutlineRotationDragChanges, clearSelectedOutlineDragOverrides, getSelectedOutlineKeyboardNudgeDirection, clearSelectedOutlineScaleDragOverrides, clearSelectedOutlineRotationDragOverrides, compensateTranslateForTransformOrigin, getSelectedOutlineTransformOriginDragChanges, uvsEqual, getSelectedOutlineTransformOriginLockedAxis, applySelectedOutlineTransformOriginAxisLock, snapSelectedOutlineUv, snapSelectedOutlineTransformOriginUv, commitPendingInspectorFields, getConnectedCompositions, createDragAwareDoubleClickTracker, getCopyContextForAgentsMenuItem, getTimelineAssetLinkInfo, openTimelineAssetLink, propStatusHas3DTransformValue, getCachedImageMetadata, getAssetActionAvailability, useAssetContextMenuItems, FileIcon, PicIcon, AssetFileIcon, Tabs, Tab, ObserveDefaultProps, TranscriptionIcon, sectionHeader2 as sectionHeader, InspectorQuickAction, getStaticFileBaseName, getStaticFileRenameSelection, getRenamedStaticFilePath, validateStaticFileRename, useRenameStaticFile, downloadBlob, SegmentedControl, Combobox, InfoBubble, InlineRemoveButton, optionRow, label2 as label, rightRow, input, Checkbox, DataEditor, LicenseExplanation, FastRefreshContext, resolvedStackToSymbolicated, slugifyName, validateCompositionName, validateCompositionDimension, validateCompositionDuration, useRenameComposition, useCopyFeedback, CopyIcon, BrowseElementsIcon, TimelineExpandArrowButton, TimelineExpandArrowSpacer, TimelineRowSelectedBackgroundContext, TimelineRowChrome, renderFrame, TimelineKeyframeDiamondIcon, TimelineKeyframeDragStateProvider, useTimelineKeyframeDragState, useTimelineKeyframeDrag, TimelineKeyframeEasingLine, useResolveStackAndReactToChange, useOpenSequenceInApps, useRenameSequence, TimelineKeyframeTracksProvider, getKeyframedSequenceDragTargets, SnowflakeIcon, FullscreenIcon, UploadIcon, TimelineExpandedRow, useTimelineSequenceHasExpandableContent, useTimelineExpandedTree, getDefaultOutputBaseName, validatePublicOutputName, getSequenceFreezeFrameMenuItem, CircularProgress, makeRetryPayload, makeClientRetryPayload, SuccessIcon, isRestoredClientJob, RenderQueueOpenInFinderItem, getClientRenderProgressMessage, saveOutputFile, registerClientRender, persistSelectedOptionsSidebarPanel, OptionsPanel, DismissableModal, VerticalTab, RenderModalHr };