@remotion/studio 4.0.525 → 4.0.527

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 (195) hide show
  1. package/dist/api/focus-default-props-path.js +7 -1
  2. package/dist/api/restart-studio.d.ts +1 -1
  3. package/dist/api/restart-studio.js +1 -1
  4. package/dist/components/AgentPrompt.d.ts +6 -0
  5. package/dist/components/AgentPrompt.js +107 -0
  6. package/dist/components/AssetFileIcon.js +2 -0
  7. package/dist/components/AssetSelectorItem.d.ts +1 -23
  8. package/dist/components/AssetSelectorItem.js +10 -200
  9. package/dist/components/Canvas.js +109 -44
  10. package/dist/components/CanvasCaptureDropHandler.js +63 -0
  11. package/dist/components/CanvasOrLoading.js +10 -2
  12. package/dist/components/CaptionInspector.js +9 -3
  13. package/dist/{error-overlay/remotion-overlay → components}/CodeFrame.d.ts +2 -0
  14. package/dist/components/CodeFrame.js +77 -0
  15. package/dist/components/CompositionSelectorItem.js +7 -17
  16. package/dist/components/CurrentAsset.js +6 -4
  17. package/dist/components/ElementInstallConfirmation.js +69 -38
  18. package/dist/components/FilePreview.js +4 -0
  19. package/dist/components/FixComputedValueModal.js +64 -96
  20. package/dist/components/GenerateWithAgentModal.d.ts +9 -0
  21. package/dist/components/GenerateWithAgentModal.js +39 -0
  22. package/dist/components/InitialCompositionLoader.js +1 -1
  23. package/dist/components/InlineDropdown.js +26 -2
  24. package/dist/components/InlineEditableTitle.js +3 -0
  25. package/dist/components/InspectorOpenInEditor.js +8 -4
  26. package/dist/components/InspectorPanel/CollapsibleInspectorSection.d.ts +7 -0
  27. package/dist/components/InspectorPanel/CollapsibleInspectorSection.js +14 -0
  28. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.d.ts +1 -1
  29. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +20 -8
  30. package/dist/components/InspectorPanel/CompositionInspector.js +32 -15
  31. package/dist/components/InspectorPanel/CompositionMetadata.js +7 -0
  32. package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +6 -12
  33. package/dist/components/InspectorPanel/ElementLibraryButton.js +2 -0
  34. package/dist/components/InspectorPanel/GuideInspector.js +2 -3
  35. package/dist/components/InspectorPanel/KeyframeSettings.js +5 -6
  36. package/dist/components/InspectorPanel/MultiSequenceInspector.js +34 -2
  37. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +45 -4
  38. package/dist/components/InspectorPanel/common.d.ts +4 -0
  39. package/dist/components/InspectorPanel/common.js +15 -2
  40. package/dist/components/InspectorPanel/styles.d.ts +0 -3
  41. package/dist/components/InspectorPanel/styles.js +3 -27
  42. package/dist/components/InspectorPanel/use-composition-actions.d.ts +2 -0
  43. package/dist/components/InspectorPanel/use-composition-actions.js +16 -0
  44. package/dist/components/InspectorPanel/use-inspector-section-expanded.d.ts +1 -0
  45. package/dist/components/InspectorPanel/use-inspector-section-expanded.js +21 -0
  46. package/dist/components/InspectorSequenceSection.js +44 -35
  47. package/dist/components/InspectorSourceLocation.js +4 -0
  48. package/dist/components/KeyboardShortcutsSettings.js +12 -4
  49. package/dist/components/LutPreview.d.ts +4 -0
  50. package/dist/components/LutPreview.js +192 -0
  51. package/dist/components/MenuBuildIndicator.js +1 -0
  52. package/dist/components/MenuCompositionName.js +4 -9
  53. package/dist/components/Modals.js +3 -6
  54. package/dist/components/ModelsSettings.js +15 -4
  55. package/dist/components/NewComposition/CancelButton.js +1 -1
  56. package/dist/components/Notifications/NotificationCenter.d.ts +0 -1
  57. package/dist/components/Notifications/NotificationCenter.js +1 -22
  58. package/dist/components/Preview.js +3 -0
  59. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -0
  60. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -0
  61. package/dist/components/QuickSwitcher/QuickSwitcherResult.js +4 -9
  62. package/dist/components/RadioButton.js +1 -0
  63. package/dist/components/RenderModal/DataEditor.js +4 -1
  64. package/dist/components/RenderModal/SchemaEditor/scroll-to-default-props-path.d.ts +1 -0
  65. package/dist/components/RenderModal/SchemaEditor/scroll-to-default-props-path.js +2 -1
  66. package/dist/components/RenderModal/WebRenderModal.js +10 -2
  67. package/dist/components/RenderQueue/CaptionQueueItem.js +5 -2
  68. package/dist/components/RenderQueue/CaptionQueueProcessor.js +35 -8
  69. package/dist/components/RenderQueue/VideoMattingQueueItem.js +1 -0
  70. package/dist/components/RenderQueue/caption-job-types.d.ts +6 -0
  71. package/dist/components/RenderQueue/index.js +1 -0
  72. package/dist/components/RendersTab.js +4 -0
  73. package/dist/components/SelectedOutlineElement.js +6 -0
  74. package/dist/components/SelectedOutlineSnapIndicators.d.ts +6 -0
  75. package/dist/components/SelectedOutlineSnapIndicators.js +16 -12
  76. package/dist/components/SequencePropsSubscriptionProvider.d.ts +3 -0
  77. package/dist/components/SequencePropsSubscriptionProvider.js +8 -6
  78. package/dist/components/SettingsButton.js +11 -2
  79. package/dist/components/SettingsModal.d.ts +1 -2
  80. package/dist/components/SettingsModal.js +24 -6
  81. package/dist/components/SettingsModalFooter.js +17 -3
  82. package/dist/components/SkillsSettings.d.ts +5 -0
  83. package/dist/components/SkillsSettings.js +29 -26
  84. package/dist/components/Timeline/Timeline.js +10 -11
  85. package/dist/components/Timeline/TimelineAssetField.js +81 -51
  86. package/dist/components/Timeline/TimelineDeleteKeybindings.js +6 -9
  87. package/dist/components/Timeline/TimelineEffectItem.js +1 -0
  88. package/dist/components/Timeline/TimelineExpandArrowButton.js +1 -0
  89. package/dist/components/Timeline/TimelineExpandedRow.js +1 -0
  90. package/dist/components/Timeline/TimelineFieldLabel.js +1 -0
  91. package/dist/components/Timeline/TimelineHeightContainer.js +11 -1
  92. package/dist/components/Timeline/TimelineKeyframeControls.js +16 -1
  93. package/dist/components/Timeline/TimelineLayerChildren.d.ts +3 -3
  94. package/dist/components/Timeline/TimelineLayerChildren.js +11 -9
  95. package/dist/components/Timeline/TimelineLayerEye.d.ts +1 -1
  96. package/dist/components/Timeline/TimelineLayerEye.js +6 -3
  97. package/dist/components/Timeline/TimelineList.js +9 -3
  98. package/dist/components/Timeline/TimelineSchemaField.js +2 -6
  99. package/dist/components/Timeline/TimelineSelection.d.ts +14 -3
  100. package/dist/components/Timeline/TimelineSelection.js +91 -49
  101. package/dist/components/Timeline/TimelineSequence.js +28 -2
  102. package/dist/components/Timeline/TimelineSequenceFrame.js +1 -0
  103. package/dist/components/Timeline/TimelineSequenceItem.d.ts +2 -0
  104. package/dist/components/Timeline/TimelineSequenceItem.js +45 -13
  105. package/dist/components/Timeline/TimelineViewport.d.ts +1 -0
  106. package/dist/components/Timeline/TimelineViewport.js +10 -1
  107. package/dist/components/Timeline/TimelineVirtualization.d.ts +3 -3
  108. package/dist/components/Timeline/delete-selected-timeline-item.js +2 -2
  109. package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +6 -2
  110. package/dist/components/Timeline/get-sequence-context-menu-items.js +143 -46
  111. package/dist/components/Timeline/normalize-font-weight-for-keyframe.d.ts +1 -0
  112. package/dist/components/Timeline/normalize-font-weight-for-keyframe.js +19 -0
  113. package/dist/components/Timeline/split-selected-timeline-item.d.ts +13 -10
  114. package/dist/components/Timeline/split-selected-timeline-item.js +58 -35
  115. package/dist/components/Timeline/timeline-display-groups.d.ts +9 -0
  116. package/dist/components/Timeline/timeline-display-groups.js +66 -0
  117. package/dist/components/Timeline/use-timeline-asset-drop.js +21 -21
  118. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +2 -1
  119. package/dist/components/Timeline/use-timeline-expanded-tree.js +1 -2
  120. package/dist/components/TimelineCombobox.js +1 -0
  121. package/dist/components/Transcription/TranscriptionModal.js +16 -11
  122. package/dist/components/Transcription/TranscriptionModalWithOptionalWhisper.js +1 -1
  123. package/dist/components/UpdateStatusContext.d.ts +2 -2
  124. package/dist/components/UpdateStatusContext.js +6 -7
  125. package/dist/components/UpdatesSettings.js +6 -6
  126. package/dist/components/WebMcp.js +41 -41
  127. package/dist/components/asset-context-menu.d.ts +32 -0
  128. package/dist/components/asset-context-menu.js +242 -0
  129. package/dist/components/composition-drop-preview.d.ts +9 -2
  130. package/dist/components/composition-drop-preview.js +7 -4
  131. package/dist/components/composition-menu-items.d.ts +4 -6
  132. package/dist/components/composition-menu-items.js +191 -75
  133. package/dist/components/delete-jsx-nodes-api.d.ts +2 -0
  134. package/dist/components/{delete-jsx-node-api.js → delete-jsx-nodes-api.js} +5 -5
  135. package/dist/components/get-open-in-menu-items.d.ts +6 -5
  136. package/dist/components/get-open-in-menu-items.js +22 -16
  137. package/dist/components/keyboard-shortcuts.d.ts +4 -4
  138. package/dist/components/keyboard-shortcuts.js +3 -1
  139. package/dist/components/public-output-name.d.ts +1 -0
  140. package/dist/components/public-output-name.js +7 -3
  141. package/dist/components/selected-outline-order.js +18 -12
  142. package/dist/components/use-open-in-menu-apps.d.ts +14 -0
  143. package/dist/components/use-open-in-menu-apps.js +33 -0
  144. package/dist/error-overlay/remotion-overlay/ErrorDisplay.js +2 -2
  145. package/dist/error-overlay/remotion-overlay/OpenInEditor.d.ts +1 -0
  146. package/dist/error-overlay/remotion-overlay/OpenInEditor.js +3 -3
  147. package/dist/error-overlay/remotion-overlay/StackFrame.d.ts +5 -1
  148. package/dist/error-overlay/remotion-overlay/StackFrame.js +26 -19
  149. package/dist/esm/{CaptionQueueProcessor-k0yrm3dj.mjs → CaptionQueueProcessor-npa6szn1.mjs} +39 -8
  150. package/dist/esm/{LazyModels-gfmpcy4h.mjs → LazyModels-nh3c8h9p.mjs} +4 -3
  151. package/dist/esm/{LazyModels-m1rf06wh.mjs → LazyModels-rr5v8h5y.mjs} +4 -3
  152. package/dist/esm/{TranscriptionModal-8pvrehg4.mjs → TranscriptionModal-79m5wgcj.mjs} +25 -17
  153. package/dist/esm/{VideoMattingModal-fefbzgka.mjs → VideoMattingModal-31pew0xj.mjs} +9 -6
  154. package/dist/esm/index-21hxsfaa.mjs +239 -0
  155. package/dist/esm/{index-s848rffx.mjs → index-4zen9prq.mjs} +5438 -4686
  156. package/dist/esm/index-5t2dwxsk.mjs +530 -0
  157. package/dist/esm/{index-vsxrxfpj.mjs → index-614tdz2q.mjs} +1 -1
  158. package/dist/esm/{index-0x13f28h.mjs → index-9xxg6218.mjs} +20 -541
  159. package/dist/esm/{index-hbezgbbq.mjs → index-ac5550e7.mjs} +1 -1
  160. package/dist/esm/{index-41kqns5c.mjs → index-e855w59j.mjs} +15 -92
  161. package/dist/esm/{index-tzxb8808.mjs → index-n5gmcvhz.mjs} +8 -8
  162. package/dist/esm/{index-ggqpre9v.mjs → index-ppspzgn9.mjs} +4963 -4178
  163. package/dist/esm/{index-jrw61pkj.mjs → index-r0ejh5sy.mjs} +1 -1
  164. package/dist/esm/index-r1gr3j3a.mjs +80 -0
  165. package/dist/esm/{index-mww32xc8.mjs → index-s7qa3xbw.mjs} +6 -4
  166. package/dist/esm/{index-1089795y.mjs → index-vxwg66ar.mjs} +7 -22
  167. package/dist/esm/index.mjs +13 -6
  168. package/dist/esm/internals.mjs +10 -7
  169. package/dist/esm/previewEntry.mjs +10 -7
  170. package/dist/esm/{resolve-composition-component-location-bt2d6qxq.mjs → resolve-composition-component-location-qrp05g62.mjs} +1 -1
  171. package/dist/helpers/client-id.d.ts +1 -0
  172. package/dist/helpers/client-id.js +8 -4
  173. package/dist/helpers/copy-text.js +1 -16
  174. package/dist/helpers/cube-lut.d.ts +12 -0
  175. package/dist/helpers/cube-lut.js +160 -0
  176. package/dist/helpers/get-preview-file-type.d.ts +1 -1
  177. package/dist/helpers/get-preview-file-type.js +3 -0
  178. package/dist/helpers/hoverable.js +2 -1
  179. package/dist/helpers/open-in-editor.d.ts +5 -2
  180. package/dist/helpers/open-in-editor.js +13 -5
  181. package/dist/helpers/settings-tab-availability.d.ts +14 -0
  182. package/dist/helpers/settings-tab-availability.js +35 -0
  183. package/dist/helpers/studio-runtime-config.d.ts +1 -1
  184. package/dist/helpers/use-keybinding.d.ts +1 -1
  185. package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -2
  186. package/dist/helpers/use-menu-structure.js +31 -21
  187. package/dist/icons/lut.d.ts +4 -0
  188. package/dist/icons/lut.js +6 -0
  189. package/dist/icons/sparkles.d.ts +4 -0
  190. package/dist/icons/sparkles.js +6 -0
  191. package/dist/state/modals.d.ts +17 -2
  192. package/dist/state/timeline-zoom.js +4 -0
  193. package/package.json +19 -19
  194. package/dist/components/delete-jsx-node-api.d.ts +0 -2
  195. package/dist/error-overlay/remotion-overlay/CodeFrame.js +0 -62
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.keyframeEditorValue = exports.keyframeEditorRow = exports.detailValue = exports.detailLabel = exports.detailRow = exports.guideDetailsContainer = exports.detailsBeforeInlineAction = exports.inspectorQuickActionsSection = exports.detailsWithInlineAction = exports.detailsContainer = exports.centeredMessage = exports.selectedContainer = exports.resolveLinkStyle = exports.defaultPropsWarningMessages = exports.defaultPropsWarningContainer = exports.sectionHeaderEnd = exports.sectionHeaderStart = exports.sectionHeaderTitle = exports.sectionHeaderRow = exports.sequenceHeaderSubtitle = exports.inspectorSectionBody = exports.sectionHeader = exports.sequenceHeaderDivider = exports.inspectorOverviewSection = exports.compositionVisualControlsSection = exports.compositionDefaultPropsSection = exports.scrollableContainer = exports.container = void 0;
3
+ exports.keyframeEditorValue = exports.keyframeEditorRow = exports.detailValue = exports.detailLabel = exports.detailRow = exports.guideDetailsContainer = exports.detailsBeforeInlineAction = exports.inspectorQuickActionsSection = exports.detailsWithInlineAction = exports.detailsContainer = exports.centeredMessage = exports.selectedContainer = exports.resolveLinkStyle = exports.defaultPropsWarningMessages = exports.defaultPropsWarningContainer = exports.sectionHeaderEnd = exports.sectionHeaderRow = exports.sequenceHeaderSubtitle = exports.inspectorSectionBody = exports.sectionHeader = exports.sequenceHeaderDivider = exports.inspectorOverviewSection = exports.compositionDefaultPropsSection = exports.scrollableContainer = exports.container = void 0;
4
4
  const colors_1 = require("../../helpers/colors");
