@megafon/ui-shared 5.10.2 → 5.12.0

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.
Files changed (46) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/es/components/BenefitsIcons/BenefitsIcons.d.ts +4 -0
  3. package/dist/es/components/BenefitsIcons/BenefitsIcons.js +25 -6
  4. package/dist/es/components/BenefitsIcons/BenefitsIconsTile.js +24 -10
  5. package/dist/es/components/BenefitsIcons/types.d.ts +12 -0
  6. package/dist/es/components/ImageBanner/ImageBanner.css +3 -0
  7. package/dist/es/components/ImageBanner/ImageBanner.d.ts +7 -0
  8. package/dist/es/components/ImageBanner/ImageBanner.js +15 -7
  9. package/dist/es/components/Instructions/Instructions.css +176 -39
  10. package/dist/es/components/Instructions/Instructions.d.ts +9 -0
  11. package/dist/es/components/Instructions/Instructions.js +35 -21
  12. package/dist/es/components/Instructions/img/iphone15.png +0 -0
  13. package/dist/es/components/Instructions/img/laptop-new.png +0 -0
  14. package/dist/es/components/StoreBanner/StoreBanner.css +13 -9
  15. package/dist/es/components/StoreBanner/StoreBanner.d.ts +6 -5
  16. package/dist/es/components/StoreBanner/StoreBanner.js +5 -3
  17. package/dist/es/components/StoreBanner/doc/img/android-screen.png +0 -0
  18. package/dist/es/components/StoreBanner/doc/img/screen.png +0 -0
  19. package/dist/es/components/StoreBanner/img/android.png +0 -0
  20. package/dist/es/components/StoreBanner/img/new-iphone.png +0 -0
  21. package/dist/es/helpers/getColumnConfig.d.ts +1 -1
  22. package/dist/lib/components/BenefitsIcons/BenefitsIcons.d.ts +4 -0
  23. package/dist/lib/components/BenefitsIcons/BenefitsIcons.js +24 -5
  24. package/dist/lib/components/BenefitsIcons/BenefitsIconsTile.js +26 -11
  25. package/dist/lib/components/BenefitsIcons/types.d.ts +12 -0
  26. package/dist/lib/components/ImageBanner/ImageBanner.css +3 -0
  27. package/dist/lib/components/ImageBanner/ImageBanner.d.ts +7 -0
  28. package/dist/lib/components/ImageBanner/ImageBanner.js +15 -7
  29. package/dist/lib/components/Instructions/Instructions.css +176 -39
  30. package/dist/lib/components/Instructions/Instructions.d.ts +9 -0
  31. package/dist/lib/components/Instructions/Instructions.js +39 -22
  32. package/dist/lib/components/Instructions/img/iphone15.png +0 -0
  33. package/dist/lib/components/Instructions/img/laptop-new.png +0 -0
  34. package/dist/lib/components/StoreBanner/StoreBanner.css +13 -9
  35. package/dist/lib/components/StoreBanner/StoreBanner.d.ts +6 -5
  36. package/dist/lib/components/StoreBanner/StoreBanner.js +5 -3
  37. package/dist/lib/components/StoreBanner/doc/img/android-screen.png +0 -0
  38. package/dist/lib/components/StoreBanner/doc/img/screen.png +0 -0
  39. package/dist/lib/components/StoreBanner/img/android.png +0 -0
  40. package/dist/lib/components/StoreBanner/img/new-iphone.png +0 -0
  41. package/dist/lib/helpers/getColumnConfig.d.ts +1 -1
  42. package/package.json +3 -3
  43. package/dist/es/components/StoreBanner/doc/img/iphone-12-screen.png +0 -0
  44. package/dist/es/components/StoreBanner/doc/img/new-iphone-screen.png +0 -0
  45. package/dist/lib/components/StoreBanner/doc/img/iphone-12-screen.png +0 -0
  46. package/dist/lib/components/StoreBanner/doc/img/new-iphone-screen.png +0 -0
