@remotion/studio 4.0.526 → 4.0.527

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/components/Canvas.js +88 -26
  2. package/dist/components/CanvasCaptureDropHandler.js +63 -0
  3. package/dist/components/CanvasOrLoading.js +10 -2
  4. package/dist/components/CompositionSelectorItem.js +1 -0
  5. package/dist/components/CurrentAsset.js +2 -1
  6. package/dist/components/InitialCompositionLoader.js +1 -1
  7. package/dist/components/InlineDropdown.js +26 -2
  8. package/dist/components/InlineEditableTitle.js +1 -0
  9. package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +1 -0
  10. package/dist/components/InspectorPanel/CompositionInspector.js +3 -3
  11. package/dist/components/InspectorPanel/CompositionMetadata.js +4 -0
  12. package/dist/components/InspectorPanel/ElementLibraryButton.js +1 -0
  13. package/dist/components/InspectorPanel/MultiSequenceInspector.js +32 -1
  14. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +41 -1
  15. package/dist/components/InspectorPanel/common.js +1 -0
  16. package/dist/components/InspectorPanel/styles.js +2 -0
  17. package/dist/components/InspectorPanel/use-composition-actions.js +1 -0
  18. package/dist/components/InspectorSourceLocation.js +3 -0
  19. package/dist/components/MenuBuildIndicator.js +1 -0
  20. package/dist/components/NewComposition/CancelButton.js +1 -1
  21. package/dist/components/Preview.js +3 -0
  22. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -0
  23. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -0
  24. package/dist/components/RadioButton.js +1 -0
  25. package/dist/components/RenderModal/DataEditor.js +4 -1
  26. package/dist/components/RenderQueue/CaptionQueueItem.js +5 -2
  27. package/dist/components/RenderQueue/CaptionQueueProcessor.js +35 -8
  28. package/dist/components/RenderQueue/VideoMattingQueueItem.js +1 -0
  29. package/dist/components/RenderQueue/caption-job-types.d.ts +6 -0
  30. package/dist/components/RenderQueue/index.js +1 -0
  31. package/dist/components/RendersTab.js +2 -0
  32. package/dist/components/SelectedOutlineSnapIndicators.d.ts +6 -0
  33. package/dist/components/SelectedOutlineSnapIndicators.js +16 -12
  34. package/dist/components/SequencePropsSubscriptionProvider.d.ts +3 -0
  35. package/dist/components/SequencePropsSubscriptionProvider.js +8 -6
  36. package/dist/components/Timeline/TimelineDeleteKeybindings.js +6 -9
  37. package/dist/components/Timeline/TimelineEffectItem.js +1 -0
  38. package/dist/components/Timeline/TimelineExpandArrowButton.js +1 -0
  39. package/dist/components/Timeline/TimelineExpandedRow.js +1 -0
  40. package/dist/components/Timeline/TimelineFieldLabel.js +1 -0
  41. package/dist/components/Timeline/TimelineKeyframeControls.js +1 -0
  42. package/dist/components/Timeline/TimelineSequence.js +26 -0
  43. package/dist/components/Timeline/TimelineSequenceFrame.js +1 -0
  44. package/dist/components/Timeline/TimelineSequenceItem.js +28 -0
  45. package/dist/components/Timeline/TimelineViewport.d.ts +1 -0
  46. package/dist/components/Timeline/TimelineViewport.js +10 -1
  47. package/dist/components/Timeline/delete-selected-timeline-item.js +2 -2
  48. package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +3 -1
  49. package/dist/components/Timeline/get-sequence-context-menu-items.js +13 -1
  50. package/dist/components/Timeline/split-selected-timeline-item.d.ts +13 -10
  51. package/dist/components/Timeline/split-selected-timeline-item.js +58 -35
  52. package/dist/components/TimelineCombobox.js +1 -0
  53. package/dist/components/Transcription/TranscriptionModal.js +16 -11
  54. package/dist/components/Transcription/TranscriptionModalWithOptionalWhisper.js +1 -1
  55. package/dist/components/WebMcp.js +1 -0
  56. package/dist/components/composition-drop-preview.d.ts +9 -2
  57. package/dist/components/composition-drop-preview.js +7 -4
  58. package/dist/components/composition-menu-items.js +4 -4
  59. package/dist/components/delete-jsx-nodes-api.d.ts +2 -0
  60. package/dist/components/{delete-jsx-node-api.js → delete-jsx-nodes-api.js} +5 -5
  61. package/dist/components/get-open-in-menu-items.js +7 -7
  62. package/dist/components/keyboard-shortcuts.d.ts +4 -4
  63. package/dist/components/keyboard-shortcuts.js +3 -1
  64. package/dist/components/public-output-name.d.ts +1 -0
  65. package/dist/components/public-output-name.js +7 -3
  66. package/dist/esm/{CaptionQueueProcessor-k0yrm3dj.mjs → CaptionQueueProcessor-npa6szn1.mjs} +39 -8
  67. package/dist/esm/{LazyModels-nk7py0zt.mjs → LazyModels-nh3c8h9p.mjs} +4 -3
  68. package/dist/esm/{LazyModels-mtggyjye.mjs → LazyModels-rr5v8h5y.mjs} +4 -3
  69. package/dist/esm/{TranscriptionModal-ymnx1c7m.mjs → TranscriptionModal-79m5wgcj.mjs} +25 -17
  70. package/dist/esm/{VideoMattingModal-05vpczks.mjs → VideoMattingModal-31pew0xj.mjs} +9 -6
  71. package/dist/esm/index-21hxsfaa.mjs +239 -0
  72. package/dist/esm/{index-0gewwxse.mjs → index-4zen9prq.mjs} +2293 -2203
  73. package/dist/esm/index-5t2dwxsk.mjs +530 -0
  74. package/dist/esm/{index-5gd8k9yv.mjs → index-614tdz2q.mjs} +1 -1
  75. package/dist/esm/{index-cdy8v54v.mjs → index-9xxg6218.mjs} +20 -541
  76. package/dist/esm/{index-5bfxbpca.mjs → index-ac5550e7.mjs} +1 -1
  77. package/dist/esm/{index-eb5txqp6.mjs → index-e855w59j.mjs} +8 -86
  78. package/dist/esm/{index-4dsz9035.mjs → index-n5gmcvhz.mjs} +1 -1
  79. package/dist/esm/{index-bs39wngg.mjs → index-ppspzgn9.mjs} +3134 -2994
  80. package/dist/esm/{index-g7k2dvar.mjs → index-r0ejh5sy.mjs} +1 -1
  81. package/dist/esm/index-r1gr3j3a.mjs +80 -0
  82. package/dist/esm/{index-x40wwfmt.mjs → index-s7qa3xbw.mjs} +6 -4
  83. package/dist/esm/{index-f97r9e2g.mjs → index-vxwg66ar.mjs} +5 -3
  84. package/dist/esm/index.mjs +3 -2
  85. package/dist/esm/internals.mjs +10 -7
  86. package/dist/esm/previewEntry.mjs +10 -7
  87. package/dist/esm/{resolve-composition-component-location-bt2d6qxq.mjs → resolve-composition-component-location-qrp05g62.mjs} +1 -1
  88. package/dist/helpers/copy-text.js +1 -16
  89. package/dist/helpers/hoverable.js +2 -1
  90. package/dist/helpers/open-in-editor.js +1 -1
  91. package/dist/helpers/studio-runtime-config.d.ts +1 -1
  92. package/dist/helpers/use-keybinding.d.ts +1 -1
  93. package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -2
  94. package/dist/helpers/use-menu-structure.js +15 -9
  95. package/dist/state/modals.d.ts +5 -0
  96. package/dist/state/timeline-zoom.js +4 -0
  97. package/package.json +19 -19
  98. package/dist/components/delete-jsx-node-api.d.ts +0 -2
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deleteJsxNode = void 0;
3
+ exports.deleteJsxNodes = void 0;
4
4
  const browser_studio_operations_1 = require("../helpers/browser-studio-operations");
