@remotion/studio 4.0.524 → 4.0.526

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 (230) hide show
  1. package/dist/api/focus-default-props-path.js +7 -1
  2. package/dist/api/restart-studio.d.ts +1 -1
  3. package/dist/api/restart-studio.js +1 -1
  4. package/dist/components/ActionTooltip.d.ts +2 -0
  5. package/dist/components/ActionTooltip.js +14 -4
  6. package/dist/components/AgentPrompt.d.ts +6 -0
  7. package/dist/components/AgentPrompt.js +107 -0
  8. package/dist/components/AppLaunchButton.js +2 -0
  9. package/dist/components/AssetFileIcon.js +2 -0
  10. package/dist/components/AssetSelectorItem.d.ts +1 -23
  11. package/dist/components/AssetSelectorItem.js +10 -200
  12. package/dist/components/AssetSelectorModal.d.ts +6 -0
  13. package/dist/components/AssetSelectorModal.js +174 -0
  14. package/dist/components/Canvas.js +21 -4
  15. package/dist/components/CaptionInspector.js +9 -3
  16. package/dist/components/CheckboardToggle.js +2 -1
  17. package/dist/{error-overlay/remotion-overlay → components}/CodeFrame.d.ts +2 -0
  18. package/dist/components/CodeFrame.js +77 -0
  19. package/dist/components/ColorPicker/AlphaSlider.js +1 -1
  20. package/dist/components/ColorPicker/HueSlider.js +1 -1
  21. package/dist/components/ColorPicker/SaturationValueArea.js +1 -1
  22. package/dist/components/CompositionSelector.js +1 -0
  23. package/dist/components/CompositionSelectorItem.js +7 -17
  24. package/dist/components/CurrentAsset.js +5 -4
  25. package/dist/components/EditorGuides/Guide.js +1 -1
  26. package/dist/components/ElementInstallConfirmation.js +100 -61
  27. package/dist/components/FilePreview.js +4 -0
  28. package/dist/components/FixComputedValueModal.js +64 -96
  29. package/dist/components/FullscreenToggle.js +1 -1
  30. package/dist/components/GenerateWithAgentModal.d.ts +9 -0
  31. package/dist/components/GenerateWithAgentModal.js +39 -0
  32. package/dist/components/GlobalKeybindings.js +14 -0
  33. package/dist/components/InlineEditableTitle.js +2 -0
  34. package/dist/components/InspectorLocationCopy.js +1 -1
  35. package/dist/components/InspectorOpenInEditor.d.ts +1 -0
  36. package/dist/components/InspectorOpenInEditor.js +25 -18
  37. package/dist/components/InspectorPanel/CollapsibleInspectorSection.d.ts +7 -0
  38. package/dist/components/InspectorPanel/CollapsibleInspectorSection.js +14 -0
  39. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.d.ts +1 -1
  40. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +19 -8
  41. package/dist/components/InspectorPanel/CompositionInspector.js +30 -13
  42. package/dist/components/InspectorPanel/CompositionInspectorHeader.js +6 -7
  43. package/dist/components/InspectorPanel/CompositionMetadata.js +4 -0
  44. package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +6 -12
  45. package/dist/components/InspectorPanel/ElementLibraryButton.js +2 -0
  46. package/dist/components/InspectorPanel/GuideInspector.js +2 -3
  47. package/dist/components/InspectorPanel/KeyframeSettings.js +5 -6
  48. package/dist/components/InspectorPanel/MultiSequenceInspector.js +2 -1
  49. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +4 -12
  50. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +4 -3
  51. package/dist/components/InspectorPanel/common.d.ts +4 -0
  52. package/dist/components/InspectorPanel/common.js +14 -2
  53. package/dist/components/InspectorPanel/styles.d.ts +0 -3
  54. package/dist/components/InspectorPanel/styles.js +1 -27
  55. package/dist/components/InspectorPanel/use-composition-actions.d.ts +2 -0
  56. package/dist/components/InspectorPanel/use-composition-actions.js +15 -0
  57. package/dist/components/InspectorPanel/use-inspector-section-expanded.d.ts +1 -0
  58. package/dist/components/InspectorPanel/use-inspector-section-expanded.js +21 -0
  59. package/dist/components/InspectorSequenceSection.js +61 -43
  60. package/dist/components/InspectorSourceLocation.js +1 -0
  61. package/dist/components/KeyboardShortcutsSettings.js +12 -4
  62. package/dist/components/LoopToggle.js +2 -1
  63. package/dist/components/LutPreview.d.ts +4 -0
  64. package/dist/components/LutPreview.js +192 -0
  65. package/dist/components/Menu/MenuItem.js +1 -2
  66. package/dist/components/MenuBuildIndicator.js +1 -1
  67. package/dist/components/MenuCompositionName.js +4 -9
  68. package/dist/components/Modals.js +4 -6
  69. package/dist/components/ModelsSettings.js +15 -4
  70. package/dist/components/MuteToggle.js +2 -1
  71. package/dist/components/NewComposition/CodemodFooter.js +1 -0
  72. package/dist/components/NewComposition/DeleteComposition.js +42 -6
  73. package/dist/components/NewComposition/DeleteFolder.js +1 -0
  74. package/dist/components/NewComposition/DuplicateComposition.js +5 -0
  75. package/dist/components/NewComposition/InputDragger.js +2 -2
  76. package/dist/components/NewComposition/NewFolder.js +29 -2
  77. package/dist/components/NewComposition/RenameFolder.js +1 -0
  78. package/dist/components/NewComposition/duplicate-composition-api.d.ts +3 -2
  79. package/dist/components/NewComposition/duplicate-composition-api.js +9 -2
  80. package/dist/components/OutlineToggle.js +2 -1
  81. package/dist/components/PlayPause.js +1 -1
  82. package/dist/components/Preview.js +0 -3
  83. package/dist/components/PreviewToolbar.js +3 -6
  84. package/dist/components/PreviewToolbarOverflowButton.js +2 -1
  85. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -1
  86. package/dist/components/QuickSwitcher/QuickSwitcherResult.js +4 -9
  87. package/dist/components/RenderButton.js +40 -4
  88. package/dist/components/RenderModal/SchemaEditor/scroll-to-default-props-path.d.ts +1 -0
  89. package/dist/components/RenderModal/SchemaEditor/scroll-to-default-props-path.js +2 -1
  90. package/dist/components/RenderModal/WebRenderModal.js +10 -2
  91. package/dist/components/RenderModal/WebRenderModalBasic.js +1 -1
  92. package/dist/components/RenderModal/render-modals.js +3 -0
  93. package/dist/components/RenderQueue/RenderQueueCopyToClipboard.js +1 -1
  94. package/dist/components/RenderQueue/RenderQueueItemCancelButton.js +1 -1
  95. package/dist/components/RenderQueue/actions.d.ts +2 -1
  96. package/dist/components/RenderQueue/actions.js +2 -1
  97. package/dist/components/RendersTab.js +2 -0
  98. package/dist/components/RulersAndGuidesToggle.js +2 -1
  99. package/dist/components/SegmentedButton.d.ts +1 -0
  100. package/dist/components/SegmentedButton.js +9 -3
  101. package/dist/components/SelectedOutlineElement.js +22 -6
  102. package/dist/components/SelectedOutlinePolygon.js +4 -2
  103. package/dist/components/SettingsButton.js +11 -2
  104. package/dist/components/SettingsContext.d.ts +8 -0
  105. package/dist/components/SettingsContext.js +57 -2
  106. package/dist/components/SettingsModal.d.ts +1 -2
  107. package/dist/components/SettingsModal.js +27 -6
  108. package/dist/components/SettingsModalFooter.js +17 -3
  109. package/dist/components/SidebarCollapserControls.js +1 -1
  110. package/dist/components/SkillsSettings.d.ts +5 -0
  111. package/dist/components/SkillsSettings.js +49 -15
  112. package/dist/components/SnappingToggle.js +2 -1
  113. package/dist/components/Splitter/SplitterHandle.js +1 -2
  114. package/dist/components/Tabs/vertical.d.ts +1 -1
  115. package/dist/components/Tabs/vertical.js +16 -2
  116. package/dist/components/Timeline/EasingEditorModal.js +2 -2
  117. package/dist/components/Timeline/Timeline.js +10 -11
  118. package/dist/components/Timeline/TimelineAssetField.js +178 -9
  119. package/dist/components/Timeline/TimelineDragHandler.js +1 -2
  120. package/dist/components/Timeline/TimelineEffectItem.d.ts +1 -0
  121. package/dist/components/Timeline/TimelineEffectItem.js +2 -2
  122. package/dist/components/Timeline/TimelineEffectPropItem.d.ts +1 -0
  123. package/dist/components/Timeline/TimelineEffectPropItem.js +2 -2
  124. package/dist/components/Timeline/TimelineExpandedRow.js +2 -2
  125. package/dist/components/Timeline/TimelineHeightContainer.js +11 -1
  126. package/dist/components/Timeline/TimelineInOutDragHandler.js +1 -2
  127. package/dist/components/Timeline/TimelineKeyframeControls.js +15 -1
  128. package/dist/components/Timeline/TimelineLayerChildren.d.ts +3 -3
  129. package/dist/components/Timeline/TimelineLayerChildren.js +11 -9
  130. package/dist/components/Timeline/TimelineLayerEye.d.ts +1 -1
  131. package/dist/components/Timeline/TimelineLayerEye.js +6 -3
  132. package/dist/components/Timeline/TimelineList.js +9 -3
  133. package/dist/components/Timeline/TimelineSchemaField.js +10 -7
  134. package/dist/components/Timeline/TimelineSelection.d.ts +17 -4
  135. package/dist/components/Timeline/TimelineSelection.js +121 -52
  136. package/dist/components/Timeline/TimelineSequence.js +8 -8
  137. package/dist/components/Timeline/TimelineSequenceItem.d.ts +2 -0
  138. package/dist/components/Timeline/TimelineSequenceItem.js +29 -23
  139. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +3 -12
  140. package/dist/components/Timeline/TimelineTranslateField.js +25 -12
  141. package/dist/components/Timeline/TimelineVirtualization.d.ts +3 -3
  142. package/dist/components/Timeline/TimelineZoomControls.js +1 -1
  143. package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +3 -1
  144. package/dist/components/Timeline/get-sequence-context-menu-items.js +152 -51
  145. package/dist/components/Timeline/normalize-font-weight-for-keyframe.d.ts +1 -0
  146. package/dist/components/Timeline/normalize-font-weight-for-keyframe.js +19 -0
  147. package/dist/components/Timeline/timeline-display-groups.d.ts +9 -0
  148. package/dist/components/Timeline/timeline-display-groups.js +66 -0
  149. package/dist/components/Timeline/timeline-field-display-utils.js +4 -2
  150. package/dist/components/Timeline/timeline-translate-utils.d.ts +17 -0
  151. package/dist/components/Timeline/timeline-translate-utils.js +53 -12
  152. package/dist/components/Timeline/use-open-sequence-in-apps.d.ts +2 -0
  153. package/dist/components/Timeline/use-open-sequence-in-apps.js +17 -0
  154. package/dist/components/Timeline/use-timeline-asset-drop.js +20 -6
  155. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +2 -1
  156. package/dist/components/Timeline/use-timeline-expanded-tree.js +1 -2
  157. package/dist/components/Timeline/use-timeline-keyframe-drag.js +4 -4
  158. package/dist/components/TimelineCombobox.js +1 -0
  159. package/dist/components/UndoRedoButtons.js +11 -0
  160. package/dist/components/UpdateStatusContext.d.ts +2 -2
  161. package/dist/components/UpdateStatusContext.js +6 -7
  162. package/dist/components/UpdatesSettings.js +6 -6
  163. package/dist/components/WebMcp.js +40 -41
  164. package/dist/components/asset-context-menu.d.ts +32 -0
  165. package/dist/components/asset-context-menu.js +242 -0
  166. package/dist/components/composition-menu-items.d.ts +4 -6
  167. package/dist/components/composition-menu-items.js +212 -42
  168. package/dist/components/folder-menu-items.js +44 -0
  169. package/dist/components/get-open-in-menu-items.d.ts +6 -5
  170. package/dist/components/get-open-in-menu-items.js +16 -10
  171. package/dist/components/import-assets.d.ts +24 -1
  172. package/dist/components/import-assets.js +3 -1
  173. package/dist/components/keyboard-shortcuts.d.ts +4 -4
  174. package/dist/components/keyboard-shortcuts.js +5 -0
  175. package/dist/components/selected-outline-order.js +18 -12
  176. package/dist/components/use-open-in-menu-apps.d.ts +14 -0
  177. package/dist/components/use-open-in-menu-apps.js +33 -0
  178. package/dist/error-overlay/remotion-overlay/ErrorDisplay.js +2 -2
  179. package/dist/error-overlay/remotion-overlay/OpenInEditor.d.ts +1 -0
  180. package/dist/error-overlay/remotion-overlay/OpenInEditor.js +3 -3
  181. package/dist/error-overlay/remotion-overlay/StackFrame.d.ts +5 -1
  182. package/dist/error-overlay/remotion-overlay/StackFrame.js +26 -19
  183. package/dist/esm/{LazyModels-hc33szyn.mjs → LazyModels-mtggyjye.mjs} +3 -3
  184. package/dist/esm/{LazyModels-sg40rjw6.mjs → LazyModels-nk7py0zt.mjs} +3 -3
  185. package/dist/esm/{TranscriptionModal-3ctnxpt6.mjs → TranscriptionModal-ymnx1c7m.mjs} +6 -6
  186. package/dist/esm/{VideoMattingModal-b0r7e60n.mjs → VideoMattingModal-05vpczks.mjs} +6 -6
  187. package/dist/esm/{index-er3mh6em.mjs → index-0gewwxse.mjs} +7031 -5834
  188. package/dist/esm/{index-q5xv20xx.mjs → index-4dsz9035.mjs} +8 -8
  189. package/dist/esm/{index-wbmp5srk.mjs → index-5bfxbpca.mjs} +1 -1
  190. package/dist/esm/{index-e3zwf3e7.mjs → index-5gd8k9yv.mjs} +1 -1
  191. package/dist/esm/{index-c37kme2v.mjs → index-bs39wngg.mjs} +4929 -3801
  192. package/dist/esm/{index-yfrysr5f.mjs → index-cdy8v54v.mjs} +17 -3
  193. package/dist/esm/{index-9qtvmwtx.mjs → index-eb5txqp6.mjs} +12 -9
  194. package/dist/esm/{index-q2epbw93.mjs → index-f97r9e2g.mjs} +4 -21
  195. package/dist/esm/{index-2j3d1g81.mjs → index-g7k2dvar.mjs} +1 -1
  196. package/dist/esm/{index-1b9skrrd.mjs → index-x40wwfmt.mjs} +3 -3
  197. package/dist/esm/index.mjs +12 -6
  198. package/dist/esm/internals.mjs +7 -7
  199. package/dist/esm/previewEntry.mjs +7 -7
  200. package/dist/helpers/client-id.d.ts +1 -0
  201. package/dist/helpers/client-id.js +8 -4
  202. package/dist/helpers/cube-lut.d.ts +12 -0
  203. package/dist/helpers/cube-lut.js +160 -0
  204. package/dist/helpers/get-git-menu-item.d.ts +4 -0
  205. package/dist/helpers/get-git-menu-item.js +8 -1
  206. package/dist/helpers/get-preview-file-type.d.ts +1 -1
  207. package/dist/helpers/get-preview-file-type.js +3 -0
  208. package/dist/helpers/get-sequence-double-click-action.d.ts +3 -3
  209. package/dist/helpers/get-sequence-double-click-action.js +2 -2
  210. package/dist/helpers/open-in-editor.d.ts +5 -2
  211. package/dist/helpers/open-in-editor.js +12 -4
  212. package/dist/helpers/pointer-session.d.ts +1 -0
  213. package/dist/helpers/pointer-session.js +10 -1
  214. package/dist/helpers/settings-tab-availability.d.ts +14 -0
  215. package/dist/helpers/settings-tab-availability.js +35 -0
  216. package/dist/helpers/studio-runtime-config.d.ts +1 -1
  217. package/dist/helpers/use-create-composition.js +5 -0
  218. package/dist/helpers/use-keybinding.d.ts +1 -1
  219. package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -2
  220. package/dist/helpers/use-media-metadata.js +5 -1
  221. package/dist/helpers/use-menu-structure.js +21 -13
  222. package/dist/helpers/use-rename-composition.js +6 -1
  223. package/dist/icons/lut.d.ts +4 -0
  224. package/dist/icons/lut.js +6 -0
  225. package/dist/icons/sparkles.d.ts +4 -0
  226. package/dist/icons/sparkles.js +6 -0
  227. package/dist/state/modals.d.ts +25 -3
  228. package/dist/state/z-index.js +1 -3
  229. package/package.json +19 -19
  230. package/dist/error-overlay/remotion-overlay/CodeFrame.js +0 -62
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.openCompositionComponentInEditor = exports.preloadCompositionComponentInfo = exports.loadCompositionComponentInfo = exports.useCachedCompositionComponentInfo = exports.getCachedCompositionComponentInfo = exports.subscribeToCompositionComponentInfo = exports.openOriginalPositionInEditorAtProperty = exports.openOriginalPositionInEditor = exports.openInGitClient = exports.openInTerminal = exports.openInCodingAgent = exports.openInEditor = void 0;
36
+ exports.openCompositionComponentInEditor = exports.preloadCompositionComponentInfo = exports.loadCompositionComponentInfo = exports.useCachedCompositionComponentInfo = exports.getCachedCompositionComponentInfo = exports.subscribeToCompositionComponentInfo = exports.openOriginalPositionInEditorAtProperty = exports.findOriginalPositionInFileAtProperty = exports.openOriginalPositionInEditor = exports.openInGitClient = exports.openInTerminal = exports.openInCodingAgent = exports.openInEditor = void 0;
37
37
  const react_1 = require("react");
