pds-dev-kit-web-test 2.4.19 → 2.4.20
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/src/desktop/components/UserDesktopTabBar/UserDesktopTabBar.d.ts +1 -1
- package/dist/src/desktop/components/UserDesktopTabBar/UserDesktopTabBar.js +24 -4
- package/dist/src/sub/DynamicLayout/DynamicLayout.js +14 -1
- package/dist/src/sub/DynamicLayout/pagesPreviewMock.js +117 -0
- package/dist/src/sub/DynamicLayout/sectionActionTypes.d.ts +0 -8
- package/dist/src/sub/DynamicLayout/sections/CustomSection/CustomSection.js +71 -67
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/ComponentBlockMatcher.js +38 -2
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/ScrollAnimation.d.ts +3 -0
- package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/ScrollAnimation.js +219 -0
- package/dist/src/sub/DynamicLayout/sections/CustomSection/util/types.d.ts +0 -2
- package/package.json +1 -1
- package/release-note.md +2 -2
- package/dist/src/sub/DynamicLayout/sections/CustomSection/util/getClassName.d.ts +0 -3
- package/dist/src/sub/DynamicLayout/sections/CustomSection/util/getClassName.js +0 -26
@@ -15,6 +15,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
15
|
};
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
17
17
|
var jsx_runtime_1 = require("react/jsx-runtime");
|
18
|
+
/* eslint-disable react/destructuring-assignment */
|
18
19
|
require("react");
|
19
20
|
var newUtils_1 = require("../../newUtils");
|
20
21
|
var types_1 = require("../../types");
|
@@ -23,6 +24,7 @@ var Divider_1 = __importDefault(require("./componentBlocks/Divider/Divider"));
|
|
23
24
|
var Embed_1 = __importDefault(require("./componentBlocks/Embed/Embed"));
|
24
25
|
var Image_1 = __importDefault(require("./componentBlocks/Image/Image"));
|
25
26
|
var RichText_1 = require("./componentBlocks/RichText");
|
27
|
+
var ScrollAnimation_1 = __importDefault(require("./componentBlocks/ScrollAnimation"));
|
26
28
|
var Text_1 = __importDefault(require("./componentBlocks/Text/Text"));
|
27
29
|
var Twitter_1 = __importDefault(require("./componentBlocks/Twitter/Twitter"));
|
28
30
|
var Youtube_1 = require("./componentBlocks/Youtube");
|
@@ -33,8 +35,8 @@ function ComponentBlockMatcher(_a) {
|
|
33
35
|
switch (componentBlockCode) {
|
34
36
|
case types_1.CB_ALL_CODES.CB_BTN:
|
35
37
|
return (0, jsx_runtime_1.jsx)(Button_1.default, __assign({}, propsWithValue, { index: index }));
|
36
|
-
case
|
37
|
-
|
38
|
+
// case CB_ALL_CODES.CB_TEXT:
|
39
|
+
// return <Text {...(propsWithValue as CB_TEXT_PROPERTIES_TYPE)} index={index} />;
|
38
40
|
case types_1.CB_ALL_CODES.CB_RICHTEXT:
|
39
41
|
return (0, jsx_runtime_1.jsx)(RichText_1.RichText, __assign({}, propsWithValue, { index: index }));
|
40
42
|
case types_1.CB_ALL_CODES.CB_DIVIDER:
|
@@ -47,8 +49,42 @@ function ComponentBlockMatcher(_a) {
|
|
47
49
|
return (0, jsx_runtime_1.jsx)(Youtube_1.Youtube, __assign({}, propsWithValue, { index: index }));
|
48
50
|
case types_1.CB_ALL_CODES.CB_EMBED:
|
49
51
|
return (0, jsx_runtime_1.jsx)(Embed_1.default, __assign({}, propsWithValue, { index: index }));
|
52
|
+
case types_1.CB_ALL_CODES.CB_TEXT:
|
53
|
+
return (0, jsx_runtime_1.jsx)(TextPropToAnim, __assign({}, propsWithValue, { index: index }));
|
50
54
|
default:
|
51
55
|
return (0, jsx_runtime_1.jsx)("div", { children: "Error: not supported CB" });
|
52
56
|
}
|
53
57
|
}
|
54
58
|
exports.default = ComponentBlockMatcher;
|
59
|
+
var isValidJSON = function (str) {
|
60
|
+
try {
|
61
|
+
JSON.parse(str);
|
62
|
+
return true;
|
63
|
+
}
|
64
|
+
catch (e) {
|
65
|
+
return false;
|
66
|
+
}
|
67
|
+
};
|
68
|
+
function TextPropToAnim(props) {
|
69
|
+
var isAnim = isValidJSON(props.CB_CONTENT_PROP_TEXT.CB_CONTENT_PROP_TEXT_SPEC_TEXT);
|
70
|
+
if (!isAnim) {
|
71
|
+
return (0, jsx_runtime_1.jsx)(Text_1.default, __assign({}, props));
|
72
|
+
}
|
73
|
+
var json = JSON.parse(props.CB_CONTENT_PROP_TEXT.CB_CONTENT_PROP_TEXT_SPEC_TEXT);
|
74
|
+
var hasAllProp = validateAnimationProps(json);
|
75
|
+
if (!hasAllProp) {
|
76
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "MUST HAVE ALL PROPS: scrollId, totalImages, baseURL, type, startShowingImages, endShowingImages," }));
|
77
|
+
}
|
78
|
+
return (0, jsx_runtime_1.jsx)(ScrollAnimation_1.default, __assign({}, json));
|
79
|
+
}
|
80
|
+
var validateAnimationProps = function (json) {
|
81
|
+
var requiredProps = [
|
82
|
+
'scrollId',
|
83
|
+
'totalImages',
|
84
|
+
'baseURL',
|
85
|
+
'type',
|
86
|
+
'startShowingImages',
|
87
|
+
'endShowingImages'
|
88
|
+
];
|
89
|
+
return requiredProps.every(function (prop) { return prop in json; });
|
90
|
+
};
|
@@ -0,0 +1,219 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
20
|
+
});
|
21
|
+
};
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
24
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
26
|
+
function step(op) {
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
31
|
+
switch (op[0]) {
|
32
|
+
case 0: case 1: t = op; break;
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
36
|
+
default:
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
41
|
+
if (t[2]) _.ops.pop();
|
42
|
+
_.trys.pop(); continue;
|
43
|
+
}
|
44
|
+
op = body.call(thisArg, _);
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
47
|
+
}
|
48
|
+
};
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
50
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
51
|
+
/* eslint-disable no-await-in-loop */
|
52
|
+
/* eslint-disable no-plusplus */
|
53
|
+
var react_1 = require("react");
|
54
|
+
var AirpodsAnimation = function (_a) {
|
55
|
+
var scrollId = _a.scrollId, totalImages = _a.totalImages, baseURL = _a.baseURL, type = _a.type, startShowingImages = _a.startShowingImages, endShowingImages = _a.endShowingImages;
|
56
|
+
var canvasRef = (0, react_1.useRef)(null);
|
57
|
+
var _b = (0, react_1.useState)([]), images = _b[0], setImages = _b[1];
|
58
|
+
var _c = (0, react_1.useState)(0), loadedImages = _c[0], setLoadedImages = _c[1];
|
59
|
+
var _d = (0, react_1.useState)(0), currentFrameIndex = _d[0], setCurrentFrameIndex = _d[1];
|
60
|
+
var mainBody = (0, react_1.useState)(function () {
|
61
|
+
var box = document.querySelector('.sc-bdfBQB');
|
62
|
+
return box;
|
63
|
+
})[0];
|
64
|
+
(0, react_1.useEffect)(function () {
|
65
|
+
var loadImage = function (i) {
|
66
|
+
return new Promise(function (resolve) {
|
67
|
+
var img = new Image();
|
68
|
+
img.src = "".concat(baseURL, "/").concat(String(i).padStart(4, '0'), ".").concat(type);
|
69
|
+
img.onload = function () { return resolve(img); };
|
70
|
+
});
|
71
|
+
};
|
72
|
+
var loadImages = function () { return __awaiter(void 0, void 0, void 0, function () {
|
73
|
+
var imgs, i, img;
|
74
|
+
return __generator(this, function (_a) {
|
75
|
+
switch (_a.label) {
|
76
|
+
case 0:
|
77
|
+
imgs = [];
|
78
|
+
i = 0;
|
79
|
+
_a.label = 1;
|
80
|
+
case 1:
|
81
|
+
if (!(i < totalImages)) return [3 /*break*/, 4];
|
82
|
+
return [4 /*yield*/, loadImage(i)];
|
83
|
+
case 2:
|
84
|
+
img = _a.sent();
|
85
|
+
imgs.push(img);
|
86
|
+
_a.label = 3;
|
87
|
+
case 3:
|
88
|
+
i++;
|
89
|
+
return [3 /*break*/, 1];
|
90
|
+
case 4:
|
91
|
+
setImages(imgs);
|
92
|
+
return [2 /*return*/];
|
93
|
+
}
|
94
|
+
});
|
95
|
+
}); };
|
96
|
+
loadImages();
|
97
|
+
}, [totalImages, baseURL, type]);
|
98
|
+
(0, react_1.useEffect)(function () {
|
99
|
+
var handleScroll = function () {
|
100
|
+
var scrollTop = mainBody.scrollTop;
|
101
|
+
console.log(scrollId, scrollTop);
|
102
|
+
if (scrollTop < startShowingImages || scrollTop > endShowingImages) {
|
103
|
+
console.log(scrollId, 'frame 0');
|
104
|
+
setCurrentFrameIndex(0); // Reset or handle as needed when out of range
|
105
|
+
return;
|
106
|
+
}
|
107
|
+
var maxScrollTop = endShowingImages - startShowingImages;
|
108
|
+
var scrollFraction = (scrollTop - startShowingImages) / maxScrollTop;
|
109
|
+
console.log({ maxScrollTop: maxScrollTop, scrollTop: scrollTop, startShowingImages: startShowingImages });
|
110
|
+
var frameIndex = Math.min(totalImages - 1, Math.max(0, Math.floor(scrollFraction * totalImages)));
|
111
|
+
setCurrentFrameIndex(frameIndex);
|
112
|
+
console.log(scrollId, "frameis ".concat(frameIndex));
|
113
|
+
handleHeadingAnimationBasedOnScroll();
|
114
|
+
};
|
115
|
+
var handleHeadingAnimationBasedOnScroll = function () {
|
116
|
+
var heading = document.querySelector('h1');
|
117
|
+
var scrollTop = mainBody.scrollTop;
|
118
|
+
var viewportHeight = window.innerHeight;
|
119
|
+
// Calculate opacity based on scroll position
|
120
|
+
var opacity = Math.max(0, 1 - scrollTop / (2 * viewportHeight));
|
121
|
+
// Apply the calculated opacity
|
122
|
+
if (heading) {
|
123
|
+
heading.style.opacity = opacity.toString();
|
124
|
+
}
|
125
|
+
};
|
126
|
+
mainBody.addEventListener('scroll', handleScroll);
|
127
|
+
return function () {
|
128
|
+
mainBody.removeEventListener('scroll', handleScroll);
|
129
|
+
};
|
130
|
+
}, [totalImages, images, startShowingImages, endShowingImages]);
|
131
|
+
(0, react_1.useEffect)(function () {
|
132
|
+
if (images.length === totalImages) {
|
133
|
+
render();
|
134
|
+
}
|
135
|
+
}, [currentFrameIndex, images]);
|
136
|
+
var render = function () {
|
137
|
+
var canvas = canvasRef.current;
|
138
|
+
if (!canvas) {
|
139
|
+
return;
|
140
|
+
}
|
141
|
+
var ctx = canvas.getContext('2d');
|
142
|
+
if (!ctx) {
|
143
|
+
return;
|
144
|
+
}
|
145
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
146
|
+
var img = images[currentFrameIndex];
|
147
|
+
// const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
|
148
|
+
var scrollTop = mainBody.scrollTop;
|
149
|
+
if (!img || scrollTop < startShowingImages || scrollTop > endShowingImages) {
|
150
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas
|
151
|
+
return;
|
152
|
+
}
|
153
|
+
var canvasRatio = canvas.width / canvas.height;
|
154
|
+
var imgRatio = img.width / img.height;
|
155
|
+
var drawWidth;
|
156
|
+
var drawHeight;
|
157
|
+
var offsetX = 0;
|
158
|
+
var offsetY = 0;
|
159
|
+
if (canvasRatio > imgRatio) {
|
160
|
+
drawWidth = canvas.width;
|
161
|
+
drawHeight = drawWidth / imgRatio;
|
162
|
+
offsetY = (canvas.height - drawHeight) / 2;
|
163
|
+
}
|
164
|
+
else {
|
165
|
+
drawHeight = canvas.height;
|
166
|
+
drawWidth = drawHeight * imgRatio;
|
167
|
+
offsetX = (canvas.width - drawWidth) / 2;
|
168
|
+
}
|
169
|
+
ctx.save();
|
170
|
+
if (totalImages - currentFrameIndex < 10) {
|
171
|
+
ctx.globalAlpha = (totalImages - currentFrameIndex) / 10;
|
172
|
+
}
|
173
|
+
ctx.drawImage(img, offsetX, offsetY, drawWidth, drawHeight);
|
174
|
+
ctx.restore();
|
175
|
+
};
|
176
|
+
return ((0, jsx_runtime_1.jsxs)("div", __assign({ id: "main", style: {
|
177
|
+
width: '100vw',
|
178
|
+
position: 'fixed'
|
179
|
+
/* height: 500vh; */
|
180
|
+
} }, { children: [(0, jsx_runtime_1.jsx)("h1", __assign({ style: {
|
181
|
+
position: 'fixed',
|
182
|
+
top: '50%',
|
183
|
+
width: '100vw',
|
184
|
+
left: '50%',
|
185
|
+
textAlign: 'center',
|
186
|
+
transform: 'translate(-50%, -50%)',
|
187
|
+
fontSize: 'clamp(2rem, 10vw, 13.5rem)'
|
188
|
+
} }, { children: "Airpods Pro" })), (0, jsx_runtime_1.jsx)("canvas", { style: {
|
189
|
+
position: 'fixed',
|
190
|
+
left: '50%',
|
191
|
+
top: '50%',
|
192
|
+
maxHeight: '100vh',
|
193
|
+
maxWidth: '100vw',
|
194
|
+
transform: 'translate(-50%, -50%)'
|
195
|
+
}, ref: canvasRef, width: window.innerWidth, height: window.innerHeight })] })));
|
196
|
+
};
|
197
|
+
// #main {
|
198
|
+
// width: 100vw;
|
199
|
+
// position: fixed;
|
200
|
+
// /* height: 500vh; */
|
201
|
+
// }
|
202
|
+
// canvas {
|
203
|
+
// position: fixed;
|
204
|
+
// left: 50%;
|
205
|
+
// top: 50%;
|
206
|
+
// max-height: 100vh;
|
207
|
+
// max-width: 100vw;
|
208
|
+
// transform: translate(-50%, -50%);
|
209
|
+
// }
|
210
|
+
// h1 {
|
211
|
+
// position: fixed;
|
212
|
+
// top: 50%;
|
213
|
+
// width: 100vw;
|
214
|
+
// left: 50%;
|
215
|
+
// text-align: center;
|
216
|
+
// transform: translate(-50%, -50%);
|
217
|
+
// font-size: clamp(2rem, 10vw, 13.5rem);
|
218
|
+
// }
|
219
|
+
exports.default = AirpodsAnimation;
|
@@ -36,8 +36,6 @@ export type CB_PLACEMENT_PROP_SPECS = {
|
|
36
36
|
'CB_PLACEMENT_PROP_PLACEMENT_SPEC_STARTY:MOBILE': number;
|
37
37
|
CB_PLACEMENT_PROP_PLACEMENT_SPEC_ZINDEX: number;
|
38
38
|
'CB_PLACEMENT_PROP_PLACEMENT_SPEC_ZINDEX:MOBILE': number;
|
39
|
-
'CB_PLACEMENT_PROP_PLACEMENT_SPEC_LATEST_LOCKED_STARTY:MOBILE': number;
|
40
|
-
'CB_PLACEMENT_PROP_PLACEMENT_SPEC_LOCKSTATUS:MOBILE': 'LOCKED' | 'FALLBACK_TO_SYNC' | undefined;
|
41
39
|
};
|
42
40
|
export type CB_TEXT_PROPERTIES_TYPE = CB_GENERAL_PROPERTIES_TYPE & {
|
43
41
|
CB_CONTENT_PROP_TEXT: CB_CONTENT_PROP_TEXT;
|
package/package.json
CHANGED
package/release-note.md
CHANGED
@@ -1,3 +0,0 @@
|
|
1
|
-
import type { ComponentBlock } from '../types';
|
2
|
-
import type { Device } from './types';
|
3
|
-
export declare function getSelectedCBClassname(cb: ComponentBlock, device: Device, isSelected: boolean): "" | "react-grid-item-selected" | "react-grid-item-selected locked" | "locked" | "react-grid-item-selected unlocked" | "unlocked";
|
@@ -1,26 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.getSelectedCBClassname = void 0;
|
4
|
-
function getSelectedCBClassname(cb, device, isSelected) {
|
5
|
-
if (device === 'DESKTOP') {
|
6
|
-
if (isSelected) {
|
7
|
-
return 'react-grid-item-selected';
|
8
|
-
}
|
9
|
-
return '';
|
10
|
-
}
|
11
|
-
var lockedStatus = cb.jsonProperties.data.CB_PLACEMENT_PROP_PLACEMENT['CB_PLACEMENT_PROP_PLACEMENT_SPEC_LOCKSTATUS:MOBILE'];
|
12
|
-
if (!lockedStatus || lockedStatus === 'LOCKED') {
|
13
|
-
if (isSelected) {
|
14
|
-
return 'react-grid-item-selected locked';
|
15
|
-
}
|
16
|
-
return 'locked';
|
17
|
-
}
|
18
|
-
if (lockedStatus === 'FALLBACK_TO_SYNC') {
|
19
|
-
if (isSelected) {
|
20
|
-
return 'react-grid-item-selected unlocked';
|
21
|
-
}
|
22
|
-
return 'unlocked';
|
23
|
-
}
|
24
|
-
return '';
|
25
|
-
}
|
26
|
-
exports.getSelectedCBClassname = getSelectedCBClassname;
|