@remotion/studio 4.0.489 → 4.0.491

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 (109) hide show
  1. package/dist/components/Canvas.js +20 -2
  2. package/dist/components/CurrentComposition.js +4 -1
  3. package/dist/components/EditorContent.js +1 -1
  4. package/dist/components/GlobalKeybindings.d.ts +1 -3
  5. package/dist/components/GlobalKeybindings.js +2 -9
  6. package/dist/components/InspectorLocationCopy.d.ts +7 -0
  7. package/dist/components/InspectorLocationCopy.js +65 -0
  8. package/dist/components/InspectorPanel/AlignmentControls.d.ts +5 -0
  9. package/dist/components/InspectorPanel/AlignmentControls.js +205 -0
  10. package/dist/components/InspectorPanel/EasingInspector.js +8 -2
  11. package/dist/components/InspectorPanel/KeyframeSettings.d.ts +5 -0
  12. package/dist/components/InspectorPanel/KeyframeSettings.js +142 -0
  13. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +4 -3
  14. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +2 -1
  15. package/dist/components/InspectorPanel/alignment-controls.d.ts +12 -0
  16. package/dist/components/InspectorPanel/alignment-controls.js +42 -0
  17. package/dist/components/InspectorSequenceSection.d.ts +1 -0
  18. package/dist/components/InspectorSequenceSection.js +2 -2
  19. package/dist/components/KeyboardShortcutsExplainer.js +4 -0
  20. package/dist/components/MobilePanel.js +9 -3
  21. package/dist/components/Modals.js +1 -2
  22. package/dist/components/NewComposition/CancelButton.d.ts +1 -0
  23. package/dist/components/NewComposition/CancelButton.js +6 -2
  24. package/dist/components/OptionsPanel.js +4 -8
  25. package/dist/components/OutlineToggle.d.ts +3 -1
  26. package/dist/components/OutlineToggle.js +2 -2
  27. package/dist/components/Preview.js +1 -1
  28. package/dist/components/PreviewToolbar.js +1 -1
  29. package/dist/components/RenderButton.js +9 -33
  30. package/dist/components/RenderModal/WebRenderModal.js +3 -8
  31. package/dist/components/RenderModal/WebRenderModalAdvanced.d.ts +0 -2
  32. package/dist/components/RenderModal/WebRenderModalAdvanced.js +2 -9
  33. package/dist/components/RenderQueue/ClientRenderQueueProcessor.js +0 -2
  34. package/dist/components/RenderQueue/client-side-render-types.d.ts +0 -1
  35. package/dist/components/RenderQueue/index.js +0 -9
  36. package/dist/components/SelectedOutlineElement.js +40 -38
  37. package/dist/components/SelectedOutlineOverlay.d.ts +7 -2
  38. package/dist/components/SelectedOutlineOverlay.js +249 -22
  39. package/dist/components/SnappingToggle.d.ts +3 -1
  40. package/dist/components/SnappingToggle.js +2 -2
  41. package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +20 -1
  42. package/dist/components/Timeline/TimelineClipboardKeybindings.js +304 -155
  43. package/dist/components/Timeline/TimelineEffectPropItem.js +9 -61
  44. package/dist/components/Timeline/TimelineFieldLabel.d.ts +1 -0
  45. package/dist/components/Timeline/TimelineFieldLabel.js +4 -2
  46. package/dist/components/Timeline/TimelineFieldRowContent.d.ts +8 -0
  47. package/dist/components/Timeline/TimelineFieldRowContent.js +16 -0
  48. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +1 -1
  49. package/dist/components/Timeline/TimelineRowChrome.js +2 -0
  50. package/dist/components/Timeline/TimelineSequence.js +2 -4
  51. package/dist/components/Timeline/TimelineSequenceItem.js +6 -9
  52. package/dist/components/Timeline/TimelineSequenceName.js +1 -3
  53. package/dist/components/Timeline/TimelineSequencePropItem.js +10 -59
  54. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +2 -0
  55. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +18 -6
  56. package/dist/components/Timeline/TimelineTextContentField.js +12 -5
  57. package/dist/components/Timeline/TimelineVideoInfo.d.ts +3 -1
  58. package/dist/components/Timeline/TimelineVideoInfo.js +11 -4
  59. package/dist/components/Timeline/delete-selected-timeline-item.js +4 -5
  60. package/dist/components/Timeline/effects-clipboard.d.ts +14 -0
  61. package/dist/components/Timeline/effects-clipboard.js +68 -0
  62. package/dist/components/Timeline/get-sequence-context-menu-items.js +37 -0
  63. package/dist/components/Timeline/get-timeline-media-start-frame.d.ts +6 -0
  64. package/dist/components/Timeline/get-timeline-media-start-frame.js +15 -0
  65. package/dist/components/Timeline/sequence-props-subscription-store.d.ts +3 -2
  66. package/dist/components/Timeline/sequence-props-subscription-store.js +4 -2
  67. package/dist/components/Timeline/timeline-field-row-layout.d.ts +1 -0
  68. package/dist/components/Timeline/timeline-field-row-layout.js +8 -1
  69. package/dist/components/Timeline/timeline-row-layout.d.ts +1 -1
  70. package/dist/components/Timeline/timeline-row-layout.js +1 -1
  71. package/dist/components/Timeline/use-sequence-props-subscription.js +10 -1
  72. package/dist/components/import-assets.d.ts +5 -0
  73. package/dist/components/import-assets.js +10 -2
  74. package/dist/components/selected-outline-measurement.d.ts +4 -0
  75. package/dist/components/selected-outline-measurement.js +3 -1
  76. package/dist/components/selected-outline-types.d.ts +1 -6
  77. package/dist/esm/{chunk-jrta3xaf.js → chunk-9wh9k3jj.js} +10393 -9551
  78. package/dist/esm/index.mjs +0 -1
  79. package/dist/esm/internals.mjs +10393 -9551
  80. package/dist/esm/previewEntry.mjs +7603 -6761
  81. package/dist/esm/renderEntry.mjs +1 -1
  82. package/dist/helpers/format-file-location.d.ts +5 -0
  83. package/dist/helpers/format-file-location.js +9 -1
  84. package/dist/helpers/install-required-package.d.ts +1 -0
  85. package/dist/helpers/install-required-package.js +3 -2
  86. package/dist/helpers/retry-payload.js +0 -1
  87. package/dist/helpers/studio-runtime-config.d.ts +0 -1
  88. package/dist/helpers/studio-runtime-config.js +1 -6
  89. package/dist/helpers/use-menu-structure.js +15 -18
  90. package/dist/icons/align-bottom.d.ts +3 -0
  91. package/dist/icons/align-bottom.js +12 -0
  92. package/dist/icons/align-center-horizontal.d.ts +3 -0
  93. package/dist/icons/align-center-horizontal.js +12 -0
  94. package/dist/icons/align-center-vertical.d.ts +3 -0
  95. package/dist/icons/align-center-vertical.js +12 -0
  96. package/dist/icons/align-left.d.ts +3 -0
  97. package/dist/icons/align-left.js +12 -0
  98. package/dist/icons/align-right.d.ts +3 -0
  99. package/dist/icons/align-right.js +12 -0
  100. package/dist/icons/align-top.d.ts +3 -0
  101. package/dist/icons/align-top.js +12 -0
  102. package/dist/state/modals.d.ts +1 -3
  103. package/package.json +11 -11
  104. package/dist/components/RenderModal/WebRendererExperimentalBadge.d.ts +0 -1
  105. package/dist/components/RenderModal/WebRendererExperimentalBadge.js +0 -35
  106. package/dist/components/Timeline/KeyframeSettingsModal.d.ts +0 -15
  107. package/dist/components/Timeline/KeyframeSettingsModal.js +0 -151
  108. package/dist/helpers/show-browser-rendering.d.ts +0 -1
  109. package/dist/helpers/show-browser-rendering.js +0 -5
