@megafon/ui-shared 6.10.0 → 6.11.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 (40) hide show
  1. package/CHANGELOG.md +2483 -0
  2. package/dist/es/components/ButtonsBox/ButtonsBox.css +34 -0
  3. package/dist/es/components/ButtonsBox/ButtonsBox.d.ts +48 -0
  4. package/dist/es/components/ButtonsBox/ButtonsBox.js +89 -0
  5. package/dist/es/components/Container/Container.css +519 -0
  6. package/dist/es/components/InfoCards/InfoCards.d.ts +4 -1
  7. package/dist/es/components/InfoCards/InfoCards.js +14 -5
  8. package/dist/es/components/InfoCards/components/InfoCard/InfoCard.css +30 -7
  9. package/dist/es/components/InfoCards/components/InfoCard/InfoCard.d.ts +4 -0
  10. package/dist/es/components/InfoCards/components/InfoCard/InfoCard.js +20 -10
  11. package/dist/es/components/InfoCards/types.d.ts +6 -1
  12. package/dist/es/components/PromoCards/PromoCards.d.ts +28 -0
  13. package/dist/es/components/PromoCards/PromoCards.js +90 -0
  14. package/dist/es/components/PromoCards/components/PromoCard/PromoCard.css +157 -0
  15. package/dist/es/components/PromoCards/components/PromoCard/PromoCard.d.ts +18 -0
  16. package/dist/es/components/PromoCards/components/PromoCard/PromoCard.js +74 -0
  17. package/dist/es/components/PromoCards/types.d.ts +29 -0
  18. package/dist/es/components/PromoCards/types.js +0 -0
  19. package/dist/es/index.d.ts +3 -0
  20. package/dist/es/index.js +3 -0
  21. package/dist/lib/components/ButtonsBox/ButtonsBox.css +34 -0
  22. package/dist/lib/components/ButtonsBox/ButtonsBox.d.ts +48 -0
  23. package/dist/lib/components/ButtonsBox/ButtonsBox.js +110 -0
  24. package/dist/lib/components/Container/Container.css +519 -0
  25. package/dist/lib/components/InfoCards/InfoCards.d.ts +4 -1
  26. package/dist/lib/components/InfoCards/InfoCards.js +16 -13
  27. package/dist/lib/components/InfoCards/components/InfoCard/InfoCard.css +30 -7
  28. package/dist/lib/components/InfoCards/components/InfoCard/InfoCard.d.ts +4 -0
  29. package/dist/lib/components/InfoCards/components/InfoCard/InfoCard.js +19 -9
  30. package/dist/lib/components/InfoCards/types.d.ts +6 -1
  31. package/dist/lib/components/PromoCards/PromoCards.d.ts +28 -0
  32. package/dist/lib/components/PromoCards/PromoCards.js +113 -0
  33. package/dist/lib/components/PromoCards/components/PromoCard/PromoCard.css +157 -0
  34. package/dist/lib/components/PromoCards/components/PromoCard/PromoCard.d.ts +18 -0
  35. package/dist/lib/components/PromoCards/components/PromoCard/PromoCard.js +96 -0
  36. package/dist/lib/components/PromoCards/types.d.ts +29 -0
  37. package/dist/lib/components/PromoCards/types.js +1 -0
  38. package/dist/lib/index.d.ts +3 -0
  39. package/dist/lib/index.js +24 -0
  40. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React, { Ref } from 'react';
2
2
  import { IInfoCardData, IInfoCardSettings } from './types';
3
3
  import './InfoCards.less';
