@remotion/studio 4.0.498 → 4.0.500

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 (167) hide show
  1. package/dist/components/AssetSelector.js +8 -6
  2. package/dist/components/AssetSelectorItem.d.ts +24 -0
  3. package/dist/components/AssetSelectorItem.js +144 -83
  4. package/dist/components/Canvas.js +162 -7
  5. package/dist/components/CompositionSelector.js +15 -42
  6. package/dist/components/CompositionSelectorItem.js +21 -13
  7. package/dist/components/ControlButton.js +1 -0
  8. package/dist/components/EditorContent.js +1 -1
  9. package/dist/components/EditorRuler/Ruler.js +5 -3
  10. package/dist/components/ExplorerPanel.js +2 -1
  11. package/dist/components/ExplorerPanelRef.d.ts +2 -0
  12. package/dist/components/ForceSpecificCursor.js +13 -1
  13. package/dist/components/GlobalKeybindings.js +7 -1
  14. package/dist/components/InlineAction.d.ts +2 -1
  15. package/dist/components/InlineAction.js +2 -2
  16. package/dist/components/InlineDropdown.d.ts +1 -1
  17. package/dist/components/InlineDropdown.js +3 -2
  18. package/dist/components/InspectorPanel/AlignmentControls.d.ts +2 -2
  19. package/dist/components/InspectorPanel/AlignmentControls.js +5 -2
  20. package/dist/components/InspectorPanel/CompositionInspector.js +8 -7
  21. package/dist/components/InspectorPanel/CompositionMetadata.js +170 -57
  22. package/dist/components/InspectorPanel/ConnectedCompositionsSection.d.ts +2 -2
  23. package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -3
  24. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +7 -7
  25. package/dist/components/InspectorPanel/common.d.ts +17 -4
  26. package/dist/components/InspectorPanel/common.js +60 -6
  27. package/dist/components/InspectorPanel/use-composition-actions.js +1 -0
  28. package/dist/components/InspectorPanel/use-track-for-selection.d.ts +1 -1
  29. package/dist/components/InspectorSequenceSection.js +43 -19
  30. package/dist/components/KeyboardShortcutsExplainer.js +4 -2
  31. package/dist/components/Menu/MenuItem.js +2 -1
  32. package/dist/components/MenuCompositionName.js +30 -7
  33. package/dist/components/MenuToolbar.d.ts +0 -1
  34. package/dist/components/MenuToolbar.js +8 -7
  35. package/dist/components/MobilePanel.d.ts +2 -1
  36. package/dist/components/MobilePanel.js +29 -25
  37. package/dist/components/ModalContainer.d.ts +1 -0
  38. package/dist/components/ModalContainer.js +2 -2
  39. package/dist/components/Modals.js +1 -1
  40. package/dist/components/NewComposition/DismissableModal.d.ts +1 -0
  41. package/dist/components/NewComposition/DismissableModal.js +2 -2
  42. package/dist/components/NewComposition/InputDragger.d.ts +34 -0
  43. package/dist/components/NewComposition/InputDragger.js +262 -23
  44. package/dist/components/OutlineToggle.d.ts +1 -3
  45. package/dist/components/OutlineToggle.js +2 -2
  46. package/dist/components/PreviewToolbar.js +10 -4
  47. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.d.ts +7 -0
  48. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +44 -0
  49. package/dist/components/QuickSwitcher/NoResults.d.ts +1 -1
  50. package/dist/components/QuickSwitcher/NoResults.js +1 -0
  51. package/dist/components/QuickSwitcher/QuickSwitcher.d.ts +5 -0
  52. package/dist/components/QuickSwitcher/QuickSwitcher.js +6 -2
  53. package/dist/components/QuickSwitcher/QuickSwitcherContent.d.ts +5 -0
  54. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +76 -12
  55. package/dist/components/QuickSwitcher/QuickSwitcherResult.d.ts +4 -0
  56. package/dist/components/QuickSwitcher/QuickSwitcherResult.js +11 -8
  57. package/dist/components/QuickSwitcher/asset-search.d.ts +9 -0
  58. package/dist/components/QuickSwitcher/asset-search.js +42 -0
  59. package/dist/components/SelectedOutlineCropControls.d.ts +8 -0
  60. package/dist/components/SelectedOutlineCropControls.js +299 -0
  61. package/dist/components/SelectedOutlineElement.js +83 -43
  62. package/dist/components/SelectedOutlineOverlay.d.ts +2 -2
  63. package/dist/components/SelectedOutlineOverlay.js +130 -8
  64. package/dist/components/SequencePropsSubscriptionProvider.d.ts +2 -0
  65. package/dist/components/SequencePropsSubscriptionProvider.js +31 -3
  66. package/dist/components/SidebarCollapserControls.d.ts +3 -1
  67. package/dist/components/SidebarCollapserControls.js +34 -29
  68. package/dist/components/SnappingToggle.d.ts +1 -3
  69. package/dist/components/SnappingToggle.js +2 -2
  70. package/dist/components/Splitter/SplitterContainer.d.ts +2 -0
  71. package/dist/components/Splitter/SplitterContainer.js +5 -1
  72. package/dist/components/Splitter/SplitterContext.d.ts +2 -0
  73. package/dist/components/Splitter/SplitterContext.js +2 -0
  74. package/dist/components/Splitter/SplitterElement.js +6 -1
  75. package/dist/components/Splitter/SplitterHandle.js +27 -2
  76. package/dist/components/Timeline/Timeline.js +1 -1
  77. package/dist/components/Timeline/TimelineAssetField.d.ts +9 -1
  78. package/dist/components/Timeline/TimelineAssetField.js +52 -100
  79. package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +7 -3
  80. package/dist/components/Timeline/TimelineClipboardKeybindings.js +65 -38
  81. package/dist/components/Timeline/TimelineColorField.js +20 -1
  82. package/dist/components/Timeline/TimelineEffectPropItem.js +8 -77
  83. package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +1 -0
  84. package/dist/components/Timeline/TimelineHeightContainer.d.ts +2 -2
  85. package/dist/components/Timeline/TimelineInOutDragHandler.js +25 -1
  86. package/dist/components/Timeline/TimelineKeyframeTracksContext.d.ts +3 -3
  87. package/dist/components/Timeline/TimelineLayerEye.js +4 -1
  88. package/dist/components/Timeline/TimelineList.d.ts +2 -2
  89. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +7 -1
  90. package/dist/components/Timeline/TimelineSelection.d.ts +5 -5
  91. package/dist/components/Timeline/TimelineSelection.js +8 -6
  92. package/dist/components/Timeline/TimelineSequence.js +7 -6
  93. package/dist/components/Timeline/TimelineSequenceItem.js +57 -10
  94. package/dist/components/Timeline/TimelineSequenceName.js +1 -0
  95. package/dist/components/Timeline/TimelineSequencePropItem.js +27 -75
  96. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +5 -1
  97. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +29 -12
  98. package/dist/components/Timeline/TimelineTrack.d.ts +2 -2
  99. package/dist/components/Timeline/TimelineTracks.d.ts +2 -2
  100. package/dist/components/Timeline/find-track-for-node-path-info.d.ts +1 -1
  101. package/dist/components/Timeline/get-sequence-context-menu-items.js +14 -12
  102. package/dist/components/Timeline/reset-selected-timeline-props.js +18 -10
  103. package/dist/components/Timeline/save-effect-prop.d.ts +10 -0
  104. package/dist/components/Timeline/save-effect-prop.js +52 -1
  105. package/dist/components/Timeline/should-show-track-in-timeline.d.ts +2 -2
  106. package/dist/components/Timeline/timeline-asset-link.js +17 -1
  107. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.d.ts +4 -0
  108. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +9 -3
  109. package/dist/components/Timeline/use-timeline-height.d.ts +2 -2
  110. package/dist/components/Timeline/use-timeline-keyframe-drag.js +6 -4
  111. package/dist/components/TopPanel.js +3 -2
  112. package/dist/components/UndoRedoButtons.js +27 -5
  113. package/dist/components/composition-drop-preview.d.ts +33 -0
  114. package/dist/components/composition-drop-preview.js +68 -0
  115. package/dist/components/drop-handler-data.d.ts +1 -1
  116. package/dist/components/drop-handler-data.js +27 -60
  117. package/dist/components/effect-drag-and-drop.d.ts +1 -1
  118. package/dist/components/effect-drag-and-drop.js +7 -55
  119. package/dist/components/element-drag-and-drop.d.ts +1 -1
  120. package/dist/components/element-drag-and-drop.js +5 -17
  121. package/dist/components/handle-drop.js +0 -1
  122. package/dist/components/import-assets.d.ts +7 -8
  123. package/dist/components/import-assets.js +2 -9
  124. package/dist/components/menu-toolbar-height.d.ts +1 -0
  125. package/dist/components/menu-toolbar-height.js +4 -0
  126. package/dist/components/selected-outline-drag.d.ts +41 -4
  127. package/dist/components/selected-outline-drag.js +179 -2
  128. package/dist/components/selected-outline-geometry.d.ts +1 -0
  129. package/dist/components/selected-outline-measurement.d.ts +11 -0
  130. package/dist/components/selected-outline-measurement.js +64 -3
  131. package/dist/components/selected-outline-types.d.ts +44 -1
  132. package/dist/components/selected-outline-types.js +21 -1
  133. package/dist/error-overlay/remotion-overlay/Overlay.js +3 -3
  134. package/dist/error-overlay/remotion-overlay/ShortcutHint.js +2 -3
  135. package/dist/esm/{chunk-7a6q9hk2.js → chunk-dr1y1vm3.js} +11851 -9494
  136. package/dist/esm/internals.mjs +11851 -9494
  137. package/dist/esm/previewEntry.mjs +55150 -52795
  138. package/dist/esm/renderEntry.mjs +1 -1
  139. package/dist/helpers/calculate-timeline.d.ts +2 -2
  140. package/dist/helpers/calculate-timeline.js +8 -28
  141. package/dist/helpers/get-effective-translation.d.ts +13 -1
  142. package/dist/helpers/get-effective-translation.js +12 -6
  143. package/dist/helpers/get-timeline-sequence-sort-key.d.ts +3 -10
  144. package/dist/helpers/get-timeline-sequence-sort-key.js +5 -13
  145. package/dist/helpers/interactivity-enabled.d.ts +1 -0
  146. package/dist/helpers/interactivity-enabled.js +7 -2
  147. package/dist/helpers/is-mac.d.ts +1 -0
  148. package/dist/helpers/is-mac.js +4 -0
  149. package/dist/helpers/open-in-editor.d.ts +5 -1
  150. package/dist/helpers/open-in-editor.js +15 -1
  151. package/dist/helpers/ruler-canvas-size.d.ts +7 -0
  152. package/dist/helpers/ruler-canvas-size.js +14 -1
  153. package/dist/helpers/sort-by-nonce-history.js +97 -19
  154. package/dist/helpers/use-image-metadata.d.ts +1 -0
  155. package/dist/helpers/use-image-metadata.js +8 -5
  156. package/dist/helpers/use-keybinding.js +2 -3
  157. package/dist/helpers/use-media-metadata.d.ts +1 -0
  158. package/dist/helpers/use-media-metadata.js +8 -5
  159. package/dist/helpers/use-menu-structure.js +10 -1
  160. package/dist/icons/caret.d.ts +1 -0
  161. package/dist/icons/caret.js +2 -2
  162. package/dist/icons/pen.d.ts +5 -0
  163. package/dist/icons/pen.js +8 -0
  164. package/dist/state/modals.d.ts +5 -0
  165. package/package.json +13 -12
  166. package/dist/helpers/get-timeline-sequence-hash.d.ts +0 -6
  167. package/dist/helpers/get-timeline-sequence-hash.js +0 -33
