@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
@@ -0,0 +1,12 @@
1
+ export type AlignmentDirection = 'left' | 'center-h' | 'right' | 'top' | 'center-v' | 'bottom';
2
+ export declare const computeAlignedTranslate: ({ direction, elementRect, compositionRect, currentTranslateX, currentTranslateY, scale, }: {
3
+ readonly direction: AlignmentDirection;
4
+ readonly elementRect: DOMRect;
5
+ readonly compositionRect: DOMRect;
6
+ readonly currentTranslateX: number;
7
+ readonly currentTranslateY: number;
8
+ readonly scale: number;
9
+ }) => {
10
+ x: number;
11
+ y: number;
12
+ };
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.computeAlignedTranslate = void 0;
4
+ const computeAlignedTranslate = ({ direction, elementRect, compositionRect, currentTranslateX, currentTranslateY, scale, }) => {
5
+ let deltaX = 0;
6
+ let deltaY = 0;
7
+ // Note: elementRect and compositionRect are in screen space (pixels).
8
+ // We divide by scale to convert back to composition space.
9
+ switch (direction) {
10
+ case 'left':
11
+ deltaX = compositionRect.left - elementRect.left;
12
+ break;
13
+ case 'center-h': {
14
+ const compCenter = compositionRect.left + compositionRect.width / 2;
15
+ const elemCenter = elementRect.left + elementRect.width / 2;
16
+ deltaX = compCenter - elemCenter;
17
+ break;
18
+ }
19
+ case 'right':
20
+ deltaX = compositionRect.right - elementRect.right;
21
+ break;
22
+ case 'top':
23
+ deltaY = compositionRect.top - elementRect.top;
24
+ break;
25
+ case 'center-v': {
26
+ const compCenter = compositionRect.top + compositionRect.height / 2;
27
+ const elemCenter = elementRect.top + elementRect.height / 2;
28
+ deltaY = compCenter - elemCenter;
29
+ break;
30
+ }
31
+ case 'bottom':
32
+ deltaY = compositionRect.bottom - elementRect.bottom;
33
+ break;
34
+ default:
35
+ break;
36
+ }
37
+ return {
38
+ x: currentTranslateX + deltaX / scale,
39
+ y: currentTranslateY + deltaY / scale,
40
+ };
41
+ };
42
+ exports.computeAlignedTranslate = computeAlignedTranslate;
@@ -15,5 +15,6 @@ export declare const InspectorSequenceSection: React.FC<{
15
15
  readonly nodePathInfo: SequenceNodePathInfo;
16
16
  readonly keyframeDisplayOffset: number;
17
17
  readonly renderSectionHeader: (children: React.ReactNode) => React.ReactNode;
18
+ readonly renderTransformControls: () => React.ReactNode;
18
19
  }>;
19
20
  export {};
@@ -133,7 +133,7 @@ const hasSequenceControls = (sequence) => {
133
133
  return sequence.controls !== null;
134
134
  };
135
135
  exports.hasSequenceControls = hasSequenceControls;
136
- const InspectorSequenceSection = ({ sequence, validatedLocation, nodePathInfo, keyframeDisplayOffset, renderSectionHeader, }) => {
136
+ const InspectorSequenceSection = ({ sequence, validatedLocation, nodePathInfo, keyframeDisplayOffset, renderSectionHeader, renderTransformControls, }) => {
137
137
  const { tree } = (0, use_timeline_expanded_tree_1.useTimelineExpandedTree)({
138
138
  sequence,
139
139
  nodePathInfo,
@@ -222,6 +222,6 @@ const InspectorSequenceSection = ({ sequence, validatedLocation, nodePathInfo, k
222
222
  ] }));
223
223
  }
224
224
  return (jsx_runtime_1.jsxs("div", { style: container, children: [
225
- jsx_runtime_1.jsx("div", { style: styles_1.sequenceHeaderDivider }), controlRows.length > 0 ? (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionOrderProvider, { items: controlSelectableItems, children: controlGroups.map((group, i) => (jsx_runtime_1.jsxs(react_1.default.Fragment, { children: [i === 0 ? null : jsx_runtime_1.jsx("div", { style: controlsEffectsDivider }), renderSectionHeader(group.label), group.rows.map(renderRow)] }, group.id))) })) : null, showEffectsSection ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [showControlsEffectsDivider ? (jsx_runtime_1.jsx("div", { style: controlsEffectsDivider })) : null, renderEffectsHeader(), effectRows.length === 0 ? (jsx_runtime_1.jsx("div", { style: emptyState, children: "None" })) : (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionOrderProvider, { items: effectSelectableItems, children: effectRows.map(renderRow) }))] })) : null] }));
225
+ jsx_runtime_1.jsx("div", { style: styles_1.sequenceHeaderDivider }), controlRows.length > 0 ? (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionOrderProvider, { items: controlSelectableItems, children: controlGroups.map((group, i) => (jsx_runtime_1.jsxs(react_1.default.Fragment, { children: [i === 0 ? null : jsx_runtime_1.jsx("div", { style: controlsEffectsDivider }), renderSectionHeader(group.label), group.id === 'transforms' ? renderTransformControls() : null, group.rows.map(renderRow)] }, group.id))) })) : null, showEffectsSection ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [showControlsEffectsDivider ? (jsx_runtime_1.jsx("div", { style: controlsEffectsDivider })) : null, renderEffectsHeader(), effectRows.length === 0 ? (jsx_runtime_1.jsx("div", { style: emptyState, children: "None" })) : (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionOrderProvider, { items: effectSelectableItems, children: effectRows.map(renderRow) }))] })) : null] }));
226
226
  };
227
227
  exports.InspectorSequenceSection = InspectorSequenceSection;
@@ -167,6 +167,10 @@ const KeyboardShortcutsExplainer = () => {
167
167
  jsx_runtime_1.jsxs("div", { style: left, children: [
168
168
  jsx_runtime_1.jsx("kbd", { style: key, children: ShortcutHint_1.cmdOrCtrlCharacter }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.3 }), jsx_runtime_1.jsx("kbd", { style: key, children: "C" })
169
169
  ] }), jsx_runtime_1.jsx("div", { style: right, children: "Copy effects / values" })
