@remotion/cli 3.3.80 → 3.3.81

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 (64) hide show
  1. package/dist/codemods/update-default-props.js +57 -11
  2. package/dist/editor/components/CollapsedSidebarExpander.js +1 -0
  3. package/dist/editor/components/CurrentCompositionSideEffects.js +0 -1
  4. package/dist/editor/components/InlineAction.js +1 -0
  5. package/dist/editor/components/NewComposition/RemTextarea.js +4 -2
  6. package/dist/editor/components/RenderButton.js +1 -1
  7. package/dist/editor/components/RenderModal/EnvInput.d.ts +1 -0
  8. package/dist/editor/components/RenderModal/EnvInput.js +22 -2
  9. package/dist/editor/components/RenderModal/InfoTooltip.js +2 -1
  10. package/dist/editor/components/RenderModal/InlineEyeIcon.js +3 -27
  11. package/dist/editor/components/RenderModal/InlineRemoveButton.js +0 -2
  12. package/dist/editor/components/RenderModal/RenderModal.js +44 -9
  13. package/dist/editor/components/RenderModal/RenderModalAdvanced.js +6 -1
  14. package/dist/editor/components/RenderModal/RenderModalAudio.js +4 -1
  15. package/dist/editor/components/RenderModal/RenderModalBasic.js +4 -1
  16. package/dist/editor/components/RenderModal/RenderModalData.d.ts +0 -1
  17. package/dist/editor/components/RenderModal/RenderModalData.js +14 -6
  18. package/dist/editor/components/RenderModal/RenderModalEnvironmentVariables.js +8 -5
  19. package/dist/editor/components/RenderModal/RenderModalGif.js +4 -1
  20. package/dist/editor/components/RenderModal/RenderModalInput.js +1 -1
  21. package/dist/editor/components/RenderModal/RenderModalJSONInputPropsEditor.d.ts +2 -0
  22. package/dist/editor/components/RenderModal/RenderModalJSONInputPropsEditor.js +14 -3
  23. package/dist/editor/components/RenderModal/RenderModalPicture.d.ts +1 -1
  24. package/dist/editor/components/RenderModal/RenderModalPicture.js +4 -1
  25. package/dist/editor/components/RenderModal/RenderStatusModal.js +2 -1
  26. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.js +39 -5
  27. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEmptyStateGraphic.d.ts +2 -0
  28. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEmptyStateGraphic.js +15 -0
  29. package/dist/editor/components/RenderModal/SchemaEditor/SchemaLabel.js +1 -3
  30. package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayEditor.js +1 -0
  31. package/dist/editor/components/RenderModal/SchemaEditor/ZodDateEditor.js +2 -1
  32. package/dist/editor/components/RenderModal/SchemaEditor/ZodEnumEditor.d.ts +14 -0
  33. package/dist/editor/components/RenderModal/SchemaEditor/ZodEnumEditor.js +69 -0
  34. package/dist/editor/components/RenderModal/SchemaEditor/ZodErrorMessages.js +1 -1
  35. package/dist/editor/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +6 -2
  36. package/dist/editor/components/RenderModal/SchemaEditor/ZodSwitch.js +6 -1
  37. package/dist/editor/components/RenderModal/SchemaEditor/schema-serialization.d.ts +2 -0
  38. package/dist/editor/components/RenderModal/SchemaEditor/schema-serialization.js +21 -0
  39. package/dist/editor/components/RenderModal/human-readable-codec.d.ts +1 -1
  40. package/dist/editor/components/RenderModal/layout.js +0 -1
  41. package/dist/editor/components/RenderModal/out-name-checker.js +2 -1
  42. package/dist/editor/components/RenderQueue/context.d.ts +0 -1
  43. package/dist/editor/components/RenderQueue/context.js +1 -8
  44. package/dist/editor/components/RenderQueue/index.js +1 -0
  45. package/dist/editor/components/RenderToolbarIcon.d.ts +1 -1
  46. package/dist/editor/components/RenderToolbarIcon.js +5 -5
  47. package/dist/editor/components/RendersTab.js +1 -1
  48. package/dist/editor/components/RightPanel.d.ts +6 -0
  49. package/dist/editor/components/RightPanel.js +42 -4
  50. package/dist/editor/components/Tabs/index.js +1 -1
  51. package/dist/editor/helpers/convert-env-variables.js +2 -2
  52. package/dist/editor/helpers/render-modal-sections.d.ts +0 -1
  53. package/dist/editor/helpers/use-breakpoint.d.ts +1 -0
  54. package/dist/editor/helpers/use-breakpoint.js +17 -0
  55. package/dist/editor/icons/render.d.ts +3 -0
  56. package/dist/editor/icons/render.js +6 -2
  57. package/dist/preview-server/render-queue/queue.js +1 -0
  58. package/dist/render-flows/render.js +1 -5
  59. package/dist/render-flows/still.js +0 -3
  60. package/package.json +6 -6
  61. package/dist/editor/components/SidebarContent.d.ts +0 -5
  62. package/dist/editor/components/SidebarContent.js +0 -53
  63. package/dist/editor/icons/save.d.ts +0 -2
  64. package/dist/editor/icons/save.js +0 -8
