pds-dev-kit-web-test 2.4.22 → 2.4.23

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' | 'content';
9
+ styleTheme?: 'main';
10
10
  /** @deprecated v1.5 해당 필드 대신 itemArray를 사용하세요. */
11
11
  textArray?: TextObj[];
12
12
  };
@@ -52,12 +52,7 @@ 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) {
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
- }) })));
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)); }) })));
61
56
  }
62
57
  if (textArray) {
63
58
  var handleClick_1 = function (value) {
@@ -80,9 +75,7 @@ var S_TabWrapper = styled_components_1.default.div(templateObject_2 || (template
80
75
  var styleTheme = _a.styleTheme;
81
76
  switch (styleTheme) {
82
77
  case 'main':
83
- return mainStyle;
84
- case 'content':
85
- return contentStyle;
78
+ return mainStyle; // TODO : 추후 styleTheme 의 enum 값이 추가되면 수정
86
79
  default:
87
80
  return mainStyle;
88
81
  }
@@ -106,20 +99,7 @@ var mainStyle = (0, styled_components_1.css)(templateObject_3 || (templateObject
106
99
  var isActive = _a.isActive;
107
100
  return !isActive && "display: none;";
108
101
  });
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) {
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) {
123
103
  var theme = _a.theme;
124
104
  return theme.ui_cpnt_tabbar_base_area;
125
105
  }, function (_a) {
@@ -127,4 +107,4 @@ var S_TabBar = styled_components_1.default.div(templateObject_5 || (templateObje
127
107
  return theme.ui_cpnt_divider;
128
108
  });
129
109
  exports.default = UserDesktopTabBar;
130
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
110
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
@@ -26,20 +26,7 @@ var SectionMatcher_1 = require("./components/SectionMatcher");
26
26
  var dynamicLayoutContext_1 = require("./dynamicLayoutContext");
27
27
  function DynamicLayout(_a) {
28
28
  var device = _a.device, _b = _a.mode, mode = _b === void 0 ? 'NORMAL' : _b, isPreview = _a.isPreview, sections = _a.sections, scrollDownTargetSectionId = _a.scrollDownTargetSectionId, editingSectionId = _a.editingSectionId, navigationHandler = _a.navigationHandler, sectionActionHandler = _a.sectionActionHandler, onClickEditSection = _a.onClickEditSection, programmedSectionComponents = _a.programmedSectionComponents, shortcutKeyMode = _a.shortcutKeyMode, dynamicLayoutRef = _a.dynamicLayoutRef;
29
- var filteredSortedSection = __spreadArray([], sections, true).filter(function (section) {
30
- var _a;
31
- if (!section.display) {
32
- return false;
33
- }
34
- if (section.type === 'CUSTOM' && mode !== 'EDIT') {
35
- var deviceKey = device === 'DESKTOP'
36
- ? 'CB_CONTENT_PROP_VISIBILITY_SPEC_DESKTOP'
37
- : 'CB_CONTENT_PROP_VISIBILITY_SPEC_MOBILEWEB';
38
- var isVisible = (_a = section.jsonProperties) === null || _a === void 0 ? void 0 : _a.data.CB_CONTENT_PROP_VISIBILITY[deviceKey];
39
- return isVisible;
40
- }
41
- return true;
42
- })
29
+ var filteredSortedSection = __spreadArray([], sections, true).filter(function (section) { return section.display; })
43
30
  .sort(function (a, b) { return a.order - b.order; });
44
31
  var iframeSection = filteredSortedSection.find(function (section) { return section.manifest.schema === 'EXP_IFRAME' && section.display; });
45
32
  return ((0, jsx_runtime_1.jsxs)(dynamicLayoutContext_1.dynamicLayoutContext.Provider, __assign({ value: {
@@ -137,123 +137,6 @@ 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, "bodySelector": ".sc-bdfBQB"}'
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
- },
257
140
  {
258
141
  availablePlugins: [],
259
142
  componentBlockCode: 'CB_BTN',
@@ -8,6 +8,14 @@ type ActionHandlerPayload = {
8
8
  event: React.SyntheticEvent<HTMLIFrameElement, Event>;
9
9
  multiPurposeUrl: string;
10
10
  };
11
+ '@CUSTOMSECTION/CB_DRAG_START': {
12
+ layout: Layout;
13
+ prev?: LayoutItem;
14
+ item?: LayoutItem;
15
+ placeholder?: LayoutItem;
16
+ e?: ResizeEventType;
17
+ node?: HTMLElement;
18
+ };
11
19
  '@CUSTOMSECTION/CB_DRAG_STOP': {
12
20
  layout: Layout;
13
21
  prev?: LayoutItem;
@@ -60,7 +60,6 @@ var deepCopy_1 = __importDefault(require("../../../DynamicLayout/utils/deepCopy"
60
60
  var styled_components_1 = __importDefault(require("styled-components"));
61
61
  var components_1 = require("../../components");
62
62
  var ComponentBlockMatcher_1 = __importDefault(require("./components/ComponentBlock/ComponentBlockMatcher"));
63
- var S_HiddenCover_1 = require("./components/ComponentBlock/componentBlocks/components/S_HiddenCover");
64
63
  var useGroupDrag_1 = require("./hooks/useGroupDrag");
65
64
  var useGroupDrag_2 = require("./hooks/useGroupDrag/useGroupDrag");
66
65
  var utils_1 = require("./hooks/useGroupDrag/utils");
@@ -267,6 +266,14 @@ var CustomSection = (0, react_1.forwardRef)(function CustomSection(props, ref) {
267
266
  }
268
267
  setLayouts(props.layouts);
269
268
  };
269
+ var onDragStart = function (props) {
270
+ console.log(props);
271
+ sectionActionHandler &&
272
+ sectionActionHandler({
273
+ type: '@CUSTOMSECTION/CB_DRAG_START',
274
+ payload: __assign({}, props)
275
+ });
276
+ };
270
277
  var onDragStop = function (props) {
271
278
  var _a;
272
279
  if (!isEditMode || !props.item) {
@@ -404,75 +411,63 @@ var CustomSection = (0, react_1.forwardRef)(function CustomSection(props, ref) {
404
411
  }
405
412
  makeCollisionOfBulk();
406
413
  };
407
- var showSectionHiddenCover = (function () {
408
- if (mode === 'EDIT') {
409
- var visibilityKey = device === 'DESKTOP'
410
- ? 'CB_CONTENT_PROP_VISIBILITY_SPEC_DESKTOP'
411
- : 'CB_CONTENT_PROP_VISIBILITY_SPEC_MOBILEWEB';
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;
416
- }
417
- return false;
418
- })();
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: {
420
- minHeight: customSectionStyles.minHeight,
421
- paddingTop: padding.top,
422
- paddingBottom: padding.bottom,
423
- paddingRight: padding.right,
424
- paddingLeft: padding.left
425
- } }, { children: (0, jsx_runtime_1.jsx)(Responsive, __assign({ innerRef: innerRef, allowOverlap: true, layouts: layouts, resizeHandles: ['nw', 'e', 'n', 'ne', 's', 'se', 'sw', 'w'], breakpoints: breakpoints, breakpoint: breakpoint, cols: { lg: 24, sm: 8 }, rowHeight: rowHeight, margin: [10, 10], style: {
426
- width: customSectionStyles.width,
427
- maxWidth: customSectionStyles.maxWidth,
428
- minWidth: isMobile ? GLE_MIN_WIDTH_MOBILE_PX : GLE_MIN_WIDTH_DESKTOP_PX,
429
- fontSize: "".concat(baseFontSize, "px")
430
- }, onLayoutChange: onLayoutChange, onDragStop: onDragStop, onResizeStop: onResizeStop, onWidthChange: onWidthChange, minNbRow: rows, isDraggable: isEditMode, isResizable: isEditMode, useCSSTransforms: mode === 'EDIT' ? true : false }, { children: keepSimilarOrderToPreventRerender(layouts[layoutByDevice]).map(function (each, index) {
431
- var _a;
432
- if (each === null) {
433
- return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
434
- }
435
- var matchedCB = componentBlocks === null || componentBlocks === void 0 ? void 0 : componentBlocks.find(function (cb) { return cb.id.toString() === each.i; });
436
- if (each.i === 'group' && each.groupLayouts) {
437
- return ((0, jsx_runtime_1.jsx)("div", __assign({ className: "iamgroup", onClick: function (e) {
438
- e.stopPropagation();
439
- onClickBulk();
440
- }, onContextMenu: function (e) {
441
- e.stopPropagation();
442
- e.preventDefault();
443
- onContextMenuCB('group', e);
444
- } }, { children: (0, jsx_runtime_1.jsx)(WidthProvidedRGL, __assign({ cols: each.w, allowOverlap: true, layout: each.groupLayouts, rowHeight: rowHeight, containerPadding: [0, 0], margin: [10, 10], isDraggable: false, isResizable: false, style: {
445
- width: '100%'
446
- } }, { children: (_a = each.groupLayouts) === null || _a === void 0 ? void 0 : _a.map(function (layoutItem, index, array) {
447
- var matchedCB = componentBlocks === null || componentBlocks === void 0 ? void 0 : componentBlocks.find(function (cb) { return cb.id.toString() === layoutItem.i; });
448
- if (!matchedCB) {
449
- return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
450
- }
451
- var cbCopy = (0, deepCopy_1.default)(matchedCB);
452
- cbCopy.jsonProperties.data.CB_EFFECT_PROP_ENTANIM.CB_EFFECT_PROP_ENTANIM_SPEC_TYPE =
453
- 'NONE';
454
- cbCopy.jsonProperties.data.CB_EFFECT_PROP_ENTANIM['CB_EFFECT_PROP_ENTANIM_SPEC_TYPE:MOBILE'] = 'NONE';
455
- return ((0, jsx_runtime_1.jsx)("div", __assign({ className: "cb-box-in-group", onClick: function (e) {
456
- e.stopPropagation();
457
- clickOneCBInBulk(matchedCB.id, array);
458
- } }, { children: (0, jsx_runtime_1.jsx)(ErrorBoundary_1.ErrorBoundary, { children: (0, jsx_runtime_1.jsx)(ComponentBlockMatcher_1.default, { cbProps: cbCopy, device: device, index: index }) }) }), matchedCB.id));
459
- }) })) }), each.i));
460
- }
461
- if (!matchedCB) {
462
- return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
463
- }
464
- return ((0, jsx_runtime_1.jsx)("div", __assign({ className: selectedCB === matchedCB.id ? 'react-grid-item-selected' : '' }, { children: (0, jsx_runtime_1.jsx)("div", __assign({ style: {
465
- width: '100%',
466
- height: '100%'
467
- }, onClick: function (e) {
468
- e.stopPropagation();
469
- onClickCB(matchedCB.id);
470
- }, onContextMenu: function (e) {
471
- e.stopPropagation();
472
- e.preventDefault();
473
- onContextMenuCB(matchedCB.id, e);
474
- } }, { children: (0, jsx_runtime_1.jsx)(ErrorBoundary_1.ErrorBoundary, { children: (0, jsx_runtime_1.jsx)(ComponentBlockMatcher_1.default, { cbProps: matchedCB, device: device, index: index }) }) })) }), each.i));
475
- }) })) })) }))] }) }));
414
+ return ((0, jsx_runtime_1.jsx)(ErrorBoundary_1.ErrorBoundary, { children: (0, jsx_runtime_1.jsx)(S_gleStyles, { children: (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: {
415
+ minHeight: customSectionStyles.minHeight,
416
+ paddingTop: padding.top,
417
+ paddingBottom: padding.bottom,
418
+ paddingRight: padding.right,
419
+ paddingLeft: padding.left
420
+ } }, { children: (0, jsx_runtime_1.jsx)(Responsive, __assign({ innerRef: innerRef, allowOverlap: true, layouts: layouts, resizeHandles: ['nw', 'e', 'n', 'ne', 's', 'se', 'sw', 'w'], breakpoints: breakpoints, breakpoint: breakpoint, cols: { lg: 24, sm: 8 }, rowHeight: rowHeight, margin: [10, 10], style: {
421
+ width: customSectionStyles.width,
422
+ maxWidth: customSectionStyles.maxWidth,
423
+ minWidth: isMobile ? GLE_MIN_WIDTH_MOBILE_PX : GLE_MIN_WIDTH_DESKTOP_PX,
424
+ fontSize: "".concat(baseFontSize, "px")
425
+ }, onLayoutChange: onLayoutChange, onDragStart: onDragStart, onDragStop: onDragStop, onResizeStop: onResizeStop, onWidthChange: onWidthChange, minNbRow: rows, isDraggable: isEditMode, isResizable: isEditMode }, { children: keepSimilarOrderToPreventRerender(layouts[layoutByDevice]).map(function (each, index) {
426
+ var _a;
427
+ if (each === null) {
428
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
429
+ }
430
+ var matchedCB = componentBlocks === null || componentBlocks === void 0 ? void 0 : componentBlocks.find(function (cb) { return cb.id.toString() === each.i; });
431
+ if (each.i === 'group' && each.groupLayouts) {
432
+ return ((0, jsx_runtime_1.jsx)("div", __assign({ className: "iamgroup", onClick: function (e) {
433
+ e.stopPropagation();
434
+ onClickBulk();
435
+ }, onContextMenu: function (e) {
436
+ e.stopPropagation();
437
+ e.preventDefault();
438
+ onContextMenuCB('group', e);
439
+ } }, { children: (0, jsx_runtime_1.jsx)(WidthProvidedRGL, __assign({ cols: each.w, allowOverlap: true, layout: each.groupLayouts, rowHeight: rowHeight, containerPadding: [0, 0], margin: [10, 10], isDraggable: false, isResizable: false, style: {
440
+ width: '100%'
441
+ } }, { children: (_a = each.groupLayouts) === null || _a === void 0 ? void 0 : _a.map(function (layoutItem, index, array) {
442
+ var matchedCB = componentBlocks === null || componentBlocks === void 0 ? void 0 : componentBlocks.find(function (cb) { return cb.id.toString() === layoutItem.i; });
443
+ if (!matchedCB) {
444
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
445
+ }
446
+ var cbCopy = (0, deepCopy_1.default)(matchedCB);
447
+ cbCopy.jsonProperties.data.CB_EFFECT_PROP_ENTANIM.CB_EFFECT_PROP_ENTANIM_SPEC_TYPE =
448
+ 'NONE';
449
+ cbCopy.jsonProperties.data.CB_EFFECT_PROP_ENTANIM['CB_EFFECT_PROP_ENTANIM_SPEC_TYPE:MOBILE'] = 'NONE';
450
+ return ((0, jsx_runtime_1.jsx)("div", __assign({ className: "cb-box-in-group", onClick: function (e) {
451
+ e.stopPropagation();
452
+ clickOneCBInBulk(matchedCB.id, array);
453
+ } }, { children: (0, jsx_runtime_1.jsx)(ErrorBoundary_1.ErrorBoundary, { children: (0, jsx_runtime_1.jsx)(ComponentBlockMatcher_1.default, { cbProps: cbCopy, device: device, index: index }) }) }), matchedCB.id));
454
+ }) })) }), each.i));
455
+ }
456
+ if (!matchedCB) {
457
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
458
+ }
459
+ return ((0, jsx_runtime_1.jsx)("div", __assign({ className: selectedCB === matchedCB.id ? 'react-grid-item-selected' : '' }, { children: (0, jsx_runtime_1.jsx)("div", __assign({ style: {
460
+ width: '100%',
461
+ height: '100%'
462
+ }, onClick: function (e) {
463
+ e.stopPropagation();
464
+ onClickCB(matchedCB.id);
465
+ }, onContextMenu: function (e) {
466
+ e.stopPropagation();
467
+ e.preventDefault();
468
+ onContextMenuCB(matchedCB.id, e);
469
+ } }, { children: (0, jsx_runtime_1.jsx)(ErrorBoundary_1.ErrorBoundary, { children: (0, jsx_runtime_1.jsx)(ComponentBlockMatcher_1.default, { cbProps: matchedCB, device: device, index: index }) }) })) }), each.i));
470
+ }) })) })) })) }) }));
476
471
  });
