@remotion/studio 4.0.503 → 4.0.505

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 (181) hide show
  1. package/dist/api/install-package.d.ts +2 -1
  2. package/dist/api/install-package.js +6 -2
  3. package/dist/components/AssetSelectorItem.js +4 -16
  4. package/dist/components/AudioWaveform.d.ts +1 -1
  5. package/dist/components/AudioWaveform.js +36 -3
  6. package/dist/components/Canvas.js +12 -5
  7. package/dist/components/CheckboardToggle.js +3 -1
  8. package/dist/components/CompositionContextButton.d.ts +1 -1
  9. package/dist/components/CompositionContextButton.js +2 -2
  10. package/dist/components/CompositionSelector.js +2 -2
  11. package/dist/components/CompositionSelectorItem.js +6 -7
  12. package/dist/components/ContextMenu.d.ts +5 -7
  13. package/dist/components/ContextMenu.js +54 -21
  14. package/dist/components/ControlButton.d.ts +4 -2
  15. package/dist/components/ControlButton.js +6 -20
  16. package/dist/components/EditorContent.js +1 -1
  17. package/dist/components/EditorGuides/Guide.js +2 -2
  18. package/dist/components/EffectPickerModal.js +70 -9
  19. package/dist/components/FullscreenToggle.js +1 -2
  20. package/dist/components/InitialCompositionLoader.js +1 -14
  21. package/dist/components/InlineAction.d.ts +3 -4
  22. package/dist/components/InlineAction.js +16 -13
  23. package/dist/components/InlineDropdown.d.ts +3 -2
  24. package/dist/components/InlineDropdown.js +16 -5
  25. package/dist/components/InspectorPanel/CompositionMetadata.js +7 -6
  26. package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +2 -2
  27. package/dist/components/InspectorPanel/KeyframeInspector.js +2 -3
  28. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +1 -1
  29. package/dist/components/InspectorPanel/common.js +24 -34
  30. package/dist/components/InspectorPanel/styles.js +4 -0
  31. package/dist/components/InspectorSequenceSection.js +1 -1
  32. package/dist/components/LoopToggle.js +1 -1
  33. package/dist/components/Menu/MenuItem.js +16 -12
  34. package/dist/components/MenuBuildIndicator.d.ts +3 -1
  35. package/dist/components/MenuBuildIndicator.js +14 -59
  36. package/dist/components/MenuCompositionName.js +3 -63
  37. package/dist/components/MenuToolbar.js +23 -3
  38. package/dist/components/MobilePanel.d.ts +1 -2
  39. package/dist/components/MobilePanel.js +6 -10
  40. package/dist/components/MuteToggle.js +2 -1
  41. package/dist/components/NewComposition/ComboBox.d.ts +1 -0
  42. package/dist/components/NewComposition/ComboBox.js +2 -2
  43. package/dist/components/NewComposition/InputDragger.d.ts +5 -0
  44. package/dist/components/NewComposition/InputDragger.js +11 -6
  45. package/dist/components/NewComposition/MenuContent.d.ts +1 -1
  46. package/dist/components/NewComposition/menu-typeahead.d.ts +1 -1
  47. package/dist/components/Notifications/NotificationCenter.js +12 -2
  48. package/dist/components/OutlineToggle.js +10 -2
  49. package/dist/components/PlayPause.js +2 -6
  50. package/dist/components/PlaybackRateSelector.js +4 -9
  51. package/dist/components/PreviewToolbar.js +12 -8
  52. package/dist/components/PreviewToolbarOverflowButton.d.ts +0 -1
  53. package/dist/components/PreviewToolbarOverflowButton.js +2 -75
  54. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -2
  55. package/dist/components/RenderButton.d.ts +1 -1
  56. package/dist/components/RenderButton.js +55 -37
  57. package/dist/components/RenderModal/FrameRangeSetting.js +6 -1
  58. package/dist/components/RenderModal/MultiRangeSlider.js +8 -8
  59. package/dist/components/RenderModal/RenderModalEnvironmentVariables.js +1 -9
  60. package/dist/components/RenderModal/RenderModalOutputName.js +11 -2
  61. package/dist/components/RenderModal/ServerRenderModal.js +2 -17
  62. package/dist/components/RenderModal/WebRenderModal.js +3 -17
  63. package/dist/components/RenderModal/layout.js +7 -5
  64. package/dist/components/RenderModal/render-modals.js +18 -15
  65. package/dist/components/RenderQueue/RenderQueueRepeat.js +1 -14
  66. package/dist/components/SelectedOutlineElement.js +13 -22
  67. package/dist/components/SelectedOutlineOverlay.js +5 -1
  68. package/dist/components/SidebarRenderButton.js +1 -15
  69. package/dist/components/SizeSelector.js +4 -9
  70. package/dist/components/SnappingToggle.js +1 -2
  71. package/dist/components/Spinner.d.ts +1 -0
  72. package/dist/components/Spinner.js +2 -2
  73. package/dist/components/Splitter/SplitterContainer.d.ts +1 -0
  74. package/dist/components/Splitter/SplitterContainer.js +4 -1
  75. package/dist/components/Splitter/SplitterContext.d.ts +4 -3
  76. package/dist/components/Splitter/SplitterContext.js +3 -2
  77. package/dist/components/Splitter/SplitterElement.js +6 -1
  78. package/dist/components/Splitter/SplitterHandle.js +1 -0
  79. package/dist/components/Tabs/vertical.d.ts +1 -0
  80. package/dist/components/Tabs/vertical.js +8 -10
  81. package/dist/components/TimeValue.js +26 -8
  82. package/dist/components/Timeline/Timeline.js +5 -5
  83. package/dist/components/Timeline/TimelineClipboardKeybindings.js +3 -6
  84. package/dist/components/Timeline/TimelineDeleteKeybindings.js +5 -7
  85. package/dist/components/Timeline/TimelineDragHandler.js +3 -0
  86. package/dist/components/Timeline/TimelineEffectItem.js +6 -2
  87. package/dist/components/Timeline/TimelineEffectPropItem.js +6 -3
  88. package/dist/components/Timeline/TimelineExpandedKeyframeRow.d.ts +6 -6
  89. package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +34 -2
  90. package/dist/components/Timeline/TimelineHeightContainer.d.ts +1 -0
  91. package/dist/components/Timeline/TimelineHeightContainer.js +2 -2
  92. package/dist/components/Timeline/TimelineInOutDragHandler.js +3 -3
  93. package/dist/components/Timeline/TimelineKeyframeEasingLine.d.ts +5 -3
  94. package/dist/components/Timeline/TimelineKeyframeEasingLine.js +32 -30
  95. package/dist/components/Timeline/TimelineList.d.ts +1 -0
  96. package/dist/components/Timeline/TimelineList.js +2 -3
  97. package/dist/components/Timeline/TimelineScaleField.js +1 -1
  98. package/dist/components/Timeline/TimelineSelection.js +2 -3
  99. package/dist/components/Timeline/TimelineSequence.js +34 -28
  100. package/dist/components/Timeline/TimelineSequenceItem.d.ts +3 -3
  101. package/dist/components/Timeline/TimelineSequenceItem.js +34 -23
  102. package/dist/components/Timeline/TimelineSequencePropItem.d.ts +10 -2
  103. package/dist/components/Timeline/TimelineSequencePropItem.js +64 -12
  104. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +2 -2
  105. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +38 -5
  106. package/dist/components/Timeline/TimelineTimeIndicators.js +36 -3
  107. package/dist/components/Timeline/TimelineVideoInfo.d.ts +1 -1
  108. package/dist/components/Timeline/TimelineVideoInfo.js +36 -3
  109. package/dist/components/Timeline/TimelineZoomControls.d.ts +3 -1
  110. package/dist/components/Timeline/TimelineZoomControls.js +59 -20
  111. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +2 -3
  112. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.d.ts +1 -1
  113. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +7 -18
  114. package/dist/components/Timeline/use-timeline-asset-drop.js +3 -3
  115. package/dist/components/Timeline/use-timeline-height.d.ts +2 -1
  116. package/dist/components/Timeline/use-timeline-height.js +3 -2
  117. package/dist/components/TimelineCombobox.d.ts +11 -0
  118. package/dist/components/TimelineCombobox.js +181 -0
  119. package/dist/components/TimelineInOutToggle.js +3 -3
  120. package/dist/components/TopPanel.js +8 -8
  121. package/dist/components/UndoRedoButtons.js +6 -5
  122. package/dist/components/UpdateCheck.js +18 -5
  123. package/dist/components/UpdateModal/UpdateModal.js +35 -12
  124. package/dist/components/composition-menu-items.d.ts +2 -4
  125. package/dist/components/composition-menu-items.js +31 -54
  126. package/dist/components/import-assets.d.ts +2 -1
  127. package/dist/components/import-assets.js +1 -1
  128. package/dist/components/selected-outline-types.d.ts +1 -1
  129. package/dist/esm/{chunk-bj1r1hh5.js → chunk-7pgk8h5m.js} +9174 -8486
  130. package/dist/esm/internals.mjs +9174 -8486
  131. package/dist/esm/previewEntry.mjs +8991 -8303
  132. package/dist/esm/renderEntry.mjs +1 -1
  133. package/dist/helpers/hoverable.d.ts +11 -0
  134. package/dist/helpers/hoverable.js +70 -0
  135. package/dist/helpers/inject-css.js +43 -23
  136. package/dist/helpers/install-required-package.d.ts +3 -2
  137. package/dist/helpers/install-required-package.js +20 -15
  138. package/dist/helpers/use-is-fullscreen.d.ts +1 -0
  139. package/dist/helpers/use-is-fullscreen.js +25 -0
  140. package/dist/helpers/use-menu-structure.js +88 -59
  141. package/dist/icons/audio.d.ts +1 -1
  142. package/dist/icons/audio.js +1 -1
  143. package/dist/icons/canvas-zoom.d.ts +10 -0
  144. package/dist/icons/canvas-zoom.js +21 -0
  145. package/dist/icons/caret.js +1 -1
  146. package/dist/icons/certificate.d.ts +1 -1
  147. package/dist/icons/certificate.js +1 -1
  148. package/dist/icons/data.d.ts +1 -1
  149. package/dist/icons/data.js +2 -2
  150. package/dist/icons/effects.d.ts +5 -0
  151. package/dist/icons/effects.js +8 -0
  152. package/dist/icons/ellipsis.js +1 -1
  153. package/dist/icons/external-link.d.ts +5 -0
  154. package/dist/icons/external-link.js +10 -0
  155. package/dist/icons/fullscreen.js +1 -1
  156. package/dist/icons/gear.d.ts +1 -1
  157. package/dist/icons/gear.js +1 -1
  158. package/dist/icons/gif.d.ts +1 -1
  159. package/dist/icons/gif.js +1 -1
  160. package/dist/icons/input-props.d.ts +2 -0
  161. package/dist/icons/input-props.js +9 -0
  162. package/dist/icons/jump-to-start.js +2 -2
  163. package/dist/icons/magnet.d.ts +3 -1
  164. package/dist/icons/magnet.js +2 -2
  165. package/dist/icons/media-volume.d.ts +6 -2
  166. package/dist/icons/media-volume.js +8 -6
  167. package/dist/icons/minus.d.ts +3 -1
  168. package/dist/icons/minus.js +2 -2
  169. package/dist/icons/pause.js +1 -1
  170. package/dist/icons/play.js +1 -1
  171. package/dist/icons/playback-rate.d.ts +5 -0
  172. package/dist/icons/playback-rate.js +31 -0
  173. package/dist/icons/plus.js +1 -1
  174. package/dist/icons/redo.js +2 -2
  175. package/dist/icons/search.d.ts +5 -0
  176. package/dist/icons/search.js +10 -0
  177. package/dist/icons/step-back.js +2 -2
  178. package/dist/icons/step-forward.js +2 -2
  179. package/dist/icons/timelineInOutPointer.js +2 -2
  180. package/dist/icons/undo.js +2 -2
  181. package/package.json +12 -12
