@remotion/cli 3.3.17 → 3.3.19
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/LICENSE.md +1 -1
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/open-browser.d.ts +2 -0
- package/dist/config/open-browser.js +15 -0
- package/dist/convert-entry-point-to-serve-url.d.ts +1 -0
- package/dist/convert-entry-point-to-serve-url.js +15 -0
- package/dist/editor/components/CollapsableOptions.d.ts +6 -0
- package/dist/editor/components/CollapsableOptions.js +35 -0
- package/dist/editor/components/InlineAction.d.ts +5 -0
- package/dist/editor/components/InlineAction.js +32 -0
- package/dist/editor/components/RenderButton.d.ts +1 -1
- package/dist/editor/components/RenderButton.js +24 -34
- package/dist/editor/components/RenderModal/RenderErrorModal.d.ts +5 -0
- package/dist/editor/components/RenderModal/RenderErrorModal.js +64 -0
- package/dist/editor/components/RenderModal/RenderModal.d.ts +8 -2
- package/dist/editor/components/RenderModal/RenderModal.js +204 -32
- package/dist/editor/components/RenderQueue/CircularProgress.d.ts +5 -0
- package/dist/editor/components/RenderQueue/CircularProgress.js +18 -0
- package/dist/editor/components/RenderQueue/RenderQueueError.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueError.js +26 -0
- package/dist/editor/components/RenderQueue/RenderQueueItem.js +14 -1
- package/dist/editor/components/RenderQueue/RenderQueueItemStatus.js +11 -3
- package/dist/editor/components/RenderQueue/RenderQueueOutputName.js +12 -52
- package/dist/editor/components/RenderQueue/RenderQueueProgressMessage.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueProgressMessage.js +27 -0
- package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.js +6 -40
- package/dist/editor/components/RenderQueue/RenderQueueRepeat.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueRepeat.js +22 -0
- package/dist/editor/components/RenderQueue/actions.d.ts +32 -0
- package/dist/editor/components/RenderQueue/actions.js +75 -0
- package/dist/editor/components/RenderQueue/context.d.ts +1 -0
- package/dist/editor/components/RenderQueue/context.js +6 -1
- package/dist/editor/components/RenderQueue/index.js +1 -1
- package/dist/editor/components/RenderQueue/item-style.d.ts +2 -0
- package/dist/editor/components/RenderQueue/item-style.js +21 -0
- package/dist/editor/components/RenderToolbarIcon.d.ts +2 -0
- package/dist/editor/components/RenderToolbarIcon.js +47 -0
- package/dist/editor/components/RendersTab.js +6 -2
- package/dist/editor/components/SegmentedControl.d.ts +15 -0
- package/dist/editor/components/SegmentedControl.js +46 -0
- package/dist/editor/components/SidebarContent.js +21 -4
- package/dist/editor/components/Tabs/index.js +3 -1
- package/dist/editor/components/Timeline/TimelineZoomControls.js +3 -1
- package/dist/editor/helpers/use-file-existence.d.ts +1 -0
- package/dist/editor/helpers/use-file-existence.js +57 -0
- package/dist/editor/helpers/use-menu-structure.js +15 -1
- package/dist/editor/icons/RenderStillIcon.d.ts +3 -0
- package/dist/editor/icons/RenderStillIcon.js +8 -0
- package/dist/editor/icons/render.d.ts +0 -1
- package/dist/editor/icons/render.js +1 -1
- package/dist/editor/icons/video.d.ts +5 -0
- package/dist/editor/icons/video.js +8 -0
- package/dist/file-watcher.d.ts +9 -0
- package/dist/file-watcher.js +35 -0
- package/dist/list-of-remotion-packages.js +1 -0
- package/dist/load-config.js +1 -10
- package/dist/parse-command-line.d.ts +1 -0
- package/dist/parse-command-line.js +1 -0
- package/dist/preview-server/actions.d.ts +0 -0
- package/dist/preview-server/actions.js +1 -0
- package/dist/preview-server/api-routes.d.ts +4 -0
- package/dist/preview-server/api-routes.js +15 -0
- package/dist/preview-server/api-types.d.ts +26 -0
- package/dist/preview-server/api-types.js +2 -0
- package/dist/preview-server/file-existence-watchers.d.ts +10 -0
- package/dist/preview-server/file-existence-watchers.js +46 -0
- package/dist/preview-server/get-file-existence.d.ts +2 -0
- package/dist/preview-server/get-file-existence.js +36 -0
- package/dist/preview-server/handler.d.ts +9 -0
- package/dist/preview-server/handler.js +34 -0
- package/dist/preview-server/render-queue/add-render.d.ts +3 -2
- package/dist/preview-server/render-queue/add-render.js +20 -25
- package/dist/preview-server/render-queue/index.d.ts +14 -3
- package/dist/preview-server/render-queue/index.js +51 -10
- package/dist/preview-server/render-queue/job.d.ts +56 -6
- package/dist/preview-server/render-queue/make-retry-payload.d.ts +3 -0
- package/dist/preview-server/render-queue/make-retry-payload.js +32 -0
- package/dist/preview-server/render-queue/open-directory-in-finder.js +7 -5
- package/dist/preview-server/render-queue/open-in-file-explorer.js +1 -0
- package/dist/preview-server/render-queue/process-still.d.ts +7 -0
- package/dist/preview-server/render-queue/process-still.js +49 -0
- package/dist/preview-server/render-queue/process-video.d.ts +7 -0
- package/dist/preview-server/render-queue/process-video.js +55 -0
- package/dist/preview-server/render-queue/queue.d.ts +19 -0
- package/dist/preview-server/render-queue/queue.js +150 -0
- package/dist/preview-server/render-queue/remove-render.js +3 -2
- package/dist/preview-server/routes/add-render.d.ts +3 -0
- package/dist/preview-server/routes/add-render.js +52 -0
- package/dist/preview-server/routes/open-in-file-explorer.d.ts +3 -0
- package/dist/preview-server/routes/open-in-file-explorer.js +14 -0
- package/dist/preview-server/routes/remove-render.d.ts +3 -0
- package/dist/preview-server/routes/remove-render.js +9 -0
- package/dist/preview-server/routes/subscribe-to-file-existence.d.ts +3 -0
- package/dist/preview-server/routes/subscribe-to-file-existence.js +13 -0
- package/dist/preview-server/routes/unsubscribe-from-file-existence.d.ts +3 -0
- package/dist/preview-server/routes/unsubscribe-from-file-existence.js +9 -0
- package/dist/preview.js +25 -1
- package/dist/render-flows/render.d.ts +33 -0
- package/dist/render-flows/render.js +251 -0
- package/dist/render-flows/still.d.ts +30 -0
- package/dist/render-flows/still.js +170 -0
- package/package.json +7 -7
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RenderQueueError = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const modals_1 = require("../../state/modals");
|
|
7
|
+
const z_index_1 = require("../../state/z-index");
|
|
8
|
+
const item_style_1 = require("./item-style");
|
|
9
|
+
const outputLocation = {
|
|
10
|
+
...item_style_1.renderQueueItemSubtitleStyle,
|
|
11
|
+
};
|
|
12
|
+
const RenderQueueError = ({ job }) => {
|
|
13
|
+
const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
14
|
+
const { tabIndex } = (0, z_index_1.useZIndex)();
|
|
15
|
+
const onClick = (0, react_1.useCallback)(() => {
|
|
16
|
+
setSelectedModal({
|
|
17
|
+
type: 'render-error',
|
|
18
|
+
job,
|
|
19
|
+
});
|
|
20
|
+
}, [job, setSelectedModal]);
|
|
21
|
+
if (job.status !== 'failed') {
|
|
22
|
+
throw new Error('should not have rendered this component');
|
|
23
|
+
}
|
|
24
|
+
return ((0, jsx_runtime_1.jsx)("button", { onClick: onClick, type: "button", style: outputLocation, tabIndex: tabIndex, title: job.error.message, children: job.error.message }));
|
|
25
|
+
};
|
|
26
|
+
exports.RenderQueueError = RenderQueueError;
|
|
@@ -3,14 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RenderQueueItem = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const layout_1 = require("../layout");
|
|
6
|
+
const RenderQueueError_1 = require("./RenderQueueError");
|
|
6
7
|
const RenderQueueItemStatus_1 = require("./RenderQueueItemStatus");
|
|
7
8
|
const RenderQueueOutputName_1 = require("./RenderQueueOutputName");
|
|
9
|
+
const RenderQueueProgressMessage_1 = require("./RenderQueueProgressMessage");
|
|
8
10
|
const RenderQueueRemoveItem_1 = require("./RenderQueueRemoveItem");
|
|
11
|
+
const RenderQueueRepeat_1 = require("./RenderQueueRepeat");
|
|
9
12
|
const container = {
|
|
10
13
|
padding: 12,
|
|
11
14
|
display: 'flex',
|
|
12
15
|
flexDirection: 'row',
|
|
13
16
|
paddingBottom: 10,
|
|
17
|
+
paddingRight: 4,
|
|
14
18
|
};
|
|
15
19
|
const title = {
|
|
16
20
|
fontSize: 13,
|
|
@@ -18,8 +22,17 @@ const title = {
|
|
|
18
22
|
};
|
|
19
23
|
const right = {
|
|
20
24
|
flex: 1,
|
|
25
|
+
display: 'flex',
|
|
26
|
+
flexDirection: 'column',
|
|
27
|
+
overflow: 'hidden',
|
|
28
|
+
};
|
|
29
|
+
const subtitle = {
|
|
30
|
+
maxWidth: '100%',
|
|
31
|
+
flex: 1,
|
|
32
|
+
display: 'flex',
|
|
33
|
+
overflow: 'hidden',
|
|
21
34
|
};
|
|
22
35
|
const RenderQueueItem = ({ job }) => {
|
|
23
|
-
return ((0, jsx_runtime_1.jsxs)(layout_1.Row, { style: container, align: "center", children: [(0, jsx_runtime_1.jsx)(RenderQueueItemStatus_1.RenderQueueItemStatus, { job: job }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsxs)("div", { style: right, children: [(0, jsx_runtime_1.jsx)("div", { style: title, children: job.compositionId }), (0, jsx_runtime_1.jsx)(RenderQueueOutputName_1.RenderQueueOutputName, { job: job })] }), (0, jsx_runtime_1.jsx)(RenderQueueRemoveItem_1.RenderQueueRemoveItem, { job: job })] }));
|
|
36
|
+
return ((0, jsx_runtime_1.jsxs)(layout_1.Row, { style: container, align: "center", children: [(0, jsx_runtime_1.jsx)(RenderQueueItemStatus_1.RenderQueueItemStatus, { job: job }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsxs)("div", { style: right, children: [(0, jsx_runtime_1.jsx)("div", { style: title, children: job.compositionId }), (0, jsx_runtime_1.jsx)("div", { style: subtitle, children: job.status === 'done' ? ((0, jsx_runtime_1.jsx)(RenderQueueOutputName_1.RenderQueueOutputName, { job: job })) : job.status === 'failed' ? ((0, jsx_runtime_1.jsx)(RenderQueueError_1.RenderQueueError, { job: job })) : job.status === 'running' ? ((0, jsx_runtime_1.jsx)(RenderQueueProgressMessage_1.RenderQueueProgressMessage, { job: job })) : null })] }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsx)(RenderQueueRepeat_1.RenderQueueRepeatItem, { job: job }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsx)(RenderQueueRemoveItem_1.RenderQueueRemoveItem, { job: job })] }));
|
|
24
37
|
};
|
|
25
38
|
exports.RenderQueueItem = RenderQueueItem;
|
|
@@ -3,9 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RenderQueueItemStatus = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const colors_1 = require("../../helpers/colors");
|
|
6
|
+
const CircularProgress_1 = require("./CircularProgress");
|
|
6
7
|
const iconStyle = {
|
|
7
|
-
height:
|
|
8
|
-
width:
|
|
8
|
+
height: CircularProgress_1.RENDER_STATUS_INDICATOR_SIZE,
|
|
9
|
+
width: CircularProgress_1.RENDER_STATUS_INDICATOR_SIZE,
|
|
9
10
|
};
|
|
10
11
|
const RenderQueueItemStatus = ({ job }) => {
|
|
11
12
|
if (job.status === 'failed') {
|
|
@@ -14,6 +15,13 @@ const RenderQueueItemStatus = ({ job }) => {
|
|
|
14
15
|
if (job.status === 'idle') {
|
|
15
16
|
return ((0, jsx_runtime_1.jsx)("svg", { style: iconStyle, viewBox: "0 0 512 512", children: (0, jsx_runtime_1.jsx)("path", { fill: colors_1.LIGHT_TEXT, d: "M256 512C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256s-114.6 256-256 256zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z" }) }));
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
+
if (job.status === 'done') {
|
|
19
|
+
return ((0, jsx_runtime_1.jsx)("svg", { style: iconStyle, viewBox: "0 0 512 512", children: (0, jsx_runtime_1.jsx)("path", { fill: colors_1.LIGHT_TEXT, d: "M256 512c141.4 0 256-114.6 256-256S397.4 0 256 0S0 114.6 0 256S114.6 512 256 512zM369 209L241 337l-17 17-17-17-64-64-17-17L160 222.1l17 17 47 47L335 175l17-17L385.9 192l-17 17z" }) }));
|
|
20
|
+
}
|
|
21
|
+
if (job.status === 'running') {
|
|
22
|
+
// Add a minimum progress to avoid the progress bar from disappearing
|
|
23
|
+
return (0, jsx_runtime_1.jsx)(CircularProgress_1.CircularProgress, { progress: Math.max(0.07, job.progress) });
|
|
24
|
+
}
|
|
25
|
+
throw new Error('Unknown job status');
|
|
18
26
|
};
|
|
19
27
|
exports.RenderQueueItemStatus = RenderQueueItemStatus;
|
|
@@ -3,59 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RenderQueueOutputName = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
|
-
const colors_1 = require("../../helpers/colors");
|
|
7
|
-
const layout_1 = require("../layout");
|
|
8
6
|
const NotificationCenter_1 = require("../Notifications/NotificationCenter");
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
color: colors_1.LIGHT_TEXT,
|
|
12
|
-
appearance: 'none',
|
|
13
|
-
border: 'none',
|
|
14
|
-
padding: 0,
|
|
15
|
-
cursor: 'pointer',
|
|
16
|
-
lineHeight: 1,
|
|
17
|
-
textAlign: 'left',
|
|
18
|
-
whiteSpace: 'nowrap',
|
|
19
|
-
marginRight: layout_1.SPACING_UNIT,
|
|
20
|
-
};
|
|
21
|
-
const formatOutputLocation = (location) => {
|
|
22
|
-
if (location.startsWith(window.remotion_cwd)) {
|
|
23
|
-
const out = location.substring(window.remotion_cwd.length);
|
|
24
|
-
if (out.startsWith('/') || out.startsWith('\\')) {
|
|
25
|
-
return out.substring(1);
|
|
26
|
-
}
|
|
27
|
-
return out;
|
|
28
|
-
}
|
|
29
|
-
return location;
|
|
30
|
-
};
|
|
7
|
+
const actions_1 = require("./actions");
|
|
8
|
+
const item_style_1 = require("./item-style");
|
|
31
9
|
const RenderQueueOutputName = ({ job }) => {
|
|
32
10
|
const onClick = (0, react_1.useCallback)(() => {
|
|
33
|
-
|
|
34
|
-
directory: job.outputLocation,
|
|
35
|
-
};
|
|
36
|
-
fetch(`/api/open-in-file-explorer`, {
|
|
37
|
-
method: 'post',
|
|
38
|
-
headers: {
|
|
39
|
-
'content-type': 'application/json',
|
|
40
|
-
},
|
|
41
|
-
body: JSON.stringify(body),
|
|
42
|
-
})
|
|
43
|
-
.then((res) => res.json())
|
|
44
|
-
.then((data) => {
|
|
45
|
-
var _a;
|
|
46
|
-
if (data.success) {
|
|
47
|
-
console.log('Opened file in explorer');
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
(_a = NotificationCenter_1.notificationCenter.current) === null || _a === void 0 ? void 0 : _a.addNotification({
|
|
51
|
-
content: `Could not open file: ${data.error}`,
|
|
52
|
-
created: Date.now(),
|
|
53
|
-
duration: 2000,
|
|
54
|
-
id: String(Math.random()),
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
})
|
|
58
|
-
.catch((err) => {
|
|
11
|
+
(0, actions_1.openInFileExplorer)({ directory: job.outName }).catch((err) => {
|
|
59
12
|
var _a;
|
|
60
13
|
(_a = NotificationCenter_1.notificationCenter.current) === null || _a === void 0 ? void 0 : _a.addNotification({
|
|
61
14
|
content: `Could not open file: ${err.message}`,
|
|
@@ -64,7 +17,14 @@ const RenderQueueOutputName = ({ job }) => {
|
|
|
64
17
|
id: String(Math.random()),
|
|
65
18
|
});
|
|
66
19
|
});
|
|
67
|
-
}, [job.
|
|
68
|
-
|
|
20
|
+
}, [job.outName]);
|
|
21
|
+
const style = (0, react_1.useMemo)(() => {
|
|
22
|
+
return {
|
|
23
|
+
...item_style_1.renderQueueItemSubtitleStyle,
|
|
24
|
+
cursor: job.deletedOutputLocation ? 'inherit' : 'pointer',
|
|
25
|
+
textDecoration: job.deletedOutputLocation ? 'line-through' : 'none',
|
|
26
|
+
};
|
|
27
|
+
}, [job.deletedOutputLocation]);
|
|
28
|
+
return ((0, jsx_runtime_1.jsx)("button", { onClick: onClick, type: "button", style: style, disabled: job.deletedOutputLocation, title: job.deletedOutputLocation ? 'File was deleted' : job.outName, children: job.outName }));
|
|
69
29
|
};
|
|
70
30
|
exports.RenderQueueOutputName = RenderQueueOutputName;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RenderQueueProgressMessage = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const modals_1 = require("../../state/modals");
|
|
7
|
+
const z_index_1 = require("../../state/z-index");
|
|
8
|
+
const item_style_1 = require("./item-style");
|
|
9
|
+
const outputLocation = {
|
|
10
|
+
...item_style_1.renderQueueItemSubtitleStyle,
|
|
11
|
+
};
|
|
12
|
+
const RenderQueueProgressMessage = ({ job }) => {
|
|
13
|
+
if (job.status !== 'running') {
|
|
14
|
+
throw new Error('should not have rendered this component');
|
|
15
|
+
}
|
|
16
|
+
const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
17
|
+
const { tabIndex } = (0, z_index_1.useZIndex)();
|
|
18
|
+
const onClick = (0, react_1.useCallback)(() => {
|
|
19
|
+
// TODO: Show progress instead
|
|
20
|
+
setSelectedModal({
|
|
21
|
+
type: 'render-error',
|
|
22
|
+
job,
|
|
23
|
+
});
|
|
24
|
+
}, [job, setSelectedModal]);
|
|
25
|
+
return ((0, jsx_runtime_1.jsx)("button", { onClick: onClick, type: "button", style: outputLocation, tabIndex: tabIndex, title: job.message, children: job.message }));
|
|
26
|
+
};
|
|
27
|
+
exports.RenderQueueProgressMessage = RenderQueueProgressMessage;
|
|
@@ -3,54 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RenderQueueRemoveItem = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
|
-
const
|
|
6
|
+
const InlineAction_1 = require("../InlineAction");
|
|
7
|
+
const actions_1 = require("./actions");
|
|
7
8
|
const RenderQueueRemoveItem = ({ job }) => {
|
|
8
9
|
const onClick = (0, react_1.useCallback)(() => {
|
|
9
|
-
|
|
10
|
-
jobId: job.id,
|
|
11
|
-
};
|
|
12
|
-
fetch(`/api/remove-render`, {
|
|
13
|
-
method: 'post',
|
|
14
|
-
headers: {
|
|
15
|
-
'content-type': 'application/json',
|
|
16
|
-
},
|
|
17
|
-
body: JSON.stringify(body),
|
|
18
|
-
})
|
|
19
|
-
.then((res) => res.json())
|
|
20
|
-
.then((data) => {
|
|
21
|
-
if (!data.success) {
|
|
22
|
-
// TODO: Handle error
|
|
23
|
-
}
|
|
24
|
-
})
|
|
25
|
-
.catch(() => {
|
|
10
|
+
(0, actions_1.removeRenderJob)(job).catch((err) => {
|
|
26
11
|
// TODO: Handle error
|
|
12
|
+
console.log(err);
|
|
27
13
|
});
|
|
28
|
-
}, [job
|
|
29
|
-
const [hovered, setHovered] = (0, react_1.useState)(false);
|
|
14
|
+
}, [job]);
|
|
30
15
|
const icon = (0, react_1.useMemo)(() => {
|
|
31
16
|
return {
|
|
32
17
|
height: 12,
|
|
33
18
|
};
|
|
34
19
|
}, []);
|
|
35
|
-
|
|
36
|
-
setHovered(true);
|
|
37
|
-
}, []);
|
|
38
|
-
const onPointerLeave = (0, react_1.useCallback)(() => {
|
|
39
|
-
setHovered(false);
|
|
40
|
-
}, []);
|
|
41
|
-
const style = (0, react_1.useMemo)(() => {
|
|
42
|
-
return {
|
|
43
|
-
border: 'none',
|
|
44
|
-
background: hovered ? colors_1.CLEAR_HOVER : 'transparent',
|
|
45
|
-
height: 24,
|
|
46
|
-
width: 24,
|
|
47
|
-
display: 'inline-flex',
|
|
48
|
-
justifyContent: 'center',
|
|
49
|
-
alignItems: 'center',
|
|
50
|
-
borderRadius: 3,
|
|
51
|
-
cursor: 'pointer',
|
|
52
|
-
};
|
|
53
|
-
}, [hovered]);
|
|
54
|
-
return ((0, jsx_runtime_1.jsx)("button", { onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, type: "button", onClick: onClick, style: style, children: (0, jsx_runtime_1.jsx)("svg", { style: icon, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: (0, jsx_runtime_1.jsx)("path", { fill: hovered ? 'white' : colors_1.LIGHT_TEXT, d: "M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z" }) }) }));
|
|
20
|
+
return ((0, jsx_runtime_1.jsx)(InlineAction_1.InlineAction, { onClick: onClick, children: (0, jsx_runtime_1.jsx)("svg", { style: icon, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: (0, jsx_runtime_1.jsx)("path", { fill: "currentColor", d: "M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z" }) }) }));
|
|
55
21
|
};
|
|
56
22
|
exports.RenderQueueRemoveItem = RenderQueueRemoveItem;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RenderQueueRepeatItem = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const make_retry_payload_1 = require("../../../preview-server/render-queue/make-retry-payload");
|
|
7
|
+
const modals_1 = require("../../state/modals");
|
|
8
|
+
const InlineAction_1 = require("../InlineAction");
|
|
9
|
+
const RenderQueueRepeatItem = ({ job }) => {
|
|
10
|
+
const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
11
|
+
const onClick = (0, react_1.useCallback)(() => {
|
|
12
|
+
const retryPayload = (0, make_retry_payload_1.makeRetryPayload)(job);
|
|
13
|
+
setSelectedModal(retryPayload);
|
|
14
|
+
}, [job, setSelectedModal]);
|
|
15
|
+
const icon = (0, react_1.useMemo)(() => {
|
|
16
|
+
return {
|
|
17
|
+
height: 12,
|
|
18
|
+
};
|
|
19
|
+
}, []);
|
|
20
|
+
return ((0, jsx_runtime_1.jsx)(InlineAction_1.InlineAction, { onClick: onClick, children: (0, jsx_runtime_1.jsx)("svg", { style: icon, viewBox: "0 0 512 512", children: (0, jsx_runtime_1.jsx)("path", { fill: "currentcolor", d: "M386.3 160H336c-17.7 0-32 14.3-32 32s14.3 32 32 32H464c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32s-32 14.3-32 32v51.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0s-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3s163.8-62.5 226.3 0L386.3 160z" }) }) }));
|
|
21
|
+
};
|
|
22
|
+
exports.RenderQueueRepeatItem = RenderQueueRepeatItem;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Codec, StillImageFormat } from '@remotion/renderer';
|
|
2
|
+
import type { ApiRoutes } from '../../../preview-server/api-types';
|
|
3
|
+
import type { RenderJob } from '../../../preview-server/render-queue/job';
|
|
4
|
+
export declare const callApi: <Endpoint extends keyof ApiRoutes>(endpoint: Endpoint, body: ApiRoutes[Endpoint]["Request"]) => Promise<ApiRoutes[Endpoint]["Response"]>;
|
|
5
|
+
export declare const addStillRenderJob: ({ compositionId, outName, imageFormat, quality, frame, scale, verbose, }: {
|
|
6
|
+
compositionId: string;
|
|
7
|
+
outName: string;
|
|
8
|
+
imageFormat: StillImageFormat;
|
|
9
|
+
quality: number | null;
|
|
10
|
+
frame: number;
|
|
11
|
+
scale: number;
|
|
12
|
+
verbose: boolean;
|
|
13
|
+
}) => Promise<undefined>;
|
|
14
|
+
export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat, quality, scale, verbose, codec, }: {
|
|
15
|
+
compositionId: string;
|
|
16
|
+
outName: string;
|
|
17
|
+
imageFormat: StillImageFormat;
|
|
18
|
+
quality: number | null;
|
|
19
|
+
scale: number;
|
|
20
|
+
verbose: boolean;
|
|
21
|
+
codec: Codec;
|
|
22
|
+
}) => Promise<undefined>;
|
|
23
|
+
export declare const unsubscribeFromFileExistenceWatcher: ({ file }: {
|
|
24
|
+
file: string;
|
|
25
|
+
}) => Promise<undefined>;
|
|
26
|
+
export declare const subscribeToFileExistenceWatcher: ({ file, }: {
|
|
27
|
+
file: string;
|
|
28
|
+
}) => Promise<boolean>;
|
|
29
|
+
export declare const openInFileExplorer: ({ directory }: {
|
|
30
|
+
directory: string;
|
|
31
|
+
}) => Promise<void>;
|
|
32
|
+
export declare const removeRenderJob: (job: RenderJob) => Promise<undefined>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.removeRenderJob = exports.openInFileExplorer = exports.subscribeToFileExistenceWatcher = exports.unsubscribeFromFileExistenceWatcher = exports.addVideoRenderJob = exports.addStillRenderJob = exports.callApi = void 0;
|
|
4
|
+
const callApi = (endpoint, body) => {
|
|
5
|
+
return new Promise((resolve, reject) => {
|
|
6
|
+
fetch(endpoint, {
|
|
7
|
+
method: 'post',
|
|
8
|
+
headers: {
|
|
9
|
+
'content-type': 'application/json',
|
|
10
|
+
},
|
|
11
|
+
body: JSON.stringify(body),
|
|
12
|
+
})
|
|
13
|
+
.then((res) => res.json())
|
|
14
|
+
.then((data) => {
|
|
15
|
+
if (data.success) {
|
|
16
|
+
resolve(data.data);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
reject(new Error(data.error));
|
|
20
|
+
}
|
|
21
|
+
})
|
|
22
|
+
.catch((err) => {
|
|
23
|
+
reject(err);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
exports.callApi = callApi;
|
|
28
|
+
const addStillRenderJob = ({ compositionId, outName, imageFormat, quality, frame, scale, verbose, }) => {
|
|
29
|
+
return (0, exports.callApi)('/api/render', {
|
|
30
|
+
compositionId,
|
|
31
|
+
type: 'still',
|
|
32
|
+
outName,
|
|
33
|
+
imageFormat,
|
|
34
|
+
quality,
|
|
35
|
+
frame,
|
|
36
|
+
scale,
|
|
37
|
+
verbose,
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
exports.addStillRenderJob = addStillRenderJob;
|
|
41
|
+
const addVideoRenderJob = ({ compositionId, outName, imageFormat, quality, scale, verbose, codec, }) => {
|
|
42
|
+
return (0, exports.callApi)('/api/render', {
|
|
43
|
+
compositionId,
|
|
44
|
+
type: 'video',
|
|
45
|
+
outName,
|
|
46
|
+
imageFormat,
|
|
47
|
+
quality,
|
|
48
|
+
scale,
|
|
49
|
+
verbose,
|
|
50
|
+
codec,
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
exports.addVideoRenderJob = addVideoRenderJob;
|
|
54
|
+
const unsubscribeFromFileExistenceWatcher = ({ file }) => {
|
|
55
|
+
return (0, exports.callApi)('/api/unsubscribe-from-file-existence', { file });
|
|
56
|
+
};
|
|
57
|
+
exports.unsubscribeFromFileExistenceWatcher = unsubscribeFromFileExistenceWatcher;
|
|
58
|
+
const subscribeToFileExistenceWatcher = async ({ file, }) => {
|
|
59
|
+
const { exists } = await (0, exports.callApi)('/api/subscribe-to-file-existence', { file });
|
|
60
|
+
return exists;
|
|
61
|
+
};
|
|
62
|
+
exports.subscribeToFileExistenceWatcher = subscribeToFileExistenceWatcher;
|
|
63
|
+
const openInFileExplorer = ({ directory }) => {
|
|
64
|
+
const body = {
|
|
65
|
+
directory,
|
|
66
|
+
};
|
|
67
|
+
return (0, exports.callApi)('/api/open-in-file-explorer', body);
|
|
68
|
+
};
|
|
69
|
+
exports.openInFileExplorer = openInFileExplorer;
|
|
70
|
+
const removeRenderJob = (job) => {
|
|
71
|
+
return (0, exports.callApi)('/api/remove-render', {
|
|
72
|
+
jobId: job.id,
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
exports.removeRenderJob = removeRenderJob;
|
|
@@ -9,6 +9,7 @@ declare type RenderQueueContextType = {
|
|
|
9
9
|
jobs: RenderJob[];
|
|
10
10
|
};
|
|
11
11
|
export declare const RenderQueueContext: React.Context<RenderQueueContextType>;
|
|
12
|
+
export declare const useShouldRenderLeftSidebarTabs: () => boolean;
|
|
12
13
|
export declare const renderJobsRef: React.RefObject<{
|
|
13
14
|
updateRenderJobs: (jobs: RenderJob[]) => void;
|
|
14
15
|
}>;
|
|
@@ -23,12 +23,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.RenderQueueContextProvider = exports.renderJobsRef = exports.RenderQueueContext = void 0;
|
|
26
|
+
exports.RenderQueueContextProvider = exports.renderJobsRef = exports.useShouldRenderLeftSidebarTabs = exports.RenderQueueContext = void 0;
|
|
27
27
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
28
28
|
const react_1 = __importStar(require("react"));
|
|
29
29
|
exports.RenderQueueContext = react_1.default.createContext({
|
|
30
30
|
jobs: [],
|
|
31
31
|
});
|
|
32
|
+
const useShouldRenderLeftSidebarTabs = () => {
|
|
33
|
+
const context = (0, react_1.useContext)(exports.RenderQueueContext);
|
|
34
|
+
return context.jobs.length > 0;
|
|
35
|
+
};
|
|
36
|
+
exports.useShouldRenderLeftSidebarTabs = useShouldRenderLeftSidebarTabs;
|
|
32
37
|
exports.renderJobsRef = (0, react_1.createRef)();
|
|
33
38
|
const RenderQueueContextProvider = ({ children }) => {
|
|
34
39
|
const [jobs, setJobs] = (0, react_1.useState)(window.remotion_initialRenderQueue);
|
|
@@ -7,7 +7,7 @@ const colors_1 = require("../../helpers/colors");
|
|
|
7
7
|
const context_1 = require("./context");
|
|
8
8
|
const RenderQueueItem_1 = require("./RenderQueueItem");
|
|
9
9
|
const separatorStyle = {
|
|
10
|
-
borderBottom:
|
|
10
|
+
borderBottom: `1px solid ${colors_1.BORDER_COLOR}`,
|
|
11
11
|
};
|
|
12
12
|
const RenderQueue = () => {
|
|
13
13
|
const { jobs } = (0, react_1.useContext)(context_1.RenderQueueContext);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderQueueItemSubtitleStyle = void 0;
|
|
4
|
+
const colors_1 = require("../../helpers/colors");
|
|
5
|
+
const layout_1 = require("../layout");
|
|
6
|
+
exports.renderQueueItemSubtitleStyle = {
|
|
7
|
+
fontSize: 13,
|
|
8
|
+
color: colors_1.LIGHT_TEXT,
|
|
9
|
+
appearance: 'none',
|
|
10
|
+
border: 'none',
|
|
11
|
+
padding: 0,
|
|
12
|
+
cursor: 'pointer',
|
|
13
|
+
lineHeight: 1.2,
|
|
14
|
+
textAlign: 'left',
|
|
15
|
+
whiteSpace: 'nowrap',
|
|
16
|
+
marginRight: layout_1.SPACING_UNIT,
|
|
17
|
+
overflowX: 'hidden',
|
|
18
|
+
// size smaller than viewport causes actual ellipse
|
|
19
|
+
maxWidth: 500,
|
|
20
|
+
textOverflow: 'ellipsis',
|
|
21
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RenderStillButton = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const remotion_1 = require("remotion");
|
|
7
|
+
const get_default_out_name_1 = require("../../get-default-out-name");
|
|
8
|
+
const RenderStillIcon_1 = require("../icons/RenderStillIcon");
|
|
9
|
+
const modals_1 = require("../state/modals");
|
|
10
|
+
const ControlButton_1 = require("./ControlButton");
|
|
11
|
+
const tooltip = 'Export the current frame as a still image';
|
|
12
|
+
const style = {
|
|
13
|
+
width: 18,
|
|
14
|
+
height: 18,
|
|
15
|
+
color: 'white',
|
|
16
|
+
};
|
|
17
|
+
const RenderStillButton = () => {
|
|
18
|
+
const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
19
|
+
const video = remotion_1.Internals.useVideo();
|
|
20
|
+
const frame = (0, remotion_1.useCurrentFrame)();
|
|
21
|
+
const onClick = (0, react_1.useCallback)(() => {
|
|
22
|
+
var _a, _b, _c, _d, _e;
|
|
23
|
+
if (!video) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
setSelectedModal({
|
|
27
|
+
type: 'render',
|
|
28
|
+
compositionId: video.id,
|
|
29
|
+
initialFrame: frame,
|
|
30
|
+
// TODO: JPEG for video, PNG for image
|
|
31
|
+
initialImageFormat: 'png',
|
|
32
|
+
initialOutName: (0, get_default_out_name_1.getDefaultOutLocation)({
|
|
33
|
+
compositionName: video.id,
|
|
34
|
+
defaultExtension: 'png',
|
|
35
|
+
}),
|
|
36
|
+
// TODO: Determine defaults from config file
|
|
37
|
+
initialQuality: (_b = (_a = window.remotion_renderDefaults) === null || _a === void 0 ? void 0 : _a.quality) !== null && _b !== void 0 ? _b : 80,
|
|
38
|
+
initialScale: (_d = (_c = window.remotion_renderDefaults) === null || _c === void 0 ? void 0 : _c.scale) !== null && _d !== void 0 ? _d : 1,
|
|
39
|
+
initialVerbose: ((_e = window.remotion_renderDefaults) === null || _e === void 0 ? void 0 : _e.logLevel) === 'verbose',
|
|
40
|
+
});
|
|
41
|
+
}, [frame, setSelectedModal, video]);
|
|
42
|
+
if (!video) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return ((0, jsx_runtime_1.jsx)(ControlButton_1.ControlButton, { title: tooltip, "aria-label": tooltip, onClick: onClick, children: (0, jsx_runtime_1.jsx)(RenderStillIcon_1.RenderStill, { style: style }) }));
|
|
46
|
+
};
|
|
47
|
+
exports.RenderStillButton = RenderStillButton;
|
|
@@ -24,6 +24,7 @@ const badge = {
|
|
|
24
24
|
justifyContent: 'center',
|
|
25
25
|
alignItems: 'center',
|
|
26
26
|
};
|
|
27
|
+
// TODO: Don't show if preview server is disconnected
|
|
27
28
|
const RendersTab = ({ selected, onClick }) => {
|
|
28
29
|
const { jobs } = (0, react_1.useContext)(context_1.RenderQueueContext);
|
|
29
30
|
const failedJobs = jobs.filter((j) => j.status === 'failed').length;
|
|
@@ -31,8 +32,11 @@ const RendersTab = ({ selected, onClick }) => {
|
|
|
31
32
|
const badgeStyle = (0, react_1.useMemo)(() => {
|
|
32
33
|
return {
|
|
33
34
|
...badge,
|
|
34
|
-
backgroundColor: failedJobs > 0 ? colors_1.FAIL_COLOR : '
|
|
35
|
-
color: failedJobs > 0 ? 'white' :
|
|
35
|
+
backgroundColor: failedJobs > 0 ? colors_1.FAIL_COLOR : 'transparent',
|
|
36
|
+
color: failedJobs > 0 ? 'white' : colors_1.LIGHT_TEXT,
|
|
37
|
+
borderWidth: failedJobs > 0 ? 0 : 1,
|
|
38
|
+
borderStyle: 'solid',
|
|
39
|
+
borderColor: colors_1.LIGHT_TEXT,
|
|
36
40
|
};
|
|
37
41
|
}, [failedJobs]);
|
|
38
42
|
return ((0, jsx_runtime_1.jsx)(Tabs_1.Tab, { selected: selected, onClick: onClick, children: (0, jsx_runtime_1.jsxs)("div", { style: row, children: ["Renders", jobCount > 0 ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }), (0, jsx_runtime_1.jsx)("div", { style: badgeStyle, children: jobCount })] })) : null] }) }));
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PropsWithChildren } from 'react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
export declare type SegmentedControlItem = {
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
onClick: () => void;
|
|
6
|
+
key: string;
|
|
7
|
+
selected: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const SegmentedControl: React.FC<{
|
|
10
|
+
items: SegmentedControlItem[];
|
|
11
|
+
}>;
|
|
12
|
+
export declare const Item: React.FC<PropsWithChildren<{
|
|
13
|
+
selected: boolean;
|
|
14
|
+
onClick: () => void;
|
|
15
|
+
}>>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Item = exports.SegmentedControl = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const colors_1 = require("../helpers/colors");
|
|
7
|
+
const z_index_1 = require("../state/z-index");
|
|
8
|
+
const container = {
|
|
9
|
+
display: 'flex',
|
|
10
|
+
flexDirection: 'row',
|
|
11
|
+
overflow: 'hidden',
|
|
12
|
+
border: '1px solid ' + colors_1.INPUT_BORDER_COLOR_UNHOVERED,
|
|
13
|
+
};
|
|
14
|
+
const item = {
|
|
15
|
+
display: 'flex',
|
|
16
|
+
fontSize: 13,
|
|
17
|
+
padding: '4px 12px',
|
|
18
|
+
cursor: 'pointer',
|
|
19
|
+
appearance: 'none',
|
|
20
|
+
border: 'none',
|
|
21
|
+
};
|
|
22
|
+
const SegmentedControl = ({ items }) => {
|
|
23
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: container, children: items.map((i) => {
|
|
24
|
+
return ((0, jsx_runtime_1.jsx)(exports.Item, { onClick: i.onClick, selected: i.selected, children: i.label }, i.key));
|
|
25
|
+
}) }));
|
|
26
|
+
};
|
|
27
|
+
exports.SegmentedControl = SegmentedControl;
|
|
28
|
+
const Item = ({ selected, onClick, children }) => {
|
|
29
|
+
const [hovered, setHovered] = (0, react_1.useState)(false);
|
|
30
|
+
const { tabIndex } = (0, z_index_1.useZIndex)();
|
|
31
|
+
const onPointerEnter = (0, react_1.useCallback)(() => {
|
|
32
|
+
setHovered(true);
|
|
33
|
+
}, []);
|
|
34
|
+
const onPointerLeave = (0, react_1.useCallback)(() => {
|
|
35
|
+
setHovered(false);
|
|
36
|
+
}, []);
|
|
37
|
+
const itemStyle = (0, react_1.useMemo)(() => {
|
|
38
|
+
return {
|
|
39
|
+
...item,
|
|
40
|
+
backgroundColor: selected ? colors_1.INPUT_BACKGROUND : 'transparent',
|
|
41
|
+
color: selected ? 'white' : hovered ? 'white' : colors_1.LIGHT_TEXT,
|
|
42
|
+
};
|
|
43
|
+
}, [hovered, selected]);
|
|
44
|
+
return ((0, jsx_runtime_1.jsx)("button", { type: "button", onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, style: itemStyle, tabIndex: tabIndex, onClick: onClick, children: children }));
|
|
45
|
+
};
|
|
46
|
+
exports.Item = Item;
|