4
4
  export interface IInfoCards extends IInfoCardSettings {
@@ -8,6 +8,7 @@ export interface IInfoCards extends IInfoCardSettings {
8
8
  classes?: {
9
9
  root?: string;
10
10
  card?: string;
11
+ cardTitle?: string;
11
12
  };
12
13
  /** Дополнительные data атрибуты к внутренним элементам */
13
14
  dataAttrs?: {
@@ -16,6 +17,8 @@ export interface IInfoCards extends IInfoCardSettings {
16
17
  };
17
18
  /** Список карточек */
18
19
  items: IInfoCardData[];
20
+ /** Ссылка на корневой элемент */
21
+ rootRef?: Ref<HTMLDivElement>;
19
22
  }
20
23
  declare const InfoCards: React.FC<IInfoCards>;
21
24
  export default InfoCards;
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -13,7 +11,7 @@ require("core-js/modules/es.array.map.js");
13
11
 
14
12
  require("core-js/modules/es.array.concat.js");
15
13
 
16
- var React = _interopRequireWildcard(require("react"));
14
+ var _react = _interopRequireDefault(require("react"));
17
15
 
18
16
  var _uiHelpers = require("@megafon/ui-helpers");
19
17
 
@@ -21,10 +19,6 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
21
19
 
22
20
  var _InfoCard = _interopRequireDefault(require("./components/InfoCard/InfoCard"));
23
21
 
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
-
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
-
28
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
29
23
 
30
24
  var cn = (0, _uiHelpers.cnCreate)('mfui-v6-info-cards');
@@ -39,15 +33,17 @@ var InfoCards = function InfoCards(_ref) {
39
33
  imgPosition = _ref$imgPosition === void 0 ? 'top-left' : _ref$imgPosition,
40
34
  _ref$background = _ref.background,
41
35
  background = _ref$background === void 0 ? 'stroke' : _ref$background,
42
- dataAttrs = _ref.dataAttrs;
43
- return /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
36
+ dataAttrs = _ref.dataAttrs,
37
+ rootRef = _ref.rootRef;
38
+ return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
44
39
  className: cn({
45
40
  size: size,
46
41
  position: imgPosition,
47
42
  background: background
48
- }, [className, classes === null || classes === void 0 ? void 0 : classes.root])
43
+ }, [className, classes === null || classes === void 0 ? void 0 : classes.root]),
44
+ ref: rootRef
49
45
  }), items.map(function (item, i) {
50
- return /*#__PURE__*/React.createElement(_InfoCard["default"], (0, _extends2["default"])({}, item, {
46
+ return /*#__PURE__*/_react["default"].createElement(_InfoCard["default"], (0, _extends2["default"])({}, item, {
51
47
  className: classes === null || classes === void 0 ? void 0 : classes.card,
52
48
  size: size,
53
49
  imgPosition: imgPosition,
@@ -55,6 +51,9 @@ var InfoCards = function InfoCards(_ref) {
55
51
  dataAttrs: {
56
52
  root: (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.card, i + 1)
57
53
  },
54
+ classes: {
55
+ title: classes === null || classes === void 0 ? void 0 : classes.cardTitle
56
+ },
58
57
  key: "".concat(item.title, "_").concat(i)
59
58
  }));
60
59
  }));
@@ -64,7 +63,8 @@ InfoCards.propTypes = {
64
63
  className: _propTypes["default"].string,
65
64
  classes: _propTypes["default"].shape({
66
65
  root: _propTypes["default"].string,
67
- card: _propTypes["default"].string
66
+ card: _propTypes["default"].string,
67
+ cardTitle: _propTypes["default"].string
68
68
  }),
69
69
  dataAttrs: _propTypes["default"].shape({
70
70
  root: _propTypes["default"].objectOf(_propTypes["default"].string.isRequired),
@@ -82,7 +82,10 @@ InfoCards.propTypes = {
82
82
  target: _propTypes["default"].oneOf(['_self', '_blank']),
83
83
  rel: _propTypes["default"].string,
84
84
  moreInfo: _propTypes["default"].string
85
- }).isRequired).isRequired
85
+ }).isRequired).isRequired,
86
+ rootRef: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].oneOfType([_propTypes["default"].shape({
87
+ current: _propTypes["default"].elementType
88
+ }), _propTypes["default"].any])])
86
89
  };
87
90
  var _default = InfoCards;
88
91
  exports["default"] = _default;
@@ -58,7 +58,10 @@ h5 {
58
58
  -webkit-transition: color 0.3s;
59
59
  transition: color 0.3s;
60
60
  }
