@remotion/studio 4.0.526 → 4.0.528

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 (309) hide show
  1. package/dist/components/AgentPrompt.js +1 -2
  2. package/dist/components/AudioWaveform.d.ts +1 -0
  3. package/dist/components/AudioWaveform.js +10 -14
  4. package/dist/components/Canvas.js +88 -26
  5. package/dist/components/CanvasCaptureDropHandler.js +63 -0
  6. package/dist/components/CanvasOrLoading.js +10 -2
  7. package/dist/components/CodeFrame.js +1 -1
  8. package/dist/components/ColorPicker/checker.d.ts +1 -1
  9. package/dist/components/CompositionSelectorItem.js +1 -0
  10. package/dist/components/CurrentAsset.js +4 -2
  11. package/dist/components/EditorRuler/Ruler.js +6 -3
  12. package/dist/components/EffectPickerModal.js +69 -43
  13. package/dist/components/ElementInstallConfirmation.js +3 -3
  14. package/dist/components/ElementLibrariesSettings.d.ts +2 -0
  15. package/dist/components/ElementLibrariesSettings.js +200 -0
  16. package/dist/components/InitialCompositionLoader.js +4 -2
  17. package/dist/components/InlineDropdown.js +26 -2
  18. package/dist/components/InlineEditableTitle.js +1 -0
  19. package/dist/components/InspectorOpenInEditor.js +13 -0
  20. package/dist/components/InspectorPanel/AlignmentControls.js +28 -9
  21. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +2 -1
  22. package/dist/components/InspectorPanel/CompositionInspector.js +3 -3
  23. package/dist/components/InspectorPanel/CompositionMetadata.js +4 -0
  24. package/dist/components/InspectorPanel/EasingInspector.js +6 -2
  25. package/dist/components/InspectorPanel/ElementLibraryButton.js +2 -1
  26. package/dist/components/InspectorPanel/KeyframeEasingNavigator.js +1 -1
  27. package/dist/components/InspectorPanel/KeyframeInspector.js +28 -24
  28. package/dist/components/InspectorPanel/MultiSequenceInspector.js +32 -1
  29. package/dist/components/InspectorPanel/MultiSequenceNumberField.js +1 -1
  30. package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -1
  31. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +70 -2
  32. package/dist/components/InspectorPanel/SequenceWrapAction.d.ts +8 -0
  33. package/dist/components/InspectorPanel/SequenceWrapAction.js +151 -0
  34. package/dist/components/InspectorPanel/common.js +1 -0
  35. package/dist/components/InspectorPanel/easing-inspector-selection.d.ts +2 -1
  36. package/dist/components/InspectorPanel/easing-inspector-selection.js +4 -3
  37. package/dist/components/InspectorPanel/keyframe-inspector-frame.d.ts +2 -1
  38. package/dist/components/InspectorPanel/keyframe-inspector-frame.js +2 -2
  39. package/dist/components/InspectorPanel/styles.js +2 -0
  40. package/dist/components/InspectorPanel/use-composition-actions.js +1 -0
  41. package/dist/components/InspectorSequenceSection.d.ts +1 -0
  42. package/dist/components/InspectorSequenceSection.js +7 -5
  43. package/dist/components/InspectorSourceLocation.js +3 -0
  44. package/dist/components/KeyboardShortcutsSettings.js +1 -1
  45. package/dist/components/Menu/styles.d.ts +2 -2
  46. package/dist/components/MenuBuildIndicator.js +1 -0
  47. package/dist/components/Modals.js +7 -6
  48. package/dist/components/ModelManager.js +10 -9
  49. package/dist/components/NewComposition/CancelButton.js +11 -5
  50. package/dist/components/NewComposition/InputDragger.d.ts +3 -1
  51. package/dist/components/NewComposition/InputDragger.js +28 -9
  52. package/dist/components/NewComposition/NewComposition.js +7 -6
  53. package/dist/components/NewComposition/RemInput.d.ts +1 -1
  54. package/dist/components/NewComposition/menu-typeahead.js +1 -1
  55. package/dist/components/Preview.js +4 -0
  56. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -0
  57. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -0
  58. package/dist/components/RadioButton.js +1 -0
  59. package/dist/components/RenderModal/DataEditor.js +4 -1
  60. package/dist/components/RenderModal/SchemaEditor/create-zod-values.js +1 -2
  61. package/dist/components/RenderModal/WebRenderModalPicture.js +1 -2
  62. package/dist/components/RenderQueue/CaptionQueueItem.js +19 -7
  63. package/dist/components/RenderQueue/CaptionQueueProcessor.js +65 -15
  64. package/dist/components/RenderQueue/QueueJobError.d.ts +8 -0
  65. package/dist/components/RenderQueue/QueueJobError.js +24 -0
  66. package/dist/components/RenderQueue/QueueJobErrorModal.d.ts +8 -0
  67. package/dist/components/RenderQueue/QueueJobErrorModal.js +63 -0
  68. package/dist/components/RenderQueue/RenderQueueItemCancelButton.d.ts +3 -1
  69. package/dist/components/RenderQueue/RenderQueueItemCancelButton.js +11 -4
  70. package/dist/components/RenderQueue/RenderQueueRepeat.d.ts +3 -1
  71. package/dist/components/RenderQueue/RenderQueueRepeat.js +20 -3
  72. package/dist/components/RenderQueue/VideoMattingQueueItem.js +25 -27
  73. package/dist/components/RenderQueue/VideoMattingQueueProcessor.js +68 -28
  74. package/dist/components/RenderQueue/caption-job-types.d.ts +9 -1
  75. package/dist/components/RenderQueue/context.d.ts +4 -0
  76. package/dist/components/RenderQueue/context.js +58 -8
  77. package/dist/components/RenderQueue/index.js +3 -3
  78. package/dist/components/RenderQueue/load-model-for-job.d.ts +2 -1
  79. package/dist/components/RenderQueue/load-model-for-job.js +5 -1
  80. package/dist/components/RenderQueue/video-matting-job-types.d.ts +13 -6
  81. package/dist/components/RendersTab.js +2 -0
  82. package/dist/components/SelectedOutlineCropControls.js +2 -1
  83. package/dist/components/SelectedOutlineEditingHandles.js +9 -2
  84. package/dist/components/SelectedOutlineElement.js +9 -3
  85. package/dist/components/SelectedOutlineKeyboardControls.d.ts +2 -4
  86. package/dist/components/SelectedOutlineKeyboardControls.js +4 -22
  87. package/dist/components/SelectedOutlineOverlay.js +152 -106
  88. package/dist/components/SelectedOutlinePathPoints.d.ts +8 -0
  89. package/dist/components/SelectedOutlinePathPoints.js +433 -0
  90. package/dist/components/SelectedOutlinePolygon.js +21 -46
  91. package/dist/components/SelectedOutlineRenderer.d.ts +3 -5
  92. package/dist/components/SelectedOutlineRenderer.js +32 -136
  93. package/dist/components/SelectedOutlineSnapIndicators.d.ts +6 -0
  94. package/dist/components/SelectedOutlineSnapIndicators.js +16 -12
  95. package/dist/components/SelectedOutlineTransformOriginHandle.js +3 -2
  96. package/dist/components/SelectedOutlineUvControls.js +12 -7
  97. package/dist/components/SequencePropsSubscriptionProvider.d.ts +3 -0
  98. package/dist/components/SequencePropsSubscriptionProvider.js +8 -6
  99. package/dist/components/SettingsModal.js +30 -3
  100. package/dist/components/SettingsModalFooter.d.ts +1 -0
  101. package/dist/components/SettingsModalFooter.js +7 -3
  102. package/dist/components/ShowOutlinesProvider.js +1 -1
  103. package/dist/components/SkillsSettings.d.ts +0 -1
  104. package/dist/components/SkillsSettings.js +13 -14
  105. package/dist/components/Splitter/SplitterElement.js +1 -2
  106. package/dist/components/TimeValue.js +1 -1
  107. package/dist/components/Timeline/LoopedTimelineIndicators.d.ts +1 -0
  108. package/dist/components/Timeline/LoopedTimelineIndicators.js +7 -6
  109. package/dist/components/Timeline/TimelineArrayField.js +1 -1
  110. package/dist/components/Timeline/TimelineClipboardKeybindings.js +0 -1
  111. package/dist/components/Timeline/TimelineColorField.js +1 -1
  112. package/dist/components/Timeline/TimelineDeleteKeybindings.js +6 -9
  113. package/dist/components/Timeline/TimelineDragHandler.js +1 -1
  114. package/dist/components/Timeline/TimelineEffectItem.js +1 -0
  115. package/dist/components/Timeline/TimelineEffectPropItem.d.ts +1 -0
  116. package/dist/components/Timeline/TimelineEffectPropItem.js +12 -5
  117. package/dist/components/Timeline/TimelineExpandArrowButton.js +1 -0
  118. package/dist/components/Timeline/TimelineExpandedRow.d.ts +1 -0
  119. package/dist/components/Timeline/TimelineExpandedRow.js +6 -4
  120. package/dist/components/Timeline/TimelineExpandedSection.d.ts +1 -0
  121. package/dist/components/Timeline/TimelineExpandedSection.js +2 -2
  122. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.d.ts +1 -0
  123. package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +3 -1
  124. package/dist/components/Timeline/TimelineFieldLabel.js +1 -0
  125. package/dist/components/Timeline/TimelineFontFamilyField.js +12 -12
  126. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +1 -0
  127. package/dist/components/Timeline/TimelineKeyframeControls.js +40 -28
  128. package/dist/components/Timeline/TimelineLayerChildren.js +1 -1
  129. package/dist/components/Timeline/TimelineList.js +1 -1
  130. package/dist/components/Timeline/TimelineNumberField.js +2 -4
  131. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +1 -1
  132. package/dist/components/Timeline/TimelineSelection.d.ts +9 -9
  133. package/dist/components/Timeline/TimelineSelection.js +16 -9
  134. package/dist/components/Timeline/TimelineSequence.d.ts +3 -1
  135. package/dist/components/Timeline/TimelineSequence.js +65 -21
  136. package/dist/components/Timeline/TimelineSequenceFrame.js +1 -0
  137. package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
  138. package/dist/components/Timeline/TimelineSequenceItem.js +46 -8
  139. package/dist/components/Timeline/TimelineSequencePropItem.d.ts +3 -0
  140. package/dist/components/Timeline/TimelineSequencePropItem.js +262 -25
  141. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +11 -13
  142. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +98 -77
  143. package/dist/components/Timeline/TimelineTextContentField.js +27 -4
  144. package/dist/components/Timeline/TimelineTimeIndicators.js +10 -5
  145. package/dist/components/Timeline/TimelineTrack.js +1 -1
  146. package/dist/components/Timeline/TimelineTrimTooltip.d.ts +11 -0
  147. package/dist/components/Timeline/TimelineTrimTooltip.js +41 -0
  148. package/dist/components/Timeline/TimelineVideoInfo.d.ts +1 -0
  149. package/dist/components/Timeline/TimelineVideoInfo.js +13 -10
  150. package/dist/components/Timeline/TimelineViewport.d.ts +1 -0
  151. package/dist/components/Timeline/TimelineViewport.js +10 -1
  152. package/dist/components/Timeline/delete-selected-keyframe.js +22 -8
  153. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +1 -5
  154. package/dist/components/Timeline/delete-selected-timeline-item.js +9 -95
  155. package/dist/components/Timeline/get-animation-item-selection-for-frame.d.ts +2 -1
  156. package/dist/components/Timeline/get-animation-item-selection-for-frame.js +7 -5
  157. package/dist/components/Timeline/get-keyframed-sequence-drag-targets.d.ts +23 -0
  158. package/dist/components/Timeline/get-keyframed-sequence-drag-targets.js +57 -0
  159. package/dist/components/Timeline/get-node-keyframes.d.ts +2 -1
  160. package/dist/components/Timeline/get-node-keyframes.js +6 -4
  161. package/dist/components/Timeline/get-playback-rate-keyframe-changes.d.ts +21 -0
  162. package/dist/components/Timeline/get-playback-rate-keyframe-changes.js +142 -0
  163. package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +3 -1
  164. package/dist/components/Timeline/get-sequence-context-menu-items.js +13 -1
  165. package/dist/components/Timeline/get-timeline-keyframes.d.ts +15 -2
  166. package/dist/components/Timeline/get-timeline-keyframes.js +44 -6
  167. package/dist/components/Timeline/keyframe-clipboard.js +17 -3
  168. package/dist/components/Timeline/split-selected-timeline-item.d.ts +13 -10
  169. package/dist/components/Timeline/split-selected-timeline-item.js +61 -35
  170. package/dist/components/Timeline/timeline-field-display-utils.js +1 -0
  171. package/dist/components/Timeline/timeline-field-row-layout.js +1 -0
  172. package/dist/components/Timeline/use-delete-timeline-items.js +17 -11
  173. package/dist/components/Timeline/use-expanded-track-keyframe-rows.d.ts +2 -1
  174. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +3 -1
  175. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +7 -3
  176. package/dist/components/Timeline/use-timeline-keyframe-drag.js +28 -19
  177. package/dist/components/TimelineCombobox.js +1 -0
  178. package/dist/components/Transcription/Models.js +1 -1
  179. package/dist/components/Transcription/TranscriptionModal.js +18 -11
  180. package/dist/components/Transcription/TranscriptionModalWithOptionalWhisper.js +1 -1
  181. package/dist/components/Transcription/resample-media-to-16-khz.d.ts +2 -1
  182. package/dist/components/Transcription/resample-media-to-16-khz.js +20 -2
  183. package/dist/components/UpdatesSettings.js +2 -0
  184. package/dist/components/VideoMatting/Models.js +1 -1
  185. package/dist/components/VideoMatting/VideoMattingModal.js +30 -47
  186. package/dist/components/VideoMatting/VideoMattingModalWithOptionalPackage.js +1 -1
  187. package/dist/components/WebMcp.js +23 -40
  188. package/dist/components/composition-drop-preview.d.ts +9 -2
  189. package/dist/components/composition-drop-preview.js +8 -4
  190. package/dist/components/composition-menu-items.js +4 -4
  191. package/dist/components/delete-jsx-nodes-api.d.ts +2 -0
  192. package/dist/components/{delete-jsx-node-api.js → delete-jsx-nodes-api.js} +5 -5
  193. package/dist/components/effect-drag-and-drop.d.ts +13 -5
  194. package/dist/components/effect-drag-and-drop.js +19 -4
  195. package/dist/components/get-open-in-menu-items.d.ts +2 -1
  196. package/dist/components/get-open-in-menu-items.js +24 -8
  197. package/dist/components/keyboard-shortcuts.d.ts +4 -4
  198. package/dist/components/keyboard-shortcuts.js +3 -1
  199. package/dist/components/public-output-name.d.ts +1 -0
  200. package/dist/components/public-output-name.js +7 -3
  201. package/dist/components/selected-outline-drag.d.ts +1 -6
  202. package/dist/components/selected-outline-drag.js +22 -6
  203. package/dist/components/selected-outline-geometry.d.ts +2 -18
  204. package/dist/components/selected-outline-measurement.d.ts +23 -41
  205. package/dist/components/selected-outline-measurement.js +14 -252
  206. package/dist/components/selected-outline-order.d.ts +4 -11
  207. package/dist/components/selected-outline-order.js +2 -254
  208. package/dist/components/selected-outline-snap.d.ts +1 -1
  209. package/dist/components/selected-outline-snap.js +2 -1
  210. package/dist/components/selected-outline-types.d.ts +18 -28
  211. package/dist/components/selected-outline-uv.d.ts +4 -4
  212. package/dist/components/selected-outline-uv.js +6 -111
  213. package/dist/components/sequence-props-api.js +0 -10
  214. package/dist/components/use-selected-outline-control-target.js +12 -21
  215. package/dist/components/wrap-jsx-node-api.d.ts +2 -0
  216. package/dist/components/wrap-jsx-node-api.js +13 -0
  217. package/dist/error-overlay/remotion-overlay/OpenInEditor.js +45 -2
  218. package/dist/error-overlay/remotion-overlay/StackFrame.js +32 -3
  219. package/dist/esm/{CaptionQueueProcessor-k0yrm3dj.mjs → CaptionQueueProcessor-nr7hjcga.mjs} +96 -19
  220. package/dist/esm/LazyModels-ajkn7fs3.mjs +12 -0
  221. package/dist/esm/LazyModels-g1g7cf4e.mjs +12 -0
  222. package/dist/esm/{TranscriptionModal-ymnx1c7m.mjs → TranscriptionModal-e18bzbkb.mjs} +30 -22
  223. package/dist/esm/{VideoMattingModal-05vpczks.mjs → VideoMattingModal-5bz2s4rs.mjs} +47 -62
  224. package/dist/esm/{VideoMattingQueueProcessor-t1hgm2rm.mjs → VideoMattingQueueProcessor-4tkj0f4k.mjs} +69 -26
  225. package/dist/esm/{index-v4tr1bft.mjs → index-09txs1bj.mjs} +5 -0
  226. package/dist/esm/{index-4dsz9035.mjs → index-5ycb9e9q.mjs} +2 -4
  227. package/dist/esm/index-890dd9b3.mjs +768 -0
  228. package/dist/esm/{index-5bfxbpca.mjs → index-8nt6a0mw.mjs} +3 -3
  229. package/dist/esm/{index-5gd8k9yv.mjs → index-9q9w8v9p.mjs} +3 -3
  230. package/dist/esm/{index-x40wwfmt.mjs → index-c2wabcdt.mjs} +8 -6
  231. package/dist/esm/index-dfy1t576.mjs +129 -0
  232. package/dist/esm/index-dh3zk2hv.mjs +220 -0
  233. package/dist/esm/{index-0gewwxse.mjs → index-dpyss74p.mjs} +6179 -5011
  234. package/dist/esm/{index-9x6e1dq0.mjs → index-hqxc6tzp.mjs} +40 -6
  235. package/dist/esm/{index-cdy8v54v.mjs → index-qve7mdfp.mjs} +36 -539
  236. package/dist/esm/{index-eb5txqp6.mjs → index-s6qya2gg.mjs} +8 -88
  237. package/dist/esm/index-t7tbt980.mjs +103 -0
  238. package/dist/esm/{index-g7k2dvar.mjs → index-t7xnxdf8.mjs} +44 -26
  239. package/dist/esm/index-wqc43mw0.mjs +158 -0
  240. package/dist/esm/{index-bs39wngg.mjs → index-x6r9bn12.mjs} +5623 -6218
  241. package/dist/esm/{index-f97r9e2g.mjs → index-xac20sv4.mjs} +46 -57
  242. package/dist/esm/index.mjs +4 -4
  243. package/dist/esm/internals.mjs +13 -10
  244. package/dist/esm/previewEntry.mjs +18 -12
  245. package/dist/esm/renderEntry.mjs +5 -1
  246. package/dist/esm/{resolve-composition-component-location-bt2d6qxq.mjs → resolve-composition-component-location-2hgf6g0a.mjs} +1 -1
  247. package/dist/helpers/calculate-timeline.d.ts +5 -1
  248. package/dist/helpers/calculate-timeline.js +1 -1
  249. package/dist/helpers/checkerboard-background.d.ts +2 -2
  250. package/dist/helpers/colors.d.ts +132 -112
  251. package/dist/helpers/colors.js +117 -95
  252. package/dist/helpers/copy-text.js +1 -16
  253. package/dist/helpers/create-folder-tree.js +2 -1
  254. package/dist/helpers/editor-guide-selection.d.ts +1 -1
  255. package/dist/helpers/editor-ruler.js +23 -12
  256. package/dist/helpers/get-connected-compositions.d.ts +6 -1
  257. package/dist/helpers/get-connected-compositions.js +1 -1
  258. package/dist/helpers/get-sequence-double-click-action.js +1 -1
  259. package/dist/helpers/get-sequence-visible-range.d.ts +1 -1
  260. package/dist/helpers/get-sequence-visible-range.js +2 -5
  261. package/dist/helpers/get-timeline-nestedness.d.ts +1 -1
  262. package/dist/helpers/get-timeline-nestedness.js +1 -1
  263. package/dist/helpers/get-timeline-sequence-sort-key.d.ts +1 -1
  264. package/dist/helpers/get-timeline-sequence-sort-key.js +1 -1
  265. package/dist/helpers/hoverable.js +6 -5
  266. package/dist/helpers/inject-css.js +5 -7
  267. package/dist/helpers/open-in-editor.js +1 -1
  268. package/dist/helpers/prism-vsc-dark-plus.d.ts +1 -1
  269. package/dist/helpers/prism-vsc-dark-plus.js +52 -51
  270. package/dist/helpers/resolve-studio-color.d.ts +1 -0
  271. package/dist/helpers/resolve-studio-color.js +11 -0
  272. package/dist/helpers/studio-css-variables.d.ts +1 -0
  273. package/dist/helpers/studio-css-variables.js +105 -0
  274. package/dist/helpers/studio-pixel-ratio.d.ts +1 -0
  275. package/dist/helpers/studio-pixel-ratio.js +7 -0
  276. package/dist/helpers/studio-runtime-config.d.ts +1 -1
  277. package/dist/helpers/timeline-node-path-key.d.ts +1 -1
  278. package/dist/helpers/timeline-node-path-key.js +2 -2
  279. package/dist/helpers/use-keybinding.d.ts +1 -1
  280. package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -2
  281. package/dist/helpers/use-menu-structure.js +15 -9
  282. package/dist/helpers/use-runtime-values.js +2 -28
  283. package/dist/hot-middleware-client/client.js +5 -3
  284. package/dist/icons/align-center-horizontal.js +2 -1
  285. package/dist/icons/align-left.js +2 -1
  286. package/dist/icons/align-right.js +2 -1
  287. package/dist/icons/{separation.d.ts → background-removal.d.ts} +1 -1
  288. package/dist/icons/background-removal.js +9 -0
  289. package/dist/icons/wrap.d.ts +4 -0
  290. package/dist/icons/wrap.js +10 -0
  291. package/dist/previewEntry.js +2 -0
  292. package/dist/renderEntry.js +2 -0
  293. package/dist/state/modals.d.ts +20 -1
  294. package/dist/state/timeline-sequence-hover.d.ts +6 -16
  295. package/dist/state/timeline-sequence-hover.js +6 -67
  296. package/dist/state/timeline-zoom.js +4 -0
  297. package/package.json +20 -19
  298. package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.d.ts +0 -15
  299. package/dist/components/Timeline/get-easing-selection-after-keyframe-delete.js +0 -31
  300. package/dist/components/delete-jsx-node-api.d.ts +0 -2
  301. package/dist/esm/LazyModels-mtggyjye.mjs +0 -11
  302. package/dist/esm/LazyModels-nk7py0zt.mjs +0 -11
  303. package/dist/esm/index-cw0pnpg5.mjs +0 -50
  304. package/dist/esm/index-k426ye99.mjs +0 -139
  305. package/dist/helpers/get-box-quads-polyfill-internals.d.ts +0 -82
  306. package/dist/helpers/get-box-quads-polyfill-internals.js +0 -2403
  307. package/dist/helpers/get-box-quads-ponyfill.d.ts +0 -10
  308. package/dist/helpers/get-box-quads-ponyfill.js +0 -23
  309. package/dist/icons/separation.js +0 -7