5
5
  const InspectorPanelLayout_1 = require("../InspectorPanelLayout");
6
6
  const layout_1 = require("../layout");
@@ -22,10 +22,6 @@ exports.compositionDefaultPropsSection = {
22
22
  display: 'flex',
23
23
  flexDirection: 'column',
24
24
  };
25
- exports.compositionVisualControlsSection = {
26
- display: 'flex',
27
- flexDirection: 'column',
28
- };
29
25
  exports.inspectorOverviewSection = {
30
26
  display: 'flex',
31
27
  flexDirection: 'column',
@@ -44,6 +40,7 @@ exports.sectionHeader = {
44
40
  lineHeight: '24px',
45
41
  padding: `4px 0 4px ${InspectorPanelLayout_1.INSPECTOR_PANEL_HORIZONTAL_PADDING}px`,
46
42
  userSelect: 'none',
43
+ WebkitUserSelect: 'none',
47
44
  };
48
45
  exports.inspectorSectionBody = {
49
46
  display: 'flex',
@@ -76,28 +73,6 @@ exports.sectionHeaderRow = {
76
73
  justifyContent: 'space-between',
77
74
  minWidth: 0,
78
75
  };
79
- exports.sectionHeaderTitle = {
80
- alignItems: 'center',
81
- color: colors_1.LIGHT_TEXT,
82
- display: 'flex',
83
- flexShrink: 0,
84
- fontFamily: 'sans-serif',
85
- fontSize: 12,
86
- fontWeight: 'bold',
87
- lineHeight: '16px',
88
- minHeight: 24,
89
- minWidth: 0,
90
- overflow: 'hidden',
91
- textOverflow: 'ellipsis',
92
- userSelect: 'none',
93
- whiteSpace: 'nowrap',
94
- };
95
- exports.sectionHeaderStart = {
96
- alignItems: 'center',
97
- display: 'flex',
98
- gap: 8,
99
- minWidth: 0,
100
- };
101
76
  exports.sectionHeaderEnd = {
102
77
  alignItems: 'center',
103
78
  display: 'flex',
@@ -170,6 +145,7 @@ exports.detailLabel = {
170
145
  overflow: 'hidden',
171
146
  textOverflow: 'ellipsis',
172
147
  userSelect: 'none',
148
+ WebkitUserSelect: 'none',
173
149
  whiteSpace: 'nowrap',
174
150
  };
175
151
  exports.detailValue = {
@@ -5,7 +5,9 @@ export declare const useCompositionActions: () => {
5
5
  canShowInsertAsset: boolean;
6
6
  canShowInsertComposition: boolean;
7
7
  canShowInsertSolid: boolean;
8
+ canShowGenerateWithAgent: boolean;
8
9
  insertAsset: () => void;
9
10
  insertComposition: () => void;
10
11
  insertSolid: () => Promise<void>;
12
+ generateWithAgent: () => void;
11
13
  };
@@ -57,6 +57,10 @@ const useCompositionActions = () => {
57
57
  const canInsertAsset = canShowInsertAsset && !isAddingAsset;
58
58
  const canShowInsertComposition = canShowInsertAsset;
59
59
  const canInsertComposition = canShowInsertComposition && !isAddingComposition;
60
+ const canShowGenerateWithAgent = previewInteractive &&
61
+ !window.remotion_isReadOnlyStudio &&
62
+ browserStudioOperations === null &&
63
+ currentCompositionId !== null;
60
64
  const insertSolid = (0, react_1.useCallback)(async () => {
61
65
  if (!canInsertSolid ||
62
66
  currentCompositionId === null ||
@@ -231,6 +235,16 @@ const useCompositionActions = () => {
231
235
  onCompositionSelected,
232
236
  setSelectedModal,
233
237
  ]);
238
+ const generateWithAgent = (0, react_1.useCallback)(() => {
239
+ var _a;
240
+ if (currentCompositionId === null) {
241
+ return;
242
+ }
243
+ setSelectedModal({
244
+ type: 'generate-with-agent',
245
+ location: (_a = compositionComponentInfo === null || compositionComponentInfo === void 0 ? void 0 : compositionComponentInfo.location) !== null && _a !== void 0 ? _a : null,
246
+ });
247
+ }, [compositionComponentInfo, currentCompositionId, setSelectedModal]);
234
248
  return {
235
249
  canInsertAsset,
236
250
  canInsertComposition,
@@ -238,9 +252,11 @@ const useCompositionActions = () => {
238
252
  canShowInsertAsset,
239
253
  canShowInsertComposition,
240
254
  canShowInsertSolid,
255
+ canShowGenerateWithAgent,
241
256
  insertAsset,
242
257
  insertComposition,
243
258
  insertSolid,
259
+ generateWithAgent,
244
260
  };
245
261
  };
246
262
  exports.useCompositionActions = useCompositionActions;
@@ -0,0 +1 @@
1
+ export declare const useInspectorSectionExpanded: (sectionId: string) => readonly [boolean, (expanded: boolean) => void];
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useInspectorSectionExpanded = void 0;
4
+ const react_1 = require("react");
5
+ const persist_boolean_map_1 = require("../../helpers/persist-boolean-map");
6
+ const storageKey = 'remotion.editor.inspectorCollapsedSections';
7
+ const useInspectorSectionExpanded = (sectionId) => {
8
+ const [collapsedSections, setCollapsedSections] = (0, react_1.useState)(() => (0, persist_boolean_map_1.loadPersistedBooleanMap)(storageKey));
9
+ const setExpanded = (0, react_1.useCallback)((expanded) => {
10
+ setCollapsedSections((previous) => ({
11
+ ...previous,
12
+ [sectionId]: !expanded,
13
+ }));
14
+ (0, persist_boolean_map_1.persistBooleanMap)(storageKey, {
15
+ ...(0, persist_boolean_map_1.loadPersistedBooleanMap)(storageKey),
16
+ [sectionId]: !expanded,
17
+ });
18
+ }, [sectionId]);
19
+ return [!collapsedSections[sectionId], setExpanded];
20
+ };
21
+ exports.useInspectorSectionExpanded = useInspectorSectionExpanded;
@@ -21,7 +21,6 @@ const InlineCaptionInspector_1 = require("./InlineCaptionInspector");
21
21
  const CollapsibleInspectorSectionHeader_1 = require("./InspectorPanel/CollapsibleInspectorSectionHeader");
22
22
  const common_1 = require("./InspectorPanel/common");
23
23
  const inspector_section_collapse_1 = require("./InspectorPanel/inspector-section-collapse");
24
- const styles_1 = require("./InspectorPanel/styles");
25
24
  const border_radius_representation_1 = require("./Timeline/border-radius-representation");
26
25
  const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
27
26
  const timeline_asset_link_1 = require("./Timeline/timeline-asset-link");
@@ -51,10 +50,6 @@ const plusIcon = {
51
50
  width: 15,
52
51
  height: 15,
53
52
  };
54
- const effectsHeaderTitle = {
55
- ...styles_1.sectionHeaderTitle,
56
- flexShrink: 1,
57
- };
58
53
  const borderRadiusToggleIcon = {
59
54
  flexShrink: 0,
60
55
  height: 15,
@@ -293,30 +288,57 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
293
288
  return next;
294
289
  });
295
290
  }, []);
296
- const { controlRows, effectRows } = (0, react_1.useMemo)(() => {
291
+ const isAdditionalSectionExpanded = (0, react_1.useCallback)((sectionId) => {
292
+ var _a;
293
+ const expansionKey = getInspectorSectionExpansionKey({
294
+ nodePathInfo,
295
+ sectionId,
296
+ });
297
+ return (_a = sectionExpansionOverrides[expansionKey]) !== null && _a !== void 0 ? _a : true;
298
+ }, [nodePathInfo, sectionExpansionOverrides]);
299
+ const setAdditionalSectionExpanded = (0, react_1.useCallback)((sectionId, expanded) => {
300
+ const expansionKey = getInspectorSectionExpansionKey({
301
+ nodePathInfo,
302
+ sectionId,
303
+ });
304
+ setSectionExpansionOverrides((previous) => {
305
+ if (previous[expansionKey] === expanded) {
306
+ return previous;
307
+ }
308
+ const next = { ...previous, [expansionKey]: expanded };
309
+ persistInspectorSectionExpansionOverrides(next);
310
+ return next;
311
+ });
312
+ }, [nodePathInfo]);
313
+ const toggleAdditionalSection = (0, react_1.useCallback)((sectionId) => {
314
+ setAdditionalSectionExpanded(sectionId, !isAdditionalSectionExpanded(sectionId));
315
+ }, [isAdditionalSectionExpanded, setAdditionalSectionExpanded]);
316
+ const effectsExpanded = isAdditionalSectionExpanded('effects');
317
+ const { controlRows, effectRows, hasEffects } = (0, react_1.useMemo)(() => {
297
318
  const controlNodes = [];
298
- let effectsRoot = null;
319
+ let root = null;
299
320
  for (const node of tree) {
300
321
  if (isEffectsRoot(node)) {
301
- effectsRoot = node;
322
+ root = node;
302
323
  }
303
324
  else {
304
325
  controlNodes.push(node);
305
326
  }
306
327
  }
307
328
  return {
329
+ hasEffects: root !== null && root.children.length > 0,
308
330
  controlRows: (0, timeline_layout_1.flattenVisibleTreeNodes)({
309
331
  nodes: controlNodes,
310
332
  getIsExpanded,
311
333
  }),
312
- effectRows: effectsRoot === null
334
+ effectRows: root === null || !effectsExpanded
313
335
  ? []
314
336
  : (0, timeline_layout_1.flattenVisibleTreeNodes)({
315
- nodes: effectsRoot.children,
337
+ nodes: root.children,
316
338
  getIsExpanded,
317
339
  }),
318
340
  };
319
- }, [getIsExpanded, tree]);
341
+ }, [effectsExpanded, getIsExpanded, tree]);
320
342
  (0, react_1.useEffect)(() => {
321
343
  if (selectedEffectKey === null ||
322
344
  inspectorRevealToken === null ||
@@ -335,6 +357,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
335
357
  if (targetIndex === -1) {
336
358
  return;
337
359
  }
360
+ setAdditionalSectionExpanded('effects', true);
338
361
  const parentKeys = [];
339
362
  let { depth } = rows[targetIndex];
340
363
  for (let i = targetIndex - 1; i >= 0 && depth > 0; i--) {
@@ -354,7 +377,12 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
354
377
  persistInspectorCollapsedKeys(next);
355
378
  return next;
356
379
  });
357
- }, [inspectorRevealToken, selectedEffectKey, tree]);
380
+ }, [
381
+ inspectorRevealToken,
382
+ selectedEffectKey,
383
+ setAdditionalSectionExpanded,
384
+ tree,
385
+ ]);
358
386
  (0, react_1.useEffect)(() => {
359
387
  if (inspectorRevealToken === null) {
360
388
  return;
@@ -459,26 +487,6 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
459
487
  return next;
460
488
  });
461
489
  }, [isControlGroupExpanded, nodePathInfo]);
462
- const isAdditionalSectionExpanded = (0, react_1.useCallback)((sectionId) => {
463
- var _a;
464
- const expansionKey = getInspectorSectionExpansionKey({
465
- nodePathInfo,
466
- sectionId,
467
- });
468
- return (_a = sectionExpansionOverrides[expansionKey]) !== null && _a !== void 0 ? _a : true;
469
- }, [nodePathInfo, sectionExpansionOverrides]);
470
- const toggleAdditionalSection = (0, react_1.useCallback)((sectionId) => {
471
- const expansionKey = getInspectorSectionExpansionKey({
472
- nodePathInfo,
473
- sectionId,
474
- });
475
- const nextExpanded = !isAdditionalSectionExpanded(sectionId);
476
- setSectionExpansionOverrides((previous) => {
477
- const next = { ...previous, [expansionKey]: nextExpanded };
478
- persistInspectorSectionExpansionOverrides(next);
479
- return next;
480
- });
481
- }, [isAdditionalSectionExpanded, nodePathInfo]);
482
490
  const captionsExpanded = isAdditionalSectionExpanded('captions');
483
491
  const visibleControlRows = controlGroups.flatMap((group) => {
484
492
  return isControlGroupExpanded(group) ? group.rows : [];
@@ -499,7 +507,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
499
507
  ? runtimeValues.captions
500
508
  : []
501
509
  : null;
502
- const showEffectsSection = nodePathInfo.supportsEffects || effectRows.length > 0;
510
+ const showEffectsSection = nodePathInfo.supportsEffects || hasEffects;
503
511
  const canAddEffect = nodePathInfo.supportsEffects &&
504
512
  previewServerState.type === 'connected' &&
505
513
  (0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
@@ -508,6 +516,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
508
516
  if (!canAddEffect || previewServerState.type !== 'connected') {
509
517
  return;
510
518
  }
519
+ setAdditionalSectionExpanded('effects', true);
511
520
  setSelectedModal({
512
521
  type: 'add-effect',
513
522
  clientId: previewServerState.clientId,
@@ -518,6 +527,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
518
527
  canAddEffect,
519
528
  nodePathInfo.sequenceSubscriptionKey,
520
529
  previewServerState,
530
+ setAdditionalSectionExpanded,
521
531
  setSelectedModal,
522
532
  validatedLocation.source,
523
533
  ]);
@@ -563,8 +573,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
563
573
  : show3DTransformControls
564
574
  ? 'Hide 3D transform controls'
565
575
  : 'Show 3D transform controls', hoveredColor: show3DTransformControls ? colors_1.BLUE : undefined, unhoveredColor: show3DTransformControls ? colors_1.BLUE : colors_1.LIGHT_TEXT, renderAction: (color) => (jsx_runtime_1.jsx(cube_1.CubeIcon, { color: color, style: transform3DToggleIcon })) }));
566
- const effectsHeader = (jsx_runtime_1.jsxs("div", { style: styles_1.sectionHeaderRow, children: [
567
- jsx_runtime_1.jsx("div", { style: effectsHeaderTitle, children: "Effects" }), jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, disabled: !canAddEffect, onClick: onAddEffect, title: canAddEffect ? 'Add effect' : undefined, renderAction: (color) => jsx_runtime_1.jsx(plus_1.Plus, { color: color, style: plusIcon }) })] }));
576
+ const effectsHeader = (jsx_runtime_1.jsx(CollapsibleInspectorSectionHeader_1.CollapsibleInspectorSectionHeader, { action: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, disabled: !canAddEffect, onClick: onAddEffect, title: canAddEffect ? 'Add effect' : undefined, renderAction: (color) => jsx_runtime_1.jsx(plus_1.Plus, { color: color, style: plusIcon }) }), expanded: effectsExpanded, label: "Effects", onToggle: hasEffects ? () => toggleAdditionalSection('effects') : null }));
568
577
  const renderRow = ({ node, depth }) => {
569
578
  return (jsx_runtime_1.jsx(TimelineRowLayoutContext_1.TimelineRowLayoutContext.Provider, { value: TimelineRowLayoutContext_1.INSPECTOR_TIMELINE_ROW_LAYOUT, children: jsx_runtime_1.jsx(TimelineExpandedRow_1.TimelineExpandedRow, { node: node, depth: depth, nestedDepth: 0, rowDepthBase: 0, getIsExpanded: getIsExpanded, toggleTrack: toggleTrack, validatedLocation: validatedLocation, nodePath: nodePathInfo.sequenceSubscriptionKey, schema: schema, keyframeDisplayOffset: keyframeDisplayOffset, keyframeControlsMode: "inspector" }) }, JSON.stringify(node.nodePathInfo)));
570
579
  };