@@ -212,7 +212,7 @@ var renderContent = (Root) => {
212
212
  renderToDOM(/* @__PURE__ */ jsx("div", {
213
213
  children: /* @__PURE__ */ jsx(DelayedSpinner, {})
214
214
  }));
215
- import("./chunk-jrta3xaf.js").then(({ StudioInternals }) => {
215
+ import("./chunk-9wh9k3jj.js").then(({ StudioInternals }) => {
216
216
  window.remotion_isStudio = true;
217
217
  window.remotion_isReadOnlyStudio = true;
218
218
  window.remotion_inputProps = "{}";
@@ -6,4 +6,9 @@ export declare const formatFileLocation: ({ location, root, }: {
6
6
  readonly location: FileLocation | null;
7
7
  readonly root: string;
8
8
  }) => string | null;
9
+ export declare const formatLocationForAgents: ({ name, location, root, }: {
10
+ readonly name: string | null;
11
+ readonly location: FileLocation | null;
12
+ readonly root: string;
13
+ }) => string | null;
9
14
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatFileLocation = void 0;
3
+ exports.formatLocationForAgents = exports.formatFileLocation = void 0;
4
4
  const normalizeSlashes = (path) => path.replace(/\\/g, '/');
5
5
  const stripTrailingSlashes = (path) => path.replace(/\/+$/, '');
6
6
  const stripLeadingDotSlash = (path) => path.replace(/^\.\/+/, '');
@@ -25,3 +25,11 @@ const formatFileLocation = ({ location, root, }) => {
25
25
  return `${stripLeadingDotSlash(relativeSource)}:${location.line}`;
26
26
  };
27
27
  exports.formatFileLocation = formatFileLocation;
28
+ const formatLocationForAgents = ({ name, location, root, }) => {
29
+ const fileLocation = (0, exports.formatFileLocation)({ location, root });
30
+ if (!name || !fileLocation) {
31
+ return null;
32
+ }
33
+ return `${name} in ${fileLocation}`;
34
+ };
35
+ exports.formatLocationForAgents = formatLocationForAgents;
@@ -1 +1,2 @@
1
+ export declare const getMissingPackages: (packageNames: string[]) => string[];
1
2
  export declare const installRequiredPackages: (packageNames: string[]) => Promise<void>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.installRequiredPackages = void 0;
3
+ exports.installRequiredPackages = exports.getMissingPackages = void 0;
4
4
  const install_package_1 = require("../api/install-package");
5
5
  const NotificationCenter_1 = require("../components/Notifications/NotificationCenter");
6
6
  let installQueue = Promise.resolve();
@@ -10,6 +10,7 @@ const getMissingPackages = (packageNames) => {
10
10
  const installedPackages = (_a = window.remotion_installedPackages) !== null && _a !== void 0 ? _a : [];
11
11
  return uniquePackageNames.filter((packageName) => !installedPackages.includes(packageName));
12
12
  };
13
+ exports.getMissingPackages = getMissingPackages;
13
14
  const addInstalledPackages = (packageNames) => {
14
15
  var _a;
15
16
  const installedPackages = (_a = window.remotion_installedPackages) !== null && _a !== void 0 ? _a : [];
@@ -23,7 +24,7 @@ const formatPackageList = (packageNames) => {
23
24
  };
24
25
  const installRequiredPackages = async (packageNames) => {
25
26
  const runInstall = async () => {
26
- const missingPackages = getMissingPackages(packageNames);
27
+ const missingPackages = (0, exports.getMissingPackages)(packageNames);
27
28
  if (missingPackages.length === 0) {
28
29
  return;
29
30
  }
@@ -202,7 +202,6 @@ const makeClientRetryPayload = (job) => {
202
202
  initialKeyframeIntervalInSeconds: job.type === 'client-video' ? job.keyframeIntervalInSeconds : null,
203
203
  initialMuted: job.type === 'client-video' ? job.muted : null,
204
204
  initialTransparent: job.type === 'client-video' ? job.transparent : null,
205
- initialAllowHtmlInCanvas: job.allowHtmlInCanvas,
206
205
  initialPageResponsiveness: job.type === 'client-video' ? job.pageResponsiveness : 'disabled',
207
206
  };
208
207
  };
@@ -2,6 +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 getStudioExperimentalClientSideRenderingEnabled: () => boolean;
6
5
  export declare const getStudioMaxTimelineTracks: () => number;
7
6
  export declare const getStudioBufferStateDelayInMilliseconds: () => number;
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getStudioBufferStateDelayInMilliseconds = exports.getStudioMaxTimelineTracks = exports.getStudioExperimentalClientSideRenderingEnabled = exports.getStudioKeyboardShortcutsEnabled = exports.getStudioInteractivityEnabled = exports.getStudioAskAIEnabled = exports.DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS = void 0;
3
+ exports.getStudioBufferStateDelayInMilliseconds = exports.getStudioMaxTimelineTracks = exports.getStudioKeyboardShortcutsEnabled = exports.getStudioInteractivityEnabled = exports.getStudioAskAIEnabled = exports.DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS = void 0;
4
4
  const studio_shared_1 = require("@remotion/studio-shared");
5
5
  exports.DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS = 300;
6
6
  const defaultStudioRuntimeConfig = {
7
7
  askAIEnabled: false,
8
8
  bufferStateDelayInMilliseconds: null,
9
- experimentalClientSideRenderingEnabled: false,
10
9
  interactivityEnabled: true,
11
10
  keyboardShortcutsEnabled: true,
12
11
  maxTimelineTracks: null,
@@ -30,10 +29,6 @@ const getStudioKeyboardShortcutsEnabled = () => {
30
29
  return getStudioRuntimeConfig().keyboardShortcutsEnabled;
31
30
  };
32
31
  exports.getStudioKeyboardShortcutsEnabled = getStudioKeyboardShortcutsEnabled;
33
- const getStudioExperimentalClientSideRenderingEnabled = () => {
34
- return getStudioRuntimeConfig().experimentalClientSideRenderingEnabled;
35
- };
36
- exports.getStudioExperimentalClientSideRenderingEnabled = getStudioExperimentalClientSideRenderingEnabled;
37
32
  const getStudioMaxTimelineTracks = () => {
38
33
  var _a;
39
34
  return (_a = getStudioRuntimeConfig().maxTimelineTracks) !== null && _a !== void 0 ? _a : studio_shared_1.DEFAULT_TIMELINE_TRACKS;
@@ -31,7 +31,6 @@ const get_git_menu_item_1 = require("./get-git-menu-item");
31
31
  const mobile_layout_1 = require("./mobile-layout");
32
32
  const open_in_editor_1 = require("./open-in-editor");
33
33
  const pick_color_1 = require("./pick-color");
34
- const show_browser_rendering_1 = require("./show-browser-rendering");
35
34
  const studio_runtime_config_1 = require("./studio-runtime-config");
36
35
  const use_keybinding_1 = require("./use-keybinding");
37
36
  const openExternal = (link) => {
@@ -109,23 +108,21 @@ const getFileMenu = ({ readOnlyStudio, closeMenu, previewServerState, setSelecte
109
108
  subMenu: null,
110
109
  quickSwitcherLabel: 'Render...',
111
110
  },
112
- show_browser_rendering_1.SHOW_BROWSER_RENDERING && !readOnlyStudio
113
- ? {
114
- id: 'render-on-web',
115
- value: 'render-on-web',
116
- label: 'Render on web...',
117
- onClick: () => {
118
- closeMenu();
119
- const renderButton = document.getElementById('render-modal-button-client');
120
- renderButton.click();
121
- },
122
- type: 'item',
123
- keyHint: null,
124
- leftItem: null,
125
- subMenu: null,
126
- quickSwitcherLabel: 'Render on web...',
127
- }
128
- : null,
111
+ {
112
+ id: 'render-on-web',
113
+ value: 'render-on-web',
114
+ label: 'Render on web...',
115
+ onClick: () => {
116
+ closeMenu();
117
+ const renderButton = document.getElementById('render-modal-button-client');
118
+ renderButton.click();
119
+ },
120
+ type: 'item',
121
+ keyHint: null,
122
+ leftItem: null,
123
+ subMenu: null,
124
+ quickSwitcherLabel: 'Render on web...',
125
+ },
129
126
  !readOnlyStudio
130
127
  ? {
131
128
  type: 'divider',
@@ -0,0 +1,3 @@
1
+ import type { SVGProps } from 'react';
2
+ import React from 'react';
3
+ export declare const AlignBottomIcon: React.FC<SVGProps<SVGSVGElement>>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlignBottomIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const align_right_1 = require("./align-right");
6
+ const AlignBottomIcon = (props) => {
7
+ return (jsx_runtime_1.jsx(align_right_1.AlignRightIcon, { ...props, style: {
8
+ ...props.style,
9
+ transform: 'rotate(90deg)',
10
+ } }));
11
+ };
12
+ exports.AlignBottomIcon = AlignBottomIcon;
@@ -0,0 +1,3 @@
1
+ import type { SVGProps } from 'react';
2
+ import React from 'react';
3
+ export declare const AlignCenterHorizontalIcon: React.FC<SVGProps<SVGSVGElement>>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlignCenterHorizontalIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const AlignCenterHorizontalIcon = (props) => {
6
+ var _a;
7
+ const color = (_a = props.color) !== null && _a !== void 0 ? _a : 'currentColor';
8
+ return (jsx_runtime_1.jsxs("svg", { ...props, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
9
+ jsx_runtime_1.jsx("path", { d: "M8 2V14", stroke: color, strokeOpacity: "0.5", strokeLinecap: "square" }), jsx_runtime_1.jsx("line", { x1: "3", y1: "6", x2: "12", y2: "6", stroke: color, strokeWidth: "2" }), jsx_runtime_1.jsx("line", { x1: "4", y1: "10", x2: "11", y2: "10", stroke: color, strokeWidth: "2" })
10
+ ] }));
11
+ };
12
+ exports.AlignCenterHorizontalIcon = AlignCenterHorizontalIcon;
@@ -0,0 +1,3 @@
1
+ import type { SVGProps } from 'react';
2
+ import React from 'react';
3
+ export declare const AlignCenterVerticalIcon: React.FC<SVGProps<SVGSVGElement>>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlignCenterVerticalIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const align_center_horizontal_1 = require("./align-center-horizontal");
6
+ const AlignCenterVerticalIcon = (props) => {
7
+ return (jsx_runtime_1.jsx(align_center_horizontal_1.AlignCenterHorizontalIcon, { ...props, style: {
8
+ ...props.style,
9
+ transform: 'rotate(90deg)',
10
+ } }));
11
+ };
12
+ exports.AlignCenterVerticalIcon = AlignCenterVerticalIcon;
@@ -0,0 +1,3 @@
1
+ import type { SVGProps } from 'react';
2
+ import React from 'react';
3
+ export declare const AlignLeftIcon: React.FC<SVGProps<SVGSVGElement>>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlignLeftIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const AlignLeftIcon = (props) => {
6
+ var _a;
7
+ const color = (_a = props.color) !== null && _a !== void 0 ? _a : 'currentColor';
8
+ return (jsx_runtime_1.jsxs("svg", { ...props, viewBox: "0 0 16 16", fill: "none", children: [
9
+ jsx_runtime_1.jsx("path", { d: "M2 2L2 14", stroke: color, strokeOpacity: "0.5", strokeLinecap: "square" }), jsx_runtime_1.jsx("line", { x1: "4", y1: "6", x2: "13", y2: "6", stroke: color, strokeWidth: "2" }), jsx_runtime_1.jsx("line", { x1: "4", y1: "10", x2: "11", y2: "10", stroke: color, strokeWidth: "2" })
10
+ ] }));
11
+ };
12
+ exports.AlignLeftIcon = AlignLeftIcon;
@@ -0,0 +1,3 @@
1
+ import type { SVGProps } from 'react';
2
+ import React from 'react';
3
+ export declare const AlignRightIcon: React.FC<SVGProps<SVGSVGElement>>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlignRightIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const AlignRightIcon = (props) => {
6
+ var _a;
7
+ const color = (_a = props.color) !== null && _a !== void 0 ? _a : 'currentColor';
8
+ return (jsx_runtime_1.jsxs("svg", { ...props, viewBox: "0 0 16 16", fill: "none", children: [
9
+ jsx_runtime_1.jsx("path", { d: "M14 2V14", stroke: color, strokeOpacity: "0.5", strokeLinecap: "square" }), jsx_runtime_1.jsx("line", { x1: "3", y1: "6", x2: "12", y2: "6", stroke: color, strokeWidth: "2" }), jsx_runtime_1.jsx("line", { x1: "5", y1: "10", x2: "12", y2: "10", stroke: color, strokeWidth: "2" })
10
+ ] }));
11
+ };
12
+ exports.AlignRightIcon = AlignRightIcon;
@@ -0,0 +1,3 @@
1
+ import type { SVGProps } from 'react';
2
+ import React from 'react';
3
+ export declare const AlignTopIcon: React.FC<SVGProps<SVGSVGElement>>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlignTopIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const align_left_1 = require("./align-left");
6
+ const AlignTopIcon = (props) => {
7
+ return (jsx_runtime_1.jsx(align_left_1.AlignLeftIcon, { ...props, style: {
8
+ ...props.style,
9
+ transform: 'rotate(90deg)',
10
+ } }));
11
+ };
12
+ exports.AlignTopIcon = AlignTopIcon;
@@ -7,7 +7,6 @@ import type { SequencePropsSubscriptionKey, _InternalTypes } from 'remotion';
7
7
  import type { CompType } from '../components/NewComposition/DuplicateComposition';
8
8
  import type { QuickSwitcherMode } from '../components/QuickSwitcher/NoResults';
9
9
  import type { RenderType } from '../components/RenderModal/RenderModalAdvanced';
10
- import type { KeyframeSettingsModalState } from '../components/Timeline/KeyframeSettingsModal';
11
10
  import type { Bug, UpdateInfo } from '../components/UpdateCheck';
12
11
  export type WebRenderModalState = {
13
12
  type: 'web-render';
@@ -32,7 +31,6 @@ export type WebRenderModalState = {
32
31
  initialMuted: boolean | null;
33
32
  initialLicenseKey: string | null;
34
33
  initialMediaCacheSizeInBytes: number | null;
35
- initialAllowHtmlInCanvas: boolean;
36
34
  initialPageResponsiveness: WebRendererPageResponsiveness;
37
35
  };
38
36
  export type RenderModalState = {
@@ -138,7 +136,7 @@ export type ModalState = {
138
136
  relativePath: string;
139
137
  } | {
140
138
  type: 'input-props-override';
141
- } | KeyframeSettingsModalState | RenderModalState | WebRenderModalState | {
139
+ } | RenderModalState | WebRenderModalState | {
142
140
  type: 'render-progress';
143
141
  jobId: string;
144
142
  } | {
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.489",
6
+ "version": "4.0.491",
7
7
  "description": "APIs for interacting with the Remotion Studio",
8
8
  "main": "dist",
9
9
  "scripts": {
@@ -25,15 +25,15 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "semver": "7.5.3",
28
- "remotion": "4.0.489",
29
- "@remotion/canvas-capture": "4.0.489",
30
- "@remotion/player": "4.0.489",
31
- "@remotion/media-utils": "4.0.489",
32
- "@remotion/renderer": "4.0.489",
33
- "@remotion/web-renderer": "4.0.489",
34
- "@remotion/studio-shared": "4.0.489",
35
- "@remotion/timeline-utils": "4.0.489",
36
- "@remotion/zod-types": "4.0.489",
28
+ "remotion": "4.0.491",
29
+ "@remotion/canvas-capture": "4.0.491",
30
+ "@remotion/player": "4.0.491",
31
+ "@remotion/media-utils": "4.0.491",
32
+ "@remotion/renderer": "4.0.491",
33
+ "@remotion/web-renderer": "4.0.491",
34
+ "@remotion/studio-shared": "4.0.491",
35
+ "@remotion/timeline-utils": "4.0.491",
36
+ "@remotion/zod-types": "4.0.491",
37
37
  "@jridgewell/trace-mapping": "0.3.31",
38
38
  "mediabunny": "1.50.8",
39
39
  "memfs": "3.4.3",
@@ -44,7 +44,7 @@
44
44
  "react": "19.2.3",
45
45
  "react-dom": "19.2.3",
46
46
  "@types/semver": "7.5.3",
47
- "@remotion/eslint-config-internal": "4.0.489",
47
+ "@remotion/eslint-config-internal": "4.0.491",
48
48
  "eslint": "9.19.0",
49
49
  "@typescript/native-preview": "7.0.0-dev.20260217.1"
50
50
  },
@@ -1 +0,0 @@
1
- export declare const WebRendererExperimentalBadge: React.FC;
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WebRendererExperimentalBadge = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const colors_1 = require("../../helpers/colors");
6
- const ValidationMessage_1 = require("../NewComposition/ValidationMessage");
7
- const row = {
8
- display: 'flex',
9
- flexDirection: 'row',
10
- alignItems: 'center',
11
- justifyContent: 'center',
12
- };
13
- const text = {
14
- fontSize: 14,
15
- fontFamily: 'sans-serif',
16
- color: colors_1.LIGHT_TEXT,
17
- };
18
- const icon = {
19
- width: 14,
20
- height: 14,
21
- flexShrink: 0,
22
- fill: colors_1.WARNING_COLOR,
23
- marginRight: 8,
24
- };
25
- const link = {
26
- color: 'inherit',
27
- textDecoration: 'underline',
28
- fontSize: 14,
29
- };
30
- const WebRendererExperimentalBadge = () => {
31
- return (jsx_runtime_1.jsxs("div", { style: row, children: [
32
- jsx_runtime_1.jsx(ValidationMessage_1.WarningTriangle, { type: "warning", style: icon }), jsx_runtime_1.jsxs("div", { style: text, children: ["The Remotion Web Renderer is experimental.", ' ', jsx_runtime_1.jsx("a", { href: "https://github.com/remotion-dev/remotion/issues/5913", target: "_blank", rel: "noopener noreferrer", style: link, children: "Track progress on GitHub" }), ' ', "and discuss in the", ' ', jsx_runtime_1.jsx("a", { href: "https://remotion.dev/discord", target: "_blank", rel: "noopener noreferrer", style: link, children: "#web-renderer" }), ' ', "channel on Discord."] })
33
- ] }));
34
- };
35
- exports.WebRendererExperimentalBadge = WebRendererExperimentalBadge;
@@ -1,15 +0,0 @@
1
- import React from 'react';
2
- import type { CanUpdateSequencePropStatusKeyframed, SequencePropsSubscriptionKey, InteractivitySchema } from 'remotion';
3
- export type KeyframeSettingsModalState = {
4
- type: 'keyframe-settings';
5
- fileName: string;
6
- nodePath: SequencePropsSubscriptionKey;
7
- fieldKey: string;
8
- fieldLabel: string;
9
- status: CanUpdateSequencePropStatusKeyframed;
10
- schema: InteractivitySchema;
11
- effectIndex: number | null;
12
- };
13
- export declare const KeyframeSettingsModal: React.FC<{
14
- readonly state: KeyframeSettingsModalState;
15
- }>;
@@ -1,151 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KeyframeSettingsModal = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const remotion_1 = require("remotion");
7
- const client_id_1 = require("../../helpers/client-id");
8
- const colors_1 = require("../../helpers/colors");
9
- const modals_1 = require("../../state/modals");
10
- const Button_1 = require("../Button");
11
- const layout_1 = require("../layout");
12
- const ModalButton_1 = require("../ModalButton");
13
- const ModalFooter_1 = require("../ModalFooter");
14
- const ModalHeader_1 = require("../ModalHeader");
15
- const ComboBox_1 = require("../NewComposition/ComboBox");
16
- const DismissableModal_1 = require("../NewComposition/DismissableModal");
17
- const InputDragger_1 = require("../NewComposition/InputDragger");
18
- const call_update_keyframe_settings_1 = require("./call-update-keyframe-settings");
19
- const container = {
20
- padding: 16,
21
- width: 520,
22
- };
23
- const row = {
24
- alignItems: 'center',
25
- display: 'flex',
26
- justifyContent: 'space-between',
27
- marginBottom: 12,
28
- };
29
- const label = {
30
- fontSize: 13,
31
- };
32
- const helperText = {
33
- color: colors_1.WHITE_ALPHA_60,
34
- fontSize: 12,
35
- lineHeight: 1.4,
36
- marginTop: 4,
37
- };
38
- const comboStyle = {
39
- minWidth: 150,
40
- };
41
- const posterizeInputStyle = {
42
- backgroundColor: colors_1.INPUT_BACKGROUND,
43
- borderRadius: 4,
44
- minWidth: 64,
45
- textAlign: 'right',
46
- };
47
- const extrapolateOptions = [
48
- 'extend',
49
- 'clamp',
50
- 'identity',
51
- 'wrap',
52
- ];
53
- const labelForExtrapolate = (value) => value[0].toUpperCase() + value.slice(1);
54
- const getExtrapolateValues = (onSelect) => {
55
- return extrapolateOptions.map((value) => ({
56
- type: 'item',
57
- id: value,
58
- keyHint: null,
59
- label: labelForExtrapolate(value),
60
- leftItem: null,
61
- disabled: false,
62
- onClick: () => onSelect(value),
63
- quickSwitcherLabel: null,
64
- subMenu: null,
65
- value,
66
- }));
67
- };
68
- const KeyframeSettingsModal = ({ state }) => {
69
- var _a;
70
- const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
71
- const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
72
- const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
73
- const [left, setLeft] = (0, react_1.useState)(state.status.clamping.left);
74
- const [right, setRight] = (0, react_1.useState)(state.status.clamping.right);
75
- const [posterize, setPosterize] = (0, react_1.useState)((_a = state.status.posterize) !== null && _a !== void 0 ? _a : 0);
76
- const [saving, setSaving] = (0, react_1.useState)(false);
77
- const canEditClamping = state.status.interpolationFunction === 'interpolate';
78
- const close = (0, react_1.useCallback)(() => {
79
- setSelectedModal(null);
80
- }, [setSelectedModal]);
81
- const leftOptions = (0, react_1.useMemo)(() => getExtrapolateValues(setLeft), []);
82
- const rightOptions = (0, react_1.useMemo)(() => getExtrapolateValues(setRight), []);
83
- const onPosterizeChange = (0, react_1.useCallback)((value) => {
84
- setPosterize(Math.max(0, Math.round(value)));
85
- }, []);
86
- const posterizeFormatter = (0, react_1.useCallback)((value) => {
87
- const numericValue = Number(value);
88
- return String(Math.round(numericValue));
89
- }, []);
90
- const onSave = (0, react_1.useCallback)(() => {
91
- if (previewServerState.type !== 'connected') {
92
- return;
93
- }
94
- const settings = {
95
- type: 'settings',
96
- clamping: canEditClamping ? { left, right } : undefined,
97
- posterize: posterize <= 0 ? undefined : posterize,
98
- };
99
- setSaving(true);
100
- const promise = state.effectIndex === null
101
- ? (0, call_update_keyframe_settings_1.callUpdateSequenceKeyframeSettings)({
102
- fileName: state.fileName,
103
- nodePath: state.nodePath,
104
- fieldKey: state.fieldKey,
105
- settings,
106
- schema: state.schema,
107
- setPropStatuses,
108
- clientId: previewServerState.clientId,
109
- })
110
- : (0, call_update_keyframe_settings_1.callUpdateEffectKeyframeSettings)({
111
- fileName: state.fileName,
112
- nodePath: state.nodePath,
113
- effectIndex: state.effectIndex,
114
- fieldKey: state.fieldKey,
115
- settings,
116
- schema: state.schema,
117
- setPropStatuses,
118
- clientId: previewServerState.clientId,
119
- });
120
- promise.then(close).finally(() => {
121
- setSaving(false);
122
- });
123
- }, [
124
- canEditClamping,
125
- close,
126
- left,
127
- posterize,
128
- previewServerState,
129
- right,
130
- setPropStatuses,
131
- state,
132
- ]);
133
- const saveDisabled = saving || previewServerState.type !== 'connected';
134
- return (jsx_runtime_1.jsxs(DismissableModal_1.DismissableModal, { children: [
135
- jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: `Keyframe settings: ${state.fieldLabel}` }), jsx_runtime_1.jsxs("div", { style: container, children: [canEditClamping ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
136
- jsx_runtime_1.jsxs("div", { style: row, children: [
137
- jsx_runtime_1.jsx("div", { style: label, children: "Extrapolate left" }), jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: leftOptions, selectedId: left, title: "Extrapolate left", style: comboStyle })
138
- ] }), jsx_runtime_1.jsxs("div", { style: row, children: [
139
- jsx_runtime_1.jsx("div", { style: label, children: "Extrapolate right" }), jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: rightOptions, selectedId: right, title: "Extrapolate right", style: comboStyle })
140
- ] })
141
- ] })) : null, jsx_runtime_1.jsxs("div", { style: row, children: [
142
- jsx_runtime_1.jsxs("div", { children: [
143
- jsx_runtime_1.jsx("div", { style: label, children: "Posterize" }), jsx_runtime_1.jsx("div", { style: helperText, children: "Use 0 to turn posterization off." })
144
- ] }), jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: posterize, status: "ok", onValueChange: onPosterizeChange, onValueChangeEnd: onPosterizeChange, onTextChange: () => undefined, min: 0, step: 1, formatter: posterizeFormatter, rightAlign: true, style: posterizeInputStyle })
145
- ] })
146
- ] }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsxs(layout_1.Row, { justify: "flex-end", align: "center", children: [
147
- jsx_runtime_1.jsx(Button_1.Button, { onClick: close, children: "Cancel" }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx(ModalButton_1.ModalButton, { onClick: onSave, disabled: saveDisabled, children: "Save" })
148
- ] }) })
149
- ] }));
150
- };
151
- exports.KeyframeSettingsModal = KeyframeSettingsModal;
@@ -1 +0,0 @@
1
- export declare const SHOW_BROWSER_RENDERING: boolean;
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SHOW_BROWSER_RENDERING = void 0;
4
- const studio_runtime_config_1 = require("./studio-runtime-config");
5
- exports.SHOW_BROWSER_RENDERING = (0, studio_runtime_config_1.getStudioExperimentalClientSideRenderingEnabled)();