@@ -1,7 +1,29 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.updateDefaultProps = void 0;
4
- const prettier_1 = require("prettier");
5
27
  const findStarter = ({ input, compositionId, }) => {
6
28
  const format1 = input.indexOf(`id="${compositionId}"`);
7
29
  if (format1 > -1) {
@@ -25,13 +47,24 @@ const findStarter = ({ input, compositionId, }) => {
25
47
  }
26
48
  throw new Error(`Could not find composition ID ${compositionId} in file`);
27
49
  };
50
+ const findEndPosition = (input, currentPosition) => {
51
+ const asConstVersion = input
52
+ .slice(currentPosition + 1)
53
+ .search(/as\sconst[ \t\n\r]+\}/);
54
+ if (asConstVersion !== -1) {
55
+ const nextEnd = input.indexOf('}', asConstVersion + currentPosition + 1);
56
+ return nextEnd - 1;
57
+ }
58
+ const next = input.indexOf('}}', currentPosition + 1);
59
+ if (next !== -1) {
60
+ return next;
61
+ }
62
+ throw new Error('Could not find end of defaultProps');
63
+ };
28
64
  const findEnder = (input, position, maxPosition) => {
29
65
  let currentPosition = position;
30
66
  while (currentPosition < maxPosition) {
31
- const next = input.indexOf('}}', currentPosition + 1);
32
- if (next === -1) {
33
- throw new Error('Could not find end of defaultProps');
34
- }
67
+ const next = findEndPosition(input, currentPosition);
35
68
  currentPosition = next;
36
69
  const nextChar = input[next + 1];
37
70
  if (nextChar === ',') {
@@ -58,14 +91,17 @@ const stringifyDefaultProps = (props) => {
58
91
  if (this[key] instanceof Date) {
59
92
  return `__REMOVEQUOTE__new Date('${new Date(this[key]).toISOString()}')__REMOVEQUOTE__`;
60
93
  }
94
+ if (typeof this[key] === 'string') {
95
+ return `${this[key]}__ADD_AS_CONST__`;
96
+ }
61
97
  return value;
62
98
  })
63
- .replace('"__REMOVEQUOTE__', '')
64
- .replace('__REMOVEQUOTE__"', '');
99
+ .replace(/"__REMOVEQUOTE__/g, '')
100
+ .replace(/__REMOVEQUOTE__"/g, '')
101
+ .replace(/__ADD_AS_CONST__"/g, '" as const');
65
102
  };
66
103
  // TODO: Add more sanity checks
67
104
  // TODO: better error messages
68
- // TODO: throw if prettier was not found
69
105
  const updateDefaultProps = async ({ input, compositionId, newDefaultProps, }) => {
70
106
  const starter = findStarter({ input, compositionId });
71
107
  const START_TOKEN = 'defaultProps={';
@@ -75,23 +111,33 @@ const updateDefaultProps = async ({ input, compositionId, newDefaultProps, }) =>
75
111
  }
76
112
  const maxEnd = findTerminators(input, starter);
77
113
  const [startPos, endPos] = findEnder(input, start + START_TOKEN.length, maxEnd);
114
+ // eslint-disable-next-line @typescript-eslint/consistent-type-imports
115
+ let prettier = null;
116
+ try {
117
+ prettier = await Promise.resolve().then(() => __importStar(require('prettier')));
118
+ }
119
+ catch (err) {
120
+ throw new Error('Cannot save default props because Prettier cannot be found in the current project.');
121
+ }
122
+ const { format, resolveConfig, resolveConfigFile } = prettier;
78
123
  const newFile = input.substring(0, startPos) +
79
124
  stringifyDefaultProps(newDefaultProps) +
80
125
  input.substring(endPos);
81
- const configFilePath = await (0, prettier_1.resolveConfigFile)();
126
+ const configFilePath = await resolveConfigFile();
82
127
  if (!configFilePath) {
83
128
  throw new Error('prettier config file not found');
84
129
  }
85
- const prettierConfig = await (0, prettier_1.resolveConfig)(configFilePath);
130
+ const prettierConfig = await resolveConfig(configFilePath);
86
131
  if (!prettierConfig) {
87
132
  throw new Error('Prettier config not found');
88
133
  }
89
- const prettified = (0, prettier_1.format)(newFile, {
134
+ const prettified = format(newFile, {
90
135
  ...prettierConfig,
91
136
  rangeStart: startPos,
92
137
  rangeEnd: endPos,
93
138
  filepath: 'test.tsx',
94
139
  plugins: [],
140
+ endOfLine: 'auto',
95
141
  });
96
142
  return prettified;
97
143
  };
@@ -6,6 +6,7 @@ const react_1 = require("react");
6
6
  const colors_1 = require("../helpers/colors");
7
7
  const caret_1 = require("../icons/caret");
8
8
  const z_index_1 = require("../state/z-index");
9
+ // TODO: Add shortcut to toggle both sidebars (similar to zen mode in vs code)
9
10
  const CollapsedSidebarExpander = ({ onExpand, direction }) => {
10
11
  const [hovered, setHovered] = (0, react_1.useState)(false);
11
12
  const { tabIndex } = (0, z_index_1.useZIndex)();
@@ -33,7 +33,6 @@ const CurrentCompositionKeybindings = () => {
33
33
  const renderButton = document.getElementById('render-modal-button');
34
34
  renderButton.click();
35
35
  }, [type, video]);
36
- // TODO: Does not work if the left sidebar is collapsed
37
36
  (0, react_1.useEffect)(() => {
38
37
  const binding = keybindings.registerKeybinding({
39
38
  event: 'keydown',
@@ -24,6 +24,7 @@ const InlineAction = ({ children, onClick }) => {
24
24
  justifyContent: 'center',
25
25
  alignItems: 'center',
26
26
  borderRadius: 3,
27
+ // TODO: Color does not get propagated to the children
27
28
  color: hovered ? 'white' : colors_1.LIGHT_TEXT,
28
29
  };
29
30
  }, [hovered]);
@@ -5,6 +5,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const colors_1 = require("../../helpers/colors");
7
7
  const z_index_1 = require("../../state/z-index");
8
+ const is_menu_item_1 = require("../Menu/is-menu-item");
8
9
  const RemInput_1 = require("../NewComposition/RemInput");
9
10
  exports.inputBaseStyle = {
10
11
  padding: `${RemInput_1.INPUT_HORIZONTAL_PADDING}px 10px`,
@@ -12,7 +13,8 @@ exports.inputBaseStyle = {
12
13
  borderStyle: 'solid',
13
14
  borderWidth: 1,
14
15
  fontSize: 14,
15
- resize: 'vertical',
16
+ resize: 'none',
17
+ overflowX: 'hidden',
16
18
  };
17
19
  const RemTextareaFRFunction = ({ status, ...props }, ref) => {
18
20
  const [isFocused, setIsFocused] = (0, react_1.useState)(false);
@@ -85,6 +87,6 @@ const RemTextareaFRFunction = ({ status, ...props }, ref) => {
85
87
  current.removeEventListener('keydown', onKeyDown);
86
88
  };
87
89
  }, [inputRef]);
88
- return ((0, jsx_runtime_1.jsx)("textarea", { ref: inputRef, tabIndex: tabIndex, ...props, style: style }));
90
+ return ((0, jsx_runtime_1.jsx)("textarea", { ref: inputRef, tabIndex: tabIndex, ...props, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, style: style }));
89
91
  };
90
92
  exports.RemTextarea = (0, react_1.forwardRef)(RemTextareaFRFunction);
@@ -68,6 +68,6 @@ const RenderButton = ({ composition, visible }) => {
68
68
  if (!visible) {
69
69
  return null;
70
70
  }
71
- return ((0, jsx_runtime_1.jsx)(InlineAction_1.InlineAction, { onClick: onClick, children: (0, jsx_runtime_1.jsx)(render_1.RenderIcon, { svgProps: iconStyle }) }));
71
+ return ((0, jsx_runtime_1.jsx)(InlineAction_1.InlineAction, { onClick: onClick, children: (0, jsx_runtime_1.jsx)(render_1.ThinRenderIcon, { svgProps: iconStyle }) }));
72
72
  };
73
73
  exports.RenderButton = RenderButton;
@@ -7,4 +7,5 @@ export declare const EnvInput: React.FC<{
7
7
  onDelete: (index: number) => void;
8
8
  index: number;
9
9
  autoFocus: boolean;
10
+ isDuplicate: boolean;
10
11
  }>;
@@ -28,6 +28,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
28
28
  const react_1 = __importStar(require("react"));
29
29
  const layout_1 = require("../layout");
30
30
  const RemInput_1 = require("../NewComposition/RemInput");
31
+ const ValidationMessage_1 = require("../NewComposition/ValidationMessage");
31
32
  const InlineEyeIcon_1 = require("./InlineEyeIcon");
32
33
  const InlineRemoveButton_1 = require("./InlineRemoveButton");
33
34
  const layout_2 = require("./layout");
@@ -35,8 +36,20 @@ const input = {
35
36
  flex: 1,
36
37
  width: '100%',
37
38
  };
38
- const EnvInput = ({ onEnvKeyChange, onEnvValChange, envKey, envVal, onDelete, index, autoFocus, }) => {
39
+ const validationStyle = {
40
+ paddingLeft: layout_2.optionRow.paddingLeft,
41
+ paddingRight: layout_2.optionRow.paddingRight,
42
+ };
43
+ const EnvInput = ({ onEnvKeyChange, onEnvValChange, envKey, envVal, onDelete, index, autoFocus, isDuplicate, }) => {
39
44
  const [showInPlainText, setShowInPlainText] = react_1.default.useState(false);
45
+ const [initialWarningKeyMissing, setKeyWarningEligible] = react_1.default.useState(() => {
46
+ return envKey.trim() === '' && envVal.trim() !== '';
47
+ });
48
+ const [initialWarningValMissing, setValueWarningEligible] = react_1.default.useState(() => {
49
+ return envKey.trim() !== '' && envVal.trim() === '';
50
+ });
51
+ const isKeyMissing = envKey.trim() === '' && initialWarningKeyMissing && envVal.trim() !== '';
52
+ const isValMissing = envVal.trim() === '' && initialWarningValMissing && envKey.trim() !== '';
40
53
  const handleDelete = (0, react_1.useCallback)(() => {
41
54
  onDelete(index);
42
55
  }, [index, onDelete]);
@@ -49,6 +62,13 @@ const EnvInput = ({ onEnvKeyChange, onEnvValChange, envKey, envVal, onDelete, in
49
62
  const handleValueChange = (0, react_1.useCallback)((e) => {
50
63
  onEnvValChange(index, e.target.value);
51
64
  }, [index, onEnvValChange]);
52
- return ((0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { status: "ok", type: "text", placeholder: "Key", style: input, value: envKey, autoFocus: autoFocus, onChange: handleKeyChange }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { status: "ok", placeholder: "Value", type: showInPlainText ? 'text' : 'password', style: input, value: envVal, onChange: handleValueChange }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1.5 }), (0, jsx_runtime_1.jsx)(InlineEyeIcon_1.InlineEyeButton, { enabled: !showInPlainText, onClick: togglePlainText }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1.5 }), (0, jsx_runtime_1.jsx)(InlineRemoveButton_1.InlineRemoveButton, { onClick: handleDelete })] }));
65
+ const makeKeyWarningEligible = (0, react_1.useCallback)(() => {
66
+ setKeyWarningEligible(true);
67
+ }, []);
68
+ const makeValueWarningEligible = (0, react_1.useCallback)(() => {
69
+ setValueWarningEligible(true);
70
+ }, []);
71
+ const isNodeEnvKey = envKey.trim() === 'NODE_ENV';
72
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { status: isNodeEnvKey || isDuplicate || isKeyMissing ? 'warning' : 'ok', type: "text", placeholder: "Key", style: input, value: envKey, onBlur: makeKeyWarningEligible, autoFocus: autoFocus, onChange: handleKeyChange }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { status: isValMissing ? 'warning' : 'ok', placeholder: "Value", type: showInPlainText ? 'text' : 'password', style: input, value: envVal, onBlur: makeValueWarningEligible, onChange: handleValueChange }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1.5 }), (0, jsx_runtime_1.jsx)(InlineEyeIcon_1.InlineEyeButton, { enabled: !showInPlainText, onClick: togglePlainText }), (0, jsx_runtime_1.jsx)(InlineRemoveButton_1.InlineRemoveButton, { onClick: handleDelete })] }), isNodeEnvKey ? ((0, jsx_runtime_1.jsx)("div", { style: validationStyle, children: (0, jsx_runtime_1.jsx)(ValidationMessage_1.ValidationMessage, { align: "flex-start", type: "warning", message: "NODE_ENV will be overwritten by Remotion during the render process." }) })) : null, isDuplicate ? ((0, jsx_runtime_1.jsx)("div", { style: validationStyle, children: (0, jsx_runtime_1.jsx)(ValidationMessage_1.ValidationMessage, { align: "flex-start", type: "warning", message: `${envKey.toUpperCase()} is already defined.` }) })) : null, isKeyMissing ? ((0, jsx_runtime_1.jsx)("div", { style: validationStyle, children: (0, jsx_runtime_1.jsx)(ValidationMessage_1.ValidationMessage, { align: "flex-start", type: "warning", message: "Key is missing." }) })) : null, isValMissing ? ((0, jsx_runtime_1.jsx)("div", { style: validationStyle, children: (0, jsx_runtime_1.jsx)(ValidationMessage_1.ValidationMessage, { align: "flex-start", type: "warning", message: "Value is missing." }) })) : null] }));
53
73
  };
