@remotion/player 4.0.0-lambda.3 → 4.0.0-newpaths.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +8 -8
- package/README.md +1 -1
- package/dist/MediaVolumeSlider.d.ts +4 -1
- package/dist/MediaVolumeSlider.js +80 -55
- package/dist/Player.d.ts +20 -15
- package/dist/Player.js +24 -70
- package/dist/PlayerControls.d.ts +29 -2
- package/dist/PlayerControls.js +66 -15
- package/dist/PlayerSeekBar.d.ts +4 -0
- package/dist/PlayerSeekBar.js +35 -11
- package/dist/PlayerUI.d.ts +18 -9
- package/dist/PlayerUI.js +118 -76
- package/dist/SharedPlayerContext.d.ts +14 -0
- package/dist/SharedPlayerContext.js +72 -0
- package/dist/Thumbnail.d.ts +20 -0
- package/dist/Thumbnail.js +42 -0
- package/dist/ThumbnailUI.d.ts +11 -0
- package/dist/ThumbnailUI.js +107 -0
- package/dist/calculate-next-frame.d.ts +0 -0
- package/dist/calculate-next-frame.js +0 -0
- package/dist/calculate-scale.d.ts +30 -5
- package/dist/calculate-scale.js +65 -4
- package/dist/cjs/MediaVolumeSlider.d.ts +5 -0
- package/dist/cjs/MediaVolumeSlider.js +118 -0
- package/dist/cjs/Player.d.ts +43 -0
- package/dist/cjs/Player.js +143 -0
- package/dist/cjs/PlayerControls.d.ts +41 -0
- package/dist/cjs/PlayerControls.js +152 -0
- package/dist/cjs/PlayerSeekBar.d.ts +8 -0
- package/dist/cjs/PlayerSeekBar.js +146 -0
- package/dist/cjs/PlayerUI.d.ts +38 -0
- package/dist/cjs/PlayerUI.js +308 -0
- package/dist/cjs/SharedPlayerContext.d.ts +14 -0
- package/dist/cjs/SharedPlayerContext.js +72 -0
- package/dist/cjs/Thumbnail.d.ts +20 -0
- package/dist/cjs/Thumbnail.js +42 -0
- package/dist/cjs/ThumbnailUI.d.ts +11 -0
- package/dist/cjs/ThumbnailUI.js +107 -0
- package/dist/cjs/calculate-next-frame.d.ts +14 -0
- package/dist/cjs/calculate-next-frame.js +28 -0
- package/dist/cjs/calculate-scale.d.ts +39 -0
- package/dist/cjs/calculate-scale.js +85 -0
- package/dist/cjs/emitter-context.d.ts +4 -0
- package/dist/cjs/emitter-context.js +9 -0
- package/dist/cjs/error-boundary.d.ts +19 -0
- package/dist/cjs/error-boundary.js +39 -0
- package/dist/cjs/event-emitter.d.ts +66 -0
- package/dist/cjs/event-emitter.js +87 -0
- package/dist/cjs/format-time.d.ts +1 -0
- package/dist/cjs/format-time.js +9 -0
- package/dist/cjs/icons.d.ts +10 -0
- package/dist/cjs/icons.js +50 -0
- package/dist/cjs/index.d.ts +61 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/player-css-classname.d.ts +1 -0
- package/dist/cjs/player-css-classname.js +4 -0
- package/dist/cjs/player-methods.d.ts +24 -0
- package/dist/cjs/player-methods.js +2 -0
- package/dist/cjs/test/index.test.d.ts +1 -0
- package/dist/cjs/test/index.test.js +9 -0
- package/dist/cjs/test/test-utils.d.ts +6 -0
- package/dist/cjs/test/test-utils.js +32 -0
- package/dist/cjs/test/validate-in-out-frames.test.d.ts +1 -0
- package/dist/cjs/test/validate-in-out-frames.test.js +56 -0
- package/dist/cjs/test/validate-prop.test.d.ts +1 -0
- package/dist/cjs/test/validate-prop.test.js +131 -0
- package/dist/cjs/use-hover-state.d.ts +1 -0
- package/dist/cjs/use-hover-state.js +27 -0
- package/dist/cjs/use-playback.d.ts +7 -0
- package/dist/cjs/use-playback.js +92 -0
- package/dist/cjs/use-player.d.ts +19 -0
- package/dist/cjs/use-player.js +132 -0
- package/dist/cjs/use-thumbnail.d.ts +6 -0
- package/dist/cjs/use-thumbnail.js +18 -0
- package/dist/cjs/use-video-controls-resize.d.ts +7 -0
- package/dist/cjs/use-video-controls-resize.js +36 -0
- package/dist/cjs/utils/calculate-player-size.d.ts +9 -0
- package/dist/cjs/utils/calculate-player-size.js +29 -0
- package/dist/cjs/utils/cancellable-promise.d.ts +5 -0
- package/dist/cjs/utils/cancellable-promise.js +26 -0
- package/dist/cjs/utils/delay.d.ts +1 -0
- package/dist/cjs/utils/delay.js +6 -0
- package/dist/cjs/utils/is-node.d.ts +1 -0
- package/dist/cjs/utils/is-node.js +4 -0
- package/dist/cjs/utils/preview-size.d.ts +8 -0
- package/dist/cjs/utils/preview-size.js +2 -0
- package/dist/cjs/utils/props-if-has-props.d.ts +5 -0
- package/dist/cjs/utils/props-if-has-props.js +2 -0
- package/dist/cjs/utils/use-cancellable-promises.d.ts +7 -0
- package/dist/cjs/utils/use-cancellable-promises.js +21 -0
- package/dist/cjs/utils/use-click-prevention-on-double-click.d.ts +3 -0
- package/dist/cjs/utils/use-click-prevention-on-double-click.js +45 -0
- package/dist/cjs/utils/use-element-size.d.ts +16 -0
- package/dist/cjs/utils/use-element-size.js +98 -0
- package/dist/cjs/utils/validate-in-out-frame.d.ts +6 -0
- package/dist/cjs/utils/validate-in-out-frame.js +54 -0
- package/dist/cjs/utils/validate-initial-frame.d.ts +4 -0
- package/dist/cjs/utils/validate-initial-frame.js +27 -0
- package/dist/cjs/utils/validate-playbackrate.d.ts +1 -0
- package/dist/cjs/utils/validate-playbackrate.js +18 -0
- package/dist/cjs/volume-persistance.d.ts +2 -0
- package/dist/cjs/volume-persistance.js +19 -0
- package/dist/emitter-context.d.ts +2 -1
- package/dist/emitter-context.js +2 -1
- package/dist/error-boundary.d.ts +0 -0
- package/dist/error-boundary.js +0 -0
- package/dist/esm/MediaVolumeSlider.d.ts +5 -0
- package/dist/esm/MediaVolumeSlider.js +114 -0
- package/dist/esm/Player.d.ts +43 -0
- package/dist/esm/Player.js +136 -0
- package/dist/esm/PlayerControls.d.ts +41 -0
- package/dist/esm/PlayerControls.js +148 -0
- package/dist/esm/PlayerSeekBar.d.ts +8 -0
- package/dist/esm/PlayerSeekBar.js +142 -0
- package/dist/esm/PlayerUI.d.ts +38 -0
- package/dist/esm/PlayerUI.js +283 -0
- package/dist/esm/SharedPlayerContext.d.ts +14 -0
- package/dist/esm/SharedPlayerContext.js +68 -0
- package/dist/esm/Thumbnail.d.ts +20 -0
- package/dist/esm/Thumbnail.js +35 -0
- package/dist/esm/ThumbnailUI.d.ts +11 -0
- package/dist/esm/ThumbnailUI.js +82 -0
- package/dist/esm/calculate-next-frame.d.ts +14 -0
- package/dist/esm/calculate-next-frame.js +24 -0
- package/dist/esm/calculate-scale.d.ts +39 -0
- package/dist/esm/calculate-scale.js +77 -0
- package/dist/esm/emitter-context.d.ts +4 -0
- package/dist/esm/emitter-context.js +3 -0
- package/dist/esm/error-boundary.d.ts +19 -0
- package/dist/esm/error-boundary.js +32 -0
- package/dist/esm/event-emitter.d.ts +66 -0
- package/dist/esm/event-emitter.js +82 -0
- package/dist/esm/format-time.d.ts +1 -0
- package/dist/esm/format-time.js +5 -0
- package/dist/esm/icons.d.ts +10 -0
- package/dist/esm/icons.js +42 -0
- package/dist/esm/index.d.ts +61 -0
- package/dist/esm/index.js +20 -0
- package/dist/esm/player-css-classname.d.ts +1 -0
- package/dist/esm/player-css-classname.js +1 -0
- package/dist/esm/player-methods.d.ts +24 -0
- package/dist/esm/player-methods.js +1 -0
- package/dist/esm/test/index.test.d.ts +1 -0
- package/dist/esm/test/index.test.js +7 -0
- package/dist/esm/test/test-utils.d.ts +6 -0
- package/dist/esm/test/test-utils.js +14 -0
- package/dist/esm/test/validate-in-out-frames.test.d.ts +1 -0
- package/dist/esm/test/validate-in-out-frames.test.js +54 -0
- package/dist/esm/test/validate-prop.test.d.ts +1 -0
- package/dist/esm/test/validate-prop.test.js +129 -0
- package/dist/esm/use-hover-state.d.ts +1 -0
- package/dist/esm/use-hover-state.js +23 -0
- package/dist/esm/use-playback.d.ts +7 -0
- package/dist/esm/use-playback.js +88 -0
- package/dist/esm/use-player.d.ts +19 -0
- package/dist/esm/use-player.js +128 -0
- package/dist/esm/use-thumbnail.d.ts +6 -0
- package/dist/esm/use-thumbnail.js +14 -0
- package/dist/esm/use-video-controls-resize.d.ts +7 -0
- package/dist/esm/use-video-controls-resize.js +32 -0
- package/dist/esm/utils/calculate-player-size.d.ts +9 -0
- package/dist/esm/utils/calculate-player-size.js +25 -0
- package/dist/esm/utils/cancellable-promise.d.ts +5 -0
- package/dist/esm/utils/cancellable-promise.js +22 -0
- package/dist/esm/utils/delay.d.ts +1 -0
- package/dist/esm/utils/delay.js +2 -0
- package/dist/esm/utils/is-node.d.ts +1 -0
- package/dist/esm/utils/is-node.js +1 -0
- package/dist/esm/utils/preview-size.d.ts +8 -0
- package/dist/esm/utils/preview-size.js +1 -0
- package/dist/esm/utils/props-if-has-props.d.ts +5 -0
- package/dist/esm/utils/props-if-has-props.js +1 -0
- package/dist/esm/utils/use-cancellable-promises.d.ts +7 -0
- package/dist/esm/utils/use-cancellable-promises.js +18 -0
- package/dist/esm/utils/use-click-prevention-on-double-click.d.ts +3 -0
- package/dist/esm/utils/use-click-prevention-on-double-click.js +42 -0
- package/dist/esm/utils/use-element-size.d.ts +16 -0
- package/dist/esm/utils/use-element-size.js +93 -0
- package/dist/esm/utils/validate-in-out-frame.d.ts +6 -0
- package/dist/esm/utils/validate-in-out-frame.js +49 -0
- package/dist/esm/utils/validate-initial-frame.d.ts +4 -0
- package/dist/esm/utils/validate-initial-frame.js +23 -0
- package/dist/esm/utils/validate-playbackrate.d.ts +1 -0
- package/dist/esm/utils/validate-playbackrate.js +14 -0
- package/dist/esm/volume-persistance.d.ts +2 -0
- package/dist/esm/volume-persistance.js +14 -0
- package/dist/event-emitter.d.ts +33 -9
- package/dist/event-emitter.js +33 -1
- package/dist/format-time.d.ts +0 -0
- package/dist/format-time.js +0 -0
- package/dist/icons.d.ts +2 -1
- package/dist/icons.js +7 -7
- package/dist/index.d.ts +25 -9
- package/dist/index.js +5 -2
- package/dist/player-css-classname.d.ts +0 -1
- package/dist/player-css-classname.js +1 -2
- package/dist/player-methods.d.ts +8 -4
- package/dist/player-methods.js +0 -0
- package/dist/test/index.test.d.ts +0 -0
- package/dist/test/index.test.js +3 -2
- package/dist/test/test-utils.d.ts +2 -2
- package/dist/test/test-utils.js +0 -0
- package/dist/test/validate-in-out-frames.test.d.ts +1 -0
- package/dist/test/validate-in-out-frames.test.js +56 -0
- package/dist/test/validate-prop.test.d.ts +0 -0
- package/dist/test/validate-prop.test.js +24 -23
- package/dist/tsconfig-cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/use-hover-state.d.ts +0 -0
- package/dist/use-hover-state.js +0 -0
- package/dist/use-playback.d.ts +4 -1
- package/dist/use-playback.js +7 -3
- package/dist/use-player.d.ts +8 -3
- package/dist/use-player.js +23 -4
- package/dist/use-thumbnail.d.ts +6 -0
- package/dist/use-thumbnail.js +18 -0
- package/dist/use-video-controls-resize.d.ts +7 -0
- package/dist/use-video-controls-resize.js +36 -0
- package/dist/utils/calculate-player-size.d.ts +2 -2
- package/dist/utils/calculate-player-size.js +0 -0
- package/dist/utils/cancellable-promise.d.ts +0 -0
- package/dist/utils/cancellable-promise.js +0 -0
- package/dist/utils/delay.d.ts +0 -0
- package/dist/utils/delay.js +0 -0
- package/dist/utils/is-node.d.ts +0 -0
- package/dist/utils/is-node.js +0 -0
- package/dist/utils/preview-size.d.ts +8 -1
- package/dist/utils/preview-size.js +0 -0
- package/dist/utils/props-if-has-props.d.ts +5 -0
- package/dist/utils/props-if-has-props.js +2 -0
- package/dist/utils/use-cancellable-promises.d.ts +1 -1
- package/dist/utils/use-cancellable-promises.js +0 -0
- package/dist/utils/use-click-prevention-on-double-click.d.ts +1 -1
- package/dist/utils/use-click-prevention-on-double-click.js +0 -0
- package/dist/utils/use-element-size.d.ts +4 -0
- package/dist/utils/use-element-size.js +8 -0
- package/dist/utils/validate-in-out-frame.d.ts +6 -0
- package/dist/utils/validate-in-out-frame.js +54 -0
- package/dist/utils/validate-initial-frame.d.ts +4 -0
- package/dist/utils/validate-initial-frame.js +27 -0
- package/dist/utils/validate-playbackrate.d.ts +0 -0
- package/dist/utils/validate-playbackrate.js +0 -0
- package/dist/volume-persistance.d.ts +0 -0
- package/dist/volume-persistance.js +0 -0
- package/package.json +26 -17
- package/dist/MediaVolumeSlider.d.ts.map +0 -1
- package/dist/MediaVolumeSlider.js.map +0 -1
- package/dist/Player.d.ts.map +0 -1
- package/dist/Player.js.map +0 -1
- package/dist/PlayerControls.d.ts.map +0 -1
- package/dist/PlayerControls.js.map +0 -1
- package/dist/PlayerSeekBar.d.ts.map +0 -1
- package/dist/PlayerSeekBar.js.map +0 -1
- package/dist/PlayerUI.d.ts.map +0 -1
- package/dist/PlayerUI.js.map +0 -1
- package/dist/calculate-next-frame.d.ts.map +0 -1
- package/dist/calculate-next-frame.js.map +0 -1
- package/dist/calculate-scale.d.ts.map +0 -1
- package/dist/calculate-scale.js.map +0 -1
- package/dist/emitter-context.d.ts.map +0 -1
- package/dist/emitter-context.js.map +0 -1
- package/dist/error-boundary.d.ts.map +0 -1
- package/dist/error-boundary.js.map +0 -1
- package/dist/event-emitter.d.ts.map +0 -1
- package/dist/event-emitter.js.map +0 -1
- package/dist/format-time.d.ts.map +0 -1
- package/dist/format-time.js.map +0 -1
- package/dist/icons.d.ts.map +0 -1
- package/dist/icons.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/player-css-classname.d.ts.map +0 -1
- package/dist/player-css-classname.js.map +0 -1
- package/dist/player-methods.d.ts.map +0 -1
- package/dist/player-methods.js.map +0 -1
- package/dist/test/index.test.d.ts.map +0 -1
- package/dist/test/index.test.js.map +0 -1
- package/dist/test/test-utils.d.ts.map +0 -1
- package/dist/test/test-utils.js.map +0 -1
- package/dist/test/validate-prop.test.d.ts.map +0 -1
- package/dist/test/validate-prop.test.js.map +0 -1
- package/dist/use-hover-state.d.ts.map +0 -1
- package/dist/use-hover-state.js.map +0 -1
- package/dist/use-playback.d.ts.map +0 -1
- package/dist/use-playback.js.map +0 -1
- package/dist/use-player.d.ts.map +0 -1
- package/dist/use-player.js.map +0 -1
- package/dist/utils/browser-supports-fullscreen.d.ts +0 -11
- package/dist/utils/browser-supports-fullscreen.d.ts.map +0 -1
- package/dist/utils/browser-supports-fullscreen.js +0 -5
- package/dist/utils/browser-supports-fullscreen.js.map +0 -1
- package/dist/utils/calculate-player-size.d.ts.map +0 -1
- package/dist/utils/calculate-player-size.js.map +0 -1
- package/dist/utils/cancellable-promise.d.ts.map +0 -1
- package/dist/utils/cancellable-promise.js.map +0 -1
- package/dist/utils/delay.d.ts.map +0 -1
- package/dist/utils/delay.js.map +0 -1
- package/dist/utils/is-node.d.ts.map +0 -1
- package/dist/utils/is-node.js.map +0 -1
- package/dist/utils/preview-size.d.ts.map +0 -1
- package/dist/utils/preview-size.js.map +0 -1
- package/dist/utils/use-cancellable-promises.d.ts.map +0 -1
- package/dist/utils/use-cancellable-promises.js.map +0 -1
- package/dist/utils/use-click-prevention-on-double-click.d.ts.map +0 -1
- package/dist/utils/use-click-prevention-on-double-click.js.map +0 -1
- package/dist/utils/use-element-size.d.ts.map +0 -1
- package/dist/utils/use-element-size.js.map +0 -1
- package/dist/utils/validate-playbackrate.d.ts.map +0 -1
- package/dist/utils/validate-playbackrate.js.map +0 -1
- package/dist/volume-persistance.d.ts.map +0 -1
- package/dist/volume-persistance.js.map +0 -1
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React, { forwardRef, Suspense, useCallback, useImperativeHandle, useMemo, useRef, } from 'react';
|
|
3
|
+
import { Internals } from 'remotion';
|
|
4
|
+
import { calculateCanvasTransformation, calculateContainerStyle, calculateOuter, calculateOuterStyle, } from './calculate-scale';
|
|
5
|
+
import { ErrorBoundary } from './error-boundary';
|
|
6
|
+
import { PLAYER_CSS_CLASSNAME } from './player-css-classname';
|
|
7
|
+
import { useThumbnail } from './use-thumbnail';
|
|
8
|
+
import { IS_NODE } from './utils/is-node';
|
|
9
|
+
import { useElementSize } from './utils/use-element-size';
|
|
10
|
+
const reactVersion = React.version.split('.')[0];
|
|
11
|
+
if (reactVersion === '0') {
|
|
12
|
+
throw new Error(`Version ${reactVersion} of "react" is not supported by Remotion`);
|
|
13
|
+
}
|
|
14
|
+
const doesReactVersionSupportSuspense = parseInt(reactVersion, 10) >= 18;
|
|
15
|
+
const ThumbnailUI = ({ style, inputProps, errorFallback, renderLoading, className }, ref) => {
|
|
16
|
+
var _a, _b, _c;
|
|
17
|
+
const config = Internals.useUnsafeVideoConfig();
|
|
18
|
+
const video = Internals.useVideo();
|
|
19
|
+
const container = useRef(null);
|
|
20
|
+
const canvasSize = useElementSize(container, {
|
|
21
|
+
triggerOnWindowResize: false,
|
|
22
|
+
shouldApplyCssTransforms: false,
|
|
23
|
+
});
|
|
24
|
+
const layout = useMemo(() => {
|
|
25
|
+
if (!config || !canvasSize) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return calculateCanvasTransformation({
|
|
29
|
+
canvasSize,
|
|
30
|
+
compositionHeight: config.height,
|
|
31
|
+
compositionWidth: config.width,
|
|
32
|
+
previewSize: 'auto',
|
|
33
|
+
});
|
|
34
|
+
}, [canvasSize, config]);
|
|
35
|
+
const scale = (_a = layout === null || layout === void 0 ? void 0 : layout.scale) !== null && _a !== void 0 ? _a : 1;
|
|
36
|
+
const thumbnail = useThumbnail();
|
|
37
|
+
useImperativeHandle(ref, () => {
|
|
38
|
+
const methods = {
|
|
39
|
+
getContainerNode: () => container.current,
|
|
40
|
+
getScale: () => scale,
|
|
41
|
+
};
|
|
42
|
+
return Object.assign(thumbnail.emitter, methods);
|
|
43
|
+
}, [scale, thumbnail.emitter]);
|
|
44
|
+
const VideoComponent = video ? video.component : null;
|
|
45
|
+
const outerStyle = useMemo(() => {
|
|
46
|
+
return calculateOuterStyle({ config, style, canvasSize });
|
|
47
|
+
}, [canvasSize, config, style]);
|
|
48
|
+
const outer = useMemo(() => {
|
|
49
|
+
return calculateOuter({ config, layout, scale });
|
|
50
|
+
}, [config, layout, scale]);
|
|
51
|
+
const containerStyle = useMemo(() => {
|
|
52
|
+
return calculateContainerStyle({
|
|
53
|
+
canvasSize,
|
|
54
|
+
config,
|
|
55
|
+
layout,
|
|
56
|
+
scale,
|
|
57
|
+
});
|
|
58
|
+
}, [canvasSize, config, layout, scale]);
|
|
59
|
+
const onError = useCallback((error) => {
|
|
60
|
+
// Pay attention to `this context`
|
|
61
|
+
thumbnail.emitter.dispatchError(error);
|
|
62
|
+
}, [thumbnail.emitter]);
|
|
63
|
+
const rootRef = useRef(null);
|
|
64
|
+
useImperativeHandle(ref, () => rootRef.current, []);
|
|
65
|
+
const loadingMarkup = useMemo(() => {
|
|
66
|
+
return renderLoading
|
|
67
|
+
? renderLoading({
|
|
68
|
+
height: outerStyle.height,
|
|
69
|
+
width: outerStyle.width,
|
|
70
|
+
})
|
|
71
|
+
: null;
|
|
72
|
+
}, [outerStyle.height, outerStyle.width, renderLoading]);
|
|
73
|
+
if (!config) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const content = (_jsx("div", { style: outer, children: _jsx("div", { style: containerStyle, className: PLAYER_CSS_CLASSNAME, children: VideoComponent ? (_jsx(ErrorBoundary, { onError: onError, errorFallback: errorFallback, children: _jsx(VideoComponent, { ...((_b = video === null || video === void 0 ? void 0 : video.defaultProps) !== null && _b !== void 0 ? _b : {}), ...((_c = inputProps) !== null && _c !== void 0 ? _c : {}) }) })) : null }) }));
|
|
77
|
+
if (IS_NODE && !doesReactVersionSupportSuspense) {
|
|
78
|
+
return (_jsx("div", { ref: container, style: outerStyle, className: className, children: content }));
|
|
79
|
+
}
|
|
80
|
+
return (_jsx("div", { ref: container, style: outerStyle, className: className, children: _jsx(Suspense, { fallback: loadingMarkup, children: content }) }));
|
|
81
|
+
};
|
|
82
|
+
export default forwardRef(ThumbnailUI);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const calculateNextFrame: ({ time, currentFrame: startFrame, playbackSpeed, fps, actualLastFrame, actualFirstFrame, framesAdvanced, shouldLoop, }: {
|
|
2
|
+
time: number;
|
|
3
|
+
currentFrame: number;
|
|
4
|
+
playbackSpeed: number;
|
|
5
|
+
fps: number;
|
|
6
|
+
actualFirstFrame: number;
|
|
7
|
+
actualLastFrame: number;
|
|
8
|
+
framesAdvanced: number;
|
|
9
|
+
shouldLoop: boolean;
|
|
10
|
+
}) => {
|
|
11
|
+
nextFrame: number;
|
|
12
|
+
framesToAdvance: number;
|
|
13
|
+
hasEnded: boolean;
|
|
14
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const calculateNextFrame = ({ time, currentFrame: startFrame, playbackSpeed, fps, actualLastFrame, actualFirstFrame, framesAdvanced, shouldLoop, }) => {
|
|
2
|
+
const op = playbackSpeed < 0 ? Math.ceil : Math.floor;
|
|
3
|
+
const framesToAdvance = op((time * playbackSpeed) / (1000 / fps)) - framesAdvanced;
|
|
4
|
+
const nextFrame = framesToAdvance + startFrame;
|
|
5
|
+
const isCurrentFrameOutside = startFrame > actualLastFrame || startFrame < actualFirstFrame;
|
|
6
|
+
const isNextFrameOutside = nextFrame > actualLastFrame || nextFrame < actualFirstFrame;
|
|
7
|
+
const hasEnded = !shouldLoop && isNextFrameOutside && !isCurrentFrameOutside;
|
|
8
|
+
if (playbackSpeed > 0) {
|
|
9
|
+
// Play forwards
|
|
10
|
+
if (isNextFrameOutside) {
|
|
11
|
+
return {
|
|
12
|
+
nextFrame: actualFirstFrame,
|
|
13
|
+
framesToAdvance,
|
|
14
|
+
hasEnded,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return { nextFrame, framesToAdvance, hasEnded };
|
|
18
|
+
}
|
|
19
|
+
// Reverse playback
|
|
20
|
+
if (isNextFrameOutside) {
|
|
21
|
+
return { nextFrame: actualLastFrame, framesToAdvance, hasEnded };
|
|
22
|
+
}
|
|
23
|
+
return { nextFrame, framesToAdvance, hasEnded };
|
|
24
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { VideoConfig } from 'remotion';
|
|
2
|
+
import type { PreviewSize } from './utils/preview-size';
|
|
3
|
+
import type { Size } from './utils/use-element-size';
|
|
4
|
+
export declare const calculateScale: ({ canvasSize, compositionHeight, compositionWidth, previewSize, }: {
|
|
5
|
+
previewSize: PreviewSize['size'];
|
|
6
|
+
compositionWidth: number;
|
|
7
|
+
compositionHeight: number;
|
|
8
|
+
canvasSize: Size;
|
|
9
|
+
}) => number;
|
|
10
|
+
declare type Layout = {
|
|
11
|
+
centerX: number;
|
|
12
|
+
centerY: number;
|
|
13
|
+
xCorrection: number;
|
|
14
|
+
yCorrection: number;
|
|
15
|
+
scale: number;
|
|
16
|
+
};
|
|
17
|
+
export declare const calculateCanvasTransformation: ({ previewSize, compositionWidth, compositionHeight, canvasSize, }: {
|
|
18
|
+
previewSize: PreviewSize['size'];
|
|
19
|
+
compositionWidth: number;
|
|
20
|
+
compositionHeight: number;
|
|
21
|
+
canvasSize: Size;
|
|
22
|
+
}) => Layout;
|
|
23
|
+
export declare const calculateOuterStyle: ({ config, style, canvasSize, }: {
|
|
24
|
+
config: VideoConfig | null;
|
|
25
|
+
style: React.CSSProperties | undefined;
|
|
26
|
+
canvasSize: Size | null;
|
|
27
|
+
}) => React.CSSProperties;
|
|
28
|
+
export declare const calculateContainerStyle: ({ config, canvasSize, layout, scale, }: {
|
|
29
|
+
config: VideoConfig | null;
|
|
30
|
+
canvasSize: Size | null;
|
|
31
|
+
layout: Layout | null;
|
|
32
|
+
scale: number;
|
|
33
|
+
}) => React.CSSProperties;
|
|
34
|
+
export declare const calculateOuter: ({ layout, scale, config, }: {
|
|
35
|
+
layout: Layout | null;
|
|
36
|
+
scale: number;
|
|
37
|
+
config: VideoConfig | null;
|
|
38
|
+
}) => React.CSSProperties;
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { calculatePlayerSize } from './utils/calculate-player-size';
|
|
2
|
+
export const calculateScale = ({ canvasSize, compositionHeight, compositionWidth, previewSize, }) => {
|
|
3
|
+
const heightRatio = canvasSize.height / compositionHeight;
|
|
4
|
+
const widthRatio = canvasSize.width / compositionWidth;
|
|
5
|
+
const ratio = Math.min(heightRatio, widthRatio);
|
|
6
|
+
return previewSize === 'auto' ? ratio : Number(previewSize);
|
|
7
|
+
};
|
|
8
|
+
export const calculateCanvasTransformation = ({ previewSize, compositionWidth, compositionHeight, canvasSize, }) => {
|
|
9
|
+
const scale = calculateScale({
|
|
10
|
+
canvasSize,
|
|
11
|
+
compositionHeight,
|
|
12
|
+
compositionWidth,
|
|
13
|
+
previewSize,
|
|
14
|
+
});
|
|
15
|
+
const correction = 0 - (1 - scale) / 2;
|
|
16
|
+
const xCorrection = correction * compositionWidth;
|
|
17
|
+
const yCorrection = correction * compositionHeight;
|
|
18
|
+
const width = compositionWidth * scale;
|
|
19
|
+
const height = compositionHeight * scale;
|
|
20
|
+
const centerX = canvasSize.width / 2 - width / 2;
|
|
21
|
+
const centerY = canvasSize.height / 2 - height / 2;
|
|
22
|
+
return {
|
|
23
|
+
centerX,
|
|
24
|
+
centerY,
|
|
25
|
+
xCorrection,
|
|
26
|
+
yCorrection,
|
|
27
|
+
scale,
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export const calculateOuterStyle = ({ config, style, canvasSize, }) => {
|
|
31
|
+
if (!config) {
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
position: 'relative',
|
|
36
|
+
overflow: 'hidden',
|
|
37
|
+
...calculatePlayerSize({
|
|
38
|
+
compositionHeight: config.height,
|
|
39
|
+
compositionWidth: config.width,
|
|
40
|
+
currentSize: canvasSize,
|
|
41
|
+
height: style === null || style === void 0 ? void 0 : style.height,
|
|
42
|
+
width: style === null || style === void 0 ? void 0 : style.width,
|
|
43
|
+
}),
|
|
44
|
+
...style,
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
export const calculateContainerStyle = ({ config, canvasSize, layout, scale, }) => {
|
|
48
|
+
if (!config || !canvasSize || !layout) {
|
|
49
|
+
return {};
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
position: 'absolute',
|
|
53
|
+
width: config.width,
|
|
54
|
+
height: config.height,
|
|
55
|
+
display: 'flex',
|
|
56
|
+
transform: `scale(${scale})`,
|
|
57
|
+
marginLeft: layout.xCorrection,
|
|
58
|
+
marginTop: layout.yCorrection,
|
|
59
|
+
overflow: 'hidden',
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
export const calculateOuter = ({ layout, scale, config, }) => {
|
|
63
|
+
if (!layout || !config) {
|
|
64
|
+
return {};
|
|
65
|
+
}
|
|
66
|
+
const { centerX, centerY } = layout;
|
|
67
|
+
return {
|
|
68
|
+
width: config.width * scale,
|
|
69
|
+
height: config.height * scale,
|
|
70
|
+
display: 'flex',
|
|
71
|
+
flexDirection: 'column',
|
|
72
|
+
position: 'absolute',
|
|
73
|
+
left: centerX,
|
|
74
|
+
top: centerY,
|
|
75
|
+
overflow: 'hidden',
|
|
76
|
+
};
|
|
77
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { PlayerEmitter, ThumbnailEmitter } from './event-emitter';
|
|
3
|
+
export declare const PlayerEventEmitterContext: React.Context<PlayerEmitter | undefined>;
|
|
4
|
+
export declare const ThumbnailEmitterContext: React.Context<ThumbnailEmitter | undefined>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare class ErrorBoundary extends React.Component<{
|
|
3
|
+
onError: (error: Error) => void;
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
errorFallback: (info: {
|
|
6
|
+
error: Error;
|
|
7
|
+
}) => React.ReactNode;
|
|
8
|
+
}, {
|
|
9
|
+
hasError: Error | null;
|
|
10
|
+
}> {
|
|
11
|
+
state: {
|
|
12
|
+
hasError: null;
|
|
13
|
+
};
|
|
14
|
+
static getDerivedStateFromError(error: Error): {
|
|
15
|
+
hasError: Error;
|
|
16
|
+
};
|
|
17
|
+
componentDidCatch(error: Error): void;
|
|
18
|
+
render(): string | number | boolean | JSX.Element | React.ReactFragment | null | undefined;
|
|
19
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
const errorStyle = {
|
|
4
|
+
display: 'flex',
|
|
5
|
+
justifyContent: 'center',
|
|
6
|
+
alignItems: 'center',
|
|
7
|
+
flex: 1,
|
|
8
|
+
height: '100%',
|
|
9
|
+
width: '100%',
|
|
10
|
+
};
|
|
11
|
+
export class ErrorBoundary extends React.Component {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.state = { hasError: null };
|
|
15
|
+
}
|
|
16
|
+
static getDerivedStateFromError(error) {
|
|
17
|
+
// Update state so the next render will show the fallback UI.
|
|
18
|
+
return { hasError: error };
|
|
19
|
+
}
|
|
20
|
+
componentDidCatch(error) {
|
|
21
|
+
this.props.onError(error);
|
|
22
|
+
}
|
|
23
|
+
render() {
|
|
24
|
+
if (this.state.hasError) {
|
|
25
|
+
// You can render any custom fallback UI
|
|
26
|
+
return (_jsx("div", { style: errorStyle, children: this.props.errorFallback({
|
|
27
|
+
error: this.state.hasError,
|
|
28
|
+
}) }));
|
|
29
|
+
}
|
|
30
|
+
return this.props.children;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
declare type SeekPayload = {
|
|
2
|
+
frame: number;
|
|
3
|
+
};
|
|
4
|
+
declare type ErrorPayload = {
|
|
5
|
+
error: Error;
|
|
6
|
+
};
|
|
7
|
+
declare type TimeUpdateEventPayload = {
|
|
8
|
+
frame: number;
|
|
9
|
+
};
|
|
10
|
+
declare type FrameUpdateEventPayload = {
|
|
11
|
+
frame: number;
|
|
12
|
+
};
|
|
13
|
+
declare type RateChangeEventPayload = {
|
|
14
|
+
playbackRate: number;
|
|
15
|
+
};
|
|
16
|
+
declare type FullscreenChangeEventPayload = {
|
|
17
|
+
isFullscreen: boolean;
|
|
18
|
+
};
|
|
19
|
+
declare type PlayerStateEventMap = {
|
|
20
|
+
seeked: SeekPayload;
|
|
21
|
+
pause: undefined;
|
|
22
|
+
play: undefined;
|
|
23
|
+
ratechange: RateChangeEventPayload;
|
|
24
|
+
ended: undefined;
|
|
25
|
+
error: ErrorPayload;
|
|
26
|
+
timeupdate: TimeUpdateEventPayload;
|
|
27
|
+
frameupdate: FrameUpdateEventPayload;
|
|
28
|
+
fullscreenchange: FullscreenChangeEventPayload;
|
|
29
|
+
};
|
|
30
|
+
declare type ThumbnailStateEventMap = {
|
|
31
|
+
error: ErrorPayload;
|
|
32
|
+
};
|
|
33
|
+
export declare type PlayerEventTypes = keyof PlayerStateEventMap;
|
|
34
|
+
export declare type ThumbnailEventTypes = keyof ThumbnailStateEventMap;
|
|
35
|
+
export declare type CallbackListener<T extends PlayerEventTypes> = (data: {
|
|
36
|
+
detail: PlayerStateEventMap[T];
|
|
37
|
+
}) => void;
|
|
38
|
+
declare type PlayerListeners = {
|
|
39
|
+
[EventType in PlayerEventTypes]: CallbackListener<EventType>[];
|
|
40
|
+
};
|
|
41
|
+
declare type ThumbnailListeners = {
|
|
42
|
+
[EventType in ThumbnailEventTypes]: CallbackListener<EventType>[];
|
|
43
|
+
};
|
|
44
|
+
export declare class PlayerEmitter {
|
|
45
|
+
listeners: PlayerListeners;
|
|
46
|
+
addEventListener<Q extends PlayerEventTypes>(name: Q, callback: CallbackListener<Q>): void;
|
|
47
|
+
removeEventListener<Q extends PlayerEventTypes>(name: Q, callback: CallbackListener<Q>): void;
|
|
48
|
+
private dispatchEvent;
|
|
49
|
+
dispatchSeek(frame: number): void;
|
|
50
|
+
dispatchPause(): void;
|
|
51
|
+
dispatchPlay(): void;
|
|
52
|
+
dispatchEnded(): void;
|
|
53
|
+
dispatchRatechange(playbackRate: number): void;
|
|
54
|
+
dispatchError(error: Error): void;
|
|
55
|
+
dispatchTimeUpdate(event: TimeUpdateEventPayload): void;
|
|
56
|
+
dispatchFrameUpdate(event: FrameUpdateEventPayload): void;
|
|
57
|
+
dispatchFullscreenChangeUpdate(event: FullscreenChangeEventPayload): void;
|
|
58
|
+
}
|
|
59
|
+
export declare class ThumbnailEmitter {
|
|
60
|
+
listeners: ThumbnailListeners;
|
|
61
|
+
addEventListener<Q extends ThumbnailEventTypes>(name: Q, callback: CallbackListener<Q>): void;
|
|
62
|
+
removeEventListener<Q extends ThumbnailEventTypes>(name: Q, callback: CallbackListener<Q>): void;
|
|
63
|
+
private dispatchEvent;
|
|
64
|
+
dispatchError(error: Error): void;
|
|
65
|
+
}
|
|
66
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export class PlayerEmitter {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.listeners = {
|
|
4
|
+
ended: [],
|
|
5
|
+
error: [],
|
|
6
|
+
pause: [],
|
|
7
|
+
play: [],
|
|
8
|
+
ratechange: [],
|
|
9
|
+
seeked: [],
|
|
10
|
+
timeupdate: [],
|
|
11
|
+
frameupdate: [],
|
|
12
|
+
fullscreenchange: [],
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
addEventListener(name, callback) {
|
|
16
|
+
this.listeners[name].push(callback);
|
|
17
|
+
}
|
|
18
|
+
removeEventListener(name, callback) {
|
|
19
|
+
this.listeners[name] = this.listeners[name].filter((l) => l !== callback);
|
|
20
|
+
}
|
|
21
|
+
dispatchEvent(dispatchName, context) {
|
|
22
|
+
this.listeners[dispatchName].forEach((callback) => {
|
|
23
|
+
callback({ detail: context });
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
dispatchSeek(frame) {
|
|
27
|
+
this.dispatchEvent('seeked', {
|
|
28
|
+
frame,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
dispatchPause() {
|
|
32
|
+
this.dispatchEvent('pause', undefined);
|
|
33
|
+
}
|
|
34
|
+
dispatchPlay() {
|
|
35
|
+
this.dispatchEvent('play', undefined);
|
|
36
|
+
}
|
|
37
|
+
dispatchEnded() {
|
|
38
|
+
this.dispatchEvent('ended', undefined);
|
|
39
|
+
}
|
|
40
|
+
dispatchRatechange(playbackRate) {
|
|
41
|
+
this.dispatchEvent('ratechange', {
|
|
42
|
+
playbackRate,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
dispatchError(error) {
|
|
46
|
+
this.dispatchEvent('error', {
|
|
47
|
+
error,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
dispatchTimeUpdate(event) {
|
|
51
|
+
this.dispatchEvent('timeupdate', event);
|
|
52
|
+
}
|
|
53
|
+
dispatchFrameUpdate(event) {
|
|
54
|
+
this.dispatchEvent('frameupdate', event);
|
|
55
|
+
}
|
|
56
|
+
dispatchFullscreenChangeUpdate(event) {
|
|
57
|
+
this.dispatchEvent('fullscreenchange', event);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export class ThumbnailEmitter {
|
|
61
|
+
constructor() {
|
|
62
|
+
this.listeners = {
|
|
63
|
+
error: [],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
addEventListener(name, callback) {
|
|
67
|
+
this.listeners[name].push(callback);
|
|
68
|
+
}
|
|
69
|
+
removeEventListener(name, callback) {
|
|
70
|
+
this.listeners[name] = this.listeners[name].filter((l) => l !== callback);
|
|
71
|
+
}
|
|
72
|
+
dispatchEvent(dispatchName, context) {
|
|
73
|
+
this.listeners[dispatchName].forEach((callback) => {
|
|
74
|
+
callback({ detail: context });
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
dispatchError(error) {
|
|
78
|
+
this.dispatchEvent('error', {
|
|
79
|
+
error,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const formatTime: (timeInSeconds: number) => string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const ICON_SIZE = 25;
|
|
3
|
+
export declare const fullscreenIconSize = 16;
|
|
4
|
+
export declare const PlayIcon: React.FC;
|
|
5
|
+
export declare const PauseIcon: React.FC;
|
|
6
|
+
export declare const FullscreenIcon: React.FC<{
|
|
7
|
+
isFullscreen: boolean;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const VolumeOffIcon: React.FC;
|
|
10
|
+
export declare const VolumeOnIcon: React.FC;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export const ICON_SIZE = 25;
|
|
3
|
+
export const fullscreenIconSize = 16;
|
|
4
|
+
const rotate = {
|
|
5
|
+
transform: `rotate(90deg)`,
|
|
6
|
+
};
|
|
7
|
+
export const PlayIcon = () => {
|
|
8
|
+
return (_jsx("svg", { width: ICON_SIZE, height: ICON_SIZE, viewBox: "-100 -100 400 400", style: rotate, children: _jsx("path", { fill: "#fff", stroke: "#fff", strokeWidth: "100", strokeLinejoin: "round", d: "M 2 172 a 196 100 0 0 0 195 5 A 196 240 0 0 0 100 2.259 A 196 240 0 0 0 2 172 z" }) }));
|
|
9
|
+
};
|
|
10
|
+
export const PauseIcon = () => {
|
|
11
|
+
return (_jsxs("svg", { viewBox: "0 0 100 100", width: ICON_SIZE, height: ICON_SIZE, children: [_jsx("rect", { x: "25", y: "20", width: "20", height: "60", fill: "#fff", ry: "5", rx: "5" }), _jsx("rect", { x: "55", y: "20", width: "20", height: "60", fill: "#fff", ry: "5", rx: "5" })] }));
|
|
12
|
+
};
|
|
13
|
+
export const FullscreenIcon = ({ isFullscreen, }) => {
|
|
14
|
+
const strokeWidth = 6;
|
|
15
|
+
const viewSize = 32;
|
|
16
|
+
const out = isFullscreen ? 0 : strokeWidth / 2;
|
|
17
|
+
const middleInset = isFullscreen ? strokeWidth * 1.6 : strokeWidth / 2;
|
|
18
|
+
const inset = isFullscreen ? strokeWidth * 1.6 : strokeWidth * 2;
|
|
19
|
+
return (_jsxs("svg", { viewBox: `0 0 ${viewSize} ${viewSize}`, height: fullscreenIconSize, width: fullscreenIconSize, children: [_jsx("path", { d: `
|
|
20
|
+
M ${out} ${inset}
|
|
21
|
+
L ${middleInset} ${middleInset}
|
|
22
|
+
L ${inset} ${out}
|
|
23
|
+
`, stroke: "#fff", strokeWidth: strokeWidth, fill: "none" }), _jsx("path", { d: `
|
|
24
|
+
M ${viewSize - out} ${inset}
|
|
25
|
+
L ${viewSize - middleInset} ${middleInset}
|
|
26
|
+
L ${viewSize - inset} ${out}
|
|
27
|
+
`, stroke: "#fff", strokeWidth: strokeWidth, fill: "none" }), _jsx("path", { d: `
|
|
28
|
+
M ${out} ${viewSize - inset}
|
|
29
|
+
L ${middleInset} ${viewSize - middleInset}
|
|
30
|
+
L ${inset} ${viewSize - out}
|
|
31
|
+
`, stroke: "#fff", strokeWidth: strokeWidth, fill: "none" }), _jsx("path", { d: `
|
|
32
|
+
M ${viewSize - out} ${viewSize - inset}
|
|
33
|
+
L ${viewSize - middleInset} ${viewSize - middleInset}
|
|
34
|
+
L ${viewSize - inset} ${viewSize - out}
|
|
35
|
+
`, stroke: "#fff", strokeWidth: strokeWidth, fill: "none" })] }));
|
|
36
|
+
};
|
|
37
|
+
export const VolumeOffIcon = () => {
|
|
38
|
+
return (_jsx("svg", { width: ICON_SIZE, height: ICON_SIZE, viewBox: "0 0 24 24", children: _jsx("path", { d: "M3.63 3.63a.996.996 0 000 1.41L7.29 8.7 7 9H4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h3l3.29 3.29c.63.63 1.71.18 1.71-.71v-4.17l4.18 4.18c-.49.37-1.02.68-1.6.91-.36.15-.58.53-.58.92 0 .72.73 1.18 1.39.91.8-.33 1.55-.77 2.22-1.31l1.34 1.34a.996.996 0 101.41-1.41L5.05 3.63c-.39-.39-1.02-.39-1.42 0zM19 12c0 .82-.15 1.61-.41 2.34l1.53 1.53c.56-1.17.88-2.48.88-3.87 0-3.83-2.4-7.11-5.78-8.4-.59-.23-1.22.23-1.22.86v.19c0 .38.25.71.61.85C17.18 6.54 19 9.06 19 12zm-8.71-6.29l-.17.17L12 7.76V6.41c0-.89-1.08-1.33-1.71-.7zM16.5 12A4.5 4.5 0 0014 7.97v1.79l2.48 2.48c.01-.08.02-.16.02-.24z", fill: "#fff" }) }));
|
|
39
|
+
};
|
|
40
|
+
export const VolumeOnIcon = () => {
|
|
41
|
+
return (_jsx("svg", { width: ICON_SIZE, height: ICON_SIZE, viewBox: "0 0 24 24", children: _jsx("path", { d: "M3 10v4c0 .55.45 1 1 1h3l3.29 3.29c.63.63 1.71.18 1.71-.71V6.41c0-.89-1.08-1.34-1.71-.71L7 9H4c-.55 0-1 .45-1 1zm13.5 2A4.5 4.5 0 0014 7.97v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 4.45v.2c0 .38.25.71.6.85C17.18 6.53 19 9.06 19 12s-1.82 5.47-4.4 6.5c-.36.14-.6.47-.6.85v.2c0 .63.63 1.07 1.21.85C18.6 19.11 21 15.84 21 12s-2.4-7.11-5.79-8.4c-.58-.23-1.21.22-1.21.85z", fill: "#fff" }) }));
|
|
42
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { CallbackListener, PlayerEventTypes } from './event-emitter';
|
|
3
|
+
import { PlayerEmitter } from './event-emitter';
|
|
4
|
+
export { Player, PlayerProps } from './Player';
|
|
5
|
+
export { PlayerMethods, PlayerRef, ThumbnailMethods, ThumbnailRef, } from './player-methods';
|
|
6
|
+
export type { RenderFullscreenButton, RenderPlayPauseButton, } from './PlayerControls';
|
|
7
|
+
export type { ErrorFallback, RenderLoading, RenderPoster } from './PlayerUI';
|
|
8
|
+
export { Thumbnail } from './Thumbnail';
|
|
9
|
+
export { PreviewSize, Translation } from './utils/preview-size';
|
|
10
|
+
export { Size } from './utils/use-element-size';
|
|
11
|
+
export type { CallbackListener, PlayerEventTypes as EventTypes };
|
|
12
|
+
export declare const PlayerInternals: {
|
|
13
|
+
PlayerEventEmitterContext: import("react").Context<PlayerEmitter | undefined>;
|
|
14
|
+
PlayerEmitter: typeof PlayerEmitter;
|
|
15
|
+
usePlayer: () => {
|
|
16
|
+
frameBack: (frames: number) => void;
|
|
17
|
+
frameForward: (frames: number) => void;
|
|
18
|
+
isLastFrame: boolean;
|
|
19
|
+
isFirstFrame: boolean;
|
|
20
|
+
emitter: PlayerEmitter;
|
|
21
|
+
playing: boolean;
|
|
22
|
+
play: (e?: import("react").SyntheticEvent<Element, Event> | undefined) => void;
|
|
23
|
+
pause: () => void;
|
|
24
|
+
pauseAndReturnToPlayStart: () => void;
|
|
25
|
+
seek: (newFrame: number) => void;
|
|
26
|
+
getCurrentFrame: () => number;
|
|
27
|
+
isPlaying: () => boolean;
|
|
28
|
+
hasPlayed: boolean;
|
|
29
|
+
};
|
|
30
|
+
usePlayback: ({ loop, playbackRate, moveToBeginningWhenEnded, inFrame, outFrame, }: {
|
|
31
|
+
loop: boolean;
|
|
32
|
+
playbackRate: number;
|
|
33
|
+
moveToBeginningWhenEnded: boolean;
|
|
34
|
+
inFrame: number | null;
|
|
35
|
+
outFrame: number | null;
|
|
36
|
+
}) => void;
|
|
37
|
+
useElementSize: (ref: import("react").RefObject<HTMLElement>, options: {
|
|
38
|
+
triggerOnWindowResize: boolean;
|
|
39
|
+
shouldApplyCssTransforms: boolean;
|
|
40
|
+
}) => import("./utils/use-element-size").Size | null;
|
|
41
|
+
calculateCanvasTransformation: ({ previewSize, compositionWidth, compositionHeight, canvasSize, }: {
|
|
42
|
+
previewSize: number | "auto";
|
|
43
|
+
compositionWidth: number;
|
|
44
|
+
compositionHeight: number;
|
|
45
|
+
canvasSize: import("./utils/use-element-size").Size;
|
|
46
|
+
}) => {
|
|
47
|
+
centerX: number;
|
|
48
|
+
centerY: number;
|
|
49
|
+
xCorrection: number;
|
|
50
|
+
yCorrection: number;
|
|
51
|
+
scale: number;
|
|
52
|
+
};
|
|
53
|
+
useHoverState: (ref: import("react").RefObject<HTMLDivElement>) => boolean;
|
|
54
|
+
updateAllElementsSizes: () => void;
|
|
55
|
+
calculateScale: ({ canvasSize, compositionHeight, compositionWidth, previewSize, }: {
|
|
56
|
+
previewSize: number | "auto";
|
|
57
|
+
compositionWidth: number;
|
|
58
|
+
compositionHeight: number;
|
|
59
|
+
canvasSize: import("./utils/use-element-size").Size;
|
|
60
|
+
}) => number;
|
|
61
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { calculateCanvasTransformation, calculateScale } from './calculate-scale';
|
|
2
|
+
import { PlayerEventEmitterContext } from './emitter-context';
|
|
3
|
+
import { PlayerEmitter } from './event-emitter';
|
|
4
|
+
import { useHoverState } from './use-hover-state';
|
|
5
|
+
import { usePlayback } from './use-playback';
|
|
6
|
+
import { usePlayer } from './use-player';
|
|
7
|
+
import { updateAllElementsSizes, useElementSize } from './utils/use-element-size';
|
|
8
|
+
export { Player } from './Player';
|
|
9
|
+
export { Thumbnail } from './Thumbnail';
|
|
10
|
+
export const PlayerInternals = {
|
|
11
|
+
PlayerEventEmitterContext,
|
|
12
|
+
PlayerEmitter,
|
|
13
|
+
usePlayer,
|
|
14
|
+
usePlayback,
|
|
15
|
+
useElementSize,
|
|
16
|
+
calculateCanvasTransformation,
|
|
17
|
+
useHoverState,
|
|
18
|
+
updateAllElementsSizes,
|
|
19
|
+
calculateScale,
|
|
20
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PLAYER_CSS_CLASSNAME = "__remotion-player";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const PLAYER_CSS_CLASSNAME = '__remotion-player';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { SyntheticEvent } from 'react';
|
|
2
|
+
import type { PlayerEmitter } from './event-emitter';
|
|
3
|
+
export declare type ThumbnailMethods = {
|
|
4
|
+
getContainerNode: () => HTMLDivElement | null;
|
|
5
|
+
getScale: () => number;
|
|
6
|
+
};
|
|
7
|
+
export declare type PlayerMethods = ThumbnailMethods & {
|
|
8
|
+
play: (e?: SyntheticEvent) => void;
|
|
9
|
+
pause: () => void;
|
|
10
|
+
toggle: (e?: SyntheticEvent) => void;
|
|
11
|
+
seekTo: (frame: number) => void;
|
|
12
|
+
getCurrentFrame: () => number;
|
|
13
|
+
requestFullscreen: () => void;
|
|
14
|
+
exitFullscreen: () => void;
|
|
15
|
+
isFullscreen: () => void;
|
|
16
|
+
setVolume: (num: number) => void;
|
|
17
|
+
getVolume: () => number;
|
|
18
|
+
isMuted: () => boolean;
|
|
19
|
+
isPlaying: () => boolean;
|
|
20
|
+
mute: () => void;
|
|
21
|
+
unmute: () => void;
|
|
22
|
+
};
|
|
23
|
+
export declare type ThumbnailRef = PlayerEmitter & ThumbnailMethods;
|
|
24
|
+
export declare type PlayerRef = PlayerEmitter & PlayerMethods;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { queries, RenderOptions } from '@testing-library/react';
|
|
2
|
+
import type { FC, ReactElement } from 'react';
|
|
3
|
+
declare const HelloWorld: FC;
|
|
4
|
+
declare const customRender: (ui: ReactElement, options?: Omit<RenderOptions, 'queries'>) => import("@testing-library/react").RenderResult<typeof queries, HTMLElement, HTMLElement>;
|
|
5
|
+
export * from '@testing-library/react';
|
|
6
|
+
export { customRender as render, HelloWorld };
|