38
38
  const call_api_1 = require("../components/call-api");
39
39
  const get_stack_1 = require("../components/Timeline/TimelineStack/get-stack");
@@ -78,7 +78,7 @@ const openOriginalPositionInEditor = async (originalPosition, editorId) => {
78
78
  }
79
79
  };
80
80
  exports.openOriginalPositionInEditor = openOriginalPositionInEditor;
81
- const openOriginalPositionInEditorAtProperty = async ({ editorId, originalPosition, property, }) => {
81
+ const findOriginalPositionInFileAtProperty = async ({ originalPosition, property, }) => {
82
82
  const request = {
83
83
  fileName: originalPosition.source,
84
84
  lineNumber: originalPosition.line,
@@ -89,11 +89,19 @@ const openOriginalPositionInEditorAtProperty = async ({ editorId, originalPositi
89
89
  const position = browserStudioOperations
90
90
  ? await browserStudioOperations.findInFile(request)
91
91
  : await (0, call_api_1.callApi)('/api/find-in-file', request);
92
- await (0, exports.openOriginalPositionInEditor)({
92
+ return {
93
93
  source: originalPosition.source,
94
94
  line: position.lineNumber,
95
95
  column: position.columnNumber,
96
- }, editorId);
96
+ };
97
+ };
98
+ exports.findOriginalPositionInFileAtProperty = findOriginalPositionInFileAtProperty;
99
+ const openOriginalPositionInEditorAtProperty = async ({ editorId, originalPosition, property, }) => {
100
+ const position = await (0, exports.findOriginalPositionInFileAtProperty)({
101
+ originalPosition,
102
+ property,
103
+ });
104
+ await (0, exports.openOriginalPositionInEditor)(position, editorId);
97
105
  };
98
106
  exports.openOriginalPositionInEditorAtProperty = openOriginalPositionInEditorAtProperty;
99
107
  const componentResolutionCache = new Map();
@@ -1,4 +1,5 @@
1
1
  export type PointerSessionEndReason = 'pointerup' | 'pointercancel' | 'lostpointercapture' | 'blur' | 'visibilitychange' | 'buttons-released' | 'manual';
2
+ export declare const isPointerSessionRelease: (reason: PointerSessionEndReason, event: PointerEvent | null) => event is PointerEvent;
2
3
  type PointerSessionEvent = Pick<PointerEvent, 'button' | 'pointerId'>;
3
4
  export declare const startCapturedPointerSession: ({ event, captureTarget, onMove, onEnd, }: {
4
5
  event: PointerSessionEvent;
@@ -1,6 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.observePointerRelease = exports.startDeferredCapturedPointerSession = exports.startCapturedPointerSession = void 0;
3
+ exports.observePointerRelease = exports.startDeferredCapturedPointerSession = exports.startCapturedPointerSession = exports.isPointerSessionRelease = void 0;
4
+ const isPointerSessionRelease = (reason, event) => {
5
+ if (event === null) {
6
+ return false;
7
+ }
8
+ return (reason === 'pointerup' ||
9
+ reason === 'buttons-released' ||
10
+ (reason === 'lostpointercapture' && event.buttons === 0));
11
+ };
12
+ exports.isPointerSessionRelease = isPointerSessionRelease;
4
13
  const getButtonMask = (button) => {
5
14
  if (button === 0) {
6
15
  return 1;
@@ -0,0 +1,14 @@
1
+ export type SettingsTab = 'apps' | 'rendering' | 'studio' | 'packages' | 'models' | 'shortcuts' | 'skills' | 'license' | 'updates';
2
+ type StudioMode = {
3
+ readonly isBrowserStudio: boolean;
4
+ readonly previewServerConnected: boolean;
5
+ readonly readOnlyStudio: boolean;
6
+ };
7
+ export declare const canEditStudioConfig: ({ isBrowserStudio, previewServerConnected, readOnlyStudio, }: StudioMode) => boolean;
8
+ export declare const canInstallPackagesInStudio: (studioMode: StudioMode) => boolean;
9
+ export declare const getAvailableSettingsTabs: ({ isBrowserStudio, packageManagerAvailable, previewServerConnected, readOnlyStudio, showUpdates, }: StudioMode & {
10
+ readonly packageManagerAvailable: boolean;
11
+ readonly showUpdates: boolean;
12
+ }) => SettingsTab[];
13
+ export declare const getSafeSettingsTab: (requestedTab: SettingsTab, availableTabs: readonly SettingsTab[]) => SettingsTab;
14
+ export {};
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSafeSettingsTab = exports.getAvailableSettingsTabs = exports.canInstallPackagesInStudio = exports.canEditStudioConfig = void 0;
4
+ const canEditStudioConfig = ({ isBrowserStudio, previewServerConnected, readOnlyStudio, }) => {
5
+ return previewServerConnected && !readOnlyStudio && !isBrowserStudio;
6
+ };
7
+ exports.canEditStudioConfig = canEditStudioConfig;
8
+ const canInstallPackagesInStudio = (studioMode) => {
9
+ return studioMode.isBrowserStudio || (0, exports.canEditStudioConfig)(studioMode);
10
+ };
11
+ exports.canInstallPackagesInStudio = canInstallPackagesInStudio;
12
+ const getAvailableSettingsTabs = ({ isBrowserStudio, packageManagerAvailable, previewServerConnected, readOnlyStudio, showUpdates, }) => {
13
+ const studioMode = {
14
+ isBrowserStudio,
15
+ previewServerConnected,
16
+ readOnlyStudio,
17
+ };
18
+ const canEditConfig = (0, exports.canEditStudioConfig)(studioMode);
19
+ const canInstallPackages = (0, exports.canInstallPackagesInStudio)(studioMode) &&
20
+ (isBrowserStudio || packageManagerAvailable);
21
+ return [
22
+ ...(canEditConfig ? ['studio', 'rendering'] : []),
23
+ 'shortcuts',
24
+ ...(canInstallPackages ? ['packages'] : []),
25
+ ...(canEditConfig ? ['skills'] : []),
26
+ ...(isBrowserStudio || !readOnlyStudio ? ['models'] : []),
27
+ ...(canEditConfig ? ['apps', 'license'] : []),
28
+ ...(showUpdates ? ['updates'] : []),
29
+ ];
30
+ };
31
+ exports.getAvailableSettingsTabs = getAvailableSettingsTabs;
32
+ const getSafeSettingsTab = (requestedTab, availableTabs) => {
33
+ return availableTabs.includes(requestedTab) ? requestedTab : 'shortcuts';
34
+ };
35
+ exports.getSafeSettingsTab = getSafeSettingsTab;
@@ -2,6 +2,6 @@ export declare const DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS = 300;
2
2
  export declare const getStudioAskAIEnabled: () => boolean;
3
3
  export declare const getStudioInteractivityEnabled: () => boolean;
4
4
  export declare const getStudioKeyboardShortcutsEnabled: () => boolean;
5
- export declare const getStudioKeyboardShortcuts: () => Partial<Record<"askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut", import("@remotion/studio-shared").StudioKeyboardShortcutValue>> | null;
5
+ export declare const getStudioKeyboardShortcuts: () => Partial<Record<"askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut", import("@remotion/studio-shared").StudioKeyboardShortcutValue>> | null;
6
6
  export declare const getStudioMaxTimelineTracks: () => number | null;
7
7
  export declare const getStudioBufferStateDelayInMilliseconds: () => number;
@@ -5,6 +5,7 @@ const react_1 = require("react");
5
5
  const InitialCompositionLoader_1 = require("../components/InitialCompositionLoader");
6
6
  const actions_1 = require("../components/RenderQueue/actions");
7
7
  const slugify_name_1 = require("./slugify-name");
8
+ const url_state_1 = require("./url-state");
8
9
  const validate_new_comp_data_1 = require("./validate-new-comp-data");
9
10
  const toPascalCase = (value) => {
10
11
  var _a;
@@ -89,6 +90,10 @@ const useCreateComposition = ({ compositions, durationInFrames, folderName, newI
89
90
  dryRun: false,
90
91
  signal,
91
92
  symbolicatedStack,
93
+ undoRedoNavigation: {
94
+ undoRoute: (0, url_state_1.getRoute)(),
95
+ redoRoute: `/${compositionId}`,
96
+ },
92
97
  });
93
98
  if (result.success) {
94
99
  selectComposition({
@@ -8,7 +8,7 @@ export declare const useKeybinding: () => {
8
8
  triggerIfInputFieldFocused: boolean;
9
9
  keepRegisteredWhenNotHighestContext: boolean;
10
10
  } & ({
11
- action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut";
11
+ action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut";
12
12
  key?: undefined;
13
13
  commandCtrlKey?: undefined;
14
14
  } | {
@@ -1,2 +1,2 @@
1
- export declare const useKeyboardShortcutLabel: (action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut") => string;
2
- export declare const useKeyboardShortcutAriaKeyShortcuts: (action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut") => string;
1
+ export declare const useKeyboardShortcutLabel: (action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut") => string;
2
+ export declare const useKeyboardShortcutAriaKeyShortcuts: (action: "askAI" | "clearInOutPoints" | "copyEffectsAndValues" | "cutEffects" | "deleteSelection" | "duplicateSequences" | "enterFullscreen" | "goToFrame" | "jumpToBeginning" | "jumpToEnd" | "nextComposition" | "pauseAndReturnToPlaybackStart" | "pausePlayback" | "pickColor" | "playForward" | "playPause" | "previousComposition" | "quickSwitcher" | "redo" | "render" | "resetZoom" | "reversePlayback" | "selectAllSequenceRows" | "selectOpacityProp" | "selectRotateProp" | "selectScaleProp" | "selectTranslateProp" | "setInPoint" | "setOutPoint" | "showKeyboardShortcuts" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut") => string;
@@ -42,7 +42,11 @@ const getMediabunnyMetadata = async (src) => {
42
42
  create: () => {
43
43
  const createdInput = new mediabunny_1.Input({
44
44
  formats: mediabunny_1.ALL_FORMATS,
45
- source: new mediabunny_1.UrlSource(src),
45
+ source: new mediabunny_1.UrlSource(src, {
46
+ handleUnhandledError: (error) => {
47
+ remotion_1.Internals.Log.warn({ logLevel: 'info', tag: '@remotion/studio' }, `A speculative fetch for "${src}" failed:`, error);
48
+ },
49
+ }),
46
50
  });
47
51
  return {
48
52
  resource: createdInput,
@@ -14,7 +14,7 @@ const actions_1 = require("../components/RenderQueue/actions");
14
14
  const SizeSelector_1 = require("../components/SizeSelector");
15
15
  const use_resolved_stack_1 = require("../components/Timeline/use-resolved-stack");
16
16
  const TimelineInOutToggle_1 = require("../components/TimelineInOutToggle");
17
- const use_default_editor_info_1 = require("../components/use-default-editor-info");
17
+ const use_open_in_menu_apps_1 = require("../components/use-open-in-menu-apps");
18
18
  const Checkmark_1 = require("../icons/Checkmark");
19
19
  const canvas_ref_1 = require("../state/canvas-ref");
20
20
  const checkerboard_1 = require("../state/checkerboard");
@@ -27,13 +27,13 @@ const modals_1 = require("../state/modals");
27
27
  const sidebar_1 = require("../state/sidebar");
28
28
  const browser_studio_operations_1 = require("./browser-studio-operations");
29
29
  const check_fullscreen_support_1 = require("./check-fullscreen-support");
30
- const client_id_1 = require("./client-id");
31
30
  const colors_1 = require("./colors");
32
31
  const get_file_manager_name_1 = require("./get-file-manager-name");
33
32
  const get_git_menu_item_1 = require("./get-git-menu-item");
34
33
  const mobile_layout_1 = require("./mobile-layout");
35
34
  const open_in_editor_1 = require("./open-in-editor");
36
35
  const pick_color_1 = require("./pick-color");
36
+ const settings_tab_availability_1 = require("./settings-tab-availability");
37
37
  const studio_runtime_config_1 = require("./studio-runtime-config");
38
38
  const use_keybinding_1 = require("./use-keybinding");
39
39
  const use_keyboard_shortcut_label_1 = require("./use-keyboard-shortcut-label");
@@ -243,8 +243,8 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
243
243
  const { editorSnapping, setEditorSnapping } = (0, react_1.useContext)(editor_snapping_1.EditorSnappingContext);
244
244
  const { size, setSize } = (0, react_1.useContext)(remotion_1.Internals.PreviewSizeContext);
245
245
  const { canvasContent, compositions } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
246
- const { type } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).previewServerState;
247
- const { defaultEditorId, defaultEditorName } = (0, use_default_editor_info_1.useEditorOpening)(type === 'connected');
246
+ const { connectionStatus: type, openInApps } = (0, use_open_in_menu_apps_1.useOpenInMenuApps)();
247
+ const { defaultEditorId, defaultEditorName } = openInApps;
248
248
  const keyboardShortcutsDisabled = (0, use_keybinding_1.areKeyboardShortcutsDisabled)();
249
249
  const resetZoomShortcut = (0, use_keyboard_shortcut_label_1.useKeyboardShortcutLabel)('resetZoom');
250
250
  const toggleSnappingShortcut = (0, use_keyboard_shortcut_label_1.useKeyboardShortcutLabel)('toggleSnapping');
@@ -256,6 +256,7 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
256
256
  const goToFrameShortcut = (0, use_keyboard_shortcut_label_1.useKeyboardShortcutLabel)('goToFrame');
257
257
  const renderShortcut = (0, use_keyboard_shortcut_label_1.useKeyboardShortcutLabel)('render');
258
258
  const askAIShortcut = (0, use_keyboard_shortcut_label_1.useKeyboardShortcutLabel)('askAI');
259
+ const colorPickerShortcut = (0, use_keyboard_shortcut_label_1.useKeyboardShortcutLabel)('pickColor');
259
260
  const showKeyboardShortcutsShortcut = (0, use_keyboard_shortcut_label_1.useKeyboardShortcutLabel)('showKeyboardShortcuts');
260
261
  const studioAskAIEnabled = (0, studio_runtime_config_1.getStudioAskAIEnabled)();
261
262
  const { setSidebarCollapsedState, sidebarCollapsedStateLeft, sidebarCollapsedStateRight, } = (0, react_1.useContext)(sidebar_1.SidebarContext);
@@ -263,6 +264,11 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
263
264
  const isFullscreenSupported = (0, check_fullscreen_support_1.checkFullscreenSupport)();
264
265
  const { remotion_packageManager } = window;
265
266
  const browserStudioOperations = (0, browser_studio_operations_1.getBrowserStudioOperations)();
267
+ const studioConfigEditable = (0, settings_tab_availability_1.canEditStudioConfig)({
268
+ isBrowserStudio: browserStudioOperations !== null,
269
+ previewServerConnected: type === 'connected',
270
+ readOnlyStudio,
271
+ });
266
272
  const sizePreselectIndex = sizes.findIndex((s) => String(size.size) === String(s.size));
267
273
  const mobileLayout = (0, mobile_layout_1.useMobileLayout)();
268
274
  const currentComposition = (0, react_1.useMemo)(() => {
@@ -329,7 +335,7 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
329
335
  closeMenu();
330
336
  setSelectedModal({
331
337
  type: 'settings',
332
- initialTab: browserStudioOperations === null ? 'studio' : 'shortcuts',
338
+ initialTab: studioConfigEditable ? 'studio' : 'shortcuts',
333
339
  initialPublicLicenseKey: (_b = (_a = window.remotion_renderDefaults) === null || _a === void 0 ? void 0 : _a.publicLicenseKey) !== null && _b !== void 0 ? _b : null,
334
340
  });
335
341
  },
@@ -338,8 +344,6 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
338
344
  leftItem: null,
339
345
  subMenu: null,
340
346
  quickSwitcherLabel: 'Settings...',
341
- disabled: (browserStudioOperations === null && readOnlyStudio) ||
342
- type !== 'connected',
343
347
  },
344
348
  {
345
349
  id: 'acknowledgements',
@@ -355,13 +359,13 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
355
359
  subMenu: null,
356
360
  quickSwitcherLabel: 'Help: Acknowledgements',
357
361
  },
358
- browserStudioOperations === null
362
+ studioConfigEditable
359
363
  ? {
360
364
  type: 'divider',
361
365
  id: 'timeline-divider-1',
362
366
  }
363
367
  : null,
364
- browserStudioOperations === null
368
+ studioConfigEditable
365
369
  ? {
366
370
  id: 'restart-studio',
367
371
  value: 'restart-studio',
@@ -779,9 +783,8 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
779
783
  closeMenu,
780
784
  composition: currentComposition,
781
785
  connectionStatus: type,
782
- editorId: defaultEditorId,
783
- editorName: defaultEditorName,
784
786
  includeCompositionManagementItems: true,
787
+ openInApps,
785
788
  resolvedLocation: resolvedCompositionLocation,
786
789
  setSelectedModal,
787
790
  readOnlyStudio,
@@ -823,7 +826,9 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
823
826
  (0, pick_color_1.pickColor)();
824
827
  },
825
828
  leftItem: null,
826
- keyHint: null,
829
+ keyHint: keyboardShortcutsDisabled
830
+ ? null
831
+ : colorPickerShortcut || null,
827
832
  subMenu: null,
828
833
  type: 'item',
829
834
  quickSwitcherLabel: 'Show Color Picker',
@@ -831,7 +836,7 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
831
836
  : null,
832
837
  !(0, browser_studio_operations_1.canInstallPackages)() ||
833
838
  (browserStudioOperations === null &&
834
- remotion_packageManager === 'unknown')
839
+ (remotion_packageManager === 'unknown' || type !== 'connected'))
835
840
  ? null
836
841
  : {
837
842
  id: 'install-packages',
@@ -1054,9 +1059,11 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
1054
1059
  mobileLayout,
1055
1060
  defaultEditorId,
1056
1061
  defaultEditorName,
1062
+ openInApps,
1057
1063
  keyboardShortcutsDisabled,
1058
1064
  studioAskAIEnabled,
1059
1065
  askAIShortcut,
1066
+ colorPickerShortcut,
1060
1067
  checkerboardShortcut,
1061
1068
  clearInOutPointsShortcut,
1062
1069
  goToFrameShortcut,
@@ -1068,6 +1075,7 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
1068
1075
  showKeyboardShortcutsShortcut,
1069
1076
  toggleSnappingShortcut,
1070
1077
  browserStudioOperations,
1078
+ studioConfigEditable,
1071
1079
  size.size,
1072
1080
  setSize,
1073
1081
  setEditorZoomGestures,
@@ -32,14 +32,19 @@ const useRenameComposition = ({ compositions, currentId, newId, }) => {
32
32
  }, [getCodemod, newId]);
33
33
  const valid = validationMessage === null && currentId !== compositionId;
34
34
  const renameComposition = (0, react_1.useCallback)(async ({ newCompositionId, signal, symbolicatedStack, }) => {
35
+ const nextCompositionId = (0, slugify_name_1.slugifyName)(newCompositionId);
35
36
  const result = await (0, actions_1.applyCodemod)({
36
37
  codemod: getCodemod(newCompositionId),
37
38
  dryRun: false,
38
39
  signal,
39
40
  symbolicatedStack,
41
+ undoRedoNavigation: {
42
+ undoRoute: (0, url_state_1.getRoute)(),
43
+ redoRoute: `/${nextCompositionId}`,
44
+ },
40
45
  });
41
46
  if (result.success) {
42
- (0, url_state_1.pushUrl)(`/${(0, slugify_name_1.slugifyName)(newCompositionId)}`);
47
+ (0, url_state_1.pushUrl)(`/${nextCompositionId}`);
43
48
  }
44
49
  return result;
45
50
  }, [getCodemod]);
@@ -0,0 +1,4 @@
1
+ import type { SVGProps } from 'react';
2
+ export declare const LutFileIcon: ({ color, ...props }: SVGProps<SVGSVGElement> & {
3
+ readonly color: string;
4
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LutFileIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const LutFileIcon = ({ color, ...props }) => (jsx_runtime_1.jsx("svg", { ...props, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 640 640", children: jsx_runtime_1.jsx("path", { fill: color, d: "M537.7 64C522.8 64 508.4 68.7 496.3 77.5L286.1 230.3C257.1 251.4 240 285 240 320.9L240 321C234.8 320.3 229.4 320 224 320C153.3 320 96 377.3 96 448C96 463.5 98.8 478.4 103.8 492.2C111.4 513 98 544 75.8 544L48 544C39.2 544 32 551.2 32 560C32 568.8 39.2 576 48 576L224 576C294.7 576 352 518.7 352 448C352 442.6 351.7 437.2 351 432L351.1 432C386.9 432 420.6 414.9 441.7 385.9L594.5 175.7C603.3 163.7 608 149.2 608 134.3C608 95.5 576.5 64 537.7 64zM342.7 400C329.7 367.9 304.1 342.3 272 329.3L272 320.9C272 295.3 284.2 271.3 304.9 256.2L515.1 103.3C521.7 98.5 529.5 96 537.6 96C558.8 96 575.9 113.2 575.9 134.3C575.9 142.4 573.3 150.3 568.6 156.8L415.8 367.1C400.7 387.8 376.7 400 351.1 400L342.7 400zM320 448C320 501 277 544 224 544L127.6 544C128.3 542.7 129 541.4 129.7 540.2C138 523.5 141.4 501.3 133.9 481.2C130.1 470.9 128 459.8 128 448.1C128 395.1 171 352.1 224 352.1C277 352.1 320 395.1 320 448.1z" }) }));
6
+ exports.LutFileIcon = LutFileIcon;
@@ -0,0 +1,4 @@
1
+ import type { SVGProps } from 'react';
2
+ export declare const SparklesIcon: React.FC<SVGProps<SVGSVGElement> & {
3
+ readonly color: string;
4
+ }>;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SparklesIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const SparklesIcon = ({ color, ...props }) => (jsx_runtime_1.jsx("svg", { ...props, fill: color, viewBox: "0 0 640 640", children: jsx_runtime_1.jsx("path", { d: "M390.6 268.1 529.2 320 390.6 371.9C381.9 375.1 375.1 382 371.8 390.7L320 529.2 268.1 390.6C264.9 381.9 258 375.1 249.3 371.8L110.8 320 249.4 268.1C258.1 264.9 264.9 258 268.2 249.3L320 110.8 371.9 249.4C375.1 258.1 382 264.9 390.7 268.2ZM401.8 238.1 342.5 79.6C339 70.2 330 64 320 64S301 70.2 297.5 79.6L238.2 238.2 79.6 297.5C70.2 301 64 310 64 320S70.2 339 79.6 342.5L238.2 401.9 297.6 560.5C301 569.8 310 576 320 576S339 569.8 342.5 560.4L401.9 401.8 560.5 342.4C569.8 339 576 330 576 320S569.8 301 560.4 297.5L401.8 238.2Z" }) }));
6
+ exports.SparklesIcon = SparklesIcon;
@@ -109,6 +109,18 @@ export type AddEffectModalState = {
109
109
  nodePath: SequencePropsSubscriptionKey;
110
110
  clientId: string;
111
111
  };
112
+ export type AssetSelectionModalState = {
113
+ readonly type: 'asset-selection';
114
+ readonly assetType: 'audio' | 'video' | 'image';
115
+ readonly initialUrl: string | null;
116
+ readonly invocationTimestamp: number;
117
+ readonly assetSelection: {
118
+ readonly initialQuery: string;
119
+ readonly onSelectFile: () => void;
120
+ readonly onSelected: (asset: StaticFile) => void;
121
+ };
122
+ readonly onSelectedUrl: (url: string) => void;
123
+ };
112
124
  export type TranscriptionModalState = {
113
125
  type: 'transcribe';
114
126
  src: string;
@@ -131,6 +143,7 @@ export type CanvasCaptureImport = {
131
143
  export type ElementInstallPlan = {
132
144
  readonly compositionFile: string;
133
145
  readonly expectedFileState: ElementInstallExpectedFileState;
146
+ readonly filePath: string;
134
147
  };
135
148
  export type ElementInstallModalState = {
136
149
  readonly type: 'element-install';
@@ -187,8 +200,17 @@ export type ModalState = {
187
200
  } | {
188
201
  type: 'fix-computed-value';
189
202
  prop: string;
190
- context: string;
191
- remotionInteractivitySkillAvailable: boolean;
203
+ location: {
204
+ source: string;
205
+ line: number;
206
+ column: number;
207
+ };
208
+ } | {
209
+ type: 'generate-with-agent';
210
+ location: {
211
+ source: string;
212
+ line: number;
213
+ } | null;
192
214
  } | {
193
215
  type: 'quick-switcher';
194
216
  mode: QuickSwitcherMode;
@@ -206,7 +228,7 @@ export type ModalState = {
206
228
  type: 'element-library';
207
229
  name: string;
208
230
  url: string;
209
- } | ElementInstallModalState | AddEffectModalState | TranscriptionModalState | VideoMattingModalState | ConfirmationDialogState | SvgImportDialogState;
231
+ } | ElementInstallModalState | AddEffectModalState | AssetSelectionModalState | TranscriptionModalState | VideoMattingModalState | ConfirmationDialogState | SvgImportDialogState;
210
232
  export type SetSelectedModalContextType = {
211
233
  setSelectedModal: React.Dispatch<React.SetStateAction<ModalState | null>>;
212
234
  };
@@ -81,9 +81,7 @@ const HigherZIndex = ({ children, onEscape, onOutsideClick, disabled, outsideCli
81
81
  onEnd: (reason, upEvent) => {
82
82
  var _a;
83
83
  endPointerSession = null;
84
- if ((reason === 'pointerup' || reason === 'buttons-released') &&
85
- upEvent &&
86
- !(0, input_dragger_click_lock_1.getClickLock)()) {
84
+ if ((0, pointer_session_1.isPointerSessionRelease)(reason, upEvent) && !(0, input_dragger_click_lock_1.getClickLock)()) {
87
85
  const target = (_a = document.elementFromPoint(upEvent.clientX, upEvent.clientY)) !== null && _a !== void 0 ? _a : upEvent.target;
88
86
  if (document.contains(target)) {
89
87
  upEvent.stopPropagation();
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/studio"
4
4
  },
5
5
  "name": "@remotion/studio",
6
- "version": "4.0.524",
6
+ "version": "4.0.526",
7
7
  "description": "APIs for interacting with the Remotion Studio",
8
8
  "main": "dist",
9
9
  "scripts": {
@@ -20,8 +20,8 @@
20
20
  "url": "https://github.com/remotion-dev/remotion/issues"
21
21
  },
22
22
  "peerDependencies": {
23
- "@remotion/video-matting": "4.0.524",
24
- "@remotion/whisper-webgpu": "4.0.524",
23
+ "@remotion/video-matting": "4.0.526",
24
+ "@remotion/whisper-webgpu": "4.0.526",
25
25
  "react": ">=16.8.0",
26
26
  "react-dom": ">=16.8.0"
27
27
  },
@@ -35,32 +35,32 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@jridgewell/trace-mapping": "0.3.31",
38
- "@remotion/canvas": "4.0.524",
39
- "@remotion/captions": "4.0.524",
40
- "@remotion/media": "4.0.524",
41
- "@remotion/media-utils": "4.0.524",
42
- "@remotion/player": "4.0.524",
43
- "@remotion/renderer": "4.0.524",
44
- "@remotion/studio-codemods": "4.0.524",
45
- "@remotion/studio-protocol": "4.0.524",
46
- "@remotion/studio-shared": "4.0.524",
47
- "@remotion/timeline-utils": "4.0.524",
48
- "@remotion/web-renderer": "4.0.524",
49
- "@remotion/zod-types": "4.0.524",
38
+ "@remotion/canvas": "4.0.526",
39
+ "@remotion/captions": "4.0.526",
40
+ "@remotion/media": "4.0.526",
41
+ "@remotion/media-utils": "4.0.526",
42
+ "@remotion/player": "4.0.526",
43
+ "@remotion/renderer": "4.0.526",
44
+ "@remotion/studio-codemods": "4.0.526",
45
+ "@remotion/studio-protocol": "4.0.526",
46
+ "@remotion/studio-shared": "4.0.526",
47
+ "@remotion/timeline-utils": "4.0.526",
48
+ "@remotion/web-renderer": "4.0.526",
49
+ "@remotion/zod-types": "4.0.526",
50
50
  "@tanstack/react-virtual": "3.14.9",
51
51
  "mediabunny": "1.56.1",
52
52
  "memfs": "3.4.3",
53
53
  "open": "8.4.2",
54
54
  "prismjs": "1.30.0",
55
- "remotion": "4.0.524",
55
+ "remotion": "4.0.526",
56
56
  "semver": "7.5.3",
57
57
  "zod": "4.5.4"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@happy-dom/global-registrator": "14.5.1",
61
- "@remotion/eslint-config-internal": "4.0.524",
62
- "@remotion/video-matting": "4.0.524",
63
- "@remotion/whisper-webgpu": "4.0.524",
61
+ "@remotion/eslint-config-internal": "4.0.526",
62
+ "@remotion/video-matting": "4.0.526",
63
+ "@remotion/whisper-webgpu": "4.0.526",
64
64
  "@testing-library/react": "16.1.0",
65
65
  "@types/prismjs": "1.26.4",
66
66
  "@types/semver": "7.5.3",
@@ -1,62 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CodeFrame = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const LazySyntaxHighlightedSource_1 = require("../../components/LazySyntaxHighlightedSource");
6
- const is_menu_item_1 = require("../../components/Menu/is-menu-item");
7
- const colors_1 = require("../../helpers/colors");
8
- const container = {
9
- display: 'flex',
10
- flexDirection: 'row',
11
- width: '100%',
12
- };
13
- const frame = {
14
- backgroundColor: colors_1.ERROR_CODE_FRAME_BACKGROUND,
15
- borderRadius: 6,
16
- marginBottom: 20,
17
- marginLeft: 14,
18
- marginRight: 14,
19
- overflowY: 'auto',
20
- };
21
- const lineNumber = {
22
- whiteSpace: 'pre',
23
- paddingRight: 12,
24
- color: 'inherit',
25
- fontSize: 14,
26
- lineHeight: 1.7,
27
- width: 60,
28
- flexShrink: 0,
29
- display: 'inline-flex',
30
- alignItems: 'center',
31
- justifyContent: 'flex-end',
32
- fontFamily: 'monospace',
33
- };
34
- const CodeFrame = ({ source, lineNumberWidth }) => {
35
- return (jsx_runtime_1.jsx("div", { style: frame, className: is_menu_item_1.HORIZONTAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx("div", { style: { minWidth: '100%', width: 'max-content' }, children: source.map((s, j) => {
36
- return (jsx_runtime_1.jsxs("div", { style: {
37
- ...container,
38
- backgroundColor: s.highlight
39
- ? colors_1.SELECTED_BACKGROUND
40
- : colors_1.TRANSPARENT,
41
- }, children: [
42
- jsx_runtime_1.jsx("div", { style: {
43
- ...lineNumber,
44
- backgroundColor: s.highlight
45
- ? colors_1.TRANSPARENT
46
- : colors_1.ERROR_CODE_FRAME_LINE_BACKGROUND,
47
- color: s.highlight ? colors_1.WHITE : colors_1.WHITE_ALPHA_40,
48
- }, children: String(s.lineNumber).padStart(lineNumberWidth, ' ') }), jsx_runtime_1.jsx("code", { className: "language-tsx", style: {
49
- fontFamily: 'monospace',
50
- fontSize: 14,
51
- color: '#9cdcfe',
52
- whiteSpace: 'pre',
53
- tabSize: 2,
54
- backgroundColor: colors_1.TRANSPARENT,
55
- lineHeight: 1.7,
56
- paddingRight: 12,
57
- paddingLeft: 12,
58
- }, children: jsx_runtime_1.jsx(LazySyntaxHighlightedSource_1.LazySyntaxHighlightedSource, { source: s.content }) })
59
- ] }, j));
60
- }) }) }));
61
- };
62
- exports.CodeFrame = CodeFrame;