@@ -27,7 +27,9 @@ export var pictureMaskTypes = {
27
27
  BLACK_IPHONE: 'black-iphone',
28
28
  WHITE_IPHONE: 'white-iphone',
29
29
  LAPTOP: 'laptop',
30
+ LAPTOP_NEW: 'laptop-new',
30
31
  IPHONE_12: 'iphone-12',
32
+ IPHONE_15: 'iphone-15',
31
33
  IPHONE_CROPPED: 'iphone-cropped',
32
34
  NONE: 'none'
33
35
  };
@@ -38,6 +40,10 @@ export var arrowTheme = {
38
40
  PURPLE: 'purple',
39
41
  DARK: 'dark'
40
42
  };
43
+ export var elementOrderTypes = {
44
+ DEFAULT: 'default',
45
+ REVERSED: 'reversed'
46
+ };
41
47
  var testIdPrefix = 'Instructions';
42
48
  var cn = cnCreate('mfui-instructions');
43
49
  var swiperSlideCn = cn('slide');
@@ -72,6 +78,8 @@ var Instructions = function Instructions(_ref) {
72
78
  showArrows = _ref.showArrows,
73
79
  _ref$arrowsTheme = _ref.arrowsTheme,
74
80
  arrowsTheme = _ref$arrowsTheme === void 0 ? arrowTheme.DARK : _ref$arrowsTheme,
81
+ _ref$elementOrder = _ref.elementOrder,
82
+ elementOrder = _ref$elementOrder === void 0 ? 'default' : _ref$elementOrder,
75
83
  children = _ref.children;
76
84
 
77
85
  var _React$useState = React.useState(),
@@ -84,6 +92,7 @@ var Instructions = function Instructions(_ref) {
84
92
  slideIndex = _React$useState4[0],
85
93
  setSlideIndex = _React$useState4[1];
86
94
 
95
+ var isMobileReversed = elementOrder === 'reversed';
87
96
  var getSwiperInstance = React.useCallback(function (swiper) {
88
97
  setSwiperInstance(swiper);
89
98
  getSwiper && getSwiper(swiper);
@@ -133,6 +142,22 @@ var Instructions = function Instructions(_ref) {
133
142
  type: "video/mp4"
134
143
  }));
135
144
  }, [dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.image]);
145
+ var renderMobileDots = React.useCallback(function () {
146
+ return /*#__PURE__*/React.createElement("ul", {
147
+ className: cn('articles-dots', {
148
+ reversed: isMobileReversed
149
+ }),
150
+ "data-testid": "".concat(testIdPrefix, "-articles-dots-mobile")
151
+ }, instructionItems.map(function (_item, i) {
152
+ return /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.item, i + 1), {
153
+ key: i,
154
+ className: cn('articles-dot', {
155
+ active: slideIndex === i
156
+ }, [getActiveCustomClass(i, slideIndex), instructionItem, mobileInstructionItem]),
157
+ onClick: handleArticleClick(i)
158
+ }));
159
+ }));
160
+ }, [instructionItems, dataAttrs, slideIndex, instructionItem, mobileInstructionItem, getActiveCustomClass, handleArticleClick, isMobileReversed]);
136
161
  var renderSlider = React.useCallback(function () {
137
162
  return /*#__PURE__*/React.createElement(Swiper, {
138
163
  noSwiping: false,
@@ -235,7 +260,9 @@ var Instructions = function Instructions(_ref) {
235
260
  }),
236
261
  "data-testid": "".concat(testIdPrefix, "-articles-list-mobile")
237
262
  }, /*#__PURE__*/React.createElement("div", {
238
- className: cn('articles-title-block')
263
+ className: cn('articles-title-block', {
264
+ reversed: isMobileReversed
265
+ })
239
266
  }, instructionItems.map(function (_ref6, i) {
240
267
  var itemTitle = _ref6.title;
241
268
  return slideIndex === i && /*#__PURE__*/React.createElement("div", _extends({
@@ -244,23 +271,8 @@ var Instructions = function Instructions(_ref) {
244
271
  }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.mobileItemText, i + 1), {
245
272
  className: cn('articles-title', [mobileItemTitle])
246
273
  }), itemTitle);
247
- })), /*#__PURE__*/React.createElement("ul", {
248
- className: cn('articles-dots', {
249
- 'text-after': !!text
250
- }),
251
- "data-testid": "".concat(testIdPrefix, "-articles-dots-mobile")
252
- }, instructionItems.map(function (_item, i) {
253
- return /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.item, i + 1), {
254
- key: i,
255
- className: cn('articles-dot', {
256
- active: slideIndex === i
257
- }, [getActiveCustomClass(i, slideIndex), instructionItem, mobileInstructionItem]),
258
- onClick: handleArticleClick(i)
259
- }), /*#__PURE__*/React.createElement("span", {
260
- className: cn('articles-dot-number')
261
- }, i + 1));
262
274
  })));