170
+ ] }), jsx_runtime_1.jsxs(layout_1.Row, { align: "center", children: [
171
+ jsx_runtime_1.jsxs("div", { style: left, children: [
172
+ jsx_runtime_1.jsx("kbd", { style: key, children: ShortcutHint_1.cmdOrCtrlCharacter }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.3 }), jsx_runtime_1.jsx("kbd", { style: key, children: "X" })
173
+ ] }), jsx_runtime_1.jsx("div", { style: right, children: "Cut effects" })
170
174
  ] }), jsx_runtime_1.jsxs(layout_1.Row, { align: "center", children: [
171
175
  jsx_runtime_1.jsxs("div", { style: left, children: [
172
176
  jsx_runtime_1.jsx("kbd", { style: key, children: ShortcutHint_1.cmdOrCtrlCharacter }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.3 }), jsx_runtime_1.jsx("kbd", { style: key, children: "V" })
@@ -8,6 +8,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const react_dom_1 = __importDefault(require("react-dom"));
9
9
  const colors_1 = require("../helpers/colors");
10
10
  const z_index_1 = require("../state/z-index");
11
+ const InlineAction_1 = require("./InlineAction");
11
12
  const portals_1 = require("./Menu/portals");
12
13
  const CancelButton_1 = require("./NewComposition/CancelButton");
13
14
  const container = {
@@ -25,13 +26,18 @@ const buttonContainer = {
25
26
  alignItems: 'center',
26
27
  display: 'flex',
27
28
  justifyContent: 'flex-end',
29
+ paddingRight: 8,
28
30
  };
29
31
  const button = {
30
- height: 20,
31
- width: 20,
32
+ height: 16,
33
+ width: 16,
34
+ flexShrink: 0,
35
+ };
36
+ const renderCloseIcon = (color) => {
37
+ return jsx_runtime_1.jsx(CancelButton_1.CancelIcon, { style: { ...button, color } });
32
38
  };
33
39
  function MobilePanel({ children, onClose, }) {
34
40
  const { currentZIndex } = (0, z_index_1.useZIndex)();
35
41
  return react_dom_1.default.createPortal(jsx_runtime_1.jsxs("div", { style: container, children: [
36
- jsx_runtime_1.jsx("div", { style: buttonContainer, children: jsx_runtime_1.jsx(CancelButton_1.CancelButton, { style: button, onPress: onClose }) }), children] }), (0, portals_1.getPortal)(currentZIndex));
42
+ jsx_runtime_1.jsx("div", { style: buttonContainer, children: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { onClick: onClose, renderAction: renderCloseIcon, title: "Close sidebar" }) }), children] }), (0, portals_1.getPortal)(currentZIndex));
37
43
  }
@@ -26,14 +26,13 @@ const QuickSwitcher_1 = __importDefault(require("./QuickSwitcher/QuickSwitcher")
26
26
  const RenderStatusModal_1 = require("./RenderModal/RenderStatusModal");
27
27
  const ServerRenderModal_1 = require("./RenderModal/ServerRenderModal");
28
28
  const WebRenderModal_1 = require("./RenderModal/WebRenderModal");
29
- const KeyframeSettingsModal_1 = require("./Timeline/KeyframeSettingsModal");
30
29
  const UpdateModal_1 = require("./UpdateModal/UpdateModal");
31
30
  const Modals = ({ readOnlyStudio }) => {
32
31
  var _a;
33
32
  const { selectedModal: modalContextType } = (0, react_1.useContext)(modals_1.ModalsContext);
34
33
  const canRender = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).previewServerState.type ===
35
34
  'connected';
36
- return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'new-comp' && (jsx_runtime_1.jsx(NewComposition_1.NewComposition, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'new-folder' && (jsx_runtime_1.jsx(NewFolder_1.NewFolder, { parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'duplicate-comp' && (jsx_runtime_1.jsx(DuplicateComposition_1.DuplicateComposition, { compositionType: modalContextType.compositionType, compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-comp' && (jsx_runtime_1.jsx(DeleteComposition_1.DeleteComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'rename-comp' && (jsx_runtime_1.jsx(RenameComposition_1.RenameComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-folder' && (jsx_runtime_1.jsx(DeleteFolder_1.DeleteFolder, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'rename-folder' && (jsx_runtime_1.jsx(RenameFolder_1.RenameFolder, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'rename-static-file' && (jsx_runtime_1.jsx(RenameStaticFile_1.RenameStaticFileModal, { relativePath: modalContextType.relativePath })), modalContextType && modalContextType.type === 'input-props-override' && (jsx_runtime_1.jsx(OverrideInputProps_1.OverrideInputPropsModal, {})), modalContextType && modalContextType.type === 'keyframe-settings' && (jsx_runtime_1.jsx(KeyframeSettingsModal_1.KeyframeSettingsModal, { state: modalContextType })), modalContextType && modalContextType.type === 'web-render' && (jsx_runtime_1.jsx(WebRenderModal_1.WebRenderModalWithLoader, { ...modalContextType })), modalContextType &&
35
+ return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'new-comp' && (jsx_runtime_1.jsx(NewComposition_1.NewComposition, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'new-folder' && (jsx_runtime_1.jsx(NewFolder_1.NewFolder, { parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'duplicate-comp' && (jsx_runtime_1.jsx(DuplicateComposition_1.DuplicateComposition, { compositionType: modalContextType.compositionType, compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-comp' && (jsx_runtime_1.jsx(DeleteComposition_1.DeleteComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'rename-comp' && (jsx_runtime_1.jsx(RenameComposition_1.RenameComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-folder' && (jsx_runtime_1.jsx(DeleteFolder_1.DeleteFolder, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'rename-folder' && (jsx_runtime_1.jsx(RenameFolder_1.RenameFolder, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'rename-static-file' && (jsx_runtime_1.jsx(RenameStaticFile_1.RenameStaticFileModal, { relativePath: modalContextType.relativePath })), modalContextType && modalContextType.type === 'input-props-override' && (jsx_runtime_1.jsx(OverrideInputProps_1.OverrideInputPropsModal, {})), modalContextType && modalContextType.type === 'web-render' && (jsx_runtime_1.jsx(WebRenderModal_1.WebRenderModalWithLoader, { ...modalContextType })), modalContextType &&
37
36
  modalContextType.type === 'server-render' &&
38
37
  (canRender || modalContextType.readOnlyStudio) ? (jsx_runtime_1.jsx(ServerRenderModal_1.RenderModalWithLoader, { readOnlyStudio: (_a = modalContextType.readOnlyStudio) !== null && _a !== void 0 ? _a : false, initialFrame: modalContextType.initialFrame, initialDarkMode: modalContextType.initialDarkMode, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialOffthreadVideoThreads: modalContextType.initialOffthreadVideoThreads, initialMediaCacheSizeInBytes: modalContextType.initialMediaCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialGopSize: modalContextType.initialGopSize, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, initialEncodingBufferSize: modalContextType.initialEncodingBufferSize, initialEncodingMaxRate: modalContextType.initialEncodingMaxRate, initialUserAgent: modalContextType.initialUserAgent, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux, initialRepro: modalContextType.initialRepro, initialBeep: modalContextType.initialBeep, initialForSeamlessAacConcatenation: modalContextType.initialForSeamlessAacConcatenation, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec, renderTypeOfLastRender: modalContextType.renderTypeOfLastRender, defaultMetadata: modalContextType.defaulMetadata, initialHardwareAcceleration: modalContextType.initialHardwareAcceleration, initialSampleRate: modalContextType.initialSampleRate, initialChromeMode: modalContextType.initialChromeMode, renderDefaults: modalContextType.renderDefaults })) : null, modalContextType && modalContextType.type === 'render-progress' && (jsx_runtime_1.jsx(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'update' && (jsx_runtime_1.jsx(UpdateModal_1.UpdateModal, { info: modalContextType.info, knownBugs: modalContextType.knownBugs })), modalContextType && modalContextType.type === 'install-packages' && (jsx_runtime_1.jsx(InstallPackage_1.InstallPackageModal, { packageManager: modalContextType.packageManager })), modalContextType && modalContextType.type === 'quick-switcher' && (jsx_runtime_1.jsx(QuickSwitcher_1.default, { readOnlyStudio: readOnlyStudio, invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode })), modalContextType && modalContextType.type === 'add-effect' && (jsx_runtime_1.jsx(EffectPickerModal_1.EffectPickerModal, { state: modalContextType })), modalContextType && modalContextType.type === 'confirmation-dialog' && (jsx_runtime_1.jsx(ConfirmationDialog_1.ConfirmationDialog, { state: modalContextType })), (0, studio_runtime_config_1.getStudioAskAIEnabled)() && jsx_runtime_1.jsx(AskAiModal_1.AskAiModal, {})] }));
39
38
  };
@@ -1,5 +1,6 @@
1
1
  import type { SVGProps } from 'react';
2
2
  import React from 'react';
3
+ export declare const CancelIcon: React.FC<SVGProps<SVGSVGElement>>;
3
4
  export declare const CancelButton: React.FC<SVGProps<SVGSVGElement> & {
4
5
  readonly onPress: () => void;
5
6
  }>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CancelButton = void 0;
3
+ exports.CancelButton = exports.CancelIcon = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const colors_1 = require("../../helpers/colors");
6
6
  const z_index_1 = require("../../state/z-index");
@@ -14,8 +14,12 @@ const style = {
14
14
  justifyContent: 'center',
15
15
  alignItems: 'center',
16
16
  };
17
+ const CancelIcon = (props) => {
18
+ return (jsx_runtime_1.jsx("svg", { viewBox: "0 0 320 512", ...props, children: jsx_runtime_1.jsx("path", { fill: colors_1.CURRENT_COLOR, d: "M207.6 256l107.72-107.72c6.23-6.23 6.23-16.34 0-22.58l-25.03-25.03c-6.23-6.23-16.34-6.23-22.58 0L160 208.4 52.28 100.68c-6.23-6.23-16.34-6.23-22.58 0L4.68 125.7c-6.23 6.23-6.23 16.34 0 22.58L112.4 256 4.68 363.72c-6.23 6.23-6.23 16.34 0 22.58l25.03 25.03c6.23 6.23 16.34 6.23 22.58 0L160 303.6l107.72 107.72c6.23 6.23 16.34 6.23 22.58 0l25.03-25.03c6.23-6.23 6.23-16.34 0-22.58L207.6 256z" }) }));
19
+ };
20
+ exports.CancelIcon = CancelIcon;
17
21
  const CancelButton = ({ onPress, ...props }) => {
18
22
  const { tabIndex } = (0, z_index_1.useZIndex)();
19
- return (jsx_runtime_1.jsx("button", { tabIndex: tabIndex, style: style, type: "button", onClick: onPress, children: jsx_runtime_1.jsx("svg", { viewBox: "0 0 320 512", ...props, children: jsx_runtime_1.jsx("path", { fill: colors_1.CURRENT_COLOR, d: "M207.6 256l107.72-107.72c6.23-6.23 6.23-16.34 0-22.58l-25.03-25.03c-6.23-6.23-16.34-6.23-22.58 0L160 208.4 52.28 100.68c-6.23-6.23-16.34-6.23-22.58 0L4.68 125.7c-6.23 6.23-6.23 16.34 0 22.58L112.4 256 4.68 363.72c-6.23 6.23-6.23 16.34 0 22.58l25.03 25.03c6.23 6.23 16.34 6.23 22.58 0L160 303.6l107.72 107.72c6.23 6.23 16.34 6.23 22.58 0l25.03-25.03c6.23-6.23 6.23-16.34 0-22.58L207.6 256z" }) }) }));
23
+ return (jsx_runtime_1.jsx("button", { tabIndex: tabIndex, style: style, type: "button", onClick: onPress, children: jsx_runtime_1.jsx(exports.CancelIcon, { ...props }) }));
20
24
  };
21
25
  exports.CancelButton = CancelButton;
@@ -6,7 +6,6 @@ const react_1 = require("react");
6
6
  const remotion_1 = require("remotion");
7
7
  const colors_1 = require("../helpers/colors");
8
8
  const mobile_layout_1 = require("../helpers/mobile-layout");
9
- const show_browser_rendering_1 = require("../helpers/show-browser-rendering");
10
9
  const get_zod_if_possible_1 = require("./get-zod-if-possible");
11
10
  const InspectorPanel_1 = require("./InspectorPanel");
12
11
  const NotificationCenter_1 = require("./Notifications/NotificationCenter");
@@ -19,10 +18,7 @@ const actions_1 = require("./RenderQueue/actions");
19
18
  const RendersTab_1 = require("./RendersTab");
20
19
  const Tabs_1 = require("./Tabs");
21
20
  const localStorageKey = 'remotion.sidebarPanel';
22
- const getSelectedPanel = (renderingAvailable) => {
23
- if (!renderingAvailable) {
24
- return 'inspector';
25
- }
21
+ const getSelectedPanel = () => {
26
22
  const panel = localStorage.getItem(localStorageKey);
27
23
  if (panel === 'renders') {
28
24
  return 'renders';
@@ -38,7 +34,6 @@ const persistSelectedOptionsSidebarPanel = (panel) => {
38
34
  exports.persistSelectedOptionsSidebarPanel = persistSelectedOptionsSidebarPanel;
39
35
  const OptionsPanel = ({ readOnlyStudio }) => {
40
36
  const { props, updateProps } = (0, react_1.useContext)(remotion_1.Internals.EditorPropsContext);
41
- const renderingAvailable = !readOnlyStudio || show_browser_rendering_1.SHOW_BROWSER_RENDERING;
42
37
  const isMobileLayout = (0, mobile_layout_1.useMobileLayout)();
43
38
  const container = (0, react_1.useMemo)(() => ({
44
39
  height: '100%',
@@ -48,7 +43,7 @@ const OptionsPanel = ({ readOnlyStudio }) => {
48
43
  flexDirection: 'column',
49
44
  flex: 1,
50
45
  }), [isMobileLayout]);
51
- const [panel, setPanel] = (0, react_1.useState)(() => getSelectedPanel(renderingAvailable));
46
+ const [panel, setPanel] = (0, react_1.useState)(getSelectedPanel);
52
47
  const onInspectorSelected = (0, react_1.useCallback)(() => {
53
48
  setPanel('inspector');
54
49
  (0, exports.persistSelectedOptionsSidebarPanel)('inspector');
@@ -181,6 +176,7 @@ const OptionsPanel = ({ readOnlyStudio }) => {
181
176
  }, []);
182
177
  return (jsx_runtime_1.jsxs("div", { style: container, className: "css-reset", onPointerDown: onPointerDown, children: [
183
178
  jsx_runtime_1.jsx("div", { style: tabsContainer, children: jsx_runtime_1.jsxs(Tabs_1.Tabs, { children: [
184
- jsx_runtime_1.jsxs(Tabs_1.Tab, { selected: panel === 'inspector', onClick: onInspectorSelected, style: { justifyContent: 'space-between' }, children: ["Inspector", hasLocalModifications ? (jsx_runtime_1.jsx(SchemaResetButton_1.SchemaResetButton, { onClick: resetToOriginal })) : null] }), renderingAvailable ? (jsx_runtime_1.jsx(RendersTab_1.RendersTab, { onClick: onRendersSelected, selected: panel === 'renders' })) : null] }) }), panel === 'inspector' ? (jsx_runtime_1.jsx(InspectorPanel_1.InspectorPanel, { composition: composition, currentDefaultProps: currentDefaultProps, readOnlyStudio: readOnlyStudio, setDefaultProps: setDefaultProps })) : !renderingAvailable ? null : (jsx_runtime_1.jsx(RenderQueue_1.RenderQueue, {}))] }));
179
+ jsx_runtime_1.jsxs(Tabs_1.Tab, { selected: panel === 'inspector', onClick: onInspectorSelected, style: { justifyContent: 'space-between' }, children: ["Inspector", hasLocalModifications ? (jsx_runtime_1.jsx(SchemaResetButton_1.SchemaResetButton, { onClick: resetToOriginal })) : null] }), jsx_runtime_1.jsx(RendersTab_1.RendersTab, { onClick: onRendersSelected, selected: panel === 'renders' })
180
+ ] }) }), panel === 'inspector' ? (jsx_runtime_1.jsx(InspectorPanel_1.InspectorPanel, { composition: composition, currentDefaultProps: currentDefaultProps, readOnlyStudio: readOnlyStudio, setDefaultProps: setDefaultProps })) : (jsx_runtime_1.jsx(RenderQueue_1.RenderQueue, {}))] }));
185
181
  };
186
182
  exports.OptionsPanel = OptionsPanel;
@@ -1,2 +1,4 @@
1
1
  import React from 'react';
2
- export declare const OutlineToggle: React.FC;
2
+ export declare const OutlineToggle: React.FC<{
3
+ readonly disabled: boolean;
4
+ }>;
@@ -6,7 +6,7 @@ const react_1 = require("react");
6
6
  const colors_1 = require("../helpers/colors");
7
7
  const editor_outlines_1 = require("../state/editor-outlines");
8
8
  const ControlButton_1 = require("./ControlButton");
9
- const OutlineToggle = () => {
9
+ const OutlineToggle = ({ disabled }) => {
10
10
  const { editorShowOutlines, setEditorShowOutlines } = (0, react_1.useContext)(editor_outlines_1.EditorShowOutlinesContext);
11
11
  const onClick = (0, react_1.useCallback)(() => {
12
12
  setEditorShowOutlines((current) => !current);
@@ -15,6 +15,6 @@ const OutlineToggle = () => {
15
15
  const accessibilityLabel = editorShowOutlines
16
16
  ? 'Hide outlines'
17
17
  : 'Show outlines';
18
- return (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: accessibilityLabel, "aria-label": accessibilityLabel, onClick: onClick, children: jsx_runtime_1.jsx("svg", { style: { width: 18, height: 18 }, viewBox: "0 0 512 512", fill: color, "aria-hidden": "true", focusable: "false", children: jsx_runtime_1.jsx("path", { d: "M32 119.4C12.9 108.4 0 87.7 0 64 0 28.7 28.7 0 64 0 87.7 0 108.4 12.9 119.4 32l273.1 0c11.1-19.1 31.7-32 55.4-32 35.3 0 64 28.7 64 64 0 23.7-12.9 44.4-32 55.4l0 273.1c19.1 11.1 32 31.7 32 55.4 0 35.3-28.7 64-64 64-23.7 0-44.4-12.9-55.4-32l-273.1 0c-11.1 19.1-31.7 32-55.4 32-35.3 0-64-28.7-64-64 0-23.7 12.9-44.4 32-55.4l0-273.1zm64 0l0 273.1c9.7 5.6 17.8 13.7 23.4 23.4l273.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-273.1c-9.7-5.6-17.8-13.7-23.4-23.4L119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4z" }) }) }));
18
+ return (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: accessibilityLabel, "aria-label": accessibilityLabel, disabled: disabled, onClick: onClick, children: jsx_runtime_1.jsx("svg", { style: { width: 18, height: 18 }, viewBox: "0 0 512 512", fill: color, "aria-hidden": "true", focusable: "false", children: jsx_runtime_1.jsx("path", { d: "M32 119.4C12.9 108.4 0 87.7 0 64 0 28.7 28.7 0 64 0 87.7 0 108.4 12.9 119.4 32l273.1 0c11.1-19.1 31.7-32 55.4-32 35.3 0 64 28.7 64 64 0 23.7-12.9 44.4-32 55.4l0 273.1c19.1 11.1 32 31.7 32 55.4 0 35.3-28.7 64-64 64-23.7 0-44.4-12.9-55.4-32l-273.1 0c-11.1 19.1-31.7 32-55.4 32-35.3 0-64-28.7-64-64 0-23.7 12.9-44.4 32-55.4l0-273.1zm64 0l0 273.1c9.7 5.6 17.8 13.7 23.4 23.4l273.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-273.1c-9.7-5.6-17.8-13.7-23.4-23.4L119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4z" }) }) }));
19
19
  };
20
20
  exports.OutlineToggle = OutlineToggle;
@@ -121,7 +121,7 @@ const CompWhenItHasDimensions = ({ contentDimensions, canvasSize, canvasContent,
121
121
  if (canvasContent.type === 'output-blob') {
122
122
  return (jsx_runtime_1.jsx("div", { style: outer, children: jsx_runtime_1.jsx(RenderPreview_1.RenderPreview, { path: canvasContent.displayName, assetMetadata: assetMetadata, getBlob: canvasContent.getBlob }) }));
123
123
  }
124
- return (jsx_runtime_1.jsxs("div", { style: outer, children: [
124
+ return (jsx_runtime_1.jsxs("div", { className: "remotion-studio-composition-container", style: outer, children: [
125
125
  jsx_runtime_1.jsx(PortalContainer, { contentDimensions: contentDimensions, scale: scale, xCorrection: xCorrection, yCorrection: yCorrection }), jsx_runtime_1.jsx(SelectedOutlineOverlay_1.SelectedOutlineOverlay, { compositionHeight: contentDimensions.height, compositionWidth: contentDimensions.width, scale: scale, translationX: previewSize.translation.x, translationY: previewSize.translation.y })
126
126
  ] }));
127
127
  };
@@ -166,7 +166,7 @@ const PreviewToolbar = ({ readOnlyStudio, bufferStateDelayInMilliseconds }) => {
166
166
  ] }), jsx_runtime_1.jsx(layout_1.Flex, {}), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(SizeSelector_1.SizeSelector, {}) }), isStill || isVideoComposition ? (jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(PlaybackRateSelector_1.PlaybackRateSelector, { setPlaybackRate: setPlaybackRate, playbackRate: playbackRate }) })) : null] })), isVideoComposition ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
167
167
  jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(PlayPause_1.PlayPause, { bufferStateDelayInMilliseconds: bufferStateDelayInMilliseconds, loop: loop, playbackRate: playbackRate, muted: playerMuted }) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(LoopToggle_1.LoopToggle, { loop: loop, setLoop: setLoop }) }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(MuteToggle_1.MuteToggle, { muted: playerMuted, setMuted: setPlayerMuted }) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(TimelineInOutToggle_1.TimelineInOutPointToggle, {}) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 })
168
168
  ] })) : null, (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'composition' ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
169
- jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(CheckboardToggle_1.CheckboardToggle, {}) }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(OutlineToggle_1.OutlineToggle, {}) }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(SnappingToggle_1.SnappingToggle, {}) })
169
+ jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(CheckboardToggle_1.CheckboardToggle, {}) }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(OutlineToggle_1.OutlineToggle, { disabled: readOnlyStudio }) }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(SnappingToggle_1.SnappingToggle, { disabled: readOnlyStudio }) })
170
170
  ] })) : null, jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), canvasContent && isFullscreenSupported ? (jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(FullscreenToggle_1.FullScreenToggle, {}) })) : null, jsx_runtime_1.jsx(layout_1.Flex, {}), isMobileLayout && (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
171
171
  jsx_runtime_1.jsx(layout_1.Flex, {}), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(SizeSelector_1.SizeSelector, {}) }), isStill || isVideoComposition ? (jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(PlaybackRateSelector_1.PlaybackRateSelector, { setPlaybackRate: setPlaybackRate, playbackRate: playbackRate }) })) : null] })), jsx_runtime_1.jsxs("div", { style: sideContainer, children: [
172
172
  jsx_runtime_1.jsx(layout_1.Flex, {}), !isMobileLayout && jsx_runtime_1.jsx(FpsCounter_1.FpsCounter, { playbackSpeed: playbackRate }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 2 }), jsx_runtime_1.jsx(PreviewToolbarControl, { children: jsx_runtime_1.jsx(RenderButton_1.RenderButton, { readOnlyStudio: readOnlyStudio }) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1.5 })
@@ -11,7 +11,6 @@ const react_dom_1 = __importDefault(require("react-dom"));
11
11
  const remotion_1 = require("remotion");
12
12
  const client_id_1 = require("../helpers/client-id");
13
13
  const colors_1 = require("../helpers/colors");
14
- const show_browser_rendering_1 = require("../helpers/show-browser-rendering");
15
14
  const use_keybinding_1 = require("../helpers/use-keybinding");
16
15
  const caret_1 = require("../icons/caret");
17
16
  const render_1 = require("../icons/render");
@@ -72,9 +71,6 @@ const label = {
72
71
  };
73
72
  const RENDER_TYPE_STORAGE_KEY = 'remotion.renderType';
74
73
  const getInitialRenderType = (readOnlyStudio) => {
75
- if (!show_browser_rendering_1.SHOW_BROWSER_RENDERING) {
76
- return readOnlyStudio ? 'render-command' : 'server-render';
77
- }
78
74
  if (readOnlyStudio) {
79
75
  return 'client-render';
80
76
  }
@@ -139,30 +135,21 @@ const RenderButton = ({ readOnlyStudio, }) => {
139
135
  const connectionStatus = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx)
140
136
  .previewServerState.type;
141
137
  const canServerRender = connectionStatus === 'connected';
142
- const canRender = canServerRender || show_browser_rendering_1.SHOW_BROWSER_RENDERING || readOnlyStudio;
143
138
  const renderType = (0, react_1.useMemo)(() => {
144
139
  if (readOnlyStudio) {
145
- if (!show_browser_rendering_1.SHOW_BROWSER_RENDERING) {
146
- return 'render-command';
147
- }
148
140
  return preferredRenderType === 'render-command'
149
141
  ? 'render-command'
150
142
  : 'client-render';
151
143
  }
152
- if (connectionStatus === 'disconnected' && show_browser_rendering_1.SHOW_BROWSER_RENDERING) {
144
+ if (connectionStatus === 'disconnected') {
153
145
  return 'client-render';
154
146
  }
155
- if (!show_browser_rendering_1.SHOW_BROWSER_RENDERING) {
156
- return 'server-render';
157
- }
158
147
  return preferredRenderType;
159
148
  }, [connectionStatus, preferredRenderType, readOnlyStudio]);
160
149
  const shortcut = (0, use_keybinding_1.areKeyboardShortcutsDisabled)() ? '' : '(R)';
161
150
  const tooltip = renderType === 'render-command'
162
151
  ? 'Copy a CLI command to render this composition ' + shortcut
163
- : canRender
164
- ? 'Export the current composition ' + shortcut
165
- : 'Connect to the Studio server to render';
152
+ : 'Export the current composition ' + shortcut;
166
153
  const iconStyle = (0, react_1.useMemo)(() => {
167
154
  return {
168
155
  style: {
@@ -270,7 +257,6 @@ const RenderButton = ({ readOnlyStudio, }) => {
270
257
  initialTransparent: null,
271
258
  initialMuted: null,
272
259
  initialMediaCacheSizeInBytes: defaults.mediaCacheSizeInBytes,
273
- initialAllowHtmlInCanvas: defaults.allowHtmlInCanvas,
274
260
  initialPageResponsiveness: 'medium',
275
261
  });
276
262
  }, [video, setSelectedModal, getCurrentFrame, props, inFrame, outFrame]);
@@ -279,7 +265,7 @@ const RenderButton = ({ readOnlyStudio, }) => {
279
265
  openServerRenderModal(true);
280
266
  return;
281
267
  }
282
- if (!show_browser_rendering_1.SHOW_BROWSER_RENDERING || renderType === 'server-render') {
268
+ if (renderType === 'server-render') {
283
269
  openServerRenderModal(false);
284
270
  }
285
271
  else {
@@ -399,34 +385,24 @@ const RenderButton = ({ readOnlyStudio, }) => {
399
385
  return {
400
386
  ...splitButtonContainer,
401
387
  borderColor: colors_1.BLACK_ALPHA_60,
402
- opacity: canRender ? 1 : 0.7,
403
- cursor: canRender ? 'pointer' : 'inherit',
388
+ opacity: 1,
389
+ cursor: 'pointer',
404
390
  };
405
- }, [canRender]);
391
+ }, []);
406
392
  const renderLabel = renderType === 'server-render'
407
393
  ? 'Render'
408
394
  : renderType === 'render-command'
409
395
  ? 'Render via CLI'
410
396
  : 'Render on web';
411
- const shouldShowDropdown = (0, react_1.useMemo)(() => {
412
- if (readOnlyStudio) {
413
- return show_browser_rendering_1.SHOW_BROWSER_RENDERING;
414
- }
415
- if (!show_browser_rendering_1.SHOW_BROWSER_RENDERING) {
416
- return false;
417
- }
418
- return true;
419
- }, [readOnlyStudio]);
420
397
  if (!video) {
421
398
  return null;
422
399
  }
423
400
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
424
401
  jsx_runtime_1.jsx("button", { style: { display: 'none' }, id: "render-modal-button-server", disabled: !canServerRender, onClick: () => openServerRenderModal(false), type: "button" }), ' ', jsx_runtime_1.jsx("button", { style: { display: 'none' }, id: "render-modal-button-client", onClick: openClientRenderModal, type: "button" }), jsx_runtime_1.jsxs("div", { ref: containerRef, style: containerStyle, title: tooltip, children: [
425
- jsx_runtime_1.jsx("button", { type: "button", style: mainButtonStyle, onClick: onClick, id: "render-modal-button", disabled: !canRender, children: jsx_runtime_1.jsxs(layout_1.Row, { align: "center", style: mainButtonContent, children: [
402
+ jsx_runtime_1.jsx("button", { type: "button", style: mainButtonStyle, onClick: onClick, id: "render-modal-button", children: jsx_runtime_1.jsxs(layout_1.Row, { align: "center", style: mainButtonContent, children: [
426
403
  jsx_runtime_1.jsx(render_1.ThinRenderIcon, { fill: colors_1.CURRENT_COLOR_LOWERCASE, svgProps: iconStyle }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("span", { style: label, children: renderLabel })
427
- ] }) }), shouldShowDropdown ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
428
- jsx_runtime_1.jsx("div", { style: dividerStyle }), jsx_runtime_1.jsx("button", { ref: dropdownRef, type: "button", style: dropdownTriggerStyle, disabled: !readOnlyStudio && connectionStatus !== 'connected', className: is_menu_item_1.MENU_INITIATOR_CLASSNAME, onPointerDown: onPointerDown, onClick: onClickDropdown, children: jsx_runtime_1.jsx(caret_1.CaretDown, {}) })
429
- ] })) : null] }), portalStyle
404
+ ] }) }), jsx_runtime_1.jsx("div", { style: dividerStyle }), jsx_runtime_1.jsx("button", { ref: dropdownRef, type: "button", style: dropdownTriggerStyle, className: is_menu_item_1.MENU_INITIATOR_CLASSNAME, onPointerDown: onPointerDown, onClick: onClickDropdown, children: jsx_runtime_1.jsx(caret_1.CaretDown, {}) })
405
+ ] }), portalStyle
430
406
  ? react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { style: styles_1.fullScreenOverlay, children: jsx_runtime_1.jsx("div", { style: styles_1.outerPortal, className: "css-reset", children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onOutsideClick: onHideDropdown, onEscape: onHideDropdown, children: jsx_runtime_1.jsx("div", { style: portalStyle, onPointerDown: onMenuPointerDown, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: () => { }, onPreviousMenu: () => { }, values: dropdownValues, onHide: onHideDropdown, leaveLeftSpace: false, preselectIndex: dropdownValues.findIndex((v) => v.id === renderType), topItemCanBeUnselected: false, fixedHeight: derivedMaxHeight }) }) }) }) }), (0, portals_1.getPortal)(currentZIndex))