@@ -10,7 +10,9 @@ const use_copy_feedback_1 = require("../helpers/use-copy-feedback");
10
10
  const check_circle_filled_1 = require("../icons/check-circle-filled");
11
11
  const cloud_download_1 = require("../icons/cloud-download");
12
12
  const copy_1 = require("../icons/copy");
13
+ const skills_1 = require("../icons/skills");
13
14
  const trash_1 = require("../icons/trash");
15
+ const ActionTooltip_1 = require("./ActionTooltip");
14
16
  const InlineAction_1 = require("./InlineAction");
15
17
  const ValidationMessage_1 = require("./NewComposition/ValidationMessage");
16
18
  const NotificationCenter_1 = require("./Notifications/NotificationCenter");
@@ -33,7 +35,7 @@ const description = {
33
35
  };
34
36
  const commandField = {
35
37
  alignItems: 'center',
36
- backgroundColor: 'rgba(0, 0, 0, 0.22)',
38
+ backgroundColor: colors_1.BLACK_ALPHA_22,
37
39
  borderRadius: 4,
38
40
  display: 'flex',
39
41
  marginTop: 8,
@@ -59,15 +61,14 @@ const list = {
59
61
  };
60
62
  const skillRow = {
61
63
  alignItems: 'center',
62
- borderBottom: colors_1.BORDER_WHITE_ALPHA_12,
63
64
  display: 'flex',
64
65
  gap: 10,
65
66
  minHeight: 38,
66
- padding: '0 10px',
67
67
  };
68
- const lastSkillRow = {
69
- ...skillRow,
70
- borderBottom: 'none',
68
+ const skillIcon = {
69
+ flexShrink: 0,
70
+ height: 16,
71
+ width: 16,
71
72
  };
72
73
  const statusIcon = {
73
74
  flexShrink: 0,
@@ -75,7 +76,7 @@ const statusIcon = {
75
76
  width: 14,
76
77
  };
77
78
  const skillName = {
78
- color: colors_1.WHITE,
79
+ color: colors_1.LIGHT_TEXT,
79
80
  flex: 1,
80
81
  fontFamily: 'monospace',
81
82
  fontSize: 13,
@@ -107,7 +108,7 @@ const loading = {
107
108
  ...description,
108
109
  marginTop: 14,
109
110
  };
110
- const SkillSettingsRow = ({ isLast, skill }) => {
111
+ const SkillSettingsRow = ({ skill }) => {
111
112
  const { installSkill, removeSkill, skillAction } = (0, SettingsContext_1.useSettings)();
112
113
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
113
114
  const canInstall = !window.remotion_isReadOnlyStudio &&
@@ -127,10 +128,8 @@ const SkillSettingsRow = ({ isLast, skill }) => {
127
128
  const renderRemoveAction = (0, react_1.useCallback)((color) => {
128
129
  return jsx_runtime_1.jsx(trash_1.TrashIcon, { color: color, style: actionIcon });
129
130
  }, []);
130
- return (jsx_runtime_1.jsxs("div", { role: "listitem", style: isLast ? lastSkillRow : skillRow, children: [
131
- jsx_runtime_1.jsxs("span", { style: skillName, children: ["/", skill.name] }), processingThisSkill ? (jsx_runtime_1.jsx("span", { style: status, children: skillAction.type === 'installing' ? 'Installing…' : 'Removing…' })) : installedLocation ? (jsx_runtime_1.jsx("span", { style: status, children: installedLocation })) : null, installed ? (jsx_runtime_1.jsx(check_circle_filled_1.CheckCircleFilled, { "aria-hidden": true, style: { ...statusIcon, fill: colors_1.BLUE } })) : null, processingThisSkill ? (jsx_runtime_1.jsx("span", { style: actionSlot, children: jsx_runtime_1.jsx(Spinner_1.Spinner, { duration: 0.5, size: 14 }) })) : installed && canInstall ? (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { title: skill.installedInProject
132
- ? `Remove ${skill.name} from this project`
133
- : `Remove ${skill.name} globally`, disabled: skillAction !== null, onClick: () => removeSkill(skill.name), renderAction: renderRemoveAction, variant: null })) : canInstall ? (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { title: `Install ${skill.name} in this project`, disabled: skillAction !== null, onClick: () => installSkill(skill.name), renderAction: renderInstallAction, variant: null })) : null] }));
131
+ return (jsx_runtime_1.jsxs("div", { role: "listitem", style: skillRow, children: [
132
+ jsx_runtime_1.jsx(skills_1.SkillsIcon, { "aria-hidden": true, color: colors_1.LIGHT_TEXT, style: skillIcon }), jsx_runtime_1.jsxs("span", { style: skillName, children: ["/", skill.name] }), processingThisSkill ? (jsx_runtime_1.jsx("span", { style: status, children: skillAction.type === 'installing' ? 'Installing…' : 'Removing…' })) : installedLocation ? (jsx_runtime_1.jsx("span", { style: status, children: installedLocation })) : null, installed ? (jsx_runtime_1.jsx(check_circle_filled_1.CheckCircleFilled, { "aria-hidden": true, style: { ...statusIcon, fill: colors_1.BLUE } })) : null, processingThisSkill ? (jsx_runtime_1.jsx("span", { style: actionSlot, children: jsx_runtime_1.jsx(Spinner_1.Spinner, { duration: 0.5, size: 14 }) })) : installed && canInstall ? (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Uninstall", shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { "aria-label": `Remove ${skill.name}`, title: "", disabled: skillAction !== null, onClick: () => removeSkill(skill.name), renderAction: renderRemoveAction, variant: null }) })) : canInstall ? (jsx_runtime_1.jsx(ActionTooltip_1.ActionTooltip, { label: "Install", shortcut: null, delay: 800, dismissOnClick: true, children: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { "aria-label": `Install ${skill.name}`, title: "", disabled: skillAction !== null, onClick: () => installSkill(skill.name), renderAction: renderInstallAction, variant: null }) })) : null] }));
134
133
  };
135
134
  exports.SkillSettingsRow = SkillSettingsRow;
136
135
  const SkillsSettings = () => {
@@ -159,8 +158,8 @@ const SkillsSettings = () => {
159
158
  jsx_runtime_1.jsx("p", { style: description, children: "Not all skills are installed. Run this command in the project directory, then reload Studio and restart your coding agent." }), jsx_runtime_1.jsxs("div", { style: commandField, children: [
160
159
  jsx_runtime_1.jsx("pre", { style: command, children: INSTALL_COMMAND }), jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: onCopy, renderAction: renderCopyAction, title: "Copy install command" })
161
160
  ] })
162
- ] })) : null, remotionSkillsInfo ? (jsx_runtime_1.jsx("div", { style: list, role: "list", "aria-label": "Remotion Agent Skills", children: remotionSkillsInfo.skills.map((skill, index) => {
163
- return (jsx_runtime_1.jsx(exports.SkillSettingsRow, { isLast: index === remotionSkillsInfo.skills.length - 1, skill: skill }, skill.name));
161
+ ] })) : null, remotionSkillsInfo ? (jsx_runtime_1.jsx("div", { style: list, role: "list", "aria-label": "Remotion Agent Skills", children: remotionSkillsInfo.skills.map((skill) => {
162
+ return jsx_runtime_1.jsx(exports.SkillSettingsRow, { skill: skill }, skill.name);
164
163
  }) })) : null] }));
165
164
  };
166
165
  exports.SkillsSettings = SkillsSettings;
@@ -4,7 +4,6 @@ exports.SplitterElement = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const remotion_1 = require("remotion");
7
- const colors_1 = require("../../helpers/colors");
8
7
  const SplitterContext_1 = require("./SplitterContext");
9
8
  const SplitterElement = ({ children, type, sticky }) => {
10
9
  const context = (0, react_1.useContext)(SplitterContext_1.SplitterContext);
@@ -44,7 +43,7 @@ const SplitterElement = ({ children, type, sticky }) => {
44
43
  left: (type === 'flexer' ? 0 : context.flexValue) * 100 + '%',
45
44
  width: (type === 'flexer' ? context.flexValue : 1 - context.flexValue) * 100 +
46
45
  '%',
47
- backgroundColor: (0, remotion_1.interpolateColors)((0, remotion_1.random)(context.flexValue), [0, 1], [colors_1.RED, 'blue']),
46
+ backgroundColor: (0, remotion_1.interpolateColors)((0, remotion_1.random)(context.flexValue), [0, 1], ['red', 'blue']),
48
47
  };
49
48
  }, [context.flexValue, type]);
