@remotion/studio 4.0.515 → 4.0.517

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 (277) hide show
  1. package/dist/api/restart-studio.js +4 -0
  2. package/dist/components/AssetSelector.js +4 -10
  3. package/dist/components/AssetSelectorItem.d.ts +2 -1
  4. package/dist/components/AssetSelectorItem.js +24 -29
  5. package/dist/components/Canvas.js +21 -15
  6. package/dist/components/CanvasCaptureDropHandler.d.ts +4 -0
  7. package/dist/components/CanvasCaptureDropHandler.js +42 -0
  8. package/dist/components/CanvasOrLoading.js +4 -3
  9. package/dist/components/CaptionInspector.d.ts +2 -0
  10. package/dist/components/CaptionInspector.js +3 -5
  11. package/dist/components/CheckboardToggle.js +1 -1
  12. package/dist/components/Checkbox.d.ts +0 -1
  13. package/dist/components/Checkbox.js +2 -19
  14. package/dist/components/CompositionSelector.js +6 -3
  15. package/dist/components/CompositionSelectorItem.js +9 -10
  16. package/dist/components/ConfigSelect.d.ts +17 -0
  17. package/dist/components/ConfigSelect.js +50 -0
  18. package/dist/components/ConfigureLicenseModal.js +79 -46
  19. package/dist/components/CurrentAsset.d.ts +10 -2
  20. package/dist/components/CurrentAsset.js +143 -45
  21. package/dist/components/Editor.js +2 -1
  22. package/dist/components/EditorContent.js +5 -2
  23. package/dist/components/EditorContexts.js +2 -1
  24. package/dist/components/EditorRuler/Ruler.d.ts +1 -0
  25. package/dist/components/EditorRuler/Ruler.js +9 -8
  26. package/dist/components/EditorRuler/index.d.ts +1 -0
  27. package/dist/components/EditorRuler/index.js +3 -4
  28. package/dist/components/EditorRuler/use-is-ruler-visible.d.ts +1 -1
  29. package/dist/components/EditorRuler/use-is-ruler-visible.js +8 -2
  30. package/dist/components/ElementLibraryModal.d.ts +5 -0
  31. package/dist/components/ElementLibraryModal.js +38 -0
  32. package/dist/components/FilePreview.js +71 -0
  33. package/dist/components/FixComputedValueModal.js +54 -51
  34. package/dist/components/GlobalKeybindings.js +5 -5
  35. package/dist/components/InlineAction.d.ts +1 -1
  36. package/dist/components/InlineAction.js +12 -2
  37. package/dist/components/InlineCaptionInspector.d.ts +2 -0
  38. package/dist/components/InlineCaptionInspector.js +2 -2
  39. package/dist/components/InlineCompositionName.js +1 -1
  40. package/dist/components/InlineEditableTitle.js +5 -4
  41. package/dist/components/InspectorInfoHeader.js +1 -1
  42. package/dist/components/InspectorOpenInEditor.js +48 -72
  43. package/dist/components/InspectorPanel/AlignmentControls.js +2 -3
  44. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.d.ts +7 -0
  45. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +39 -0
  46. package/dist/components/InspectorPanel/CompositionInspector.js +25 -45
  47. package/dist/components/InspectorPanel/CompositionInspectorHeader.js +2 -2
  48. package/dist/components/InspectorPanel/CompositionMetadata.js +11 -4
  49. package/dist/components/InspectorPanel/EasingInspector.js +2 -2
  50. package/dist/components/InspectorPanel/ElementLibraryButton.d.ts +2 -0
  51. package/dist/components/InspectorPanel/ElementLibraryButton.js +139 -0
  52. package/dist/components/InspectorPanel/KeyframeEasingNavigator.js +10 -4
  53. package/dist/components/InspectorPanel/KeyframeInspector.js +1 -1
  54. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +14 -6
  55. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +2 -7
  56. package/dist/components/InspectorPanel/common.d.ts +0 -13
  57. package/dist/components/InspectorPanel/common.js +6 -59
  58. package/dist/components/InspectorPanel/inspector-selection.d.ts +2 -2
  59. package/dist/components/InspectorPanel/styles.d.ts +0 -1
  60. package/dist/components/InspectorPanel/styles.js +3 -4
  61. package/dist/components/InspectorPanel/use-composition-actions.js +0 -1
  62. package/dist/components/InspectorPanel/use-track-for-selection.d.ts +1 -2
  63. package/dist/components/InspectorPanelLayout.d.ts +1 -1
  64. package/dist/components/InspectorPanelLayout.js +1 -1
  65. package/dist/components/InspectorSequenceSection.d.ts +1 -2
  66. package/dist/components/InspectorSequenceSection.js +40 -54
  67. package/dist/components/InspectorSourceLocation.js +1 -1
  68. package/dist/components/InstallPackage.d.ts +2 -1
  69. package/dist/components/InstallPackage.js +60 -30
  70. package/dist/components/InstallablePackage.js +37 -11
  71. package/dist/components/KeyboardShortcutsSettings.d.ts +2 -0
  72. package/dist/components/KeyboardShortcutsSettings.js +177 -0
  73. package/dist/components/Menu/MenuItem.js +15 -6
  74. package/dist/components/MenuBuildIndicator.js +1 -1
  75. package/dist/components/MenuToolbar.js +7 -3
  76. package/dist/components/Modals.js +7 -5
  77. package/dist/components/NewComposition/CodemodFooter.d.ts +0 -1
  78. package/dist/components/NewComposition/CodemodFooter.js +2 -8
  79. package/dist/components/NewComposition/DeleteComposition.js +1 -1
  80. package/dist/components/NewComposition/DeleteFolder.js +1 -1
  81. package/dist/components/NewComposition/DuplicateComposition.js +1 -1
  82. package/dist/components/NewComposition/InputDragger.js +27 -4
  83. package/dist/components/NewComposition/NewComposition.js +1 -1
  84. package/dist/components/NewComposition/NewFolder.js +1 -3
  85. package/dist/components/NewComposition/RenameComposition.js +1 -1
  86. package/dist/components/NewComposition/RenameFolder.js +1 -1
  87. package/dist/components/NewComposition/use-rename-static-file.js +1 -1
  88. package/dist/components/Notifications/NotificationCenter.d.ts +1 -0
  89. package/dist/components/Notifications/NotificationCenter.js +5 -0
  90. package/dist/components/OptionsPanel.js +9 -12
  91. package/dist/components/PlaybackRateSelector.js +1 -1
  92. package/dist/components/Preview.js +83 -5
  93. package/dist/components/PreviewToolbar.js +12 -3
  94. package/dist/components/PreviewToolbarOverflowButton.d.ts +1 -0
  95. package/dist/components/PreviewToolbarOverflowButton.js +39 -2
  96. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +2 -2
  97. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +14 -30
  98. package/dist/components/RadioButton.d.ts +6 -0
  99. package/dist/components/RadioButton.js +62 -0
  100. package/dist/components/RenderButton.js +68 -184
  101. package/dist/components/RenderModal/DataEditor.js +15 -12
  102. package/dist/components/RenderModal/RenderStatusModal.js +0 -1
  103. package/dist/components/RenderModal/SchemaEditor/ZodSwitch.js +3 -1
  104. package/dist/components/RenderModal/SchemaEditor/infer-zod-schema-from-value.d.ts +15 -0
  105. package/dist/components/RenderModal/SchemaEditor/infer-zod-schema-from-value.js +95 -0
  106. package/dist/components/RenderQueue/RenderQueueRemoveItem.js +1 -6
  107. package/dist/components/RenderingSettings.js +7 -4
  108. package/dist/components/RulersAndGuidesToggle.d.ts +4 -0
  109. package/dist/components/RulersAndGuidesToggle.js +34 -0
  110. package/dist/components/SegmentedButton.d.ts +29 -0
  111. package/dist/components/SegmentedButton.js +226 -0
  112. package/dist/components/SelectedOutlineEditingHandles.d.ts +16 -0
  113. package/dist/components/SelectedOutlineEditingHandles.js +66 -0
  114. package/dist/components/SelectedOutlineElement.d.ts +2 -4
  115. package/dist/components/SelectedOutlineElement.js +15 -54
  116. package/dist/components/SelectedOutlineOverlay.js +32 -6
  117. package/dist/components/SelectedOutlinePolygon.d.ts +4 -6
  118. package/dist/components/SelectedOutlinePolygon.js +18 -16
  119. package/dist/components/SelectedOutlineRenderer.d.ts +1 -2
  120. package/dist/components/SelectedOutlineRenderer.js +66 -14
  121. package/dist/components/SelectedOutlineUvControls.d.ts +1 -1
  122. package/dist/components/SettingsModal.d.ts +1 -1
  123. package/dist/components/SettingsModal.js +30 -7
  124. package/dist/components/SettingsModalFooter.d.ts +3 -1
  125. package/dist/components/SettingsModalFooter.js +20 -4
  126. package/dist/components/ShowPixelGridProvider.d.ts +4 -0
  127. package/dist/components/ShowPixelGridProvider.js +24 -0
  128. package/dist/components/SidebarCollapserControls.js +2 -2
  129. package/dist/components/SkillsSettings.d.ts +2 -0
  130. package/dist/components/SkillsSettings.js +129 -0
  131. package/dist/components/StaticFilePreview.js +7 -1
  132. package/dist/components/StudioSettings.js +7 -48
  133. package/dist/components/Tabs/index.js +1 -1
  134. package/dist/components/Timeline/Timeline.js +41 -1
  135. package/dist/components/Timeline/TimelineAssetField.d.ts +1 -1
  136. package/dist/components/Timeline/TimelineAssetField.js +15 -9
  137. package/dist/components/Timeline/TimelineBooleanField.js +1 -4
  138. package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +6 -7
  139. package/dist/components/Timeline/TimelineClipboardKeybindings.js +7 -10
  140. package/dist/components/Timeline/TimelineDragHandler.js +11 -4
  141. package/dist/components/Timeline/TimelineEffectItem.d.ts +1 -0
  142. package/dist/components/Timeline/TimelineEffectItem.js +23 -10
  143. package/dist/components/Timeline/TimelineEffectPropItem.js +15 -2
  144. package/dist/components/Timeline/TimelineExpandedRow.js +5 -4
  145. package/dist/components/Timeline/TimelineFieldLabel.js +4 -2
  146. package/dist/components/Timeline/TimelineFieldRowContent.d.ts +1 -2
  147. package/dist/components/Timeline/TimelineFieldRowContent.js +8 -21
  148. package/dist/components/Timeline/TimelineImageInfo.d.ts +0 -1
  149. package/dist/components/Timeline/TimelineImageInfo.js +13 -32
  150. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +1 -2
  151. package/dist/components/Timeline/TimelineKeyframeControls.js +10 -4
  152. package/dist/components/Timeline/TimelinePlayCursorSyncer.js +4 -2
  153. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +1 -1
  154. package/dist/components/Timeline/TimelineRotationField.js +0 -2
  155. package/dist/components/Timeline/TimelineRowChrome.d.ts +0 -1
  156. package/dist/components/Timeline/TimelineRowChrome.js +3 -4
  157. package/dist/components/Timeline/TimelineRowLayoutContext.d.ts +0 -1
  158. package/dist/components/Timeline/TimelineRowLayoutContext.js +1 -4
  159. package/dist/components/Timeline/TimelineScaleField.js +2 -6
  160. package/dist/components/Timeline/TimelineSchemaField.js +9 -3
  161. package/dist/components/Timeline/TimelineSelection.d.ts +29 -66
  162. package/dist/components/Timeline/TimelineSelection.js +31 -171
  163. package/dist/components/Timeline/TimelineSequence.d.ts +2 -0
  164. package/dist/components/Timeline/TimelineSequence.js +110 -19
  165. package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
  166. package/dist/components/Timeline/TimelineSequenceItem.js +13 -11
  167. package/dist/components/Timeline/TimelineSequencePropItem.js +15 -2
  168. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +7 -6
  169. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +85 -91
  170. package/dist/components/Timeline/TimelineTrack.js +1 -1
  171. package/dist/components/Timeline/TimelineTransformOriginField.js +0 -4
  172. package/dist/components/Timeline/TimelineTranslateField.js +0 -4
  173. package/dist/components/Timeline/TimelineVirtualization.js +3 -1
  174. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +3 -4
  175. package/dist/components/Timeline/duplicate-selected-timeline-item.d.ts +3 -4
  176. package/dist/components/Timeline/duplicate-selected-timeline-item.js +3 -12
  177. package/dist/components/Timeline/find-track-for-node-path-info.d.ts +1 -1
  178. package/dist/components/Timeline/get-copy-context-for-agents-menu-item.d.ts +4 -0
  179. package/dist/components/Timeline/get-copy-context-for-agents-menu-item.js +26 -0
  180. package/dist/components/Timeline/get-sequence-context-menu-items.js +2 -19
  181. package/dist/components/Timeline/get-timeline-sequence-visible-layout.d.ts +6 -1
  182. package/dist/components/Timeline/get-timeline-sequence-visible-layout.js +11 -4
  183. package/dist/components/Timeline/keyframe-clipboard.d.ts +2 -3
  184. package/dist/components/Timeline/reset-selected-timeline-props.d.ts +2 -3
  185. package/dist/components/Timeline/sequence-prop-clipboard.d.ts +2 -3
  186. package/dist/components/Timeline/split-selected-timeline-item.d.ts +2 -3
  187. package/dist/components/Timeline/split-selected-timeline-item.js +0 -1
  188. package/dist/components/Timeline/timeline-expanded-filter.d.ts +1 -2
  189. package/dist/components/Timeline/timeline-field-row-layout.d.ts +1 -1
  190. package/dist/components/Timeline/timeline-field-row-layout.js +4 -7
  191. package/dist/components/Timeline/timeline-field-utils.js +0 -2
  192. package/dist/components/Timeline/timeline-scroll-logic.d.ts +7 -5
  193. package/dist/components/Timeline/timeline-scroll-logic.js +12 -7
  194. package/dist/components/Timeline/update-selected-easing.d.ts +7 -7
  195. package/dist/components/Timeline/use-timeline-asset-drop.js +24 -0
  196. package/dist/components/Timeline/use-timeline-keyframe-drag.d.ts +6 -7
  197. package/dist/components/TimelineCombobox.js +25 -160
  198. package/dist/components/TimelineInOutToggle.js +4 -1
  199. package/dist/components/canvas-capture-drop.d.ts +4 -0
  200. package/dist/components/canvas-capture-drop.js +22 -0
  201. package/dist/components/duplicate-jsx-node-api.d.ts +2 -0
  202. package/dist/components/duplicate-jsx-node-api.js +12 -0
  203. package/dist/components/effect-drag-and-drop.js +1 -4
  204. package/dist/components/handle-drop.d.ts +2 -1
  205. package/dist/components/handle-drop.js +3 -3
  206. package/dist/components/import-assets.js +9 -65
  207. package/dist/components/keyboard-shortcuts.d.ts +10 -0
  208. package/dist/components/keyboard-shortcuts.js +135 -0
  209. package/dist/components/selected-outline-control-layout.js +2 -6
  210. package/dist/components/selected-outline-measurement.d.ts +8 -9
  211. package/dist/components/selected-outline-measurement.js +16 -3
  212. package/dist/components/use-delete-asset.d.ts +1 -0
  213. package/dist/components/use-delete-asset.js +40 -0
  214. package/dist/components/use-selected-outline-control-target.d.ts +11 -0
  215. package/dist/components/use-selected-outline-control-target.js +79 -0
  216. package/dist/esm/{chunk-s6k99gh2.js → chunk-4bxz1d3g.js} +3 -2
  217. package/dist/esm/{chunk-v5a8vpv4.js → chunk-gzqm3g2m.js} +47432 -40444
  218. package/dist/esm/index.mjs +3 -0
  219. package/dist/esm/internals.mjs +47431 -40443
  220. package/dist/esm/previewEntry.mjs +47169 -40181
  221. package/dist/esm/renderEntry.mjs +2 -2
  222. package/dist/helpers/add-asset-cache-bust.d.ts +4 -0
  223. package/dist/helpers/add-asset-cache-bust.js +10 -0
  224. package/dist/helpers/calculate-timeline.d.ts +1 -7
  225. package/dist/helpers/calculate-timeline.js +2 -145
  226. package/dist/helpers/colors.d.ts +2 -0
  227. package/dist/helpers/colors.js +6 -2
  228. package/dist/helpers/drag-aware-double-click.d.ts +6 -0
  229. package/dist/helpers/drag-aware-double-click.js +20 -0
  230. package/dist/helpers/editor-ruler.js +6 -5
  231. package/dist/helpers/get-asset-metadata.d.ts +19 -0
  232. package/dist/helpers/get-asset-metadata.js +75 -21
  233. package/dist/helpers/get-connected-compositions.d.ts +1 -6
  234. package/dist/helpers/get-connected-compositions.js +2 -8
  235. package/dist/helpers/get-sequence-double-click-action.d.ts +2 -1
  236. package/dist/helpers/get-sequence-double-click-action.js +7 -1
  237. package/dist/helpers/get-sequence-visible-range.d.ts +1 -5
  238. package/dist/helpers/get-sequence-visible-range.js +6 -51
  239. package/dist/helpers/get-timeline-nestedness.d.ts +1 -2
  240. package/dist/helpers/get-timeline-nestedness.js +2 -12
  241. package/dist/helpers/get-timeline-sequence-layout.d.ts +4 -1
  242. package/dist/helpers/get-timeline-sequence-layout.js +15 -6
  243. package/dist/helpers/get-timeline-sequence-sort-key.d.ts +2 -21
  244. package/dist/helpers/get-timeline-sequence-sort-key.js +2 -16
  245. package/dist/helpers/hoverable.d.ts +1 -0
  246. package/dist/helpers/hoverable.js +2 -1
  247. package/dist/helpers/inject-css.js +3 -1
  248. package/dist/helpers/is-current-selected-still.js +4 -2
  249. package/dist/helpers/open-in-remotion-convert.d.ts +7 -0
  250. package/dist/helpers/open-in-remotion-convert.js +18 -0
  251. package/dist/helpers/sort-by-nonce-history.d.ts +1 -5
  252. package/dist/helpers/sort-by-nonce-history.js +3 -148
  253. package/dist/helpers/timeline-node-path-key.d.ts +1 -2
  254. package/dist/helpers/timeline-node-path-key.js +2 -2
  255. package/dist/helpers/use-media-metadata.d.ts +2 -1
  256. package/dist/helpers/use-media-metadata.js +12 -5
  257. package/dist/helpers/use-menu-structure.js +52 -32
  258. package/dist/icons/align-center-horizontal.js +1 -1
  259. package/dist/icons/align-left.js +1 -1
  260. package/dist/icons/align-right.js +1 -1
  261. package/dist/icons/keyboard.d.ts +4 -0
  262. package/dist/icons/keyboard.js +10 -0
  263. package/dist/icons/license.d.ts +4 -0
  264. package/dist/icons/license.js +8 -0
  265. package/dist/icons/package.d.ts +4 -0
  266. package/dist/icons/package.js +8 -0
  267. package/dist/icons/react.js +1 -1
  268. package/dist/icons/remotion-convert.d.ts +4 -0
  269. package/dist/icons/remotion-convert.js +10 -0
  270. package/dist/icons/skills.d.ts +4 -0
  271. package/dist/icons/skills.js +10 -0
  272. package/dist/state/editor-pixel-grid.d.ts +8 -0
  273. package/dist/state/editor-pixel-grid.js +18 -0
  274. package/dist/state/modals.d.ts +6 -5
  275. package/package.json +14 -12
  276. package/dist/components/KeyboardShortcutsExplainer.d.ts +0 -2
  277. package/dist/components/KeyboardShortcutsExplainer.js +0 -194