431
407
  : null] }));
432
408
  };
@@ -29,7 +29,6 @@ const render_modals_1 = require("./render-modals");
29
29
  const ResolveCompositionBeforeModal_1 = require("./ResolveCompositionBeforeModal");
30
30
  const use_encodable_audio_codecs_1 = require("./use-encodable-audio-codecs");
31
31
  const use_encodable_video_codecs_1 = require("./use-encodable-video-codecs");
32
- const WebRendererExperimentalBadge_1 = require("./WebRendererExperimentalBadge");
33
32
  const WebRenderModalAdvanced_1 = require("./WebRenderModalAdvanced");
34
33
  const WebRenderModalAudio_1 = require("./WebRenderModalAudio");
35
34
  const WebRenderModalBasic_1 = require("./WebRenderModalBasic");
@@ -81,7 +80,7 @@ const validateOutnameForStill = ({ outName, stillImageFormat, }) => {
81
80
  // TODO: Shortcut: Shift + R
82
81
  // TODO: Apply defaultCodec
83
82
  // TODO: Apply defaultOutName
84
- const WebRenderModal = ({ initialFrame, defaultProps, inFrameMark, outFrameMark, initialLogLevel, initialLicenseKey, initialStillImageFormat, initialDefaultOutName, initialScale, initialDelayRenderTimeout, initialMediaCacheSizeInBytes, initialContainer, initialVideoCodec, initialAudioCodec, initialAudioBitrate, initialVideoBitrate, initialHardwareAcceleration, initialKeyframeIntervalInSeconds, initialTransparent, initialMuted, initialAllowHtmlInCanvas, initialPageResponsiveness, }) => {
83
+ const WebRenderModal = ({ initialFrame, defaultProps, inFrameMark, outFrameMark, initialLogLevel, initialLicenseKey, initialStillImageFormat, initialDefaultOutName, initialScale, initialDelayRenderTimeout, initialMediaCacheSizeInBytes, initialContainer, initialVideoCodec, initialAudioCodec, initialAudioBitrate, initialVideoBitrate, initialHardwareAcceleration, initialKeyframeIntervalInSeconds, initialTransparent, initialMuted, initialPageResponsiveness, }) => {
85
84
  var _a;
86
85
  const context = (0, react_1.useContext)(ResolveCompositionBeforeModal_1.ResolvedCompositionContext);
87
86
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
@@ -125,7 +124,6 @@ const WebRenderModal = ({ initialFrame, defaultProps, inFrameMark, outFrameMark,
125
124
  const [muted, setMuted] = (0, react_1.useState)(initialMuted !== null && initialMuted !== void 0 ? initialMuted : false);
126
125
  const [scale, setScale] = (0, react_1.useState)(initialScale !== null && initialScale !== void 0 ? initialScale : 1);
127
126
  const [licenseKey, setLicenseKey] = (0, react_1.useState)(initialLicenseKey);
128
- const [allowHtmlInCanvas, setAllowHtmlInCanvas] = (0, react_1.useState)(initialAllowHtmlInCanvas !== null && initialAllowHtmlInCanvas !== void 0 ? initialAllowHtmlInCanvas : false);
129
127
  const [pageResponsiveness, setPageResponsiveness] = (0, react_1.useState)(initialPageResponsiveness !== null && initialPageResponsiveness !== void 0 ? initialPageResponsiveness : 'medium');
130
128
  const encodableAudioCodecs = (0, use_encodable_audio_codecs_1.useEncodableAudioCodecs)(container);
131
129
  const encodableVideoCodecs = (0, use_encodable_video_codecs_1.useEncodableVideoCodecs)(container);
@@ -339,7 +337,6 @@ const WebRenderModal = ({ initialFrame, defaultProps, inFrameMark, outFrameMark,
339
337
  logLevel,
340
338
  licenseKey,
341
339
  scale,
342
- allowHtmlInCanvas,
343
340
  }, compositionRef);
344
341
  }
345
342
  else {
@@ -366,7 +363,6 @@ const WebRenderModal = ({ initialFrame, defaultProps, inFrameMark, outFrameMark,
366
363
  logLevel,
367
364
  licenseKey,
368
365
  scale,
369
- allowHtmlInCanvas,
370
366
  pageResponsiveness,
371
367
  }, compositionRef);
372
368
  }
@@ -408,14 +404,13 @@ const WebRenderModal = ({ initialFrame, defaultProps, inFrameMark, outFrameMark,
408
404
  addClientStillJob,
409
405
  addClientVideoJob,
410
406
  scale,
411
- allowHtmlInCanvas,
412
407
  pageResponsiveness,
413
408
  ]);
414
409
  return (jsx_runtime_1.jsxs("div", { style: render_modals_1.outerModalStyle, children: [
415
410
  jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: `Render ${resolvedComposition.id}` }), jsx_runtime_1.jsxs("div", { style: render_modals_1.container, children: [
416
411
  jsx_runtime_1.jsx(SegmentedControl_1.SegmentedControl, { items: renderTabOptions, needsWrapping: false }), jsx_runtime_1.jsx("div", { style: render_modals_1.flexer }), jsx_runtime_1.jsxs(Button_1.Button, { autoFocus: true, onClick: onAddToQueue, style: render_modals_1.buttonStyle, disabled: !outnameValidation.valid, children: ["Render ", renderMode, jsx_runtime_1.jsx(ShortcutHint_1.ShortcutHint, { keyToPress: "\u21B5", cmdOrCtrl: true })
417
412
  ] })
418
- ] }), jsx_runtime_1.jsx("div", { style: render_modals_1.container, children: jsx_runtime_1.jsx(WebRendererExperimentalBadge_1.WebRendererExperimentalBadge, {}) }), jsx_runtime_1.jsxs("div", { style: render_modals_1.horizontalLayout, children: [
413
+ ] }), jsx_runtime_1.jsxs("div", { style: render_modals_1.horizontalLayout, children: [
419
414
  jsx_runtime_1.jsxs("div", { style: render_modals_1.leftSidebar, children: [
420
415
  jsx_runtime_1.jsxs(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'general', onClick: () => setTab('general'), children: [
421
416
  jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(file_1.FileIcon, { style: render_modals_1.icon }) }),
@@ -434,7 +429,7 @@ const WebRenderModal = ({ initialFrame, defaultProps, inFrameMark, outFrameMark,
434
429
  canUpdate: false,
435
430
  reason: 'render dialogue',
436
431
  determined: false,
437
- } })) : tab === 'picture' ? (jsx_runtime_1.jsx(WebRenderModalPicture_1.WebRenderModalPicture, { renderMode: renderMode, videoBitrate: videoBitrate, setVideoBitrate: setVideoBitrate, keyframeIntervalInSeconds: keyframeIntervalInSeconds, setKeyframeIntervalInSeconds: setKeyframeIntervalInSeconds, transparent: transparent, setTransparent: setTransparent, scale: scale, setScale: setScale, compositionWidth: resolvedComposition.width, compositionHeight: resolvedComposition.height })) : tab === 'audio' ? (jsx_runtime_1.jsx(WebRenderModalAudio_1.WebRenderModalAudio, { renderMode: renderMode, muted: muted, setMuted: setMuted, audioCodec: audioCodec, setAudioCodec: setAudioCodec, audioBitrate: audioBitrate, setAudioBitrate: setAudioBitrate, container: container, encodableCodecs: encodableAudioCodecs, effectiveAudioCodec: effectiveAudioCodec })) : tab === 'advanced' ? (jsx_runtime_1.jsx(WebRenderModalAdvanced_1.WebRenderModalAdvanced, { renderMode: renderMode, delayRenderTimeout: delayRenderTimeout, setDelayRenderTimeout: setDelayRenderTimeout, mediaCacheSizeInBytes: mediaCacheSizeInBytes, setMediaCacheSizeInBytes: setMediaCacheSizeInBytes, hardwareAcceleration: hardwareAcceleration, setHardwareAcceleration: setHardwareAcceleration, allowHtmlInCanvas: allowHtmlInCanvas, setAllowHtmlInCanvas: setAllowHtmlInCanvas, pageResponsiveness: pageResponsiveness, setPageResponsiveness: setPageResponsiveness })) : (jsx_runtime_1.jsx(WebRenderModalLicense_1.WebRenderModalLicense, { licenseKey: licenseKey, setLicenseKey: setLicenseKey, initialPublicLicenseKey: initialLicenseKey })) })
432
+ } })) : tab === 'picture' ? (jsx_runtime_1.jsx(WebRenderModalPicture_1.WebRenderModalPicture, { renderMode: renderMode, videoBitrate: videoBitrate, setVideoBitrate: setVideoBitrate, keyframeIntervalInSeconds: keyframeIntervalInSeconds, setKeyframeIntervalInSeconds: setKeyframeIntervalInSeconds, transparent: transparent, setTransparent: setTransparent, scale: scale, setScale: setScale, compositionWidth: resolvedComposition.width, compositionHeight: resolvedComposition.height })) : tab === 'audio' ? (jsx_runtime_1.jsx(WebRenderModalAudio_1.WebRenderModalAudio, { renderMode: renderMode, muted: muted, setMuted: setMuted, audioCodec: audioCodec, setAudioCodec: setAudioCodec, audioBitrate: audioBitrate, setAudioBitrate: setAudioBitrate, container: container, encodableCodecs: encodableAudioCodecs, effectiveAudioCodec: effectiveAudioCodec })) : tab === 'advanced' ? (jsx_runtime_1.jsx(WebRenderModalAdvanced_1.WebRenderModalAdvanced, { renderMode: renderMode, delayRenderTimeout: delayRenderTimeout, setDelayRenderTimeout: setDelayRenderTimeout, mediaCacheSizeInBytes: mediaCacheSizeInBytes, setMediaCacheSizeInBytes: setMediaCacheSizeInBytes, hardwareAcceleration: hardwareAcceleration, setHardwareAcceleration: setHardwareAcceleration, pageResponsiveness: pageResponsiveness, setPageResponsiveness: setPageResponsiveness })) : (jsx_runtime_1.jsx(WebRenderModalLicense_1.WebRenderModalLicense, { licenseKey: licenseKey, setLicenseKey: setLicenseKey, initialPublicLicenseKey: initialLicenseKey })) })
438
433
  ] })