54
74
  exports.EnvInput = EnvInput;
@@ -4,6 +4,7 @@ exports.InfoTooltip = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const colors_1 = require("../../helpers/colors");
7
+ const is_menu_item_1 = require("../Menu/is-menu-item");
7
8
  const styles_1 = require("../Menu/styles");
8
9
  const arrow = {
9
10
  height: 7,
@@ -34,6 +35,6 @@ const InfoTooltip = ({ children, arrowDirection }) => {
34
35
  display: 'flex',
35
36
  flexDirection: arrowDirection === 'up' ? 'column-reverse' : 'column',
36
37
  alignItems: 'flex-start',
37
- }, children: [(0, jsx_runtime_1.jsx)("div", { style: container, className: "__remotion-vertical-scrollbar", children: children }), arrowDirection === 'down' ? ((0, jsx_runtime_1.jsx)("svg", { viewBox: "0 0 14 7", style: arrowDown, children: (0, jsx_runtime_1.jsx)("path", { d: `M 14 0 L 7 7 L 0 0`, fill: colors_1.BACKGROUND, strokeLinecap: "butt", stroke: colors_1.BORDER_COLOR, strokeWidth: 0.5 }) })) : null, arrowDirection === 'up' ? ((0, jsx_runtime_1.jsx)("svg", { viewBox: "0 0 14 7", style: arrowUp, children: (0, jsx_runtime_1.jsx)("path", { d: `M 0 7 L 7 0 L 14 7`, fill: colors_1.BACKGROUND, strokeLinecap: "butt", stroke: colors_1.BORDER_COLOR, strokeWidth: 0.5 }) })) : null] }));
38
+ }, children: [(0, jsx_runtime_1.jsx)("div", { style: container, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: children }), arrowDirection === 'down' ? ((0, jsx_runtime_1.jsx)("svg", { viewBox: "0 0 14 7", style: arrowDown, children: (0, jsx_runtime_1.jsx)("path", { d: `M 14 0 L 7 7 L 0 0`, fill: colors_1.BACKGROUND, strokeLinecap: "butt", stroke: colors_1.BORDER_COLOR, strokeWidth: 0.5 }) })) : null, arrowDirection === 'up' ? ((0, jsx_runtime_1.jsx)("svg", { viewBox: "0 0 14 7", style: arrowUp, children: (0, jsx_runtime_1.jsx)("path", { d: `M 0 7 L 7 0 L 14 7`, fill: colors_1.BACKGROUND, strokeLinecap: "butt", stroke: colors_1.BORDER_COLOR, strokeWidth: 0.5 }) })) : null] }));
38
39
  };
39
40
  exports.InfoTooltip = InfoTooltip;
@@ -2,37 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.InlineEyeButton = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
5
  const colors_1 = require("../../helpers/colors");
6
+ const InlineAction_1 = require("../InlineAction");
7
7
  const clearIcon = {
8
- height: 16,
8
+ height: 14,
9
9
  color: colors_1.LIGHT_TEXT,
10
10
  };