@@ -2,22 +2,22 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CompositionSelector = exports.useCompositionNavigation = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const drag_and_drop_1 = require("@remotion/drag-and-drop");
5
6
  const studio_shared_1 = require("@remotion/studio-shared");
6
7
  const react_1 = require("react");
7
8
  const remotion_1 = require("remotion");
8
- const ShortcutHint_1 = require("../error-overlay/remotion-overlay/ShortcutHint");
9
9
  const client_id_1 = require("../helpers/client-id");
10
10
  const colors_1 = require("../helpers/colors");
11
11
  const create_folder_tree_1 = require("../helpers/create-folder-tree");
12
12
  const persist_open_folders_1 = require("../helpers/persist-open-folders");
13
13
  const sort_by_nonce_history_1 = require("../helpers/sort-by-nonce-history");
14
- const use_keybinding_1 = require("../helpers/use-keybinding");
15
14
  const modals_1 = require("../state/modals");
16
15
  const z_index_1 = require("../state/z-index");
17
16
  const CompositionSelectorItem_1 = require("./CompositionSelectorItem");
18
17
  const ContextMenu_1 = require("./ContextMenu");
19
18
  const InitialCompositionLoader_1 = require("./InitialCompositionLoader");
20
19
  const NotificationCenter_1 = require("./Notifications/NotificationCenter");