50
49
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
@@ -49,7 +49,7 @@ const currentTimeButtonStyle = {
49
49
  padding: 0,
50
50
  border: 'none',
51
51
  lineHeight: '21px',
52
- '--remotion-cli-internals-blue-hovered': colors_1.WHITE,
52
+ '--remotion-studio-blue-hovered': colors_1.WHITE,
53
53
  };
54
54
  const currentTimeSubtitle = {
55
55
  ...(0, hoverable_1.hoverableStyle)({
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  export declare const LoopedTimelineIndicator: React.FC<{
3
3
  readonly loops: number;
4
+ readonly phase: number;
4
5
  readonly fullWidth: number;
5
6
  readonly visibleOffset: number;
6
7
  readonly visibleWidth: number;
@@ -7,18 +7,19 @@ const LoopedIndicator_1 = require("./LoopedIndicator");
7
7
  const row = {
8
8
  overflow: 'hidden',
9
9
  };
10
- const LoopedTimelineIndicator = ({ loops, fullWidth, visibleOffset, visibleWidth }) => {
11
- if (loops <= 1 || fullWidth <= 0 || visibleWidth <= 0) {
10
+ const LoopedTimelineIndicator = ({ loops, phase, fullWidth, visibleOffset, visibleWidth }) => {
11
+ if (loops + phase <= 1 || fullWidth <= 0 || visibleWidth <= 0) {
12
12
  return null;
13
13
  }
14
14
  const loopWidth = fullWidth / loops;
15
- const lastBoundaryIndex = Math.ceil(loops) - 1;
16
- const firstVisibleBoundaryIndex = Math.max(1, Math.floor(visibleOffset / loopWidth));
17
- const lastVisibleBoundaryIndex = Math.min(lastBoundaryIndex, Math.ceil((visibleOffset + visibleWidth) / loopWidth));
15
+ const phaseWidth = phase * loopWidth;
16
+ const lastBoundaryIndex = Math.ceil(loops + phase) - 1;
17
+ const firstVisibleBoundaryIndex = Math.max(1, Math.floor((visibleOffset + phaseWidth) / loopWidth));
18
+ const lastVisibleBoundaryIndex = Math.min(lastBoundaryIndex, Math.ceil((visibleOffset + visibleWidth + phaseWidth) / loopWidth));
18
19
  const visibleBoundaryCount = Math.max(0, lastVisibleBoundaryIndex - firstVisibleBoundaryIndex + 1);
19
20
  const boundaries = new Array(visibleBoundaryCount)
20
21
  .fill(true)
21
- .map((_, index) => (firstVisibleBoundaryIndex + index) * loopWidth);
22
+ .map((_, index) => (firstVisibleBoundaryIndex + index) * loopWidth - phaseWidth);
22
23
  return (jsx_runtime_1.jsx(remotion_1.Internals.AbsoluteFillElement, { style: row, children: boundaries.map((boundary) => {
23
24
  return (jsx_runtime_1.jsx("div", { style: {
24
25
  position: 'absolute',
@@ -67,7 +67,7 @@ const getFallbackItemValue = (field) => {
67
67
  return [0.5, 0.5];
68
68
  }
69
69
  if (field.item.type === 'color') {
70
- return colors_1.BLACK_FULL_HEX;
70
+ return '#000000';
71
71
  }
72
72
  if (field.item.type === 'enum') {
73
73
  const [firstVariant] = field.item.variants;
@@ -560,7 +560,6 @@ const TimelineClipboardKeybindings = () => {
560
560
  }
561
561
  const nextSelection = (0, delete_selected_timeline_item_1.getTimelineSelectionAfterDeletingItems)({
562
562
  selections: selectedItems,
563
- propStatuses,
564
563
  });
565
564
  if (nextSelection.length === 0) {
566
565
  clearSelection();
@@ -31,7 +31,7 @@ const TimelineColorField = ({ field, effectiveValue, propStatus, onSave, onDragV
31
31
  const currentValue = typeof effectiveValue === 'string'
32
32
  ? effectiveValue
33
33
  : field.fieldSchema.type === 'color'
34
- ? ((_a = field.fieldSchema.default) !== null && _a !== void 0 ? _a : colors_1.BLACK_HEX)
34
+ ? ((_a = field.fieldSchema.default) !== null && _a !== void 0 ? _a : '#000')
35
35
  : '';
36
36
  const onChange = (0, react_1.useCallback)((next) => {
37
37
  onDragValueChange(next);
@@ -6,6 +6,7 @@ const remotion_1 = require("remotion");
6
6
  const client_id_1 = require("../../helpers/client-id");
7
7
  const use_keybinding_1 = require("../../helpers/use-keybinding");
8
8
  const ConfirmationDialog_1 = require("../ConfirmationDialog");
9
+ const SequencePropsSubscriptionProvider_1 = require("../SequencePropsSubscriptionProvider");
9
10
  const duplicate_selected_timeline_item_1 = require("./duplicate-selected-timeline-item");
10
11
  const imperative_state_1 = require("./imperative-state");
11
12
  const split_selected_timeline_item_1 = require("./split-selected-timeline-item");
@@ -15,7 +16,7 @@ const TimelineDeleteKeybindings = () => {
15
16
  const keybindings = (0, use_keybinding_1.useKeybinding)();
16
17
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
17
18
  const sequencesRef = (0, react_1.useContext)(remotion_1.Internals.SequenceManagerRefContext);
18
- const { overrideIdToNodePathMappings } = (0, react_1.useContext)(remotion_1.Internals.OverrideIdsToNodePathsGettersContext);
19
+ const overrideIdToNodePathMappingsRef = (0, react_1.useContext)(SequencePropsSubscriptionProvider_1.OverrideIdToNodePathMappingsRefContext);
19
20
  const propStatusesRef = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesRefContext);
20
21
  const { canSelect } = (0, TimelineSelection_1.useTimelineSelection)();
21
22
  const currentSelection = (0, TimelineSelection_1.useCurrentTimelineSelectionStateAsRef)();
@@ -56,11 +57,8 @@ const TimelineDeleteKeybindings = () => {
56
57
  });
57
58
  const split = keybindings.registerKeybinding({
58
59
  event: 'keydown',
59
- key: 'd',
60
- callback: (event) => {
61
- if (!(0, split_selected_timeline_item_1.shouldHandleTimelineSplitShortcut)(event)) {
62
- return;
63
- }
60
+ action: 'splitSequences',
61
+ callback: () => {
64
62
  const { selectedItems } = currentSelection.current;
65
63
  if (selectedItems.length === 0) {
66
64
  return;
@@ -68,7 +66,7 @@ const TimelineDeleteKeybindings = () => {
68
66
  const splitPromise = (0, split_selected_timeline_item_1.splitSelectedTimelineItems)({
69
67
  selections: selectedItems,
70
68
  sequences: sequencesRef.current,
71
- overrideIdsToNodePaths: overrideIdToNodePathMappings,
69
+ overrideIdsToNodePaths: overrideIdToNodePathMappingsRef.current,
72
70
  propStatuses: propStatusesRef.current,
73
71
  splitFrame: (0, imperative_state_1.getCurrentFrame)(),
74
72
  });
@@ -77,7 +75,6 @@ const TimelineDeleteKeybindings = () => {
77
75
  }
78
76
  splitPromise.catch(() => undefined);
79
77
  },
80
- commandCtrlKey: true,
81
78
  preventDefault: true,
82
79
  triggerIfInputFieldFocused: false,
83
80
  keepRegisteredWhenNotHighestContext: false,
@@ -93,7 +90,7 @@ const TimelineDeleteKeybindings = () => {
93
90
  currentSelection,
94
91
  deleteTimelineItems,
95
92
  keybindings,
96
- overrideIdToNodePathMappings,
93
+ overrideIdToNodePathMappingsRef,
97
94
  propStatusesRef,
98
95
  previewServerState,
99
96
  sequencesRef,
@@ -122,7 +122,7 @@ const TimelineDragHandlerInner = () => {
122
122
  shouldApplyCssTransforms: true,
123
123
  });
124
124
  const { isHighestContext } = (0, z_index_1.useZIndex)();
125
- const setFrame = remotion_1.Internals.useTimelineSetFrame();
125
+ const setFrame = remotion_1.Internals.Timeline.useTimelineSeekFrame();
126
126
  const width = (0, timeline_scroll_logic_1.getTimelineContentWidth)();
127
127
  const left = (_a = size === null || size === void 0 ? void 0 : size.left) !== null && _a !== void 0 ? _a : 0;
128
128
  const [dragging, setDragging] = (0, react_1.useState)({
@@ -24,6 +24,7 @@ const rowLabel = {
24
24
  fontSize: 12,
25
25
  color: colors_1.WHITE_ALPHA_80,
26
26
  userSelect: 'none',
27
+ WebkitUserSelect: 'none',
27
28
  };
28
29
  const rowStyle = {
29
30
  height: timeline_layout_1.TREE_GROUP_ROW_HEIGHT,
@@ -18,6 +18,7 @@ export declare const TimelineEffectPropItem: React.FC<{
18
18
  readonly nodePath: SequencePropsSubscriptionKey;
19
19
  readonly nodePathInfo: SequenceNodePathInfo;
20
20
  readonly keyframeDisplayOffset: number;
21
+ readonly keyframePlaybackRate: number;
21
22
  readonly keyframeControlsMode: TimelineKeyframeControlsMode;
22
23
  readonly revealInInspector: boolean;
23
24
  readonly runtimeValueStore: RuntimeValueStore | null;
@@ -228,11 +228,16 @@ const TimelineEffectPropValue = ({ field, nodePath, validatedLocation, sourceFra
228
228
  return (jsx_runtime_1.jsx(TimelineSchemaField_1.TimelineFieldValue, { field: field, propStatus: propStatus, onSave: onSave, onDragValueChange: onDragValueChange, onDragEnd: onDragEnd, effectiveValue: effectiveValue, scaleLockNodePath: null }));
229
229
  };
230
230
  exports.TimelineEffectPropValue = TimelineEffectPropValue;
231
- const TimelineEffectPropValueAtCurrentFrame = ({ field, nodePath, validatedLocation, keyframeDisplayOffset, runtimeValueStore, }) => {
231
+ const TimelineEffectPropValueAtCurrentFrame = ({ field, nodePath, validatedLocation, keyframeDisplayOffset, keyframePlaybackRate, propStatus, runtimeValueStore, }) => {
232
232
  const timelinePosition = remotion_1.Internals.Timeline.useTimelinePosition();
233
- return (jsx_runtime_1.jsx(exports.TimelineEffectPropValue, { field: field, nodePath: nodePath, validatedLocation: validatedLocation, sourceFrame: timelinePosition - keyframeDisplayOffset, runtimeValueStore: runtimeValueStore }));
233
+ return (jsx_runtime_1.jsx(exports.TimelineEffectPropValue, { field: field, nodePath: nodePath, validatedLocation: validatedLocation, sourceFrame: (0, get_timeline_keyframes_1.getKeyframeSourceFrame)({
234
+ displayFrame: timelinePosition,
235
+ keyframeDisplayOffset,
236
+ keyframePlaybackRate,
237
+ propStatus,
238
+ }), runtimeValueStore: runtimeValueStore }));
234
239
  };
235
- const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath, nodePathInfo, keyframeDisplayOffset, keyframeControlsMode, revealInInspector, runtimeValueStore, }) => {
240
+ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath, nodePathInfo, keyframeDisplayOffset, keyframePlaybackRate, keyframeControlsMode, revealInInspector, runtimeValueStore, }) => {
236
241
  var _a;
237
242
  var _b;
238
243
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
@@ -241,6 +246,7 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
241
246
  const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
242
247
  const { getEffectDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
243
248
  const selection = (0, TimelineSelection_1.useTimelineRowSelection)(nodePathInfo, revealInInspector);
249
+ const containsSelection = (0, TimelineSelection_1.useTimelineRowContainsSelection)(nodePathInfo);
244
250
  const style = (0, react_1.useMemo)(() => {
245
251
  return field.typeName === 'text-content'
246
252
  ? fieldRowBase
@@ -257,6 +263,7 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
257
263
  const resolvedKeyframeDisplayOffset = (0, get_timeline_keyframes_1.getKeyframeDisplayOffset)({
258
264
  propStatus,
259
265
  keyframeDisplayOffset,
266
+ keyframePlaybackRate,
260
267
  });
261
268
  const dragOverrideValue = (0, react_1.useMemo)(() => {
262
269
  const overrides = getEffectDragOverrides(nodePath, field.effectIndex);
@@ -273,7 +280,7 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
273
280
  propStatus,
274
281
  selected: selection.selected,
275
282
  keyframable,
276
- })) ? (jsx_runtime_1.jsx(TimelineKeyframeControls_1.TimelineKeyframeControls, { fieldKey: field.key, propStatus: propStatus, nodePath: nodePath, fileName: validatedLocation.source, keyframeDisplayOffset: keyframeDisplayOffset, defaultValue: field.fieldSchema.default, dragOverrideValue: dragOverrideValue, schema: field.effectSchema, effectIndex: field.effectIndex, nodePathInfo: nodePathInfo, mode: keyframeControlsMode })) : null;
283
+ })) ? (jsx_runtime_1.jsx(TimelineKeyframeControls_1.TimelineKeyframeControls, { fieldKey: field.key, propStatus: propStatus, nodePath: nodePath, fileName: validatedLocation.source, keyframeDisplayOffset: keyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate, defaultValue: field.fieldSchema.default, dragOverrideValue: dragOverrideValue, schema: field.effectSchema, effectIndex: field.effectIndex, nodePathInfo: nodePathInfo, mode: keyframeControlsMode })) : null;
277
284
  const canResetToDefault = (0, react_1.useMemo)(() => {
278
285
  if (!propStatus || propStatus.status === 'computed') {
279
286
  return false;
@@ -361,7 +368,7 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
361
368
  property: field.key,
362
369
  }).catch(() => undefined);
363
370
  }, [canOpenInEditor, defaultEditorId, field.key, validatedLocation]);
364
- const row = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {}), keyframeControls: keyframeControls, arrow: jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}), style: style, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, onDoubleClick: onPropertyDoubleClick, showSelectedBackground: true, containsSelection: false, outerHeight: null, children: jsx_runtime_1.jsx(TimelineFieldRowContent_1.TimelineFieldRowContent, { field: field, rowDepth: rowDepth, selected: selection.selected, children: jsx_runtime_1.jsx(TimelineEffectPropValueAtCurrentFrame, { field: field, nodePath: nodePath, validatedLocation: validatedLocation, keyframeDisplayOffset: resolvedKeyframeDisplayOffset, runtimeValueStore: runtimeValueStore }) }) }));
371
+ const row = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {}), keyframeControls: keyframeControls, arrow: jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}), style: style, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, onDoubleClick: onPropertyDoubleClick, showSelectedBackground: true, containsSelection: containsSelection, outerHeight: null, children: jsx_runtime_1.jsx(TimelineFieldRowContent_1.TimelineFieldRowContent, { field: field, rowDepth: rowDepth, selected: selection.selected || containsSelection, children: jsx_runtime_1.jsx(TimelineEffectPropValueAtCurrentFrame, { field: field, nodePath: nodePath, validatedLocation: validatedLocation, keyframeDisplayOffset: resolvedKeyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate, propStatus: propStatus, runtimeValueStore: runtimeValueStore }) }) }));
365
372
  return jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: row });
366
373
  };
367
374
  exports.TimelineEffectPropItem = TimelineEffectPropItem;
@@ -52,6 +52,7 @@ const arrowButton = {
52
52
  fontSize: 8,
53
53
  marginRight: 4,
54
54
  userSelect: 'none',
55
+ WebkitUserSelect: 'none',
55
56
  outline: 'none',
56
57
  lineHeight: 1,
57
58
  };
@@ -16,6 +16,7 @@ type TimelineExpandedRowProps = {
16
16
  readonly nodePath: SequencePropsSubscriptionKey;
17
17
  readonly schema: InteractivitySchema;
18
18
  readonly keyframeDisplayOffset: number;
19
+ readonly keyframePlaybackRate: number;
19
20
  readonly keyframeControlsMode: TimelineKeyframeControlsMode;
20
21
  };
21
22
  export declare const TimelineExpandedRow: React.NamedExoticComponent<TimelineExpandedRowProps>;
@@ -20,11 +20,13 @@ const rowLabel = {
20
20
  fontSize: 12,
21
21
  color: colors_1.WHITE_ALPHA_80,
22
22
  userSelect: 'none',
23
+ WebkitUserSelect: 'none',
23
24
  };
24
- const TimelineExpandedRowInner = ({ node, depth, nestedDepth, rowDepthBase, getIsExpanded, toggleTrack, validatedLocation, nodePath, schema, keyframeDisplayOffset, keyframeControlsMode, }) => {
25
+ const TimelineExpandedRowInner = ({ node, depth, nestedDepth, rowDepthBase, getIsExpanded, toggleTrack, validatedLocation, nodePath, schema, keyframeDisplayOffset, keyframePlaybackRate, keyframeControlsMode, }) => {
25
26
  const rowDepth = (rowDepthBase !== null && rowDepthBase !== void 0 ? rowDepthBase : (0, timeline_row_layout_1.getExpandedRowDepth)({ nestedDepth, treeDepth: 0 })) + depth;
26
27
  const isInspector = keyframeControlsMode === 'inspector';
27
28
  const selection = (0, TimelineSelection_1.useTimelineRowSelection)(node.nodePathInfo);
29
+ const containsSelection = (0, TimelineSelection_1.useTimelineRowContainsSelection)(node.nodePathInfo);
28
30
  const labelStyle = react_1.default.useMemo(() => ({
29
31
  ...rowLabel,
30
32
  ...(0, TimelineSelection_1.getTimelineSelectedLabelStyle)(selection.selected, true),
@@ -46,14 +48,14 @@ const TimelineExpandedRowInner = ({ node, depth, nestedDepth, rowDepthBase, getI
46
48
  const isExpanded = getIsExpanded(node.nodePathInfo);
47
49
  return (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {}), arrow: jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowButton, { isExpanded: isExpanded, onClick: () => toggleTrack(node.nodePathInfo), label: `${node.label} section`, disabled: false }), style: {
48
50
  height: timeline_layout_1.TREE_GROUP_ROW_HEIGHT,
49
- }, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection: false, outerHeight: null, children: jsx_runtime_1.jsx("span", { style: labelStyle, children: node.label }) }));
51
+ }, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection: containsSelection, outerHeight: null, children: jsx_runtime_1.jsx("span", { style: labelStyle, children: node.label }) }));
50
52
  }
51
53
  if (node.field) {
52
54
  if (node.field.kind === 'effect-field') {
53
- return (jsx_runtime_1.jsx(TimelineEffectPropItem_1.TimelineEffectPropItem, { field: node.field, validatedLocation: validatedLocation, rowDepth: isInspector ? rowDepth - 1 : rowDepth, nodePath: nodePath, nodePathInfo: node.nodePathInfo, keyframeDisplayOffset: keyframeDisplayOffset, keyframeControlsMode: keyframeControlsMode, revealInInspector: !isInspector, runtimeValueStore: node.runtimeValueStore }));
55
+ return (jsx_runtime_1.jsx(TimelineEffectPropItem_1.TimelineEffectPropItem, { field: node.field, validatedLocation: validatedLocation, rowDepth: isInspector ? rowDepth - 1 : rowDepth, nodePath: nodePath, nodePathInfo: node.nodePathInfo, keyframeDisplayOffset: keyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate, keyframeControlsMode: keyframeControlsMode, revealInInspector: !isInspector, runtimeValueStore: node.runtimeValueStore }));
54
56
  }
55
57
  if (node.field.kind === 'sequence-field') {
56
- return (jsx_runtime_1.jsx(TimelineSequencePropItem_1.TimelineSequencePropItem, { field: node.field, validatedLocation: validatedLocation, rowDepth: rowDepth, nodePath: nodePath, nodePathInfo: node.nodePathInfo, schema: schema, keyframeDisplayOffset: keyframeDisplayOffset, keyframeControlsMode: keyframeControlsMode, runtimeValue: node.runtimeValue }));
58
+ return (jsx_runtime_1.jsx(TimelineSequencePropItem_1.TimelineSequencePropItem, { field: node.field, validatedLocation: validatedLocation, rowDepth: rowDepth, nodePath: nodePath, nodePathInfo: node.nodePathInfo, schema: schema, keyframeDisplayOffset: keyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate, keyframeControlsMode: keyframeControlsMode, runtimeValue: node.runtimeValue }));
57
59
  }
58
60
  throw new Error('Unexpected field kind: ' + JSON.stringify(node.field));
59
61
  }
@@ -8,4 +8,5 @@ export declare const TimelineExpandedSection: React.FC<{
8
8
  readonly nodePathInfo: SequenceNodePathInfo;
9
9
  readonly nestedDepth: number;
10
10
  readonly keyframeDisplayOffset: number;
11
+ readonly keyframePlaybackRate: number;
11
12
  }>;
@@ -55,7 +55,7 @@ const separator = {
55
55
  height: 0,
56
56
  borderBottom: `1px solid ${colors_1.TIMELINE_TRACK_SEPARATOR}`,
57
57
  };
58
- const TimelineExpandedSection = ({ sequence, validatedLocation, nodePathInfo, nestedDepth, keyframeDisplayOffset, }) => {
58
+ const TimelineExpandedSection = ({ sequence, validatedLocation, nodePathInfo, nestedDepth, keyframeDisplayOffset, keyframePlaybackRate, }) => {
59
59
  const { filteredTree, getIsExpanded, toggleTrack } = (0, use_timeline_expanded_tree_1.useTimelineExpandedTree)({
60
60
  sequence,
61
61
  nodePathInfo,
@@ -79,7 +79,7 @@ const TimelineExpandedSection = ({ sequence, validatedLocation, nodePathInfo, ne
79
79
  return null;
80
80
  }
81
81
  return (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowSelectedBackgroundContext.Provider, { value: TimelineSelection_1.TIMELINE_EXPANDED_SELECTED_BACKGROUND, children: jsx_runtime_1.jsx("div", { style: style, children: flat.map(({ node, depth }, i) => {
82
- return (jsx_runtime_1.jsxs(react_1.default.Fragment, { children: [i > 0 ? jsx_runtime_1.jsx("div", { style: separator }) : null, jsx_runtime_1.jsx(TimelineExpandedRow_1.TimelineExpandedRow, { node: node, depth: depth, nestedDepth: nestedDepth, getIsExpanded: getIsExpanded, toggleTrack: toggleTrack, validatedLocation: validatedLocation, nodePath: nodePathInfo.sequenceSubscriptionKey, schema: schema, keyframeDisplayOffset: keyframeDisplayOffset, keyframeControlsMode: "timeline" })
82
+ return (jsx_runtime_1.jsxs(react_1.default.Fragment, { children: [i > 0 ? jsx_runtime_1.jsx("div", { style: separator }) : null, jsx_runtime_1.jsx(TimelineExpandedRow_1.TimelineExpandedRow, { node: node, depth: depth, nestedDepth: nestedDepth, getIsExpanded: getIsExpanded, toggleTrack: toggleTrack, validatedLocation: validatedLocation, nodePath: nodePathInfo.sequenceSubscriptionKey, schema: schema, keyframeDisplayOffset: keyframeDisplayOffset, keyframePlaybackRate: keyframePlaybackRate, keyframeControlsMode: "timeline" })
83
83
  ] }, JSON.stringify(node.nodePathInfo)));
84
84
  }) }) }));
85
85
  };
@@ -5,6 +5,7 @@ type TimelineExpandedTrackKeyframesProps = {
5
5
  readonly sequence: TSequence;
6
6
  readonly nodePathInfo: SequenceNodePathInfo;
7
7
  readonly keyframeDisplayOffset: number;
8
+ readonly keyframePlaybackRate: number;
8
9
  };
9
10
  export declare const TimelineExpandedTrackKeyframes: React.NamedExoticComponent<TimelineExpandedTrackKeyframesProps>;
10
11
  export {};
@@ -9,17 +9,19 @@ const react_1 = __importDefault(require("react"));
9
9
  const are_sequence_node_path_infos_equal_1 = require("../../helpers/are-sequence-node-path-infos-equal");
10
10
  const TimelineExpandedKeyframeRow_1 = require("./TimelineExpandedKeyframeRow");
11
11
  const use_expanded_track_keyframe_rows_1 = require("./use-expanded-track-keyframe-rows");
12
- const TimelineExpandedTrackKeyframesInner = ({ nodePathInfo, sequence, keyframeDisplayOffset }) => {
12
+ const TimelineExpandedTrackKeyframesInner = ({ nodePathInfo, sequence, keyframeDisplayOffset, keyframePlaybackRate }) => {
13
13
  const { rows, expandedHeight } = (0, use_expanded_track_keyframe_rows_1.useExpandedTrackKeyframeRows)({
14
14
  sequence,
15
15
  nodePathInfo,
16
16
  keyframeDisplayOffset,
17
+ keyframePlaybackRate,
17
18
  });
18
19
  return (jsx_runtime_1.jsx("div", { style: { height: expandedHeight }, children: rows.map((row, index) => (jsx_runtime_1.jsx(TimelineExpandedKeyframeRow_1.TimelineExpandedKeyframeRow, { height: row.height, keyframes: row.keyframes, canEditEasing: row.canEditEasing, nodePathInfo: row.nodePathInfo, showSeparator: index > 0 }, row.rowKey))) }));
19
20
  };
20
21
  const areTimelineExpandedTrackKeyframesPropsEqual = (first, second) => {
21
22
  var _a, _b, _c, _d;
22
23
  return (first.keyframeDisplayOffset === second.keyframeDisplayOffset &&
24
+ first.keyframePlaybackRate === second.keyframePlaybackRate &&
23
25
  ((_a = first.sequence.controls) === null || _a === void 0 ? void 0 : _a.schema) === ((_b = second.sequence.controls) === null || _b === void 0 ? void 0 : _b.schema) &&
24
26
  ((_c = first.sequence.controls) === null || _c === void 0 ? void 0 : _c.runtimeValues) ===
25
27
  ((_d = second.sequence.controls) === null || _d === void 0 ? void 0 : _d.runtimeValues) &&
@@ -12,6 +12,7 @@ const fieldNameBase = {
12
12
  lineHeight: `${timeline_field_row_layout_1.TIMELINE_STACKED_FIELD_HEADER_HEIGHT}px`,
13
13
  color: colors_1.WHITE_ALPHA_80,
14
14
  userSelect: 'none',
15
+ WebkitUserSelect: 'none',
15
16
  whiteSpace: 'nowrap',
16
17
  overflow: 'hidden',
17
18
  textOverflow: 'ellipsis',
@@ -22,9 +22,9 @@ const ROW_HEIGHT = 30;
22
22
  const LIST_HEIGHT = 280;
23
23
  const OVERSCAN = 10;
24
24
  const POPOVER_WIDTH = 280;
25
- const CLEAR_HOVER = 'rgba(255, 255, 255, 0.06)';
26
- const INPUT_BORDER_COLOR_UNHOVERED = 'rgba(0, 0, 0, 0.6)';
27
- const INPUT_BORDER_COLOR_HOVERED = 'rgba(255, 255, 255, 0.05)';
25
+ const CLEAR_HOVER = colors_1.WHITE_ALPHA_06;
26
+ const INPUT_BORDER_COLOR_UNHOVERED = colors_1.BLACK_ALPHA_60;
27
+ const INPUT_BORDER_COLOR_HOVERED = colors_1.WHITE_ALPHA_05;
28
28
  const googleFonts = google_fonts_list_1.GOOGLE_FONTS_LIST.map((font) => ({
29
29
  id: `google-${font.importName}`,
30
30
  fontFamily: font.fontFamily,
@@ -67,7 +67,7 @@ const triggerStyle = {
67
67
  borderWidth: 1,
68
68
  borderStyle: 'solid',
69
69
  maxWidth: 140,
70
- color: 'white',
70
+ color: colors_1.WHITE,
71
71
  userSelect: 'none',
72
72
  WebkitUserSelect: 'none',
73
73
  };
@@ -83,17 +83,17 @@ const popover = {
83
83
  position: 'fixed',
84
84
  width: POPOVER_WIDTH,
85
85
  backgroundColor: colors_1.BACKGROUND,
86
- color: 'white',
86
+ color: colors_1.WHITE,
87
87
  userSelect: 'none',
88
88
  WebkitUserSelect: 'none',
89
- border: '1px solid rgba(255, 255, 255, 0.08)',
89
+ border: `1px solid ${colors_1.WHITE_ALPHA_08}`,
90
90
  };
91
91
  const searchInput = {
92
92
  boxSizing: 'border-box',
93
93
  width: '100%',
94
94
  backgroundColor: colors_1.INPUT_BACKGROUND,
95
- border: '1px solid rgba(255, 255, 255, 0.12)',
96
- color: 'white',
95
+ border: colors_1.BORDER_WHITE_ALPHA_12,
96
+ color: colors_1.WHITE,
97
97
  fontSize: 12,
98
98
  outline: 'none',
99
99
  padding: '6px 8px',
@@ -113,8 +113,8 @@ const optionButton = {
113
113
  height: ROW_HEIGHT,
114
114
  width: '100%',
115
115
  border: 'none',
116
- background: 'transparent',
117
- color: 'white',
116
+ background: colors_1.TRANSPARENT,
117
+ color: colors_1.WHITE,
118
118
  display: 'flex',
119
119
  alignItems: 'center',
120
120
  padding: '0 8px',
@@ -136,7 +136,7 @@ const optionSource = {
136
136
  };
137
137
  const errorText = {
138
138
  padding: '6px 8px',
139
- color: '#ff8a8a',
139
+ color: colors_1.FONT_FAMILY_ERROR_COLOR,
140
140
  fontSize: 10,
141
141
  };
142
142
  const portalStyle = ({ size, }) => {
@@ -520,7 +520,7 @@ const TimelineFontFamilyField = ({ field, propStatus, effectiveValue, onSave, on
520
520
  ? CLEAR_HOVER
521
521
  : isSelected
522
522
  ? colors_1.SELECTED_BACKGROUND
523
- : 'transparent',
523
+ : colors_1.TRANSPARENT,
524
524
  }, onPointerEnter: () => setHighlightedIndex(actualIndex), onPointerDown: (event) => {
525
525
  event.preventDefault();
526
526
  event.stopPropagation();
@@ -21,6 +21,7 @@ export declare const TimelineKeyframeControls: React.FC<{
21
21
  readonly nodePath: SequencePropsSubscriptionKey;
22
22
  readonly fileName: string;
23
23
  readonly keyframeDisplayOffset: number;
24
+ readonly keyframePlaybackRate: number;
24
25
  readonly defaultValue: unknown;
25
26
  readonly dragOverrideValue: DragOverrideValue | undefined;
26
27
  readonly schema: InteractivitySchema;