11
11
  const InlineEyeButton = ({ onClick, enabled }) => {
12
- const [hovered, setHovered] = (0, react_1.useState)(false);
13
- const onPointerEnter = (0, react_1.useCallback)(() => {
14
- setHovered(true);
15
- }, []);
16
- const onPointerLeave = (0, react_1.useCallback)(() => {
17
- setHovered(false);
18
- }, []);
19
- const handleClick = (0, react_1.useCallback)((e) => {
20
- e.preventDefault();
21
- onClick();
22
- }, [onClick]);
23
- const color = hovered ? 'white' : colors_1.LIGHT_TEXT;
24
- const style = (0, react_1.useMemo)(() => {
25
- return {
26
- display: 'inline-flex',
27
- justifyContent: 'center',
28
- alignItems: 'center',
29
- appearance: 'none',
30
- padding: 0,
31
- cursor: 'pointer',
32
- border: 'none',
33
- width: 24,
34
- };
35
- }, []);
36
- return ((0, jsx_runtime_1.jsx)("button", { onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, style: style, onClick: handleClick, type: "button", children: enabled ? ((0, jsx_runtime_1.jsx)("svg", { style: clearIcon, viewBox: "0 0 640 512", children: (0, jsx_runtime_1.jsx)("path", { fill: color, d: "M25.9 3.4C19-2 8.9-.8 3.4 6.1S-.8 23.1 6.1 28.6l608 480c6.9 5.5 17 4.3 22.5-2.6s4.3-17-2.6-22.5L25.9 3.4zM605.5 268.3c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-51.2 0-96 14.8-133.9 36.8l27.3 21.5C244.6 74.2 280.2 64 320 64c70.4 0 127.7 32 170.8 72c43.1 40 71.9 88 85.2 120c-9.2 22.1-25.9 52-49.5 81.5l25.1 19.8c25.6-32 43.7-64.4 53.9-89zM88.4 154.7c-25.6 32-43.7 64.4-53.9 89c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c51.2 0 96-14.8 133.9-36.8l-27.3-21.5C395.4 437.8 359.8 448 320 448c-70.4 0-127.7-32-170.8-72C106.1 336 77.3 288 64 256c9.2-22.1 25.9-52 49.5-81.5L88.4 154.7zM320 384c16.7 0 32.7-3.2 47.4-9.1l-30.9-24.4c-5.4 .9-10.9 1.4-16.5 1.4c-51 0-92.8-39.8-95.8-90.1l-30.9-24.4c-.9 6-1.3 12.2-1.3 18.5c0 70.7 57.3 128 128 128zM448 256c0-70.7-57.3-128-128-128c-16.7 0-32.7 3.2-47.4 9.1l30.9 24.4c5.4-.9 10.9-1.4 16.5-1.4c51 0 92.8 39.8 95.8 90.1l30.9 24.4c.9-6 1.3-12.2 1.3-18.5z" }) })) : ((0, jsx_runtime_1.jsx)("svg", { style: clearIcon, viewBox: "0 0 576 512", children: (0, jsx_runtime_1.jsx)("path", { fill: color, d: "M117.2 136C160.3 96 217.6 64 288 64s127.7 32 170.8 72c43.1 40 71.9 88 85.2 120c-13.3 32-42.1 80-85.2 120c-43.1 40-100.4 72-170.8 72s-127.7-32-170.8-72C74.1 336 45.3 288 32 256c13.3-32 42.1-80 85.2-120zM288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM192 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z" }) })) }));
12
+ return ((0, jsx_runtime_1.jsx)(InlineAction_1.InlineAction, { onClick: onClick, children: enabled ? ((0, jsx_runtime_1.jsx)("svg", { style: clearIcon, viewBox: "0 0 640 512", children: (0, jsx_runtime_1.jsx)("path", { fill: 'currentColor', d: "M25.9 3.4C19-2 8.9-.8 3.4 6.1S-.8 23.1 6.1 28.6l608 480c6.9 5.5 17 4.3 22.5-2.6s4.3-17-2.6-22.5L25.9 3.4zM605.5 268.3c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-51.2 0-96 14.8-133.9 36.8l27.3 21.5C244.6 74.2 280.2 64 320 64c70.4 0 127.7 32 170.8 72c43.1 40 71.9 88 85.2 120c-9.2 22.1-25.9 52-49.5 81.5l25.1 19.8c25.6-32 43.7-64.4 53.9-89zM88.4 154.7c-25.6 32-43.7 64.4-53.9 89c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c51.2 0 96-14.8 133.9-36.8l-27.3-21.5C395.4 437.8 359.8 448 320 448c-70.4 0-127.7-32-170.8-72C106.1 336 77.3 288 64 256c9.2-22.1 25.9-52 49.5-81.5L88.4 154.7zM320 384c16.7 0 32.7-3.2 47.4-9.1l-30.9-24.4c-5.4 .9-10.9 1.4-16.5 1.4c-51 0-92.8-39.8-95.8-90.1l-30.9-24.4c-.9 6-1.3 12.2-1.3 18.5c0 70.7 57.3 128 128 128zM448 256c0-70.7-57.3-128-128-128c-16.7 0-32.7 3.2-47.4 9.1l30.9 24.4c5.4-.9 10.9-1.4 16.5-1.4c51 0 92.8 39.8 95.8 90.1l30.9 24.4c.9-6 1.3-12.2 1.3-18.5z" }) })) : ((0, jsx_runtime_1.jsx)("svg", { style: clearIcon, viewBox: "0 0 576 512", children: (0, jsx_runtime_1.jsx)("path", { fill: 'currentColor', d: "M117.2 136C160.3 96 217.6 64 288 64s127.7 32 170.8 72c43.1 40 71.9 88 85.2 120c-13.3 32-42.1 80-85.2 120c-43.1 40-100.4 72-170.8 72s-127.7-32-170.8-72C74.1 336 45.3 288 32 256c13.3-32 42.1-80 85.2-120zM288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM192 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z" }) })) }));
37
13
  };
38
14
  exports.InlineEyeButton = InlineEyeButton;
@@ -2,11 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.InlineRemoveButton = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- const colors_1 = require("../../helpers/colors");
6
5
  const InlineAction_1 = require("../InlineAction");
7
6
  const clearIcon = {
8
7
  height: 14,
9
- color: colors_1.LIGHT_TEXT,
10
8
  };