@@ -7,10 +7,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.restartStudio = void 0;
8
8
  const remotion_1 = require("remotion");
9
9
  const call_api_1 = require("../components/call-api");
10
+ const browser_studio_operations_1 = require("../helpers/browser-studio-operations");
10
11
  const restartStudio = () => {
11
12
  if (!(0, remotion_1.getRemotionEnvironment)().isStudio) {
12
13
  throw new Error('restartStudio() is only available in the Studio');
13
14
  }
15
+ if ((0, browser_studio_operations_1.getBrowserStudioOperations)() !== null) {
16
+ throw new Error('restartStudio() is not supported in Browser Studio');
17
+ }
14
18
  if (window.remotion_isReadOnlyStudio) {
15
19
  throw new Error('restartStudio() is not available in read-only Studio');
16
20
  }
@@ -135,12 +135,12 @@ const AssetSelector = ({ readOnlyStudio }) => {
135
135
  outputPath: renderOutput.outputPath,
136
136
  assetPath: destination,
137
137
  });
138
- (0, NotificationCenter_1.showNotification)(result.created
139
- ? `Created ${destination}`
140
- : `${destination} already exists`, 3000);
138
+ if (!result.created) {
139
+ (0, NotificationCenter_1.showNotification)(`${destination} already exists`, 3000);
140
+ }
141
141
  return;
