@gxpl/sdk 0.0.40 → 0.0.42
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/transitions/transitionMachine.d.ts +27 -0
- package/lib/sdk/transitions/transitionMachine.js +11 -16
- package/lib/sdk/transitions/utils/getDeltaAndProgress.d.ts +1 -1
- package/lib/sdk/transitions/utils/getDeltaAndProgress.js +1 -1
- package/lib/sdk/transitions/utils/getScenesOnInstantTransition.d.ts +1 -1
- package/lib/sdk/transitions/utils/getScenesOnInstantTransition.js +3 -3
- package/lib/sdk/transitions/utils/getScenesOnStart.d.ts +1 -1
- package/lib/sdk/transitions/utils/getScenesOnStart.js +5 -5
- package/lib/sdk/transitions/utils/types.d.ts +2 -0
- package/lib/sdk/types/article/Interaction.d.ts +6 -1
- package/lib/sdk-nextjs/components/Page.js +3 -8
- package/lib/sdk-nextjs/components/Preview/PreviewListener.js +1 -0
- package/lib/sdk-nextjs/components/Scene.js +44 -6
- package/lib/sdk-nextjs/components/items/LinkWrapper.js +1 -0
- package/lib/sdk-nextjs/components/items/RichTextItem/RichTextItem.js +1 -1
- package/lib/sdk-nextjs/fixedLayers/FixedLayerTransitionsRegistry.d.ts +1 -1
- package/lib/sdk-nextjs/fixedLayers/FixedLayerTransitionsRegistry.js +2 -2
- package/lib/sdk-nextjs/interactions/InteractionsRegistry.d.ts +9 -1
- package/lib/sdk-nextjs/interactions/InteractionsRegistry.js +100 -3
- package/lib/sdk-nextjs/provider/InOutTransitionContext.d.ts +8 -0
- package/lib/sdk-nextjs/provider/InOutTransitionContext.js +14 -0
- package/lib/sdk-nextjs/provider/InteractionsContext.js +10 -2
- package/lib/sdk-nextjs/provider/TransitionMachineContext.d.ts +96 -0
- package/lib/sdk-nextjs/provider/TransitionMachineContextProvider.d.ts +11 -0
- package/lib/sdk-nextjs/provider/TransitionMachineContextProvider.js +18 -0
- package/package.json +2 -1
|
@@ -3,12 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.InteractionsRegistry = void 0;
|
|
4
4
|
const isItemType_1 = require("../utils/isItemType");
|
|
5
5
|
const ArticleItemType_1 = require("../../sdk/types/article/ArticleItemType");
|
|
6
|
+
const ulid_1 = require("ulid");
|
|
6
7
|
class InteractionsRegistry {
|
|
7
|
-
constructor(article) {
|
|
8
|
-
var _a;
|
|
8
|
+
constructor(article, isStartSceneInitialized) {
|
|
9
9
|
this.ctrls = new Map();
|
|
10
|
+
this.inTransitionDefaultStateId = (0, ulid_1.ulid)();
|
|
11
|
+
this.outTransitionStartStateId = (0, ulid_1.ulid)();
|
|
12
|
+
this.isStartSceneInitialized = isStartSceneInitialized;
|
|
10
13
|
this.items = this.unpackItems(article);
|
|
11
|
-
const interactions =
|
|
14
|
+
const interactions = [...article.interactions, this.getOutTransitionInteraction(), this.getInTransitionInteraction()];
|
|
12
15
|
const activeStatesIds = interactions.reduce((map, inter) => {
|
|
13
16
|
var _a;
|
|
14
17
|
const activeStateId = (_a = inter.states.find((state) => state.id !== inter.startStateId)) === null || _a === void 0 ? void 0 : _a.id;
|
|
@@ -104,6 +107,72 @@ class InteractionsRegistry {
|
|
|
104
107
|
}
|
|
105
108
|
return available;
|
|
106
109
|
}
|
|
110
|
+
notifySceneInTransition() {
|
|
111
|
+
var _a;
|
|
112
|
+
const transitioningItems = (_a = this.stateItemsIdsMap['in']) !== null && _a !== void 0 ? _a : [];
|
|
113
|
+
this.setCurrentStateForInteraction('in-transition', this.inTransitionDefaultStateId);
|
|
114
|
+
const timestamp = Date.now();
|
|
115
|
+
this.itemsStages = this.itemsStages.map((stage) => {
|
|
116
|
+
if (stage.interactionId !== 'in-transition')
|
|
117
|
+
return stage;
|
|
118
|
+
return {
|
|
119
|
+
itemId: stage.itemId,
|
|
120
|
+
interactionId: stage.interactionId,
|
|
121
|
+
type: 'transitioning',
|
|
122
|
+
from: 'in',
|
|
123
|
+
to: this.inTransitionDefaultStateId,
|
|
124
|
+
direction: 'out',
|
|
125
|
+
updated: timestamp
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
const itemsToNotify = new Set(transitioningItems);
|
|
129
|
+
this.notifyItemCtrlsChange(Array.from(itemsToNotify));
|
|
130
|
+
this.notifyTransitionStartForItems(transitioningItems, this.inTransitionDefaultStateId);
|
|
131
|
+
}
|
|
132
|
+
notifySceneOutTransition() {
|
|
133
|
+
var _a;
|
|
134
|
+
const transitioningItems = (_a = this.stateItemsIdsMap['out']) !== null && _a !== void 0 ? _a : [];
|
|
135
|
+
this.setCurrentStateForInteraction('out-transition', 'out');
|
|
136
|
+
const timestamp = Date.now();
|
|
137
|
+
this.itemsStages = this.itemsStages.map((stage) => {
|
|
138
|
+
if (stage.interactionId !== 'out-transition')
|
|
139
|
+
return stage;
|
|
140
|
+
return {
|
|
141
|
+
itemId: stage.itemId,
|
|
142
|
+
interactionId: stage.interactionId,
|
|
143
|
+
type: 'transitioning',
|
|
144
|
+
from: stage.type === 'transitioning' ? stage.to : stage.stateId,
|
|
145
|
+
to: 'out',
|
|
146
|
+
direction: 'in',
|
|
147
|
+
updated: timestamp
|
|
148
|
+
};
|
|
149
|
+
});
|
|
150
|
+
const itemsToNotify = new Set(transitioningItems);
|
|
151
|
+
this.notifyItemCtrlsChange(Array.from(itemsToNotify));
|
|
152
|
+
this.notifyTransitionStartForItems(transitioningItems, 'out');
|
|
153
|
+
}
|
|
154
|
+
notifySceneOutTransitionCancel() {
|
|
155
|
+
var _a;
|
|
156
|
+
const transitioningItems = (_a = this.stateItemsIdsMap['out']) !== null && _a !== void 0 ? _a : [];
|
|
157
|
+
this.setCurrentStateForInteraction('out-transition', this.outTransitionStartStateId);
|
|
158
|
+
const timestamp = Date.now();
|
|
159
|
+
this.itemsStages = this.itemsStages.map((stage) => {
|
|
160
|
+
if (stage.interactionId !== 'out-transition')
|
|
161
|
+
return stage;
|
|
162
|
+
return {
|
|
163
|
+
itemId: stage.itemId,
|
|
164
|
+
interactionId: stage.interactionId,
|
|
165
|
+
type: 'transitioning',
|
|
166
|
+
from: 'out',
|
|
167
|
+
to: this.outTransitionStartStateId,
|
|
168
|
+
direction: 'out',
|
|
169
|
+
updated: timestamp
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
const itemsToNotify = new Set(transitioningItems);
|
|
173
|
+
this.notifyItemCtrlsChange(Array.from(itemsToNotify));
|
|
174
|
+
this.notifyTransitionStartForItems(transitioningItems, this.outTransitionStartStateId);
|
|
175
|
+
}
|
|
107
176
|
notifyLoad() {
|
|
108
177
|
var _a, _b;
|
|
109
178
|
const timestamp = Date.now();
|
|
@@ -336,6 +405,17 @@ class InteractionsRegistry {
|
|
|
336
405
|
if (!itemStatesMap)
|
|
337
406
|
continue;
|
|
338
407
|
for (const stateId of Object.keys(itemStatesMap)) {
|
|
408
|
+
if (stateId === 'in' && this.isStartSceneInitialized) {
|
|
409
|
+
stages.push({
|
|
410
|
+
itemId: item.id,
|
|
411
|
+
interactionId: 'in-transition',
|
|
412
|
+
type: 'active',
|
|
413
|
+
isStartState: false,
|
|
414
|
+
updated: timestamp,
|
|
415
|
+
stateId: 'in'
|
|
416
|
+
});
|
|
417
|
+
continue;
|
|
418
|
+
}
|
|
339
419
|
const interactionId = this.activeStateIdInteractionIdMap[stateId];
|
|
340
420
|
if (!interactionId)
|
|
341
421
|
continue;
|
|
@@ -351,5 +431,22 @@ class InteractionsRegistry {
|
|
|
351
431
|
}
|
|
352
432
|
return stages;
|
|
353
433
|
}
|
|
434
|
+
getOutTransitionInteraction() {
|
|
435
|
+
return {
|
|
436
|
+
id: 'out-transition',
|
|
437
|
+
triggers: [],
|
|
438
|
+
states: [{ id: this.outTransitionStartStateId }, { id: 'out' }],
|
|
439
|
+
startStateId: this.outTransitionStartStateId
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
getInTransitionInteraction() {
|
|
443
|
+
const startStateId = 'in';
|
|
444
|
+
return {
|
|
445
|
+
id: 'in-transition',
|
|
446
|
+
triggers: [],
|
|
447
|
+
states: [{ id: startStateId }, { id: this.inTransitionDefaultStateId }],
|
|
448
|
+
startStateId: this.inTransitionDefaultStateId
|
|
449
|
+
};
|
|
450
|
+
}
|
|
354
451
|
}
|
|
355
452
|
exports.InteractionsRegistry = InteractionsRegistry;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FC, PropsWithChildren } from 'react';
|
|
2
|
+
type InOutTransitionContextType = {
|
|
3
|
+
isStartSceneInitialized: boolean;
|
|
4
|
+
setIsStartSceneInitialized: (isStartSceneInitialized: boolean) => void;
|
|
5
|
+
};
|
|
6
|
+
export declare const InOutTransitionContext: import("react").Context<InOutTransitionContextType>;
|
|
7
|
+
export declare const InOutTransitionProvider: FC<PropsWithChildren>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InOutTransitionProvider = exports.InOutTransitionContext = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
exports.InOutTransitionContext = (0, react_1.createContext)({
|
|
7
|
+
isStartSceneInitialized: false,
|
|
8
|
+
setIsStartSceneInitialized: () => { }
|
|
9
|
+
});
|
|
10
|
+
const InOutTransitionProvider = ({ children }) => {
|
|
11
|
+
const [isStartSceneInitialized, setIsStartSceneInitialized] = (0, react_1.useState)(false);
|
|
12
|
+
return ((0, jsx_runtime_1.jsx)(exports.InOutTransitionContext.Provider, { value: { isStartSceneInitialized, setIsStartSceneInitialized }, children: children }));
|
|
13
|
+
};
|
|
14
|
+
exports.InOutTransitionProvider = InOutTransitionProvider;
|
|
@@ -6,11 +6,16 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
6
6
|
const react_1 = require("react");
|
|
7
7
|
const InteractionsRegistry_1 = require("../interactions/InteractionsRegistry");
|
|
8
8
|
const ArticleRectContext_1 = require("./ArticleRectContext");
|
|
9
|
+
const InOutTransitionContext_1 = require("./InOutTransitionContext");
|
|
10
|
+
const TransitionMachineContext_1 = require("./TransitionMachineContext");
|
|
9
11
|
exports.InteractionsContext = (0, react_1.createContext)(undefined);
|
|
10
12
|
const InteractionsProvider = ({ article, children }) => {
|
|
11
13
|
const articleRectObserver = (0, react_1.useContext)(ArticleRectContext_1.ArticleRectContext);
|
|
14
|
+
const startScene = TransitionMachineContext_1.TransitionMachineContext.useSelector((state) => (state.context.input.startScene));
|
|
15
|
+
const { isStartSceneInitialized, setIsStartSceneInitialized } = (0, react_1.useContext)(InOutTransitionContext_1.InOutTransitionContext);
|
|
12
16
|
const registry = (0, react_1.useMemo)(() => {
|
|
13
|
-
return new InteractionsRegistry_1.InteractionsRegistry(article);
|
|
17
|
+
return new InteractionsRegistry_1.InteractionsRegistry(article, isStartSceneInitialized);
|
|
18
|
+
// do not add isStartSceneInitialized to the dependencies array, it will cause infinite re-render
|
|
14
19
|
}, [article]);
|
|
15
20
|
(0, react_1.useEffect)(() => {
|
|
16
21
|
if (!registry || !articleRectObserver)
|
|
@@ -22,6 +27,9 @@ const InteractionsProvider = ({ article, children }) => {
|
|
|
22
27
|
return articleRectObserver.on('scroll', handleScroll);
|
|
23
28
|
}, [registry, articleRectObserver]);
|
|
24
29
|
const notifyLoad = (0, react_1.useCallback)(() => {
|
|
30
|
+
if (startScene === article.id) {
|
|
31
|
+
setIsStartSceneInitialized(true);
|
|
32
|
+
}
|
|
25
33
|
if (!registry)
|
|
26
34
|
return;
|
|
27
35
|
requestAnimationFrame(() => {
|
|
@@ -29,7 +37,7 @@ const InteractionsProvider = ({ article, children }) => {
|
|
|
29
37
|
registry.notifyLoad();
|
|
30
38
|
}, 0);
|
|
31
39
|
});
|
|
32
|
-
}, [registry]);
|
|
40
|
+
}, [registry, startScene, article.id]);
|
|
33
41
|
(0, react_1.useEffect)(() => {
|
|
34
42
|
if (document.readyState === 'complete') {
|
|
35
43
|
notifyLoad();
|