@remotion/studio 4.0.513 → 4.0.514

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 (174) hide show
  1. package/dist/Studio.js +2 -1
  2. package/dist/components/AskAiModal.js +1 -1
  3. package/dist/components/AssetSelector.js +2 -0
  4. package/dist/components/AssetSelectorItem.js +1 -2
  5. package/dist/components/AudioWaveform.d.ts +3 -0
  6. package/dist/components/AudioWaveform.js +55 -67
  7. package/dist/components/Canvas.js +40 -5
  8. package/dist/components/CanvasOrLoading.js +5 -0
  9. package/dist/components/CompositionSelector.js +2 -0
  10. package/dist/components/ConfigureDefaultEditorModal.js +17 -11
  11. package/dist/components/Editor.js +16 -1
  12. package/dist/components/ElementInstallConfirmation.d.ts +1 -0
  13. package/dist/components/ElementInstallConfirmation.js +4 -2
  14. package/dist/components/FixComputedValueModal.d.ts +9 -0
  15. package/dist/components/FixComputedValueModal.js +217 -0
  16. package/dist/components/InitialCompositionLoader.js +19 -0
  17. package/dist/components/InlineDropdown.js +4 -4
  18. package/dist/components/InspectorInfoHeader.js +3 -3
  19. package/dist/components/InspectorOpenInEditor.js +3 -1
  20. package/dist/components/InspectorPanel/CompositionInspector.js +11 -1
  21. package/dist/components/InspectorPanel/CompositionInspectorHeader.js +2 -2
  22. package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +1 -1
  23. package/dist/components/InspectorPanel/EasingInspector.js +1 -1
  24. package/dist/components/InspectorPanel/KeyframeInspector.js +2 -2
  25. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +1 -1
  26. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +35 -6
  27. package/dist/components/InspectorPanel/common.d.ts +5 -5
  28. package/dist/components/InspectorPanel/common.js +8 -8
  29. package/dist/components/InspectorPanel/styles.d.ts +1 -1
  30. package/dist/components/InspectorPanel/styles.js +4 -2
  31. package/dist/components/InspectorSourceLocation.d.ts +1 -1
  32. package/dist/components/InspectorSourceLocation.js +2 -2
  33. package/dist/components/LicenseKeyValidation.js +2 -2
  34. package/dist/components/Modals.js +2 -1
  35. package/dist/components/NewComposition/CodemodFooter.d.ts +1 -0
  36. package/dist/components/NewComposition/CodemodFooter.js +10 -8
  37. package/dist/components/NewComposition/DeleteComposition.js +1 -1
  38. package/dist/components/NewComposition/DeleteFolder.js +1 -1
  39. package/dist/components/NewComposition/DuplicateComposition.js +7 -2
  40. package/dist/components/NewComposition/NewComposition.js +1 -1
  41. package/dist/components/NewComposition/NewFolder.js +1 -1
  42. package/dist/components/NewComposition/RenameComposition.js +1 -1
  43. package/dist/components/NewComposition/RenameFolder.js +1 -1
  44. package/dist/components/NewComposition/duplicate-composition-api.d.ts +16 -0
  45. package/dist/components/NewComposition/duplicate-composition-api.js +16 -0
  46. package/dist/components/NoRegisterRoot.js +1 -1
  47. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +4 -3
  48. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -0
  49. package/dist/components/QuickSwitcher/fuzzy-search.js +1 -1
  50. package/dist/components/RefreshCompositionOverlay.js +1 -1
  51. package/dist/components/RenderButton.js +6 -3
  52. package/dist/components/RenderModal/WebRenderModal.js +6 -2
  53. package/dist/components/RenderModal/WebRenderModalAdvanced.d.ts +2 -0
  54. package/dist/components/RenderModal/WebRenderModalAdvanced.js +9 -2
  55. package/dist/components/RenderModal/render-modals.js +5 -1
  56. package/dist/components/RenderQueue/ClientRenderQueueProcessor.js +5 -1
  57. package/dist/components/RenderQueue/actions.js +12 -2
  58. package/dist/components/RenderQueue/client-side-render-types.d.ts +1 -0
  59. package/dist/components/RenderingSettings.d.ts +2 -0
  60. package/dist/components/RenderingSettings.js +355 -0
  61. package/dist/components/SelectedOutlineElement.js +3 -3
  62. package/dist/components/SelectedOutlinePolygon.d.ts +1 -0
  63. package/dist/components/SelectedOutlinePolygon.js +53 -9
  64. package/dist/components/SettingsContext.d.ts +4 -1
  65. package/dist/components/SettingsContext.js +9 -2
  66. package/dist/components/SettingsModal.d.ts +1 -1
  67. package/dist/components/SettingsModal.js +10 -1
  68. package/dist/components/SettingsModalFooter.js +1 -1
  69. package/dist/components/StudioSettings.d.ts +2 -0
  70. package/dist/components/StudioSettings.js +185 -0
  71. package/dist/components/Timeline/LoopedIndicator.js +1 -1
  72. package/dist/components/Timeline/LoopedTimelineIndicators.d.ts +3 -0
  73. package/dist/components/Timeline/LoopedTimelineIndicators.js +22 -14
  74. package/dist/components/Timeline/Timeline.js +11 -9
  75. package/dist/components/Timeline/TimelineAssetField.d.ts +2 -2
  76. package/dist/components/Timeline/TimelineAssetField.js +1 -1
  77. package/dist/components/Timeline/TimelineDragHandler.js +62 -76
  78. package/dist/components/Timeline/TimelineEffectItem.js +1 -1
  79. package/dist/components/Timeline/TimelineEffectPropItem.d.ts +4 -2
  80. package/dist/components/Timeline/TimelineEffectPropItem.js +16 -11
  81. package/dist/components/Timeline/TimelineExpandedRow.d.ts +1 -1
  82. package/dist/components/Timeline/TimelineExpandedRow.js +4 -4
  83. package/dist/components/Timeline/TimelineExpandedSection.js +1 -1
  84. package/dist/components/Timeline/TimelineHeightContainer.d.ts +0 -4
  85. package/dist/components/Timeline/TimelineHeightContainer.js +4 -4
  86. package/dist/components/Timeline/TimelineImageInfo.d.ts +1 -0
  87. package/dist/components/Timeline/TimelineImageInfo.js +3 -2
  88. package/dist/components/Timeline/TimelineKeyframeControls.js +6 -1
  89. package/dist/components/Timeline/TimelineList.d.ts +1 -5
  90. package/dist/components/Timeline/TimelineList.js +14 -9
  91. package/dist/components/Timeline/TimelinePinchZoom.js +5 -5
  92. package/dist/components/Timeline/TimelineRowChrome.d.ts +0 -2
  93. package/dist/components/Timeline/TimelineRowChrome.js +12 -5
  94. package/dist/components/Timeline/TimelineSchemaField.d.ts +7 -3
  95. package/dist/components/Timeline/TimelineSchemaField.js +71 -13
  96. package/dist/components/Timeline/TimelineScrollable.js +3 -1
  97. package/dist/components/Timeline/TimelineSelection.d.ts +5 -2
  98. package/dist/components/Timeline/TimelineSelection.js +90 -103
  99. package/dist/components/Timeline/TimelineSequence.js +59 -25
  100. package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -1
  101. package/dist/components/Timeline/TimelineSequenceItem.js +15 -9
  102. package/dist/components/Timeline/TimelineSequencePropItem.d.ts +2 -1
  103. package/dist/components/Timeline/TimelineSequencePropItem.js +3 -3
  104. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +33 -10
  105. package/dist/components/Timeline/TimelineSlider.js +42 -33
  106. package/dist/components/Timeline/TimelineTimeIndicators.js +90 -98
  107. package/dist/components/Timeline/TimelineTracks.d.ts +0 -2
  108. package/dist/components/Timeline/TimelineTracks.js +11 -4
  109. package/dist/components/Timeline/TimelineTransformOriginField.js +1 -1
  110. package/dist/components/Timeline/TimelineVideoInfo.d.ts +4 -4
  111. package/dist/components/Timeline/TimelineVideoInfo.js +151 -61
  112. package/dist/components/Timeline/TimelineViewport.d.ts +12 -0
  113. package/dist/components/Timeline/TimelineViewport.js +62 -0
  114. package/dist/components/Timeline/TimelineVirtualization.d.ts +22 -0
  115. package/dist/components/Timeline/TimelineVirtualization.js +144 -0
  116. package/dist/components/Timeline/TimelineZoomControls.js +16 -8
  117. package/dist/components/Timeline/call-add-keyframe.js +31 -3
  118. package/dist/components/Timeline/call-delete-keyframe.js +13 -3
  119. package/dist/components/Timeline/call-move-keyframe.js +11 -1
  120. package/dist/components/Timeline/call-update-keyframe-settings.js +31 -3
  121. package/dist/components/Timeline/delete-selected-timeline-item.js +2 -1
  122. package/dist/components/Timeline/get-timeline-keyframes.d.ts +1 -2
  123. package/dist/components/Timeline/get-timeline-keyframes.js +1 -8
  124. package/dist/components/Timeline/get-timeline-sequence-visible-layout.d.ts +30 -0
  125. package/dist/components/Timeline/get-timeline-sequence-visible-layout.js +61 -0
  126. package/dist/components/Timeline/split-selected-timeline-item.js +2 -2
  127. package/dist/components/Timeline/timeline-scroll-logic.d.ts +24 -0
  128. package/dist/components/Timeline/timeline-scroll-logic.js +127 -4
  129. package/dist/components/Timeline/use-timeline-height.d.ts +3 -5
  130. package/dist/components/Timeline/use-timeline-height.js +16 -18
  131. package/dist/components/UpdateCheck.d.ts +2 -10
  132. package/dist/components/UpdateCheck.js +8 -2
  133. package/dist/components/VisualControls/VisualControlHandle.js +8 -0
  134. package/dist/components/delete-jsx-node-api.d.ts +2 -0
  135. package/dist/components/delete-jsx-node-api.js +12 -0
  136. package/dist/components/element-install-api.d.ts +3 -0
  137. package/dist/components/element-install-api.js +19 -0
  138. package/dist/components/import-assets.js +20 -9
  139. package/dist/components/reorder-sequence-api.d.ts +2 -0
  140. package/dist/components/reorder-sequence-api.js +12 -0
  141. package/dist/components/split-jsx-sequence-api.d.ts +2 -0
  142. package/dist/components/split-jsx-sequence-api.js +12 -0
  143. package/dist/components/split-video-from-audio-api.d.ts +2 -0
  144. package/dist/components/split-video-from-audio-api.js +12 -0
  145. package/dist/error-overlay/remotion-overlay/Overlay.js +1 -1
  146. package/dist/esm/{chunk-tv7r0jy3.js → chunk-xn2q7eem.js} +11073 -7495
  147. package/dist/esm/index.mjs +7 -5
  148. package/dist/esm/internals.mjs +11073 -7495
  149. package/dist/esm/previewEntry.mjs +10905 -7327
  150. package/dist/esm/renderEntry.mjs +2 -3
  151. package/dist/helpers/browser-studio-operations.d.ts +2 -0
  152. package/dist/helpers/browser-studio-operations.js +10 -1
  153. package/dist/helpers/get-timeline-max-zoom.d.ts +26 -0
  154. package/dist/helpers/get-timeline-max-zoom.js +45 -0
  155. package/dist/helpers/inject-css.js +2 -2
  156. package/dist/helpers/render-codec-label.d.ts +1 -1
  157. package/dist/helpers/retry-payload.js +1 -0
  158. package/dist/helpers/studio-runtime-config.d.ts +1 -1
  159. package/dist/helpers/studio-runtime-config.js +2 -3
  160. package/dist/helpers/timeline-layout.d.ts +3 -1
  161. package/dist/helpers/timeline-layout.js +6 -1
  162. package/dist/helpers/url-state.js +3 -2
  163. package/dist/helpers/use-menu-structure.js +1 -5
  164. package/dist/helpers/use-runtime-values.d.ts +2 -1
  165. package/dist/helpers/use-runtime-values.js +7 -3
  166. package/dist/icons/remotion-triangle.d.ts +2 -0
  167. package/dist/icons/remotion-triangle.js +7 -0
  168. package/dist/renderEntry.js +1 -1
  169. package/dist/state/composition-list.d.ts +13 -0
  170. package/dist/state/composition-list.js +21 -0
  171. package/dist/state/modals.d.ts +7 -1
  172. package/dist/state/timeline-zoom.d.ts +1 -2
  173. package/dist/state/timeline-zoom.js +9 -5
  174. package/package.json +14 -13