142
142
  }
143
- const { files } = e.dataTransfer;
143
+ const files = Array.from(e.dataTransfer.files);
144
144
  if (files.length === 0) {
145
145
  setDropLocation(null);
146
146
  return;
@@ -164,12 +164,6 @@ const AssetSelector = ({ readOnlyStudio }) => {
164
164
  filePath: makePath(file),
165
165
  });
166
166
  }
167
- if (files.length === 1) {
168
- (0, NotificationCenter_1.showNotification)(`Created ${makePath(files[0])}`, 3000);
169
- }
170
- else {
171
- (0, NotificationCenter_1.showNotification)(`Added ${files.length} files to ${assetPath}`, 3000);
172
- }
173
167
  }
174
168
  catch (error) {
175
169
  (0, NotificationCenter_1.showNotification)(`Error during upload: ${error}`, 3000);
@@ -14,11 +14,12 @@ export declare const getCanDragAsset: ({ readOnlyStudio, relativePath, }: {
14
14
  readOnlyStudio: boolean;
15
15
  relativePath: string;
16
16
  }) => boolean;
17
- export declare const getAssetContextMenuItems: ({ relativePath, fileManagerName, copyFileName, copyStaticFilePath, openAssetInExplorer, renameAsset, deleteAsset, fileExplorerAvailable, fileExplorerDisabled, mutationsDisabled, }: {
17
+ export declare const getAssetContextMenuItems: ({ relativePath, fileManagerName, copyFileName, copyStaticFilePath, openAssetInConvert, openAssetInExplorer, renameAsset, deleteAsset, fileExplorerAvailable, fileExplorerDisabled, mutationsDisabled, }: {
18
18
  relativePath: string;
19
19
  fileManagerName: string;
20
20
  copyFileName: () => void;
21
21
  copyStaticFilePath: () => void;
22
+ openAssetInConvert: () => void;
22
23
  openAssetInExplorer: () => void;
23
24
  renameAsset: () => void;
24
25
  deleteAsset: () => void;
@@ -39,13 +39,13 @@ const studio_protocol_1 = require("@remotion/studio-protocol");
39
39
  const react_1 = require("react");
40
40
  const remotion_1 = require("remotion");
41
41
  const no_react_1 = require("remotion/no-react");
42
- const delete_static_file_1 = require("../api/delete-static-file");
43
42
  const browser_studio_operations_1 = require("../helpers/browser-studio-operations");
44
43
  const client_id_1 = require("../helpers/client-id");
45
44
  const colors_1 = require("../helpers/colors");
46
45
  const copy_text_1 = require("../helpers/copy-text");
47
46
  const get_file_manager_name_1 = require("../helpers/get-file-manager-name");
48
47
  const get_preview_file_type_1 = require("../helpers/get-preview-file-type");
48
+ const open_in_remotion_convert_1 = require("../helpers/open-in-remotion-convert");
49
49
  const sidebar_scroll_into_view_1 = require("../helpers/sidebar-scroll-into-view");
50
50
  const url_state_1 = require("../helpers/url-state");
51
51
  const use_asset_drag_events_1 = __importStar(require("../helpers/use-asset-drag-events"));
@@ -55,15 +55,14 @@ const clipboard_1 = require("../icons/clipboard");
55
55
  const folder_1 = require("../icons/folder");
56
56
  const modals_1 = require("../state/modals");
57
57
  const AssetFileIcon_1 = require("./AssetFileIcon");
58
- const ConfirmationDialog_1 = require("./ConfirmationDialog");
59
58
  const ContextMenu_1 = require("./ContextMenu");
60
59
  const import_assets_1 = require("./import-assets");
61
60
  const InlineAction_1 = require("./InlineAction");
62
61
  const layout_1 = require("./layout");
63
- const styles_1 = require("./Menu/styles");
64
62
  const NotificationCenter_1 = require("./Notifications/NotificationCenter");
65
63
  const open_in_new_window_1 = require("./open-in-new-window");
66
64
  const actions_1 = require("./RenderQueue/actions");
65
+ const use_delete_asset_1 = require("./use-delete-asset");
67
66
  const iconStyle = {
68
67
  width: 18,
69
68
  height: 18,
@@ -117,9 +116,24 @@ const getCanDragAsset = ({ readOnlyStudio, relativePath, }) => {
117
116
  return !readOnlyStudio && (0, import_assets_1.getAssetElementFromPath)(relativePath) !== null;
118
117
  };
119
118
  exports.getCanDragAsset = getCanDragAsset;
120
- const getAssetContextMenuItems = ({ relativePath, fileManagerName, copyFileName, copyStaticFilePath, openAssetInExplorer, renameAsset, deleteAsset, fileExplorerAvailable, fileExplorerDisabled, mutationsDisabled, }) => {
119
+ const getAssetContextMenuItems = ({ relativePath, fileManagerName, copyFileName, copyStaticFilePath, openAssetInConvert, openAssetInExplorer, renameAsset, deleteAsset, fileExplorerAvailable, fileExplorerDisabled, mutationsDisabled, }) => {
120
+ const previewFileType = (0, get_preview_file_type_1.getPreviewFileType)(relativePath);
121
+ const canOpenInConvert = previewFileType === 'audio' || previewFileType === 'video';
121
122
  const items = [
122
123
  (0, open_in_new_window_1.getOpenInNewWindowMenuItem)(`/assets/${relativePath}`),
124
+ canOpenInConvert
125
+ ? {
126
+ id: 'open-asset-in-convert',
127
+ keyHint: null,
128
+ label: 'Open in Remotion Convert',
129
+ leftItem: null,
130
+ onClick: openAssetInConvert,
131
+ quickSwitcherLabel: 'Open asset in Remotion Convert',
132
+ subMenu: null,
133
+ type: 'item',
134
+ value: 'open-asset-in-convert',
135
+ }
136
+ : null,
123
137
  {
124
138
  type: 'divider',
125
139
  id: 'open-in-new-window-divider',
@@ -263,7 +277,6 @@ const AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio
263
277
  const [hovered, setHovered] = (0, react_1.useState)(false);
264
278
  const [isDragging, setIsDragging] = (0, react_1.useState)(false);
265
279
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
266
- const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
267
280
  const connectionStatus = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx)
268
281
  .previewServerState.type;
269
282
  const onPointerEnter = (0, react_1.useCallback)(() => {
@@ -379,6 +392,9 @@ const AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio
379
392
  (0, NotificationCenter_1.showNotification)(`Could not copy: ${err.message}`, 2000);
380
393
  });
381
394
  }, [relativePath]);
395
+ const openAssetInConvert = (0, react_1.useCallback)(() => {
396
+ (0, open_in_remotion_convert_1.openInRemotionConvert)({ relativePath });
397
+ }, [relativePath]);
382
398
  const openAssetInExplorer = (0, react_1.useCallback)(() => {
383
399
  if (!window.remotion_publicFolderExists) {
384
400
  (0, NotificationCenter_1.showNotification)('Could not find the public folder', 2000);
@@ -396,30 +412,7 @@ const AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio
396
412
  connectionStatus,
397
413
  publicFolderExists: window.remotion_publicFolderExists,
398
414
  });
399
- const deleteAsset = (0, react_1.useCallback)(() => {
400
- confirm({
401
- title: 'Delete asset',
402
- message: (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: ["Do you want to delete the asset", ' ', jsx_runtime_1.jsx("code", { style: styles_1.inlineCodeSnippet, children: relativePath }),
403
- " from your public folder?"] })),
404
- confirmLabel: 'Delete',
405
- })
406
- .then((confirmed) => {
407
- if (!confirmed) {
408
- return;
409
- }
410
- const notification = (0, NotificationCenter_1.showNotification)(`Deleting ${relativePath}...`, null);
411
- (0, delete_static_file_1.deleteStaticFile)(relativePath)
412
- .then(() => {
413
- notification.replaceContent(`Deleted ${relativePath}`, 2000);
414
- })
415
- .catch((err) => {
416
- notification.replaceContent(`Could not delete ${relativePath}: ${err.message}`, 3000);
417
- });
418
- })
419
- .catch((err) => {
420
- (0, NotificationCenter_1.showNotification)(`Could not delete ${relativePath}: ${err.message}`, 3000);
421
- });
422
- }, [confirm, relativePath]);
415
+ const deleteAsset = (0, use_delete_asset_1.useDeleteAsset)(relativePath);
423
416
  const renameAsset = (0, react_1.useCallback)(() => {
424
417
  setSelectedModal({
425
418
  type: 'rename-static-file',
@@ -432,6 +425,7 @@ const AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio
432
425
  fileManagerName,
433
426
  copyFileName,
434
427
  copyStaticFilePath,
428
+ openAssetInConvert,
435
429
  openAssetInExplorer,
436
430
  renameAsset,
437
431
  deleteAsset,
@@ -446,6 +440,7 @@ const AssetSelectorItem = ({ item, tabIndex, level, parentFolder, readOnlyStudio
446
440
  fileExplorerDisabled,
447
441
  fileManagerName,
448
442
  mutationsDisabled,
443
+ openAssetInConvert,
449
444
  openAssetInExplorer,
450
445
  renameAsset,
451
446
  relativePath,
@@ -16,7 +16,6 @@ const clipboard_images_1 = require("../helpers/clipboard-images");
16
16
  const clipboard_svg_1 = require("../helpers/clipboard-svg");
17
17
  const colors_1 = require("../helpers/colors");
18
18
  const get_asset_metadata_1 = require("../helpers/get-asset-metadata");
19
- const get_canvas_capture_import_1 = require("../helpers/get-canvas-capture-import");
20
19
  const get_effective_translation_1 = require("../helpers/get-effective-translation");
21
20
  const install_required_package_1 = require("../helpers/install-required-package");
22
21
  const open_in_editor_1 = require("../helpers/open-in-editor");
@@ -29,6 +28,7 @@ const editor_snapping_1 = require("../state/editor-snapping");
29
28
  const editor_zoom_gestures_1 = require("../state/editor-zoom-gestures");
30
29
  const modals_1 = require("../state/modals");
31
30
  const call_api_1 = require("./call-api");
31
+ const canvas_capture_drop_1 = require("./canvas-capture-drop");
32
32
  const composition_drop_preview_1 = require("./composition-drop-preview");
33
33
  const ConfirmationDialog_1 = require("./ConfirmationDialog");
34
34
  const drop_handler_data_1 = require("./drop-handler-data");
@@ -135,6 +135,7 @@ const Canvas = ({ canvasContent, size }) => {
135
135
  const { editorShowGuides } = (0, react_1.useContext)(editor_guides_1.EditorShowGuidesContext);
136
136
  const { editorSnapping } = (0, react_1.useContext)(editor_snapping_1.EditorSnappingContext);
137
137
  const { compositions } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
138
+ const { setCurrentAssetMetadata } = (0, react_1.useContext)(remotion_1.Internals.CompositionSetters);
138
139
  const { previewServerState, subscribeToEvent } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
139
140
  const previewServerClientId = previewServerState.type === 'connected'
140
141
  ? previewServerState.clientId
@@ -146,6 +147,7 @@ const Canvas = ({ canvasContent, size }) => {
146
147
  const [activeElementInstallRequest, setActiveElementInstallRequest] = (0, react_1.useState)(null);
147
148
  const lastFocusedAtRef = (0, react_1.useRef)(typeof document === 'undefined' || document.hasFocus() ? Date.now() : null);
148
149
  const [assetResolution, setAssetResolution] = (0, react_1.useState)(null);
150
+ const metadataRequestRef = (0, react_1.useRef)(0);
149
151
  const currentCompositionId = canvasContent.type === 'composition' ? canvasContent.compositionId : null;
150
152
  const currentComposition = (0, react_1.useMemo)(() => {
151
153
  var _a;
@@ -530,13 +532,19 @@ const Canvas = ({ canvasContent, size }) => {
530
532
  };
531
533
  }, [keybindings, onReset, onZoomIn, onZoomOut]);
532
534
  const fetchMetadata = (0, react_1.useCallback)(async () => {
535
+ const request = ++metadataRequestRef.current;
533
536
  setAssetResolution(null);
534
537
  if (canvasContent.type === 'composition') {
538
+ setCurrentAssetMetadata(null);
535
539
  return;
536
540
  }
537
541
  const metadata = await (0, get_asset_metadata_1.getAssetMetadata)(canvasContent, canvasContent.type === 'asset');
542
+ if (request !== metadataRequestRef.current) {
543
+ return;
544
+ }
538
545
  setAssetResolution(metadata);
539
- }, [canvasContent]);
546
+ setCurrentAssetMetadata((0, get_asset_metadata_1.getAssetPreviewMetadata)({ canvasContent, metadata }));
547
+ }, [canvasContent, setCurrentAssetMetadata]);
540
548
  (0, react_1.useEffect)(() => {
541
549
  if (canvasContent.type !== 'asset') {
542
550
  return;
@@ -846,22 +854,19 @@ const Canvas = ({ canvasContent, size }) => {
846
854
  if (!(0, drop_handler_data_1.isSupportedDropEvent)(event) || !isDragEventInsideCanvas(event)) {
847
855
  return;
848
856
  }
849
- if ((0, drop_handler_data_1.isFileDragEvent)(event) && !window.remotion_isReadOnlyStudio) {
857
+ const localFiles = (0, drop_handler_data_1.isFileDragEvent)(event)
858
+ ? Array.from((_c = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.files) !== null && _c !== void 0 ? _c : [])
859
+ : null;
860
+ if (localFiles !== null && !window.remotion_isReadOnlyStudio) {
850
861
  event.preventDefault();
851
862
  event.stopPropagation();
852
- const files = Array.from((_c = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.files) !== null && _c !== void 0 ? _c : []);
853
- if (files.length === 1) {
863
+ if (localFiles.length === 1) {
854
864
  setIsAddingAsset(true);
855
865
  try {
856
- const canvasCapture = await (0, get_canvas_capture_import_1.getCanvasCaptureImport)(files[0]);
857
- if (canvasCapture !== null) {
858
- setSelectedModal({
859
- type: 'new-comp',
860
- canvasCapture,
861
- folderName: null,
862
- parentName: null,
863
- stack: null,
864
- });
866
+ if (await (0, canvas_capture_drop_1.handleCanvasCaptureDrop)({
867
+ files: localFiles,
868
+ setSelectedModal,
869
+ })) {
865
870
  return;
866
871
  }
867
872
  }
@@ -936,6 +941,7 @@ const Canvas = ({ canvasContent, size }) => {
936
941
  event,
937
942
  fps: config.fps,
938
943
  from: (0, imperative_state_1.getCurrentFrame)(),
944
+ localFiles,
939
945
  preferCompositionStart: true,
940
946
  });
941
947
  }
@@ -1094,6 +1100,6 @@ const Canvas = ({ canvasContent, size }) => {
1094
1100
  };
1095
1101
  }, [compositionDropPreview, contentDimensions, previewSize, size]);
1096
1102
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
1097
- jsx_runtime_1.jsxs("div", { ref: canvas_ref_1.canvasRef, style: getContainerStyle(editorZoomGestures), children: [size ? (jsx_runtime_1.jsx(Preview_1.VideoPreview, { canvasContent: canvasContent, contentDimensions: contentDimensions, canvasSize: size, assetMetadata: assetResolution, onRetryAssetMetadata: fetchMetadata })) : null, compositionDropPreviewStyle === null ? null : (jsx_runtime_1.jsx("div", { className: "css-reset", "data-testid": "composition-drop-preview", style: compositionDropPreviewStyle })), isFit ? null : (jsx_runtime_1.jsx("div", { style: resetZoom, className: "css-reset", children: jsx_runtime_1.jsx(ResetZoomButton_1.ResetZoomButton, { onClick: onReset }) })), editorShowGuides && canvasContent.type === 'composition' && (jsx_runtime_1.jsx(EditorGuides_1.default, { canvasSize: size, contentDimensions: contentDimensions, assetMetadata: assetResolution }))] }), areRulersVisible && (jsx_runtime_1.jsx(EditorRuler_1.EditorRulers, { contentDimensions: contentDimensions, canvasSize: size, assetMetadata: assetResolution, containerRef: canvas_ref_1.canvasRef }))] }));
1103
+ jsx_runtime_1.jsxs("div", { ref: canvas_ref_1.canvasRef, style: getContainerStyle(editorZoomGestures), children: [size ? (jsx_runtime_1.jsx(Preview_1.VideoPreview, { canvasContent: canvasContent, contentDimensions: contentDimensions, canvasSize: size, assetMetadata: assetResolution, onRetryAssetMetadata: fetchMetadata })) : null, compositionDropPreviewStyle === null ? null : (jsx_runtime_1.jsx("div", { className: "css-reset", "data-testid": "composition-drop-preview", style: compositionDropPreviewStyle })), isFit ? null : (jsx_runtime_1.jsx("div", { style: resetZoom, className: "css-reset", children: jsx_runtime_1.jsx(ResetZoomButton_1.ResetZoomButton, { onClick: onReset }) })), editorShowGuides && canvasContent.type === 'composition' && (jsx_runtime_1.jsx(EditorGuides_1.default, { canvasSize: size, contentDimensions: contentDimensions, assetMetadata: assetResolution }))] }), areRulersVisible && (jsx_runtime_1.jsx(EditorRuler_1.EditorRulers, { canCreateGuides: canvasContent.type === 'composition', contentDimensions: contentDimensions, canvasSize: size, assetMetadata: assetResolution, containerRef: canvas_ref_1.canvasRef }))] }));
1098
1104
  };
1099
1105
  exports.Canvas = Canvas;
@@ -0,0 +1,4 @@
1
+ import { type FC } from 'react';
2
+ export declare const CanvasCaptureDropHandler: FC<{
3
+ readonly readOnlyStudio: boolean;
4
+ }>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CanvasCaptureDropHandler = void 0;
4
+ const react_1 = require("react");
5
+ const modals_1 = require("../state/modals");
6
+ const canvas_capture_drop_1 = require("./canvas-capture-drop");
7
+ const drop_handler_data_1 = require("./drop-handler-data");
8
+ const CanvasCaptureDropHandler = ({ readOnlyStudio }) => {
9
+ const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
10
+ const onDragOver = (0, react_1.useCallback)((event) => {
11
+ if (readOnlyStudio || !(0, drop_handler_data_1.isFileDragEvent)(event)) {
12
+ return;
13
+ }
14
+ event.preventDefault();
15
+ if (event.dataTransfer) {
16
+ event.dataTransfer.dropEffect = 'copy';
17
+ }
18
+ }, [readOnlyStudio]);
19
+ const onDrop = (0, react_1.useCallback)(async (event) => {
20
+ var _a;
21
+ var _b;
22
+ if (readOnlyStudio || !(0, drop_handler_data_1.isFileDragEvent)(event)) {
23
+ return;
24
+ }
25
+ const files = Array.from((_b = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.files) !== null && _b !== void 0 ? _b : []);
26
+ if (files.length === 0) {
27
+ return;
28
+ }
29
+ event.preventDefault();
30
+ await (0, canvas_capture_drop_1.handleCanvasCaptureDrop)({ files, setSelectedModal });
31
+ }, [readOnlyStudio, setSelectedModal]);
32
+ (0, react_1.useEffect)(() => {
33
+ document.addEventListener('dragover', onDragOver);
34
+ document.addEventListener('drop', onDrop);
35
+ return () => {
36
+ document.removeEventListener('dragover', onDragOver);
37
+ document.removeEventListener('drop', onDrop);
38
+ };
39
+ }, [onDragOver, onDrop]);
40
+ return null;
41
+ };
42
+ exports.CanvasCaptureDropHandler = CanvasCaptureDropHandler;
@@ -58,9 +58,10 @@ const CanvasOrLoading = ({ size }) => {
58
58
  }
59
59
  const content = (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
60
60
  jsx_runtime_1.jsx(ZoomPersistor_1.ZoomPersistor, {}), jsx_runtime_1.jsx(Canvas_1.Canvas, { size: size, canvasContent: canvasContent }), (resolved === null || resolved === void 0 ? void 0 : resolved.type) === 'success-and-refreshing' ? (jsx_runtime_1.jsx(RefreshCompositionOverlay_1.RefreshCompositionOverlay, {})) : null] }));
61
- if (canvasContent.type === 'asset' ||
62
- canvasContent.type === 'output' ||
63
- canvasContent.type === 'output-blob') {
61
+ if (canvasContent.type === 'output' || canvasContent.type === 'output-blob') {
62
+ return content;
63
+ }
64
+ if (canvasContent.type === 'asset' && resolved === null) {
64
65
  return content;
65
66
  }
66
67
  if (!resolved) {
@@ -2,9 +2,11 @@ import type { Caption } from '@remotion/captions';
2
2
  import React from 'react';
3
3
  export declare const CaptionInspector: React.FC<{
4
4
  readonly captions: Caption[];
5
+ readonly expanded: boolean;
5
6
  readonly onTextChange: (captions: Caption[]) => void;
6
7
  readonly onTextSave: ((captions: Caption[]) => void) | null;
7
8
  readonly onTextCancel: (() => void) | null;
9
+ readonly onToggle: () => void;
8
10
  readonly readOnly: boolean;
9
11
  readonly readOnlyTitle: string | null;
10
12
  }>;
@@ -4,6 +4,7 @@ exports.CaptionInspector = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const colors_1 = require("../helpers/colors");
6
6
  const CaptionTextEditor_1 = require("./CaptionTextEditor");
7
+ const CollapsibleInspectorSectionHeader_1 = require("./InspectorPanel/CollapsibleInspectorSectionHeader");
7
8
  const common_1 = require("./InspectorPanel/common");
8
9
  const styles_1 = require("./InspectorPanel/styles");
9
10
  const readOnlyStatus = {
@@ -14,11 +15,8 @@ const readOnlyStatus = {
14
15
  lineHeight: '16px',
15
16
  marginLeft: 12,
16
17
  };
17
- const CaptionInspector = ({ captions, onTextChange, onTextSave, onTextCancel, readOnly, readOnlyTitle, }) => {
18
+ const CaptionInspector = ({ captions, expanded, onTextChange, onTextSave, onTextCancel, onToggle, readOnly, readOnlyTitle, }) => {
18
19
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
19
- jsx_runtime_1.jsx(common_1.InspectorSectionDivider, {}), jsx_runtime_1.jsx(common_1.InspectorSectionHeader, { children: jsx_runtime_1.jsxs("div", { style: styles_1.sectionHeaderRow, children: [
20
- jsx_runtime_1.jsx("div", { style: styles_1.sectionHeaderTitle, children: "Captions" }), jsx_runtime_1.jsx("div", { style: styles_1.sectionHeaderEnd, children: readOnly ? (jsx_runtime_1.jsx("div", { style: readOnlyStatus, title: readOnlyTitle !== null && readOnlyTitle !== void 0 ? readOnlyTitle : undefined, children: "Read only" })) : null })
21
- ] }) }), jsx_runtime_1.jsx(CaptionTextEditor_1.CaptionTextEditor, { captions: captions, onChange: onTextChange, onSave: onTextSave, onCancel: onTextCancel, readOnly: readOnly })
22
- ] }));
20
+ jsx_runtime_1.jsx(common_1.InspectorSectionHeader, { children: jsx_runtime_1.jsx(CollapsibleInspectorSectionHeader_1.CollapsibleInspectorSectionHeader, { action: jsx_runtime_1.jsx("div", { style: styles_1.sectionHeaderEnd, children: readOnly ? (jsx_runtime_1.jsx("div", { style: readOnlyStatus, title: readOnlyTitle !== null && readOnlyTitle !== void 0 ? readOnlyTitle : undefined, children: "Read only" })) : null }), expanded: expanded, label: "Captions", onToggle: onToggle }) }), expanded ? (jsx_runtime_1.jsx(CaptionTextEditor_1.CaptionTextEditor, { captions: captions, onChange: onTextChange, onSave: onTextSave, onCancel: onTextCancel, readOnly: readOnly })) : null] }));
23
21
  };
24
22
  exports.CaptionInspector = CaptionInspector;
@@ -21,7 +21,7 @@ const CheckboardToggle = () => {
21
21
  return !c;
22
22
  });