20
+ const ExplorerQuickSwitcherTrigger_1 = require("./QuickSwitcher/ExplorerQuickSwitcherTrigger");
21
21
  const actions_1 = require("./RenderQueue/actions");
22
22
  const root_composition_menu_items_1 = require("./root-composition-menu-items");
23
23
  const useCompositionNavigation = () => {
@@ -64,28 +64,6 @@ const container = {
64
64
  overflow: 'hidden',
65
65
  backgroundColor: colors_1.BACKGROUND,
66
66
  };
67
- const quickSwitcherArea = {
68
- padding: '4px 12px',
69
- borderBottom: `1px solid ${colors_1.BLACK_HEX}`,
70
- };
71
- const quickSwitcherTrigger = {
72
- backgroundColor: colors_1.WHITE_ALPHA_06,
73
- borderRadius: 5,
74
- padding: '4px 10px',
75
- color: colors_1.LIGHT_TEXT,
76
- fontSize: 12,
77
- cursor: 'pointer',
78
- display: 'flex',
79
- alignItems: 'center',
80
- justifyContent: 'space-between',
81
- border: 'none',
82
- width: '100%',
83
- appearance: 'none',
84
- };
85
- const shortcutLabel = {
86
- fontSize: 11,
87
- opacity: 0.6,
88
- };
89
67
  const autoScrollThreshold = 70;
90
68
  const maxAutoScrollSpeed = 18;
91
69
  const getAutoScrollSpeed = ({ clientY, element, }) => {
@@ -145,13 +123,6 @@ const CompositionSelector = () => {
145
123
  var _a;
146
124
  (_a = remotion_1.Internals.compositionSelectorRef.current) === null || _a === void 0 ? void 0 : _a.toggleFolder(folderName, parentName);
147
125
  }, []);
148
- const openQuickSwitcher = (0, react_1.useCallback)(() => {
149
- setSelectedModal({
150
- type: 'quick-switcher',
151
- mode: 'compositions',
152
- invocationTimestamp: Date.now(),
153
- });
154
- }, [setSelectedModal]);
155
126
  const clearRootDragHover = (0, react_1.useCallback)(() => {
156
127
  setRootDragHovered(false);
157
128
  }, []);
@@ -188,8 +159,9 @@ const CompositionSelector = () => {
188
159
  }
189
160
  }, [runCompositionListAutoScroll, stopCompositionListAutoScroll]);