@@ -6,6 +6,8 @@ const studio_shared_1 = require("@remotion/studio-shared");
6
6
  const react_1 = require("react");
7
7
  const colors_1 = require("../helpers/colors");
8
8
  const use_keybinding_1 = require("../helpers/use-keybinding");
9
+ const effects_1 = require("../icons/effects");
10
+ const external_link_1 = require("../icons/external-link");
9
11
  const modals_1 = require("../state/modals");
10
12
  const ContextMenu_1 = require("./ContextMenu");
11
13
  const effect_drag_and_drop_1 = require("./effect-drag-and-drop");
@@ -16,13 +18,54 @@ const DismissableModal_1 = require("./NewComposition/DismissableModal");
16
18
  const RemInput_1 = require("./NewComposition/RemInput");
17
19
  const shared_1 = require("./QuickSwitcher/shared");
18
20
  const container = {
19
- width: 500,
21
+ width: 400,
22
+ };
23
+ const panelStyle = {
24
+ borderRadius: 6,
25
+ overflow: 'hidden',
20
26
  };
21
27
  const content = {
22
28
  padding: '12px 16px 10px',
23
29
  };
24
30
  const inputStyle = {
25
31
  width: '100%',
32
+ borderRadius: 4,
33
+ };
34
+ const aboutEffectsRow = {
35
+ display: 'flex',
36
+ justifyContent: 'flex-end',
37
+ marginBottom: 8,
38
+ };
39
+ const aboutEffectsLink = {
40
+ alignItems: 'center',
41
+ color: colors_1.LIGHT_TEXT,
42
+ cursor: 'default',
43
+ display: 'inline-flex',
44
+ fontFamily: 'sans-serif',
45
+ fontSize: 12,
46
+ gap: 4,
47
+ lineHeight: '14px',
48
+ minWidth: 0,
49
+ textDecoration: 'none',
50
+ };
51
+ const aboutEffectsLinkHovered = {
52
+ ...aboutEffectsLink,
53
+ color: colors_1.WHITE,
54
+ };
55
+ const aboutEffectsLabel = {
56
+ color: 'inherit',
57
+ fontFamily: 'sans-serif',
58
+ fontSize: 12,
59
+ lineHeight: '14px',
60
+ minWidth: 0,
61
+ overflow: 'hidden',
62
+ textOverflow: 'ellipsis',
63
+ whiteSpace: 'nowrap',
64
+ };
65
+ const aboutEffectsIcon = {
66
+ flexShrink: 0,
67
+ height: 12,
68
+ width: 12,
26
69
  };