5
5
  const call_api_1 = require("./call-api");
6
- const deleteJsxNode = (request) => {
6
+ const deleteJsxNodes = (request) => {
7
7
  const browserStudioOperations = (0, browser_studio_operations_1.getBrowserStudioOperations)();
8
8
  return browserStudioOperations
9
- ? browserStudioOperations.deleteJsxNode(request)
10
- : (0, call_api_1.callApi)('/api/delete-jsx-node', request);
9
+ ? browserStudioOperations.deleteJsxNodes(request)
10
+ : (0, call_api_1.callApi)('/api/delete-jsx-nodes', request);
11
11
  };
12
- exports.deleteJsxNode = deleteJsxNode;
12
+ exports.deleteJsxNodes = deleteJsxNodes;
@@ -30,7 +30,7 @@ const getConfigureDefaultAppsMenuItems = ({ hasPreviousItems, onConfigureApps, }
30
30
  label: jsx_runtime_1.jsx("span", { style: menuLabel, children: "Configure default apps..." }),
31
31
  leftItem: null,
32
32
  onClick: onConfigureApps,
33
- quickSwitcherLabel: null,
33
+ quickSwitcherLabel: 'Configure default apps...',
34
34
  subMenu: null,
35
35
  type: 'item',
36
36
  value: 'change-default-apps',
@@ -55,7 +55,7 @@ const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisable
55
55
  onOpenInEditor(editor.id);
56
56
  }
57
57
  },