@@ -28,11 +28,13 @@ const sourceLocationStyle = {
28
28
  textDecoration: 'none',
29
29
  textOverflow: 'ellipsis',
30
30
  userSelect: 'none',
31
+ WebkitUserSelect: 'none',
31
32
  whiteSpace: 'nowrap',
32
33
  width: 'fit-content',
33
34
  };
34
35
  const quickActionStyle = {
35
36
  userSelect: 'none',
37
+ WebkitUserSelect: 'none',
36
38
  };
37
39
  const sourceLocationLabelStyle = {
38
40
  color: 'inherit',
@@ -43,6 +45,8 @@ const sourceLocationLabelStyle = {
43
45
  minWidth: 0,
44
46
  overflow: 'hidden',
45
47
  textOverflow: 'ellipsis',
48
+ userSelect: 'none',
49
+ WebkitUserSelect: 'none',
46
50
  whiteSpace: 'nowrap',
47
51
  };
48
52
  const InspectorSourceLocation = ({ location, canOpen, onOpen, renderIcon, size = 'default' }) => {
@@ -37,7 +37,9 @@ exports.KeyboardShortcutsSettings = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const react_1 = __importStar(require("react"));
39
39
  const browser_studio_operations_1 = require("../helpers/browser-studio-operations");
40
+ const client_id_1 = require("../helpers/client-id");
40
41
  const colors_1 = require("../helpers/colors");
42
+ const settings_tab_availability_1 = require("../helpers/settings-tab-availability");
41
43
  const studio_runtime_config_1 = require("../helpers/studio-runtime-config");
42
44
  const caret_1 = require("../icons/caret");
43
45
  const Checkbox_1 = require("./Checkbox");
@@ -158,6 +160,12 @@ const KeyboardShortcutsSettings = () => {
158
160
  var _a;
159
161
  const { error: settingsError, revision, studioRuntimeConfig } = (0, SettingsContext_1.useSettings)();
160
162
  const isBrowserStudio = (0, browser_studio_operations_1.getBrowserStudioOperations)() !== null;
163
+ const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
164
+ const canEdit = (0, settings_tab_availability_1.canEditStudioConfig)({
165
+ isBrowserStudio,
166
+ previewServerConnected: previewServerState.type === 'connected',
167
+ readOnlyStudio: window.remotion_isReadOnlyStudio,
168
+ });
161
169
  const [enabled, setEnabled] = (0, react_1.useState)(true);
162
170
  const [configuredShortcuts, setConfiguredShortcuts] = (0, react_1.useState)({});
163
171
  const [enabledEdited, setEnabledEdited] = (0, react_1.useState)(false);
@@ -212,7 +220,7 @@ const KeyboardShortcutsSettings = () => {
212
220
  }, [configuredShortcuts, enabled, enabledEdited, shortcutsEdited]);
213
221
  const ready = studioRuntimeConfig !== null && syncedRevision === revision;
214
222
  (0, use_auto_save_config_1.useAutoSaveConfig)({
215
- enabled: ready && !isBrowserStudio,
223
+ enabled: ready && canEdit,
216
224
  onError: setError,
217
225
  ready,
218
226
  syncRevision: syncedRevision,
@@ -221,11 +229,11 @@ const KeyboardShortcutsSettings = () => {
221
229
  if (studioRuntimeConfig === null) {
222
230
  return null;
223
231
  }
224
- return (jsx_runtime_1.jsxs("div", { style: container, children: [isBrowserStudio ? null : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
232
+ return (jsx_runtime_1.jsxs("div", { style: container, children: [canEdit ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
225
233
  jsx_runtime_1.jsx("p", { style: dividerLabel, children: "General" }), jsx_runtime_1.jsxs("label", { style: layout_2.optionRow, children: [
226
234
  jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Keyboard shortcuts" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(Checkbox_1.Checkbox, { checked: enabled, name: "keyboard-shortcuts", onChange: onEnabledChange }) })
227
235
  ] })
228
- ] })), visibleShortcutGroups.map((group, groupIndex) => (jsx_runtime_1.jsxs("div", { children: [
236
+ ] })) : null, visibleShortcutGroups.map((group, groupIndex) => (jsx_runtime_1.jsxs("div", { children: [
229
237
  jsx_runtime_1.jsx("p", { style: shortcutSectionTitle, children: group.name }), jsx_runtime_1.jsx("div", { role: "list", "aria-label": group.name, children: group.shortcuts.map((shortcut, shortcutIndex) => {
230
238
  var _a;
231
239
  const configured = shortcut.actionId === null
@@ -306,7 +314,7 @@ const KeyboardShortcutsSettings = () => {
306
314
  shortcutIndex === group.shortcuts.length - 1
307
315
  ? lastShortcutRow
308
316
  : shortcutRow, children: [
309
- jsx_runtime_1.jsx("span", { style: actionName, children: shortcut.action }), shortcut.actionId === null || isBrowserStudio ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
317
+ jsx_runtime_1.jsx("span", { style: actionName, children: shortcut.action }), shortcut.actionId === null || !canEdit ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
310
318
  jsx_runtime_1.jsx("span", { style: shortcutCell, children: jsx_runtime_1.jsx(ShortcutChords, { values: shortcutValues }) }), jsx_runtime_1.jsx("span", {})
311
319
  ] })) : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
312
320
  jsx_runtime_1.jsx("span", { style: shortcutCell, children: jsx_runtime_1.jsx("button", { id: shortcutButtonId, type: "button", style: chordButton, "aria-label": `Change shortcut for ${shortcut.action}`, onClick: () => {
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare const LutPreview: React.FC<{
3
+ readonly src: string;
4
+ }>;
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LutPreview = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const player_1 = require("@remotion/player");
6
+ const react_1 = require("react");
7
+ const colors_1 = require("../helpers/colors");
8
+ const cube_lut_1 = require("../helpers/cube-lut");
9
+ const hoverable_1 = require("../helpers/hoverable");
10
+ const z_index_1 = require("../state/z-index");
11
+ const sampleImage = 'https://remotion.media/transition-bg-blue.jpg';
12
+ const previewWidth = 640;
13
+ const previewHeight = 427;
14
+ const container = {
15
+ padding: 24,
16
+ flex: 1,
17
+ display: 'flex',
18
+ alignItems: 'center',
19
+ justifyContent: 'center',
20
+ fontFamily: 'sans-serif',
21
+ fontSize: 13,
22
+ minHeight: 0,
23
+ };
24
+ const comparison = {
25
+ position: 'relative',
26
+ flexShrink: 0,
27
+ userSelect: 'none',
28
+ WebkitUserSelect: 'none',
29
+ };
30
+ const canvasStyle = {
31
+ display: 'block',
32
+ width: '100%',
33
+ height: 'auto',
34
+ borderRadius: 4,
35
+ userSelect: 'none',
36
+ WebkitUserSelect: 'none',
37
+ };
38
+ const sliderStyle = {
39
+ ...(0, hoverable_1.hoverableStyle)({
40
+ idleBackground: colors_1.TRANSPARENT,
41
+ hoverBackground: colors_1.TRANSPARENT,
42
+ idleColor: colors_1.LIGHT_TEXT,
43
+ hoverColor: colors_1.WHITE,
44
+ }),
45
+ position: 'absolute',
46
+ inset: 0,
47
+ borderRadius: 4,
48
+ cursor: 'default',
49
+ touchAction: 'none',
50
+ userSelect: 'none',
51
+ WebkitUserSelect: 'none',
52
+ };
53
+ const dividerStyle = {
54
+ position: 'absolute',
55
+ top: 0,
56
+ bottom: 0,
57
+ width: 2,
58
+ backgroundColor: colors_1.CURRENT_COLOR,
59
+ transform: 'translateX(-50%)',
60
+ pointerEvents: 'none',
61
+ };
62
+ const handleStyle = {
63
+ position: 'absolute',
64
+ top: '50%',
65
+ left: '50%',
66
+ transform: 'translate(-50%, -50%)',
67
+ width: 32,
68
+ height: 32,
69
+ borderRadius: '50%',
70
+ border: `2px solid ${colors_1.CURRENT_COLOR}`,
71
+ backgroundColor: colors_1.BACKGROUND,
72
+ display: 'flex',
73
+ alignItems: 'center',
74
+ justifyContent: 'center',
75
+ };
76
+ const message = {
77
+ color: colors_1.LIGHT_TEXT,
78
+ textAlign: 'center',
79
+ overflowWrap: 'anywhere',
80
+ };
81
+ const LutPreview = ({ src }) => {
82
+ const containerRef = (0, react_1.useRef)(null);
83
+ const beforeRef = (0, react_1.useRef)(null);
84
+ const afterRef = (0, react_1.useRef)(null);
85
+ const [state, setState] = (0, react_1.useState)({ type: 'loading' });
86
+ const [position, setPosition] = (0, react_1.useState)(50);
87
+ const { tabIndex } = (0, z_index_1.useZIndex)();
88
+ const size = player_1.PlayerInternals.useElementSize(containerRef, {
89
+ triggerOnWindowResize: true,
90
+ shouldApplyCssTransforms: true,
91
+ });
92
+ const updatePosition = (0, react_1.useCallback)((event) => {
93
+ const rect = event.currentTarget.getBoundingClientRect();
94
+ setPosition(Math.max(0, Math.min(100, ((event.clientX - rect.left) / rect.width) * 100)));
95
+ }, []);
96
+ const onPointerDown = (0, react_1.useCallback)((event) => {
97
+ if (event.button !== 0 || !event.isPrimary) {
98
+ return;
99
+ }
100
+ event.currentTarget.setPointerCapture(event.pointerId);
101
+ updatePosition(event);
102
+ }, [updatePosition]);
103
+ const onPointerMove = (0, react_1.useCallback)((event) => {
104
+ if (event.currentTarget.hasPointerCapture(event.pointerId)) {
105
+ updatePosition(event);
106
+ }
107
+ }, [updatePosition]);
108
+ const onKeyDown = (0, react_1.useCallback)((event) => {
109
+ const step = event.shiftKey ? 10 : 1;
110
+ if (event.key === 'Home') {
111
+ setPosition(0);
112
+ }
113
+ else if (event.key === 'End') {
114
+ setPosition(100);
115
+ }
116
+ else if (event.key === 'ArrowLeft' || event.key === 'ArrowDown') {
117
+ setPosition((value) => Math.max(0, value - step));
118
+ }
119
+ else if (event.key === 'ArrowRight' || event.key === 'ArrowUp') {
120
+ setPosition((value) => Math.min(100, value + step));
121
+ }
122
+ else {
123
+ return;
124
+ }
125
+ event.preventDefault();
126
+ event.stopPropagation();
127
+ }, []);
128
+ (0, react_1.useEffect)(() => {
129
+ const controller = new AbortController();
130
+ const image = new Image();
131
+ image.crossOrigin = 'anonymous';
132
+ setState({ type: 'loading' });
133
+ const load = async () => {
134
+ var _a, _b;
135
+ const response = await fetch(src, { signal: controller.signal });
136
+ if (!response.ok) {
137
+ throw new Error(`Could not load LUT (HTTP ${response.status}).`);
138
+ }
139
+ const lut = (0, cube_lut_1.parseCubeLut)(await response.text());
140
+ if (controller.signal.aborted) {
141
+ return;
142
+ }
143
+ image.src = sampleImage;
144
+ try {
145
+ await image.decode();
146
+ }
147
+ catch (_c) {
148
+ throw new Error('Could not load the LUT sample image. Check your internet connection.');
149
+ }
150
+ if (controller.signal.aborted) {
151
+ return;
152
+ }
153
+ const before = (_a = beforeRef.current) === null || _a === void 0 ? void 0 : _a.getContext('2d');
154
+ const after = (_b = afterRef.current) === null || _b === void 0 ? void 0 : _b.getContext('2d');
155
+ if (!before || !after) {
156
+ throw new Error('Could not create the LUT preview canvas.');
157
+ }
158
+ before.drawImage(image, 0, 0, previewWidth, previewHeight);
159
+ const pixels = before.getImageData(0, 0, previewWidth, previewHeight);
160
+ (0, cube_lut_1.applyCubeLut)(pixels.data, lut);
161
+ after.putImageData(pixels, 0, 0);
162
+ setState({ type: 'loaded' });
163
+ };
164
+ load().catch((error) => {
165
+ if (!controller.signal.aborted) {
166
+ setState({
167
+ type: 'error',
168
+ error: error instanceof Error ? error.message : String(error),
169
+ });
170
+ }
171
+ });
172
+ return () => {
173
+ controller.abort();
174
+ image.removeAttribute('src');
175
+ };
176
+ }, [src]);
177
+ return (jsx_runtime_1.jsxs("div", { ref: containerRef, style: container, children: [state.type === 'error' ? (jsx_runtime_1.jsxs("div", { style: message, role: "alert", children: ["Could not preview LUT: ", state.error] })) : state.type === 'loading' ? (jsx_runtime_1.jsx("div", { style: message, role: "status", children: "Loading LUT preview..." })) : null, jsx_runtime_1.jsxs("div", { style: {
178
+ ...comparison,
179
+ width: size
180
+ ? Math.max(0, Math.min(960, size.width - 48, ((size.height - 48) * previewWidth) / previewHeight))
181
+ : 0,
182
+ display: state.type === 'loaded' ? 'block' : 'none',
183
+ }, children: [
184
+ jsx_runtime_1.jsx("canvas", { ref: afterRef, width: previewWidth, height: previewHeight, style: canvasStyle, role: "img", "aria-label": "Sample image after LUT" }), jsx_runtime_1.jsx("div", { style: {
185
+ position: 'absolute',
186
+ inset: 0,
187
+ clipPath: `inset(0 ${100 - position}% 0 0)`,
188
+ }, children: jsx_runtime_1.jsx("canvas", { ref: beforeRef, width: previewWidth, height: previewHeight, style: canvasStyle, role: "img", "aria-label": "Sample image before LUT" }) }), jsx_runtime_1.jsx("div", { role: "slider", "aria-label": "Before and after comparison", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(position), "aria-valuetext": `${Math.round(position)}% before, ${100 - Math.round(position)}% after`, tabIndex: tabIndex, className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME}`, style: sliderStyle, onPointerDown: onPointerDown, onPointerMove: onPointerMove, onKeyDown: onKeyDown, children: jsx_runtime_1.jsx("div", { "aria-hidden": true, style: { ...dividerStyle, left: `${position}%` }, children: jsx_runtime_1.jsx("div", { style: handleStyle, children: jsx_runtime_1.jsx("svg", { width: 20, height: 20, viewBox: "0 0 24 24", fill: "none", children: jsx_runtime_1.jsx("path", { d: "M8 8 4 12l4 4M16 8l4 4-4 4", stroke: colors_1.CURRENT_COLOR, strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round" }) }) }) }) })
189
+ ] })
190
+ ] }));
191
+ };
192
+ exports.LutPreview = LutPreview;
@@ -15,6 +15,7 @@ const cwd = {
15
15
  alignItems: 'center',
16
16
  justifyContent: 'center',
17
17
  userSelect: 'none',
18
+ WebkitUserSelect: 'none',
18
19
  whiteSpace: 'nowrap',
19
20
  };
20
21
  const spinnerSize = 14;
@@ -4,7 +4,6 @@ exports.MenuCompositionName = 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 client_id_1 = require("../helpers/client-id");
8
7
  const colors_1 = require("../helpers/colors");
9
8
  const hoverable_1 = require("../helpers/hoverable");
10
9
  const noop_1 = require("../helpers/noop");
@@ -13,7 +12,7 @@ const composition_menu_items_1 = require("./composition-menu-items");
13
12
  const ContextMenu_1 = require("./ContextMenu");
14
13
  const InlineDropdown_1 = require("./InlineDropdown");
15
14
  const use_resolved_stack_1 = require("./Timeline/use-resolved-stack");
16
- const use_default_editor_info_1 = require("./use-default-editor-info");
15
+ const use_open_in_menu_apps_1 = require("./use-open-in-menu-apps");
17
16
  const baseStyle = {
18
17
  cursor: 'default',
19
18
  textDecoration: 'none',
@@ -66,18 +65,15 @@ const MenuCompositionName = () => {
66
65
  }, [canvasContent, compositions]);
67
66
  const asset = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'asset' ? canvasContent.asset : null;
68
67
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
69
- const connectionStatus = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx)
70
- .previewServerState.type;
71
- const { defaultEditorId, defaultEditorName } = (0, use_default_editor_info_1.useEditorOpening)(connectionStatus === 'connected');
68
+ const { connectionStatus, openInApps } = (0, use_open_in_menu_apps_1.useOpenInMenuApps)();
72
69
  const resolvedLocation = (0, use_resolved_stack_1.useResolvedStack)((_a = composition === null || composition === void 0 ? void 0 : composition.stack) !== null && _a !== void 0 ? _a : null);
73
70
  const getContextMenuItems = (0, react_1.useCallback)(() => {
74
71
  return (0, composition_menu_items_1.getCompositionContextMenuItems)({
75
72
  closeMenu: noop_1.noop,
76
73
  composition,
77
74
  connectionStatus,
78
- editorId: defaultEditorId,
79
- editorName: defaultEditorName,
80
75
  includeCompositionManagementItems: true,
76
+ openInApps,
81
77
  resolvedLocation,
82
78
  setSelectedModal,
83
79
  readOnlyStudio: window.remotion_isReadOnlyStudio,
@@ -85,8 +81,7 @@ const MenuCompositionName = () => {
85
81
  }, [
86
82
  composition,
87
83
  connectionStatus,
88
- defaultEditorId,
89
- defaultEditorName,
84
+ openInApps,
90
85
  resolvedLocation,
91
86
  setSelectedModal,
92
87
  ]);