11
9
  const InlineRemoveButton = ({ onClick }) => {
12
10
  return ((0, jsx_runtime_1.jsx)(InlineAction_1.InlineAction, { onClick: onClick, children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 320 512", style: clearIcon, children: (0, jsx_runtime_1.jsx)("path", { d: "M310.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 210.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L114.7 256 9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 301.3 265.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L205.3 256 310.6 150.6z", fill: "currentcolor" }) }) }));
@@ -6,8 +6,10 @@ const client_1 = require("@remotion/renderer/client");
6
6
  const react_1 = require("react");
7
7
  const remotion_1 = require("remotion");
8
8
  const Button_1 = require("../../../preview-server/error-overlay/remotion-overlay/Button");
9
+ const ShortcutHint_1 = require("../../../preview-server/error-overlay/remotion-overlay/ShortcutHint");
9
10
  const convert_env_variables_1 = require("../../helpers/convert-env-variables");
10
11
  const render_modal_sections_1 = require("../../helpers/render-modal-sections");
12
+ const use_keybinding_1 = require("../../helpers/use-keybinding");
11
13
  const audio_1 = require("../../icons/audio");
12
14
  const data_1 = require("../../icons/data");
13
15
  const file_1 = require("../../icons/file");
@@ -15,12 +17,13 @@ const frame_1 = require("../../icons/frame");
15
17
  const gear_1 = require("../../icons/gear");
16
18
  const gif_1 = require("../../icons/gif");
17
19
  const modals_1 = require("../../state/modals");
18
- const layout_1 = require("../layout");
20
+ const sidebar_1 = require("../../state/sidebar");
21
+ const is_menu_item_1 = require("../Menu/is-menu-item");
19
22
  const ModalContainer_1 = require("../ModalContainer");
20
23
  const ModalHeader_1 = require("../ModalHeader");
21
24
  const actions_1 = require("../RenderQueue/actions");
25
+ const RightPanel_1 = require("../RightPanel");
22
26
  const SegmentedControl_1 = require("../SegmentedControl");
23
- const SidebarContent_1 = require("../SidebarContent");
24
27
  const Tabs_1 = require("../Tabs");
25
28
  const CrfSetting_1 = require("./CrfSetting");
26
29
  const out_name_checker_1 = require("./out-name-checker");
@@ -57,10 +60,10 @@ const container = {
57
60
  width: '100%',
58
61
  borderBottom: '1px solid black',
59
62
  };
60
- const scrollPanel = {
63
+ const rightPanel = {
61
64
  height: 600,
62
- overflow: 'auto',
63
- minWidth: 650,
65
+ width: 650,
66
+ display: 'flex',
64
67
  };
65
68
  const horizontalLayout = {
66
69
  display: 'flex',
@@ -281,9 +284,12 @@ const RenderModal = ({ compositionId, initialFrame, initialVideoImageFormat, ini
281
284
  setStillImageFormat(format);
282
285
  setDefaultOutName({ type: 'still', imageFormat: format });
283
286
  }, [setDefaultOutName]);
287
+ const { setSidebarCollapsedStateRight } = (0, react_1.useContext)(sidebar_1.SidebarContext);
284
288
  const onClickStill = (0, react_1.useCallback)(() => {
285
289
  var _a;
286
- (_a = SidebarContent_1.leftSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectRendersPanel();
290
+ setSidebarCollapsedStateRight('expanded');
291
+ (0, RightPanel_1.persistSelectedPanel)('renders');
292
+ (_a = RightPanel_1.rightSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectRendersPanel();
287
293
  dispatchIfMounted({ type: 'start' });
288
294
  (0, actions_1.addStillRenderJob)({
289
295
  compositionId,
@@ -306,6 +312,7 @@ const RenderModal = ({ compositionId, initialFrame, initialVideoImageFormat, ini
306
312
  dispatchIfMounted({ type: 'fail' });
307
313
  });
308
314
  }, [
315
+ setSidebarCollapsedStateRight,
309
316
  dispatchIfMounted,
310
317
  compositionId,
311
318
  outName,
@@ -330,7 +337,9 @@ const RenderModal = ({ compositionId, initialFrame, initialVideoImageFormat, ini
330
337
  const audioCodec = deriveFinalAudioCodec(codec, userSelectedAudioCodec);
331
338
  const onClickVideo = (0, react_1.useCallback)(() => {
332
339
  var _a;
333
- (_a = SidebarContent_1.leftSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectRendersPanel();
340
+ setSidebarCollapsedStateRight('expanded');
341
+ (0, RightPanel_1.persistSelectedPanel)('renders');
342
+ (_a = RightPanel_1.rightSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectRendersPanel();
334
343
  dispatchIfMounted({ type: 'start' });
335
344
  (0, actions_1.addVideoRenderJob)({
336
345
  compositionId,
@@ -367,6 +376,7 @@ const RenderModal = ({ compositionId, initialFrame, initialVideoImageFormat, ini
367
376
  dispatchIfMounted({ type: 'fail' });
368
377
  });
369
378
  }, [
379
+ setSidebarCollapsedStateRight,
370
380
  dispatchIfMounted,
371
381
  compositionId,
372
382
  outName,
@@ -521,11 +531,36 @@ const RenderModal = ({ compositionId, initialFrame, initialVideoImageFormat, ini
521
531
  stillImageFormat,
522
532
  });
523
533
  const { tab, setTab, shownTabs } = (0, render_modal_sections_1.useRenderModalSections)(renderMode, codec);
524
- return ((0, jsx_runtime_1.jsxs)(ModalContainer_1.ModalContainer, { onOutsideClick: onQuit, onEscape: onQuit, children: [(0, jsx_runtime_1.jsx)(ModalHeader_1.NewCompHeader, { title: `Render ${compositionId}` }), (0, jsx_runtime_1.jsxs)("div", { style: container, children: [(0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: renderTabOptions, needsWrapping: false }), (0, jsx_runtime_1.jsx)("div", { style: flexer }), (0, jsx_runtime_1.jsx)(Button_1.Button, { autoFocus: true, onClick: renderMode === 'still' ? onClickStill : onClickVideo, disabled: state.type === 'load' || !outnameValidation.valid, style: {
534
+ const { registerKeybinding } = (0, use_keybinding_1.useKeybinding)();
535
+ const renderDisabled = state.type === 'load' || !outnameValidation.valid;
536
+ const trigger = (0, react_1.useCallback)(() => {
537
+ if (renderDisabled) {
538
+ return;
539
+ }
540
+ if (renderMode === 'still') {
541
+ onClickStill();
542
+ }
543
+ else {
544
+ onClickVideo();
545
+ }
546
+ }, [onClickStill, onClickVideo, renderDisabled, renderMode]);
547
+ (0, react_1.useEffect)(() => {
548
+ registerKeybinding({
549
+ callback() {
550
+ trigger();
551
+ },
552
+ commandCtrlKey: true,
553
+ key: 'Enter',
554
+ event: 'keydown',
555
+ preventDefault: true,
556
+ triggerIfInputFieldFocused: false,
557
+ });
558
+ }, [registerKeybinding, trigger]);
559
+ return ((0, jsx_runtime_1.jsxs)(ModalContainer_1.ModalContainer, { onOutsideClick: onQuit, onEscape: onQuit, children: [(0, jsx_runtime_1.jsx)(ModalHeader_1.NewCompHeader, { title: `Render ${compositionId}` }), (0, jsx_runtime_1.jsxs)("div", { style: container, children: [(0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: renderTabOptions, needsWrapping: false }), (0, jsx_runtime_1.jsx)("div", { style: flexer }), (0, jsx_runtime_1.jsxs)(Button_1.Button, { autoFocus: true, onClick: trigger, disabled: renderDisabled, style: {
525
560
  ...buttonStyle,
526
561
  backgroundColor: outnameValidation.valid
527
562
  ? 'var(--blue)'
528
563
  : 'var(--blue-disabled)',
529
- }, children: state.type === 'idle' ? `Render ${renderMode}` : 'Rendering...' })] }), (0, jsx_runtime_1.jsxs)("div", { style: horizontalLayout, children: [(0, jsx_runtime_1.jsxs)("div", { style: leftSidebar, children: [shownTabs.includes('general') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'general', onClick: () => setTab('general'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(file_1.FileIcon, { style: icon }) }), "General"] })) : null, shownTabs.includes('data') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'data', onClick: () => setTab('data'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(data_1.DataIcon, { style: icon }) }), "Input Props"] })) : null, shownTabs.includes('picture') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'picture', onClick: () => setTab('picture'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(frame_1.PicIcon, { style: icon }) }), "Picture"] })) : null, shownTabs.includes('audio') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'audio', onClick: () => setTab('audio'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(audio_1.AudioIcon, { style: icon }) }), "Audio"] })) : null, shownTabs.includes('gif') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'gif', onClick: () => setTab('gif'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(gif_1.GifIcon, { style: icon }) }), "GIF"] })) : null, shownTabs.includes('advanced') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'advanced', onClick: () => setTab('advanced'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(gear_1.GearIcon, { style: icon }) }), "Other"] })) : null] }), (0, jsx_runtime_1.jsxs)("div", { style: scrollPanel, className: "__remotion-vertical-scrollbar", children: [(0, jsx_runtime_1.jsx)(layout_1.Spacing, { block: true, y: 0.5 }), tab === 'general' ? ((0, jsx_runtime_1.jsx)(RenderModalBasic_1.RenderModalBasic, { codec: codec, currentComposition: currentComposition, frame: frame, imageFormatOptions: imageFormatOptions, outName: outName, proResProfile: proResProfile, renderMode: renderMode, setVideoCodec: setCodec, setFrame: setFrame, setOutName: setOutName, setProResProfile: setProResProfile, endFrame: endFrame, setEndFrame: setEndFrame, setStartFrame: setStartFrame, startFrame: startFrame, validationMessage: outnameValidation.valid ? null : outnameValidation.error.message })) : tab === 'picture' ? ((0, jsx_runtime_1.jsx)(RenderModalPicture_1.RenderModalPicture, { renderMode: renderMode, scale: scale, setScale: setScale, pixelFormat: pixelFormat, setPixelFormat: setPixelFormat, imageFormatOptions: imageFormatOptions, crf: crf, setCrf: setCrf, customTargetVideoBitrate: customTargetVideoBitrate, maxCrf: maxCrf, minCrf: minCrf, quality: quality, qualityControlType: qualityControlType, setQuality: setQuality, setCustomTargetVideoBitrateValue: setCustomTargetVideoBitrateValue, setQualityControl: setQualityControl, shouldDisplayCrfOption: shouldDisplayCrfOption, videoImageFormat: videoImageFormat, stillImageFormat: stillImageFormat })) : tab === 'audio' ? ((0, jsx_runtime_1.jsx)(RenderModalAudio_1.RenderModalAudio, { muted: muted, renderMode: renderMode, setMuted: setMuted, codec: codec, audioCodec: audioCodec, setAudioCodec: setAudioCodec, enforceAudioTrack: enforceAudioTrack, setEnforceAudioTrackState: setEnforceAudioTrackState, customTargetAudioBitrate: customTargetAudioBitrate, setCustomTargetAudioBitrateValue: setCustomTargetAudioBitrateValue, setShouldHaveCustomTargetAudioBitrate: setShouldHaveCustomTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate: shouldHaveCustomTargetAudioBitrate })) : tab === 'gif' ? ((0, jsx_runtime_1.jsx)(RenderModalGif_1.RenderModalGif, { everyNthFrame: everyNthFrame, limitNumberOfGifLoops: limitNumberOfGifLoops, numberOfGifLoopsSetting: numberOfGifLoopsSetting, setEveryNthFrameSetting: setEveryNthFrameSetting, setLimitNumberOfGifLoops: setLimitNumberOfGifLoops, setNumberOfGifLoopsSetting: setNumberOfGifLoopsSetting })) : tab === 'data' ? ((0, jsx_runtime_1.jsx)(RenderModalData_1.RenderModalData, { inputProps: inputProps, setInputProps: setInputProps, composition: currentComposition, compact: false, updateButton: false, showSaveButton: false })) : ((0, jsx_runtime_1.jsx)(RenderModalAdvanced_1.RenderModalAdvanced, { concurrency: concurrency, maxConcurrency: maxConcurrency, minConcurrency: minConcurrency, renderMode: renderMode, setConcurrency: setConcurrency, setVerboseLogging: setVerboseLogging, verbose: verbose, delayRenderTimeout: delayRenderTimeout, setDelayRenderTimeout: setDelayRenderTimeout, disallowParallelEncoding: disallowParallelEncoding, setDisallowParallelEncoding: setDisallowParallelEncoding, setDisableWebSecurity: setDisableWebSecurity, setIgnoreCertificateErrors: setIgnoreCertificateErrors, setHeadless: setHeadless, headless: headless, ignoreCertificateErrors: ignoreCertificateErrors, disableWebSecurity: disableWebSecurity, openGlOption: openGlOption, setOpenGlOption: setOpenGlOption, setEnvVariables: setEnvVariables, envVariables: envVariables })), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { block: true, y: 0.5 })] })] })] }));
564
+ }, children: [state.type === 'idle' ? `Render ${renderMode}` : 'Rendering...', (0, jsx_runtime_1.jsx)(ShortcutHint_1.ShortcutHint, { keyToPress: "\u21B5", cmdOrCtrl: true })] })] }), (0, jsx_runtime_1.jsxs)("div", { style: horizontalLayout, children: [(0, jsx_runtime_1.jsxs)("div", { style: leftSidebar, children: [shownTabs.includes('general') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'general', onClick: () => setTab('general'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(file_1.FileIcon, { style: icon }) }), "General"] })) : null, shownTabs.includes('data') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'data', onClick: () => setTab('data'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(data_1.DataIcon, { style: icon }) }), "Input Props"] })) : null, shownTabs.includes('picture') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'picture', onClick: () => setTab('picture'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(frame_1.PicIcon, { style: icon }) }), "Picture"] })) : null, shownTabs.includes('audio') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'audio', onClick: () => setTab('audio'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(audio_1.AudioIcon, { style: icon }) }), "Audio"] })) : null, shownTabs.includes('gif') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'gif', onClick: () => setTab('gif'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(gif_1.GifIcon, { style: icon }) }), "GIF"] })) : null, shownTabs.includes('advanced') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'advanced', onClick: () => setTab('advanced'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(gear_1.GearIcon, { style: icon }) }), "Other"] })) : null] }), (0, jsx_runtime_1.jsx)("div", { style: rightPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: tab === 'general' ? ((0, jsx_runtime_1.jsx)(RenderModalBasic_1.RenderModalBasic, { codec: codec, currentComposition: currentComposition, frame: frame, imageFormatOptions: imageFormatOptions, outName: outName, proResProfile: proResProfile, renderMode: renderMode, setVideoCodec: setCodec, setFrame: setFrame, setOutName: setOutName, setProResProfile: setProResProfile, endFrame: endFrame, setEndFrame: setEndFrame, setStartFrame: setStartFrame, startFrame: startFrame, validationMessage: outnameValidation.valid ? null : outnameValidation.error.message })) : tab === 'picture' ? ((0, jsx_runtime_1.jsx)(RenderModalPicture_1.RenderModalPicture, { renderMode: renderMode, scale: scale, setScale: setScale, pixelFormat: pixelFormat, setPixelFormat: setPixelFormat, imageFormatOptions: imageFormatOptions, crf: crf, setCrf: setCrf, customTargetVideoBitrate: customTargetVideoBitrate, maxCrf: maxCrf, minCrf: minCrf, quality: quality, qualityControlType: qualityControlType, setQuality: setQuality, setCustomTargetVideoBitrateValue: setCustomTargetVideoBitrateValue, setQualityControl: setQualityControl, shouldDisplayCrfOption: shouldDisplayCrfOption, videoImageFormat: videoImageFormat, stillImageFormat: stillImageFormat })) : tab === 'audio' ? ((0, jsx_runtime_1.jsx)(RenderModalAudio_1.RenderModalAudio, { muted: muted, renderMode: renderMode, setMuted: setMuted, codec: codec, audioCodec: audioCodec, setAudioCodec: setAudioCodec, enforceAudioTrack: enforceAudioTrack, setEnforceAudioTrackState: setEnforceAudioTrackState, customTargetAudioBitrate: customTargetAudioBitrate, setCustomTargetAudioBitrateValue: setCustomTargetAudioBitrateValue, setShouldHaveCustomTargetAudioBitrate: setShouldHaveCustomTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate: shouldHaveCustomTargetAudioBitrate })) : tab === 'gif' ? ((0, jsx_runtime_1.jsx)(RenderModalGif_1.RenderModalGif, { everyNthFrame: everyNthFrame, limitNumberOfGifLoops: limitNumberOfGifLoops, numberOfGifLoopsSetting: numberOfGifLoopsSetting, setEveryNthFrameSetting: setEveryNthFrameSetting, setLimitNumberOfGifLoops: setLimitNumberOfGifLoops, setNumberOfGifLoopsSetting: setNumberOfGifLoopsSetting })) : tab === 'data' ? ((0, jsx_runtime_1.jsx)(RenderModalData_1.RenderModalData, { inputProps: inputProps, setInputProps: setInputProps, composition: currentComposition, compact: false, showSaveButton: false })) : ((0, jsx_runtime_1.jsx)(RenderModalAdvanced_1.RenderModalAdvanced, { concurrency: concurrency, maxConcurrency: maxConcurrency, minConcurrency: minConcurrency, renderMode: renderMode, setConcurrency: setConcurrency, setVerboseLogging: setVerboseLogging, verbose: verbose, delayRenderTimeout: delayRenderTimeout, setDelayRenderTimeout: setDelayRenderTimeout, disallowParallelEncoding: disallowParallelEncoding, setDisallowParallelEncoding: setDisallowParallelEncoding, setDisableWebSecurity: setDisableWebSecurity, setIgnoreCertificateErrors: setIgnoreCertificateErrors, setHeadless: setHeadless, headless: headless, ignoreCertificateErrors: ignoreCertificateErrors, disableWebSecurity: disableWebSecurity, openGlOption: openGlOption, setOpenGlOption: setOpenGlOption, setEnvVariables: setEnvVariables, envVariables: envVariables })) })] })] }));
530
565
  };
