@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.
- package/dist/codemods/update-default-props.js +57 -11
- package/dist/editor/components/CollapsedSidebarExpander.js +1 -0
- package/dist/editor/components/CurrentCompositionSideEffects.js +0 -1
- package/dist/editor/components/InlineAction.js +1 -0
- package/dist/editor/components/NewComposition/RemTextarea.js +4 -2
- package/dist/editor/components/RenderButton.js +1 -1
- package/dist/editor/components/RenderModal/EnvInput.d.ts +1 -0
- package/dist/editor/components/RenderModal/EnvInput.js +22 -2
- package/dist/editor/components/RenderModal/InfoTooltip.js +2 -1
- package/dist/editor/components/RenderModal/InlineEyeIcon.js +3 -27
- package/dist/editor/components/RenderModal/InlineRemoveButton.js +0 -2
- package/dist/editor/components/RenderModal/RenderModal.js +44 -9
- package/dist/editor/components/RenderModal/RenderModalAdvanced.js +6 -1
- package/dist/editor/components/RenderModal/RenderModalAudio.js +4 -1
- package/dist/editor/components/RenderModal/RenderModalBasic.js +4 -1
- package/dist/editor/components/RenderModal/RenderModalData.d.ts +0 -1
- package/dist/editor/components/RenderModal/RenderModalData.js +14 -6
- package/dist/editor/components/RenderModal/RenderModalEnvironmentVariables.js +8 -5
- package/dist/editor/components/RenderModal/RenderModalGif.js +4 -1
- package/dist/editor/components/RenderModal/RenderModalInput.js +1 -1
- package/dist/editor/components/RenderModal/RenderModalJSONInputPropsEditor.d.ts +2 -0
- package/dist/editor/components/RenderModal/RenderModalJSONInputPropsEditor.js +14 -3
- package/dist/editor/components/RenderModal/RenderModalPicture.d.ts +1 -1
- package/dist/editor/components/RenderModal/RenderModalPicture.js +4 -1
- package/dist/editor/components/RenderModal/RenderStatusModal.js +2 -1
- package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.js +39 -5
- package/dist/editor/components/RenderModal/SchemaEditor/SchemaEmptyStateGraphic.d.ts +2 -0
- package/dist/editor/components/RenderModal/SchemaEditor/SchemaEmptyStateGraphic.js +15 -0
- package/dist/editor/components/RenderModal/SchemaEditor/SchemaLabel.js +1 -3
- package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayEditor.js +1 -0
- package/dist/editor/components/RenderModal/SchemaEditor/ZodDateEditor.js +2 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodEnumEditor.d.ts +14 -0
- package/dist/editor/components/RenderModal/SchemaEditor/ZodEnumEditor.js +69 -0
- package/dist/editor/components/RenderModal/SchemaEditor/ZodErrorMessages.js +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +6 -2
- package/dist/editor/components/RenderModal/SchemaEditor/ZodSwitch.js +6 -1
- package/dist/editor/components/RenderModal/SchemaEditor/schema-serialization.d.ts +2 -0
- package/dist/editor/components/RenderModal/SchemaEditor/schema-serialization.js +21 -0
- package/dist/editor/components/RenderModal/human-readable-codec.d.ts +1 -1
- package/dist/editor/components/RenderModal/layout.js +0 -1
- package/dist/editor/components/RenderModal/out-name-checker.js +2 -1
- package/dist/editor/components/RenderQueue/context.d.ts +0 -1
- package/dist/editor/components/RenderQueue/context.js +1 -8
- package/dist/editor/components/RenderQueue/index.js +1 -0
- package/dist/editor/components/RenderToolbarIcon.d.ts +1 -1
- package/dist/editor/components/RenderToolbarIcon.js +5 -5
- package/dist/editor/components/RendersTab.js +1 -1
- package/dist/editor/components/RightPanel.d.ts +6 -0
- package/dist/editor/components/RightPanel.js +42 -4
- package/dist/editor/components/Tabs/index.js +1 -1
- package/dist/editor/helpers/convert-env-variables.js +2 -2
- package/dist/editor/helpers/render-modal-sections.d.ts +0 -1
- package/dist/editor/helpers/use-breakpoint.d.ts +1 -0
- package/dist/editor/helpers/use-breakpoint.js +17 -0
- package/dist/editor/icons/render.d.ts +3 -0
- package/dist/editor/icons/render.js +6 -2
- package/dist/preview-server/render-queue/queue.js +1 -0
- package/dist/render-flows/render.js +1 -5
- package/dist/render-flows/still.js +0 -3
- package/package.json +6 -6
- package/dist/editor/components/SidebarContent.d.ts +0 -5
- package/dist/editor/components/SidebarContent.js +0 -53
- package/dist/editor/icons/save.d.ts +0 -2
- 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
|
|
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(
|
|
64
|
-
.replace(
|
|
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
|
|
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
|
|
130
|
+
const prettierConfig = await resolveConfig(configFilePath);
|
|
86
131
|
if (!prettierConfig) {
|
|
87
132
|
throw new Error('Prettier config not found');
|
|
88
133
|
}
|
|
89
|
-
const prettified =
|
|
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',
|
|
@@ -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: '
|
|
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.
|
|
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;
|
|
@@ -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
|
|
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
|
-
|
|
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:
|
|
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:
|
|
8
|
+
height: 14,
|
|
9
9
|
color: colors_1.LIGHT_TEXT,
|
|
10
10
|
};
|
|
11
11
|
const InlineEyeButton = ({ onClick, enabled }) => {
|
|
12
|
-
|
|
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
|
|
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
|
|
63
|
+
const rightPanel = {
|
|
61
64
|
height: 600,
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
(
|
|
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
|
-
(
|
|
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
|
-
|
|
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.
|
|
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;
|
|
@@ -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
|
|
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
|
-
|
|
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,
|
|
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 }) }),
|
|
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;
|