23
23
  }, [setCheckerboard]);
24
- return (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: accessibilityLabel, "aria-label": accessibilityLabel, onClick: onClick, children: (color) => (jsx_runtime_1.jsxs("svg", { "aria-hidden": "true", focusable: "false", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 512 512", style: { width: 18, height: 18 }, fill: "none", children: [
24
+ return (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: accessibilityLabel, "aria-label": accessibilityLabel, "aria-pressed": checkerboard, onClick: onClick, children: (color) => (jsx_runtime_1.jsxs("svg", { "aria-hidden": "true", focusable: "false", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 512 512", style: { width: 18, height: 18 }, fill: "none", children: [
25
25
  jsx_runtime_1.jsx("path", { fill: checkerboard ? colors_1.BLUE : color, d: "M256 48h184c13.3 0 24 10.7 24 24v184H256V48zM48 256h208v208H72c-13.3 0-24-10.7-24-24V256z" }), jsx_runtime_1.jsx("rect", { x: "48", y: "48", width: "416", height: "416", rx: "24", stroke: checkerboard ? colors_1.BLUE : color, strokeWidth: "32" }), jsx_runtime_1.jsx("path", { d: "M256 48v416M48 256h416", stroke: checkerboard ? colors_1.BLUE : color, strokeWidth: "32" })
26
26
  ] })) }));
27
27
  };