531
566
  exports.RenderModal = RenderModal;
@@ -5,11 +5,16 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const Checkmark_1 = require("../../icons/Checkmark");
7
7
  const Checkbox_1 = require("../Checkbox");
8
+ const is_menu_item_1 = require("../Menu/is-menu-item");
8
9
  const ComboBox_1 = require("../NewComposition/ComboBox");
9
10
  const layout_1 = require("./layout");
10
11
  const NumberSetting_1 = require("./NumberSetting");
11
12
  const RenderModalEnvironmentVariables_1 = require("./RenderModalEnvironmentVariables");
12
13
  const RenderModalHr_1 = require("./RenderModalHr");
14
+ const container = {
15
+ flex: 1,
16
+ overflowY: 'auto',
17
+ };
13
18
  const RenderModalAdvanced = ({ renderMode, maxConcurrency, minConcurrency, setConcurrency, concurrency, setVerboseLogging, verbose, delayRenderTimeout, setDelayRenderTimeout, disallowParallelEncoding, setDisallowParallelEncoding, setDisableWebSecurity, setIgnoreCertificateErrors, setHeadless, headless, ignoreCertificateErrors, disableWebSecurity, openGlOption, setOpenGlOption, setEnvVariables, envVariables, }) => {
14
19
  const extendedOpenGlOptions = (0, react_1.useMemo)(() => {
15
20
  return ['angle', 'egl', 'swangle', 'swiftshader', 'default'];
@@ -45,7 +50,7 @@ const RenderModalAdvanced = ({ renderMode, maxConcurrency, minConcurrency, setCo
45
50
  };
46
51
  });
47
52
  }, [extendedOpenGlOptions, openGlOption, setOpenGlOption]);
