@gxpl/sdk 0.0.17 → 0.0.18
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/lib/sdk-nextjs/common/useKeyframeValue.js +6 -4
- package/lib/sdk-nextjs/components/Article.js +2 -2
- package/lib/sdk-nextjs/components/{ArticleWrapper.d.ts → Scene.d.ts} +1 -1
- package/lib/sdk-nextjs/components/{ArticleWrapper.js → Scene.js} +7 -6
- package/lib/sdk-nextjs/components/Section/Section.js +18 -18
- package/lib/sdk-nextjs/utils/ArticleRectManager/ArticleRectObserver.d.ts +3 -0
- package/lib/sdk-nextjs/utils/ArticleRectManager/ArticleRectObserver.js +34 -5
- package/package.json +1 -1
|
@@ -49,8 +49,10 @@ function useKeyframeValue(item, type, itemParamsGetter, animatorGetter, sectionI
|
|
|
49
49
|
(0, react_1.useEffect)(() => {
|
|
50
50
|
if (!articleRectObserver || !animator)
|
|
51
51
|
return;
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
return articleRectObserver.on('init', () => {
|
|
53
|
+
const scroll = articleRectObserver.getSectionScroll(sectionId);
|
|
54
|
+
handleKeyframeValue(scroll);
|
|
55
|
+
});
|
|
54
56
|
}, [articleRectObserver, handleKeyframeValue, animator]);
|
|
55
57
|
(0, react_1.useEffect)(() => {
|
|
56
58
|
if (!articleRectObserver || !animator)
|
|
@@ -59,7 +61,7 @@ function useKeyframeValue(item, type, itemParamsGetter, animatorGetter, sectionI
|
|
|
59
61
|
const scroll = articleRectObserver.getSectionScroll(sectionId);
|
|
60
62
|
handleKeyframeValue(scroll);
|
|
61
63
|
});
|
|
62
|
-
}, [
|
|
64
|
+
}, [articleRectObserver, handleKeyframeValue, animator]);
|
|
63
65
|
(0, react_1.useEffect)(() => {
|
|
64
66
|
if (!articleRectObserver || !animator)
|
|
65
67
|
return;
|
|
@@ -67,6 +69,6 @@ function useKeyframeValue(item, type, itemParamsGetter, animatorGetter, sectionI
|
|
|
67
69
|
const scroll = articleRectObserver.getSectionScroll(sectionId);
|
|
68
70
|
handleKeyframeValue(scroll);
|
|
69
71
|
});
|
|
70
|
-
}, [
|
|
72
|
+
}, [articleRectObserver, handleKeyframeValue, animator]);
|
|
71
73
|
return keyframes.length ? adjustedValue : paramValue;
|
|
72
74
|
}
|
|
@@ -11,7 +11,7 @@ const Section_1 = require("./Section/Section");
|
|
|
11
11
|
const Item_1 = require("./items/Item");
|
|
12
12
|
const useArticleRectObserver_1 = require("../utils/ArticleRectManager/useArticleRectObserver");
|
|
13
13
|
const ArticleRectContext_1 = require("../provider/ArticleRectContext");
|
|
14
|
-
const
|
|
14
|
+
const Scene_1 = require("./Scene");
|
|
15
15
|
const InteractionsContext_1 = require("../provider/InteractionsContext");
|
|
16
16
|
const WebGLContextManagerContext_1 = require("../provider/WebGLContextManagerContext");
|
|
17
17
|
const effects_1 = require("@cntrl-site/effects");
|
|
@@ -31,7 +31,7 @@ const Article = ({ article, styles, keyframes }) => {
|
|
|
31
31
|
});
|
|
32
32
|
}, [articleRectObserver]);
|
|
33
33
|
const webglContextManager = (0, react_1.useMemo)(() => new effects_1.WebGLContextManager(), []);
|
|
34
|
-
return ((0, jsx_runtime_1.jsx)(ArticleRectContext_1.ArticleRectContext.Provider, { value: articleRectObserver, children: (0, jsx_runtime_1.jsxs)(InteractionsContext_1.InteractionsProvider, { article: article, children: [(0, jsx_runtime_1.jsx)(KeyframesContext_1.KeyframesContext.Provider, { value: keyframesRepo, children: (0, jsx_runtime_1.jsx)(
|
|
34
|
+
return ((0, jsx_runtime_1.jsx)(ArticleRectContext_1.ArticleRectContext.Provider, { value: articleRectObserver, children: (0, jsx_runtime_1.jsxs)(InteractionsContext_1.InteractionsProvider, { article: article, children: [(0, jsx_runtime_1.jsx)(KeyframesContext_1.KeyframesContext.Provider, { value: keyframesRepo, children: (0, jsx_runtime_1.jsx)(Scene_1.Scene, { id: article.id, styles: styles, children: (0, jsx_runtime_1.jsx)("div", { className: "article", ref: articleRef, children: (0, jsx_runtime_1.jsx)(WebGLContextManagerContext_1.WebglContextManagerContext.Provider, { value: webglContextManager, children: article.sections.map((section, i) => {
|
|
35
35
|
const data = {};
|
|
36
36
|
return ((0, jsx_runtime_1.jsx)(Section_1.Section, { section: section, data: data, children: article.sections[i].items.map(item => ((0, jsx_runtime_1.jsx)(Item_1.Item, { item: item, sectionId: section.id, articleHeight: articleHeight }, item.id))) }, section.id));
|
|
37
37
|
}) }) }) }) }), (0, jsx_runtime_1.jsx)(style_1.default, { id: id, children: `
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.Scene = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const useLayoutDeviation_1 = require("../common/useLayoutDeviation");
|
|
7
7
|
const TransitionMachineContext_1 = require("../provider/TransitionMachineContext");
|
|
8
|
-
const
|
|
8
|
+
const Scene = ({ children, id, styles: sceneStyles }) => {
|
|
9
9
|
var _a;
|
|
10
10
|
const { layoutDeviation } = (0, useLayoutDeviation_1.useLayoutDeviation)();
|
|
11
11
|
const layoutDeviationStyle = { '--layout-deviation': layoutDeviation };
|
|
12
12
|
const sceneRef = (0, react_1.useRef)(null);
|
|
13
13
|
const actorRef = TransitionMachineContext_1.TransitionMachineContext.useActorRef();
|
|
14
|
-
const { isControlledTransitioning, isSettling, isInstantTransitioning } = TransitionMachineContext_1.TransitionMachineContext.useSelector((state) => ({
|
|
14
|
+
const { isControlledTransitioning, isSettling, isInstantTransitioning, stateValue } = TransitionMachineContext_1.TransitionMachineContext.useSelector((state) => ({
|
|
15
15
|
isControlledTransitioning: state.matches('transitioning'),
|
|
16
16
|
isSettling: state.matches('settling'),
|
|
17
17
|
isInstantTransitioning: state.matches('instant_transitioning'),
|
|
18
|
+
stateValue: state.value
|
|
18
19
|
}));
|
|
19
20
|
const type = TransitionMachineContext_1.TransitionMachineContext.useSelector((state) => {
|
|
20
21
|
const { transition } = state.context;
|
|
@@ -136,9 +137,9 @@ const ArticleWrapper = ({ children, id, styles: sceneStyles }) => {
|
|
|
136
137
|
}, [isTransitioning, actorRef, id]);
|
|
137
138
|
const isFixed = isControlledTransitioning || isSettling || isInstantTransitioning;
|
|
138
139
|
const transitionStyle = type === 'slide' ? 'transform' : 'opacity';
|
|
139
|
-
return ((0, jsx_runtime_1.jsx)("div", { ref: sceneRef, className: "article-wrapper", style: Object.assign(Object.assign({}, layoutDeviationStyle), { width: '100vw', height: '100%', position: isFixed ? 'fixed' : 'absolute', transform: `translate3d(${sceneStyles === null || sceneStyles === void 0 ? void 0 : sceneStyles.x}px, ${sceneStyles === null || sceneStyles === void 0 ? void 0 : sceneStyles.y}px, 0)`, transition: isSettling || isInstantTransitioning ? `${transitionStyle} 0.25s ease-out` : 'none', overflowY: isFixed ? 'hidden' : '
|
|
140
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)("div", { ref: sceneRef, className: "article-wrapper", style: Object.assign(Object.assign({}, layoutDeviationStyle), { width: '100vw', height: '100%', position: isFixed ? 'fixed' : 'absolute', transform: `translate3d(${sceneStyles === null || sceneStyles === void 0 ? void 0 : sceneStyles.x}px, ${sceneStyles === null || sceneStyles === void 0 ? void 0 : sceneStyles.y}px, 0)`, transition: isSettling || isInstantTransitioning ? `${transitionStyle} 0.25s ease-out` : 'none', overflowY: isFixed ? 'hidden' : 'scroll', opacity: (_a = sceneStyles === null || sceneStyles === void 0 ? void 0 : sceneStyles.opacity) !== null && _a !== void 0 ? _a : 1 }), children: children }) }));
|
|
140
141
|
};
|
|
141
|
-
exports.
|
|
142
|
+
exports.Scene = Scene;
|
|
142
143
|
function isTransitionDisabled(transitionReady) {
|
|
143
144
|
return !transitionReady.north && !transitionReady.east && !transitionReady.south && !transitionReady.west;
|
|
144
145
|
}
|
|
@@ -153,7 +154,7 @@ function canTransition(direction, el) {
|
|
|
153
154
|
case 'north':
|
|
154
155
|
return el.scrollTop === 0;
|
|
155
156
|
case 'south': {
|
|
156
|
-
const isAllowed = el.scrollTop + el.clientHeight >= el.scrollHeight;
|
|
157
|
+
const isAllowed = el.scrollTop + el.clientHeight + 1 >= el.scrollHeight;
|
|
157
158
|
return isAllowed;
|
|
158
159
|
}
|
|
159
160
|
case 'west':
|
|
@@ -35,24 +35,24 @@ const Section = ({ section, data, children }) => {
|
|
|
35
35
|
transform: media.position === 'fixed' ? 'translateY(-100vh)' : 'unset',
|
|
36
36
|
height: media.position === 'fixed' ? `calc(${getSectionHeight(height)} + 200vh)` : getSectionHeight(height)
|
|
37
37
|
}, children: [media.type === 'video' && ((0, jsx_runtime_1.jsx)(SectionVideo_1.SectionVideo, { container: sectionRef.current, sectionId: section.id, media: media })), media.type === 'image' && ((0, jsx_runtime_1.jsx)(SectionImage_1.SectionImage, { media: media, sectionId: section.id }))] }, `section-background-wrapper-${section.id}`) })), children] }), (0, jsx_runtime_1.jsx)(style_1.default, { id: id, children: `
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
38
|
+
.section-${section.id} {
|
|
39
|
+
height: ${getSectionHeight(height)};
|
|
40
|
+
position: relative;
|
|
41
|
+
display: ${hidden ? 'none' : 'block'};
|
|
42
|
+
background-color: ${color_1.CntrlColor.parse(color !== null && color !== void 0 ? color : DEFAULT_COLOR).fmt('rgba')};
|
|
43
|
+
}
|
|
44
|
+
.section-background-overlay-${section.id} {
|
|
45
|
+
height: ${getSectionHeight(height)};
|
|
46
|
+
width: 100%;
|
|
47
|
+
position: relative;
|
|
48
|
+
overflow: clip;
|
|
49
|
+
}
|
|
50
|
+
.section-background-wrapper-${section.id} {
|
|
51
|
+
transform: ${(media === null || media === void 0 ? void 0 : media.position) === 'fixed' ? 'translateY(-100vh)' : 'unset'};
|
|
52
|
+
position: relative;
|
|
53
|
+
height: ${(media === null || media === void 0 ? void 0 : media.position) === 'fixed' ? `calc(${getSectionHeight(height)} + 200vh)` : getSectionHeight(height)};
|
|
54
|
+
width: 100%;
|
|
55
|
+
}
|
|
56
56
|
` })] }));
|
|
57
57
|
};
|
|
58
58
|
exports.Section = Section;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from '../EventEmitter';
|
|
2
2
|
interface EventMap {
|
|
3
|
+
'init': undefined;
|
|
3
4
|
'scroll': undefined;
|
|
4
5
|
'resize': DOMRect;
|
|
5
6
|
}
|
|
@@ -11,6 +12,8 @@ export declare class ArticleRectObserver extends EventEmitter<EventMap> {
|
|
|
11
12
|
private animationFrame;
|
|
12
13
|
private parent;
|
|
13
14
|
private sectionsScrollMap;
|
|
15
|
+
private previousParentWidth;
|
|
16
|
+
private isInitialized;
|
|
14
17
|
constructor();
|
|
15
18
|
get scroll(): number;
|
|
16
19
|
getSectionScroll(sectionId: string): number;
|
|
@@ -9,12 +9,14 @@ const resize_observer_polyfill_1 = __importDefault(require("resize-observer-poly
|
|
|
9
9
|
class ArticleRectObserver extends EventEmitter_1.EventEmitter {
|
|
10
10
|
constructor() {
|
|
11
11
|
super();
|
|
12
|
-
this.articleWidth =
|
|
12
|
+
this.articleWidth = 1;
|
|
13
13
|
this.registry = new Map();
|
|
14
14
|
this.scrollPos = window.scrollY;
|
|
15
15
|
this.animationFrame = NaN;
|
|
16
16
|
this.parent = undefined;
|
|
17
17
|
this.sectionsScrollMap = new Map();
|
|
18
|
+
this.previousParentWidth = null;
|
|
19
|
+
this.isInitialized = false;
|
|
18
20
|
this.handleScroll = (scroll) => {
|
|
19
21
|
this.setScroll(scroll / this.articleWidth);
|
|
20
22
|
};
|
|
@@ -41,8 +43,17 @@ class ArticleRectObserver extends EventEmitter_1.EventEmitter {
|
|
|
41
43
|
}
|
|
42
44
|
init(parent) {
|
|
43
45
|
this.parent = parent;
|
|
46
|
+
const scrollableParent = parent.parentElement;
|
|
47
|
+
const parentBoundary = parent.getBoundingClientRect();
|
|
48
|
+
if (!scrollableParent) {
|
|
49
|
+
throw new Error('Scrollable parent not found');
|
|
50
|
+
}
|
|
51
|
+
const articleWidth = parentBoundary.width;
|
|
52
|
+
this.articleWidth = articleWidth;
|
|
53
|
+
this.previousParentWidth = articleWidth;
|
|
54
|
+
this.setScroll(scrollableParent.scrollTop / articleWidth);
|
|
44
55
|
const onScroll = () => {
|
|
45
|
-
this.handleScroll(
|
|
56
|
+
this.handleScroll(scrollableParent.scrollTop);
|
|
46
57
|
if (!isNaN(this.animationFrame))
|
|
47
58
|
return;
|
|
48
59
|
this.animationFrame = window.requestAnimationFrame(() => {
|
|
@@ -50,10 +61,21 @@ class ArticleRectObserver extends EventEmitter_1.EventEmitter {
|
|
|
50
61
|
this.emit('scroll', undefined);
|
|
51
62
|
});
|
|
52
63
|
};
|
|
53
|
-
|
|
64
|
+
scrollableParent.addEventListener('scroll', onScroll);
|
|
65
|
+
for (const sectionId of this.registry.keys()) {
|
|
66
|
+
const el = this.registry.get(sectionId);
|
|
67
|
+
if (!el)
|
|
68
|
+
continue;
|
|
69
|
+
const rect = el.getBoundingClientRect();
|
|
70
|
+
this.sectionsScrollMap.set(sectionId, rect.top - parentBoundary.top);
|
|
71
|
+
}
|
|
72
|
+
this.isInitialized = true;
|
|
73
|
+
this.emit('init', undefined);
|
|
54
74
|
return () => {
|
|
55
75
|
this.parent = undefined;
|
|
56
|
-
|
|
76
|
+
this.isInitialized = false;
|
|
77
|
+
this.previousParentWidth = null;
|
|
78
|
+
scrollableParent.removeEventListener('scroll', onScroll);
|
|
57
79
|
if (!isNaN(this.animationFrame)) {
|
|
58
80
|
window.cancelAnimationFrame(this.animationFrame);
|
|
59
81
|
this.animationFrame = NaN;
|
|
@@ -72,7 +94,14 @@ class ArticleRectObserver extends EventEmitter_1.EventEmitter {
|
|
|
72
94
|
if (!this.parent)
|
|
73
95
|
return;
|
|
74
96
|
const parentBoundary = this.parent.getBoundingClientRect();
|
|
75
|
-
|
|
97
|
+
const newWidth = parentBoundary.width;
|
|
98
|
+
if (!this.isInitialized || this.previousParentWidth === newWidth) {
|
|
99
|
+
this.articleWidth = newWidth;
|
|
100
|
+
this.previousParentWidth = newWidth;
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
this.articleWidth = newWidth;
|
|
104
|
+
this.previousParentWidth = newWidth;
|
|
76
105
|
this.setScroll(window.scrollY / this.articleWidth);
|
|
77
106
|
this.emit('resize', parentBoundary);
|
|
78
107
|
for (const sectionId of this.registry.keys()) {
|