@@ -8,7 +8,6 @@ export declare const Checkbox: React.FC<{
8
8
  readonly checked: boolean;
9
9
  readonly onChange: React.ChangeEventHandler<HTMLInputElement>;
10
10
  readonly name: string;
11
- readonly rounded?: boolean;
12
11
  readonly disabled?: boolean;
13
12
  readonly variant?: CheckboxVariant;
14
13
  }>;
@@ -9,30 +9,18 @@ const SIZES = {
9
9
  default: 20,
10
10
  small: 18,
11
11
  };
12
- const BULLET_SIZES = {
13
- default: 10,
14
- small: 9,
15
- };
16
12
  const CHECKMARK_SIZES = {
17
13
  default: 14,
18
14
  small: 13,
19
15
  };
20
- const Checkbox = ({ checked, onChange, disabled, name, rounded, variant = 'default' }) => {
21
- const ref = (0, react_1.useRef)(null);
16
+ const Checkbox = ({ checked, onChange, disabled, name, variant = 'default' }) => {
22
17
  const size = SIZES[variant];
23
- const bulletSize = BULLET_SIZES[variant];
24
18
  const checkmarkSize = CHECKMARK_SIZES[variant];
25
19
  const background = (0, react_1.useMemo)(() => ({
26
20
  height: size,
27
21
  width: size,
28
22
  position: 'relative',
29
23
  }), [size]);
30
- const bullet = (0, react_1.useMemo)(() => ({
31
- width: bulletSize,
32
- height: bulletSize,
33
- backgroundColor: colors_1.WHITE,
34
- borderRadius: '50%',
35
- }), [bulletSize]);
36
24
  const box = (0, react_1.useMemo)(() => ({
37
25
  display: 'flex',
38
26
  justifyContent: 'center',
@@ -58,13 +46,8 @@ const Checkbox = ({ checked, onChange, disabled, name, rounded, variant = 'defau
58
46
  margin: 0,
59
47
  };
60
48
  }, [disabled, size]);
61
- (0, react_1.useEffect)(() => {
62
- if (ref.current) {
63
- ref.current.style.setProperty('border-radius', rounded ? '50%' : '0%', 'important');
64
- }
65
- }, [rounded]);
66
49
  return (jsx_runtime_1.jsxs("div", { style: background, children: [
67
- jsx_runtime_1.jsx("input", { ref: ref, style: input, type: 'checkbox', checked: checked, onChange: onChange, disabled: disabled, name: name }), jsx_runtime_1.jsx("div", { style: box, children: checked ? (rounded ? (jsx_runtime_1.jsx("div", { style: bullet })) : (jsx_runtime_1.jsx(Checkmark_1.Checkmark, { size: checkmarkSize }))) : null })
50
+ jsx_runtime_1.jsx("input", { style: input, type: 'checkbox', checked: checked, onChange: onChange, disabled: disabled, name: name }), jsx_runtime_1.jsx("div", { style: box, children: checked ? jsx_runtime_1.jsx(Checkmark_1.Checkmark, { size: checkmarkSize }) : null })
68
51
  ] }));
69
52
  };
70
53
  exports.Checkbox = Checkbox;
@@ -227,9 +227,12 @@ const CompositionSelector = () => {
227
227
  signal: controller.signal,
228
228
  symbolicatedStack: (0, studio_shared_1.compositionDragDataToSymbolicatedStack)(compositionDragData),
229
229
  });
230
- notification.replaceContent(result.success
231
- ? `Moved ${compositionDragData.compositionId} outside of folder`
232
- : result.reason, result.success ? 2000 : 4000);
230
+ if (result.success) {
231
+ notification.dismiss();
232
+ }
233
+ else {
234
+ notification.replaceContent(result.reason, 4000);
235
+ }
233
236
  }
234
237
  catch (err) {
235
238
  notification.replaceContent(err instanceof Error ? err.message : String(err), 4000);
@@ -7,7 +7,6 @@ const studio_shared_1 = require("@remotion/studio-shared");
7
7
  const react_1 = require("react");
8
8
  const client_id_1 = require("../helpers/client-id");
9
9
  const colors_1 = require("../helpers/colors");
10
- const get_folder_id_1 = require("../helpers/get-folder-id");
11
10
  const noop_1 = require("../helpers/noop");
12
11
  const sidebar_scroll_into_view_1 = require("../helpers/sidebar-scroll-into-view");
13
12
  const folder_1 = require("../icons/folder");
@@ -33,11 +32,12 @@ const itemStyle = {
33
32
  cursor: 'default',
34
33
  alignItems: 'center',
35
34
  marginBottom: 1,
36
- marginLeft: 4,
35
+ marginLeft: 8,
36
+ marginRight: 4,
37
37
  appearance: 'none',
38
38
  border: 'none',
39
39
  borderRadius: 4,
40
- width: 'calc(100% - 4px)',
40
+ width: 'calc(100% - 12px)',
41
41
  textAlign: 'left',
42
42
  backgroundColor: colors_1.BACKGROUND,
43
43
  height: layout_1.COMPACT_CONTROL_ROW_HEIGHT,
@@ -223,10 +223,6 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
223
223
  if (isAlreadyDirectChild) {
224
224
  return;
225
225
  }
226
- const folderId = (0, get_folder_id_1.getFolderId)({
227
- folderName: item.folderName,
228
- parentName: item.parentName,
229
- });
230
226
  const notification = (0, NotificationCenter_1.showNotification)(`Moving ${compositionDragData.compositionId}...`, null);
231
227
  const controller = new AbortController();
232
228
  try {
@@ -241,9 +237,12 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
241
237
  signal: controller.signal,
242
238
  symbolicatedStack: (0, studio_shared_1.compositionDragDataToSymbolicatedStack)(compositionDragData),
243
239
  });
244
- notification.replaceContent(result.success
245
- ? `Moved ${compositionDragData.compositionId} to ${folderId}`
246
- : result.reason, result.success ? 2000 : 4000);
240
+ if (result.success) {
241
+ notification.dismiss();
242
+ }
243
+ else {
244
+ notification.replaceContent(result.reason, 4000);
245
+ }
247
246
  if (result.success && !item.expanded) {
248
247
  toggleFolder(item.folderName, item.parentName);
249
248
  }
@@ -0,0 +1,17 @@
1
+ export declare const booleanOptions: readonly [{
2
+ readonly label: "Enabled";
3
+ readonly value: true;
4
+ }, {
5
+ readonly label: "Disabled";
6
+ readonly value: false;
7
+ }];
8
+ export declare const ConfigSelect: <T extends string | boolean>({ defaultLabel, name, onChange, options, value, }: {
9
+ readonly defaultLabel: string;
10
+ readonly name: string;
11
+ readonly onChange: (value: T | null) => void;
12
+ readonly options: readonly {
13
+ label: string;
14
+ value: T;
15
+ }[];
16
+ readonly value: T | null;
17
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigSelect = exports.booleanOptions = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const Checkmark_1 = require("../icons/Checkmark");
6
+ const ComboBox_1 = require("./NewComposition/ComboBox");
7
+ const layout_1 = require("./RenderModal/layout");
8
+ const DEFAULT_VALUE = 'studio-default';
9
+ const controlWidth = {
10
+ boxSizing: 'border-box',
11
+ width: 180,
12
+ };
13
+ exports.booleanOptions = [
14
+ { label: 'Enabled', value: true },
15
+ { label: 'Disabled', value: false },
16
+ ];
17
+ const ConfigSelect = ({ defaultLabel, name, onChange, options, value, }) => {
18
+ const values = [
19
+ {
20
+ id: DEFAULT_VALUE,
21
+ keyHint: null,
22
+ label: `Default (${defaultLabel})`,
23
+ leftItem: value === null ? jsx_runtime_1.jsx(Checkmark_1.Checkmark, {}) : null,
24
+ onClick: () => onChange(null),
25
+ quickSwitcherLabel: null,
26
+ subMenu: null,
27
+ type: 'item',
28
+ value: DEFAULT_VALUE,
29
+ },
30
+ { id: `${DEFAULT_VALUE}-divider`, type: 'divider' },
31
+ ...options.map((option) => {
32
+ const id = `${name}-${String(option.value)}`;
33
+ return {
34
+ id,
35
+ keyHint: null,
36
+ label: option.label,
37
+ leftItem: value === option.value ? jsx_runtime_1.jsx(Checkmark_1.Checkmark, {}) : null,
38
+ onClick: () => onChange(option.value),
39
+ quickSwitcherLabel: null,
40
+ subMenu: null,
41
+ type: 'item',
42
+ value: id,
43
+ };
44
+ }),
45
+ ];
46
+ return (jsx_runtime_1.jsxs("div", { style: layout_1.optionRow, children: [
47
+ jsx_runtime_1.jsx("div", { style: layout_1.label, children: name }), jsx_runtime_1.jsx("div", { style: layout_1.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: values, selectedId: value === null ? DEFAULT_VALUE : `${name}-${String(value)}`, style: controlWidth, title: name }) })
48
+ ] }));
49
+ };
50
+ exports.ConfigSelect = ConfigSelect;