61
- .mfui-v6-info-card_link:hover .mfui-v6-info-card__more-info {
61
+ .mfui-v6-info-card_active {
62
+ cursor: pointer;
63
+ }
64
+ .mfui-v6-info-card_active:hover .mfui-v6-info-card__more-info {
62
65
  color: var(--brandGreen);
63
66
  }
64
67
  .mfui-v6-info-card__more-info-text {
@@ -195,6 +198,26 @@ h5 {
195
198
  .mfui-v6-info-card_position_right-side .mfui-v6-info-card__more-info {
196
199
  padding-top: 8px;
197
200
  }
201
+ @media screen and (min-width: 768px) {
202
+ .mfui-v6-info-card_size_big.mfui-v6-info-card_align-center {
203
+ -webkit-box-align: center;
204
+ -ms-flex-align: center;
205
+ align-items: center;
206
+ }
207
+ }
208
+ @media screen and (min-width: 768px) {
209
+ .mfui-v6-info-card_size_big.mfui-v6-info-card_align-center .mfui-v6-info-card__more-info {
210
+ margin-top: 0;
211
+ }
212
+ }
213
+ .mfui-v6-info-card_position_right-side.mfui-v6-info-card_align-center {
214
+ -webkit-box-align: center;
215
+ -ms-flex-align: center;
216
+ align-items: center;
217
+ }
218
+ .mfui-v6-info-card_position_right-side.mfui-v6-info-card_align-center .mfui-v6-info-card__more-info {
219
+ margin-top: 0;
220
+ }
198
221
  .mfui-v6-info-card_background_stroke {
199
222
  border: 1px solid var(--spbSky2);
200
223
  }
@@ -218,20 +241,20 @@ h5 {
218
241
  .mfui-v6-info-card_background_no {
219
242
  padding: 0;
220
243
  }
221
- .mfui-v6-info-card_background_stroke.mfui-v6-info-card_link:hover {
244
+ .mfui-v6-info-card_background_stroke.mfui-v6-info-card_active:hover {
222
245
  background-color: var(--spbSky0);
223
246
  }
224
- .mfui-v6-info-card_background_shadow.mfui-v6-info-card_link:hover,
225
- .mfui-v6-info-card_background_white.mfui-v6-info-card_link:hover {
247
+ .mfui-v6-info-card_background_shadow.mfui-v6-info-card_active:hover,
248
+ .mfui-v6-info-card_background_white.mfui-v6-info-card_active:hover {
226
249
  -webkit-box-shadow: 0 8px 28px rgba(0, 0, 0, 0.1);
227
250
  box-shadow: 0 8px 28px rgba(0, 0, 0, 0.1);
228
251
  }
229
- .mfui-v6-info-card_background_gray.mfui-v6-info-card_link:hover {
252
+ .mfui-v6-info-card_background_gray.mfui-v6-info-card_active:hover {
230
253
  background-color: var(--spbSky1);
231
254
  }
232
- .mfui-v6-info-card_background_purple.mfui-v6-info-card_link:hover {
255
+ .mfui-v6-info-card_background_purple.mfui-v6-info-card_active:hover {
233
256
  background-color: var(--buttonHoverPurpleSoft);
234
257
  }
235
- .mfui-v6-info-card_background_green.mfui-v6-info-card_link:hover {
258
+ .mfui-v6-info-card_background_green.mfui-v6-info-card_active:hover {
236
259
  background-color: var(--buttonHoverGreenSoft);
237
260
  }
@@ -3,6 +3,10 @@ import { IInfoCardData, IInfoCardSettings } from '../../types';
3
3
  import './InfoCard.less';
4
4
  export interface IInfoCard extends IInfoCardSettings, IInfoCardData {
5
5
  className?: string;
6
+ classes?: {
7
+ root?: string;
8
+ title?: string;
9
+ };
6
10
  dataAttrs?: {
7
11
  root?: Record<string, string>;
8
12
  title?: Record<string, string>;
@@ -55,20 +55,23 @@ var InfoCard = function InfoCard(_ref) {
55
55
  href = _ref.href,
56
56
  target = _ref.target,
57
57
  rel = _ref.rel,
58
+ download = _ref.download,
58
59
  moreInfo = _ref.moreInfo,
60
+ onClick = _ref.onClick,
59
61
  _ref$size = _ref.size,
60
62
  size = _ref$size === void 0 ? 'medium' : _ref$size,
61
- _ref$imgPosition = _ref.imgPosition,
62
- imgPosition = _ref$imgPosition === void 0 ? 'right-side' : _ref$imgPosition,
63
+ imgPosition = _ref.imgPosition,
63
64
  _ref$background = _ref.background,
64
65
  background = _ref$background === void 0 ? 'stroke' : _ref$background,
65
- dataAttrs = _ref.dataAttrs;
66
+ dataAttrs = _ref.dataAttrs,
67
+ classes = _ref.classes;
66
68
  var RootElement = href ? 'a' : 'div';
67
69
  var isBigSize = size === 'big';
68
70
  var finalImgPosition = isBigSize ? false : imgPosition;
69
71
  var isInvalidBackground = background === 'no' && (imgPosition === 'right-side' || size === 'big');
70
72
  var finalBackground = isInvalidBackground ? 'stroke' : background;
71
73
  var isLink = !!href;
74
+ var isActive = isLink || !!onClick;
72
75
 
73
76
  var renderArrowRight = function renderArrowRight() {
74
77
  var ArrowRight = isBigSize ? ArrowRight24 : ArrowRight16;
@@ -81,12 +84,15 @@ var InfoCard = function InfoCard(_ref) {
81
84
  href: isLink ? href : undefined,
82
85
  target: isLink ? target : undefined,
83
86
  rel: isLink ? (0, _setRelAttribute.setRelAttribute)(rel, target) : undefined,
87
+ download: isLink ? download : undefined,
88
+ onClick: onClick,
84
89
  className: cn({
85
90
  size: size,
86
91
  position: finalImgPosition,
87
92
  background: finalBackground,
88
- link: isLink
89
- }, [className])
93
+ active: isActive,
94
+ 'align-center': !moreInfo
95
+ }, [className, classes === null || classes === void 0 ? void 0 : classes.root])
90
96
  }), /*#__PURE__*/React.createElement("img", {
91
97
  className: cn('image'),
92
98
  src: imgSrc,
@@ -94,18 +100,22 @@ var InfoCard = function InfoCard(_ref) {
94
100
  }), /*#__PURE__*/React.createElement("div", {
95
101
  className: cn('content')
96
102
  }, !!title && /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.title), {
97
- className: cn('title')
98
- }), title), !!description && /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.description), {
103
+ className: cn('title', [classes === null || classes === void 0 ? void 0 : classes.title])
104
+ }), (0, _uiHelpers.convert)(title, {})), !!description && /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.description), {
99
105
  className: cn('description')
100
- }), description), !!moreInfo && /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.moreInfo), {
106
+ }), (0, _uiHelpers.convert)(description, {})), !!moreInfo && /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.moreInfo), {
101
107
  className: cn('more-info')
102
108
  }), /*#__PURE__*/React.createElement("span", {
103
109
  className: cn('more-info-text')
104
- }, moreInfo), isLink && renderArrowRight())));
110
+ }, (0, _uiHelpers.convert)(moreInfo, {})), isActive && renderArrowRight())));
105
111
  };