27
70
  const resultList = {
28
71
  height: 320,
@@ -35,15 +78,28 @@ const noResults = {
35
78
  padding: '12px 16px',
36
79
  };
37
80
  const resultContainer = {
38
- cursor: 'pointer',
81
+ cursor: 'default',
39
82
  display: 'flex',
40
83
  flexDirection: 'row',
41
84
  alignItems: 'center',
42
- padding: '7px 16px',
85
+ paddingLeft: 16,
86
+ paddingRight: 16,
87
+ marginBottom: 1,
88
+ marginLeft: 4,
89
+ marginRight: 4,
90
+ borderRadius: 4,
91
+ };
92
+ const iconStyle = {
93
+ width: 18,
94
+ height: 18,
95
+ flexShrink: 0,
43
96
  };
44
97
  const labelContainer = {
45
98
  flex: 1,
46
99
  minWidth: 0,
100
+ overflow: 'hidden',
101
+ paddingTop: 5,
102
+ paddingBottom: 5,
47
103
  };
48
104
  const label = {
49
105
  fontSize: shared_1.QUICK_SWITCHER_RESULT_LABEL_FONT_SIZE,
@@ -63,7 +119,7 @@ const EffectPickerResult = ({ item, selected, onSelected }) => {
63
119
  const style = (0, react_1.useMemo)(() => {
64
120
  return {
65
121
  ...resultContainer,
66
- backgroundColor: (0, colors_1.getBackgroundFromHoverState)({ hovered, selected }),
122
+ backgroundColor: hovered || selected ? colors_1.WHITE_ALPHA_06 : colors_1.TRANSPARENT,
67
123
  };
68
124
  }, [hovered, selected]);
69
125
  const labelStyle = (0, react_1.useMemo)(() => {
@@ -75,7 +131,7 @@ const EffectPickerResult = ({ item, selected, onSelected }) => {
75
131
  const onClick = (0, react_1.useCallback)(() => {
76
132
  onSelected(item);
77
133
  }, [item, onSelected]);
78
- const contextMenuValues = (0, react_1.useMemo)(() => {
134
+ const getContextMenuItems = (0, react_1.useCallback)(() => {
79
135
  const documentationLink = (0, studio_shared_1.getEffectDocumentationLink)(item);
80
136
  return [
81
137
  {
@@ -94,12 +150,13 @@ const EffectPickerResult = ({ item, selected, onSelected }) => {
94
150
  },
95
151
  ];
96
152
  }, [item]);
97
- return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: contextMenuValues, onOpen: null, children: jsx_runtime_1.jsxs("div", { ref: ref, style: style, onClick: onClick, onMouseEnter: () => setHovered(true), onMouseLeave: () => setHovered(false), children: [
98
- jsx_runtime_1.jsx("div", { style: labelContainer, children: jsx_runtime_1.jsx("div", { style: labelStyle, children: item.label }) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("div", { style: category, children: item.category })
153
+ return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: jsx_runtime_1.jsxs("div", { ref: ref, style: style, onClick: onClick, onMouseEnter: () => setHovered(true), onMouseLeave: () => setHovered(false), children: [
154
+ jsx_runtime_1.jsx(effects_1.EffectsIcon, { color: selected || hovered ? colors_1.WHITE : colors_1.LIGHT_TEXT, style: iconStyle }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("div", { style: labelContainer, children: jsx_runtime_1.jsx("div", { style: labelStyle, children: item.label }) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("div", { style: category, children: item.category })
99
155
  ] }) }));
100
156
  };
101
157
  const EffectPickerContent = ({ state }) => {
102
158
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
159
+ const [aboutEffectsHovered, setAboutEffectsHovered] = (0, react_1.useState)(false);
103
160
  const [query, setQuery] = (0, react_1.useState)('');
104
161
  const [selectedIndex, setSelectedIndex] = (0, react_1.useState)(0);
105
162
  const inputRef = (0, react_1.useRef)(null);
@@ -168,12 +225,16 @@ const EffectPickerContent = ({ state }) => {
168
225
  setSelectedIndex(0);
169
226
  }, []);
170
227
  return (jsx_runtime_1.jsxs("div", { style: container, children: [
171
- jsx_runtime_1.jsx("div", { style: content, children: jsx_runtime_1.jsx(RemInput_1.RemotionInput, { ref: inputRef, type: "text", style: inputStyle, autoFocus: true, status: "ok", value: query, onChange: onTextChange, placeholder: "Search effects...", rightAlign: false }) }), jsx_runtime_1.jsx("div", { style: resultList, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: results.length === 0 ? (jsx_runtime_1.jsx("div", { style: noResults, children: "No effects found" })) : (results.map((item, i) => {
228
+ jsx_runtime_1.jsxs("div", { style: content, children: [
229
+ jsx_runtime_1.jsx("div", { style: aboutEffectsRow, children: jsx_runtime_1.jsxs("a", { href: "https://remotion.dev/effects", target: "_blank", rel: "noopener noreferrer", style: aboutEffectsHovered ? aboutEffectsLinkHovered : aboutEffectsLink, onMouseEnter: () => setAboutEffectsHovered(true), onMouseLeave: () => setAboutEffectsHovered(false), children: [
230
+ jsx_runtime_1.jsx("span", { style: aboutEffectsLabel, children: "About effects" }), jsx_runtime_1.jsx(external_link_1.ExternalLinkIcon, { "aria-hidden": "true", color: aboutEffectsHovered ? colors_1.WHITE : colors_1.LIGHT_TEXT, style: aboutEffectsIcon })
231
+ ] }) }), jsx_runtime_1.jsx(RemInput_1.RemotionInput, { ref: inputRef, type: "text", style: inputStyle, autoFocus: true, status: "ok", value: query, onChange: onTextChange, placeholder: "Search effects...", rightAlign: false })
232
+ ] }), jsx_runtime_1.jsx("div", { style: resultList, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: results.length === 0 ? (jsx_runtime_1.jsx("div", { style: noResults, children: "No effects found" })) : (results.map((item, i) => {
172
233
  return (jsx_runtime_1.jsx(EffectPickerResult, { item: item, selected: selectedIndexRounded === i, onSelected: selectItem }, item.id));
173
234
  })) })
174
235
  ] }));
175
236
  };
176
237
  const EffectPickerModal = ({ state }) => {
177
- return (jsx_runtime_1.jsx(DismissableModal_1.DismissableModal, { children: jsx_runtime_1.jsx(EffectPickerContent, { state: state }) }));
238
+ return (jsx_runtime_1.jsx(DismissableModal_1.DismissableModal, { panelStyle: panelStyle, children: jsx_runtime_1.jsx(EffectPickerContent, { state: state }) }));
178
239
  };
179
240
  exports.EffectPickerModal = EffectPickerModal;
@@ -5,7 +5,6 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const remotion_1 = require("remotion");
7
7
  const no_react_1 = require("remotion/no-react");
8
- const colors_1 = require("../helpers/colors");
9
8
  const use_keybinding_1 = require("../helpers/use-keybinding");
10
9
  const fullscreen_1 = require("../icons/fullscreen");
11
10
  const canvas_ref_1 = require("../state/canvas-ref");
@@ -45,6 +44,6 @@ const FullScreenToggle = ({ hidden }) => {
45
44
  f.unregister();
46
45
  };
47
46
  }, [keybindings, onClick]);
48
- return hidden ? (jsx_runtime_1.jsx("button", { id: "fullscreen-toggle", type: "button", style: { display: 'none' }, onClick: onClick })) : (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { id: "fullscreen-toggle", title: accessibilityLabel, "aria-label": accessibilityLabel, onClick: onClick, children: jsx_runtime_1.jsx(fullscreen_1.FullscreenIcon, { color: colors_1.WHITE_HEX, style: { width: 18, height: 18 } }) }));
47
+ return hidden ? (jsx_runtime_1.jsx("button", { id: "fullscreen-toggle", type: "button", style: { display: 'none' }, onClick: onClick })) : (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { id: "fullscreen-toggle", title: accessibilityLabel, "aria-label": accessibilityLabel, onClick: onClick, children: (color) => (jsx_runtime_1.jsx(fullscreen_1.FullscreenIcon, { color: color, style: { width: 18, height: 18 } })) }));
49
48
  };
50
49
  exports.FullScreenToggle = FullScreenToggle;
@@ -4,11 +4,9 @@ exports.InitialCompositionLoader = exports.useSelectComposition = void 0;
4
4
  const react_1 = require("react");
5
5
  const remotion_1 = require("remotion");
6
6
  const create_folder_tree_1 = require("../helpers/create-folder-tree");
7
- const mobile_layout_1 = require("../helpers/mobile-layout");
8
7
  const persist_open_folders_1 = require("../helpers/persist-open-folders");
9
8
  const url_state_1 = require("../helpers/url-state");
10
9
  const folders_1 = require("../state/folders");
11
- const sidebar_1 = require("../state/sidebar");
12
10
  const ExplorerPanelRef_1 = require("./ExplorerPanelRef");
13
11
  const load_canvas_content_from_url_1 = require("./load-canvas-content-from-url");
14
12
  const use_select_asset_1 = require("./use-select-asset");
@@ -17,8 +15,6 @@ const useSelectComposition = () => {
17
15
  const { setCompositionFoldersExpanded } = (0, react_1.useContext)(folders_1.FolderContext);
18
16
  const { setCanvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionSetters);
19
17
  const setFrame = remotion_1.Internals.useTimelineSetFrame();
20
- const isMobileLayout = (0, mobile_layout_1.useMobileLayout)();
21
- const { setSidebarCollapsedState } = (0, react_1.useContext)(sidebar_1.SidebarContext);
22
18
  return (0, react_1.useCallback)((c, push, frame = null) => {
23
19
  var _a;
24
20
  if (push) {
@@ -42,17 +38,8 @@ const useSelectComposition = () => {
42
38
  (0, persist_open_folders_1.persistExpandedFolders)('compositions', newState);
43
39
  return newState;
44
40
  });
45
- if (isMobileLayout) {
46
- setSidebarCollapsedState({ left: 'collapsed', right: 'collapsed' });
47
- }
48
41
  }
49
- }, [
50
- isMobileLayout,
51
- setCanvasContent,
52
- setCompositionFoldersExpanded,
53
- setFrame,
54
- setSidebarCollapsedState,
55
- ]);
42
+ }, [setCanvasContent, setCompositionFoldersExpanded, setFrame]);
56
43
  };
57
44
  exports.useSelectComposition = useSelectComposition;
58
45
  const InitialCompositionLoader = () => {
@@ -1,11 +1,10 @@
1
1
  import React from 'react';
2
2
  export type RenderInlineAction = (color: string) => React.ReactNode;
3
- export type InlineActionProps = {
3
+ export type InlineActionProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'onClick' | 'style'> & {
4
4
  readonly onClick: React.MouseEventHandler<HTMLButtonElement>;
5
- readonly disabled?: boolean;
6
5
  readonly renderAction: RenderInlineAction;
7
- readonly title?: string;
8
6
  readonly unhoveredColor?: string;
9
7
  readonly variant: 'compact' | null;
8
+ readonly style?: React.CSSProperties;
10
9
  };
11
- export declare const InlineAction: ({ renderAction, onClick, disabled, title, unhoveredColor, variant, }: InlineActionProps) => import("react/jsx-runtime").JSX.Element;
10
+ export declare const InlineAction: ({ renderAction, onClick, disabled, title, unhoveredColor, variant, style: customStyle, className, ...buttonProps }: InlineActionProps) => import("react/jsx-runtime").JSX.Element;
@@ -4,22 +4,14 @@ exports.InlineAction = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const colors_1 = require("../helpers/colors");
7
+ const hoverable_1 = require("../helpers/hoverable");
7
8
  const z_index_1 = require("../state/z-index");
8
- const InlineAction = ({ renderAction, onClick, disabled, title, unhoveredColor = colors_1.LIGHT_TEXT, variant, }) => {
9
+ const InlineAction = ({ renderAction, onClick, disabled, title, unhoveredColor = colors_1.LIGHT_TEXT, variant, style: customStyle, className, ...buttonProps }) => {
10
+ var _a;
9
11
  const { tabIndex } = (0, z_index_1.useZIndex)();
10
- const [hovered, setHovered] = (0, react_1.useState)(false);
11
- const onPointerEnter = (0, react_1.useCallback)(() => {
12
- setHovered(true);
13
- }, []);
14
- const onPointerLeave = (0, react_1.useCallback)(() => {
15
- setHovered(false);
16
- }, []);
17
12
  const style = (0, react_1.useMemo)(() => {
18
13
  return {
19
14
  border: 'none',
20
- background: disabled
21
- ? colors_1.TRANSPARENT
22
- : (0, colors_1.getBackgroundFromHoverState)({ hovered, selected: false }),
23
15
  height: 24,
24
16
  width: variant === 'compact' ? 14 : 24,
25
17
  padding: 0,
@@ -29,8 +21,19 @@ const InlineAction = ({ renderAction, onClick, disabled, title, unhoveredColor =
29
21
  borderRadius: 3,
30
22
  opacity: disabled ? 0.5 : 1,
31
23
  pointerEvents: disabled ? 'none' : 'auto',
24
+ ...(0, hoverable_1.hoverableStyle)({
25
+ idleBackground: colors_1.TRANSPARENT,
26
+ hoverBackground: disabled
27
+ ? colors_1.TRANSPARENT
28
+ : (0, colors_1.getBackgroundFromHoverState)({ hovered: true, selected: false }),
29
+ idleColor: unhoveredColor,
30
+ hoverColor: disabled ? unhoveredColor : colors_1.WHITE,
31
+ }),
32
+ ...customStyle,
32
33
  };
33
- }, [disabled, hovered, variant]);
34
- return (jsx_runtime_1.jsx("button", { type: "button", disabled: disabled, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, onClick: onClick, style: style, tabIndex: tabIndex, title: title, "aria-label": title, children: renderAction(hovered ? colors_1.WHITE : unhoveredColor) }));
34
+ }, [customStyle, disabled, unhoveredColor, variant]);
35
+ return (jsx_runtime_1.jsx("button", { ...buttonProps, type: "button", className: className
36
+ ? `${hoverable_1.HOVERABLE_CLASS_NAME} ${className}`
37
+ : hoverable_1.HOVERABLE_CLASS_NAME, disabled: disabled, onClick: onClick, style: style, tabIndex: tabIndex, title: title, "aria-label": (_a = buttonProps['aria-label']) !== null && _a !== void 0 ? _a : title, children: renderAction(colors_1.CURRENT_COLOR) }));
35
38
  };
36
39
  exports.InlineAction = InlineAction;
@@ -1,5 +1,6 @@
1
1
  import { type InlineActionProps } from './InlineAction';
2
2
  import type { ComboboxValue } from './NewComposition/ComboBox';
3
- export declare const InlineDropdown: ({ values, unhoveredColor, ...props }: Omit<InlineActionProps, "onClick"> & {
4
- readonly values: ComboboxValue[];
3
+ export declare const InlineDropdown: ({ values, getItems, unhoveredColor, ...props }: Omit<InlineActionProps, "onClick"> & {
4
+ readonly values?: ComboboxValue[] | undefined;
5
+ readonly getItems?: (() => ComboboxValue[]) | undefined;
5
6
  }) => import("react/jsx-runtime").JSX.Element;
@@ -16,7 +16,8 @@ const InlineAction_1 = require("./InlineAction");
16
16
  const portals_1 = require("./Menu/portals");
17
17
  const styles_1 = require("./Menu/styles");
18
18
  const MenuContent_1 = require("./NewComposition/MenuContent");
19
- const InlineDropdown = ({ values, unhoveredColor, ...props }) => {
19
+ const InlineDropdown = ({ values, getItems, unhoveredColor, ...props }) => {
20
+ var _a, _b;
20
21
  const ref = (0, react_1.useRef)(null);
21
22
  const [opened, setOpened] = (0, react_1.useState)({ type: 'not-open' });
22
23
  const { currentZIndex } = (0, z_index_1.useZIndex)();
@@ -26,10 +27,20 @@ const InlineDropdown = ({ values, unhoveredColor, ...props }) => {
26
27
  });
27
28
  const isMobileLayout = (0, mobile_layout_1.useMobileLayout)();
28
29
  const onClick = (0, react_1.useCallback)((e) => {
30
+ var _a;
29
31
  e.preventDefault();
30
32
  e.stopPropagation();
31
- setOpened({ type: 'open', left: e.clientX, top: e.clientY });
32
- }, []);
33
+ const invocationValues = (_a = getItems === null || getItems === void 0 ? void 0 : getItems()) !== null && _a !== void 0 ? _a : null;
34
+ if ((invocationValues === null || invocationValues === void 0 ? void 0 : invocationValues.length) === 0) {
35
+ return;
36
+ }
37
+ setOpened({
38
+ type: 'open',
39
+ left: e.clientX,
40
+ top: e.clientY,
41
+ values: invocationValues,
42
+ });
43
+ }, [getItems]);
33
44
  const spaceToBottom = (0, react_1.useMemo)(() => {
34
45
  if (size && opened.type === 'open') {
35
46
  return size.windowSize.height - opened.top;
@@ -80,8 +91,8 @@ const InlineDropdown = ({ values, unhoveredColor, ...props }) => {
80
91
  setOpened({ type: 'not-open' });
81
92
  }, []);
82
93
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
83
- jsx_runtime_1.jsx("div", { ref: ref, children: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { onClick: onClick, unhoveredColor: opened.type === 'open' ? colors_1.WHITE : unhoveredColor, ...props }) }), portalStyle
84
- ? react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { style: styles_1.fullScreenOverlay, children: jsx_runtime_1.jsx("div", { style: styles_1.outerPortal, className: "css-reset", children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onOutsideClick: onHide, onEscape: onHide, children: jsx_runtime_1.jsx("div", { style: portalStyle, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: noop_1.noop, onPreviousMenu: noop_1.noop, values: values, onHide: onHide, leaveLeftSpace: true, preselectIndex: false, topItemCanBeUnselected: false, fixedHeight: null }) }) }) }) }), (0, portals_1.getPortal)(currentZIndex))
94
+ jsx_runtime_1.jsx("div", { ref: ref, children: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { onClick: onClick, unhoveredColor: opened.type === 'open' ? colors_1.WHITE : unhoveredColor, ...props }) }), portalStyle && opened.type === 'open'
95
+ ? react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { style: styles_1.fullScreenOverlay, children: jsx_runtime_1.jsx("div", { style: styles_1.outerPortal, className: "css-reset", children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onOutsideClick: onHide, onEscape: onHide, children: jsx_runtime_1.jsx("div", { style: portalStyle, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: noop_1.noop, onPreviousMenu: noop_1.noop, values: (_b = (_a = opened.values) !== null && _a !== void 0 ? _a : values) !== null && _b !== void 0 ? _b : [], onHide: onHide, leaveLeftSpace: true, preselectIndex: false, topItemCanBeUnselected: false, fixedHeight: null }) }) }) }) }), (0, portals_1.getPortal)(currentZIndex))
85
96
  : null] }));