190
161
  const onCompositionListDragOverCapture = (0, react_1.useCallback)((event) => {
162
+ var _a;
191
163
  if (window.remotion_isReadOnlyStudio ||
192
- !Array.from(event.dataTransfer.types).includes(studio_shared_1.COMPOSITION_DRAG_MIME_TYPE)) {
164
+ ((_a = drag_and_drop_1.DragAndDropInternals.getDragPreviewMetadata(event.dataTransfer.types)) === null || _a === void 0 ? void 0 : _a.type) !== 'composition') {
193
165
  stopCompositionListAutoScroll();
194
166
  return;
195
167
  }
@@ -204,8 +176,9 @@ const CompositionSelector = () => {
204
176
  return stopCompositionListAutoScroll;
205
177
  }, [stopCompositionListAutoScroll]);
206
178
  const onRootDragOver = (0, react_1.useCallback)((event) => {
179
+ var _a;
207
180
  if (window.remotion_isReadOnlyStudio ||
208
- !Array.from(event.dataTransfer.types).includes(studio_shared_1.COMPOSITION_DRAG_MIME_TYPE)) {
181
+ ((_a = drag_and_drop_1.DragAndDropInternals.getDragPreviewMetadata(event.dataTransfer.types)) === null || _a === void 0 ? void 0 : _a.type) !== 'composition') {
209
182
  return;
210
183
  }
211
184
  event.preventDefault();
@@ -225,35 +198,35 @@ const CompositionSelector = () => {
225
198
  if (window.remotion_isReadOnlyStudio) {
226
199
  return;
227
200
  }
228
- const raw = event.dataTransfer.getData(studio_shared_1.COMPOSITION_DRAG_MIME_TYPE);
229
- const parsed = raw ? (0, studio_shared_1.parseCompositionDragData)(raw) : null;
230
- if (parsed === null) {
201
+ const parsed = drag_and_drop_1.DragAndDropInternals.parseDragData(event.dataTransfer);
202
+ if ((parsed === null || parsed === void 0 ? void 0 : parsed.type) !== 'composition') {
231
203
  return;
232
204
  }
205
+ const compositionDragData = parsed.data;
233
206
  event.preventDefault();
234
207
  event.stopPropagation();
235
208
  stopCompositionListAutoScroll();
236
209
  setRootDragHovered(false);
237
- const composition = compositions.find((c) => c.id === parsed.compositionId);
210
+ const composition = compositions.find((c) => c.id === compositionDragData.compositionId);
238
211
  if (!composition || composition.folderName === null) {
239
212
  return;
240
213
  }
241
- const notification = (0, NotificationCenter_1.showNotification)(`Moving ${parsed.compositionId}...`, null);
214
+ const notification = (0, NotificationCenter_1.showNotification)(`Moving ${compositionDragData.compositionId}...`, null);
242
215
  const controller = new AbortController();
243
216
  try {
244
217
  const result = await (0, actions_1.applyCodemod)({
245
218
  codemod: {
246
219
  type: 'move-composition-to-folder',
247
- idToMove: parsed.compositionId,
220
+ idToMove: compositionDragData.compositionId,
248
221
  folderName: null,
249
222
  parentName: null,
250
223
  },
251
224
  dryRun: false,
252
225
  signal: controller.signal,
253
- symbolicatedStack: (0, studio_shared_1.compositionDragDataToSymbolicatedStack)(parsed),
226
+ symbolicatedStack: (0, studio_shared_1.compositionDragDataToSymbolicatedStack)(compositionDragData),
254
227
  });
255
228
  notification.replaceContent(result.success
256
- ? `Moved ${parsed.compositionId} outside of folder`
229
+ ? `Moved ${compositionDragData.compositionId} outside of folder`
257
230
  : result.reason, result.success ? 2000 : 4000);
258
231
  }
259
232
  catch (err) {
@@ -261,7 +234,7 @@ const CompositionSelector = () => {
261
234
  }
262
235
  }, [compositions, stopCompositionListAutoScroll]);
263
236
  return (jsx_runtime_1.jsxs("div", { style: container, children: [
264
- jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: listRef, values: rootContextMenuItems, onOpen: null }), jsx_runtime_1.jsx("div", { style: quickSwitcherArea, children: jsx_runtime_1.jsxs("button", { type: "button", style: quickSwitcherTrigger, onClick: openQuickSwitcher, tabIndex: tabIndex, children: ["Search...", (0, use_keybinding_1.areKeyboardShortcutsDisabled)() ? null : (jsx_runtime_1.jsxs("span", { style: shortcutLabel, children: [ShortcutHint_1.cmdOrCtrlCharacter, "+K"] }))] }) }), jsx_runtime_1.jsx("div", { ref: listRef, className: "__remotion-vertical-scrollbar", style: list, onDragOverCapture: onCompositionListDragOverCapture, onDragEndCapture: stopCompositionListAutoScroll, onDragOver: onRootDragOver, onDragLeave: onRootDragLeave, onDropCapture: stopCompositionListAutoScroll, onDrop: onRootDrop, children: items.map((c) => {
237
+ jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: listRef, values: rootContextMenuItems, onOpen: null }), jsx_runtime_1.jsx(ExplorerQuickSwitcherTrigger_1.ExplorerQuickSwitcherTrigger, { mode: "compositions", showShortcut: true, tabIndex: tabIndex }), jsx_runtime_1.jsx("div", { ref: listRef, className: "__remotion-vertical-scrollbar", style: list, onDragOverCapture: onCompositionListDragOverCapture, onDragEndCapture: stopCompositionListAutoScroll, onDragOver: onRootDragOver, onDragLeave: onRootDragLeave, onDropCapture: stopCompositionListAutoScroll, onDrop: onRootDrop, children: items.map((c) => {
265
238
  return (jsx_runtime_1.jsx(CompositionSelectorItem_1.CompositionSelectorItem, { level: 0, currentComposition: canvasContent && canvasContent.type === 'composition'
266
239
  ? canvasContent.compositionId
267
240
  : null, selectComposition: selectComposition, toggleFolder: toggleFolder, clearRootDragHover: clearRootDragHover, tabIndex: tabIndex, item: c }, c.key + c.type));
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CompositionSelectorItem = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const drag_and_drop_1 = require("@remotion/drag-and-drop");
5
6
  const studio_shared_1 = require("@remotion/studio-shared");
6
7
  const react_1 = require("react");
7
8
  const client_id_1 = require("../helpers/client-id");
@@ -142,25 +143,31 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
142
143
  });
143
144
  }, [connectionStatus, item, resolvedLocation, setSelectedModal]);
144
145
  const onCompositionDragStart = (0, react_1.useCallback)((event) => {
145
- var _a;
146
+ var _a, _b, _c, _d;
146
147
  if (item.type !== 'composition' || window.remotion_isReadOnlyStudio) {
147
148
  event.preventDefault();
148
149
  return;
149
150
  }
150
151
  setIsDragging(true);
151
152
  event.dataTransfer.effectAllowed = 'copyMove';
152
- event.dataTransfer.setData(studio_shared_1.COMPOSITION_DRAG_MIME_TYPE, JSON.stringify((0, studio_shared_1.makeCompositionDragData)({
153
+ const dragData = drag_and_drop_1.DragAndDropInternals.makeDragData({
154
+ type: 'composition',
153
155
  compositionFile: (_a = resolvedLocation === null || resolvedLocation === void 0 ? void 0 : resolvedLocation.source) !== null && _a !== void 0 ? _a : null,
154
156
  compositionId: item.composition.id,
155
- })));
157
+ width: (_b = item.composition.width) !== null && _b !== void 0 ? _b : null,
158
+ height: (_c = item.composition.height) !== null && _c !== void 0 ? _c : null,
159
+ durationInFrames: (_d = item.composition.durationInFrames) !== null && _d !== void 0 ? _d : null,
160
+ });
161
+ event.dataTransfer.setData(dragData.mimeType, dragData.payload);
156
162
  }, [item, resolvedLocation === null || resolvedLocation === void 0 ? void 0 : resolvedLocation.source]);
157
163
  const onCompositionDragEnd = (0, react_1.useCallback)(() => {
158
164
  setIsDragging(false);
159
165
  }, []);
160
166
  const onFolderDragOver = (0, react_1.useCallback)((event) => {
167
+ var _a;
161
168
  if (item.type !== 'folder' ||
162
169
  window.remotion_isReadOnlyStudio ||
163
- !Array.from(event.dataTransfer.types).includes(studio_shared_1.COMPOSITION_DRAG_MIME_TYPE)) {
170
+ ((_a = drag_and_drop_1.DragAndDropInternals.getDragPreviewMetadata(event.dataTransfer.types)) === null || _a === void 0 ? void 0 : _a.type) !== 'composition') {
164
171
  return;
165
172
  }
166
173
  event.preventDefault();
@@ -173,9 +180,10 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
173
180
  setDragHovered(false);
174
181
  }, []);
175
182
  const onFolderChildListDragOver = (0, react_1.useCallback)((event) => {
183
+ var _a;
176
184
  if (item.type !== 'folder' ||
177
185
  window.remotion_isReadOnlyStudio ||
178
- !Array.from(event.dataTransfer.types).includes(studio_shared_1.COMPOSITION_DRAG_MIME_TYPE)) {
186
+ ((_a = drag_and_drop_1.DragAndDropInternals.getDragPreviewMetadata(event.dataTransfer.types)) === null || _a === void 0 ? void 0 : _a.type) !== 'composition') {
179
187
  return;
180
188
  }
181
189
  event.preventDefault();
@@ -187,18 +195,18 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
187
195
  if (item.type !== 'folder' || window.remotion_isReadOnlyStudio) {
188
196
  return;
189
197
  }
190
- const raw = event.dataTransfer.getData(studio_shared_1.COMPOSITION_DRAG_MIME_TYPE);
191
- const parsed = raw ? (0, studio_shared_1.parseCompositionDragData)(raw) : null;
192
- if (parsed === null) {
198
+ const parsed = drag_and_drop_1.DragAndDropInternals.parseDragData(event.dataTransfer);
199
+ if ((parsed === null || parsed === void 0 ? void 0 : parsed.type) !== 'composition') {
193
200
  return;
194
201
  }
202
+ const compositionDragData = parsed.data;
195
203
  event.preventDefault();
196
204
  event.stopPropagation();
197
205
  clearRootDragHover();
198
206
  setDragHovered(false);
199
207
  const isAlreadyDirectChild = item.items.some((child) => {
200
208
  return (child.type === 'composition' &&
201
- child.composition.id === parsed.compositionId);
209
+ child.composition.id === compositionDragData.compositionId);
202
210
  });
203
211
  if (isAlreadyDirectChild) {
204
212
  return;
@@ -207,22 +215,22 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
207
215
  folderName: item.folderName,
208
216
  parentName: item.parentName,
209
217
  });
210
- const notification = (0, NotificationCenter_1.showNotification)(`Moving ${parsed.compositionId}...`, null);
218
+ const notification = (0, NotificationCenter_1.showNotification)(`Moving ${compositionDragData.compositionId}...`, null);
211
219
  const controller = new AbortController();
212
220
  try {
213
221
  const result = await (0, actions_1.applyCodemod)({
214
222
  codemod: {
215
223
  type: 'move-composition-to-folder',
216
- idToMove: parsed.compositionId,
224
+ idToMove: compositionDragData.compositionId,
217
225
  folderName: item.folderName,
218
226
  parentName: item.parentName,
219
227
  },
220
228
  dryRun: false,
221
229
  signal: controller.signal,
222
- symbolicatedStack: (0, studio_shared_1.compositionDragDataToSymbolicatedStack)(parsed),
230
+ symbolicatedStack: (0, studio_shared_1.compositionDragDataToSymbolicatedStack)(compositionDragData),
223
231
  });
224
232
  notification.replaceContent(result.success
225
- ? `Moved ${parsed.compositionId} to ${folderId}`
233
+ ? `Moved ${compositionDragData.compositionId} to ${folderId}`
226
234
  : result.reason, result.success ? 2000 : 4000);
227
235
  if (result.success && !item.expanded) {
228
236
  toggleFolder(item.folderName, item.parentName);
@@ -15,6 +15,7 @@ const ControlButton = (props) => {
15
15
  justifyContent: 'center',
16
16
  width: exports.CONTROL_BUTTON_SIZE,
17
17
  height: exports.CONTROL_BUTTON_SIZE,
18
+ flexShrink: 0,
18
19
  background: 'none',
19
20
  border: 'none',
20
21
  padding: 0,
@@ -35,7 +35,7 @@ const StudioClearSelectionArea = ({ children }) => {
35
35
  const EditorContent = ({ readOnlyStudio, children }) => {
36
36
  const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
37
37
  const showTimeline = canvasContent !== null && canvasContent.type === 'composition';
38
- const content = (jsx_runtime_1.jsxs(SplitterContainer_1.SplitterContainer, { orientation: "horizontal", id: "top-to-bottom", maxFlex: 0.9, minFlex: 0.2, defaultFlex: 0.75, children: [
38
+ const content = (jsx_runtime_1.jsxs(SplitterContainer_1.SplitterContainer, { orientation: "horizontal", id: "top-to-bottom", maxFlex: 0.9, minFlex: 0.2, defaultFlex: 0.75, maxFlexerSize: null, maxAntiFlexerSize: null, children: [
39
39
  jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { sticky: null, type: "flexer", children: children }), jsx_runtime_1.jsx(SplitterHandle_1.SplitterHandle, { allowToCollapse: "none", onCollapse: noop }), jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { sticky: null, type: "anti-flexer", children: showTimeline ? jsx_runtime_1.jsx(Timeline_1.Timeline, {}) : jsx_runtime_1.jsx(TimelineEmptyState_1.TimelineEmptyState, {}) })
40
40
  ] }));
41
41
  return (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionProvider, { children: jsx_runtime_1.jsxs(StudioClearSelectionArea, { children: [
@@ -6,8 +6,8 @@ const remotion_1 = require("remotion");
6
6
  const colors_1 = require("../../helpers/colors");
7
7
  const editor_guide_selection_1 = require("../../helpers/editor-guide-selection");
8
8
  const editor_ruler_1 = require("../../helpers/editor-ruler");
9
+ const ruler_canvas_size_1 = require("../../helpers/ruler-canvas-size");
9
10
  const editor_guides_1 = require("../../state/editor-guides");
10
- const editor_rulers_1 = require("../../state/editor-rulers");
11
11
  const ForceSpecificCursor_1 = require("../ForceSpecificCursor");
12
12
  const should_clear_selection_on_pointer_down_1 = require("../Timeline/should-clear-selection-on-pointer-down");
13
13
  const TimelineSelection_1 = require("../Timeline/TimelineSelection");
@@ -30,8 +30,10 @@ const Ruler = ({ scale, points, originOffset, startMarking, size, markingGaps, o
30
30
  hoveredGuideId,
31
31
  draggingGuideId,
32
32
  }), [draggingGuideId, guidesList, hoveredGuideId, selectedItems]);
33
- const rulerWidth = isVerticalRuler ? editor_rulers_1.RULER_WIDTH : size.width - editor_rulers_1.RULER_WIDTH;
34
- const rulerHeight = isVerticalRuler ? size.height - editor_rulers_1.RULER_WIDTH : editor_rulers_1.RULER_WIDTH;
33
+ const { width: rulerWidth, height: rulerHeight } = (0, ruler_canvas_size_1.getRulerCanvasSize)({
34
+ orientation,
35
+ size,
36
+ });
35
37
  (0, react_1.useEffect)(() => {
36
38
  (0, editor_ruler_1.drawMarkingOnRulerCanvas)({
37
39
  scale,
@@ -43,6 +43,7 @@ const ExplorerPanel = ({ readOnlyStudio }) => {
43
43
  }, []);
44
44
  (0, react_1.useImperativeHandle)(ExplorerPanelRef_1.explorerSidebarTabs, () => {
45
45
  return {
46
+ getSelectedPanel: () => panel,
46
47
  selectAssetsPanel: () => {
47
48
  setPanel('assets');
48
49
  persistSelectedOptionsSidebarPanel('assets');
@@ -52,7 +53,7 @@ const ExplorerPanel = ({ readOnlyStudio }) => {
52
53
  persistSelectedOptionsSidebarPanel('compositions');
53
54
  },
54
55
  };
55
- }, []);
56
+ }, [panel]);
56
57
  const onPointerDown = (0, react_1.useCallback)((e) => {
57
58
  // Prevent deselection of currently selected items
58
59
  e.stopPropagation();
@@ -1,4 +1,6 @@
1
+ export type ExplorerSidebarPanel = 'assets' | 'compositions';
1
2
  export declare const explorerSidebarTabs: import("react").RefObject<{
3
+ getSelectedPanel: () => ExplorerSidebarPanel;
2
4
  selectAssetsPanel: () => void;
3
5
  selectCompositionPanel: () => void;
4
6
  } | null>;
@@ -37,17 +37,29 @@ exports.ForceSpecificCursor = exports.stopForcingSpecificCursor = exports.forceS
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const react_1 = __importStar(require("react"));
39
39
  const ref = react_1.default.createRef();
40
+ const removeAutomaticCleanupListeners = () => {
41
+ window.removeEventListener('pointerup', exports.stopForcingSpecificCursor, true);
42
+ window.removeEventListener('pointercancel', exports.stopForcingSpecificCursor, true);
43
+ window.removeEventListener('blur', exports.stopForcingSpecificCursor, true);
44
+ };
40
45
  const forceSpecificCursor = (cursor) => {
41
46
  if (!ref.current) {
42
47
  throw new Error('ForceSpecificCursor is not mounted');
43
48
  }
44
49
  ref.current.style.cursor = cursor;
45
50
  ref.current.style.pointerEvents = 'auto';
51
+ // The component which initiated the drag may unmount before it gets a chance
52
+ // to handle the end of the gesture. Keep this fallback independent from the
53
+ // initiator so the cursor overlay can never remain stuck.
54
+ window.addEventListener('pointerup', exports.stopForcingSpecificCursor, true);
55
+ window.addEventListener('pointercancel', exports.stopForcingSpecificCursor, true);
56
+ window.addEventListener('blur', exports.stopForcingSpecificCursor, true);
46
57
  };
47
58
  exports.forceSpecificCursor = forceSpecificCursor;
48
59
  const stopForcingSpecificCursor = () => {
60
+ removeAutomaticCleanupListeners();
49
61
  if (!ref.current) {
50
- throw new Error('ForceSpecificCursor is not mounted');
62
+ return;
51
63
  }
52
64
  ref.current.style.cursor = '';
53
65
  ref.current.style.pointerEvents = 'none';
@@ -12,6 +12,7 @@ const editor_snapping_1 = require("../state/editor-snapping");
12
12
  const modals_1 = require("../state/modals");
13
13
  const AskAiModal_1 = require("./AskAiModal");
14
14
  const CompositionSelector_1 = require("./CompositionSelector");
15
+ const ExplorerPanelRef_1 = require("./ExplorerPanelRef");
15
16
  const NotificationCenter_1 = require("./Notifications/NotificationCenter");
16
17
  const TimelineSelection_1 = require("./Timeline/TimelineSelection");
17
18
  const sequencePropShortcuts = {
@@ -106,10 +107,14 @@ const GlobalKeybindings = () => {
106
107
  event: 'keydown',
107
108
  key: 'k',
108
109
  callback: () => {
110
+ var _a;
109
111
  setSelectedModal({
110
112
  type: 'quick-switcher',
111
- mode: 'compositions',
113
+ mode: ((_a = ExplorerPanelRef_1.explorerSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.getSelectedPanel()) === 'assets'
114
+ ? 'assets'
115
+ : 'compositions',
112
116
  invocationTimestamp: Date.now(),
117
+ assetSelection: null,
113
118
  });
114
119
  },
115
120
  triggerIfInputFieldFocused: true,
@@ -159,6 +164,7 @@ const GlobalKeybindings = () => {
159
164
  type: 'quick-switcher',
160
165
  mode: 'docs',
161
166
  invocationTimestamp: Date.now(),
167
+ assetSelection: null,
162
168
  });
163
169
  },
164
170
  commandCtrlKey: false,
@@ -5,5 +5,6 @@ export type InlineActionProps = {
5
5
  readonly disabled?: boolean;
6
6
  readonly renderAction: RenderInlineAction;
7
7
  readonly title?: string;
8
+ readonly unhoveredColor?: string;
8
9
  };
9
- export declare const InlineAction: ({ renderAction, onClick, disabled, title, }: InlineActionProps) => import("react/jsx-runtime").JSX.Element;
10
+ export declare const InlineAction: ({ renderAction, onClick, disabled, title, unhoveredColor, }: InlineActionProps) => import("react/jsx-runtime").JSX.Element;
@@ -5,7 +5,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const colors_1 = require("../helpers/colors");
7
7
  const z_index_1 = require("../state/z-index");
8
- const InlineAction = ({ renderAction, onClick, disabled, title, }) => {
8
+ const InlineAction = ({ renderAction, onClick, disabled, title, unhoveredColor = colors_1.LIGHT_TEXT, }) => {
9
9
  const { tabIndex } = (0, z_index_1.useZIndex)();
10
10
  const [hovered, setHovered] = (0, react_1.useState)(false);
11
11
  const onPointerEnter = (0, react_1.useCallback)(() => {
@@ -30,6 +30,6 @@ const InlineAction = ({ renderAction, onClick, disabled, title, }) => {
30
30
  pointerEvents: disabled ? 'none' : 'auto',
31
31
  };
32
32
  }, [disabled, hovered]);
33
- return (jsx_runtime_1.jsx("button", { type: "button", onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, onClick: onClick, style: style, tabIndex: tabIndex, title: title, children: renderAction(hovered ? colors_1.WHITE : colors_1.LIGHT_TEXT) }));
33
+ return (jsx_runtime_1.jsx("button", { type: "button", disabled: disabled, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, onClick: onClick, style: style, tabIndex: tabIndex, title: title, children: renderAction(hovered ? colors_1.WHITE : unhoveredColor) }));
34
34
  };
35
35
  exports.InlineAction = InlineAction;
@@ -1,5 +1,5 @@
1
1
  import { type InlineActionProps } from './InlineAction';
2
2
  import type { ComboboxValue } from './NewComposition/ComboBox';
3
- export declare const InlineDropdown: ({ values, ...props }: Omit<InlineActionProps, "onClick"> & {
3
+ export declare const InlineDropdown: ({ values, unhoveredColor, ...props }: Omit<InlineActionProps, "onClick"> & {
4
4
  readonly values: ComboboxValue[];
5
5
  }) => import("react/jsx-runtime").JSX.Element;
@@ -8,6 +8,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const player_1 = require("@remotion/player");
9
9
  const react_1 = require("react");
10
10
  const react_dom_1 = __importDefault(require("react-dom"));
11
+ const colors_1 = require("../helpers/colors");
11
12
  const mobile_layout_1 = require("../helpers/mobile-layout");
12
13
  const noop_1 = require("../helpers/noop");
13
14
  const z_index_1 = require("../state/z-index");
@@ -15,7 +16,7 @@ const InlineAction_1 = require("./InlineAction");
15
16
  const portals_1 = require("./Menu/portals");
16
17
  const styles_1 = require("./Menu/styles");
17
18
  const MenuContent_1 = require("./NewComposition/MenuContent");
18
- const InlineDropdown = ({ values, ...props }) => {
19
+ const InlineDropdown = ({ values, unhoveredColor, ...props }) => {
19
20
  const ref = (0, react_1.useRef)(null);
20
21
  const [opened, setOpened] = (0, react_1.useState)({ type: 'not-open' });
21
22
  const { currentZIndex } = (0, z_index_1.useZIndex)();
@@ -79,7 +80,7 @@ const InlineDropdown = ({ values, ...props }) => {
79
80
  setOpened({ type: 'not-open' });
80
81
  }, []);
81
82
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
82
- jsx_runtime_1.jsx("div", { ref: ref, children: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { onClick: onClick, ...props }) }), portalStyle
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
83
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))
84
85
  : null] }));
85
86
  };
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { TrackWithHash } from '../../helpers/get-timeline-sequence-sort-key';
2
+ import type { TimelineTrackData } from '../../helpers/get-timeline-sequence-sort-key';
3
3
  export declare const AlignmentControls: React.FC<{
4
- readonly track: TrackWithHash;
4
+ readonly track: TimelineTrackData;
5
5
  }>;
@@ -5,6 +5,7 @@ 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 client_id_1 = require("../../helpers/client-id");
8
+ const interactivity_enabled_1 = require("../../helpers/interactivity-enabled");
8
9
  const align_bottom_1 = require("../../icons/align-bottom");
9
10
  const align_center_horizontal_1 = require("../../icons/align-center-horizontal");
10
11
  const align_center_vertical_1 = require("../../icons/align-center-vertical");
@@ -62,7 +63,8 @@ const AlignmentControls = ({ track }) => {
62
63
  const handleAlign = (0, react_1.useCallback)((direction) => {
63
64
  var _a;
64
65
  var _b, _c, _d, _e;
65
- if (previewServerState.type !== 'connected' ||
66
+ if (!(0, interactivity_enabled_1.isStudioInteractivityEnabled)() ||
67
+ previewServerState.type !== 'connected' ||
66
68
  !track.nodePathInfo ||
67
69
  !track.sequence.controls) {
68
70
  return;
@@ -177,7 +179,8 @@ const AlignmentControls = ({ track }) => {
177
179
  getDragOverrides,
178
180
  setPropStatuses,
179
181
  ]);
180
- if (previewServerState.type !== 'connected' ||
182
+ if (!(0, interactivity_enabled_1.isStudioInteractivityEnabled)() ||
183
+ previewServerState.type !== 'connected' ||
181
184
  !track.nodePathInfo ||
182
185
  !track.sequence.controls ||
183
186
  !currentCompositionMetadata) {
@@ -25,14 +25,14 @@ const actionIconStyle = {
25
25
  height: 18,
26
26
  width: 18,
27
27
  };
28
- const CompositionActions = () => {
28
+ const CompositionActions = ({ readOnlyStudio }) => {
29
29
  const { canInsertAsset, canInsertSolid, canShowInsertAsset, canShowInsertSolid, insertAsset, insertSolid, } = (0, use_composition_actions_1.useCompositionActions)();
30
- if (!canShowInsertAsset && !canShowInsertSolid) {
30
+ if (readOnlyStudio || (!canShowInsertAsset && !canShowInsertSolid)) {
31
31
  return null;
32
32
  }
33
33
  return (jsx_runtime_1.jsxs(common_1.InspectorActionSection, { children: [canShowInsertSolid ? (jsx_runtime_1.jsx(common_1.InspectorInlineAction, { disabled: !canInsertSolid, onClick: insertSolid, renderIcon: (color) => (jsx_runtime_1.jsx(solid_1.SolidIcon, { color: color, style: actionIconStyle })), children: "Add Solid" })) : null, canShowInsertAsset ? (jsx_runtime_1.jsx(common_1.InspectorInlineAction, { disabled: !canInsertAsset, onClick: insertAsset, renderIcon: (color) => (jsx_runtime_1.jsx(frame_1.PicIcon, { color: color, style: actionIconStyle })), children: "Add asset..." })) : null] }));
34
34
  };
35
- const CompositionDefaultPropsSection = ({ composition, currentDefaultProps, setDefaultProps }) => {
35
+ const CompositionDefaultPropsSection = ({ composition, currentDefaultProps, readOnlyStudio, setDefaultProps }) => {
36
36
  var _a;
37
37
  const z = (0, get_zod_if_possible_1.useZodIfPossible)();
38
38
  const canSaveDefaultProps = (0, react_1.useContext)(ObserveDefaultPropsContext_1.ObserveDefaultPropsContext);
@@ -79,7 +79,7 @@ const CompositionDefaultPropsSection = ({ composition, currentDefaultProps, setD
79
79
  propsEditType: 'default-props',
80
80
  showCannotSaveDefaultPropsWarning: canShowDefaultPropsSection,
81
81
  });
82
- if (!canShowDefaultPropsSection) {
82
+ if (readOnlyStudio || !canShowDefaultPropsSection) {
83
83
  return null;
84
84
  }
85
85
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
@@ -92,9 +92,10 @@ const CompositionDefaultPropsSection = ({ composition, currentDefaultProps, setD
92
92
  ] })
93
93
  ] }));
94
94
  };
95
- const CompositionVisualControlsSection = () => {
95
+ const CompositionVisualControlsSection = ({ readOnlyStudio }) => {
96
96
  const { handles: visualControlHandles } = (0, react_1.useContext)(VisualControls_1.VisualControlsContext);
97
- const hasVisualControls = (0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
97
+ const hasVisualControls = !readOnlyStudio &&
98
+ (0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
98
99
  Object.keys(visualControlHandles).length > 0;
99
100
  if (!hasVisualControls) {
100
101
  return null;
@@ -109,7 +110,7 @@ const CompositionInspector = ({ composition, currentDefaultProps, readOnlyStudio
109
110
  return (jsx_runtime_1.jsxs("div", { style: styles_1.scrollableContainer, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: [
110
111
  jsx_runtime_1.jsxs("div", { style: styles_1.inspectorOverviewSection, children: [
111
112
  jsx_runtime_1.jsx(CompositionInspectorHeader_1.CompositionInspectorHeader, {}), jsx_runtime_1.jsx(common_1.InspectorSectionDivider, {}), jsx_runtime_1.jsx(CompositionMetadata_1.CompositionMetadata, { compositionId: composition.id, disabled: readOnlyStudio, stack: composition.stack })
112
- ] }), jsx_runtime_1.jsx(CompositionDefaultPropsSection, { composition: composition, currentDefaultProps: currentDefaultProps, setDefaultProps: setDefaultProps }), jsx_runtime_1.jsx(CompositionVisualControlsSection, {}), jsx_runtime_1.jsx(CompositionActions, {})
113
+ ] }), jsx_runtime_1.jsx(CompositionDefaultPropsSection, { composition: composition, currentDefaultProps: currentDefaultProps, readOnlyStudio: readOnlyStudio, setDefaultProps: setDefaultProps }), jsx_runtime_1.jsx(CompositionVisualControlsSection, { readOnlyStudio: readOnlyStudio }), jsx_runtime_1.jsx(CompositionActions, { readOnlyStudio: readOnlyStudio })
113
114
  ] }));
114
115
  };
115
116
  exports.CompositionInspector = CompositionInspector;