@remotion/cli 4.0.0-alpha.185 → 4.0.0-alpha.217
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/ansi/ansi-split.d.ts +1 -0
- package/dist/ansi/ansi-split.js +16 -3
- package/dist/benchmark.js +3 -0
- package/dist/color-math.d.ts +2 -1
- package/dist/color-math.js +2 -3
- package/dist/composition-prompts.d.ts +3 -4
- package/dist/composition-prompts.js +0 -1
- package/dist/compositions.js +3 -0
- package/dist/config/browser.d.ts +1 -3
- package/dist/config/browser.js +2 -12
- package/dist/config/index.d.ts +11 -2
- package/dist/config/index.js +6 -1
- package/dist/config/scale.d.ts +2 -1
- package/dist/config/user-agent.d.ts +4 -0
- package/dist/config/user-agent.js +12 -0
- package/dist/download-progress.js +7 -2
- package/dist/editor/components/EditorContexts.js +2 -1
- package/dist/editor/components/Menu/MenuSubItem.d.ts +0 -1
- package/dist/editor/components/Menu/MenuSubItem.js +1 -2
- package/dist/editor/components/ModalContainer.d.ts +2 -0
- package/dist/editor/components/ModalContainer.js +12 -3
- package/dist/editor/components/Modals.js +1 -1
- package/dist/editor/components/NewComposition/InputDragger.d.ts +1 -0
- package/dist/editor/components/NewComposition/InputDragger.js +2 -2
- package/dist/editor/components/NewComposition/NewCompDuration.js +1 -1
- package/dist/editor/components/NewComposition/NewComposition.js +8 -5
- package/dist/editor/components/NewComposition/RemInput.d.ts +2 -1
- package/dist/editor/components/NewComposition/RemInput.js +3 -2
- package/dist/editor/components/NewComposition/RemInputTypeColor.d.ts +0 -1
- package/dist/editor/components/NewComposition/RemInputTypeColor.js +3 -3
- package/dist/editor/components/NewComposition/ValidationMessage.js +2 -2
- package/dist/editor/components/Notifications/ServerDisconnected.d.ts +0 -4
- package/dist/editor/components/Notifications/ServerDisconnected.js +1 -2
- package/dist/editor/components/PlaybackRateSelector.d.ts +0 -2
- package/dist/editor/components/PlaybackRateSelector.js +5 -6
- package/dist/editor/components/Preview.d.ts +0 -1
- package/dist/editor/components/Preview.js +4 -4
- package/dist/editor/components/PreviewToolbar.js +1 -1
- package/dist/editor/components/QuickSwitcher/QuickSwitcherContent.js +1 -1
- package/dist/editor/components/QuickSwitcher/algolia-search.d.ts +0 -27
- package/dist/editor/components/QuickSwitcher/algolia-search.js +2 -3
- package/dist/editor/components/RenderButton.js +9 -2
- package/dist/editor/components/RenderModal/CrfSetting.js +1 -1
- package/dist/editor/components/RenderModal/EnvInput.js +1 -1
- package/dist/editor/components/RenderModal/FrameRangeSetting.js +1 -1
- package/dist/editor/components/RenderModal/NumberOfLoopsSetting.js +1 -1
- package/dist/editor/components/RenderModal/NumberSetting.js +1 -1
- package/dist/editor/components/RenderModal/RenderModal.d.ts +1 -0
- package/dist/editor/components/RenderModal/RenderModal.js +20 -11
- package/dist/editor/components/RenderModal/RenderModalAudio.js +1 -1
- package/dist/editor/components/RenderModal/RenderModalBasic.js +1 -1
- package/dist/editor/components/RenderModal/RenderModalData.js +116 -13
- package/dist/editor/components/RenderModal/RenderModalInput.js +1 -1
- package/dist/editor/components/RenderModal/RenderModalJSONInputPropsEditor.d.ts +1 -2
- package/dist/editor/components/RenderModal/RenderModalPicture.js +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.d.ts +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.js +9 -42
- package/dist/editor/components/RenderModal/SchemaEditor/SchemaErrorMessages.d.ts +11 -0
- package/dist/editor/components/RenderModal/SchemaEditor/SchemaErrorMessages.js +55 -0
- package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayEditor.d.ts +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayEditor.js +10 -5
- package/dist/editor/components/RenderModal/SchemaEditor/ZodColorEditor.d.ts +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodColorEditor.js +17 -9
- package/dist/editor/components/RenderModal/SchemaEditor/ZodDateEditor.d.ts +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodDateEditor.js +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodEffectEditor.d.ts +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodEffectEditor.js +7 -3
- package/dist/editor/components/RenderModal/SchemaEditor/ZodEnumEditor.d.ts +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodEnumEditor.js +7 -3
- package/dist/editor/components/RenderModal/SchemaEditor/ZodErrorMessages.d.ts +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodNullableEditor.d.ts +14 -0
- package/dist/editor/components/RenderModal/SchemaEditor/ZodNullableEditor.js +10 -0
- package/dist/editor/components/RenderModal/SchemaEditor/ZodNumberEditor.d.ts +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodNumberEditor.js +1 -2
- package/dist/editor/components/RenderModal/SchemaEditor/ZodObjectEditor.d.ts +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodObjectEditor.js +6 -2
- package/dist/editor/components/RenderModal/SchemaEditor/ZodOptionalEditor.d.ts +14 -0
- package/dist/editor/components/RenderModal/SchemaEditor/ZodOptionalEditor.js +10 -0
- package/dist/editor/components/RenderModal/SchemaEditor/ZodOrNullishEditor.d.ts +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +11 -4
- package/dist/editor/components/RenderModal/SchemaEditor/ZodStringEditor.d.ts +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodStringEditor.js +6 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodSwitch.d.ts +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodSwitch.js +30 -18
- package/dist/editor/components/RenderModal/SchemaEditor/ZodUnionEditor.d.ts +1 -1
- package/dist/editor/components/RenderModal/SchemaEditor/ZodUnionEditor.js +12 -8
- package/dist/editor/components/RenderModal/SchemaEditor/create-zod-values.d.ts +2 -2
- package/dist/editor/components/RenderModal/SchemaEditor/create-zod-values.js +62 -57
- package/dist/editor/components/RenderModal/WarningIndicatorButton.d.ts +6 -0
- package/dist/editor/components/RenderModal/WarningIndicatorButton.js +49 -0
- package/dist/editor/components/RenderModal/get-render-modal-warnings.d.ts +11 -0
- package/dist/editor/components/RenderModal/get-render-modal-warnings.js +26 -0
- package/dist/editor/components/RenderModal/layout.js +0 -1
- package/dist/editor/components/RenderModal/out-name-checker.d.ts +0 -1
- package/dist/editor/components/RenderModal/out-name-checker.js +3 -3
- package/dist/editor/components/RenderQueue/actions.d.ts +0 -2
- package/dist/editor/components/RenderQueue/actions.js +10 -11
- package/dist/editor/components/RenderQueue/index.js +25 -1
- package/dist/editor/components/RenderToolbarIcon.js +25 -10
- package/dist/editor/components/SegmentedControl.d.ts +0 -5
- package/dist/editor/components/SegmentedControl.js +2 -3
- package/dist/editor/components/SizeSelector.d.ts +0 -1
- package/dist/editor/components/SizeSelector.js +3 -3
- package/dist/editor/components/Splitter/SplitterElement.js +1 -0
- package/dist/editor/components/Splitter/SplitterHandle.d.ts +0 -1
- package/dist/editor/components/Splitter/SplitterHandle.js +6 -6
- package/dist/editor/components/Tabs/index.d.ts +0 -1
- package/dist/editor/components/Tabs/index.js +3 -3
- package/dist/editor/components/Tabs/vertical.d.ts +0 -5
- package/dist/editor/components/Tabs/vertical.js +3 -17
- package/dist/editor/components/TimeValue.js +3 -4
- package/dist/editor/components/Timeline/TimelineListItem.js +9 -1
- package/dist/editor/components/Timeline/imperative-state.d.ts +0 -4
- package/dist/editor/components/Timeline/imperative-state.js +13 -13
- package/dist/editor/components/Timeline/timeline-scroll-logic.d.ts +0 -1
- package/dist/editor/components/Timeline/timeline-scroll-logic.js +5 -6
- package/dist/editor/components/ZoomPersistor.d.ts +0 -1
- package/dist/editor/components/ZoomPersistor.js +2 -3
- package/dist/editor/components/get-zod-if-possible.d.ts +10 -0
- package/dist/editor/components/get-zod-if-possible.js +79 -0
- package/dist/editor/helpers/calculate-timeline.d.ts +0 -4
- package/dist/editor/helpers/colors.d.ts +0 -1
- package/dist/editor/helpers/colors.js +3 -3
- package/dist/editor/helpers/create-folder-tree.d.ts +0 -1
- package/dist/editor/helpers/create-folder-tree.js +3 -4
- package/dist/editor/helpers/get-timeline-sequence-sort-key.d.ts +2 -1
- package/dist/editor/icons/caret.d.ts +4 -2
- package/dist/editor/icons/caret.js +17 -3
- package/dist/editor/state/keybindings.d.ts +2 -1
- package/dist/editor/state/modals.d.ts +1 -0
- package/dist/editor/state/preview-size.d.ts +0 -1
- package/dist/editor/state/preview-size.js +3 -4
- package/dist/editor/state/sidebar.d.ts +1 -1
- package/dist/editor/state/timeline-ref.d.ts +2 -1
- package/dist/editor/state/z-index.d.ts +0 -5
- package/dist/editor/state/z-index.js +8 -5
- package/dist/get-cli-options.js +1 -0
- package/dist/get-config-file-name.d.ts +0 -2
- package/dist/get-config-file-name.js +7 -7
- package/dist/index.d.ts +52 -1
- package/dist/list-of-remotion-packages.js +1 -0
- package/dist/parse-command-line.d.ts +3 -1
- package/dist/parse-command-line.js +3 -0
- package/dist/preview-server/api-types.d.ts +0 -4
- package/dist/preview-server/dev-middleware/middleware.d.ts +0 -1
- package/dist/preview-server/dev-middleware/middleware.js +1 -2
- package/dist/preview-server/error-overlay/remotion-overlay/Button.d.ts +8 -5
- package/dist/preview-server/error-overlay/remotion-overlay/Button.js +5 -4
- package/dist/preview-server/hot-middleware/client.js +2 -2
- package/dist/preview-server/public-folder.d.ts +0 -5
- package/dist/preview-server/public-folder.js +3 -4
- package/dist/preview-server/render-queue/job.d.ts +1 -1
- package/dist/preview-server/render-queue/make-retry-payload.js +2 -0
- package/dist/preview-server/render-queue/queue.d.ts +1 -13
- package/dist/preview-server/render-queue/queue.js +13 -9
- package/dist/progress-bar.d.ts +1 -12
- package/dist/progress-bar.js +4 -15
- package/dist/render-flows/render.js +3 -0
- package/dist/render-flows/still.js +6 -0
- package/dist/select-composition.d.ts +2 -1
- package/dist/setup-cache.d.ts +2 -14
- package/dist/setup-cache.js +6 -5
- package/package.json +10 -8
- package/dist/editor/components/CollapsedSidebarExpander.d.ts +0 -5
- package/dist/editor/components/CollapsedSidebarExpander.js +0 -40
- 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
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getFiles = exports.
|
|
6
|
+
exports.getFiles = exports.fetchFolder = exports.initPublicFolderWatch = void 0;
|
|
7
7
|
const bundler_1 = require("@remotion/bundler");
|
|
8
8
|
const fs_1 = require("fs");
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
@@ -11,7 +11,7 @@ const env_supports_fs_recursive_1 = require("./env-supports-fs-recursive");
|
|
|
11
11
|
let files = [];
|
|
12
12
|
const initPublicFolderWatch = ({ publicDir, onUpdate, staticHash, }) => {
|
|
13
13
|
(0, exports.fetchFolder)({ publicDir, staticHash });
|
|
14
|
-
|
|
14
|
+
watchPublicFolder({ publicDir, onUpdate, staticHash });
|
|
15
15
|
};
|
|
16
16
|
exports.initPublicFolderWatch = initPublicFolderWatch;
|
|
17
17
|
const fetchFolder = ({ publicDir, staticHash, }) => {
|
|
@@ -33,7 +33,7 @@ const watchPublicFolder = ({ publicDir, onUpdate, staticHash, }) => {
|
|
|
33
33
|
const parentDir = path_1.default.dirname(publicDir);
|
|
34
34
|
const onDirChange = () => {
|
|
35
35
|
if ((0, fs_1.existsSync)(publicDir)) {
|
|
36
|
-
|
|
36
|
+
watchPublicFolder({
|
|
37
37
|
publicDir,
|
|
38
38
|
onUpdate,
|
|
39
39
|
staticHash,
|
|
@@ -49,7 +49,6 @@ const watchPublicFolder = ({ publicDir, onUpdate, staticHash, }) => {
|
|
|
49
49
|
onUpdate();
|
|
50
50
|
});
|
|
51
51
|
};
|
|
52
|
-
exports.watchPublicFolder = watchPublicFolder;
|
|
53
52
|
const getFiles = () => {
|
|
54
53
|
return files;
|
|
55
54
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AudioCodec, Codec, makeCancelSignal, PixelFormat, ProResProfile, StillImageFormat, VideoImageFormat } from '@remotion/renderer';
|
|
2
2
|
import type { AggregateRenderProgress } from '../../progress-types';
|
|
3
3
|
import type { RequiredChromiumOptions } from '../../required-chromium-options';
|
|
4
|
-
|
|
4
|
+
declare type BaseRenderProgress = {
|
|
5
5
|
message: string;
|
|
6
6
|
value: number;
|
|
7
7
|
};
|
|
@@ -44,6 +44,7 @@ const makeRetryPayload = (job) => {
|
|
|
44
44
|
initialOpenGlRenderer: job.chromiumOptions.gl,
|
|
45
45
|
initialHeadless: job.chromiumOptions.headless,
|
|
46
46
|
initialIgnoreCertificateErrors: job.chromiumOptions.ignoreCertificateErrors,
|
|
47
|
+
defaultProps: job.inputProps,
|
|
47
48
|
};
|
|
48
49
|
}
|
|
49
50
|
if (job.type === 'video') {
|
|
@@ -82,6 +83,7 @@ const makeRetryPayload = (job) => {
|
|
|
82
83
|
initialOpenGlRenderer: job.chromiumOptions.gl,
|
|
83
84
|
initialHeadless: job.chromiumOptions.headless,
|
|
84
85
|
initialIgnoreCertificateErrors: job.chromiumOptions.ignoreCertificateErrors,
|
|
86
|
+
defaultProps: job.inputProps,
|
|
85
87
|
};
|
|
86
88
|
}
|
|
87
89
|
throw new Error(`Job ${JSON.stringify(job)} Not implemented`);
|
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { RenderJob, RenderJobWithCleanup } from './job';
|
|
2
2
|
export declare const getRenderQueue: () => RenderJob[];
|
|
3
|
-
export declare const notifyClientsOfJobUpdate: () => void;
|
|
4
|
-
export declare const processJob: ({ job, remotionRoot, entryPoint, onProgress, addCleanupCallback, }: {
|
|
5
|
-
job: RenderJob;
|
|
6
|
-
remotionRoot: string;
|
|
7
|
-
entryPoint: string;
|
|
8
|
-
onProgress: JobProgressCallback;
|
|
9
|
-
addCleanupCallback: (cb: () => void) => void;
|
|
10
|
-
}) => Promise<void>;
|
|
11
3
|
export declare const addJob: ({ job, entryPoint, remotionRoot, }: {
|
|
12
4
|
job: RenderJobWithCleanup;
|
|
13
5
|
entryPoint: string;
|
|
@@ -15,7 +7,3 @@ export declare const addJob: ({ job, entryPoint, remotionRoot, }: {
|
|
|
15
7
|
}) => void;
|
|
16
8
|
export declare const removeJob: (jobId: string) => void;
|
|
17
9
|
export declare const cancelJob: (jobId: string) => void;
|
|
18
|
-
export declare const processJobIfPossible: ({ remotionRoot, entryPoint, }: {
|
|
19
|
-
remotionRoot: string;
|
|
20
|
-
entryPoint: string;
|
|
21
|
-
}) => Promise<void>;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.cancelJob = exports.removeJob = exports.addJob = exports.getRenderQueue = void 0;
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const chalk_1 = require("../../chalk");
|
|
9
9
|
const file_watcher_1 = require("../../file-watcher");
|
|
@@ -21,7 +21,7 @@ const updateJob = (id, updater) => {
|
|
|
21
21
|
}
|
|
22
22
|
return j;
|
|
23
23
|
});
|
|
24
|
-
|
|
24
|
+
notifyClientsOfJobUpdate();
|
|
25
25
|
};
|
|
26
26
|
const getRenderQueue = () => {
|
|
27
27
|
return jobQueue.map((j) => {
|
|
@@ -38,7 +38,6 @@ const notifyClientsOfJobUpdate = () => {
|
|
|
38
38
|
});
|
|
39
39
|
});
|
|
40
40
|
};
|
|
41
|
-
exports.notifyClientsOfJobUpdate = notifyClientsOfJobUpdate;
|
|
42
41
|
const processJob = async ({ job, remotionRoot, entryPoint, onProgress, addCleanupCallback, }) => {
|
|
43
42
|
if (job.type === 'still') {
|
|
44
43
|
await (0, process_still_1.processStill)({
|
|
@@ -62,11 +61,10 @@ const processJob = async ({ job, remotionRoot, entryPoint, onProgress, addCleanu
|
|
|
62
61
|
}
|
|
63
62
|
throw new Error(`Unknown job ${JSON.stringify(job)}`);
|
|
64
63
|
};
|
|
65
|
-
exports.processJob = processJob;
|
|
66
64
|
const addJob = ({ job, entryPoint, remotionRoot, }) => {
|
|
67
65
|
jobQueue.push(job);
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
processJobIfPossible({ entryPoint, remotionRoot });
|
|
67
|
+
notifyClientsOfJobUpdate();
|
|
70
68
|
};
|
|
71
69
|
exports.addJob = addJob;
|
|
72
70
|
const removeJob = (jobId) => {
|
|
@@ -79,7 +77,7 @@ const removeJob = (jobId) => {
|
|
|
79
77
|
}
|
|
80
78
|
return true;
|
|
81
79
|
});
|
|
82
|
-
|
|
80
|
+
notifyClientsOfJobUpdate();
|
|
83
81
|
};
|
|
84
82
|
exports.removeJob = removeJob;
|
|
85
83
|
const cancelJob = (jobId) => {
|
|
@@ -96,6 +94,12 @@ const cancelJob = (jobId) => {
|
|
|
96
94
|
exports.cancelJob = cancelJob;
|
|
97
95
|
// TODO: Currently, concurrency = 1 is not enforced
|
|
98
96
|
const processJobIfPossible = async ({ remotionRoot, entryPoint, }) => {
|
|
97
|
+
const runningJob = jobQueue.find((q) => {
|
|
98
|
+
return q.status === 'running';
|
|
99
|
+
});
|
|
100
|
+
if (runningJob) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
99
103
|
const nextJob = jobQueue.find((q) => {
|
|
100
104
|
return q.status === 'idle';
|
|
101
105
|
});
|
|
@@ -118,7 +122,7 @@ const processJobIfPossible = async ({ remotionRoot, entryPoint, }) => {
|
|
|
118
122
|
const startTime = Date.now();
|
|
119
123
|
log_1.Log.info(chalk_1.chalk.gray('╭─ Starting render '));
|
|
120
124
|
let lastProgress = null;
|
|
121
|
-
await
|
|
125
|
+
await processJob({
|
|
122
126
|
job: nextJob,
|
|
123
127
|
entryPoint,
|
|
124
128
|
remotionRoot,
|
|
@@ -204,5 +208,5 @@ const processJobIfPossible = async ({ remotionRoot, entryPoint, }) => {
|
|
|
204
208
|
finally {
|
|
205
209
|
await Promise.all(jobCleanups.map((c) => c()));
|
|
206
210
|
}
|
|
211
|
+
processJobIfPossible({ remotionRoot, entryPoint });
|
|
207
212
|
};
|
|
208
|
-
exports.processJobIfPossible = processJobIfPossible;
|
package/dist/progress-bar.d.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import type { CancelSignal } from '@remotion/renderer';
|
|
2
|
-
import type { AggregateRenderProgress
|
|
3
|
-
export declare const createProgressBar: (quiet: boolean, cancelSignal: CancelSignal | null) => {
|
|
4
|
-
update: (str: string) => boolean;
|
|
5
|
-
};
|
|
2
|
+
import type { AggregateRenderProgress } from './progress-types';
|
|
6
3
|
export declare type OverwriteableCliOutput = {
|
|
7
4
|
update: (up: string) => boolean;
|
|
8
5
|
};
|
|
@@ -26,13 +23,6 @@ export declare const makeBundlingAndCopyProgress: ({ bundling, copying, symLinks
|
|
|
26
23
|
copying: CopyingState;
|
|
27
24
|
symLinks: SymbolicLinksState;
|
|
28
25
|
}, indent: boolean, bundlingStep: number, steps: number) => string;
|
|
29
|
-
export declare const makeRenderingProgress: ({ frames, totalFrames, steps, concurrency, doneIn }: RenderingProgressInput, indent: boolean) => string;
|
|
30
|
-
export declare const makeStitchingProgress: ({ stitchingProgress, indent, steps, stitchingStep, }: {
|
|
31
|
-
stitchingProgress: StitchingProgressInput;
|
|
32
|
-
indent: boolean;
|
|
33
|
-
steps: number;
|
|
34
|
-
stitchingStep: number;
|
|
35
|
-
}) => string;
|
|
36
26
|
export declare const makeRenderingAndStitchingProgress: ({ prog, indent, steps, stitchingStep, }: {
|
|
37
27
|
prog: AggregateRenderProgress;
|
|
38
28
|
indent: boolean;
|
|
@@ -43,4 +33,3 @@ export declare const makeRenderingAndStitchingProgress: ({ prog, indent, steps,
|
|
|
43
33
|
progress: number;
|
|
44
34
|
message: string;
|
|
45
35
|
};
|
|
46
|
-
export declare const getGuiProgressSubtitle: (progress: AggregateRenderProgress) => string;
|
package/dist/progress-bar.js
CHANGED
|
@@ -1,21 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.makeRenderingAndStitchingProgress = exports.makeBundlingAndCopyProgress = exports.createOverwriteableCliOutput = void 0;
|
|
4
4
|
const renderer_1 = require("@remotion/renderer");
|
|
5
5
|
const ansi_diff_1 = require("./ansi/ansi-diff");
|
|
6
6
|
const chalk_1 = require("./chalk");
|
|
7
|
-
const config_1 = require("./config");
|
|
8
7
|
const download_progress_1 = require("./download-progress");
|
|
9
8
|
const log_1 = require("./log");
|
|
10
9
|
const make_progress_bar_1 = require("./make-progress-bar");
|
|
11
10
|
const truthy_1 = require("./truthy");
|
|
12
|
-
const createProgressBar = (quiet, cancelSignal) => {
|
|
13
|
-
if (!renderer_1.RenderInternals.isEqualOrBelowLogLevel(config_1.ConfigInternals.Logging.getLogLevel(), 'info')) {
|
|
14
|
-
return { update: () => false };
|
|
15
|
-
}
|
|
16
|
-
return (0, exports.createOverwriteableCliOutput)({ quiet, cancelSignal });
|
|
17
|
-
};
|
|
18
|
-
exports.createProgressBar = createProgressBar;
|
|
19
11
|
const createOverwriteableCliOutput = (options) => {
|
|
20
12
|
var _a;
|
|
21
13
|
if (options.quiet) {
|
|
@@ -114,7 +106,6 @@ const makeRenderingProgress = ({ frames, totalFrames, steps, concurrency, doneIn
|
|
|
114
106
|
.filter(truthy_1.truthy)
|
|
115
107
|
.join(' ');
|
|
116
108
|
};
|
|
117
|
-
exports.makeRenderingProgress = makeRenderingProgress;
|
|
118
109
|
const makeStitchingProgress = ({ stitchingProgress, indent, steps, stitchingStep, }) => {
|
|
119
110
|
const { frames, totalFrames, doneIn, stage, codec } = stitchingProgress;
|
|
120
111
|
const progress = frames / totalFrames;
|
|
@@ -135,15 +126,14 @@ const makeStitchingProgress = ({ stitchingProgress, indent, steps, stitchingStep
|
|
|
135
126
|
.filter(truthy_1.truthy)
|
|
136
127
|
.join(' ');
|
|
137
128
|
};
|
|
138
|
-
exports.makeStitchingProgress = makeStitchingProgress;
|
|
139
129
|
const makeRenderingAndStitchingProgress = ({ prog, indent, steps, stitchingStep, }) => {
|
|
140
130
|
const { rendering, stitching, downloads, bundling } = prog;
|
|
141
131
|
const output = [
|
|
142
|
-
rendering ?
|
|
132
|
+
rendering ? makeRenderingProgress(rendering, indent) : null,
|
|
143
133
|
(0, download_progress_1.makeMultiDownloadProgress)(downloads, indent),
|
|
144
134
|
stitching === null
|
|
145
135
|
? null
|
|
146
|
-
:
|
|
136
|
+
: makeStitchingProgress({
|
|
147
137
|
stitchingProgress: stitching,
|
|
148
138
|
indent,
|
|
149
139
|
steps,
|
|
@@ -159,7 +149,7 @@ const makeRenderingAndStitchingProgress = ({ prog, indent, steps, stitchingStep,
|
|
|
159
149
|
? stitching.frames / stitching.totalFrames
|
|
160
150
|
: 0;
|
|
161
151
|
const progress = bundling.progress * 0.3 + renderProgress * 0.6 + stitchingProgress * 0.1;
|
|
162
|
-
return { output, progress, message:
|
|
152
|
+
return { output, progress, message: getGuiProgressSubtitle(prog) };
|
|
163
153
|
};
|
|
164
154
|
exports.makeRenderingAndStitchingProgress = makeRenderingAndStitchingProgress;
|
|
165
155
|
const getGuiProgressSubtitle = (progress) => {
|
|
@@ -187,4 +177,3 @@ const getGuiProgressSubtitle = (progress) => {
|
|
|
187
177
|
}
|
|
188
178
|
return `Stitching ${progress.stitching.frames}/${progress.stitching.totalFrames}`;
|
|
189
179
|
};
|
|
190
|
-
exports.getGuiProgressSubtitle = getGuiProgressSubtitle;
|
|
@@ -84,6 +84,9 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
|
|
|
84
84
|
logLevel,
|
|
85
85
|
bundlingStep: steps.indexOf('bundling'),
|
|
86
86
|
steps: steps.length,
|
|
87
|
+
onDirectoryCreated: (dir) => {
|
|
88
|
+
addCleanupCallback(() => renderer_1.RenderInternals.deleteDirectory(dir));
|
|
89
|
+
},
|
|
87
90
|
});
|
|
88
91
|
addCleanupCallback(() => cleanupBundle());
|
|
89
92
|
const onDownload = (src) => {
|
|
@@ -9,6 +9,7 @@ const renderer_1 = require("@remotion/renderer");
|
|
|
9
9
|
const fs_1 = require("fs");
|
|
10
10
|
const path_1 = __importDefault(require("path"));
|
|
11
11
|
const chalk_1 = require("../chalk");
|
|
12
|
+
const cleanup_before_quit_1 = require("../cleanup-before-quit");
|
|
12
13
|
const config_1 = require("../config");
|
|
13
14
|
const determine_image_format_1 = require("../determine-image-format");
|
|
14
15
|
const get_cli_options_1 = require("../get-cli-options");
|
|
@@ -63,6 +64,11 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
|
|
|
63
64
|
indentOutput,
|
|
64
65
|
logLevel,
|
|
65
66
|
bundlingStep: steps.indexOf('bundling'),
|
|
67
|
+
onDirectoryCreated: (dir) => {
|
|
68
|
+
(0, cleanup_before_quit_1.registerCleanupJob)(() => {
|
|
69
|
+
renderer_1.RenderInternals.deleteDirectory(dir);
|
|
70
|
+
});
|
|
71
|
+
},
|
|
66
72
|
});
|
|
67
73
|
addCleanupCallback(() => cleanupBundle());
|
|
68
74
|
const puppeteerInstance = await browserInstance;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { getCompositions } from '@remotion/renderer';
|
|
2
|
-
|
|
2
|
+
declare type Await<T> = T extends PromiseLike<infer U> ? U : T;
|
|
3
3
|
export declare const selectComposition: (validCompositions: Await<ReturnType<typeof getCompositions>>) => Promise<{
|
|
4
4
|
compositionId: string;
|
|
5
5
|
reason: string;
|
|
6
6
|
}>;
|
|
7
7
|
export declare const selectCompositions: (validCompositions: Await<ReturnType<typeof getCompositions>>) => Promise<string[]>;
|
|
8
|
+
export {};
|
package/dist/setup-cache.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { LogLevel } from '@remotion/renderer';
|
|
2
2
|
import type { BundlingState, CopyingState } from './progress-bar';
|
|
3
|
-
export declare const bundleOnCliOrTakeServeUrl: ({ fullPath, remotionRoot, publicDir, onProgress, indentOutput, logLevel, bundlingStep, steps, }: {
|
|
3
|
+
export declare const bundleOnCliOrTakeServeUrl: ({ fullPath, remotionRoot, publicDir, onProgress, indentOutput, logLevel, bundlingStep, steps, onDirectoryCreated, }: {
|
|
4
4
|
fullPath: string;
|
|
5
5
|
remotionRoot: string;
|
|
6
6
|
publicDir: string | null;
|
|
@@ -12,20 +12,8 @@ export declare const bundleOnCliOrTakeServeUrl: ({ fullPath, remotionRoot, publi
|
|
|
12
12
|
logLevel: LogLevel;
|
|
13
13
|
bundlingStep: number;
|
|
14
14
|
steps: number;
|
|
15
|
+
onDirectoryCreated: (path: string) => void;
|
|
15
16
|
}) => Promise<{
|
|
16
17
|
urlOrBundle: string;
|
|
17
18
|
cleanup: () => void;
|
|
18
19
|
}>;
|
|
19
|
-
export declare const bundleOnCli: ({ fullPath, remotionRoot, publicDir, onProgressCallback, indent, logLevel, bundlingStep, steps, }: {
|
|
20
|
-
fullPath: string;
|
|
21
|
-
remotionRoot: string;
|
|
22
|
-
publicDir: string | null;
|
|
23
|
-
onProgressCallback: (params: {
|
|
24
|
-
bundling: BundlingState;
|
|
25
|
-
copying: CopyingState;
|
|
26
|
-
}) => void;
|
|
27
|
-
indent: boolean;
|
|
28
|
-
logLevel: LogLevel;
|
|
29
|
-
bundlingStep: number;
|
|
30
|
-
steps: number;
|
|
31
|
-
}) => Promise<string>;
|
package/dist/setup-cache.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.bundleOnCliOrTakeServeUrl = void 0;
|
|
4
4
|
const bundler_1 = require("@remotion/bundler");
|
|
5
5
|
const renderer_1 = require("@remotion/renderer");
|
|
6
6
|
const config_1 = require("./config");
|
|
7
7
|
const log_1 = require("./log");
|
|
8
8
|
const parse_command_line_1 = require("./parse-command-line");
|
|
9
9
|
const progress_bar_1 = require("./progress-bar");
|
|
10
|
-
const bundleOnCliOrTakeServeUrl = async ({ fullPath, remotionRoot, publicDir, onProgress, indentOutput, logLevel, bundlingStep, steps, }) => {
|
|
10
|
+
const bundleOnCliOrTakeServeUrl = async ({ fullPath, remotionRoot, publicDir, onProgress, indentOutput, logLevel, bundlingStep, steps, onDirectoryCreated, }) => {
|
|
11
11
|
if (renderer_1.RenderInternals.isServeUrl(fullPath)) {
|
|
12
12
|
return {
|
|
13
13
|
urlOrBundle: fullPath,
|
|
14
14
|
cleanup: () => Promise.resolve(undefined),
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
-
const bundled = await
|
|
17
|
+
const bundled = await bundleOnCli({
|
|
18
18
|
fullPath,
|
|
19
19
|
remotionRoot,
|
|
20
20
|
publicDir,
|
|
@@ -23,6 +23,7 @@ const bundleOnCliOrTakeServeUrl = async ({ fullPath, remotionRoot, publicDir, on
|
|
|
23
23
|
logLevel,
|
|
24
24
|
bundlingStep,
|
|
25
25
|
steps,
|
|
26
|
+
onDirectoryCreated,
|
|
26
27
|
});
|
|
27
28
|
return {
|
|
28
29
|
urlOrBundle: bundled,
|
|
@@ -30,7 +31,7 @@ const bundleOnCliOrTakeServeUrl = async ({ fullPath, remotionRoot, publicDir, on
|
|
|
30
31
|
};
|
|
31
32
|
};
|
|
32
33
|
exports.bundleOnCliOrTakeServeUrl = bundleOnCliOrTakeServeUrl;
|
|
33
|
-
const bundleOnCli = async ({ fullPath, remotionRoot, publicDir, onProgressCallback, indent, logLevel, bundlingStep, steps, }) => {
|
|
34
|
+
const bundleOnCli = async ({ fullPath, remotionRoot, publicDir, onProgressCallback, indent, logLevel, bundlingStep, steps, onDirectoryCreated, }) => {
|
|
34
35
|
var _a;
|
|
35
36
|
const shouldCache = config_1.ConfigInternals.getWebpackCaching();
|
|
36
37
|
const symlinkState = {
|
|
@@ -115,6 +116,7 @@ const bundleOnCli = async ({ fullPath, remotionRoot, publicDir, onProgressCallba
|
|
|
115
116
|
};
|
|
116
117
|
updateProgress(false);
|
|
117
118
|
},
|
|
119
|
+
onDirectoryCreated,
|
|
118
120
|
...options,
|
|
119
121
|
});
|
|
120
122
|
bundlingState = {
|
|
@@ -136,4 +138,3 @@ const bundleOnCli = async ({ fullPath, remotionRoot, publicDir, onProgressCallba
|
|
|
136
138
|
}
|
|
137
139
|
return bundled;
|
|
138
140
|
};
|
|
139
|
-
exports.bundleOnCli = bundleOnCli;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remotion/cli",
|
|
3
|
-
"version": "4.0.0-alpha.
|
|
3
|
+
"version": "4.0.0-alpha.217+27eff7599",
|
|
4
4
|
"description": "CLI for Remotion",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -34,16 +34,16 @@
|
|
|
34
34
|
"author": "Jonny Burger <jonny@remotion.dev>",
|
|
35
35
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@remotion/bundler": "4.0.0-alpha.
|
|
38
|
-
"@remotion/media-utils": "4.0.0-alpha.
|
|
39
|
-
"@remotion/player": "4.0.0-alpha.
|
|
40
|
-
"@remotion/renderer": "4.0.0-alpha.
|
|
37
|
+
"@remotion/bundler": "4.0.0-alpha.217+27eff7599",
|
|
38
|
+
"@remotion/media-utils": "4.0.0-alpha.217+27eff7599",
|
|
39
|
+
"@remotion/player": "4.0.0-alpha.217+27eff7599",
|
|
40
|
+
"@remotion/renderer": "4.0.0-alpha.217+27eff7599",
|
|
41
41
|
"dotenv": "9.0.2",
|
|
42
42
|
"memfs": "3.4.3",
|
|
43
43
|
"minimist": "1.2.6",
|
|
44
44
|
"open": "^8.4.2",
|
|
45
45
|
"prompts": "2.4.1",
|
|
46
|
-
"remotion": "4.0.0-alpha.
|
|
46
|
+
"remotion": "4.0.0-alpha.217+27eff7599",
|
|
47
47
|
"semver": "7.3.5",
|
|
48
48
|
"source-map": "0.6.1"
|
|
49
49
|
},
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@jonny/eslint-config": "3.0.266",
|
|
56
|
+
"@remotion/z-color": "4.0.0-alpha.217+27eff7599",
|
|
56
57
|
"@types/minimist": "^1.2.2",
|
|
57
58
|
"@types/node": "^16.7.5",
|
|
58
59
|
"@types/prettier": "^2.7.2",
|
|
@@ -71,7 +72,8 @@
|
|
|
71
72
|
"react": "^18.0.0",
|
|
72
73
|
"react-dom": "^18.0.0",
|
|
73
74
|
"typescript": "^4.7.0",
|
|
74
|
-
"vitest": "0.24.3"
|
|
75
|
+
"vitest": "0.24.3",
|
|
76
|
+
"zod": "^3.21.4"
|
|
75
77
|
},
|
|
76
78
|
"keywords": [
|
|
77
79
|
"remotion",
|
|
@@ -83,5 +85,5 @@
|
|
|
83
85
|
"publishConfig": {
|
|
84
86
|
"access": "public"
|
|
85
87
|
},
|
|
86
|
-
"gitHead": "
|
|
88
|
+
"gitHead": "27eff759935b19b666e29f4f46dd5bdd6214e188"
|
|
87
89
|
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CollapsedSidebarExpander = 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 caret_1 = require("../icons/caret");
|
|
8
|
-
const z_index_1 = require("../state/z-index");
|
|
9
|
-
const CollapsedSidebarExpander = ({ onExpand, direction }) => {
|
|
10
|
-
const [hovered, setHovered] = (0, react_1.useState)(false);
|
|
11
|
-
const { tabIndex } = (0, z_index_1.useZIndex)();
|
|
12
|
-
const onPointerEnter = (0, react_1.useCallback)(() => {
|
|
13
|
-
setHovered(true);
|
|
14
|
-
}, []);
|
|
15
|
-
const onPointerLeave = (0, react_1.useCallback)(() => {
|
|
16
|
-
setHovered(false);
|
|
17
|
-
}, []);
|
|
18
|
-
const style = (0, react_1.useMemo)(() => {
|
|
19
|
-
return {
|
|
20
|
-
border: 'none',
|
|
21
|
-
borderRight: `${direction === 'right' ? 1 : 0}px solid black`,
|
|
22
|
-
borderLeft: `${direction === 'left' ? 1 : 0}px solid black`,
|
|
23
|
-
cursor: 'pointer',
|
|
24
|
-
color: 'white',
|
|
25
|
-
display: 'flex',
|
|
26
|
-
justifyContent: 'center',
|
|
27
|
-
alignItems: 'center',
|
|
28
|
-
paddingLeft: direction === 'right' ? 7 : 5,
|
|
29
|
-
paddingRight: direction === 'right' ? 4 : 5,
|
|
30
|
-
backgroundColor: (0, colors_1.getBackgroundFromHoverState)({
|
|
31
|
-
hovered,
|
|
32
|
-
selected: false,
|
|
33
|
-
}),
|
|
34
|
-
appearance: 'none',
|
|
35
|
-
WebkitAppearance: 'none',
|
|
36
|
-
};
|
|
37
|
-
}, [direction, hovered]);
|
|
38
|
-
return ((0, jsx_runtime_1.jsx)("button", { style: style, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, type: "button", role: "button", tabIndex: tabIndex, onClick: onExpand, children: direction === 'right' ? (0, jsx_runtime_1.jsx)(caret_1.CaretRight, {}) : (0, jsx_runtime_1.jsx)(caret_1.CaretLeft, {}) }));
|
|
39
|
-
};
|
|
40
|
-
exports.CollapsedSidebarExpander = CollapsedSidebarExpander;
|
|
@@ -1,53 +0,0 @@
|
|
|
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 CurrentCompositionSideEffects_1 = require("./CurrentCompositionSideEffects");
|
|
9
|
-
const RenderQueue_1 = require("./RenderQueue");
|
|
10
|
-
const context_1 = require("./RenderQueue/context");
|
|
11
|
-
const RendersTab_1 = require("./RendersTab");
|
|
12
|
-
const Tabs_1 = require("./Tabs");
|
|
13
|
-
const container = {
|
|
14
|
-
width: '100%',
|
|
15
|
-
};
|
|
16
|
-
const tabsContainer = {
|
|
17
|
-
borderBottom: `1px solid ${colors_1.BORDER_COLOR}`,
|
|
18
|
-
};
|
|
19
|
-
exports.leftSidebarTabs = (0, react_1.createRef)();
|
|
20
|
-
const localStorageKey = 'remotion.sidebarPanel';
|
|
21
|
-
const persistSelectedPanel = (panel) => {
|
|
22
|
-
localStorage.setItem(localStorageKey, panel);
|
|
23
|
-
};
|
|
24
|
-
const getSelectedPanel = (shouldRender) => {
|
|
25
|
-
const panel = localStorage.getItem(localStorageKey);
|
|
26
|
-
if (panel === 'renders' && shouldRender) {
|
|
27
|
-
return 'renders';
|
|
28
|
-
}
|
|
29
|
-
return 'compositions';
|
|
30
|
-
};
|
|
31
|
-
const SidebarContent = () => {
|
|
32
|
-
const shouldRender = (0, context_1.useShouldRenderLeftSidebarTabs)();
|
|
33
|
-
const [panel, setPanel] = (0, react_1.useState)(() => getSelectedPanel(shouldRender));
|
|
34
|
-
const onCompositionsSelected = (0, react_1.useCallback)(() => {
|
|
35
|
-
setPanel('compositions');
|
|
36
|
-
persistSelectedPanel('compositions');
|
|
37
|
-
}, []);
|
|
38
|
-
const onRendersSelected = (0, react_1.useCallback)(() => {
|
|
39
|
-
setPanel('renders');
|
|
40
|
-
persistSelectedPanel('renders');
|
|
41
|
-
}, []);
|
|
42
|
-
(0, react_1.useImperativeHandle)(exports.leftSidebarTabs, () => {
|
|
43
|
-
return {
|
|
44
|
-
selectRendersPanel: () => {
|
|
45
|
-
setPanel('renders');
|
|
46
|
-
persistSelectedPanel('renders');
|
|
47
|
-
},
|
|
48
|
-
};
|
|
49
|
-
}, []);
|
|
50
|
-
// TODO: It is not perfectly aligned in example
|
|
51
|
-
return ((0, jsx_runtime_1.jsxs)("div", { style: container, children: [shouldRender ? ((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' })] }) })) : null, panel === 'renders' && shouldRender ? ((0, jsx_runtime_1.jsx)(RenderQueue_1.RenderQueue, {})) : ((0, jsx_runtime_1.jsx)(CompositionSelector_1.CompositionSelector, {})), (0, jsx_runtime_1.jsx)(CurrentCompositionSideEffects_1.CurrentCompositionKeybindings, {}), (0, jsx_runtime_1.jsx)(CurrentCompositionSideEffects_1.TitleUpdater, {})] }));
|
|
52
|
-
};
|
|
53
|
-
exports.SidebarContent = SidebarContent;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Save = void 0;
|
|
4
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const Save = (props) => {
|
|
6
|
-
return ((0, jsx_runtime_1.jsx)("svg", { viewBox: "0 0 448 512", ...props, children: (0, jsx_runtime_1.jsx)("path", { fill: "currentcolor", d: "M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V173.3c0-17-6.7-33.3-18.7-45.3L352 50.7C340 38.7 323.7 32 306.7 32H64zm0 96c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V128zM224 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z" }) }));
|
|
7
|
-
};
|
|
8
|
-
exports.Save = Save;
|