remotion 4.1.0-alpha7 → 4.1.0-alpha8
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/cjs/Img.d.ts +1 -1
- package/dist/cjs/audio/Audio.d.ts +2 -2
- package/dist/cjs/audio/AudioForDevelopment.d.ts +1 -1
- package/dist/cjs/audio/AudioForRendering.d.ts +1 -1
- package/dist/cjs/config/input-props.d.ts +1 -1
- package/dist/cjs/config/input-props.js +2 -1
- package/dist/cjs/index.d.ts +6 -3
- package/dist/cjs/input-props-serialization.d.ts +14 -0
- package/dist/cjs/input-props-serialization.js +49 -0
- package/dist/cjs/internals.d.ts +9 -2
- package/dist/cjs/internals.js +4 -0
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/video/Video.d.ts +1 -1
- package/dist/cjs/video/VideoForDevelopment.d.ts +1 -1
- package/dist/cjs/video/VideoForRendering.d.ts +1 -1
- package/dist/esm/index.mjs +146 -99
- package/dist/esm/version.mjs +1 -1
- package/package.json +1 -1
package/dist/cjs/Img.d.ts
CHANGED
|
@@ -6,4 +6,4 @@ import React from 'react';
|
|
|
6
6
|
export declare const Img: React.ForwardRefExoticComponent<Pick<Omit<React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, "src"> & {
|
|
7
7
|
maxRetries?: number | undefined;
|
|
8
8
|
src: string;
|
|
9
|
-
}, "key" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "
|
|
9
|
+
}, "property" | "key" | "is" | "height" | "width" | "id" | "onEnded" | "nonce" | "onResize" | "onResizeCapture" | "crossOrigin" | "src" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "lang" | "placeholder" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "loading" | "referrerPolicy" | "alt" | "decoding" | "sizes" | "srcSet" | "useMap" | "maxRetries"> & React.RefAttributes<HTMLImageElement>>;
|
|
@@ -4,9 +4,9 @@ import type { RemotionMainAudioProps } from './props.js';
|
|
|
4
4
|
* @description With this component, you can add audio to your video. All audio formats which are supported by Chromium are supported by the component.
|
|
5
5
|
* @see [Documentation](https://www.remotion.dev/docs/audio)
|
|
6
6
|
*/
|
|
7
|
-
export declare const Audio: React.ForwardRefExoticComponent<Pick<Omit<React.DetailedHTMLProps<React.AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement>, "
|
|
7
|
+
export declare const Audio: React.ForwardRefExoticComponent<Pick<Omit<React.DetailedHTMLProps<React.AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement>, "autoPlay" | "controls" | "onEnded" | "nonce" | "onResize" | "onResizeCapture"> & {
|
|
8
8
|
volume?: import("../volume-prop.js").VolumeProp | undefined;
|
|
9
9
|
playbackRate?: number | undefined;
|
|
10
10
|
acceptableTimeShiftInSeconds?: number | undefined;
|
|
11
11
|
allowAmplificationDuringRender?: boolean | undefined;
|
|
12
|
-
} & RemotionMainAudioProps, "key" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "
|
|
12
|
+
} & RemotionMainAudioProps, "property" | "key" | "is" | "id" | "controlsList" | "crossOrigin" | "loop" | "mediaGroup" | "muted" | "playsInline" | "preload" | "src" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "lang" | "placeholder" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "playbackRate" | "volume" | "allowAmplificationDuringRender" | "acceptableTimeShiftInSeconds" | keyof RemotionMainAudioProps> & React.RefAttributes<HTMLAudioElement>>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ForwardRefExoticComponent, RefAttributes } from 'react';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
export declare const AudioForDevelopment: ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement>, "
|
|
3
|
+
export declare const AudioForDevelopment: ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement>, "autoPlay" | "controls" | "onEnded" | "nonce" | "onResize" | "onResizeCapture"> & {
|
|
4
4
|
volume?: import("../volume-prop.js").VolumeProp | undefined;
|
|
5
5
|
playbackRate?: number | undefined;
|
|
6
6
|
acceptableTimeShiftInSeconds?: number | undefined;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ForwardRefExoticComponent, RefAttributes } from 'react';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
export declare const AudioForRendering: ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement>, "
|
|
3
|
+
export declare const AudioForRendering: ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement>, "autoPlay" | "controls" | "onEnded" | "nonce" | "onResize" | "onResizeCapture"> & {
|
|
4
4
|
volume?: import("../volume-prop.js").VolumeProp | undefined;
|
|
5
5
|
playbackRate?: number | undefined;
|
|
6
6
|
acceptableTimeShiftInSeconds?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const getInputProps: () =>
|
|
1
|
+
export declare const getInputProps: () => Record<string, unknown>;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getInputProps = void 0;
|
|
4
4
|
const get_environment_js_1 = require("../get-environment.js");
|
|
5
|
+
const input_props_serialization_js_1 = require("../input-props-serialization.js");
|
|
5
6
|
let didWarnSSRImport = false;
|
|
6
7
|
const warnOnceSSRImport = () => {
|
|
7
8
|
if (didWarnSSRImport) {
|
|
@@ -25,7 +26,7 @@ const getInputProps = () => {
|
|
|
25
26
|
if (!param) {
|
|
26
27
|
return {};
|
|
27
28
|
}
|
|
28
|
-
const parsed =
|
|
29
|
+
const parsed = (0, input_props_serialization_js_1.deserializeJSONWithCustomFields)(param);
|
|
29
30
|
return parsed;
|
|
30
31
|
};
|
|
31
32
|
exports.getInputProps = getInputProps;
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -9,7 +9,10 @@ declare global {
|
|
|
9
9
|
remotion_cancelledError: string | undefined;
|
|
10
10
|
remotion_getCompositionNames: () => string[];
|
|
11
11
|
getStaticCompositions: () => Promise<VideoConfig[]>;
|
|
12
|
-
remotion_calculateComposition: (compId: string) => Promise<VideoConfig
|
|
12
|
+
remotion_calculateComposition: (compId: string) => Promise<Omit<VideoConfig, 'defaultProps' | 'props'> & {
|
|
13
|
+
serializedDefaultPropsWithCustomSchema: string;
|
|
14
|
+
serializedResolvedPropsWithCustomSchema: string;
|
|
15
|
+
}>;
|
|
13
16
|
remotion_setBundleMode: (bundleMode: BundleState) => void;
|
|
14
17
|
remotion_staticBase: string;
|
|
15
18
|
remotion_staticFiles: StaticFile[];
|
|
@@ -31,7 +34,7 @@ declare global {
|
|
|
31
34
|
remotion_isPlayer: boolean;
|
|
32
35
|
remotion_isBuilding: undefined | (() => void);
|
|
33
36
|
remotion_finishedBuilding: undefined | (() => void);
|
|
34
|
-
siteVersion: '
|
|
37
|
+
siteVersion: '8';
|
|
35
38
|
remotion_version: string;
|
|
36
39
|
remotion_imported: string | boolean;
|
|
37
40
|
}
|
|
@@ -43,7 +46,7 @@ export type BundleState = {
|
|
|
43
46
|
} | {
|
|
44
47
|
type: 'composition';
|
|
45
48
|
compositionName: string;
|
|
46
|
-
|
|
49
|
+
serializedResolvedPropsWithSchema: string;
|
|
47
50
|
compositionHeight: number;
|
|
48
51
|
compositionDurationInFrames: number;
|
|
49
52
|
compositionWidth: number;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type SerializedJSONWithCustomFields = {
|
|
2
|
+
serializedString: string;
|
|
3
|
+
customDateUsed: boolean;
|
|
4
|
+
customFileUsed: boolean;
|
|
5
|
+
mapUsed: boolean;
|
|
6
|
+
setUsed: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const FILE_TOKEN = "remotion-file:";
|
|
9
|
+
export declare const serializeJSONWithDate: ({ data, indent, staticBase, }: {
|
|
10
|
+
data: Record<string, unknown>;
|
|
11
|
+
indent: number | undefined;
|
|
12
|
+
staticBase: string | null;
|
|
13
|
+
}) => SerializedJSONWithCustomFields;
|
|
14
|
+
export declare const deserializeJSONWithCustomFields: (data: string) => Record<string, unknown>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Must keep this file in sync with the one in packages/lambda/src/shared/serialize-props.ts!
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.deserializeJSONWithCustomFields = exports.serializeJSONWithDate = exports.FILE_TOKEN = void 0;
|
|
5
|
+
const static_file_js_1 = require("./static-file.js");
|
|
6
|
+
const DATE_TOKEN = 'remotion-date:';
|
|
7
|
+
exports.FILE_TOKEN = 'remotion-file:';
|
|
8
|
+
const serializeJSONWithDate = ({ data, indent, staticBase, }) => {
|
|
9
|
+
let customDateUsed = false;
|
|
10
|
+
let customFileUsed = false;
|
|
11
|
+
let mapUsed = false;
|
|
12
|
+
let setUsed = false;
|
|
13
|
+
const serializedString = JSON.stringify(data, function (key, value) {
|
|
14
|
+
const item = this[key];
|
|
15
|
+
if (item instanceof Date) {
|
|
16
|
+
customDateUsed = true;
|
|
17
|
+
return `${DATE_TOKEN}${item.toISOString()}`;
|
|
18
|
+
}
|
|
19
|
+
if (item instanceof Map) {
|
|
20
|
+
mapUsed = true;
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
if (item instanceof Set) {
|
|
24
|
+
setUsed = true;
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
if (typeof item === 'string' &&
|
|
28
|
+
staticBase !== null &&
|
|
29
|
+
item.startsWith(staticBase)) {
|
|
30
|
+
customFileUsed = true;
|
|
31
|
+
return `${exports.FILE_TOKEN}${item.replace(staticBase + '/', '')}`;
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}, indent);
|
|
35
|
+
return { serializedString, customDateUsed, customFileUsed, mapUsed, setUsed };
|
|
36
|
+
};
|
|
37
|
+
exports.serializeJSONWithDate = serializeJSONWithDate;
|
|
38
|
+
const deserializeJSONWithCustomFields = (data) => {
|
|
39
|
+
return JSON.parse(data, (_, value) => {
|
|
40
|
+
if (typeof value === 'string' && value.startsWith(DATE_TOKEN)) {
|
|
41
|
+
return new Date(value.replace(DATE_TOKEN, ''));
|
|
42
|
+
}
|
|
43
|
+
if (typeof value === 'string' && value.startsWith(exports.FILE_TOKEN)) {
|
|
44
|
+
return (0, static_file_js_1.staticFile)(value.replace(exports.FILE_TOKEN, ''));
|
|
45
|
+
}
|
|
46
|
+
return value;
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
exports.deserializeJSONWithCustomFields = deserializeJSONWithCustomFields;
|
package/dist/cjs/internals.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import type { CompProps } from './Composition.js';
|
|
3
2
|
import type { TAsset, TCompMetadata, TComposition, TSequence } from './CompositionManager.js';
|
|
4
3
|
import type { CompositionManagerContext } from './CompositionManagerContext.js';
|
|
5
4
|
import * as CSSUtils from './default-css.js';
|
|
6
5
|
import type { RemotionEnvironment } from './get-environment.js';
|
|
6
|
+
import type { SerializedJSONWithCustomFields } from './input-props-serialization.js';
|
|
7
7
|
import { processColor } from './interpolate-colors.js';
|
|
8
8
|
import type { SetTimelineContextValue, TimelineContextValue } from './timeline-position-state.js';
|
|
9
9
|
import * as TimelinePosition from './timeline-position-state.js';
|
|
@@ -129,5 +129,12 @@ export declare const Internals: {
|
|
|
129
129
|
readonly bundleName: "bundle.js";
|
|
130
130
|
readonly persistCurrentFrame: (frame: number, composition: string) => void;
|
|
131
131
|
readonly useTimelineSetFrame: () => (u: import("react").SetStateAction<Record<string, number>>) => void;
|
|
132
|
+
readonly serializeJSONWithDate: ({ data, indent, staticBase, }: {
|
|
133
|
+
data: Record<string, unknown>;
|
|
134
|
+
indent: number | undefined;
|
|
135
|
+
staticBase: string | null;
|
|
136
|
+
}) => SerializedJSONWithCustomFields;
|
|
137
|
+
readonly deserializeJSONWithCustomFields: (data: string) => Record<string, unknown>;
|
|
138
|
+
readonly FILE_TOKEN: "remotion-file:";
|
|
132
139
|
};
|
|
133
|
-
export type { TComposition, Timeline, TCompMetadata, TSequence, TAsset, TimelineContextValue, SetTimelineContextValue, CompProps, CompositionManagerContext, MediaVolumeContextValue, SetMediaVolumeContextValue, RemotionEnvironment, };
|
|
140
|
+
export type { TComposition, Timeline, TCompMetadata, TSequence, TAsset, TimelineContextValue, SetTimelineContextValue, CompProps, CompositionManagerContext, MediaVolumeContextValue, SetMediaVolumeContextValue, RemotionEnvironment, SerializedJSONWithCustomFields, };
|
package/dist/cjs/internals.js
CHANGED
|
@@ -34,6 +34,7 @@ const delay_render_js_1 = require("./delay-render.js");
|
|
|
34
34
|
const EditorProps_js_1 = require("./EditorProps.js");
|
|
35
35
|
const get_environment_js_1 = require("./get-environment.js");
|
|
36
36
|
const get_preview_dom_element_js_1 = require("./get-preview-dom-element.js");
|
|
37
|
+
const input_props_serialization_js_1 = require("./input-props-serialization.js");
|
|
37
38
|
const interpolate_colors_js_1 = require("./interpolate-colors.js");
|
|
38
39
|
const is_player_js_1 = require("./is-player.js");
|
|
39
40
|
const nonce_js_1 = require("./nonce.js");
|
|
@@ -120,4 +121,7 @@ exports.Internals = {
|
|
|
120
121
|
bundleName: 'bundle.js',
|
|
121
122
|
persistCurrentFrame: timeline_position_state_js_1.persistCurrentFrame,
|
|
122
123
|
useTimelineSetFrame: timeline_position_state_js_1.useTimelineSetFrame,
|
|
124
|
+
serializeJSONWithDate: input_props_serialization_js_1.serializeJSONWithDate,
|
|
125
|
+
deserializeJSONWithCustomFields: input_props_serialization_js_1.deserializeJSONWithCustomFields,
|
|
126
|
+
FILE_TOKEN: input_props_serialization_js_1.FILE_TOKEN,
|
|
123
127
|
};
|
package/dist/cjs/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "4.1.0-
|
|
1
|
+
export declare const VERSION = "4.1.0-alpha8";
|
package/dist/cjs/version.js
CHANGED
|
@@ -4,7 +4,7 @@ import type { RemotionMainVideoProps } from './props.js';
|
|
|
4
4
|
* @description allows you to include a video file in your Remotion project. It wraps the native HTMLVideoElement.
|
|
5
5
|
* @see [Documentation](https://www.remotion.dev/docs/video)
|
|
6
6
|
*/
|
|
7
|
-
export declare const Video: (props: Omit<React.DetailedHTMLProps<React.VideoHTMLAttributes<HTMLVideoElement>, HTMLVideoElement>, "
|
|
7
|
+
export declare const Video: (props: Omit<React.DetailedHTMLProps<React.VideoHTMLAttributes<HTMLVideoElement>, HTMLVideoElement>, "autoPlay" | "controls" | "onEnded" | "nonce"> & {
|
|
8
8
|
volume?: import("../volume-prop.js").VolumeProp | undefined;
|
|
9
9
|
playbackRate?: number | undefined;
|
|
10
10
|
acceptableTimeShiftInSeconds?: number | undefined;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ForwardRefExoticComponent, RefAttributes } from 'react';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
export declare const VideoForDevelopment: ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.VideoHTMLAttributes<HTMLVideoElement>, HTMLVideoElement>, "
|
|
3
|
+
export declare const VideoForDevelopment: ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.VideoHTMLAttributes<HTMLVideoElement>, HTMLVideoElement>, "autoPlay" | "controls" | "onEnded" | "nonce"> & {
|
|
4
4
|
volume?: import("../volume-prop.js").VolumeProp | undefined;
|
|
5
5
|
playbackRate?: number | undefined;
|
|
6
6
|
acceptableTimeShiftInSeconds?: number | undefined;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ForwardRefExoticComponent, RefAttributes } from 'react';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
export declare const VideoForRendering: ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.VideoHTMLAttributes<HTMLVideoElement>, HTMLVideoElement>, "
|
|
3
|
+
export declare const VideoForRendering: ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.VideoHTMLAttributes<HTMLVideoElement>, HTMLVideoElement>, "autoPlay" | "controls" | "onEnded" | "nonce"> & {
|
|
4
4
|
volume?: import("../volume-prop.js").VolumeProp | undefined;
|
|
5
5
|
playbackRate?: number | undefined;
|
|
6
6
|
acceptableTimeShiftInSeconds?: number | undefined;
|
package/dist/esm/index.mjs
CHANGED
|
@@ -58,7 +58,7 @@ function truthy(value) {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
// Automatically generated on publish
|
|
61
|
-
const VERSION = '4.1.0-
|
|
61
|
+
const VERSION = '4.1.0-alpha8';
|
|
62
62
|
|
|
63
63
|
const checkMultipleRemotionVersions = () => {
|
|
64
64
|
if (typeof globalThis === 'undefined') {
|
|
@@ -292,6 +292,142 @@ const CompositionManager = createContext({
|
|
|
292
292
|
currentCompositionMetadata: null,
|
|
293
293
|
});
|
|
294
294
|
|
|
295
|
+
const problematicCharacters = {
|
|
296
|
+
'%3A': ':',
|
|
297
|
+
'%2F': '/',
|
|
298
|
+
'%3F': '?',
|
|
299
|
+
'%23': '#',
|
|
300
|
+
'%5B': '[',
|
|
301
|
+
'%5D': ']',
|
|
302
|
+
'%40': '@',
|
|
303
|
+
'%21': '!',
|
|
304
|
+
'%24': '$',
|
|
305
|
+
'%26': '&',
|
|
306
|
+
'%27': "'",
|
|
307
|
+
'%28': '(',
|
|
308
|
+
'%29': ')',
|
|
309
|
+
'%2A': '*',
|
|
310
|
+
'%2B': '+',
|
|
311
|
+
'%2C': ',',
|
|
312
|
+
'%3B': ';',
|
|
313
|
+
};
|
|
314
|
+
const didWarn$1 = {};
|
|
315
|
+
const warnOnce$1 = (message) => {
|
|
316
|
+
if (didWarn$1[message]) {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
console.warn(message);
|
|
320
|
+
didWarn$1[message] = true;
|
|
321
|
+
};
|
|
322
|
+
const includesHexOfUnsafeChar = (path) => {
|
|
323
|
+
for (const key of Object.keys(problematicCharacters)) {
|
|
324
|
+
if (path.includes(key)) {
|
|
325
|
+
return { containsHex: true, hexCode: key };
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return { containsHex: false };
|
|
329
|
+
};
|
|
330
|
+
const trimLeadingSlash = (path) => {
|
|
331
|
+
if (path.startsWith('/')) {
|
|
332
|
+
return trimLeadingSlash(path.substring(1));
|
|
333
|
+
}
|
|
334
|
+
return path;
|
|
335
|
+
};
|
|
336
|
+
const inner = (path) => {
|
|
337
|
+
if (typeof window !== 'undefined' && window.remotion_staticBase) {
|
|
338
|
+
return `${window.remotion_staticBase}/${trimLeadingSlash(path)}`;
|
|
339
|
+
}
|
|
340
|
+
return `/${trimLeadingSlash(path)}`;
|
|
341
|
+
};
|
|
342
|
+
const encodeBySplitting = (path) => {
|
|
343
|
+
const splitBySlash = path.split('/');
|
|
344
|
+
const encodedArray = splitBySlash.map((element) => {
|
|
345
|
+
return encodeURIComponent(element);
|
|
346
|
+
});
|
|
347
|
+
const merged = encodedArray.join('/');
|
|
348
|
+
return merged;
|
|
349
|
+
};
|
|
350
|
+
/**
|
|
351
|
+
* @description Reference a file from the public/ folder. If the file does not appear in the autocomplete, type the path manually.
|
|
352
|
+
* @see [Documentation](https://www.remotion.dev/docs/staticfile)
|
|
353
|
+
*/
|
|
354
|
+
const staticFile = (path) => {
|
|
355
|
+
if (path.startsWith('http://') || path.startsWith('https://')) {
|
|
356
|
+
throw new TypeError(`staticFile() does not support remote URLs - got "${path}". Instead, pass the URL without wrapping it in staticFile(). See: https://remotion.dev/docs/staticfile-remote-urls`);
|
|
357
|
+
}
|
|
358
|
+
if (path.startsWith('..') || path.startsWith('./')) {
|
|
359
|
+
throw new TypeError(`staticFile() does not support relative paths - got "${path}". Instead, pass the name of a file that is inside the public/ folder. See: https://remotion.dev/docs/staticfile-relative-paths`);
|
|
360
|
+
}
|
|
361
|
+
if (path.startsWith('/Users') ||
|
|
362
|
+
path.startsWith('/home') ||
|
|
363
|
+
path.startsWith('/tmp') ||
|
|
364
|
+
path.startsWith('/etc') ||
|
|
365
|
+
path.startsWith('/opt') ||
|
|
366
|
+
path.startsWith('/var') ||
|
|
367
|
+
path.startsWith('C:') ||
|
|
368
|
+
path.startsWith('D:') ||
|
|
369
|
+
path.startsWith('E:')) {
|
|
370
|
+
throw new TypeError(`staticFile() does not support absolute paths - got "${path}". Instead, pass the name of a file that is inside the public/ folder. See: https://remotion.dev/docs/staticfile-relative-paths`);
|
|
371
|
+
}
|
|
372
|
+
if (path.startsWith('public/')) {
|
|
373
|
+
throw new TypeError(`Do not include the public/ prefix when using staticFile() - got "${path}". See: https://remotion.dev/docs/staticfile-relative-paths`);
|
|
374
|
+
}
|
|
375
|
+
const includesHex = includesHexOfUnsafeChar(path);
|
|
376
|
+
if (includesHex.containsHex) {
|
|
377
|
+
warnOnce$1(`WARNING: You seem to pass an already encoded path (path contains ${includesHex.hexCode}). Since Remotion 4.0, the encoding is done by staticFile() itself. You may want to remove a encodeURIComponent() wrapping.`);
|
|
378
|
+
}
|
|
379
|
+
const preprocessed = encodeBySplitting(path);
|
|
380
|
+
const preparsed = inner(preprocessed);
|
|
381
|
+
if (!preparsed.startsWith('/')) {
|
|
382
|
+
return `/${preparsed}`;
|
|
383
|
+
}
|
|
384
|
+
return preparsed;
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
// Must keep this file in sync with the one in packages/lambda/src/shared/serialize-props.ts!
|
|
388
|
+
const DATE_TOKEN = 'remotion-date:';
|
|
389
|
+
const FILE_TOKEN = 'remotion-file:';
|
|
390
|
+
const serializeJSONWithDate = ({ data, indent, staticBase, }) => {
|
|
391
|
+
let customDateUsed = false;
|
|
392
|
+
let customFileUsed = false;
|
|
393
|
+
let mapUsed = false;
|
|
394
|
+
let setUsed = false;
|
|
395
|
+
const serializedString = JSON.stringify(data, function (key, value) {
|
|
396
|
+
const item = this[key];
|
|
397
|
+
if (item instanceof Date) {
|
|
398
|
+
customDateUsed = true;
|
|
399
|
+
return `${DATE_TOKEN}${item.toISOString()}`;
|
|
400
|
+
}
|
|
401
|
+
if (item instanceof Map) {
|
|
402
|
+
mapUsed = true;
|
|
403
|
+
return value;
|
|
404
|
+
}
|
|
405
|
+
if (item instanceof Set) {
|
|
406
|
+
setUsed = true;
|
|
407
|
+
return value;
|
|
408
|
+
}
|
|
409
|
+
if (typeof item === 'string' &&
|
|
410
|
+
staticBase !== null &&
|
|
411
|
+
item.startsWith(staticBase)) {
|
|
412
|
+
customFileUsed = true;
|
|
413
|
+
return `${FILE_TOKEN}${item.replace(staticBase + '/', '')}`;
|
|
414
|
+
}
|
|
415
|
+
return value;
|
|
416
|
+
}, indent);
|
|
417
|
+
return { serializedString, customDateUsed, customFileUsed, mapUsed, setUsed };
|
|
418
|
+
};
|
|
419
|
+
const deserializeJSONWithCustomFields = (data) => {
|
|
420
|
+
return JSON.parse(data, (_, value) => {
|
|
421
|
+
if (typeof value === 'string' && value.startsWith(DATE_TOKEN)) {
|
|
422
|
+
return new Date(value.replace(DATE_TOKEN, ''));
|
|
423
|
+
}
|
|
424
|
+
if (typeof value === 'string' && value.startsWith(FILE_TOKEN)) {
|
|
425
|
+
return staticFile(value.replace(FILE_TOKEN, ''));
|
|
426
|
+
}
|
|
427
|
+
return value;
|
|
428
|
+
});
|
|
429
|
+
};
|
|
430
|
+
|
|
295
431
|
let didWarnSSRImport = false;
|
|
296
432
|
const warnOnceSSRImport = () => {
|
|
297
433
|
if (didWarnSSRImport) {
|
|
@@ -315,7 +451,7 @@ const getInputProps = () => {
|
|
|
315
451
|
if (!param) {
|
|
316
452
|
return {};
|
|
317
453
|
}
|
|
318
|
-
const parsed =
|
|
454
|
+
const parsed = deserializeJSONWithCustomFields(param);
|
|
319
455
|
return parsed;
|
|
320
456
|
};
|
|
321
457
|
|
|
@@ -1325,13 +1461,13 @@ const evaluateVolume = ({ frame, volume, mediaVolume = 1, allowAmplificationDuri
|
|
|
1325
1461
|
return Math.max(0, Math.min(maxVolume, evaluated));
|
|
1326
1462
|
};
|
|
1327
1463
|
|
|
1328
|
-
const didWarn
|
|
1329
|
-
const warnOnce
|
|
1330
|
-
if (didWarn
|
|
1464
|
+
const didWarn = {};
|
|
1465
|
+
const warnOnce = (message) => {
|
|
1466
|
+
if (didWarn[message]) {
|
|
1331
1467
|
return;
|
|
1332
1468
|
}
|
|
1333
1469
|
console.warn(message);
|
|
1334
|
-
didWarn
|
|
1470
|
+
didWarn[message] = true;
|
|
1335
1471
|
};
|
|
1336
1472
|
const useMediaInTimeline = ({ volume, mediaVolume, mediaRef, src, mediaType, playbackRate, }) => {
|
|
1337
1473
|
const videoConfig = useVideoConfig();
|
|
@@ -1369,7 +1505,7 @@ const useMediaInTimeline = ({ volume, mediaVolume, mediaRef, src, mediaType, pla
|
|
|
1369
1505
|
}, [duration, startsAt, volume, mediaVolume]);
|
|
1370
1506
|
useEffect(() => {
|
|
1371
1507
|
if (typeof volume === 'number' && volume !== initialVolume) {
|
|
1372
|
-
warnOnce
|
|
1508
|
+
warnOnce(`Remotion: The ${mediaType} with src ${src} has changed it's volume. Prefer the callback syntax for setting volume to get better timeline display: https://www.remotion.dev/docs/using-audio/#controlling-volume`);
|
|
1373
1509
|
}
|
|
1374
1510
|
}, [initialVolume, mediaType, src, volume]);
|
|
1375
1511
|
useEffect(() => {
|
|
@@ -3691,6 +3827,9 @@ const Internals = {
|
|
|
3691
3827
|
bundleName: 'bundle.js',
|
|
3692
3828
|
persistCurrentFrame,
|
|
3693
3829
|
useTimelineSetFrame,
|
|
3830
|
+
serializeJSONWithDate,
|
|
3831
|
+
deserializeJSONWithCustomFields,
|
|
3832
|
+
FILE_TOKEN,
|
|
3694
3833
|
};
|
|
3695
3834
|
|
|
3696
3835
|
const flattenChildren = (children) => {
|
|
@@ -4011,98 +4150,6 @@ function spring({ frame: passedFrame, fps, config = {}, from = 0, to = 1, durati
|
|
|
4011
4150
|
return Math.max(spr.current, to);
|
|
4012
4151
|
}
|
|
4013
4152
|
|
|
4014
|
-
const problematicCharacters = {
|
|
4015
|
-
'%3A': ':',
|
|
4016
|
-
'%2F': '/',
|
|
4017
|
-
'%3F': '?',
|
|
4018
|
-
'%23': '#',
|
|
4019
|
-
'%5B': '[',
|
|
4020
|
-
'%5D': ']',
|
|
4021
|
-
'%40': '@',
|
|
4022
|
-
'%21': '!',
|
|
4023
|
-
'%24': '$',
|
|
4024
|
-
'%26': '&',
|
|
4025
|
-
'%27': "'",
|
|
4026
|
-
'%28': '(',
|
|
4027
|
-
'%29': ')',
|
|
4028
|
-
'%2A': '*',
|
|
4029
|
-
'%2B': '+',
|
|
4030
|
-
'%2C': ',',
|
|
4031
|
-
'%3B': ';',
|
|
4032
|
-
};
|
|
4033
|
-
const didWarn = {};
|
|
4034
|
-
const warnOnce = (message) => {
|
|
4035
|
-
if (didWarn[message]) {
|
|
4036
|
-
return;
|
|
4037
|
-
}
|
|
4038
|
-
console.warn(message);
|
|
4039
|
-
didWarn[message] = true;
|
|
4040
|
-
};
|
|
4041
|
-
const includesHexOfUnsafeChar = (path) => {
|
|
4042
|
-
for (const key of Object.keys(problematicCharacters)) {
|
|
4043
|
-
if (path.includes(key)) {
|
|
4044
|
-
return { containsHex: true, hexCode: key };
|
|
4045
|
-
}
|
|
4046
|
-
}
|
|
4047
|
-
return { containsHex: false };
|
|
4048
|
-
};
|
|
4049
|
-
const trimLeadingSlash = (path) => {
|
|
4050
|
-
if (path.startsWith('/')) {
|
|
4051
|
-
return trimLeadingSlash(path.substring(1));
|
|
4052
|
-
}
|
|
4053
|
-
return path;
|
|
4054
|
-
};
|
|
4055
|
-
const inner = (path) => {
|
|
4056
|
-
if (typeof window !== 'undefined' && window.remotion_staticBase) {
|
|
4057
|
-
return `${window.remotion_staticBase}/${trimLeadingSlash(path)}`;
|
|
4058
|
-
}
|
|
4059
|
-
return `/${trimLeadingSlash(path)}`;
|
|
4060
|
-
};
|
|
4061
|
-
const encodeBySplitting = (path) => {
|
|
4062
|
-
const splitBySlash = path.split('/');
|
|
4063
|
-
const encodedArray = splitBySlash.map((element) => {
|
|
4064
|
-
return encodeURIComponent(element);
|
|
4065
|
-
});
|
|
4066
|
-
const merged = encodedArray.join('/');
|
|
4067
|
-
return merged;
|
|
4068
|
-
};
|
|
4069
|
-
/**
|
|
4070
|
-
* @description Reference a file from the public/ folder. If the file does not appear in the autocomplete, type the path manually.
|
|
4071
|
-
* @see [Documentation](https://www.remotion.dev/docs/staticfile)
|
|
4072
|
-
*/
|
|
4073
|
-
const staticFile = (path) => {
|
|
4074
|
-
if (path.startsWith('http://') || path.startsWith('https://')) {
|
|
4075
|
-
throw new TypeError(`staticFile() does not support remote URLs - got "${path}". Instead, pass the URL without wrapping it in staticFile(). See: https://remotion.dev/docs/staticfile-remote-urls`);
|
|
4076
|
-
}
|
|
4077
|
-
if (path.startsWith('..') || path.startsWith('./')) {
|
|
4078
|
-
throw new TypeError(`staticFile() does not support relative paths - got "${path}". Instead, pass the name of a file that is inside the public/ folder. See: https://remotion.dev/docs/staticfile-relative-paths`);
|
|
4079
|
-
}
|
|
4080
|
-
if (path.startsWith('/Users') ||
|
|
4081
|
-
path.startsWith('/home') ||
|
|
4082
|
-
path.startsWith('/tmp') ||
|
|
4083
|
-
path.startsWith('/etc') ||
|
|
4084
|
-
path.startsWith('/opt') ||
|
|
4085
|
-
path.startsWith('/var') ||
|
|
4086
|
-
path.startsWith('C:') ||
|
|
4087
|
-
path.startsWith('D:') ||
|
|
4088
|
-
path.startsWith('E:')) {
|
|
4089
|
-
throw new TypeError(`staticFile() does not support absolute paths - got "${path}". Instead, pass the name of a file that is inside the public/ folder. See: https://remotion.dev/docs/staticfile-relative-paths`);
|
|
4090
|
-
}
|
|
4091
|
-
if (path.startsWith('public/')) {
|
|
4092
|
-
throw new TypeError(`Do not include the public/ prefix when using staticFile() - got "${path}". See: https://remotion.dev/docs/staticfile-relative-paths`);
|
|
4093
|
-
}
|
|
4094
|
-
const includesHex = includesHexOfUnsafeChar(path);
|
|
4095
|
-
if (includesHex.containsHex) {
|
|
4096
|
-
warnOnce(`WARNING: You seem to pass an already encoded path (path contains ${includesHex.hexCode}). Since Remotion 4.0, the encoding is done by staticFile() itself. You may want to remove a encodeURIComponent() wrapping.`);
|
|
4097
|
-
}
|
|
4098
|
-
const preprocessed = encodeBySplitting(path);
|
|
4099
|
-
const preparsed = inner(preprocessed);
|
|
4100
|
-
if (!preparsed.startsWith('/')) {
|
|
4101
|
-
return `/${preparsed}`;
|
|
4102
|
-
}
|
|
4103
|
-
return preparsed;
|
|
4104
|
-
};
|
|
4105
|
-
|
|
4106
4153
|
/**
|
|
4107
4154
|
* @description A `<Still />` is a `<Composition />` that is only 1 frame long.
|
|
4108
4155
|
* @see [Documentation](https://www.remotion.dev/docs/still)
|
package/dist/esm/version.mjs
CHANGED