439
434
  ] }));
440
435
  };
@@ -9,8 +9,6 @@ type WebRenderModalAdvancedProps = {
9
9
  readonly setMediaCacheSizeInBytes: React.Dispatch<React.SetStateAction<number | null>>;
10
10
  readonly hardwareAcceleration: 'no-preference' | 'prefer-hardware' | 'prefer-software';
11
11
  readonly setHardwareAcceleration: (value: 'no-preference' | 'prefer-hardware' | 'prefer-software') => void;
12
- readonly allowHtmlInCanvas: boolean;
13
- readonly setAllowHtmlInCanvas: React.Dispatch<React.SetStateAction<boolean>>;
14
12
  readonly pageResponsiveness: WebRendererPageResponsiveness;
15
13
  readonly setPageResponsiveness: React.Dispatch<React.SetStateAction<WebRendererPageResponsiveness>>;
16
14
  };
@@ -30,7 +30,7 @@ const PageResponsivenessDescription = () => {
30
30
  " to give the browser more chances to update."] })
31
31
  ] }));
32
32
  };
33
- const WebRenderModalAdvanced = ({ renderMode, delayRenderTimeout, setDelayRenderTimeout, mediaCacheSizeInBytes, setMediaCacheSizeInBytes, hardwareAcceleration, setHardwareAcceleration, allowHtmlInCanvas, setAllowHtmlInCanvas, pageResponsiveness, setPageResponsiveness, }) => {
33
+ const WebRenderModalAdvanced = ({ renderMode, delayRenderTimeout, setDelayRenderTimeout, mediaCacheSizeInBytes, setMediaCacheSizeInBytes, hardwareAcceleration, setHardwareAcceleration, pageResponsiveness, setPageResponsiveness, }) => {
34
34
  const toggleCustomMediaCacheSizeInBytes = (0, react_1.useCallback)(() => {
35
35
  setMediaCacheSizeInBytes((previous) => {
36
36
  if (previous === null) {
@@ -39,9 +39,6 @@ const WebRenderModalAdvanced = ({ renderMode, delayRenderTimeout, setDelayRender
39
39
  return null;
40
40
  });
41
41
  }, [setMediaCacheSizeInBytes]);
42
- const toggleAllowHtmlInCanvas = (0, react_1.useCallback)(() => {
43
- setAllowHtmlInCanvas((prev) => !prev);
44
- }, [setAllowHtmlInCanvas]);
45
42
  const changeMediaCacheSizeInBytes = (0, react_1.useCallback)((cb) => {
46
43
  setMediaCacheSizeInBytes((prev) => {
47
44
  if (prev === null) {
@@ -163,11 +160,7 @@ const WebRenderModalAdvanced = ({ renderMode, delayRenderTimeout, setDelayRender
163
160
  ] }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(Checkbox_1.Checkbox, { checked: mediaCacheSizeInBytes !== null, onChange: toggleCustomMediaCacheSizeInBytes, name: "media-cache-size" }) })
164
161
  ] }), mediaCacheSizeInBytes === null ? null : (jsx_runtime_1.jsx(NumberSetting_1.NumberSetting, { name: "@remotion/media cache size", formatter: (w) => `${w} bytes`, min: 0, max: 10000000000, step: 10 * 1024 * 1024, value: mediaCacheSizeInBytes, onValueChanged: changeMediaCacheSizeInBytes })), renderMode === 'video' ? (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
165
162
  jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Hardware Acceleration" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: hardwareAccelerationOptions, selectedId: hardwareAcceleration, title: "Hardware Acceleration" }) })
166
- ] })) : null, jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
167
- jsx_runtime_1.jsxs("div", { style: layout_2.label, children: ["Allow HTML-in-canvas ",
168
- jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(OptionExplainerBubble_1.WebRendererOptionExplainerBubble, { apiName: "allowHtmlInCanvas", id: "allowHtmlInCanvasOption" })
169
- ] }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(Checkbox_1.Checkbox, { checked: allowHtmlInCanvas, onChange: toggleAllowHtmlInCanvas, name: "allow-html-in-canvas" }) })
170
- ] }), renderMode === 'still' ? null : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
163
+ ] })) : null, renderMode === 'still' ? null : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
171
164
  jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