@@ -10,7 +10,6 @@ import {
10
10
  import { useContext, useEffect, useRef, useState } from "react";
11
11
  import ReactDOM from "react-dom/client";
12
12
  import {
13
- AbsoluteFill,
14
13
  getInputProps,
15
14
  getRemotionEnvironment,
16
15
  continueRender as globalContinueRender,
@@ -57,7 +56,7 @@ var DelayedSpinner = () => {
57
56
  if (!show) {
58
57
  return null;
59
58
  }
60
- return /* @__PURE__ */ jsx(AbsoluteFill, {
59
+ return /* @__PURE__ */ jsx(Internals.AbsoluteFillElement, {
61
60
  style: {
62
61
  justifyContent: "center",
63
62
  alignItems: "center",
@@ -214,7 +213,7 @@ var renderContent = (Root) => {
214
213
  renderToDOM(/* @__PURE__ */ jsx("div", {
215
214
  children: /* @__PURE__ */ jsx(DelayedSpinner, {})
216
215
  }));
217
- import("./chunk-tv7r0jy3.js").then(({ StudioInternals }) => {
216
+ import("./chunk-xn2q7eem.js").then(({ StudioInternals }) => {
218
217
  window.remotion_isStudio = true;
219
218
  window.remotion_isReadOnlyStudio = true;
220
219
  window.remotion_inputProps = "{}";
@@ -1,3 +1,5 @@
1
1
  import type { BrowserStudioOperations } from '@remotion/studio-shared';
2
2
  export declare const BROWSER_STUDIO_OPERATIONS_READY_EVENT = "remotion-browser-studio-operations-ready";
3
3
  export declare const getBrowserStudioOperations: () => BrowserStudioOperations | null;
4
+ export declare const getBrowserStudioKeyframeOperations: () => import("@remotion/studio-shared").BrowserStudioKeyframeOperations | null;
5
+ export declare const canUseKeyframeOperations: () => boolean;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getBrowserStudioOperations = exports.BROWSER_STUDIO_OPERATIONS_READY_EVENT = void 0;
3
+ exports.canUseKeyframeOperations = exports.getBrowserStudioKeyframeOperations = exports.getBrowserStudioOperations = exports.BROWSER_STUDIO_OPERATIONS_READY_EVENT = void 0;
4
4
  // Browser Studio may be hosted by a different studio-shared version, so this
5
5
  // handshake intentionally has no shared runtime import.
6
6
  exports.BROWSER_STUDIO_OPERATIONS_READY_EVENT = 'remotion-browser-studio-operations-ready';
@@ -12,3 +12,12 @@ const getBrowserStudioOperations = () => {
12
12
  return (_a = window.remotion_browserStudio) !== null && _a !== void 0 ? _a : null;
13
13
  };
14
14
  exports.getBrowserStudioOperations = getBrowserStudioOperations;
15
+ const getBrowserStudioKeyframeOperations = () => {
16
+ var _a;
17
+ var _b;
18
+ return (_b = (_a = (0, exports.getBrowserStudioOperations)()) === null || _a === void 0 ? void 0 : _a.keyframes) !== null && _b !== void 0 ? _b : null;
19
+ };
20
+ exports.getBrowserStudioKeyframeOperations = getBrowserStudioKeyframeOperations;
21
+ const canUseKeyframeOperations = () => !window.remotion_isReadOnlyStudio ||
22
+ (0, exports.getBrowserStudioKeyframeOperations)() !== null;
23
+ exports.canUseKeyframeOperations = canUseKeyframeOperations;
@@ -0,0 +1,26 @@
1
+ export declare const TIMELINE_MIN_ZOOM = 1;
2
+ export declare const TIMELINE_MAX_ZOOM_FLOOR = 5;
3
+ /**
4
+ * How many frames fill the timeline viewport at max zoom.
5
+ * 30 frames matches the previous 5x cap on a 150-frame composition
6
+ * (5 seconds at 30fps) and keeps a single frame wide enough to trim.
7
+ */
8
+ export declare const TIMELINE_FRAMES_VISIBLE_AT_MAX_ZOOM = 30;
9
+ export declare const getTimelineMaxZoom: (durationInFrames: number) => number;
10
+ export declare const clampTimelineZoom: ({ zoom, durationInFrames, }: {
11
+ zoom: number;
12
+ durationInFrames: number;
13
+ }) => number;
14
+ export declare const timelineZoomToSliderValue: ({ zoom, maxZoom, }: {
15
+ zoom: number;
16
+ maxZoom: number;
17
+ }) => number;
18
+ export declare const sliderValueToTimelineZoom: ({ sliderValue, maxZoom, }: {
19
+ sliderValue: number;
20
+ maxZoom: number;
21
+ }) => number;
22
+ export declare const TIMELINE_ZOOM_SLIDER_PROPS: {
23
+ readonly min: 0;
24
+ readonly max: 1000;
25
+ readonly step: 1;
26
+ };
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TIMELINE_ZOOM_SLIDER_PROPS = exports.sliderValueToTimelineZoom = exports.timelineZoomToSliderValue = exports.clampTimelineZoom = exports.getTimelineMaxZoom = exports.TIMELINE_FRAMES_VISIBLE_AT_MAX_ZOOM = exports.TIMELINE_MAX_ZOOM_FLOOR = exports.TIMELINE_MIN_ZOOM = void 0;
4
+ exports.TIMELINE_MIN_ZOOM = 1;
5
+ exports.TIMELINE_MAX_ZOOM_FLOOR = 5;
6
+ /**
7
+ * How many frames fill the timeline viewport at max zoom.
8
+ * 30 frames matches the previous 5x cap on a 150-frame composition
9
+ * (5 seconds at 30fps) and keeps a single frame wide enough to trim.
10
+ */
11
+ exports.TIMELINE_FRAMES_VISIBLE_AT_MAX_ZOOM = 30;
12
+ const TIMELINE_ZOOM_SLIDER_MAX = 1000;
13
+ const getTimelineMaxZoom = (durationInFrames) => {
14
+ const frameLevelZoom = durationInFrames / exports.TIMELINE_FRAMES_VISIBLE_AT_MAX_ZOOM;
15
+ return Math.max(exports.TIMELINE_MAX_ZOOM_FLOOR, Math.ceil(frameLevelZoom * 10) / 10);
16
+ };
17
+ exports.getTimelineMaxZoom = getTimelineMaxZoom;
18
+ const clampTimelineZoom = ({ zoom, durationInFrames, }) => {
19
+ const clamped = Math.min((0, exports.getTimelineMaxZoom)(durationInFrames), Math.max(exports.TIMELINE_MIN_ZOOM, zoom));
20
+ return Math.round(clamped * 10) / 10;
21
+ };
22
+ exports.clampTimelineZoom = clampTimelineZoom;
23
+ const timelineZoomToSliderValue = ({ zoom, maxZoom, }) => {
24
+ if (maxZoom <= exports.TIMELINE_MIN_ZOOM) {
25
+ return 0;
26
+ }
27
+ const clampedZoom = Math.min(maxZoom, Math.max(exports.TIMELINE_MIN_ZOOM, zoom));
28
+ const t = Math.log(clampedZoom / exports.TIMELINE_MIN_ZOOM) /
29
+ Math.log(maxZoom / exports.TIMELINE_MIN_ZOOM);
30
+ return Math.round(t * TIMELINE_ZOOM_SLIDER_MAX);
31
+ };
32
+ exports.timelineZoomToSliderValue = timelineZoomToSliderValue;
33
+ const sliderValueToTimelineZoom = ({ sliderValue, maxZoom, }) => {
34
+ if (maxZoom <= exports.TIMELINE_MIN_ZOOM) {
35
+ return exports.TIMELINE_MIN_ZOOM;
36
+ }
37
+ const t = sliderValue / TIMELINE_ZOOM_SLIDER_MAX;
38
+ return exports.TIMELINE_MIN_ZOOM * (maxZoom / exports.TIMELINE_MIN_ZOOM) ** t;
39
+ };
40
+ exports.sliderValueToTimelineZoom = sliderValueToTimelineZoom;
41
+ exports.TIMELINE_ZOOM_SLIDER_PROPS = {
42
+ min: 0,
43
+ max: TIMELINE_ZOOM_SLIDER_MAX,
44
+ step: 1,
45
+ };
@@ -65,14 +65,14 @@ const makeDefaultGlobalCSS = () => {
65
65
  }
66
66
 
67
67
  .__remotion-composition-selector-item:focus,
68
- .__remotion-inspector-inline-action:focus,
68
+ .__remotion-inspector-quick-action:focus,
69
69
  .__remotion-inspector-section-title:focus {
70
70
  outline: none;
71
71
  box-shadow: none;
72
72
  }
73
73
 
74
74
  .__remotion-composition-selector-item:focus-visible,
75
- .__remotion-inspector-inline-action:focus-visible,
75
+ .__remotion-inspector-quick-action:focus-visible,
76
76
  .__remotion-inspector-section-title:focus-visible {
77
77
  box-shadow: ${colors_1.FOCUS_BOX_SHADOW};
78
78
  }
@@ -1,2 +1,2 @@
1
- export declare const renderHumanReadableAudioCodec: (codec: "aac" | "ac3" | "alaw" | "eac3" | "flac" | "mp3" | "opus" | "pcm-f32" | "pcm-f32be" | "pcm-f64" | "pcm-f64be" | "pcm-s16" | "pcm-s16be" | "pcm-s24" | "pcm-s24be" | "pcm-s32" | "pcm-s32be" | "pcm-s8" | "pcm-u8" | "ulaw" | "vorbis" | null) => string;
1
+ export declare const renderHumanReadableAudioCodec: (codec: "aac" | "ac3" | "alaw" | "dts" | "eac3" | "flac" | "mp3" | "opus" | "pcm-f32" | "pcm-f32be" | "pcm-f64" | "pcm-f64be" | "pcm-s16" | "pcm-s16be" | "pcm-s24" | "pcm-s24be" | "pcm-s32" | "pcm-s32be" | "pcm-s8" | "pcm-u8" | "ulaw" | "vorbis" | null) => string;
2
2
  export declare const renderHumanReadableVideoCodec: (codec: "av1" | "avc" | "hevc" | "prores" | "vp8" | "vp9" | null) => string;
@@ -201,6 +201,7 @@ const makeClientRetryPayload = (job) => {
201
201
  initialKeyframeIntervalInSeconds: job.type === 'client-video' ? job.keyframeIntervalInSeconds : null,
202
202
  initialMuted: job.type === 'client-video' ? job.muted : null,
203
203
  initialTransparent: job.type === 'client-video' ? job.transparent : null,
204
+ initialAllowHtmlInCanvas: job.allowHtmlInCanvas,
204
205
  initialPageResponsiveness: job.type === 'client-video' ? job.pageResponsiveness : 'disabled',
205
206
  };
206
207
  };
@@ -2,5 +2,5 @@ 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 getStudioMaxTimelineTracks: () => number;
5
+ export declare const getStudioMaxTimelineTracks: () => number | null;
6
6
  export declare const getStudioBufferStateDelayInMilliseconds: () => number;
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getStudioBufferStateDelayInMilliseconds = exports.getStudioMaxTimelineTracks = exports.getStudioKeyboardShortcutsEnabled = exports.getStudioInteractivityEnabled = exports.getStudioAskAIEnabled = exports.DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS = void 0;
4
- const studio_shared_1 = require("@remotion/studio-shared");
5
4
  exports.DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS = 300;
6
5
  const defaultStudioRuntimeConfig = {
7
6
  askAIEnabled: false,
@@ -12,6 +11,7 @@ const defaultStudioRuntimeConfig = {
12
11
  keyboardShortcutsEnabled: true,
13
12
  maxTimelineTracks: null,
14
13
  publicLicenseKey: null,
14
+ configFileStudioSettings: null,
15
15
  };
16
16
  const getStudioRuntimeConfig = () => {
17
17
  var _a;
@@ -33,8 +33,7 @@ const getStudioKeyboardShortcutsEnabled = () => {
33
33
  };
34
34
  exports.getStudioKeyboardShortcutsEnabled = getStudioKeyboardShortcutsEnabled;
35
35
  const getStudioMaxTimelineTracks = () => {
36
- var _a;
37
- return (_a = getStudioRuntimeConfig().maxTimelineTracks) !== null && _a !== void 0 ? _a : studio_shared_1.DEFAULT_TIMELINE_TRACKS;
36
+ return getStudioRuntimeConfig().maxTimelineTracks;
38
37
  };
39
38
  exports.getStudioMaxTimelineTracks = getStudioMaxTimelineTracks;
40
39
  const getStudioBufferStateDelayInMilliseconds = () => {
@@ -1,5 +1,5 @@
1
1
  import { type AnySchemaFieldInfo, type DragOverrides, type EffectSchemaFieldInfo, type InteractivitySchemaFieldInfo, type SchemaFieldGroup, type SchemaFieldGroupInfo, type PropStatuses, type SchemaFieldInfo, type SequenceControls, type SaveSequencePropSourceEdit } from '@remotion/studio-shared';
2
- import type { GetDragOverrides, GetEffectDragOverrides, InteractivitySchema as InteractivitySchemaShape, TSequence } from 'remotion';
2
+ import type { GetDragOverrides, GetEffectDragOverrides, InteractivitySchema as InteractivitySchemaShape, RuntimeValueStore, TSequence } from 'remotion';
3
3
  import type { GetIsExpanded } from '../components/ExpandedTracksProvider';
4
4
  import type { SequenceNodePathInfo } from './get-timeline-sequence-sort-key';
5
5
  export { SCHEMA_FIELD_GROUPS, getEffectFieldsToShow, getFieldsToShow, getSchemaFieldGroup, SCHEMA_FIELD_ROW_HEIGHT, } from '@remotion/studio-shared';
@@ -30,6 +30,8 @@ export type TimelineTreeNode = {
30
30
  readonly nodePathInfo: SequenceNodePathInfo;
31
31
  readonly label: string;
32
32
  readonly field: AnySchemaFieldInfo | null;
33
+ readonly runtimeValue: unknown;
34
+ readonly runtimeValueStore: RuntimeValueStore | null;
33
35
  };
34
36
  export declare const buildTimelineTree: ({ sequence, nodePathInfo, getDragOverrides, getEffectDragOverrides, propStatuses, includeTextContent, includeSourceControls, runtimeValues, }: {
35
37
  sequence: TSequence;
@@ -44,6 +44,8 @@ const buildTimelineTree = ({ sequence, nodePathInfo, getDragOverrides, getEffect
44
44
  },
45
45
  label: (_a = f.description) !== null && _a !== void 0 ? _a : f.key,
46
46
  field: f,
47
+ runtimeValue: runtimeValues === null || runtimeValues === void 0 ? void 0 : runtimeValues[f.key],
48
+ runtimeValueStore: null,
47
49
  });
48
50
  }
49
51
  }
@@ -85,6 +87,7 @@ const buildTimelineTree = ({ sequence, nodePathInfo, getDragOverrides, getEffect
85
87
  },
86
88
  children: effectFields.map((f) => {
87
89
  var _a;
90
+ var _b, _c;
88
91
  return ({
89
92
  kind: 'field',
90
93
  nodePathInfo: {
@@ -99,8 +102,10 @@ const buildTimelineTree = ({ sequence, nodePathInfo, getDragOverrides, getEffect
99
102
  numberOfSequencesWithThisNodePath: 0,
100
103
  supportsEffects,
101
104
  },
102
- label: (_a = f.description) !== null && _a !== void 0 ? _a : f.key,
105
+ label: (_b = f.description) !== null && _b !== void 0 ? _b : f.key,
103
106
  field: f,
107
+ runtimeValue: null,
108
+ runtimeValueStore: (_c = (_a = sequence.effectRuntimeValues) === null || _a === void 0 ? void 0 : _a[i]) !== null && _c !== void 0 ? _c : null,
104
109
  });
105
110
  }),
106
111
  };
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getRoute = exports.reloadUrl = exports.clearUrl = exports.replaceUrl = exports.pushUrl = exports.getUrlForRoute = void 0;
4
4
  const getUrlHandlingType = () => {
5
- if (window.remotion_isReadOnlyStudio) {
5
+ if (window.remotion_isReadOnlyStudio || window.remotion_browserStudio) {
6
6
  return 'query-string';
7
7
  }
8
8
  return 'spa';
@@ -32,7 +32,8 @@ const reloadUrl = () => {
32
32
  exports.reloadUrl = reloadUrl;
33
33
  const getRoute = () => {
34
34
  if (getUrlHandlingType() === 'query-string') {
35
- return window.location.search.substring(1);
35
+ const route = window.location.search.substring(1);
36
+ return route.startsWith('/') ? route : '';
36
37
  }
37
38
  return window.location.pathname;
38
39
  };
@@ -268,9 +268,6 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
268
268
  const { defaultEditorId, defaultEditorName } = (0, use_default_editor_info_1.useEditorOpening)(type === 'connected');
269
269
  const keyboardShortcutsDisabled = (0, use_keybinding_1.areKeyboardShortcutsDisabled)();
270
270
  const studioAskAIEnabled = (0, studio_runtime_config_1.getStudioAskAIEnabled)();
271
- const canConfigureDefaultEditor = !readOnlyStudio &&
272
- type === 'connected' &&
273
- (0, browser_studio_operations_1.getBrowserStudioOperations)() === null;
274
271
  const { setSidebarCollapsedState, sidebarCollapsedStateLeft, sidebarCollapsedStateRight, } = (0, react_1.useContext)(sidebar_1.SidebarContext);
275
272
  const sizes = (0, react_1.useMemo)(() => (0, SizeSelector_1.getUniqueSizes)(size), [size]);
276
273
  const isFullscreenSupported = (0, check_fullscreen_support_1.checkFullscreenSupport)();
@@ -341,7 +338,7 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
341
338
  closeMenu();
342
339
  setSelectedModal({
343
340
  type: 'settings',
344
- initialTab: canConfigureDefaultEditor ? 'apps' : 'license',
341
+ initialTab: 'rendering',
345
342
  initialPublicLicenseKey: (_b = (_a = window.remotion_renderDefaults) === null || _a === void 0 ? void 0 : _a.publicLicenseKey) !== null && _b !== void 0 ? _b : null,
346
343
  });
347
344
  },
@@ -999,7 +996,6 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
999
996
  }
1000
997
  return struct;
1001
998
  }, [
1002
- canConfigureDefaultEditor,
1003
999
  readOnlyStudio,
1004
1000
  closeMenu,
1005
1001
  type,
@@ -1,6 +1,7 @@
1
- import type { SequenceRegistrationControls } from 'remotion';
1
+ import type { RuntimeValueStore, SequenceRegistrationControls } from 'remotion';
2
2
  export declare const useRuntimeValues: (controls: SequenceRegistrationControls | null) => Readonly<Record<string, unknown>>;
3
3
  export declare const useRuntimeValue: (controls: SequenceRegistrationControls | null, key: string) => unknown;
4
+ export declare const useRuntimeStoreValue: (storeOrNull: RuntimeValueStore | null, key: string) => unknown;
4
5
  export declare const useRuntimeValueSelector: <T>({ controls, selector, isEqual, }: {
5
6
  controls: SequenceRegistrationControls | null;
6
7
  selector: (values: Readonly<Record<string, unknown>>) => T;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useRuntimeValueSnapshots = exports.useRuntimeValueSelector = exports.useRuntimeValue = exports.useRuntimeValues = void 0;
3
+ exports.useRuntimeValueSnapshots = exports.useRuntimeValueSelector = exports.useRuntimeStoreValue = exports.useRuntimeValue = exports.useRuntimeValues = void 0;
4
4
  const react_1 = require("react");
5
5
  const EMPTY_RUNTIME_VALUES = {};
6
6
  const EMPTY_RUNTIME_VALUE_STORE = {
@@ -15,11 +15,15 @@ const useRuntimeValues = (controls) => {
15
15
  exports.useRuntimeValues = useRuntimeValues;
16
16
  const useRuntimeValue = (controls, key) => {
17
17
  var _a;
18
- const store = (_a = controls === null || controls === void 0 ? void 0 : controls.runtimeValues) !== null && _a !== void 0 ? _a : EMPTY_RUNTIME_VALUE_STORE;
18
+ return (0, exports.useRuntimeStoreValue)((_a = controls === null || controls === void 0 ? void 0 : controls.runtimeValues) !== null && _a !== void 0 ? _a : null, key);
19
+ };
20
+ exports.useRuntimeValue = useRuntimeValue;
21
+ const useRuntimeStoreValue = (storeOrNull, key) => {
22
+ const store = storeOrNull !== null && storeOrNull !== void 0 ? storeOrNull : EMPTY_RUNTIME_VALUE_STORE;
19
23
  const getSnapshot = (0, react_1.useCallback)(() => store.getSnapshot()[key], [key, store]);
20
24
  return (0, react_1.useSyncExternalStore)(store.subscribe, getSnapshot, getSnapshot);
21
25
  };
22
- exports.useRuntimeValue = useRuntimeValue;
26
+ exports.useRuntimeStoreValue = useRuntimeStoreValue;
23
27
  const useRuntimeValueSelector = ({ controls, selector, isEqual = Object.is, }) => {
24
28
  var _a;
25
29
  const store = (_a = controls === null || controls === void 0 ? void 0 : controls.runtimeValues) !== null && _a !== void 0 ? _a : EMPTY_RUNTIME_VALUE_STORE;
@@ -0,0 +1,2 @@
1
+ import type { SVGProps } from 'react';
2
+ export declare const RemotionTriangleIcon: ({ color, ...props }: SVGProps<SVGSVGElement>) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RemotionTriangleIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const colors_1 = require("../helpers/colors");
6
+ const RemotionTriangleIcon = ({ color, ...props }) => (jsx_runtime_1.jsx("svg", { viewBox: "-14 -14 438 453", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: jsx_runtime_1.jsx("path", { d: "M92.3905 0.603638C83.5124 1.08554 76.358 2.49417 69.1481 5.2373C65.5523 6.59033 59.6583 9.53735 56.4148 11.5762C42.8474 20.0836 32.5051 32.8724 27.1115 47.7558C26.0365 50.7028 23.1266 60.0998 21.2546 66.5684C8.78078 109.81 1.70055 157.092 0.180713 207.135C-0.0602375 215.105 -0.0602375 234.084 0.180713 241.925C1.20012 275.102 4.36954 305.053 10.1153 335.599C12.4506 347.961 16.1946 364.568 18.3632 372.112C22.793 387.44 31.8379 400.488 44.7009 410.052C53.3195 416.465 63.1058 420.765 73.9485 422.878C79.1753 423.897 86.0702 424.361 91.1487 424.027C98.1733 423.564 112.111 421.692 123.436 419.672C174.48 410.571 221.632 394.279 264.392 370.963C291.471 356.19 314.621 340.195 336.955 320.789C359.215 301.476 378.194 280.699 394.894 257.382C398.768 251.989 400.714 248.838 402.66 244.872C407.665 234.64 410.018 224.465 410 213.085C410 202.483 407.998 193.067 403.68 183.429C401.604 178.777 399.62 175.441 395.172 169.102C378.788 145.767 360.605 125.434 338.438 105.676C304.074 75.0573 263.261 49.9428 217.685 31.3526C207.806 27.3306 198.075 23.7905 186.361 19.9538C161.562 11.8542 130.868 4.82956 104.901 1.32651C100.824 0.770477 95.2819 0.455353 92.3905 0.603638Z", stroke: color !== null && color !== void 0 ? color : colors_1.CURRENT_COLOR_LOWERCASE, strokeLinejoin: "round", strokeWidth: 24 }) }));
7
+ exports.RemotionTriangleIcon = RemotionTriangleIcon;
@@ -89,7 +89,7 @@ const DelayedSpinner = () => {
89
89
  if (!show) {
90
90
  return null;
91
91
  }
92
- return (jsx_runtime_1.jsx(remotion_1.AbsoluteFill, { style: {
92
+ return (jsx_runtime_1.jsx(remotion_1.Internals.AbsoluteFillElement, { style: {
93
93
  justifyContent: 'center',
94
94
  alignItems: 'center',
95
95
  fontSize: 13,
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ type CompositionListState = 'loading' | 'ready';
3
+ export declare const compositionListRenderedRef: {
4
+ current: boolean;
5
+ };
6
+ export declare const CompositionListContext: React.Context<{
7
+ compositionListState: CompositionListState;
8
+ setCompositionListState: React.Dispatch<React.SetStateAction<CompositionListState>>;
9
+ }>;
10
+ export declare const CompositionListProvider: React.FC<{
11
+ readonly children: React.ReactNode;
12
+ }>;
13
+ export {};
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CompositionListProvider = exports.CompositionListContext = exports.compositionListRenderedRef = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ exports.compositionListRenderedRef = { current: false };
7
+ exports.CompositionListContext = (0, react_1.createContext)({
8
+ compositionListState: 'loading',
9
+ setCompositionListState: () => {
10
+ throw new Error('CompositionListContext provider is missing');
11
+ },
12
+ });
13
+ const CompositionListProvider = ({ children }) => {
14
+ const [compositionListState, setCompositionListState] = (0, react_1.useState)(() => {
15
+ exports.compositionListRenderedRef.current = false;
16
+ return 'loading';
17
+ });
18
+ const value = (0, react_1.useMemo)(() => ({ compositionListState, setCompositionListState }), [compositionListState]);
19
+ return (jsx_runtime_1.jsx(exports.CompositionListContext.Provider, { value: value, children: children }));
20
+ };
21
+ exports.CompositionListProvider = CompositionListProvider;
@@ -31,6 +31,7 @@ export type WebRenderModalState = {
31
31
  initialTransparent: boolean | null;
32
32
  initialMuted: boolean | null;
33
33
  initialMediaCacheSizeInBytes: number | null;
34
+ initialAllowHtmlInCanvas: boolean;
34
35
  initialPageResponsiveness: WebRendererPageResponsiveness;
35
36
  };
36
37
  export type RenderModalState = {
@@ -153,7 +154,7 @@ export type ModalState = {
153
154
  type: 'input-props-override';
154
155
  } | {
155
156
  type: 'settings';
156
- initialTab: 'apps' | 'license';
157
+ initialTab: 'apps' | 'rendering' | 'studio' | 'license';
157
158
  initialPublicLicenseKey: string | null;
158
159
  } | RenderModalState | WebRenderModalState | {
159
160
  type: 'render-progress';
@@ -162,6 +163,11 @@ export type ModalState = {
162
163
  type: 'update';
163
164
  info: UpdateInfo;
164
165
  knownBugs: Bug[];
166
+ } | {
167
+ type: 'fix-computed-value';
168
+ prop: string;
169
+ context: string;
170
+ remotionInteractivitySkillAvailable: boolean;
165
171
  } | {
166
172
  type: 'install-packages';
167
173
  packageManager: PackageManager;
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
- export declare const TIMELINE_MIN_ZOOM = 1;
3
- export declare const TIMELINE_MAX_ZOOM = 5;
2
+ export { getTimelineMaxZoom, TIMELINE_MIN_ZOOM, } from '../helpers/get-timeline-max-zoom';
4
3
  export type TimelineSetZoomOptions = {
5
4
  anchorFrame: number | null;
6
5
  anchorContentX: number | null;
@@ -1,14 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TimelineZoomContext = exports.TimelineZoomCtx = exports.TIMELINE_MAX_ZOOM = exports.TIMELINE_MIN_ZOOM = void 0;
3
+ exports.TimelineZoomContext = exports.TimelineZoomCtx = exports.TIMELINE_MIN_ZOOM = exports.getTimelineMaxZoom = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const react_dom_1 = require("react-dom");
7
7
  const imperative_state_1 = require("../components/Timeline/imperative-state");
8
8
  const timeline_scroll_logic_1 = require("../components/Timeline/timeline-scroll-logic");
9
9
  const ZoomPersistor_1 = require("../components/ZoomPersistor");
10
- exports.TIMELINE_MIN_ZOOM = 1;
11
- exports.TIMELINE_MAX_ZOOM = 5;
10
+ const get_timeline_max_zoom_1 = require("../helpers/get-timeline-max-zoom");
11
+ const get_timeline_max_zoom_2 = require("../helpers/get-timeline-max-zoom");
12
+ Object.defineProperty(exports, "getTimelineMaxZoom", { enumerable: true, get: function () { return get_timeline_max_zoom_2.getTimelineMaxZoom; } });
13
+ Object.defineProperty(exports, "TIMELINE_MIN_ZOOM", { enumerable: true, get: function () { return get_timeline_max_zoom_2.TIMELINE_MIN_ZOOM; } });
12
14
  exports.TimelineZoomCtx = (0, react_1.createContext)({
13
15
  zoom: {},
14
16
  setZoom: () => {
@@ -29,8 +31,10 @@ const TimelineZoomContext = ({ children }) => {
29
31
  (0, react_dom_1.flushSync)(() => {
30
32
  setZoomState((prevZoomMap) => {
31
33
  var _a;
32
- const newZoomWithFloatingPointErrors = Math.min(exports.TIMELINE_MAX_ZOOM, Math.max(exports.TIMELINE_MIN_ZOOM, callback((_a = prevZoomMap[compositionId]) !== null && _a !== void 0 ? _a : exports.TIMELINE_MIN_ZOOM)));
33
- const newZoom = Math.round(newZoomWithFloatingPointErrors * 10) / 10;
34
+ const newZoom = (0, get_timeline_max_zoom_1.clampTimelineZoom)({
35
+ zoom: callback((_a = prevZoomMap[compositionId]) !== null && _a !== void 0 ? _a : get_timeline_max_zoom_1.TIMELINE_MIN_ZOOM),
36
+ durationInFrames: (0, imperative_state_1.getCurrentDuration)(),
37
+ });
34
38
  return { ...prevZoomMap, [compositionId]: newZoom };
35
39
  });
36
40
  });
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.513",
6
+ "version": "4.0.514",
7
7
  "description": "APIs for interacting with the Remotion Studio",
8
8
  "main": "dist",
9
9
  "scripts": {
@@ -24,19 +24,20 @@
24
24
  "react-dom": ">=16.8.0"
25
25
  },
26
26
  "dependencies": {
27
- "@remotion/studio-protocol": "4.0.513",
27
+ "@tanstack/react-virtual": "3.14.9",
28
+ "@remotion/studio-protocol": "4.0.514",
28
29
  "semver": "7.5.3",
29
- "remotion": "4.0.513",
30
- "@remotion/captions": "4.0.513",
31
- "@remotion/player": "4.0.513",
32
- "@remotion/media-utils": "4.0.513",
33
- "@remotion/renderer": "4.0.513",
34
- "@remotion/web-renderer": "4.0.513",
35
- "@remotion/studio-shared": "4.0.513",
36
- "@remotion/timeline-utils": "4.0.513",
37
- "@remotion/zod-types": "4.0.513",
30
+ "remotion": "4.0.514",
31
+ "@remotion/captions": "4.0.514",
32
+ "@remotion/player": "4.0.514",
33
+ "@remotion/media-utils": "4.0.514",
34
+ "@remotion/renderer": "4.0.514",
35
+ "@remotion/web-renderer": "4.0.514",
36
+ "@remotion/studio-shared": "4.0.514",
37
+ "@remotion/timeline-utils": "4.0.514",
38
+ "@remotion/zod-types": "4.0.514",
38
39
  "@jridgewell/trace-mapping": "0.3.31",
39
- "mediabunny": "1.50.8",
40
+ "mediabunny": "1.55.1",
40
41
  "memfs": "3.4.3",
41
42
  "open": "8.4.2",
42
43
  "zod": "4.4.3"
@@ -45,7 +46,7 @@
45
46
  "react": "19.2.3",
46
47
  "react-dom": "19.2.3",
47
48
  "@types/semver": "7.5.3",
48
- "@remotion/eslint-config-internal": "4.0.513",
49
+ "@remotion/eslint-config-internal": "4.0.514",
49
50
  "eslint": "9.19.0",
50
51
  "@typescript/native-preview": "7.0.0-dev.20260217.1"
51
52
  },