@remotion/cli 3.3.1 → 3.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/compositions.js +2 -44
  2. package/dist/config/index.js +2 -0
  3. package/dist/config/number-of-shared-audio-tags.d.ts +2 -0
  4. package/dist/config/number-of-shared-audio-tags.js +12 -0
  5. package/dist/editor/components/RenderButton.d.ts +6 -0
  6. package/dist/editor/components/RenderButton.js +53 -0
  7. package/dist/editor/components/RenderModal/RenderModal.d.ts +5 -0
  8. package/dist/editor/components/RenderModal/RenderModal.js +90 -0
  9. package/dist/editor/components/RenderQueue/RenderQueueItem.d.ts +5 -0
  10. package/dist/editor/components/RenderQueue/RenderQueueItem.js +25 -0
  11. package/dist/editor/components/RenderQueue/RenderQueueItemStatus.d.ts +5 -0
  12. package/dist/editor/components/RenderQueue/RenderQueueItemStatus.js +19 -0
  13. package/dist/editor/components/RenderQueue/RenderQueueOutputName.d.ts +5 -0
  14. package/dist/editor/components/RenderQueue/RenderQueueOutputName.js +70 -0
  15. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.d.ts +5 -0
  16. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.js +56 -0
  17. package/dist/editor/components/RenderQueue/context.d.ts +18 -0
  18. package/dist/editor/components/RenderQueue/context.js +49 -0
  19. package/dist/editor/components/RenderQueue/index.d.ts +2 -0
  20. package/dist/editor/components/RenderQueue/index.js +18 -0
  21. package/dist/editor/components/RendersTab.d.ts +6 -0
  22. package/dist/editor/components/RendersTab.js +40 -0
  23. package/dist/editor/components/SidebarContent.d.ts +5 -0
  24. package/dist/editor/components/SidebarContent.js +34 -0
  25. package/dist/editor/components/Tabs/index.d.ts +11 -0
  26. package/dist/editor/components/Tabs/index.js +49 -0
  27. package/dist/editor/icons/render.d.ts +6 -0
  28. package/dist/editor/icons/render.js +8 -0
  29. package/dist/get-default-out-name.d.ts +4 -0
  30. package/dist/get-default-out-name.js +8 -0
  31. package/dist/index.d.ts +4 -1
  32. package/dist/index.js +2 -0
  33. package/dist/parse-command-line.d.ts +8 -2
  34. package/dist/preview-server/live-event-listener.d.ts +0 -0
  35. package/dist/preview-server/live-event-listener.js +1 -0
  36. package/dist/preview-server/parse-body.d.ts +2 -0
  37. package/dist/preview-server/parse-body.js +16 -0
  38. package/dist/preview-server/render-queue/add-render.d.ts +2 -0
  39. package/dist/preview-server/render-queue/add-render.js +39 -0
  40. package/dist/preview-server/render-queue/index.d.ts +7 -0
  41. package/dist/preview-server/render-queue/index.js +105 -0
  42. package/dist/preview-server/render-queue/job.d.ts +29 -0
  43. package/dist/preview-server/render-queue/job.js +2 -0
  44. package/dist/preview-server/render-queue/open-directory-in-finder.d.ts +1 -0
  45. package/dist/preview-server/render-queue/open-directory-in-finder.js +32 -0
  46. package/dist/preview-server/render-queue/open-in-file-explorer.d.ts +2 -0
  47. package/dist/preview-server/render-queue/open-in-file-explorer.js +30 -0
  48. package/dist/preview-server/render-queue/remove-render.d.ts +2 -0
  49. package/dist/preview-server/render-queue/remove-render.js +28 -0
  50. package/dist/preview-server/routes.js +4 -0
  51. package/dist/previewEntry.js +1 -1
  52. package/dist/print-compositions.d.ts +2 -0
  53. package/dist/print-compositions.js +50 -0
  54. package/dist/progress-bar.d.ts +13 -1
  55. package/dist/progress-bar.js +41 -2
  56. package/dist/setup-cache.js +52 -5
  57. package/package.json +7 -7
  58. package/dist/deps.d.ts +0 -2
  59. package/dist/deps.js +0 -36
  60. package/dist/editor/components/KeyboardShortcutsModal.d.ts +0 -2
  61. package/dist/editor/components/KeyboardShortcutsModal.js +0 -67
  62. package/dist/editor/components/QuickSwitcher/agolia-search.d.ts +0 -2
  63. package/dist/editor/components/QuickSwitcher/agolia-search.js +0 -40
  64. package/dist/remotion-cli.d.ts +0 -1
  65. package/dist/remotion-cli.js +0 -15