477
472
  function keepSimilarOrderToPreventRerender(arr) {
478
473
  var _a;
@@ -15,7 +15,6 @@ 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 */
19
18
  require("react");
20
19
  var newUtils_1 = require("../../newUtils");
21
20
  var types_1 = require("../../types");
@@ -24,7 +23,6 @@ var Divider_1 = __importDefault(require("./componentBlocks/Divider/Divider"));
24
23
  var Embed_1 = __importDefault(require("./componentBlocks/Embed/Embed"));
25
24
  var Image_1 = __importDefault(require("./componentBlocks/Image/Image"));
26
25
  var RichText_1 = require("./componentBlocks/RichText");
27
- var ScrollAnimation_1 = __importDefault(require("./componentBlocks/ScrollAnimation"));
28
26
  var Text_1 = __importDefault(require("./componentBlocks/Text/Text"));
29
27
  var Twitter_1 = __importDefault(require("./componentBlocks/Twitter/Twitter"));
30
28
  var Youtube_1 = require("./componentBlocks/Youtube");
@@ -35,8 +33,8 @@ function ComponentBlockMatcher(_a) {
35
33
  switch (componentBlockCode) {
36
34
  case types_1.CB_ALL_CODES.CB_BTN:
37
35
  return (0, jsx_runtime_1.jsx)(Button_1.default, __assign({}, propsWithValue, { index: index }));
38
- // case CB_ALL_CODES.CB_TEXT:
39
- // return <Text {...(propsWithValue as CB_TEXT_PROPERTIES_TYPE)} 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 }));
40
38
  case types_1.CB_ALL_CODES.CB_RICHTEXT:
41
39
  return (0, jsx_runtime_1.jsx)(RichText_1.RichText, __assign({}, propsWithValue, { index: index }));
42
40
  case types_1.CB_ALL_CODES.CB_DIVIDER:
@@ -49,43 +47,8 @@ function ComponentBlockMatcher(_a) {
49
47
  return (0, jsx_runtime_1.jsx)(Youtube_1.Youtube, __assign({}, propsWithValue, { index: index }));
50
48
  case types_1.CB_ALL_CODES.CB_EMBED:
51
49
  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 }));
54
50
  default:
55
51
  return (0, jsx_runtime_1.jsx)("div", { children: "Error: not supported CB" });
56
52
  }