86
97
  };
87
98
  exports.InlineDropdown = InlineDropdown;
@@ -37,16 +37,17 @@ const computedValueStyle = {
37
37
  fontFamily: 'sans-serif',
38
38
  fontSize: 12,
39
39
  fontStyle: 'italic',
40
- lineHeight: 1.5,
40
+ lineHeight: '20px',
41
41
  };
42
42
  const dimensionsControls = {
43
43
  alignItems: 'center',
44
+ color: 'inherit',
44
45
  display: 'flex',
45
46
  fontFamily: 'sans-serif',
46
- fontSize: 12,
47
+ fontSize: 13,
47
48
  gap: 4,
48
49
  justifyContent: 'flex-end',
49
- lineHeight: '16px',
50
+ lineHeight: '20px',
50
51
  minWidth: 0,
51
52
  };
52
53
  const presetButtonIcon = {
@@ -69,14 +70,14 @@ const metadataLabelControls = {
69
70
  fontFamily: 'sans-serif',
70
71
  fontSize: 13,
71
72
  gap: 2,
72
- lineHeight: '18px',
73
+ lineHeight: '20px',
73
74
  minWidth: 0,
74
75
  };
75
76
  const metadataLabelText = {
76
77
  color: 'inherit',
77
78
  fontFamily: 'sans-serif',
78
79
  fontSize: 13,
79
- lineHeight: '18px',
80
+ lineHeight: '20px',
80
81
  minWidth: 0,
81
82
  overflow: 'hidden',
82
83
  textOverflow: 'ellipsis',
@@ -287,7 +288,7 @@ const CompositionMetadata = ({ compositionId, disabled, stack }) => {
287
288
  return (jsx_runtime_1.jsxs("div", { style: compositionMetadataContainer, children: [jsx_runtime_1.jsx(common_1.InspectorDetailRow, { label: (hovered) => (jsx_runtime_1.jsxs("div", { style: metadataLabelControls, children: [
288
289
  jsx_runtime_1.jsx("span", { style: metadataLabelText, children: "Dimensions" }), disabled || widthIsComputed || heightIsComputed ? null : (jsx_runtime_1.jsx(PresetDropdown, { disabled: pendingValues.width !== undefined ||
289
290
  pendingValues.height !== undefined, title: "Choose dimension preset", values: dimensionPresetValues, visible: hovered }))] })), children: jsx_runtime_1.jsxs("div", { style: dimensionsControls, children: [
290
- jsx_runtime_1.jsx(CompositionMetadataValue, { computed: widthIsComputed, disabled: disabled, field: "width", onSave: saveMetadata, pendingValue: (_a = pendingValues.width) !== null && _a !== void 0 ? _a : null, value: video.width }), jsx_runtime_1.jsx(CompositionMetadataValue, { computed: heightIsComputed, disabled: disabled, field: "height", onSave: saveMetadata, pendingValue: (_b = pendingValues.height) !== null && _b !== void 0 ? _b : null, value: video.height })
291
+ jsx_runtime_1.jsx(CompositionMetadataValue, { computed: widthIsComputed, disabled: disabled, field: "width", onSave: saveMetadata, pendingValue: (_a = pendingValues.width) !== null && _a !== void 0 ? _a : null, value: video.width }), disabled ? '\u00A0' : null, jsx_runtime_1.jsx(CompositionMetadataValue, { computed: heightIsComputed, disabled: disabled, field: "height", onSave: saveMetadata, pendingValue: (_b = pendingValues.height) !== null && _b !== void 0 ? _b : null, value: video.height })
291
292
  ] }) }), isStill ? null : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [jsx_runtime_1.jsx(common_1.InspectorDetailRow, { label: (hovered) => (jsx_runtime_1.jsxs("div", { style: metadataLabelControls, children: [
292
293
  jsx_runtime_1.jsx("span", { style: metadataLabelText, children: "Frame rate" }), disabled || fpsIsComputed ? null : (jsx_runtime_1.jsx(PresetDropdown, { disabled: pendingValues.fps !== undefined, title: "Choose frame rate preset", values: frameRatePresetValues, visible: hovered }))] })), children: jsx_runtime_1.jsx("div", { style: dimensionsControls, children: jsx_runtime_1.jsx(CompositionMetadataValue, { computed: fpsIsComputed, disabled: disabled, field: "fps", onSave: saveMetadata, pendingValue: (_c = pendingValues.fps) !== null && _c !== void 0 ? _c : null, value: video.fps }) }) }), jsx_runtime_1.jsx(common_1.InspectorDetailRow, { label: "Duration", children: jsx_runtime_1.jsx(CompositionMetadataValue, { computed: durationIsComputed, disabled: disabled, field: "durationInFrames", onSave: saveMetadata, pendingValue: (_d = pendingValues.durationInFrames) !== null && _d !== void 0 ? _d : null, value: video.durationInFrames }) })
293
294
  ] }))] }));