106
112
 
107
113
  InfoCard.propTypes = {
108
114
  className: _propTypes["default"].string,
115
+ classes: _propTypes["default"].shape({
116
+ root: _propTypes["default"].string,
117
+ title: _propTypes["default"].string
118
+ }),
109
119
  dataAttrs: _propTypes["default"].shape({
110
120
  root: _propTypes["default"].objectOf(_propTypes["default"].string.isRequired),
111
121
  title: _propTypes["default"].objectOf(_propTypes["default"].string.isRequired),
@@ -1,10 +1,11 @@
1
+ import React from 'react';
1
2
  export interface IInfoCardSettings {
2
3
  /** Размер карточки */
3
4
  size?: 'big' | 'medium' | 'small';
4
5
  /** Расположение изображения */
5
6
  imgPosition?: 'right-side' | 'top-left';
6
7
  /** Фон карточки */
7
- background?: 'shadow' | 'stroke' | 'gray' | 'green' | 'purple' | 'white' | 'gray' | 'no';
8
+ background?: 'shadow' | 'stroke' | 'gray' | 'green' | 'purple' | 'white' | 'no';
8
9
  }
9
10
  export interface IInfoCardData {
10
11
  /** Заголовок */
@@ -21,6 +22,10 @@ export interface IInfoCardData {
21
22
  target?: '_self' | '_blank';
22
23
  /** Атрибут rel ссылки */
23
24
  rel?: string;
25
+ /** Добавление атрибута download для ссылки */
26
+ download?: boolean;
24
27
  /** Дополнительная информация */
25
28
  moreInfo?: string;
29
+ /** Обработчик клика */
30
+ onClick?: (e: React.SyntheticEvent<EventTarget>) => void;
26
31
  }
@@ -0,0 +1,28 @@
1
+ import * as React from 'react';
2
+ import { Carousel } from '@megafon/ui-core';
3
+ import { IPromoCardData, IPromoCardSettings } from './types';
4
+ declare type CarouselProps = React.ComponentProps<typeof Carousel>;
5
+ export interface IPromoCards extends IPromoCardSettings {
6
+ /** Список карточек. Минимальное количество 2 карточки */
7
+ items: IPromoCardData[];
8
+ /** Тема навигации для карусели */
9
+ carouselNavTheme?: CarouselProps['navTheme'];
10
+ /** Цвет градиента для карусели */
11
+ carouselGradientColor?: CarouselProps['gradientColor'];
12
+ /** Дополнительный css класс для корневого элемента */
13
+ className?: string;
14
+ /** Дополнительные css классы для корневого и внутренних элементов */
15
+ classes?: {
16
+ root?: string;
17
+ card?: string;
18
+ };
19
+ /** Дополнительные data атрибуты к внутренним элементам */
20
+ dataAttrs?: {
21
+ root?: Record<string, string>;
22
+ card?: Record<string, string>;
23
+ };
24
+ /** Ссылка на элемент */
25
+ rootRef?: React.Ref<HTMLDivElement>;
26
+ }
27
+ declare const PromoCards: React.FC<IPromoCards>;
28
+ export default PromoCards;
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ require("core-js/modules/es.array.map.js");
15
+
16
+ var React = _interopRequireWildcard(require("react"));
17
+
18
+ var _uiCore = require("@megafon/ui-core");
19
+
20
+ var _uiHelpers = require("@megafon/ui-helpers");
21
+
22
+ var _propTypes = _interopRequireDefault(require("prop-types"));
23
+
24
+ var _PromoCard = _interopRequireDefault(require("./components/PromoCard/PromoCard"));
25
+
26
+ 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); }
27
+
28
+ 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; }
29
+
30
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
31
+
32
+ var _slidesSettings;
33
+
34
+ var slidesSettings = (_slidesSettings = {}, (0, _defineProperty2["default"])(_slidesSettings, _uiHelpers.breakpoints.MOBILE_SMALL_START, {
35
+ slidesPerView: 1,
36
+ spaceBetween: 16
37
+ }), (0, _defineProperty2["default"])(_slidesSettings, _uiHelpers.breakpoints.MOBILE_BIG_START, {
38
+ slidesPerView: 2,
39
+ spaceBetween: 20
40
+ }), (0, _defineProperty2["default"])(_slidesSettings, _uiHelpers.breakpoints.DESKTOP_SMALL_START, {
41
+ slidesPerView: 3,
42
+ spaceBetween: 20
43
+ }), _slidesSettings);
44
+ var MIN_ITEMS_COUNT = 2;
45
+ var cn = (0, _uiHelpers.cnCreate)('mfui-v6-promo-cards');
46
+
47
+ var PromoCards = function PromoCards(_ref) {
48
+ var items = _ref.items,
49
+ carouselNavTheme = _ref.carouselNavTheme,
50
+ carouselGradientColor = _ref.carouselGradientColor,
51
+ background = _ref.background,
52
+ dataAttrs = _ref.dataAttrs,
53
+ className = _ref.className,
54
+ classes = _ref.classes,
55
+ rootRef = _ref.rootRef;
56
+
57
+ if (items.length < MIN_ITEMS_COUNT) {
58
+ return null;
59
+ }
60
+
61
+ return /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
62
+ className: cn([className, classes === null || classes === void 0 ? void 0 : classes.root]),
63
+ ref: rootRef
64
+ }), /*#__PURE__*/React.createElement(_uiCore.Carousel, {
65
+ slidesSettings: slidesSettings,
66
+ navTheme: carouselNavTheme,
67
+ gradient: true,
68
+ gradientColor: carouselGradientColor
69
+ }, items.map(function (item, i) {
70
+ return /*#__PURE__*/React.createElement(_PromoCard["default"], (0, _extends2["default"])({}, item, {
71
+ background: background,
72
+ dataAttrs: {
73
+ root: (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.card, i + 1)
74
+ },
75
+ className: cn([classes === null || classes === void 0 ? void 0 : classes.card]),
76
+ key: i + item.title
77
+ }));
78
+ })));
79
+ };
80
+
81
+ PromoCards.propTypes = {
82
+ items: _propTypes["default"].arrayOf(_propTypes["default"].shape({
83
+ title: _propTypes["default"].string.isRequired,
84
+ subtitle: _propTypes["default"].string,
85
+ link: _propTypes["default"].shape({
86
+ title: _propTypes["default"].string.isRequired,
87
+ href: _propTypes["default"].string.isRequired,
88
+ target: _propTypes["default"].oneOf(['_self', '_blank']),
89
+ rel: _propTypes["default"].string
90
+ }).isRequired,
91
+ image: _propTypes["default"].shape({
92
+ src: _propTypes["default"].string.isRequired,
93
+ src2x: _propTypes["default"].string,
94
+ alt: _propTypes["default"].string
95
+ }).isRequired,
96
+ logo: _propTypes["default"].shape({
97
+ src: _propTypes["default"].string,
98
+ alt: _propTypes["default"].string
99
+ }),
100
+ badge: _propTypes["default"].oneOf([_propTypes["default"].element, null])
101
+ }).isRequired).isRequired,
102
+ background: _propTypes["default"].oneOf(['white', 'gray', 'shadow']),
103
+ className: _propTypes["default"].string,
104
+ classes: _propTypes["default"].objectOf(_propTypes["default"].string),
105
+ dataAttrs: _propTypes["default"].objectOf(_propTypes["default"].object),
106
+ carouselNavTheme: _propTypes["default"].oneOf(['light', 'green']),
107
+ carouselGradientColor: _propTypes["default"].oneOf(['green', 'default', 'black', 'spbSky0', 'spbSky1', 'spbSky2']),
108
+ rootRef: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].oneOfType([_propTypes["default"].shape({
109
+ current: _propTypes["default"].elementType
110
+ }), _propTypes["default"].any])])
111
+ };
112
+ var _default = PromoCards;
113
+ exports["default"] = _default;
@@ -0,0 +1,157 @@
1
+ h1,
2
+ h2,
3
+ h3,
4
+ h4,
5
+ h5 {
6
+ margin: 0;
7
+ }
8
+ .mfui-v6-promo-card {
9
+ display: -webkit-box;
10
+ display: -ms-flexbox;
11
+ display: flex;
12
+ -webkit-box-orient: vertical;
13
+ -webkit-box-direction: normal;
14
+ -ms-flex-direction: column;
15
+ flex-direction: column;
16
+ min-height: 100%;
17
+ border-radius: 24px;
18
+ color: var(--content);
19
+ text-decoration: none;
20
+ background-color: var(--base);
21
+ cursor: pointer;
22
+ -webkit-transition: background-color, 0.3s, 0.3s, -webkit-box-shadow;
23
+ transition: background-color, 0.3s, 0.3s, -webkit-box-shadow;
24
+ transition: background-color, 0.3s, box-shadow, 0.3s;
25
+ transition: background-color, 0.3s, box-shadow, 0.3s, -webkit-box-shadow;
26
+ }
27
+ .mfui-v6-promo-card_background_shadow {
28
+ -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
29
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
30
+ }
31
+ .mfui-v6-promo-card_background_white:hover,
32
+ .mfui-v6-promo-card_background_shadow:hover {
33
+ text-decoration: none;
34
+ -webkit-box-shadow: 0 8px 28px 0 rgba(0, 0, 0, 0.1);
35
+ box-shadow: 0 8px 28px 0 rgba(0, 0, 0, 0.1);
36
+ }
37
+ .mfui-v6-promo-card_background_gray {
38
+ background-color: var(--spbSky0);
39
+ }
40
+ .mfui-v6-promo-card_background_gray:hover {
41
+ text-decoration: none;
42
+ background-color: var(--spbSky1);
43
+ }
44
+ .mfui-v6-promo-card__image {
45
+ width: 100%;
46
+ border-radius: inherit;
47
+ vertical-align: top;
48
+ }
49
+ .mfui-v6-promo-card__content {
50
+ position: relative;
51
+ display: -webkit-box;
52
+ display: -ms-flexbox;
53
+ display: flex;
54
+ -webkit-box-orient: vertical;
55
+ -webkit-box-direction: normal;
56
+ -ms-flex-direction: column;
57
+ flex-direction: column;
58
+ -webkit-box-flex: 1;
59
+ -ms-flex-positive: 1;
60
+ flex-grow: 1;
61
+ padding: 32px 24px;
62
+ }
63
+ @media screen and (min-width: 1280px) {
64
+ .mfui-v6-promo-card__content {
65
+ padding: 32px;
66
+ }
67
+ }
68
+ .mfui-v6-promo-card__badge {
69
+ position: absolute;
70
+ top: 0;
71
+ left: 24px;
72
+ translate: 0 -50%;
73
+ }
74
+ @media screen and (min-width: 1280px) {
75
+ .mfui-v6-promo-card__badge {
76
+ left: 32px;
77
+ }
78
+ }
79
+ .mfui-v6-promo-card__logo {
80
+ position: absolute;
81
+ top: 0;
82
+ right: 44px;
83
+ border: 4px solid var(--base);
84
+ border-radius: 50%;
85
+ translate: 0 -50%;
86
+ background-color: var(--base);
87
+ -webkit-transition: border-color, 0.3s;
88
+ transition: border-color, 0.3s;
89
+ }
90
+ @media screen and (min-width: 1280px) {
91
+ .mfui-v6-promo-card__logo {
92
+ right: 52px;
93
+ }
94
+ }
95
+ .mfui-v6-promo-card__logo:before,
96
+ .mfui-v6-promo-card__logo:after {
97
+ content: '';
98
+ position: absolute;
99
+ top: 50%;
100
+ width: 10px;
101
+ height: 10px;
102
+ translate: 0 -100%;
103
+ }
104
+ .mfui-v6-promo-card__logo:before {
105
+ background-image: radial-gradient(circle at 0 0, rgba(0, 0, 0, 0) 9px, var(--base) 10px);
106
+ left: -12px;
107
+ }
108
+ .mfui-v6-promo-card__logo:after {
109
+ background-image: radial-gradient(circle at 100% 0, rgba(0, 0, 0, 0) 9px, var(--base) 10px);
110
+ right: -12px;
111
+ }
112
+ .mfui-v6-promo-card_background_gray .mfui-v6-promo-card__logo {
113
+ border-color: var(--spbSky0);
114
+ background-color: var(--spbSky0);
115
+ }
116
+ .mfui-v6-promo-card_background_gray .mfui-v6-promo-card__logo:before {
117
+ background-image: radial-gradient(circle at 0 0, rgba(0, 0, 0, 0) 9px, var(--spbSky0) 10px);
118
+ }
119
+ .mfui-v6-promo-card_background_gray .mfui-v6-promo-card__logo:after {
120
+ background-image: radial-gradient(circle at 100% 0, rgba(0, 0, 0, 0) 9px, var(--spbSky0) 10px);
121
+ }
122
+ .mfui-v6-promo-card_background_gray:hover .mfui-v6-promo-card__logo {
123
+ border-color: var(--spbSky1);
124
+ background-color: var(--spbSky1);
125
+ }
126
+ .mfui-v6-promo-card_background_gray:hover .mfui-v6-promo-card__logo:before {
127
+ background-image: radial-gradient(circle at 0 0, rgba(0, 0, 0, 0) 9px, var(--spbSky1) 10px);
128
+ }
129
+ .mfui-v6-promo-card_background_gray:hover .mfui-v6-promo-card__logo:after {
130
+ background-image: radial-gradient(circle at 100% 0, rgba(0, 0, 0, 0) 9px, var(--spbSky1) 10px);
131
+ }
132
+ .mfui-v6-promo-card__logo-img {
133
+ width: 56px;
134
+ height: 56px;
135
+ border: 1px solid var(--spbSky1);
136
+ border-radius: inherit;
137
+ vertical-align: top;
138
+ }
139
+ @media screen and (min-width: 768px) {
140
+ .mfui-v6-promo-card__logo-img {
141
+ width: 64px;
142
+ height: 64px;
143
+ }
144
+ }
145
+ @media screen and (min-width: 1280px) {
146
+ .mfui-v6-promo-card__logo-img {
147
+ width: 72px;
148
+ height: 72px;
149
+ }
150
+ }
151
+ .mfui-v6-promo-card__subtitle {
152
+ margin-top: 8px;
153
+ }
154
+ .mfui-v6-promo-card__footer {
155
+ margin-top: auto;
156
+ padding-top: 16px;
157
+ }
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+ import { IPromoCardData, IPromoCardSettings } from '../../types';
3
+ import './PromoCard.less';
4
+ export interface IPromoCard extends IPromoCardData, IPromoCardSettings {
5
+ className?: string;
6
+ classes?: {
7
+ root?: string;
8
+ };
9
+ dataAttrs?: {
10
+ root?: Record<string, string>;
11
+ image?: Record<string, string>;
12
+ badge?: Record<string, string>;
13
+ logo?: Record<string, string>;
14
+ subtitle?: Record<string, string>;
15
+ };
16
+ }
17
+ declare const PromoCard: React.FC<IPromoCard>;
18
+ export default PromoCard;