172
165
  jsx_runtime_1.jsxs("div", { style: layout_2.label, children: ["Page Responsiveness ",
173
166
  jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(OptionExplainerBubble_1.WebRendererCustomOptionExplainerBubble, { apiName: "pageResponsiveness", description: jsx_runtime_1.jsx(PageResponsivenessDescription, {}), docLink: "https://www.remotion.dev/docs/client-side-rendering/page-responsiveness", name: "Page responsiveness" })
@@ -44,7 +44,6 @@ const ClientRenderQueueProcessor = () => {
44
44
  licenseKey: (_b = job.licenseKey) !== null && _b !== void 0 ? _b : undefined,
45
45
  scale: job.scale,
46
46
  signal,
47
- allowHtmlInCanvas: job.allowHtmlInCanvas,
48
47
  })).blob({ format: job.imageFormat });
49
48
  return {
50
49
  getBlob: () => Promise.resolve(blob),
@@ -97,7 +96,6 @@ const ClientRenderQueueProcessor = () => {
97
96
  },
98
97
  outputTarget: 'web-fs',
99
98
  licenseKey: (_c = job.licenseKey) !== null && _c !== void 0 ? _c : undefined,
100
- allowHtmlInCanvas: job.allowHtmlInCanvas,
101
99
  pageResponsiveness: job.pageResponsiveness,
102
100
  });