263
- }, [dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.mobileItemText, getActiveCustomClass, handleArticleClick, instructionItem, instructionItems, mobileInstructionItem, mobileItemTitle, dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.item, slideIndex, text]);
275
+ }, [dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.mobileItemText, instructionItems, mobileItemTitle, slideIndex, isMobileReversed]);
264
276
  var renderArrows = React.useCallback(function () {
265
277
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(NavArrow, {
266
278
  dataAttrs: {
@@ -287,7 +299,8 @@ var Instructions = function Instructions(_ref) {
287
299
  }, [handlePrevClick, handleNextClick, arrowsTheme, arrowPrev, arrowNext, dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.arrowPrev, dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.arrowNext, slideIndex, instructionItems.length]);
288
300
  return /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
289
301
  className: cn({
290
- mask: pictureMask
302
+ mask: pictureMask,
303
+ reversed: isMobileReversed
291
304
  }),
292
305
  ref: rootRef
293
306
  }), /*#__PURE__*/React.createElement(Grid, {
@@ -304,11 +317,11 @@ var Instructions = function Instructions(_ref) {
304
317
  background: pictureBackgroundColor
305
318
  }),
306
319
  "data-testid": "".concat(testIdPrefix, "-picture")
307
- }, renderPicture(), !!showArrows && renderArrows(), renderQrCode()), /*#__PURE__*/React.createElement("div", {
320
+ }, isMobileReversed && renderMobileArticles(), renderPicture(), !!showArrows && renderArrows(), renderQrCode()), renderMobileDots(), /*#__PURE__*/React.createElement("div", {
308
321
  className: cn('articles', {
309
322
  align: pictureAlign
310
323
  })
311
- }, !!title && renderTitle('desktop'), renderMobileArticles(), renderDesktopArticles(), text && renderText(), children)))));
324
+ }, !!title && renderTitle('desktop'), !isMobileReversed && renderMobileArticles(), renderDesktopArticles(), text && renderText(), children)))));
312
325
  };
313
326
 
314
327
  Instructions.propTypes = {
@@ -345,10 +358,11 @@ Instructions.propTypes = {
345
358
  }).isRequired).isRequired,
346
359
  pictureAlign: PropTypes.oneOf([pictureAlignTypes.LEFT, pictureAlignTypes.RIGHT]),
347
360
  pictureVerticalAlign: PropTypes.oneOf([pictureVerticalAlignTypes.CENTER, pictureVerticalAlignTypes.TOP, pictureVerticalAlignTypes.UNSET]),
348
- pictureMask: PropTypes.oneOf([pictureMaskTypes.ANDROID, pictureMaskTypes.ANDROID_CROPPED, pictureMaskTypes.NEW_IPHONE, pictureMaskTypes.WHITE_IPHONE, pictureMaskTypes.BLACK_IPHONE, pictureMaskTypes.LAPTOP, pictureMaskTypes.IPHONE_12, pictureMaskTypes.IPHONE_CROPPED, pictureMaskTypes.NONE]),
361
+ pictureMask: PropTypes.oneOf([pictureMaskTypes.ANDROID, pictureMaskTypes.ANDROID_CROPPED, pictureMaskTypes.NEW_IPHONE, pictureMaskTypes.WHITE_IPHONE, pictureMaskTypes.BLACK_IPHONE, pictureMaskTypes.LAPTOP, pictureMaskTypes.LAPTOP_NEW, pictureMaskTypes.IPHONE_12, pictureMaskTypes.IPHONE_15, pictureMaskTypes.IPHONE_CROPPED, pictureMaskTypes.NONE]),
349
362
  pictureBackgroundColor: PropTypes.oneOf([pictureBackgroundColorTypes.SPB_SKY_0]),