58
- quickSwitcherLabel: null,
58
+ quickSwitcherLabel: `Open in ${editor.name}`,
59
59
  subMenu: null,
60
60
  type: 'item',
61
61
  value: editor.id,
@@ -68,7 +68,7 @@ const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisable
68
68
  label: jsx_runtime_1.jsx("span", { style: menuLabel, children: codingAgent.name }),
69
69
  leftItem: jsx_runtime_1.jsx(CodingAgentIcon_1.CodingAgentIcon, { codingAgentId: codingAgent.id, size: 18 }),
70
70
  onClick: () => onOpenInCodingAgent(codingAgent.id, codingAgent.nameWithType),
71
- quickSwitcherLabel: null,
71
+ quickSwitcherLabel: `Open in ${codingAgent.nameWithType}`,
72
72
  subMenu: null,
73
73
  type: 'item',
74
74
  value: `coding-agent-${codingAgent.id}`,
@@ -91,7 +91,7 @@ const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisable
91
91
  onOpenInGitSource();
92
92
  }
93
93
  },
94
- quickSwitcherLabel: null,
94
+ quickSwitcherLabel: 'Open in GitHub.com',
95
95
  subMenu: null,
96
96
  type: 'item',
97
97
  value: 'github',
@@ -111,7 +111,7 @@ const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisable
111
111
  onOpenInFileExplorer();
112
112
  }
113
113
  },
114
- quickSwitcherLabel: null,
114
+ quickSwitcherLabel: `Open in ${fileManagerName}`,
115
115
  subMenu: null,
116
116
  type: 'item',
117
117
  value: 'file-explorer',
@@ -156,7 +156,7 @@ const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisable
156
156
  label: jsx_runtime_1.jsx("span", { style: menuLabel, children: terminal.name }),
157
157
  leftItem: jsx_runtime_1.jsx(terminal_1.TerminalIcon, { terminalId: terminal.id, size: 18 }),
158
158
  onClick: () => onOpenInTerminal === null || onOpenInTerminal === void 0 ? void 0 : onOpenInTerminal(terminal.id),
159
- quickSwitcherLabel: null,
159
+ quickSwitcherLabel: `Open in ${terminal.name}`,
160
160
  subMenu: null,
161
161
  type: 'item',
162
162
  value: `terminal-${terminal.id}`,