@@ -44,7 +44,7 @@ const ConnectedCompositionRow = ({ composition }) => {
44
44
  const connectionStatus = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx)
45
45
  .previewServerState.type;
46
46
  const resolvedLocation = (0, use_resolved_stack_1.useResolvedStack)(composition.stack);
47
- const contextMenuItems = (0, react_1.useMemo)(() => (0, composition_menu_items_1.getCompositionContextMenuItems)({
47
+ const getContextMenuItems = (0, react_1.useCallback)(() => (0, composition_menu_items_1.getCompositionContextMenuItems)({
48
48
  closeMenu: noop_1.noop,
49
49
  composition,
50
50
  connectionStatus,
@@ -53,5 +53,5 @@ const ConnectedCompositionRow = ({ composition }) => {
53
53
  resolvedLocation,
54
54
  setSelectedModal,
55
55
  }), [composition, connectionStatus, resolvedLocation, setSelectedModal]);
56
- return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: contextMenuItems, onOpen: null, style: compositionContextMenuStyle, children: jsx_runtime_1.jsx(common_1.InspectorInlineAction, { disabled: false, onClick: () => selectComposition(composition, true), renderIcon: (color) => (jsx_runtime_1.jsx(CompositionOrStillIcon_1.CompositionOrStillIcon, { color: color, composition: composition, style: compositionIconStyle })), children: composition.id }) }));
56
+ return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, style: compositionContextMenuStyle, children: jsx_runtime_1.jsx(common_1.InspectorInlineAction, { disabled: false, onClick: () => selectComposition(composition, true), renderIcon: (color) => (jsx_runtime_1.jsx(CompositionOrStillIcon_1.CompositionOrStillIcon, { color: color, composition: composition, style: compositionIconStyle })), children: composition.id }) }));
57
57
  };