350
363
  showArrows: PropTypes.bool,
351
364
  arrowsTheme: PropTypes.oneOf([arrowTheme.DARK, arrowTheme.PURPLE]),
365
+ elementOrder: PropTypes.oneOf([elementOrderTypes.DEFAULT, elementOrderTypes.REVERSED]),
352
366
  getSwiper: PropTypes.func
353
367
  };
354
368
  export default Instructions;
@@ -38,35 +38,39 @@ h5 {
38
38
  background-image: url('./img/new-iphone.png');
39
39
  }
40
40
  .mfui-store-banner_mask_new-iphone .mfui-store-banner__screen {
41
- top: 13px;
41
+ top: 9px;
42
42
  z-index: 1;
43
- width: 87%;
43
+ width: 90%;
44
+ border-radius: 14px;
44
45
  }
45
46
  @media screen and (min-width: 768px) and (max-width: 1023px) {
46
47
  .mfui-store-banner_mask_new-iphone .mfui-store-banner__screen {
47
- top: 10px;
48
+ top: 8px;
48
49
  }
49
50
  }
50
51
  @media screen and (max-width: 767px) {
51
52
  .mfui-store-banner_mask_new-iphone .mfui-store-banner__screen {
52
- top: 33px;
53
+ top: 30px;
53
54
  }
54
55
  }
55
56
  .mfui-store-banner_mask_android .mfui-store-banner__device-mask {
57
+ position: relative;
58
+ z-index: 2;
56
59
  background-image: url('./img/android.png');
57
60
  }
58
61
  .mfui-store-banner_mask_android .mfui-store-banner__screen {
59
- top: 59px;
60
- width: 86%;
62
+ top: 9px;
63
+ width: 92%;
64
+ border-radius: 14px;
61
65
  }
62
66
  @media screen and (min-width: 768px) and (max-width: 1023px) {
63
67
  .mfui-store-banner_mask_android .mfui-store-banner__screen {
64
- top: 48px;
68
+ top: 8px;
65
69
  }
66
70
  }
67
71
  @media screen and (max-width: 767px) {
68
72
  .mfui-store-banner_mask_android .mfui-store-banner__screen {
69
- top: 64px;
73
+ top: 30px;
70
74
  }
71
75
  }