57
53
  }
58
54
  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, bodySelector" }));
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
- 'bodySelector'
89
- ];
90
- return requiredProps.every(function (prop) { return prop in json; });
91
- };
@@ -36,6 +36,8 @@ 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;
39
41
  };
40
42
  export type CB_TEXT_PROPERTIES_TYPE = CB_GENERAL_PROPERTIES_TYPE & {
41
43
  CB_CONTENT_PROP_TEXT: CB_CONTENT_PROP_TEXT;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pds-dev-kit-web-test",
3
- "version": "2.4.22",
3
+ "version": "2.4.23",
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.79]
2
+ ## [v2.2.77]
3
3
  ## daily|https://design.storybook.publ.biz/
4
4
 
5
5
  ### 업데이트 사항
6
- * [PDS-1232] 섹션 단위로 디바이스별 노출 설정 제공 건
6
+ * 컬러 싱크
@@ -1,3 +0,0 @@
1
- /// <reference types="react" />
2
- declare const AirpodsAnimation: ({ bodySelector, scrollId, totalImages, baseURL, type, startShowingImages, endShowingImages }: any) => JSX.Element;
3
- export default AirpodsAnimation;
@@ -1,224 +0,0 @@
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 bodySelector = _a.bodySelector, 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 _e = (0, react_1.useState)(function () {
61
- var box = document.querySelector(bodySelector);
62
- return box;
63
- }), mainBody = _e[0], setMainBody = _e[1];
64
- (0, react_1.useEffect)(function () {
65
- var box = document.querySelector(bodySelector);
66
- setMainBody(box);
67
- }, [bodySelector]);
68
- (0, react_1.useEffect)(function () {
69
- var loadImage = function (i) {
70
- return new Promise(function (resolve) {
71
- var img = new Image();
72
- img.src = "".concat(baseURL, "/").concat(String(i).padStart(4, '0'), ".").concat(type);
73
- img.onload = function () { return resolve(img); };
74
- });
75
- };
76
- var loadImages = function () { return __awaiter(void 0, void 0, void 0, function () {
77
- var imgs, i, img;
78
- return __generator(this, function (_a) {
79
- switch (_a.label) {
80
- case 0:
81
- imgs = [];
82
- i = 0;
83
- _a.label = 1;
84
- case 1:
85
- if (!(i < totalImages)) return [3 /*break*/, 4];
86
- return [4 /*yield*/, loadImage(i)];
87
- case 2:
88
- img = _a.sent();
89
- imgs.push(img);
90
- _a.label = 3;
91
- case 3:
92
- i++;
93
- return [3 /*break*/, 1];
94
- case 4:
95
- setImages(imgs);
96
- return [2 /*return*/];
97
- }
98
- });
99
- }); };
100
- loadImages();
101
- }, [totalImages, baseURL, type]);
102
- (0, react_1.useEffect)(function () {
103
- var handleScroll = function () {
104
- var scrollTop = mainBody.scrollTop;
105
- console.log(scrollId, scrollTop);
106
- if (scrollTop < startShowingImages || scrollTop > endShowingImages) {
107
- console.log(scrollId, 'frame 0');
108
- setCurrentFrameIndex(0); // Reset or handle as needed when out of range
109
- return;
110
- }
111
- var maxScrollTop = endShowingImages - startShowingImages;
112
- var scrollFraction = (scrollTop - startShowingImages) / maxScrollTop;
113
- console.log({ maxScrollTop: maxScrollTop, scrollTop: scrollTop, startShowingImages: startShowingImages });
114
- var frameIndex = Math.min(totalImages - 1, Math.max(0, Math.floor(scrollFraction * totalImages)));
115
- setCurrentFrameIndex(frameIndex);
116
- console.log(scrollId, "frameis ".concat(frameIndex));
117
- handleHeadingAnimationBasedOnScroll();
118
- };
119
- var handleHeadingAnimationBasedOnScroll = function () {
120
- var heading = document.querySelector('h1');
121
- var scrollTop = mainBody.scrollTop;
122
- var viewportHeight = window.innerHeight;
123
- // Calculate opacity based on scroll position
124
- var opacity = Math.max(0, 1 - scrollTop / (2 * viewportHeight));
125
- // Apply the calculated opacity
126
- if (heading) {
127
- heading.style.opacity = opacity.toString();
128
- }
129
- };
130
- mainBody.addEventListener('scroll', handleScroll);
131
- return function () {
132
- mainBody.removeEventListener('scroll', handleScroll);
133
- };
134
- }, [totalImages, images, startShowingImages, endShowingImages, mainBody]);
135
- (0, react_1.useEffect)(function () {
136
- if (images.length === totalImages) {
137
- render();
138
- }
139
- }, [currentFrameIndex, images]);
140
- var render = function () {
141
- var canvas = canvasRef.current;
142
- if (!canvas) {
143
- return;
144
- }
145
- var ctx = canvas.getContext('2d');
146
- if (!ctx) {
147
- return;
148
- }
149
- ctx.clearRect(0, 0, canvas.width, canvas.height);
150
- var img = images[currentFrameIndex];
151
- // const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
152
- var scrollTop = mainBody.scrollTop;
153
- if (!img || scrollTop < startShowingImages || scrollTop > endShowingImages) {
154
- ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas
155
- return;
156
- }
157
- var canvasRatio = canvas.width / canvas.height;
158
- var imgRatio = img.width / img.height;
159
- var drawWidth;
160
- var drawHeight;
161
- var offsetX = 0;
162
- var offsetY = 0;
163
- if (canvasRatio > imgRatio) {
164
- drawWidth = canvas.width;
165
- drawHeight = drawWidth / imgRatio;
166
- offsetY = (canvas.height - drawHeight) / 2;
167
- }
168
- else {
169
- drawHeight = canvas.height;
170
- drawWidth = drawHeight * imgRatio;
171
- offsetX = (canvas.width - drawWidth) / 2;
172
- }
173
- ctx.save();
174
- if (totalImages - currentFrameIndex < 10) {
175
- ctx.globalAlpha = (totalImages - currentFrameIndex) / 10;
176
- }
177
- ctx.drawImage(img, offsetX, offsetY, drawWidth, drawHeight);
178
- ctx.restore();
179
- };
180
- return ((0, jsx_runtime_1.jsxs)("div", __assign({ id: "main", style: {
181
- width: '100vw',
182
- position: 'fixed',
183
- pointerEvents: 'none'
184
- /* height: 500vh; */
185
- } }, { children: [(0, jsx_runtime_1.jsx)("h1", __assign({ style: {
186
- position: 'fixed',
187
- top: '50%',
188
- width: '100vw',
189
- left: '50%',
190
- textAlign: 'center',
191
- transform: 'translate(-50%, -50%)',
192
- fontSize: 'clamp(2rem, 10vw, 13.5rem)'
193
- } }, { children: "Airpods Pro" })), (0, jsx_runtime_1.jsx)("canvas", { style: {
194
- position: 'fixed',
195
- left: '50%',
196
- top: '50%',
197
- maxHeight: '100vh',
198
- maxWidth: '100vw',
199
- transform: 'translate(-50%, -50%)'
200
- }, ref: canvasRef, width: window.innerWidth, height: window.innerHeight })] })));
201
- };
202
- // #main {
203
- // width: 100vw;
204
- // position: fixed;
205
- // /* height: 500vh; */
206
- // }
207
- // canvas {
208
- // position: fixed;
209
- // left: 50%;
210
- // top: 50%;
211
- // max-height: 100vh;
212
- // max-width: 100vw;
213
- // transform: translate(-50%, -50%);
214
- // }
215
- // h1 {
216
- // position: fixed;
217
- // top: 50%;
218
- // width: 100vw;
219
- // left: 50%;
220
- // text-align: center;
221
- // transform: translate(-50%, -50%);
222
- // font-size: clamp(2rem, 10vw, 13.5rem);
223
- // }
224
- exports.default = AirpodsAnimation;