@@ -10,21 +10,8 @@ const entry_point_1 = require("./entry-point");
10
10
  const get_cli_options_1 = require("./get-cli-options");
11
11
  const get_config_file_name_1 = require("./get-config-file-name");
12
12
  const log_1 = require("./log");
13
- const parse_command_line_1 = require("./parse-command-line");
13
+ const print_compositions_1 = require("./print-compositions");
14
14
  const setup_cache_1 = require("./setup-cache");
15
- const max = (arr) => {
16
- if (arr.length === 0) {
17
- throw new Error('Array of 0 length');
18
- }
19
- let biggest = arr[0];
20
- for (let i = 0; i < arr.length; i++) {
21
- const elem = arr[i];
22
- if (elem > biggest) {
23
- biggest = elem;
24
- }
25
- }
26
- return biggest;
27
- };
28
15
  const listCompositionsCommand = async (remotionRoot, args) => {
29
16
  const { file, reason } = (0, entry_point_1.findEntryPoint)(args, remotionRoot);
30
17
  if (!file) {
@@ -59,36 +46,7 @@ const listCompositionsCommand = async (remotionRoot, args) => {
59
46
  port,
60
47
  downloadMap,
61
48
  });
62
- if (!(0, parse_command_line_1.quietFlagProvided)()) {
63
- log_1.Log.info();
64
- log_1.Log.info('The following compositions are available:');
65
- log_1.Log.info();
66
- }
67
- const firstColumnLength = max(compositions.map(({ id }) => id.length)) + 4;
68
- const secondColumnLength = 8;
69
- const thirdColumnLength = 15;
70
- if ((0, parse_command_line_1.quietFlagProvided)()) {
71
- log_1.Log.info(compositions.map((c) => c.id).join(' '));
72
- return;
73
- }
74
- log_1.Log.info(`${'Composition'.padEnd(firstColumnLength, ' ')}${'FPS'.padEnd(secondColumnLength)}${'Dimensions'.padEnd(thirdColumnLength, ' ')}Duration`);
75
- log_1.Log.info(compositions
76
- .map((comp) => {
77
- const isStill = comp.durationInFrames === 1;
78
- const dimensions = `${comp.width}x${comp.height}`;
79
- const fps = isStill ? '' : comp.fps.toString();
80
- const durationInSeconds = (comp.durationInFrames / comp.fps).toFixed(2);
81
- const formattedDuration = isStill
82
- ? 'Still'
83
- : `${comp.durationInFrames} (${durationInSeconds} sec)`;
84
- return [
85
- comp.id.padEnd(firstColumnLength, ' '),
86
- fps.padEnd(secondColumnLength, ' '),
87
- dimensions.padEnd(thirdColumnLength, ' '),
88
- formattedDuration,
89
- ].join('');
90
- })
91
- .join('\n'));
49
+ (0, print_compositions_1.printCompositions)(compositions);
92
50
  await renderer_1.RenderInternals.cleanDownloadMap(downloadMap);
93
51
  await cleanupBundle();
94
52
  log_1.Log.verbose('Cleaned up', downloadMap.assetDir);
@@ -70,6 +70,7 @@ const log_1 = require("./log");
70
70
  const max_timeline_tracks_2 = require("./max-timeline-tracks");
71
71
  const muted_1 = require("./muted");
72
72
  const number_of_gif_loops_1 = require("./number-of-gif-loops");
73
+ const number_of_shared_audio_tags_1 = require("./number-of-shared-audio-tags");
73
74
  const output_location_2 = require("./output-location");
74
75
  const override_webpack_2 = require("./override-webpack");
75
76
  const overwrite_2 = require("./overwrite");
@@ -86,6 +87,7 @@ exports.Config = {
86
87
  Preview: {
87
88
  setMaxTimelineTracks: max_timeline_tracks_2.setMaxTimelineTracks,
88
89
  setKeyboardShortcutsEnabled: keyboard_shortcuts_1.setKeyboardShortcutsEnabled,
90
+ setNumberOfSharedAudioTags: number_of_shared_audio_tags_1.setNumberOfSharedAudioTags,
89
91
  },
90
92
  Bundling: {
91
93
  overrideWebpackConfig: override_webpack_2.overrideWebpackConfig,
@@ -0,0 +1,2 @@
1
+ export declare const getNumberOfSharedAudioTags: () => number;
2
+ export declare const setNumberOfSharedAudioTags: (audioTags: number) => void;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setNumberOfSharedAudioTags = exports.getNumberOfSharedAudioTags = void 0;
4
+ let numberOfSharedAudioTags = 0;
5
+ const getNumberOfSharedAudioTags = () => {
6
+ return numberOfSharedAudioTags;
7
+ };
8
+ exports.getNumberOfSharedAudioTags = getNumberOfSharedAudioTags;
9
+ const setNumberOfSharedAudioTags = (audioTags) => {
10
+ numberOfSharedAudioTags = audioTags;
11
+ };
12
+ exports.setNumberOfSharedAudioTags = setNumberOfSharedAudioTags;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { TCompMetadata } from 'remotion';
3
+ export declare const COMPOSITION_ITEM_HEIGHT = 32;
4
+ export declare const RenderButton: React.FC<{
5
+ composition: TCompMetadata;
6
+ }>;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderButton = exports.COMPOSITION_ITEM_HEIGHT = 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 render_1 = require("../icons/render");
8
+ const modals_1 = require("../state/modals");
9
+ const z_index_1 = require("../state/z-index");
10
+ exports.COMPOSITION_ITEM_HEIGHT = 32;
11
+ const itemStyle = {
12
+ display: 'flex',
13
+ cursor: 'default',
14
+ alignItems: 'center',
15
+ justifyContent: 'center',
16
+ marginBottom: 1,
17
+ appearance: 'none',
18
+ border: 'none',
19
+ height: exports.COMPOSITION_ITEM_HEIGHT,
20
+ };
21
+ const RenderButton = ({ composition }) => {
22
+ const [hovered, setHovered] = (0, react_1.useState)(false);
23
+ const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
24
+ const onPointerEnter = (0, react_1.useCallback)(() => {
25
+ setHovered(true);
26
+ }, []);
27
+ const onPointerLeave = (0, react_1.useCallback)(() => {
28
+ setHovered(false);
29
+ }, []);
30
+ const { tabIndex } = (0, z_index_1.useZIndex)();
31
+ const style = (0, react_1.useMemo)(() => {
32
+ return {
33
+ ...itemStyle,
34
+ backgroundColor: hovered ? colors_1.CLEAR_HOVER : 'transparent',
35
+ color: hovered ? 'white' : colors_1.LIGHT_TEXT,
36
+ };
37
+ }, [hovered]);
38
+ const iconStyle = (0, react_1.useMemo)(() => {
39
+ return {
40
+ style: {
41
+ height: 14,
42
+ },
43
+ };
44
+ }, []);
45
+ const onClick = (0, react_1.useCallback)(() => {
46
+ setSelectedModal({
47
+ type: 'render',
48
+ composition,
49
+ });
50
+ }, [composition, setSelectedModal]);
51
+ return ((0, jsx_runtime_1.jsx)("button", { style: style, tabIndex: tabIndex, onClick: onClick, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, type: "button", children: (0, jsx_runtime_1.jsx)(render_1.RenderIcon, { svgProps: iconStyle, color: hovered ? 'white' : colors_1.LIGHT_TEXT }) }));
52
+ };
53
+ exports.RenderButton = RenderButton;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { TCompMetadata } from 'remotion';
3
+ export declare const RenderModal: React.FC<{
4
+ composition: TCompMetadata;
5
+ }>;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderModal = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const get_default_out_name_1 = require("../../../get-default-out-name");
7
+ const Button_1 = require("../../../preview-server/error-overlay/remotion-overlay/Button");
8
+ const modals_1 = require("../../state/modals");
9
+ const layout_1 = require("../layout");
10
+ const ModalContainer_1 = require("../ModalContainer");
11
+ const ModalHeader_1 = require("../ModalHeader");
12
+ const RemInput_1 = require("../NewComposition/RemInput");
13
+ const SidebarContent_1 = require("../SidebarContent");
14
+ const initialState = { type: 'idle' };
15
+ const reducer = (state, action) => {
16
+ if (action.type === 'start') {
17
+ return {
18
+ type: 'load',
19
+ };
20
+ }
21
+ if (action.type === 'fail') {
22
+ return {
23
+ type: 'error',
24
+ };
25
+ }
26
+ if (action.type === 'succeed') {
27
+ return {
28
+ type: 'success',
29
+ };
30
+ }
31
+ return state;
32
+ };
33
+ const container = {
34
+ padding: 20,
35
+ };
36
+ const RenderModal = ({ composition, }) => {
37
+ const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
38
+ const onQuit = (0, react_1.useCallback)(() => {
39
+ setSelectedModal(null);
40
+ }, [setSelectedModal]);
41
+ const isMounted = (0, react_1.useRef)(true);
42
+ const [state, dispatch] = (0, react_1.useReducer)(reducer, initialState);
43
+ // TODO: Allow to change out name
44
+ const [outName] = (0, react_1.useState)(() => (0, get_default_out_name_1.getDefaultOutLocation)({
45
+ compositionName: composition.id,
46
+ // TODO: Set default extension
47
+ defaultExtension: 'png',
48
+ }));
49
+ const dispatchIfMounted = (0, react_1.useCallback)((payload) => {
50
+ if (isMounted.current === false)
51
+ return;
52
+ dispatch(payload);
53
+ }, []);
54
+ const onClick = (0, react_1.useCallback)(() => {
55
+ var _a;
56
+ const body = {
57
+ compositionId: composition.id,
58
+ type: 'still',
59
+ outName,
60
+ };
61
+ (_a = SidebarContent_1.leftSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectRendersPanel();
62
+ fetch(`/api/render`, {
63
+ method: 'post',
64
+ headers: {
65
+ 'content-type': 'application/json',
66
+ },
67
+ body: JSON.stringify(body),
68
+ })
69
+ .then((res) => res.json())
70
+ .then((data) => {
71
+ if (data.success) {
72
+ dispatchIfMounted({ type: 'succeed' });
73
+ setSelectedModal(null);
74
+ }
75
+ else {
76
+ dispatchIfMounted({ type: 'fail' });
77
+ }
78
+ })
79
+ .catch(() => {
80
+ dispatchIfMounted({ type: 'fail' });
81
+ });
82
+ }, [composition.id, dispatchIfMounted, outName, setSelectedModal]);
83
+ (0, react_1.useEffect)(() => {
84
+ return () => {
85
+ isMounted.current = false;
86
+ };
87
+ }, []);
88
+ return ((0, jsx_runtime_1.jsxs)(ModalContainer_1.ModalContainer, { onOutsideClick: onQuit, onEscape: onQuit, children: [(0, jsx_runtime_1.jsx)(ModalHeader_1.NewCompHeader, { title: `Render ${composition.id}` }), (0, jsx_runtime_1.jsxs)("div", { style: container, children: [(0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { type: "text", value: outName }) }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { block: true, y: 0.5 }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: onClick, disabled: state.type === 'load', children: state.type === 'idle' ? 'Render' : 'Rendering...' }) })] })] }));
89
+ };
90
+ exports.RenderModal = RenderModal;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { RenderJob } from '../../../preview-server/render-queue/job';
3
+ export declare const RenderQueueItem: React.FC<{
4
+ job: RenderJob;
5
+ }>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderQueueItem = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const layout_1 = require("../layout");
6
+ const RenderQueueItemStatus_1 = require("./RenderQueueItemStatus");
7
+ const RenderQueueOutputName_1 = require("./RenderQueueOutputName");
8
+ const RenderQueueRemoveItem_1 = require("./RenderQueueRemoveItem");
9
+ const container = {
10
+ padding: 12,
11
+ display: 'flex',
12
+ flexDirection: 'row',
13
+ paddingBottom: 10,
14
+ };
15
+ const title = {
16
+ fontSize: 13,
17
+ lineHeight: 1,
18
+ };
19
+ const right = {
20
+ flex: 1,
21
+ };
22
+ 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 })] }));
24
+ };
25
+ exports.RenderQueueItem = RenderQueueItem;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { RenderJob } from '../../../preview-server/render-queue/job';
3
+ export declare const RenderQueueItemStatus: React.FC<{
4
+ job: RenderJob;
5
+ }>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderQueueItemStatus = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const colors_1 = require("../../helpers/colors");
6
+ const iconStyle = {
7
+ height: 16,
8
+ width: 16,
9
+ };
10
+ const RenderQueueItemStatus = ({ job }) => {
11
+ if (job.status === 'failed') {
12
+ return ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("svg", { style: iconStyle, viewBox: "0 0 512 512", children: (0, jsx_runtime_1.jsx)("path", { fill: colors_1.FAIL_COLOR, d: "M0 160V352L160 512H352L512 352V160L352 0H160L0 160zm353.9 32l-17 17-47 47 47 47 17 17L320 353.9l-17-17-47-47-47 47-17 17L158.1 320l17-17 47-47-47-47-17-17L192 158.1l17 17 47 47 47-47 17-17L353.9 192z" }) }) }));
13
+ }
14
+ if (job.status === 'idle') {
15
+ 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
+ return (0, jsx_runtime_1.jsx)("div", { children: job.status });
18
+ };
19
+ exports.RenderQueueItemStatus = RenderQueueItemStatus;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { RenderJob } from '../../../preview-server/render-queue/job';
3
+ export declare const RenderQueueOutputName: React.FC<{
4
+ job: RenderJob;
5
+ }>;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderQueueOutputName = 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 layout_1 = require("../layout");
8
+ const NotificationCenter_1 = require("../Notifications/NotificationCenter");
9
+ const outputLocation = {
10
+ fontSize: 13,
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
+ };
31
+ const RenderQueueOutputName = ({ job }) => {
32
+ const onClick = (0, react_1.useCallback)(() => {
33
+ const body = {
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) => {
59
+ var _a;
60
+ (_a = NotificationCenter_1.notificationCenter.current) === null || _a === void 0 ? void 0 : _a.addNotification({
61
+ content: `Could not open file: ${err.message}`,
62
+ created: Date.now(),
63
+ duration: 2000,
64
+ id: String(Math.random()),
65
+ });
66
+ });
67
+ }, [job.outputLocation]);
68
+ return ((0, jsx_runtime_1.jsx)("button", { onClick: onClick, type: "button", style: outputLocation, title: job.outputLocation, children: formatOutputLocation(job.outputLocation) }));
69
+ };
70
+ exports.RenderQueueOutputName = RenderQueueOutputName;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { RenderJob } from '../../../preview-server/render-queue/job';
3
+ export declare const RenderQueueRemoveItem: React.FC<{
4
+ job: RenderJob;
5
+ }>;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderQueueRemoveItem = 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 RenderQueueRemoveItem = ({ job }) => {
8
+ const onClick = (0, react_1.useCallback)(() => {
9
+ const body = {
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(() => {
26
+ // TODO: Handle error
27
+ });
28
+ }, [job.id]);
29
+ const [hovered, setHovered] = (0, react_1.useState)(false);
30
+ const icon = (0, react_1.useMemo)(() => {
31
+ return {
32
+ height: 12,
33
+ };
34
+ }, []);
35
+ const onPointerEnter = (0, react_1.useCallback)(() => {
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" }) }) }));
55
+ };
56
+ exports.RenderQueueRemoveItem = RenderQueueRemoveItem;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import type { RenderJob } from '../../../preview-server/render-queue/job';
3
+ declare global {
4
+ interface Window {
5
+ remotion_initialRenderQueue: RenderJob[];
6
+ }
7
+ }
8
+ declare type RenderQueueContextType = {
9
+ jobs: RenderJob[];
10
+ };
11
+ export declare const RenderQueueContext: React.Context<RenderQueueContextType>;
12
+ export declare const renderJobsRef: React.RefObject<{
13
+ updateRenderJobs: (jobs: RenderJob[]) => void;
14
+ }>;
15
+ export declare const RenderQueueContextProvider: React.FC<{
16
+ children: React.ReactNode;
17
+ }>;
18
+ export {};
@@ -0,0 +1,49 @@
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
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.RenderQueueContextProvider = exports.renderJobsRef = exports.RenderQueueContext = void 0;
27
+ const jsx_runtime_1 = require("react/jsx-runtime");
28
+ const react_1 = __importStar(require("react"));
29
+ exports.RenderQueueContext = react_1.default.createContext({
30
+ jobs: [],
31
+ });
32
+ exports.renderJobsRef = (0, react_1.createRef)();
33
+ const RenderQueueContextProvider = ({ children }) => {
34
+ const [jobs, setJobs] = (0, react_1.useState)(window.remotion_initialRenderQueue);
35
+ const value = (0, react_1.useMemo)(() => {
36
+ return {
37
+ jobs,
38
+ };
39
+ }, [jobs]);
40
+ (0, react_1.useImperativeHandle)(exports.renderJobsRef, () => {
41
+ return {
42
+ updateRenderJobs: (newJobs) => {
43
+ setJobs(newJobs);
44
+ },
45
+ };
46
+ }, []);
47
+ return ((0, jsx_runtime_1.jsx)(exports.RenderQueueContext.Provider, { value: value, children: children }));
48
+ };
49
+ exports.RenderQueueContextProvider = RenderQueueContextProvider;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const RenderQueue: React.FC;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderQueue = 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 context_1 = require("./context");
8
+ const RenderQueueItem_1 = require("./RenderQueueItem");
9
+ const separatorStyle = {
10
+ borderBottom: '1px solid ' + colors_1.BORDER_COLOR,
11
+ };
12
+ const RenderQueue = () => {
13
+ const { jobs } = (0, react_1.useContext)(context_1.RenderQueueContext);
14
+ return ((0, jsx_runtime_1.jsx)("div", { children: jobs.map((j, index) => {
15
+ return ((0, jsx_runtime_1.jsx)("div", { style: index === jobs.length - 1 ? undefined : separatorStyle, children: (0, jsx_runtime_1.jsx)(RenderQueueItem_1.RenderQueueItem, { job: j }) }, j.id));
16
+ }) }));
17
+ };
18
+ exports.RenderQueue = RenderQueue;
@@ -0,0 +1,6 @@
1
+ import type { MouseEventHandler } from 'react';
2
+ import React from 'react';
3
+ export declare const RendersTab: React.FC<{
4
+ selected: boolean;
5
+ onClick: MouseEventHandler<HTMLButtonElement>;
6
+ }>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RendersTab = 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 layout_1 = require("./layout");
8
+ const context_1 = require("./RenderQueue/context");
9
+ const Tabs_1 = require("./Tabs");
10
+ const row = {
11
+ display: 'flex',
12
+ flexDirection: 'row',
13
+ fontSize: 13,
14
+ justifyContent: 'center',
15
+ color: 'inherit',
16
+ alignItems: 'center',
17
+ };
18
+ const badge = {
19
+ height: 16,
20
+ width: 16,
21
+ borderRadius: 8,
22
+ fontSize: 10,
23
+ display: 'inline-flex',
24
+ justifyContent: 'center',
25
+ alignItems: 'center',
26
+ };
27
+ const RendersTab = ({ selected, onClick }) => {
28
+ const { jobs } = (0, react_1.useContext)(context_1.RenderQueueContext);
29
+ const failedJobs = jobs.filter((j) => j.status === 'failed').length;
30
+ const jobCount = jobs.length;
31
+ const badgeStyle = (0, react_1.useMemo)(() => {
32
+ return {
33
+ ...badge,
34
+ backgroundColor: failedJobs > 0 ? colors_1.FAIL_COLOR : 'white',
35
+ color: failedJobs > 0 ? 'white' : 'black',
36
+ };
37
+ }, [failedJobs]);
38
+ 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] }) }));
39
+ };
40
+ exports.RendersTab = RendersTab;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export declare const leftSidebarTabs: React.RefObject<{
3
+ selectRendersPanel: () => void;
4
+ }>;
5
+ export declare const SidebarContent: React.FC;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SidebarContent = exports.leftSidebarTabs = 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 CompositionSelector_1 = require("./CompositionSelector");
8
+ const RenderQueue_1 = require("./RenderQueue");
9
+ const RendersTab_1 = require("./RendersTab");
10
+ const Tabs_1 = require("./Tabs");
11
+ const container = {
12
+ width: '100%',
13
+ };
14
+ const tabsContainer = {
15
+ padding: 4,
16
+ borderBottom: `1px solid ${colors_1.BORDER_COLOR}`,
17
+ };
18
+ exports.leftSidebarTabs = (0, react_1.createRef)();
19
+ const SidebarContent = () => {
20
+ const [panel, setPanel] = (0, react_1.useState)('compositions');
21
+ const onCompositionsSelected = (0, react_1.useCallback)(() => {
22
+ setPanel('compositions');
23
+ }, []);
24
+ const onRendersSelected = (0, react_1.useCallback)(() => {
25
+ setPanel('renders');
26
+ }, []);
27
+ (0, react_1.useImperativeHandle)(exports.leftSidebarTabs, () => {
28
+ return {
29
+ selectRendersPanel: () => setPanel('renders'),
30
+ };
31
+ }, []);
32
+ return ((0, jsx_runtime_1.jsxs)("div", { style: container, children: [(0, jsx_runtime_1.jsx)("div", { style: tabsContainer, children: (0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { children: [(0, jsx_runtime_1.jsx)(Tabs_1.Tab, { selected: panel === 'compositions', onClick: onCompositionsSelected, children: "Compositions" }), (0, jsx_runtime_1.jsx)(RendersTab_1.RendersTab, { onClick: onRendersSelected, selected: panel === 'renders' })] }) }), panel === 'compositions' ? (0, jsx_runtime_1.jsx)(CompositionSelector_1.CompositionSelector, {}) : (0, jsx_runtime_1.jsx)(RenderQueue_1.RenderQueue, {})] }));
33
+ };
34
+ exports.SidebarContent = SidebarContent;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export declare const Tabs: React.FC<{
3
+ children: React.ReactNode;
4
+ style?: React.CSSProperties;
5
+ }>;
6
+ export declare const Tab: React.FC<{
7
+ children: React.ReactNode;
8
+ onClick: React.MouseEventHandler<HTMLButtonElement>;
9
+ style?: React.CSSProperties;
10
+ selected: boolean;
11
+ }>;