72
76
  .mfui-store-banner_mask_white-iphone .mfui-store-banner__device-mask {
@@ -144,7 +148,7 @@ h5 {
144
148
  padding-top: 32px;
145
149
  padding-bottom: 32px;
146
150
  border: 1px solid var(--spbSky2);
147
- border-radius: 12px;
151
+ border-radius: 24px;
148
152
  }
149
153
  @media screen and (max-width: 767px) {
150
154
  .mfui-store-banner__grid {
@@ -10,10 +10,11 @@ export declare const Theme: {
10
10
  declare type ThemeType = typeof Theme[keyof typeof Theme];
11
11
  export declare const DeviceMask: {
12
12
  readonly ANDROID: "android";
13
- readonly BLACK_IPHONE: "black-iphone";
14
- readonly IPHONE_12: "iphone-12";
15
13
  readonly NEW_IPHONE: "new-iphone";
14
+ /** DEPRECATED: 'black-iphone', 'white-iphone', 'iphone-12' */
15
+ readonly BLACK_IPHONE: "black-iphone";
16
16
  readonly WHITE_IPHONE: "white-iphone";
17
+ readonly IPHONE_12: "iphone-12";
17
18
  };
18
19
  declare type DeviceMaskType = typeof DeviceMask[keyof typeof DeviceMask];
19
20
  declare type LinkHrefType = StoreButtonPropsType['href'];
@@ -23,7 +24,7 @@ export interface IStoreBannerProps {
23
24
  title: string;
24
25
  /** Текст */
25
26
  text: string;
26
- /** Ссылка на скачивание приложения в App Store */
27
+ /** Ссылка на скачивание приложения в App Store */
27
28
  linkApple?: LinkHrefType;
28
29
  /** Обработчик клика по ссылке в App Store */
29
30
  onClickApple?: LinkOnClickType;
@@ -53,7 +54,7 @@ export interface IStoreBannerProps {
53
54
  onClickVAppstore?: LinkOnClickType;
54
55
  /** Текст кнопки */
55
56
  textButton?: string;
56
- /** Ссылка для кнопки */
57
+ /** Ссылка для кнопки */
57
58
  linkButton?: string;
58
59
  /** Rel - атрибут тега <a> для всех кнопок баннера */
59
60
  rel?: string;
@@ -61,7 +62,7 @@ export interface IStoreBannerProps {
61
62
  qrCode?: string;
62
63
  /** Цветовая тема компонента */
63
64
  theme?: ThemeType;
64
- /** Изображение телефона */
65
+ /** Изображение телефона. DEPRECATED: 'black-iphone', 'white-iphone', 'iphone-12' */
65
66
  deviceMask: DeviceMaskType;
66
67
  /** Изображение на дисплее телефона */
67
68
  imageSrc: string;
@@ -14,10 +14,12 @@ export var Theme = {
14
14
  };
15
15
  export var DeviceMask = {
16
16
  ANDROID: 'android',
17
- BLACK_IPHONE: 'black-iphone',
18
- IPHONE_12: 'iphone-12',
19
17
  NEW_IPHONE: 'new-iphone',
20
- WHITE_IPHONE: 'white-iphone'
18
+
19
+ /** DEPRECATED: 'black-iphone', 'white-iphone', 'iphone-12' */
20
+ BLACK_IPHONE: 'black-iphone',
21
+ WHITE_IPHONE: 'white-iphone',
22
+ IPHONE_12: 'iphone-12'
21
23
  };
22
24
  var testIdPrefix = 'StoreBanner';
23
25
  var cn = cnCreate('mfui-store-banner');
@@ -1,2 +1,2 @@
1
1
  import React from 'react';
2
- export declare const getColumnConfig: (isFullWidth: boolean) => Pick<React.PropsWithChildren<import("../../../ui-core/dist/lib/components/Grid/GridColumn").IGridColumn>, "all" | "wide" | "mobile" | "desktop" | "tablet">;
2
+ export declare const getColumnConfig: (isFullWidth: boolean) => Pick<React.PropsWithChildren<import("@megafon/ui-core/dist/lib/components/Grid/GridColumn").IGridColumn>, "all" | "wide" | "mobile" | "desktop" | "tablet">;
@@ -2,6 +2,10 @@ import * as React from 'react';
2
2
  import { IconPosition, IBenefit, BackgroundType } from './types';
3
3
  import './style/BenefitsIcons.less';
4
4
  export interface IBenefitsIcons {
5
+ /** Дополнительные data атрибуты к внутренним элементам */
6
+ dataAttrs?: {
7
+ root?: Record<string, string>;
8
+ };
5
9
  /** Ссылка на корневой элемент */
6
10
  rootRef?: React.Ref<HTMLDivElement>;
7
11
  /** Позиция иконки */
@@ -43,7 +43,8 @@ var testIdPrefix = 'BenefitsIcons';
43
43
  var cn = (0, _uiHelpers.cnCreate)('mfui-benefits-icons');
44
44
 
45
45
  var BenefitsIcons = function BenefitsIcons(_ref) {
46
- var rootRef = _ref.rootRef,
46
+ var dataAttrs = _ref.dataAttrs,
47
+ rootRef = _ref.rootRef,
47
48
  _ref$iconPosition = _ref.iconPosition,
48
49
  iconPosition = _ref$iconPosition === void 0 ? 'left-top' : _ref$iconPosition,
49
50
  _ref$background = _ref.background,
@@ -86,13 +87,13 @@ var BenefitsIcons = function BenefitsIcons(_ref) {
86
87
  window.removeEventListener('resize', resizeHandlerThrottled);
87
88
  };
88
89
  }, [iconPosition, inOneColumn, resizeHandler]);
89
- return /*#__PURE__*/React.createElement("div", {
90
+ return /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
90
91
  className: cn({
91
92
  'one-column': inOneColumn,
92
93
  background: background
93
94
  }, [className, classes.root]),
94
95
  ref: rootRef
95
- }, /*#__PURE__*/React.createElement("div", {
96
+ }), /*#__PURE__*/React.createElement("div", {
96
97
  className: cn('inner')
97
98
  }, /*#__PURE__*/React.createElement(_uiCore.Grid, {
98
99
  className: classes.grid,
@@ -110,7 +111,9 @@ var BenefitsIcons = function BenefitsIcons(_ref) {
110
111
  var title = _ref2.title,
111
112
  text = _ref2.text,
112
113
  icon = _ref2.icon,
113
- alt = _ref2.alt;
114
+ alt = _ref2.alt,
115
+ itemClasses = _ref2.classes,
116
+ itemDataAttrs = _ref2.dataAttrs;
114
117
  var columnConfig = inOneColumn ? (0, _helpers.getOneColumnConfig)(iconPosition) : (0, _helpers["default"])(iconPosition, items.length, i);
115
118
  return /*#__PURE__*/React.createElement(_uiCore.GridColumn, (0, _extends2["default"])({
116
119
  className: cn('column', [classes.gridColumn]),
@@ -122,6 +125,8 @@ var BenefitsIcons = function BenefitsIcons(_ref) {
122
125
  }
123
126
  }, columnConfig), /*#__PURE__*/React.createElement(_BenefitsIconsTile["default"], {
124
127
  className: cn('tile', [classes.item]),
128
+ classes: itemClasses,
129
+ dataAttrs: itemDataAttrs,
125
130
  title: title,
126
131
  text: text,
127
132
  icon: icon,
@@ -133,6 +138,9 @@ var BenefitsIcons = function BenefitsIcons(_ref) {
133
138
  };
134
139
 
135
140
  BenefitsIcons.propTypes = {
141
+ dataAttrs: _propTypes["default"].shape({
142
+ root: _propTypes["default"].objectOf(_propTypes["default"].string.isRequired)
143
+ }),
136
144
  rootRef: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].oneOfType([_propTypes["default"].shape({
137
145
  current: _propTypes["default"].elementType
138
146
  }), _propTypes["default"].any])]),
@@ -140,9 +148,20 @@ BenefitsIcons.propTypes = {
140
148
  background: _propTypes["default"].oneOf(Object.values(_types.BackgroundEnum)),
141
149
  inOneColumn: _propTypes["default"].bool,
142
150
  items: _propTypes["default"].arrayOf(_propTypes["default"].shape({
151
+ dataAttrs: _propTypes["default"].shape({
152
+ root: _propTypes["default"].objectOf(_propTypes["default"].string.isRequired)
153
+ }),
154
+ classes: _propTypes["default"].shape({
155
+ root: _propTypes["default"].string,
156
+ icon: _propTypes["default"].string,
157
+ title: _propTypes["default"].string,
158
+ text: _propTypes["default"].string,
159
+ contentWrapper: _propTypes["default"].string
160
+ }),
143
161
  title: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].node, _propTypes["default"].arrayOf(_propTypes["default"].node)]),
144
162
  text: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].node, _propTypes["default"].arrayOf(_propTypes["default"].node)]),
145
- icon: _propTypes["default"].node.isRequired
163
+ icon: _propTypes["default"].node.isRequired,
164
+ alt: _propTypes["default"].string
146
165
  }).isRequired).isRequired,
147
166
  className: _propTypes["default"].string,
148
167
  classes: _propTypes["default"].shape({
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = void 0;
9
9
 
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
10
12
  require("core-js/modules/es.object.values.js");
11
13
 
12
14
  var React = _interopRequireWildcard(require("react"));
@@ -19,17 +21,20 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
19
21
 
20
22
  var _types = require("./types");
21
23
 
22
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
23
-
24
24
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
25
 
26
26
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
27
 
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
29
+
28
30
  var testIdPrefix = 'BenefitsIconsTile';
29
31
  var cn = (0, _uiHelpers.cnCreate)('mfui-benefits-icons-tile');
30
32
 
31
33
  var BenefitsIconsTile = function BenefitsIconsTile(_ref) {
32
- var title = _ref.title,
34
+ var dataAttrs = _ref.dataAttrs,
35
+ _ref$classes = _ref.classes,
36
+ classes = _ref$classes === void 0 ? {} : _ref$classes,
37
+ title = _ref.title,
33
38
  text = _ref.text,
34
39
  icon = _ref.icon,
35
40
  iconPosition = _ref.iconPosition,
@@ -40,7 +45,7 @@ var BenefitsIconsTile = function BenefitsIconsTile(_ref) {
40
45
  var renderIcon = function renderIcon() {
41
46
  if (typeof icon === 'string') {
42
47
  return /*#__PURE__*/React.createElement("img", {
43
- className: cn('img-icon'),
48
+ className: cn('img-icon', [classes.icon]),
44
49
  src: icon,
45
50
  alt: alt,
46
51
  "data-testid": "".concat(testIdPrefix, "-img")
@@ -48,32 +53,42 @@ var BenefitsIconsTile = function BenefitsIconsTile(_ref) {
48
53
  }
49
54
 
50
55
  return /*#__PURE__*/React.createElement("div", {
51
- className: cn('svg-icon'),
56
+ className: cn('svg-icon', [classes.icon]),
52
57
  "data-testid": "".concat(testIdPrefix, "-svg")
53
58
  }, icon);
54
59
  };
55
60
 
56
- return /*#__PURE__*/React.createElement("div", {
61
+ return /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
57
62
  className: cn({
58
63
  'icon-position': iconPosition,
59
64
  background: background,
60
65
  image: typeof icon === 'string'
61
- }, [className]),
66
+ }, [className, classes.root]),
62
67
  "data-testid": "".concat(testIdPrefix, "-root")
63
- }, /*#__PURE__*/React.createElement("div", {
68
+ }), /*#__PURE__*/React.createElement("div", {
64
69
  className: cn('inner')
65
70
  }, renderIcon(), /*#__PURE__*/React.createElement("div", {
66
- className: cn('content-wrapper')
71
+ className: cn('content-wrapper', [classes.contentWrapper])
67
72
  }, title && /*#__PURE__*/React.createElement(_uiCore.Header, {
68
- className: cn('title'),
73
+ className: cn('title', [classes.title]),
69
74
  as: "h5"
70
75
  }, title), text && /*#__PURE__*/React.createElement("div", {
71
- className: cn('content')
76
+ className: cn('content', [classes.text])
72
77
  }, text))));
73
78
  };
74
79
 
75
80
  BenefitsIconsTile.propTypes = {
81
+ dataAttrs: _propTypes["default"].shape({
82
+ root: _propTypes["default"].objectOf(_propTypes["default"].string.isRequired)
83
+ }),
76
84
  className: _propTypes["default"].string,
85
+ classes: _propTypes["default"].shape({
86
+ root: _propTypes["default"].string,
87
+ icon: _propTypes["default"].string,
88
+ title: _propTypes["default"].string,
89
+ text: _propTypes["default"].string,
90
+ contentWrapper: _propTypes["default"].string
91
+ }),
77
92
  title: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].node, _propTypes["default"].arrayOf(_propTypes["default"].node)]),
78
93
  text: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].node, _propTypes["default"].arrayOf(_propTypes["default"].node)]),
79
94
  iconPosition: _propTypes["default"].oneOf(Object.values(_types.IconPositionEnum)),
@@ -1,6 +1,18 @@
1
1
  /// <reference types="react" />
2
2
  declare type TGridSizeValues = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12';
3
3
  export interface IBenefit {
4
+ /** Дополнительные data атрибуты к внутренним элементам */
5
+ dataAttrs?: {
6
+ root?: Record<string, string>;
7
+ };
8
+ /** Дополнительные классы для корневого и внутренних элементов */
9
+ classes?: {
10
+ root?: string;
11
+ icon?: string;
12
+ title?: string;
13
+ text?: string;
14
+ contentWrapper?: string;
15
+ };
4
16
  /** Заголовок бенефита */
5
17
  title?: string | React.ReactNode | React.ReactNode[];
6
18
  /** Основной текст в бенефите */
@@ -177,6 +177,9 @@ h5 {
177
177
  gap: 8px;
178
178
  margin-bottom: 16px;
179
179
  }
180
+ .mfui-image-banner__ad-block {
181
+ margin: 0 0 16px auto;
182
+ }
180
183
  @media screen and (min-width: 1024px) {
181
184
  .mfui-image-banner__ad-block {
182
185
  position: absolute;
@@ -43,6 +43,13 @@ export interface IImageBannerProps {
43
43
  classes?: {
44
44
  root?: string;
45
45
  image?: string;
46
+ title?: string;
47
+ description?: string;
48
+ cost?: string;
49
+ badgesContainer?: string;
50
+ badges?: string;
51
+ badge?: string;
52
+ adBlock?: string;
46
53
  };
47
54
  /** Ссылка на корневой элемент */
48
55
  rootRef?: Ref<HTMLDivElement>;
@@ -121,11 +121,12 @@ var ImageBanner = function ImageBanner(_ref2) {
121
121
  var hasImage = !!(imageMobile || imageMobile2x || imageDesktop || imageDesktop2x);
122
122
 
123
123
  var renderBadges = !!badges.length && /*#__PURE__*/_react["default"].createElement("div", {
124
- className: cn('badges')
124
+ className: cn('badges', [classes.badges])
125
125
  }, badges.map(function (_ref3) {
126
126
  var text = _ref3.text,
127
127
  iconType = _ref3.iconType;
128
128
  return /*#__PURE__*/_react["default"].createElement(_uiCore.PriceBadge, {
129
+ className: classes.badge,
129
130
  theme: navTheme,
130
131
  iconType: iconType,
131
132
  key: text
@@ -133,22 +134,22 @@ var ImageBanner = function ImageBanner(_ref2) {
133
134
  }));
134
135
 
135
136
  var renderAdBlock = !!adBlock && /*#__PURE__*/_react["default"].createElement("div", {
136
- className: cn('ad-block')
137
+ className: cn('ad-block', [classes.adBlock])
137
138
  }, adBlock);
138
139
 
139
140
  var renderContent = /*#__PURE__*/_react["default"].createElement("div", {
140
141
  className: cn('content')
141
142
  }, /*#__PURE__*/_react["default"].createElement("div", {
142
- className: cn('badges-container')
143
+ className: cn('badges-container', [classes.badgesContainer])
143
144
  }, renderBadges, renderAdBlock), !!title && /*#__PURE__*/_react["default"].createElement(_uiCore.Header, {
144
- className: cn('title'),
145
+ className: cn('title', [classes.title]),
145
146
  color: "inherit"
146
147
  }, typeof title === 'string' ? (0, _uiHelpers.convert)(title, _uiHelpers.titleConvertConfig) : title), !!description && /*#__PURE__*/_react["default"].createElement(_uiCore.Header, {
147
- className: cn('description'),
148
+ className: cn('description', [classes.description]),
148
149
  as: "h5",
149
150
  color: "inherit"
150
151
  }, typeof description === 'string' ? (0, _uiHelpers.convert)(description, _uiHelpers.titleConvertConfig) : description), !!cost && /*#__PURE__*/_react["default"].createElement("div", {
151
- className: cn('cost')
152
+ className: cn('cost', [classes.cost])
152
153
  }, (0, _uiHelpers.convert)(cost, typographyConfig)), !!children && !!_react["default"].Children.count(children) && /*#__PURE__*/_react["default"].createElement("div", {
153
154
  className: cn('children')
154
155
  }, children));
@@ -191,7 +192,14 @@ ImageBanner.propTypes = {
191
192
  className: PropTypes.string,
192
193
  classes: PropTypes.shape({
193
194
  root: PropTypes.string,
194
- image: PropTypes.string
195
+ image: PropTypes.string,
196
+ title: PropTypes.string,
197
+ description: PropTypes.string,
198
+ cost: PropTypes.string,
199
+ badgesContainer: PropTypes.string,
200
+ badges: PropTypes.string,
201
+ badge: PropTypes.string,
202
+ adBlock: PropTypes.string
195
203
  }),
196
204
  rootRef: PropTypes.oneOfType([PropTypes.func, PropTypes.oneOfType([PropTypes.shape({
197
205
  current: PropTypes.elementType