48
- return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'still' ? null : ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: minConcurrency, max: maxConcurrency, step: 1, name: "Concurrency", formatter: (w) => `${w}x`, onValueChanged: setConcurrency, value: concurrency })), (0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting
53
+ return ((0, jsx_runtime_1.jsxs)("div", { style: container, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: [renderMode === 'still' ? null : ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: minConcurrency, max: maxConcurrency, step: 1, name: "Concurrency", formatter: (w) => `${w}x`, onValueChanged: setConcurrency, value: concurrency })), (0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting
49
54
  // Also appears in packages/renderer/src/validate-puppeteer-timeout.ts
50
55
  , {
51
56
  // Also appears in packages/renderer/src/validate-puppeteer-timeout.ts
@@ -15,6 +15,9 @@ const layout_1 = require("./layout");
15
15
  const MutedSetting_1 = require("./MutedSetting");
16
16
  const OptionExplainer_1 = require("./OptionExplainer");
17
17
  const RenderModalHr_1 = require("./RenderModalHr");
18
+ const container = {
19
+ flex: 1,
20
+ };
18
21
  const RenderModalAudio = ({ muted, setMuted, renderMode, enforceAudioTrack, setEnforceAudioTrackState, setShouldHaveCustomTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate, setCustomTargetAudioBitrateValue, customTargetAudioBitrate, audioCodec, codec, setAudioCodec, }) => {
19
22
  const onShouldHaveTargetAudioBitrateChanged = (0, react_1.useCallback)((e) => {
20
23
  setShouldHaveCustomTargetAudioBitrate(e.target.checked);
@@ -38,6 +41,6 @@ const RenderModalAudio = ({ muted, setMuted, renderMode, enforceAudioTrack, setE
38
41
  };
39
42
  });
40
43
  }, [codec, setAudioCodec]);
41
- return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'video' && audioCodecOptions(codec).length >= 2 ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Audio Codec" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: audioCodecOptions(codec), selectedId: audioCodec, title: "AudioCodec" }) })] })) : null, renderMode === 'video' && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(MutedSetting_1.MutedSetting, { enforceAudioTrack: enforceAudioTrack, muted: muted, setMuted: setMuted, hint: client_1.BrowserSafeApis.options.muteOption }), (0, jsx_runtime_1.jsx)(EnforceAudioTrackSetting_1.EnforceAudioTrackSetting, { muted: muted, enforceAudioTrack: enforceAudioTrack, setEnforceAudioTrack: setEnforceAudioTrackState, option: client_1.BrowserSafeApis.options.enforceAudioOption }), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {})] })), renderMode === 'still' ? null : ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Custom audio bitrate" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: shouldHaveCustomTargetAudioBitrate, onChange: onShouldHaveTargetAudioBitrateChanged }) })] })), shouldHaveCustomTargetAudioBitrate && renderMode !== 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Target audio bitrate" }), (0, jsx_runtime_1.jsx)(InfoBubble_1.InfoBubble, { title: "Learn more about this option", children: (0, jsx_runtime_1.jsx)(OptionExplainer_1.OptionExplainer, { option: client_1.BrowserSafeApis.options.audioBitrateOption }) }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { style: layout_1.input, value: customTargetAudioBitrate, onChange: onTargetAudioBitrateChanged, status: "ok" }) }) })] })) : null] }));
44
+ return ((0, jsx_runtime_1.jsxs)("div", { style: container, children: [renderMode === 'video' && audioCodecOptions(codec).length >= 2 ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Audio Codec" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: audioCodecOptions(codec), selectedId: audioCodec, title: "AudioCodec" }) })] })) : null, renderMode === 'video' && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(MutedSetting_1.MutedSetting, { enforceAudioTrack: enforceAudioTrack, muted: muted, setMuted: setMuted, hint: client_1.BrowserSafeApis.options.muteOption }), (0, jsx_runtime_1.jsx)(EnforceAudioTrackSetting_1.EnforceAudioTrackSetting, { muted: muted, enforceAudioTrack: enforceAudioTrack, setEnforceAudioTrack: setEnforceAudioTrackState, option: client_1.BrowserSafeApis.options.enforceAudioOption }), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {})] })), renderMode === 'still' ? null : ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Custom audio bitrate" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: shouldHaveCustomTargetAudioBitrate, onChange: onShouldHaveTargetAudioBitrateChanged }) })] })), shouldHaveCustomTargetAudioBitrate && renderMode !== 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Target audio bitrate" }), (0, jsx_runtime_1.jsx)(InfoBubble_1.InfoBubble, { title: "Learn more about this option", children: (0, jsx_runtime_1.jsx)(OptionExplainer_1.OptionExplainer, { option: client_1.BrowserSafeApis.options.audioBitrateOption }) }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { style: layout_1.input, value: customTargetAudioBitrate, onChange: onTargetAudioBitrateChanged, status: "ok" }) }) })] })) : null] }));
42
45
  };
43
46
  exports.RenderModalAudio = RenderModalAudio;
@@ -17,6 +17,9 @@ const InfoBubble_1 = require("./InfoBubble");
17
17
  const layout_1 = require("./layout");
18
18
  const OptionExplainer_1 = require("./OptionExplainer");
19
19
  const RenderModalInput_1 = require("./RenderModalInput");
