pds-dev-kit-web-test 2.4.18 → 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.
@@ -6,7 +6,7 @@ type TextObj = {
6
6
  };
7
7
  type UserDesktopTabBarProps = {
8
8
  itemArray?: PDSTabItemOption[];
9
- styleTheme?: 'main';
9
+ styleTheme?: 'main' | 'content';
10
10
  /** @deprecated v1.5 해당 필드 대신 itemArray를 사용하세요. */
11
11
  textArray?: TextObj[];
12
12
  };
@@ -52,7 +52,12 @@ function UserDesktopTabBar(_a) {
52
52
  item.onClick(e);
53
53
  }
54
54
  };
55
- return ((0, jsx_runtime_1.jsx)(S_TabBar, __assign({ "x-pds-name": "UserDesktopTabBar", "x-pds-element-type": "component", "x-pds-device-type": "desktop" }, { children: itemArray.map(function (item, index) { return ((0, jsx_runtime_1.jsx)(S_TabWrapper, __assign({ isActive: item.isActive, styleTheme: styleTheme, text: item.title, onClick: function (e) { return handleClickTabItem_1(item, e); } }, { children: (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { text: item.title, textAlign: "center", styleTheme: item.isActive ? 'body2Bold' : 'body2Regular', colorTheme: item.isActive ? 'usrTextBrandPrimary' : 'sysTextSecondary', singleLineMode: "use" }) }), index)); }) })));
55
+ return ((0, jsx_runtime_1.jsx)(S_TabBar, __assign({ "x-pds-name": "UserDesktopTabBar", "x-pds-element-type": "component", "x-pds-device-type": "desktop" }, { children: itemArray.map(function (item, index) {
56
+ if (styleTheme === 'content') {
57
+ return ((0, jsx_runtime_1.jsx)(S_TabWrapper, __assign({ isActive: item.isActive, styleTheme: "content", text: item.title, onClick: function (e) { return handleClickTabItem_1(item, e); } }, { children: (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { text: item.title, textAlign: "center", styleTheme: "headingBold", colorTheme: item.isActive ? 'sysTextPrimary' : 'sysTextSecondary', singleLineMode: "use" }) }), index));
58
+ }
59
+ return ((0, jsx_runtime_1.jsx)(S_TabWrapper, __assign({ isActive: item.isActive, styleTheme: styleTheme, text: item.title, onClick: function (e) { return handleClickTabItem_1(item, e); } }, { children: (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { text: item.title, textAlign: "center", styleTheme: item.isActive ? 'body2Bold' : 'body2Regular', colorTheme: item.isActive ? 'usrTextBrandPrimary' : 'sysTextSecondary', singleLineMode: "use" }) }), index));
60
+ }) })));
56
61
  }