@@ -176,7 +176,7 @@ const getOpenInMenuItems = ({ canOpenDesktopApps, codingAgentInfo, editorDisable
176
176
  label: jsx_runtime_1.jsx("span", { style: menuLabel, children: gitClient.name }),
177
177
  leftItem: jsx_runtime_1.jsx(git_client_1.GitClientIcon, { gitClientId: gitClient.id, size: 18 }),
178
178
  onClick: () => onOpenInGitClient(gitClient.id),
179
- quickSwitcherLabel: null,
179
+ quickSwitcherLabel: `Open in ${gitClient.name}`,
180
180
  subMenu: null,
181
181
  type: 'item',
182
182
  value: `git-client-${gitClient.id}`,
@@ -12,15 +12,15 @@ export type KeyboardShortcutGroup = {
12
12
  export declare const defaultKeyboardShortcuts: Record<StudioKeyboardShortcutAction, readonly StudioKeyboardShortcut[]>;
13
13
  export declare const keyboardShortcutGroups: readonly KeyboardShortcutGroup[];
14
14
  export declare const askAIKeyboardShortcutGroup: KeyboardShortcutGroup;
15
- export declare const getKeyboardShortcutsForAction: (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", configured?: 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", StudioKeyboardShortcutValue>> | null) => readonly StudioKeyboardShortcut[];
15
+ export declare const getKeyboardShortcutsForAction: (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" | "splitSequences" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut", configured?: 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" | "splitSequences" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut", StudioKeyboardShortcutValue>> | null) => readonly StudioKeyboardShortcut[];
16
16
  export declare const keyboardEventMatchesShortcut: ({ event, shortcut: value, }: {
17
17
  readonly event: KeyboardEvent;
18
18
  readonly shortcut: StudioKeyboardShortcut;
19
19
  }) => boolean;
20
20
  export declare const keyboardShortcutsOverlap: (first: StudioKeyboardShortcut, second: StudioKeyboardShortcut) => boolean;
21
- export declare const keyboardEventMatchesAction: (event: KeyboardEvent, 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") => boolean;
21
+ export declare const keyboardEventMatchesAction: (event: KeyboardEvent, 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" | "splitSequences" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut") => boolean;
22
22
  export declare const formatKeyboardShortcut: (value: StudioKeyboardShortcut) => readonly string[];
23
23
  export declare const formatKeyboardShortcutForAria: (value: StudioKeyboardShortcut) => string;
24
- export declare const getKeyboardShortcutLabel: (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;
25
- export declare const getKeyboardShortcutAriaKeyShortcuts: (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;
24
+ export declare const getKeyboardShortcutLabel: (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" | "splitSequences" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut") => string;
25
+ export declare const getKeyboardShortcutAriaKeyShortcuts: (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" | "splitSequences" | "toggleBothSidebars" | "toggleCheckerboard" | "toggleLeftSidebar" | "toggleLoop" | "toggleMute" | "toggleOutlines" | "toggleRightSidebar" | "toggleRulersAndGuides" | "toggleSnapping" | "undo" | "zoomIn" | "zoomOut") => string;
26
26
  export declare const shortcutFromKeyboardEvent: (event: KeyboardEvent) => StudioKeyboardShortcut | null;
@@ -45,7 +45,8 @@ exports.defaultKeyboardShortcuts = {
45
45
  selectOpacityProp: [{ key: 't' }],
46
46
  selectRotateProp: [{ key: 'r', shift: false }],
47
47
  selectScaleProp: [{ key: 's' }],
48
- duplicateSequences: [{ key: 'd', commandOrControl: true }],
48
+ duplicateSequences: [{ key: 'd', commandOrControl: true, shift: false }],
49
+ splitSequences: [{ key: 'd', commandOrControl: true, shift: true }],
49
50
  copyEffectsAndValues: [{ key: 'c', commandOrControl: true }],
50
51
  cutEffects: [{ key: 'x', commandOrControl: true }],
51
52
  deleteSelection: [{ key: 'Backspace' }, { key: 'Delete' }],
@@ -136,6 +137,7 @@ exports.keyboardShortcutGroups = [
136
137
  shortcut('Select rotate prop', 'selectRotateProp'),
137
138
  shortcut('Select scale prop', 'selectScaleProp'),
138
139
  shortcut('Duplicate sequences', 'duplicateSequences'),
140
+ shortcut('Split sequences at playhead', 'splitSequences'),
139
141
  shortcut('Copy effects / values', 'copyEffectsAndValues'),
140
142
  shortcut('Cut effects', 'cutEffects'),
141
143
  fixedShortcut('Paste effects / values', [[is_mac_1.isMac ? '⌘' : 'Ctrl', 'V']], 'Handled by the browser clipboard event'),
@@ -1,3 +1,4 @@
1
+ export declare const getMediaFileName: (src: string, displayName: string) => string;
1
2
  export declare const getDefaultOutputBaseName: (src: string, displayName: string, fallbackName: string) => string;
2
3
  export declare const validatePublicOutputName: ({ extension, outName, }: {
3
4
  extension: string;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validatePublicOutputName = exports.getDefaultOutputBaseName = void 0;
3
+ exports.validatePublicOutputName = exports.getDefaultOutputBaseName = exports.getMediaFileName = void 0;
4
4
  const invalidCharacters = ['?', '*', '+', ':', '%'];
5
- const getDefaultOutputBaseName = (src, displayName, fallbackName) => {
5
+ const getMediaFileName = (src, displayName) => {
6
6
  var _a;
7
7
  let pathname = displayName;
8
8
  if (!/^(data|blob):/i.test(src.trimStart())) {
@@ -24,7 +24,11 @@ const getDefaultOutputBaseName = (src, displayName, fallbackName) => {
24
24
  catch (_c) {
25
25
  // Keep the encoded name if it contains an invalid escape sequence.
26
26
  }
27
- return (decoded
27
+ return decoded;
28
+ };
29
+ exports.getMediaFileName = getMediaFileName;
30
+ const getDefaultOutputBaseName = (src, displayName, fallbackName) => {
31
+ return ((0, exports.getMediaFileName)(src, displayName)
28
32
  .replace(/\.[^/.]+$/, '')
29
33
  .replace(/[^a-zA-Z0-9-_ ]/g, '-')
30
34
  .trim()
@@ -1,12 +1,22 @@
1
1
  import {
2
2
  loadModelForJob
3
3
  } from "./index-v4tr1bft.mjs";
4
+ import {
5
+ installRequiredPackages
6
+ } from "./index-21hxsfaa.mjs";
4
7
  import {
5
8
  RenderQueueContext
6
9
  } from "./index-9x6e1dq0.mjs";
7
10
  import {
11
+ callApi
12
+ } from "./index-r1gr3j3a.mjs";
13
+ import {
14
+ getBrowserStudioOperations,
8
15
  writeStaticFile
9
16
  } from "./index-cw0pnpg5.mjs";
17
+ import"./index-9xxg6218.mjs";
18
+ import"./index-5zrb1ft4.mjs";
19
+ import"./index-k426ye99.mjs";
10
20
  import"./index-rcv7qkt5.mjs";
11
21
 
12
22
  // src/components/RenderQueue/CaptionQueueProcessor.tsx
@@ -179,14 +189,35 @@ var CaptionQueueProcessor = () => {
179
189
  const { captions } = toCaptions({
180
190
  whisperWebGpuOutput: transcription
181
191
  });
182
- updateCaptionJobProgress(job.id, {
183
- message: `Saving ${job.outName}...`,
184
- value: 0.95
185
- });
186
- await writeStaticFile({
187
- contents: JSON.stringify(captions, null, 2),
188
- filePath: job.outName
189
- });
192
+ if (job.target === null) {
193
+ updateCaptionJobProgress(job.id, {
194
+ message: `Saving ${job.outName}...`,
195
+ value: 0.95
196
+ });
197
+ await writeStaticFile({
198
+ contents: JSON.stringify(captions, null, 2),
199
+ filePath: job.outName
200
+ });
201
+ } else {
202
+ updateCaptionJobProgress(job.id, {
203
+ message: "Adding Basic captions...",
204
+ value: 0.95
205
+ });
206
+ await installRequiredPackages([
207
+ { name: "@remotion/captions", version: null }
208
+ ]);
209
+ const request = {
210
+ fileName: job.target.fileName,
211
+ nodePath: job.target.nodePath.nodePath,
212
+ durationInFrames: job.target.durationInFrames,
213
+ captions
214
+ };
215
+ const browserStudioOperations = getBrowserStudioOperations();
216
+ const response = browserStudioOperations ? await browserStudioOperations.insertBasicCaptions(request) : await callApi("/api/insert-basic-captions", request);
217
+ if (!response.success) {
218
+ throw new Error(response.reason);
219
+ }
220
+ }
190
221
  captionCount = captions.length;
191
222
  } catch (error) {
192
223
  processingError = error instanceof Error ? error : new Error(String(error));
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  Models
3
- } from "./index-5bfxbpca.mjs";
4
- import"./index-g7k2dvar.mjs";
5
- import"./index-cdy8v54v.mjs";
3
+ } from "./index-614tdz2q.mjs";
4
+ import"./index-r0ejh5sy.mjs";
5
+ import"./index-5t2dwxsk.mjs";
6
+ import"./index-9xxg6218.mjs";
6
7
  import"./index-5zrb1ft4.mjs";
7
8
  import"./index-k426ye99.mjs";
8
9
  import"./index-rcv7qkt5.mjs";
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  Models
3
- } from "./index-5gd8k9yv.mjs";
4
- import"./index-g7k2dvar.mjs";
5
- import"./index-cdy8v54v.mjs";
3
+ } from "./index-ac5550e7.mjs";
4
+ import"./index-r0ejh5sy.mjs";
5
+ import"./index-5t2dwxsk.mjs";
6
+ import"./index-9xxg6218.mjs";
6
7
  import"./index-5zrb1ft4.mjs";
7
8
  import"./index-k426ye99.mjs";
8
9
  import"./index-rcv7qkt5.mjs";
@@ -6,7 +6,7 @@ import {
6
6
  NumberSetting,
7
7
  getDefaultCaptionOutputName,
8
8
  validateCaptionOutputName
9
- } from "./index-f97r9e2g.mjs";
9
+ } from "./index-vxwg66ar.mjs";
10
10
  import {
11
11
  Button,
12
12
  Checkbox,
@@ -30,22 +30,25 @@ import {
30
30
  optionsSidebarTabs,
31
31
  persistSelectedOptionsSidebarPanel,
32
32
  rightRow,
33
- showNotification,
34
33
  useStaticFiles
35
- } from "./index-bs39wngg.mjs";
34
+ } from "./index-ppspzgn9.mjs";
35
+ import {
36
+ showNotification
37
+ } from "./index-21hxsfaa.mjs";
36
38
  import {
37
39
  RenderQueueContext
38
40
  } from "./index-9x6e1dq0.mjs";
39
41
  import {
40
42
  openInFileExplorer
41
- } from "./index-eb5txqp6.mjs";
43
+ } from "./index-e855w59j.mjs";
44
+ import"./index-r1gr3j3a.mjs";
42
45
  import {
43
46
  getBrowserStudioOperations
44
47
  } from "./index-cw0pnpg5.mjs";
45
48
  import {
46
49
  Models
47
- } from "./index-5gd8k9yv.mjs";
48
- import"./index-g7k2dvar.mjs";
50
+ } from "./index-614tdz2q.mjs";
51
+ import"./index-r0ejh5sy.mjs";
49
52
  import {
50
53
  InlineAction,
51
54
  Spacing,
@@ -61,7 +64,8 @@ import {
61
64
  leftSidebar,
62
65
  optionsPanel,
63
66
  outerModalStyle
64
- } from "./index-cdy8v54v.mjs";
67
+ } from "./index-5t2dwxsk.mjs";
68
+ import"./index-9xxg6218.mjs";
65
69
  import"./index-5zrb1ft4.mjs";
66
70
  import {
67
71
  BLUE_DISABLED,
@@ -770,7 +774,8 @@ var TranscriptionModal = ({
770
774
  audioStreamIndex,
771
775
  displayName,
772
776
  requestInit,
773
- src
777
+ src,
778
+ target
774
779
  }) => {
775
780
  const [tab, setTab] = useState("transcribe");
776
781
  const isModelCached = useCallback((model) => isWhisperModelCached({ model }), []);
@@ -811,8 +816,8 @@ var TranscriptionModal = ({
811
816
  };
812
817
  }, []);
813
818
  const normalizedOutName = outName.normalize("NFC").toLowerCase();
814
- const queuedOutputExists = captionJobs.some((job) => (job.status === "idle" || job.status === "running") && job.outName.normalize("NFC").toLowerCase() === normalizedOutName);
815
- const outputValidationMessage = validateCaptionOutputName(outName) ?? (queuedOutputExists ? "Another caption job is already using this output file" : null);
819
+ const queuedOutputExists = captionJobs.some((job) => job.target === null && (job.status === "idle" || job.status === "running") && job.outName.normalize("NFC").toLowerCase() === normalizedOutName);
820
+ const outputValidationMessage = target === null ? validateCaptionOutputName(outName) ?? (queuedOutputExists ? "Another caption job is already using this output file" : null) : null;
816
821
  const exists = staticFiles.some((file) => file.name.normalize("NFC").toLowerCase() === normalizedOutName);
817
822
  const chunkValidationMessage = strideLengthInSeconds * 2 >= chunkLengthInSeconds ? "Stride length must be less than half of chunk length" : null;
818
823
  const decodingValidationMessage = !Number.isFinite(temperature) ? "Temperature must be a finite number greater than 0" : temperature <= 0 ? "Temperature must be greater than 0" : !Number.isInteger(topK) || topK < 0 ? "Top K must be a non-negative integer" : !Number.isFinite(repetitionPenalty) ? "Repetition penalty must be a finite number greater than 0" : repetitionPenalty <= 0 ? "Repetition penalty must be greater than 0" : !Number.isInteger(noRepeatNgramSize) || noRepeatNgramSize < 0 ? "No-repeat n-gram size must be a non-negative integer" : null;
@@ -834,7 +839,8 @@ var TranscriptionModal = ({
834
839
  displayName,
835
840
  audioStreamIndex,
836
841
  requestInit,
837
- outName,
842
+ outName: target === null ? outName : "Basic captions",
843
+ target,
838
844
  model: selectedModel,
839
845
  language: modelInfo.multilingual ? selectedLanguage : null,
840
846
  task: modelInfo.supportsTranslation ? selectedTask : "transcribe",
@@ -861,6 +867,7 @@ var TranscriptionModal = ({
861
867
  forceFullSequences,
862
868
  noRepeatNgramSize,
863
869
  outName,
870
+ target,
864
871
  repetitionPenalty,
865
872
  requestInit,
866
873
  src,
@@ -873,13 +880,14 @@ var TranscriptionModal = ({
873
880
  temperature,
874
881
  topK
875
882
  ]);
883
+ const title = target === null ? `Transcribe ${displayName}` : "Generate captions";
876
884
  return /* @__PURE__ */ jsx(DismissableModal, {
877
- ariaLabel: `Transcribe ${displayName}`,
885
+ ariaLabel: title,
878
886
  children: /* @__PURE__ */ jsxs("div", {
879
887
  style: transcriptionModalStyle,
880
888
  children: [
881
889
  /* @__PURE__ */ jsx(ModalHeader, {
882
- title: `Transcribe ${displayName}`
890
+ title
883
891
  }),
884
892
  /* @__PURE__ */ jsxs("div", {
885
893
  style: container,
@@ -895,7 +903,7 @@ var TranscriptionModal = ({
895
903
  ...buttonStyle,
896
904
  backgroundColor: canTranscribe ? buttonStyle.backgroundColor : BLUE_DISABLED
897
905
  },
898
- children: "Transcribe"
906
+ children: target === null ? "Transcribe" : "Generate captions"
899
907
  })
900
908
  ]
901
909
  }),
@@ -951,13 +959,13 @@ var TranscriptionModal = ({
951
959
  style: tab === "transcribe" ? settingsPanel : hiddenPanel,
952
960
  className: VERTICAL_SCROLLBAR_CLASSNAME,
953
961
  children: [
954
- /* @__PURE__ */ jsx(OutputSettings, {
962
+ target === null ? /* @__PURE__ */ jsx(OutputSettings, {
955
963
  exists,
956
964
  onOutNameChange,
957
965
  outName,
958
966
  validationMessage: outputValidationMessage
959
- }),
960
- /* @__PURE__ */ jsx(RenderModalHr, {}),
967
+ }) : null,
968
+ target === null ? /* @__PURE__ */ jsx(RenderModalHr, {}) : null,
961
969
  /* @__PURE__ */ jsx(ModelSettings, {
962
970
  cachedModels,
963
971
  selectedLanguage,
@@ -3,7 +3,7 @@ import {
3
3
  } from "./index-7tt71e8n.mjs";
4
4
  import {
5
5
  RenderModalOutputName
6
- } from "./index-x40wwfmt.mjs";
6
+ } from "./index-s7qa3xbw.mjs";
7
7
  import {
8
8
  Button,
9
9
  Checkmark,
@@ -25,16 +25,18 @@ import {
25
25
  rightRow,
26
26
  useStaticFiles,
27
27
  validatePublicOutputName
28
- } from "./index-bs39wngg.mjs";
28
+ } from "./index-ppspzgn9.mjs";
29
+ import"./index-21hxsfaa.mjs";
29
30
  import {
30
31
  RenderQueueContext
31
32
  } from "./index-9x6e1dq0.mjs";
32
- import"./index-eb5txqp6.mjs";
33
+ import"./index-e855w59j.mjs";
34
+ import"./index-r1gr3j3a.mjs";
33
35
  import"./index-cw0pnpg5.mjs";
34
36
  import {
35
37
  Models
36
- } from "./index-5bfxbpca.mjs";
37
- import"./index-g7k2dvar.mjs";
38
+ } from "./index-ac5550e7.mjs";
39
+ import"./index-r0ejh5sy.mjs";
38
40
  import {
39
41
  VERTICAL_SCROLLBAR_CLASSNAME,
40
42
  ValidationMessage,
@@ -48,7 +50,8 @@ import {
48
50
  leftSidebar,
49
51
  optionsPanel,
50
52
  outerModalStyle
51
- } from "./index-cdy8v54v.mjs";
53
+ } from "./index-5t2dwxsk.mjs";
54
+ import"./index-9xxg6218.mjs";
52
55
  import"./index-5zrb1ft4.mjs";
53
56
  import {
54
57
  BLUE_DISABLED