20
+ const container = {
21
+ flex: 1,
22
+ };
20
23
  const RenderModalBasic = ({ renderMode, imageFormatOptions, outName, codec, setVideoCodec: setCodec, proResProfile, setProResProfile, frame, setFrame, currentComposition, setOutName, setEndFrame, endFrame, setStartFrame, startFrame, validationMessage, }) => {
21
24
  const existence = (0, use_file_existence_1.useFileExistence)(outName);
22
25
  const videoCodecOptions = (0, react_1.useMemo)(() => {
@@ -71,6 +74,6 @@ const RenderModalBasic = ({ renderMode, imageFormatOptions, outName, codec, setV
71
74
  const onValueChange = (0, react_1.useCallback)((e) => {
72
75
  setOutName(e.target.value);
73
76
  }, [setOutName]);
74
- return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Format" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: imageFormatOptions, needsWrapping: true }) })] })) : ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsxs)("div", { style: layout_1.label, children: ["Codec", (0, jsx_runtime_1.jsx)(InfoBubble_1.InfoBubble, { title: "Learn more about this option", children: (0, jsx_runtime_1.jsx)(OptionExplainer_1.OptionExplainer, { option: client_1.BrowserSafeApis.options.videoCodecOption }) })] }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: videoCodecOptions, selectedId: codec, title: "Codec" }) })] })), renderMode === 'still' && currentComposition.durationInFrames > 1 ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Frame" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(RemInput_1.RightAlignInput, { children: (0, jsx_runtime_1.jsx)(InputDragger_1.InputDragger, { value: frame, onTextChange: onFrameChanged, placeholder: `0-${currentComposition.durationInFrames - 1}`, onValueChange: onFrameSetDirectly, name: "frame", step: 1, min: 0, status: "ok", max: currentComposition.durationInFrames - 1 }) }) })] })) : null, renderMode === 'video' && codec === 'prores' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "ProRes profile" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { title: proResProfile, selectedId: proResProfile, values: proResProfileOptions }) })] })) : null, renderMode === 'still' ? null : ((0, jsx_runtime_1.jsx)(FrameRangeSetting_1.FrameRangeSetting, { durationInFrames: currentComposition.durationInFrames, endFrame: endFrame, setEndFrame: setEndFrame, setStartFrame: setStartFrame, startFrame: startFrame })), (0, jsx_runtime_1.jsx)(RenderModalInput_1.RenderModalInput, { existence: existence, inputStyle: layout_1.input, outName: outName, onValueChange: onValueChange, validationMessage: validationMessage })] }));
77
+ return ((0, jsx_runtime_1.jsxs)("div", { style: container, children: [renderMode === 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Format" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: imageFormatOptions, needsWrapping: true }) })] })) : ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsxs)("div", { style: layout_1.label, children: ["Codec", (0, jsx_runtime_1.jsx)(InfoBubble_1.InfoBubble, { title: "Learn more about this option", children: (0, jsx_runtime_1.jsx)(OptionExplainer_1.OptionExplainer, { option: client_1.BrowserSafeApis.options.videoCodecOption }) })] }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: videoCodecOptions, selectedId: codec, title: "Codec" }) })] })), renderMode === 'still' && currentComposition.durationInFrames > 1 ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Frame" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(RemInput_1.RightAlignInput, { children: (0, jsx_runtime_1.jsx)(InputDragger_1.InputDragger, { value: frame, onTextChange: onFrameChanged, placeholder: `0-${currentComposition.durationInFrames - 1}`, onValueChange: onFrameSetDirectly, name: "frame", step: 1, min: 0, status: "ok", max: currentComposition.durationInFrames - 1 }) }) })] })) : null, renderMode === 'video' && codec === 'prores' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "ProRes profile" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { title: proResProfile, selectedId: proResProfile, values: proResProfileOptions }) })] })) : null, renderMode === 'still' ? null : ((0, jsx_runtime_1.jsx)(FrameRangeSetting_1.FrameRangeSetting, { durationInFrames: currentComposition.durationInFrames, endFrame: endFrame, setEndFrame: setEndFrame, setStartFrame: setStartFrame, startFrame: startFrame })), (0, jsx_runtime_1.jsx)(RenderModalInput_1.RenderModalInput, { existence: existence, inputStyle: layout_1.input, outName: outName, onValueChange: onValueChange, validationMessage: validationMessage })] }));
75
78
  };
76
79
  exports.RenderModalBasic = RenderModalBasic;
@@ -5,6 +5,5 @@ export declare const RenderModalData: React.FC<{
5
5
  inputProps: unknown;
6
6
  setInputProps: React.Dispatch<React.SetStateAction<unknown>>;
7
7
  compact: boolean;
8
- updateButton: boolean;
9
8
  showSaveButton: boolean;
10
9
  }>;
@@ -3,21 +3,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RenderModalData = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
- const Button_1 = require("../../../preview-server/error-overlay/remotion-overlay/Button");
7
- const layout_1 = require("../layout");
6
+ const colors_1 = require("../../helpers/colors");
8
7
  const actions_1 = require("../RenderQueue/actions");
9
8
  const SegmentedControl_1 = require("../SegmentedControl");
10
9
  const RenderModalJSONInputPropsEditor_1 = require("./RenderModalJSONInputPropsEditor");
11
10
  const SchemaEditor_1 = require("./SchemaEditor/SchemaEditor");
12
11
  const outer = {
13
- padding: '8px 16px',
12
+ display: 'flex',
13
+ flexDirection: 'column',
14
+ flex: 1,
15
+ overflow: 'hidden',
14
16
  };
15
17
  const controlContainer = {
16
- display: 'flex',
17
18
  flexDirection: 'row',
19
+ display: 'flex',
20
+ paddingLeft: 12,
21
+ paddingTop: 12,
22
+ paddingBottom: 12,
23
+ borderBottom: `1px solid ${colors_1.BORDER_COLOR}`,
18
24
  };
19
- const RenderModalData = ({ composition, inputProps, setInputProps, compact, updateButton, showSaveButton, }) => {
25
+ const RenderModalData = ({ composition, inputProps, setInputProps, compact, showSaveButton }) => {
20
26
  const [mode, setMode] = (0, react_1.useState)('schema');
27
+ const [valBeforeSafe, setValBeforeSafe] = (0, react_1.useState)(inputProps);
21
28
  const zodValidationResult = (0, react_1.useMemo)(() => {
22
29
  return composition.schema.safeParse(inputProps);
23
30
  }, [composition.schema, inputProps]);
@@ -45,11 +52,12 @@ const RenderModalData = ({ composition, inputProps, setInputProps, compact, upda
45
52
  setMode('schema');
46
53
  }, []);
47
54
  const onUpdate = (0, react_1.useCallback)(() => {
55
+ setValBeforeSafe(inputProps);
48
56
  (0, actions_1.updateDefaultProps)(composition.id, inputProps);
49
57
  }, [composition.id, inputProps]);
50
58
  const onSave = (0, react_1.useCallback)((updater) => {
51
59
  (0, actions_1.updateDefaultProps)(composition.id, updater(composition.defaultProps));
52
60
  }, [composition.defaultProps, composition.id]);
53
- return ((0, jsx_runtime_1.jsxs)("div", { style: outer, children: [(0, jsx_runtime_1.jsx)("div", { style: controlContainer, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: modeItems, needsWrapping: false }) }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { y: 2, block: true }), mode === 'schema' ? ((0, jsx_runtime_1.jsx)(SchemaEditor_1.SchemaEditor, { value: inputProps, setValue: setInputProps, schema: composition.schema, zodValidationResult: zodValidationResult, compact: compact, defaultProps: composition.defaultProps, onSave: onSave, showSaveButton: showSaveButton })) : ((0, jsx_runtime_1.jsx)(RenderModalJSONInputPropsEditor_1.RenderModalJSONInputPropsEditor, { value: inputProps !== null && inputProps !== void 0 ? inputProps : {}, setValue: setInputProps, zodValidationResult: zodValidationResult, switchToSchema: switchToSchema })), updateButton && mode === 'json' ? ((0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: onUpdate, disabled: !zodValidationResult.success, children: "Save" })) : null] }));
61
+ return ((0, jsx_runtime_1.jsxs)("div", { style: outer, children: [(0, jsx_runtime_1.jsx)("div", { style: controlContainer, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: modeItems, needsWrapping: false }) }), mode === 'schema' ? ((0, jsx_runtime_1.jsx)(SchemaEditor_1.SchemaEditor, { value: inputProps, setValue: setInputProps, schema: composition.schema, zodValidationResult: zodValidationResult, compact: compact, defaultProps: composition.defaultProps, onSave: onSave, showSaveButton: showSaveButton })) : ((0, jsx_runtime_1.jsx)(RenderModalJSONInputPropsEditor_1.RenderModalJSONInputPropsEditor, { value: inputProps !== null && inputProps !== void 0 ? inputProps : {}, setValue: setInputProps, zodValidationResult: zodValidationResult, switchToSchema: switchToSchema, onSave: onUpdate, valBeforeSafe: valBeforeSafe }))] }));
54
62
  };
55
63
  exports.RenderModalData = RenderModalData;