@cntrl-site/sdk-nextjs 1.9.51 → 1.9.53-0
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.
|
@@ -6,10 +6,16 @@ const react_1 = require("react");
|
|
|
6
6
|
const rangeMap_1 = require("../utils/rangeMap");
|
|
7
7
|
const ArticleRectContext_1 = require("../provider/ArticleRectContext");
|
|
8
8
|
const sdk_1 = require("@cntrl-site/sdk");
|
|
9
|
-
const ScrollPlaybackVideo = ({ sectionId, src, playbackParams, style, className }) => {
|
|
9
|
+
const ScrollPlaybackVideo = ({ sectionId, src, playbackParams, style, className, scrollPlaybackFrameData, frameBaseUrl }) => {
|
|
10
10
|
const [containerElement, setContainerElement] = (0, react_1.useState)(null);
|
|
11
11
|
const [time, setTime] = (0, react_1.useState)(0);
|
|
12
12
|
const articleRectObserver = (0, react_1.useContext)(ArticleRectContext_1.ArticleRectContext);
|
|
13
|
+
const hasServerFrames = (scrollPlaybackFrameData === null || scrollPlaybackFrameData === void 0 ? void 0 : scrollPlaybackFrameData.status) === 'ready'
|
|
14
|
+
&& scrollPlaybackFrameData.batchId
|
|
15
|
+
&& scrollPlaybackFrameData.frameCount
|
|
16
|
+
&& scrollPlaybackFrameData.frameRate
|
|
17
|
+
&& scrollPlaybackFrameData.frameFormat
|
|
18
|
+
&& frameBaseUrl;
|
|
13
19
|
(0, react_1.useEffect)(() => {
|
|
14
20
|
if (!playbackParams || !articleRectObserver)
|
|
15
21
|
return;
|
|
@@ -22,12 +28,17 @@ const ScrollPlaybackVideo = ({ sectionId, src, playbackParams, style, className
|
|
|
22
28
|
const scrollVideoManager = (0, react_1.useMemo)(() => {
|
|
23
29
|
if (!containerElement)
|
|
24
30
|
return null;
|
|
25
|
-
const manager = new sdk_1.ScrollPlaybackVideoManager({
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
const manager = new sdk_1.ScrollPlaybackVideoManager(Object.assign({ src, videoContainer: containerElement }, (hasServerFrames ? {
|
|
32
|
+
frameData: {
|
|
33
|
+
batchId: scrollPlaybackFrameData.batchId,
|
|
34
|
+
frameCount: scrollPlaybackFrameData.frameCount,
|
|
35
|
+
frameRate: scrollPlaybackFrameData.frameRate,
|
|
36
|
+
frameFormat: scrollPlaybackFrameData.frameFormat
|
|
37
|
+
},
|
|
38
|
+
frameBaseUrl
|
|
39
|
+
} : {})));
|
|
29
40
|
return manager;
|
|
30
|
-
}, [containerElement, src]);
|
|
41
|
+
}, [containerElement, src, hasServerFrames, frameBaseUrl]);
|
|
31
42
|
(0, react_1.useEffect)(() => {
|
|
32
43
|
return () => {
|
|
33
44
|
scrollVideoManager === null || scrollVideoManager === void 0 ? void 0 : scrollVideoManager.destroy();
|
|
@@ -22,7 +22,7 @@ const useItemFXData_1 = require("../../../common/useItemFXData");
|
|
|
22
22
|
const getFill_1 = require("../../../utils/getFill");
|
|
23
23
|
const useItemGeometry_1 = require("../../../ItemGeometry/useItemGeometry");
|
|
24
24
|
const VideoItem = ({ item, sectionId, onResize, interactionCtrl, onVisibilityChange }) => {
|
|
25
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
25
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
26
26
|
const id = (0, react_1.useId)();
|
|
27
27
|
const { layouts } = (0, useCntrlContext_1.useCntrlContext)();
|
|
28
28
|
const layoutId = (0, useLayoutContext_1.useLayoutContext)();
|
|
@@ -98,7 +98,7 @@ const VideoItem = ({ item, sectionId, onResize, interactionCtrl, onVisibilityCha
|
|
|
98
98
|
observer.observe(ref);
|
|
99
99
|
return () => observer.disconnect();
|
|
100
100
|
}, [layoutParams, videoRef, ref, userPaused, isVideoInteracted]);
|
|
101
|
-
return ((0, jsx_runtime_1.jsxs)(LinkWrapper_1.LinkWrapper, { url: (_p = item.link) === null || _p === void 0 ? void 0 : _p.url, target: (_q = item.link) === null || _q === void 0 ? void 0 : _q.target, children: [(0, jsx_runtime_1.jsxs)("div", { className: `video-wrapper-${item.id}`, ref: setRef, style: Object.assign(Object.assign(Object.assign(Object.assign({}, (opacity !== undefined ? { opacity } : {})), (angle !== undefined ? { transform: `rotate(${angle}deg)` } : {})), (blur !== undefined ? { filter: `blur(${blur * 100}vw)` } : {})), { willChange: blur !== 0 && blur !== undefined ? 'transform' : 'unset', transition: (_r = wrapperStateParams === null || wrapperStateParams === void 0 ? void 0 : wrapperStateParams.transition) !== null && _r !== void 0 ? _r : 'none' }), children: [hasScrollPlayback && ((0, jsx_runtime_1.jsx)(ScrollPlaybackVideo_1.ScrollPlaybackVideo, { sectionId: sectionId, src: item.commonParams.url, playbackParams: scrollPlayback, style: inlineStyles, className: `video video-playback-wrapper video-${item.id}
|
|
101
|
+
return ((0, jsx_runtime_1.jsxs)(LinkWrapper_1.LinkWrapper, { url: (_p = item.link) === null || _p === void 0 ? void 0 : _p.url, target: (_q = item.link) === null || _q === void 0 ? void 0 : _q.target, children: [(0, jsx_runtime_1.jsxs)("div", { className: `video-wrapper-${item.id}`, ref: setRef, style: Object.assign(Object.assign(Object.assign(Object.assign({}, (opacity !== undefined ? { opacity } : {})), (angle !== undefined ? { transform: `rotate(${angle}deg)` } : {})), (blur !== undefined ? { filter: `blur(${blur * 100}vw)` } : {})), { willChange: blur !== 0 && blur !== undefined ? 'transform' : 'unset', transition: (_r = wrapperStateParams === null || wrapperStateParams === void 0 ? void 0 : wrapperStateParams.transition) !== null && _r !== void 0 ? _r : 'none' }), children: [hasScrollPlayback && ((0, jsx_runtime_1.jsx)(ScrollPlaybackVideo_1.ScrollPlaybackVideo, { sectionId: sectionId, src: item.commonParams.url, playbackParams: scrollPlayback, style: inlineStyles, className: `video video-playback-wrapper video-${item.id}`, scrollPlaybackFrameData: item.commonParams.scrollPlaybackFrameData, frameBaseUrl: (_s = item.commonParams.scrollPlaybackFrameData) === null || _s === void 0 ? void 0 : _s.framesUrl })), hasGLEffect && isFXAllowed && ((0, jsx_runtime_1.jsx)("canvas", { style: inlineStyles, ref: fxCanvas, className: `video-canvas video-${item.id}`, width: rectWidth, height: rectHeight })), !hasScrollPlayback && !hasGLEffect && layoutParams && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("video", { poster: (_t = item.commonParams.coverUrl) !== null && _t !== void 0 ? _t : '', ref: setVideoRef, autoPlay: layoutParams.play === 'auto', preload: "auto", onClick: () => {
|
|
102
102
|
setIsVideoInteracted(true);
|
|
103
103
|
}, muted: layoutParams.muted, onPlay: () => {
|
|
104
104
|
setIsVideoPlaying(true);
|
|
@@ -121,7 +121,7 @@ const VideoItem = ({ item, sectionId, onResize, interactionCtrl, onVisibilityCha
|
|
|
121
121
|
return;
|
|
122
122
|
setIsVideoInteracted(true);
|
|
123
123
|
videoRef.play();
|
|
124
|
-
}, src: (
|
|
124
|
+
}, src: (_u = item.commonParams.coverUrl) !== null && _u !== void 0 ? _u : '', className: `video-cover-${item.id}`, onClick: () => {
|
|
125
125
|
if (!videoRef)
|
|
126
126
|
return;
|
|
127
127
|
setIsVideoInteracted(true);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cntrl-site/sdk-nextjs",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.53-0",
|
|
4
4
|
"description": "SDK for Next.js",
|
|
5
5
|
"author": "arsen@momdesign.nyc",
|
|
6
6
|
"license": "MIT",
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"test": "jest",
|
|
19
19
|
"prebuild": "rimraf ./lib",
|
|
20
20
|
"build": "tsc --project tsconfig.build.json",
|
|
21
|
+
"build:watch": "tsc --watch --project tsconfig.build.json",
|
|
21
22
|
"prepublishOnly": "cross-env NODE_ENV=production npm run build"
|
|
22
23
|
},
|
|
23
24
|
"peerDependencies": {
|
|
@@ -30,9 +31,9 @@
|
|
|
30
31
|
"dependencies": {
|
|
31
32
|
"@antfu/eslint-config": "^3.8.0",
|
|
32
33
|
"@cntrl-site/color": "^1.0.0",
|
|
33
|
-
"@cntrl-site/components": "^0.1.
|
|
34
|
+
"@cntrl-site/components": "^0.1.34",
|
|
34
35
|
"@cntrl-site/effects": "^1.4.0",
|
|
35
|
-
"@cntrl-site/sdk": "^1.25.
|
|
36
|
+
"@cntrl-site/sdk": "^1.25.12",
|
|
36
37
|
"@types/vimeo__player": "^2.18.0",
|
|
37
38
|
"@vimeo/player": "^2.25.0",
|
|
38
39
|
"html-react-parser": "^3.0.1",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { FC, useContext, useEffect, useMemo, useState } from 'react';
|
|
2
2
|
import { rangeMap } from '../utils/rangeMap';
|
|
3
3
|
import { ArticleRectContext } from '../provider/ArticleRectContext';
|
|
4
|
-
import { ScrollPlaybackVideoManager } from '@cntrl-site/sdk';
|
|
4
|
+
import { ScrollPlaybackVideoManager, ScrollPlaybackFrameData } from '@cntrl-site/sdk';
|
|
5
5
|
|
|
6
6
|
type PlaybackParams = { from: number, to: number };
|
|
7
7
|
|
|
@@ -11,12 +11,20 @@ interface Props {
|
|
|
11
11
|
playbackParams: PlaybackParams | null;
|
|
12
12
|
style?: React.CSSProperties;
|
|
13
13
|
className: string;
|
|
14
|
+
scrollPlaybackFrameData?: ScrollPlaybackFrameData | null;
|
|
15
|
+
frameBaseUrl?: string;
|
|
14
16
|
}
|
|
15
17
|
|
|
16
|
-
export const ScrollPlaybackVideo: FC<Props> = ({ sectionId, src, playbackParams, style, className }) => {
|
|
18
|
+
export const ScrollPlaybackVideo: FC<Props> = ({ sectionId, src, playbackParams, style, className, scrollPlaybackFrameData, frameBaseUrl }) => {
|
|
17
19
|
const [containerElement, setContainerElement] = useState<HTMLDivElement | null>(null);
|
|
18
20
|
const [time, setTime] = useState(0);
|
|
19
21
|
const articleRectObserver = useContext(ArticleRectContext);
|
|
22
|
+
const hasServerFrames = scrollPlaybackFrameData?.status === 'ready'
|
|
23
|
+
&& scrollPlaybackFrameData.batchId
|
|
24
|
+
&& scrollPlaybackFrameData.frameCount
|
|
25
|
+
&& scrollPlaybackFrameData.frameRate
|
|
26
|
+
&& scrollPlaybackFrameData.frameFormat
|
|
27
|
+
&& frameBaseUrl;
|
|
20
28
|
|
|
21
29
|
useEffect(() => {
|
|
22
30
|
if (!playbackParams || !articleRectObserver) return;
|
|
@@ -31,10 +39,19 @@ export const ScrollPlaybackVideo: FC<Props> = ({ sectionId, src, playbackParams,
|
|
|
31
39
|
if (!containerElement) return null;
|
|
32
40
|
const manager = new ScrollPlaybackVideoManager({
|
|
33
41
|
src,
|
|
34
|
-
videoContainer: containerElement
|
|
42
|
+
videoContainer: containerElement,
|
|
43
|
+
...(hasServerFrames ? {
|
|
44
|
+
frameData: {
|
|
45
|
+
batchId: scrollPlaybackFrameData.batchId!,
|
|
46
|
+
frameCount: scrollPlaybackFrameData.frameCount!,
|
|
47
|
+
frameRate: scrollPlaybackFrameData.frameRate!,
|
|
48
|
+
frameFormat: scrollPlaybackFrameData.frameFormat!
|
|
49
|
+
},
|
|
50
|
+
frameBaseUrl
|
|
51
|
+
} : {})
|
|
35
52
|
});
|
|
36
53
|
return manager;
|
|
37
|
-
}, [containerElement, src]);
|
|
54
|
+
}, [containerElement, src, hasServerFrames, frameBaseUrl]);
|
|
38
55
|
|
|
39
56
|
useEffect(() => {
|
|
40
57
|
return () => {
|
|
@@ -129,6 +129,8 @@ export const VideoItem: FC<ItemProps<TVideoItem>> = ({ item, sectionId, onResize
|
|
|
129
129
|
playbackParams={scrollPlayback}
|
|
130
130
|
style={inlineStyles}
|
|
131
131
|
className={`video video-playback-wrapper video-${item.id}`}
|
|
132
|
+
scrollPlaybackFrameData={item.commonParams.scrollPlaybackFrameData}
|
|
133
|
+
frameBaseUrl={item.commonParams.scrollPlaybackFrameData?.framesUrl}
|
|
132
134
|
/>
|
|
133
135
|
)}
|
|
134
136
|
{hasGLEffect && isFXAllowed && (
|
|
Binary file
|