103
101
  return {
@@ -40,7 +40,6 @@ type ClientRenderJobBase = {
40
40
  logLevel: LogLevel;
41
41
  licenseKey: string | null;
42
42
  scale: number;
43
- allowHtmlInCanvas: boolean;
44
43
  };
45
44
  export type ClientStillRenderJob = ClientRenderJobBase & {
46
45
  type: 'client-still';
@@ -37,9 +37,7 @@ exports.RenderQueue = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const react_1 = __importStar(require("react"));
39
39
  const remotion_1 = require("remotion");
40
- const client_id_1 = require("../../helpers/client-id");
41
40
  const colors_1 = require("../../helpers/colors");
42
- const show_browser_rendering_1 = require("../../helpers/show-browser-rendering");
43
41
  const layout_1 = require("../layout");
44
42
  const is_menu_item_1 = require("../Menu/is-menu-item");
45
43
  const context_1 = require("./context");
@@ -69,8 +67,6 @@ const renderQueue = {
69
67
  overflowY: 'auto',
70
68
  };
71
69
  const RenderQueue = () => {
72
- const connectionStatus = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx)
73
- .previewServerState.type;
74
70
  const { jobs } = (0, react_1.useContext)(context_1.RenderQueueContext);
75
71
  const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
76
72
  const previousJobCount = react_1.default.useRef(jobs.length);
@@ -103,11 +99,6 @@ const RenderQueue = () => {
103
99
  }
104
100
  return -1;
105
101
  }, [canvasContent, jobs]);
106
- if (connectionStatus === 'disconnected' && !show_browser_rendering_1.SHOW_BROWSER_RENDERING) {
107
- return (jsx_runtime_1.jsxs("div", { style: explainer, children: [
108
- jsx_runtime_1.jsx(layout_1.Spacing, { y: 5 }), jsx_runtime_1.jsx("div", { style: errorExplanation, children: "The studio server has disconnected." }), jsx_runtime_1.jsx(layout_1.Spacing, { y: 2, block: true })
109
- ] }));
110
- }
111
102
  if (jobCount === 0) {
112
103
  return (jsx_runtime_1.jsxs("div", { style: explainer, children: [
113
104
  jsx_runtime_1.jsx(layout_1.Spacing, { y: 5 }), jsx_runtime_1.jsx("div", { style: errorExplanation, children: "No renders in the queue." }), jsx_runtime_1.jsx(layout_1.Spacing, { y: 2, block: true })