57
62
  if (textArray) {
58
63
  var handleClick_1 = function (value) {
@@ -75,7 +80,9 @@ var S_TabWrapper = styled_components_1.default.div(templateObject_2 || (template
75
80
  var styleTheme = _a.styleTheme;
76
81
  switch (styleTheme) {
77
82
  case 'main':
78
- return mainStyle; // TODO : 추후 styleTheme 의 enum 값이 추가되면 수정
83
+ return mainStyle;
84
+ case 'content':
85
+ return contentStyle;
79
86
  default:
80
87
  return mainStyle;
81
88
  }
@@ -99,7 +106,20 @@ var mainStyle = (0, styled_components_1.css)(templateObject_3 || (templateObject
99
106
  var isActive = _a.isActive;
100
107
  return !isActive && "display: none;";
101
108
  });
102
- var S_TabBar = styled_components_1.default.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n background-color: ", ";\n border-bottom: 1px solid ", ";\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n height: 48px;\n justify-content: center;\n"], ["\n background-color: ", ";\n border-bottom: 1px solid ", ";\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n height: 48px;\n justify-content: center;\n"])), function (_a) {
109
+ var contentStyle = (0, styled_components_1.css)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n cursor: pointer;\n display: flex;\n margin-right: ", ";\n position: relative;\n\n &:last-child {\n margin-right: 0;\n }\n\n &::after {\n background-color: ", ";\n bottom: -1px;\n content: '';\n height: 2px;\n position: absolute;\n width: 100%;\n ", ";\n }\n"], ["\n align-items: center;\n background-color: ", ";\n cursor: pointer;\n display: flex;\n margin-right: ", ";\n position: relative;\n\n &:last-child {\n margin-right: 0;\n }\n\n &::after {\n background-color: ", ";\n bottom: -1px;\n content: '';\n height: 2px;\n position: absolute;\n width: 100%;\n ", ";\n }\n"])), function (_a) {
110
+ var isActive = _a.isActive, theme = _a.theme;
111
+ return isActive && theme.ui_cpnt_tabbar_base_area;
112
+ }, function (_a) {
113
+ var theme = _a.theme;
114
+ return theme.spacing.spacingF;
115
+ }, function (_a) {
116
+ var theme = _a.theme;
117
+ return theme.ui_19;
118
+ }, function (_a) {
119
+ var isActive = _a.isActive;
120
+ return !isActive && "display: none;";
121
+ });
122
+ var S_TabBar = styled_components_1.default.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n background-color: ", ";\n border-bottom: 1px solid ", ";\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n height: 48px;\n justify-content: center;\n"], ["\n background-color: ", ";\n border-bottom: 1px solid ", ";\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n height: 48px;\n justify-content: center;\n"])), function (_a) {
103
123
  var theme = _a.theme;
104
124
  return theme.ui_cpnt_tabbar_base_area;
105
125
  }, function (_a) {
@@ -107,4 +127,4 @@ var S_TabBar = styled_components_1.default.div(templateObject_4 || (templateObje
107
127
  return theme.ui_cpnt_divider;
108
128
  });
109
129
  exports.default = UserDesktopTabBar;
110
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
130
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
@@ -137,6 +137,123 @@ exports.sampleCustomsection1 = {
137
137
  queryableTapSrc: 'N/A',
138
138
  updatedAt: '2023-08-06T13:30:49'
139
139
  },
140
+ {
141
+ availablePlugins: [],
142
+ componentBlockCode: 'CB_TEXT',
143
+ componentBlockType: 'GENERAL',
144
+ dynamicLayoutSectionId: 18661,
145
+ id: 3599,
146
+ insertedAt: '2023-08-06T13:30:47',
147
+ jsonProperties: {
148
+ currentVersion: '2023-08-03',
149
+ data: {
150
+ CB_CONTENT_PROP_CLINK: {
151
+ CB_CONTENT_PROP_CLINK_SPEC_INTERNALSRC: 'https://publ.co',
152
+ CB_CONTENT_PROP_CLINK_SPEC_NEWTAB: true,
153
+ CB_CONTENT_PROP_CLINK_SPEC_SRC: 'https://publ.co',
154
+ CB_CONTENT_PROP_CLINK_SPEC_TYPE: 'DISABLED'
155
+ },
156
+ CB_CONTENT_PROP_HOVER: {
157
+ CB_CONTENT_PROP_HOVER_SPEC_MUSE: true
158
+ },
159
+ CB_CONTENT_PROP_TEXT: {
160
+ CB_CONTENT_PROP_TEXT_SPEC_TEXT: '{"scrollId": "airpods", "totalImages": 64, "baseURL": "https://www.apple.com/105/media/us/airpods-pro/2022/d2deeb8e-83eb-48ea-9721-f567cf0fffa8/anim/hero/medium", "type": "png", "startShowingImages": 0,"endShowingImages": 1000}'
161
+ },
162
+ CB_CONTENT_PROP_VISIBILITY: {
163
+ CB_CONTENT_PROP_VISIBILITY_SPEC_DESKTOP: true,
164
+ CB_CONTENT_PROP_VISIBILITY_SPEC_MOBILEWEB: true
165
+ },
166
+ CB_EFFECT_PROP_ENTANIM: {
167
+ CB_EFFECT_PROP_ENTANIM_SPEC_TYPE: 'SLIDEINLEFT',
168
+ 'CB_EFFECT_PROP_ENTANIM_SPEC_TYPE:MOBILE': 'HEARTBEAT',
169
+ CB_EFFECT_PROP_ENTANIM_SPEC_DURATION: 1,
170
+ 'CB_EFFECT_PROP_ENTANIM_SPEC_DURATION:MOBILE': null,
171
+ CB_EFFECT_PROP_ENTANIM_SPEC_REPEAT: 1,
172
+ 'CB_EFFECT_PROP_ENTANIM_SPEC_REPEAT:MOBILE': null,
173
+ CB_EFFECT_PROP_ENTANIM_SPEC_TFUNC: 'EASEINOUT',
174
+ 'CB_EFFECT_PROP_ENTANIM_SPEC_TFUNC:MOBILE': null
175
+ },
176
+ CB_EFFECT_PROP_HOVERANIM: {
177
+ CB_EFFECT_PROP_HOVERANIM_SPEC_DURATION: 0.7,
178
+ 'CB_EFFECT_PROP_HOVERANIM_SPEC_DURATION:MOBILE': null,
179
+ CB_EFFECT_PROP_HOVERANIM_SPEC_REPEAT: 1,
180
+ 'CB_EFFECT_PROP_HOVERANIM_SPEC_REPEAT:MOBILE': null,
181
+ CB_EFFECT_PROP_HOVERANIM_SPEC_TFUNC: 'EASEINOUT',
182
+ 'CB_EFFECT_PROP_HOVERANIM_SPEC_TFUNC:MOBILE': null,
183
+ CB_EFFECT_PROP_HOVERANIM_SPEC_TYPE: 'NONE',
184
+ 'CB_EFFECT_PROP_HOVERANIM_SPEC_TYPE:MOBILE': null
185
+ },
186
+ CB_LAYOUT_PROP_PADDING: {
187
+ CB_LAYOUT_PROP_PADDING_SPEC_FIX: true,
188
+ 'CB_LAYOUT_PROP_PADDING_SPEC_FIX:MOBILE': null,
189
+ CB_LAYOUT_PROP_PADDING_SPEC_PADDING: {
190
+ bottom: 0,
191
+ left: 0,
192
+ right: 0,
193
+ top: 0
194
+ },
195
+ 'CB_LAYOUT_PROP_PADDING_SPEC_PADDING:MOBILE': null
196
+ },
197
+ CB_PLACEMENT_PROP_PLACEMENT: {
198
+ CB_PLACEMENT_PROP_PLACEMENT_SPEC_COLS: 5,
199
+ 'CB_PLACEMENT_PROP_PLACEMENT_SPEC_COLS:MOBILE': 8,
200
+ CB_PLACEMENT_PROP_PLACEMENT_SPEC_ROWS: 3,
201
+ 'CB_PLACEMENT_PROP_PLACEMENT_SPEC_ROWS:MOBILE': 4,
202
+ CB_PLACEMENT_PROP_PLACEMENT_SPEC_STARTX: 1,
203
+ 'CB_PLACEMENT_PROP_PLACEMENT_SPEC_STARTX:MOBILE': 1,
204
+ CB_PLACEMENT_PROP_PLACEMENT_SPEC_STARTY: 0,
205
+ 'CB_PLACEMENT_PROP_PLACEMENT_SPEC_STARTY:MOBILE': 1,
206
+ CB_PLACEMENT_PROP_PLACEMENT_SPEC_ZINDEX: 9999,
207
+ 'CB_PLACEMENT_PROP_PLACEMENT_SPEC_ZINDEX:MOBILE': 9999
208
+ },
209
+ CB_STYLE_PROP_OPACITY: {
210
+ CB_STYLE_PROP_OPACITY_SPEC_OPACITY: 100,
211
+ 'CB_STYLE_PROP_OPACITY_SPEC_OPACITY:HOVER': null,
212
+ 'CB_STYLE_PROP_OPACITY_SPEC_OPACITY:MOBILE': null,
213
+ 'CB_STYLE_PROP_OPACITY_SPEC_OPACITY:MOBILE:HOVER': null
214
+ },
215
+ CB_STYLE_PROP_TEXT: {
216
+ CB_STYLE_PROP_TEXT_SPEC_COLOR: '#333333FF',
217
+ 'CB_STYLE_PROP_TEXT_SPEC_COLOR:HOVER': null,
218
+ 'CB_STYLE_PROP_TEXT_SPEC_COLOR:MOBILE': null,
219
+ 'CB_STYLE_PROP_TEXT_SPEC_COLOR:MOBILE:HOVER': null,
220
+ CB_STYLE_PROP_TEXT_SPEC_HORIZONTAL: 'CENTER',
221
+ 'CB_STYLE_PROP_TEXT_SPEC_HORIZONTAL:HOVER': null,
222
+ 'CB_STYLE_PROP_TEXT_SPEC_HORIZONTAL:MOBILE': null,
223
+ 'CB_STYLE_PROP_TEXT_SPEC_HORIZONTAL:MOBILE:HOVER': null,
224
+ CB_STYLE_PROP_TEXT_SPEC_LETTERSPACING: 0,
225
+ 'CB_STYLE_PROP_TEXT_SPEC_LETTERSPACING:HOVER': null,
226
+ 'CB_STYLE_PROP_TEXT_SPEC_LETTERSPACING:MOBILE': null,
227
+ 'CB_STYLE_PROP_TEXT_SPEC_LETTERSPACING:MOBILE:HOVER': null,
228
+ CB_STYLE_PROP_TEXT_SPEC_LINEHEIGHT: 130,
229
+ 'CB_STYLE_PROP_TEXT_SPEC_LINEHEIGHT:HOVER': null,
230
+ 'CB_STYLE_PROP_TEXT_SPEC_LINEHEIGHT:MOBILE': null,
231
+ 'CB_STYLE_PROP_TEXT_SPEC_LINEHEIGHT:MOBILE:HOVER': null,
232
+ CB_STYLE_PROP_TEXT_SPEC_SIZE: 36,
233
+ 'CB_STYLE_PROP_TEXT_SPEC_SIZE:HOVER': null,
234
+ 'CB_STYLE_PROP_TEXT_SPEC_SIZE:MOBILE': null,
235
+ 'CB_STYLE_PROP_TEXT_SPEC_SIZE:MOBILE:HOVER': null,
236
+ CB_STYLE_PROP_TEXT_SPEC_TYPEFACE: 'GOOGLE:Source Serif 4',
237
+ 'CB_STYLE_PROP_TEXT_SPEC_TYPEFACE:HOVER': 'GOOGLE:Lobster',
238
+ 'CB_STYLE_PROP_TEXT_SPEC_TYPEFACE:MOBILE': null,
239
+ 'CB_STYLE_PROP_TEXT_SPEC_TYPEFACE:MOBILE:HOVER': null,
240
+ CB_STYLE_PROP_TEXT_SPEC_VERTICAL: 'MIDDLE',
241
+ 'CB_STYLE_PROP_TEXT_SPEC_VERTICAL:HOVER': null,
242
+ 'CB_STYLE_PROP_TEXT_SPEC_VERTICAL:MOBILE': null,
243
+ 'CB_STYLE_PROP_TEXT_SPEC_VERTICAL:MOBILE:HOVER': null,
244
+ CB_STYLE_PROP_TEXT_SPEC_WEIGHT: 700,
245
+ 'CB_STYLE_PROP_TEXT_SPEC_WEIGHT:HOVER': null,
246
+ 'CB_STYLE_PROP_TEXT_SPEC_WEIGHT:MOBILE': null,
247
+ 'CB_STYLE_PROP_TEXT_SPEC_WEIGHT:MOBILE:HOVER': null
248
+ }
249
+ },
250
+ minVersion: '2023-08-03',
251
+ version: '2023-08-03'
252
+ },
253
+ queryableDefinitionPreset: 'N/A',
254
+ queryableTapSrc: 'N/A',
255
+ updatedAt: '2023-08-06T13:30:49'
256
+ },
140
257
  {
141
258
  availablePlugins: [],
142
259
  componentBlockCode: 'CB_BTN',
@@ -404,17 +404,19 @@ var CustomSection = (0, react_1.forwardRef)(function CustomSection(props, ref) {
404
404
  }
405
405
  makeCollisionOfBulk();
406
406
  };
407
- var isHiddenOnCurrentDevice = (function () {
407
+ var showSectionHiddenCover = (function () {
408
408
  if (mode === 'EDIT') {
409
- var deviceKey = device === 'DESKTOP'
409
+ var visibilityKey = device === 'DESKTOP'
410
410
  ? 'CB_CONTENT_PROP_VISIBILITY_SPEC_DESKTOP'
411
411
  : 'CB_CONTENT_PROP_VISIBILITY_SPEC_MOBILEWEB';
412
- var isVisible = jsonProperties === null || jsonProperties === void 0 ? void 0 : jsonProperties.data.CB_CONTENT_PROP_VISIBILITY[deviceKey];
413
- return !isVisible;
412
+ var isSectionVisible = jsonProperties === null || jsonProperties === void 0 ? void 0 : jsonProperties.data.CB_CONTENT_PROP_VISIBILITY[visibilityKey];
413
+ // 가시성 상태를 반전하여 숨겨진 커버를 표시할지 결정
414
+ var shouldShowHiddenCover = !isSectionVisible;
415
+ return shouldShowHiddenCover;
414
416
  }
415
417
  return false;
416
418
  })();
417
- return ((0, jsx_runtime_1.jsx)(ErrorBoundary_1.ErrorBoundary, { children: (0, jsx_runtime_1.jsxs)(S_gleStyles, { children: [isHiddenOnCurrentDevice && (0, jsx_runtime_1.jsx)(S_HiddenCover_1.S_HiddenCover, {}), (0, jsx_runtime_1.jsx)(S_SectionWrapper, __assign({ ref: gleRef, "x-dlayout-section-type": "NO_NAME", onClick: onClickSection }, { children: (0, jsx_runtime_1.jsx)(components_1.CustomSection, __assign({}, props, { isMobile: isMobile, overrideStyles: {
419
+ return ((0, jsx_runtime_1.jsx)(ErrorBoundary_1.ErrorBoundary, { children: (0, jsx_runtime_1.jsxs)(S_gleStyles, { children: [showSectionHiddenCover && (0, jsx_runtime_1.jsx)(S_HiddenCover_1.S_HiddenCover, {}), (0, jsx_runtime_1.jsx)(S_SectionWrapper, __assign({ ref: gleRef, "x-dlayout-section-type": "NO_NAME", onClick: onClickSection }, { children: (0, jsx_runtime_1.jsx)(components_1.CustomSection, __assign({}, props, { isMobile: isMobile, overrideStyles: {
418
420
  minHeight: customSectionStyles.minHeight,
419
421
  paddingTop: padding.top,
420
422
  paddingBottom: padding.bottom,
@@ -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 types_1.CB_ALL_CODES.CB_TEXT:
37
- return (0, jsx_runtime_1.jsx)(Text_1.default, __assign({}, propsWithValue, { index: index }));
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,3 @@
1
+ /// <reference types="react" />
2
+ declare const AirpodsAnimation: ({ scrollId, totalImages, baseURL, type, startShowingImages, endShowingImages }: any) => JSX.Element;
3
+ export default AirpodsAnimation;
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pds-dev-kit-web-test",
3
- "version": "2.4.18",
3
+ "version": "2.4.20",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "main": "dist/index.js",
package/release-note.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # PDS-DEV-KIT-WEB Release Notes
2
- ## [v2.2.77]
2
+ ## [v2.2.79]
3
3
  ## daily|https://design.storybook.publ.biz/
4
4
 
5
5
  ### 업데이트 사항
6
- * 컬러 싱크
6
+ * [PDS-1232] 섹션 단위로 디바이스별 노출 설정 제공 건