@@ -12,6 +12,7 @@ const InputDragger_1 = require("../NewComposition/InputDragger");
12
12
  const call_delete_keyframe_1 = require("../Timeline/call-delete-keyframe");
13
13
  const call_move_keyframe_1 = require("../Timeline/call-move-keyframe");
14
14
  const get_easing_selection_after_keyframe_delete_1 = require("../Timeline/get-easing-selection-after-keyframe-delete");
15
+ const imperative_state_1 = require("../Timeline/imperative-state");
15
16
  const parse_keyframe_field_from_node_path_1 = require("../Timeline/parse-keyframe-field-from-node-path");
16
17
  const TimelineEffectPropItem_1 = require("../Timeline/TimelineEffectPropItem");
17
18
  const TimelineSelection_1 = require("../Timeline/TimelineSelection");
@@ -54,7 +55,6 @@ const TrashIcon = ({ color }) => {
54
55
  const KeyframeInspector = ({ selection }) => {
55
56
  const track = (0, use_track_for_selection_1.useTrackForSelection)(selection);
56
57
  const videoConfig = (0, remotion_1.useVideoConfig)();
57
- const timelinePosition = remotion_1.Internals.Timeline.useTimelinePosition();
58
58
  const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
59
59
  const { clearDragOverrides, clearEffectDragOverrides, setDragOverrides, setEffectDragOverrides, setPropStatuses, } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
60
60
  const { getDragOverrides, getEffectDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
@@ -277,7 +277,7 @@ const KeyframeInspector = ({ selection }) => {
277
277
  keyframeDisplayOffset: details.keyframeDisplayOffset,
278
278
  nodePathInfo: selection.nodePathInfo,
279
279
  propStatus: details.propStatus,
280
- timelinePosition,
280
+ timelinePosition: (0, imperative_state_1.getCurrentFrame)(),
281
281
  })
282
282
  : null;
283
283
  if (easingSelection !== null) {
@@ -315,7 +315,6 @@ const KeyframeInspector = ({ selection }) => {
315
315
  selectItems,
316
316
  selection.nodePathInfo,
317
317
  setPropStatuses,
318
- timelinePosition,
319
318
  ]);
320
319
  if (details === null || track === null) {
321
320
  return jsx_runtime_1.jsx(common_1.InspectorMessage, { children: "Keyframe unavailable" });
@@ -72,7 +72,7 @@ const SequenceSourceActions = ({ selection, track, validatedSource }) => {
72
72
  const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
73
73
  const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
74
74
  const propStatusesForOverride = (0, react_1.useMemo)(() => remotion_1.Internals.getPropStatusesCtx(propStatuses, selection.nodePathInfo.sequenceSubscriptionKey), [propStatuses, selection.nodePathInfo.sequenceSubscriptionKey]);
75
- const freezeFrameMenuItem = (0, use_sequence_freeze_frame_menu_item_1.useSequenceFreezeFrameMenuItem)({
75
+ const freezeFrameMenuItem = (0, use_sequence_freeze_frame_menu_item_1.getSequenceFreezeFrameMenuItem)({
76
76
  clientId: previewServerState.type === 'connected' && (0, interactivity_enabled_1.isStudioInteractivityEnabled)()
77
77
  ? previewServerState.clientId
78
78
  : null,
@@ -7,6 +7,7 @@ exports.InspectorDefaultPropsWarnings = exports.InspectorInlineAction = exports.
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const react_1 = __importDefault(require("react"));
9
9
  const colors_1 = require("../../helpers/colors");
10
+ const hoverable_1 = require("../../helpers/hoverable");
10
11
  const InspectorPanelLayout_1 = require("../InspectorPanelLayout");
11
12
  const layout_1 = require("../layout");
12
13
  const ValidationMessage_1 = require("../NewComposition/ValidationMessage");
@@ -49,11 +50,9 @@ const INLINE_LABEL_BUTTON_MARGIN = 4;
49
50
  const inlineLabelButton = {
50
51
  alignItems: 'center',
51
52
  appearance: 'none',
52
- backgroundColor: colors_1.TRANSPARENT,
53
53
  border: 'none',
54
54
  borderRadius: 4,
55
55
  boxSizing: 'border-box',
56
- color: colors_1.LIGHT_TEXT,
57
56
  cursor: 'default',
58
57
  display: 'flex',
59
58
  fontFamily: 'sans-serif',
@@ -74,7 +73,6 @@ const compactInlineLabelButton = {
74
73
  height: layout_1.COMPACT_INLINE_ROW_HEIGHT,
75
74
  };
76
75
  const inlineLabelText = {
77
- color: colors_1.LIGHT_TEXT,
78
76
  flex: 1,
79
77
  fontFamily: 'sans-serif',
80
78
  fontSize: 13,
@@ -117,54 +115,46 @@ const segmentedTrailingAction = {
117
115
  padding: 0,
118
116
  width: 28,
119
117
  };
120
- const hiddenSegmentedTrailingIcon = {
121
- ...inlineLabelIcon,
122
- opacity: 0,
123
- };
124
118
  const InspectorInlineAction = ({ children, disabled, onClick, renderIcon, size = 'default', style, title, variant = { type: 'single' }, }) => {
125
- const [hovered, setHovered] = react_1.default.useState(false);
126
- const color = hovered && !disabled ? colors_1.WHITE : colors_1.LIGHT_TEXT;
127
119
  const isSegmented = variant.type === 'segmented';
120
+ // A non-clickable single action (onClick === null) never shows a hover
121
+ // effect. In the segmented variant, the main segment highlights whenever
122
+ // the group is hovered, even if it is not clickable itself.
123
+ const showsHover = !disabled && (onClick !== null || isSegmented);
128
124
  const buttonStyle = react_1.default.useMemo(() => ({
129
125
  ...(disabled ? inlineLabelButtonDisabled : inlineLabelButton),
130
- backgroundColor: (0, colors_1.getBackgroundFromHoverState)({
131
- hovered: hovered && !disabled,
132
- selected: false,
126
+ ...(0, hoverable_1.hoverableStyle)({
127
+ idleBackground: colors_1.TRANSPARENT,
128
+ hoverBackground: showsHover
129
+ ? (0, colors_1.getBackgroundFromHoverState)({ hovered: true, selected: false })
130
+ : colors_1.TRANSPARENT,
131
+ idleColor: colors_1.LIGHT_TEXT,
132
+ hoverColor: showsHover ? colors_1.WHITE : colors_1.LIGHT_TEXT,
133
133
  }),
134
- color,
135
134
  ...(size === 'compact' ? compactInlineLabelButton : null),
136
135
  ...(isSegmented ? segmentedMainAction : null),
137
136
  ...style,
138
- }), [color, disabled, hovered, isSegmented, size, style]);
139
- const textStyle = react_1.default.useMemo(() => ({
140
- ...inlineLabelText,
141
- color,
142
- }), [color]);
143
- const onPointerEnter = react_1.default.useCallback(() => {
144
- setHovered(true);
145
- }, []);
146
- const onPointerLeave = react_1.default.useCallback(() => {
147
- setHovered(false);
148
- }, []);
149
- const mainContent = (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [renderIcon ? (jsx_runtime_1.jsx("span", { style: inlineLabelIcon, children: renderIcon(color) })) : null, jsx_runtime_1.jsx("span", { style: textStyle, children: children })
137
+ }), [disabled, showsHover, isSegmented, size, style]);
138
+ const mainContent = (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [renderIcon ? (jsx_runtime_1.jsx("span", { style: inlineLabelIcon, children: renderIcon(colors_1.CURRENT_COLOR) })) : null, jsx_runtime_1.jsx("span", { style: inlineLabelText, children: children })
150
139
  ] }));
151
- const mainAction = onClick ? (jsx_runtime_1.jsx("button", { className: "__remotion-inspector-inline-action", type: "button", disabled: disabled, style: buttonStyle, title: title, onClick: onClick, onPointerEnter: disabled || isSegmented ? undefined : onPointerEnter, onPointerLeave: isSegmented ? undefined : onPointerLeave, children: mainContent })) : (jsx_runtime_1.jsx("div", { style: buttonStyle, title: title, children: mainContent }));
140
+ const mainAction = onClick ? (jsx_runtime_1.jsx("button", { className: `__remotion-inspector-inline-action ${hoverable_1.HOVERABLE_CLASS_NAME}`, type: "button", disabled: disabled, style: buttonStyle, title: title, onClick: onClick, children: mainContent })) : (jsx_runtime_1.jsx("div", { className: hoverable_1.HOVERABLE_CLASS_NAME, style: buttonStyle, title: title, children: mainContent }));
152
141
  if (variant.type === 'segmented') {
153
- const trailingColor = hovered && !variant.trailing.disabled ? colors_1.WHITE : colors_1.LIGHT_TEXT;
154
142
  const trailingStyle = {
155
143
  ...segmentedTrailingAction,
156
- backgroundColor: variant.trailing.disabled
157
- ? colors_1.TRANSPARENT
158
- : (0, colors_1.getBackgroundFromHoverState)({
159
- hovered,
160
- selected: false,
161
- }),
144
+ ...(0, hoverable_1.hoverableStyle)({
145
+ idleBackground: colors_1.TRANSPARENT,
146
+ hoverBackground: variant.trailing.disabled
147
+ ? colors_1.TRANSPARENT
148
+ : (0, colors_1.getBackgroundFromHoverState)({ hovered: true, selected: false }),
149
+ idleColor: colors_1.LIGHT_TEXT,
150
+ hoverColor: variant.trailing.disabled ? colors_1.LIGHT_TEXT : colors_1.WHITE,
151
+ }),
162
152
  height: size === 'compact'
163
153
  ? layout_1.COMPACT_INLINE_ROW_HEIGHT
164
154
  : layout_1.COMPACT_CONTROL_ROW_HEIGHT,
165
155
  opacity: variant.trailing.disabled ? 0.35 : 1,
166
156
  };
167
- return (jsx_runtime_1.jsxs("div", { style: segmentedInlineAction, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, children: [mainAction, jsx_runtime_1.jsx("button", { type: "button", disabled: variant.trailing.disabled, style: trailingStyle, title: variant.trailing.title, onClick: variant.trailing.onClick, children: jsx_runtime_1.jsx("span", { style: hovered ? inlineLabelIcon : hiddenSegmentedTrailingIcon, children: variant.trailing.renderIcon(trailingColor) }) })
157
+ return (jsx_runtime_1.jsxs("div", { className: hoverable_1.HOVER_GROUP_CLASS_NAME, style: segmentedInlineAction, children: [mainAction, jsx_runtime_1.jsx("button", { type: "button", className: hoverable_1.HOVERABLE_CLASS_NAME, disabled: variant.trailing.disabled, style: trailingStyle, title: variant.trailing.title, onClick: variant.trailing.onClick, children: jsx_runtime_1.jsx("span", { className: hoverable_1.HOVER_GROUP_REVEAL_CLASS_NAME, style: inlineLabelIcon, children: variant.trailing.renderIcon(colors_1.CURRENT_COLOR) }) })
168
158
  ] }));
169
159
  }
170
160
  return mainAction;
@@ -162,7 +162,9 @@ exports.detailRow = {
162
162
  };
163
163
  exports.detailLabel = {
164
164
  color: colors_1.LIGHT_TEXT,
165
+ fontFamily: 'sans-serif',
165
166
  fontSize: 13,
167
+ lineHeight: '20px',
166
168
  minWidth: 0,
167
169
  overflow: 'hidden',
168
170
  textOverflow: 'ellipsis',
@@ -170,8 +172,10 @@ exports.detailLabel = {
170
172
  };
171
173
  exports.detailValue = {
172
174
  color: colors_1.WHITE,
175
+ fontFamily: 'sans-serif',
173
176
  fontSize: 13,
174
177
  fontVariantNumeric: 'tabular-nums',
178
+ lineHeight: '20px',
175
179
  minWidth: 0,
176
180
  textAlign: 'right',
177
181
  wordBreak: 'break-word',
@@ -266,7 +266,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
266
266
  jsx_runtime_1.jsx("span", { style: remoteSourceLeading, children: parts.leading }), jsx_runtime_1.jsx("span", { style: remoteSourceTrailing, children: parts.trailing })
267
267
  ] })),
268
268
  disabled: false,
269
- onClick: null,
269
+ onClick: () => (0, timeline_asset_link_1.openTimelineAssetLink)(linkInfo, selectAsset),
270
270
  title: linkInfo.href,
271
271
  };
272
272
  }
@@ -18,6 +18,6 @@ const LoopToggle = ({ loop, setLoop }) => {
18
18
  const onClick = (0, react_1.useCallback)(() => {
19
19
  (0, exports.toggleLoop)(setLoop);
20
20
  }, [setLoop]);
21
- return (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: accessibilityLabel, "aria-label": accessibilityLabel, onClick: onClick, children: jsx_runtime_1.jsx("svg", { viewBox: "0 0 512 512", style: { width: 18, height: 18 }, children: jsx_runtime_1.jsx("path", { fill: loop ? colors_1.BLUE : colors_1.WHITE, d: "M493.544 181.463c11.956 22.605 18.655 48.4 18.452 75.75C511.339 345.365 438.56 416 350.404 416H192v47.495c0 22.475-26.177 32.268-40.971 17.475l-80-80c-9.372-9.373-9.372-24.569 0-33.941l80-80C166.138 271.92 192 282.686 192 304v48h158.875c52.812 0 96.575-42.182 97.12-94.992.155-15.045-3.17-29.312-9.218-42.046-4.362-9.185-2.421-20.124 4.8-27.284 4.745-4.706 8.641-8.555 11.876-11.786 11.368-11.352 30.579-8.631 38.091 5.571zM64.005 254.992c.545-52.81 44.308-94.992 97.12-94.992H320v47.505c0 22.374 26.121 32.312 40.971 17.465l80-80c9.372-9.373 9.372-24.569 0-33.941l-80-80C346.014 16.077 320 26.256 320 48.545V96H161.596C73.44 96 .661 166.635.005 254.788c-.204 27.35 6.495 53.145 18.452 75.75 7.512 14.202 26.723 16.923 38.091 5.57 3.235-3.231 7.13-7.08 11.876-11.786 7.22-7.16 9.162-18.098 4.8-27.284-6.049-12.735-9.374-27.001-9.219-42.046z" }) }) }));
21
+ return (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: accessibilityLabel, "aria-label": accessibilityLabel, onClick: onClick, children: (color) => (jsx_runtime_1.jsx("svg", { viewBox: "0 0 512 512", style: { width: 18, height: 18 }, children: jsx_runtime_1.jsx("path", { fill: loop ? colors_1.BLUE : color, d: "M384 150.3V41.6l64 53.3v2l-64 53.3zM352 23.5V80H192C86 80 0 166 0 272c0 8.8 7.2 16 16 16s16-7.2 16-16c0-88.4 71.6-160 160-160h160v56.5c0 13 10.5 23.5 23.5 23.5 5.5 0 10.8-1.9 15-5.4l78-65c7.3-6.1 11.5-15.1 11.5-24.6v-2c0-9.5-4.2-18.5-11.5-24.6l-78-65c-4.2-3.5-9.5-5.4-15-5.4-13 0-23.5 10.5-23.5 23.5zM128 415.9v54.5l-64-53.3v-2l64-53.3v54.1zM160 400v-56.5c0-13-10.5-23.5-23.5-23.5-5.5 0-10.8 1.9-15 5.4l-78 65C36.2 396.5 32 405.5 32 415v2c0 9.5 4.2 18.5 11.5 24.6l78 65c4.2 3.5 9.5 5.4 15 5.4 13 0 23.5-10.5 23.5-23.5V432h160c106 0 192-86 192-192 0-8.8-7.2-16-16-16s-16 7.2-16 16c0 88.4-71.6 160-160 160H160z" }) })) }));
22
22
  };
23
23
  exports.LoopToggle = LoopToggle;