@megafon/ui-shared 5.11.0 → 5.13.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 (32) 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/ButtonBanner/ButtonBanner.d.ts +7 -0
  7. package/dist/es/components/ButtonBanner/ButtonBanner.js +8 -0
  8. package/dist/es/components/ImageBanner/ImageBanner.css +3 -0
  9. package/dist/es/components/ImageBanner/ImageBanner.d.ts +7 -0
  10. package/dist/es/components/ImageBanner/ImageBanner.js +15 -7
  11. package/dist/es/components/Instructions/Instructions.css +176 -39
  12. package/dist/es/components/Instructions/Instructions.d.ts +9 -0
  13. package/dist/es/components/Instructions/Instructions.js +35 -21
  14. package/dist/es/components/Instructions/img/iphone15.png +0 -0
  15. package/dist/es/components/Instructions/img/laptop-new.png +0 -0
  16. package/dist/es/helpers/getColumnConfig.d.ts +1 -1
  17. package/dist/lib/components/BenefitsIcons/BenefitsIcons.d.ts +4 -0
  18. package/dist/lib/components/BenefitsIcons/BenefitsIcons.js +24 -5
  19. package/dist/lib/components/BenefitsIcons/BenefitsIconsTile.js +26 -11
  20. package/dist/lib/components/BenefitsIcons/types.d.ts +12 -0
  21. package/dist/lib/components/ButtonBanner/ButtonBanner.d.ts +7 -0
  22. package/dist/lib/components/ButtonBanner/ButtonBanner.js +10 -1
  23. package/dist/lib/components/ImageBanner/ImageBanner.css +3 -0
  24. package/dist/lib/components/ImageBanner/ImageBanner.d.ts +7 -0
  25. package/dist/lib/components/ImageBanner/ImageBanner.js +15 -7
  26. package/dist/lib/components/Instructions/Instructions.css +176 -39
  27. package/dist/lib/components/Instructions/Instructions.d.ts +9 -0
  28. package/dist/lib/components/Instructions/Instructions.js +39 -22
  29. package/dist/lib/components/Instructions/img/iphone15.png +0 -0
  30. package/dist/lib/components/Instructions/img/laptop-new.png +0 -0
  31. package/dist/lib/helpers/getColumnConfig.d.ts +1 -1
  32. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -3,6 +3,36 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [5.13.0](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-shared@5.12.0...@megafon/ui-shared@5.13.0) (2024-06-17)
7
+
8
+
9
+ ### Features
10
+
11
+ * **buttonbanner:** add prop buttonType ([adff95d](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/adff95de303e64fd51829001a276fa9696fb4676))
12
+
13
+
14
+
15
+
16
+
17
+ # [5.12.0](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-shared@5.11.0...@megafon/ui-shared@5.12.0) (2024-06-10)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **imagebanner:** fix ad block position ([6f958b4](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/6f958b477cc936bf969e244a07dc0ed63279484b))
23
+
24
+
25
+ ### Features
26
+
27
+ * **benefitsicons:** add dataAttrs and classes ([815db75](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/815db75aece85803a0055a531bd92db49d514652))
28
+ * **benefitsicons:** review fixes ([229c5f7](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/229c5f73fa9609495a146cfa562db2478752c3b4))
29
+ * **imagebanner:** add classes props for ImageBanner ([42d2738](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/42d2738a6c77bf780b9a47fd27353083d0f7d7a0))
30
+ * **insctructions:** add new views ([4470aec](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/4470aec0acaf59ae2d3b0979c59ec7760237221c))
31
+
32
+
33
+
34
+
35
+
6
36
  # [5.11.0](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-shared@5.10.2...@megafon/ui-shared@5.11.0) (2024-06-03)
7
37
 
8
38
 
@@ -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
  /** Позиция иконки */
@@ -4,7 +4,7 @@ import "core-js/modules/es.array.map.js";
4
4
  import "core-js/modules/es.object.values.js";
5
5
  import * as React from 'react';
6
6
  import { Grid, GridColumn } from '@megafon/ui-core';
7
- import { cnCreate, breakpoints } from '@megafon/ui-helpers';
7
+ import { cnCreate, breakpoints, filterDataAttrs } from '@megafon/ui-helpers';
8
8
  import throttle from 'lodash.throttle';
9
9
  import PropTypes from 'prop-types';
10
10
  import throttleTime from "../../constants/throttleTime";
@@ -16,7 +16,8 @@ var testIdPrefix = 'BenefitsIcons';
16
16
  var cn = cnCreate('mfui-benefits-icons');
17
17
 
18
18
  var BenefitsIcons = function BenefitsIcons(_ref) {
19
- var rootRef = _ref.rootRef,
19
+ var dataAttrs = _ref.dataAttrs,
20
+ rootRef = _ref.rootRef,
20
21
  _ref$iconPosition = _ref.iconPosition,
21
22
  iconPosition = _ref$iconPosition === void 0 ? 'left-top' : _ref$iconPosition,
22
23
  _ref$background = _ref.background,
@@ -59,13 +60,13 @@ var BenefitsIcons = function BenefitsIcons(_ref) {
59
60
  window.removeEventListener('resize', resizeHandlerThrottled);
60
61
  };
61
62
  }, [iconPosition, inOneColumn, resizeHandler]);
62
- return /*#__PURE__*/React.createElement("div", {
63
+ return /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
63
64
  className: cn({
64
65
  'one-column': inOneColumn,
65
66
  background: background
66
67
  }, [className, classes.root]),
67
68
  ref: rootRef
68
- }, /*#__PURE__*/React.createElement("div", {
69
+ }), /*#__PURE__*/React.createElement("div", {
69
70
  className: cn('inner')
70
71
  }, /*#__PURE__*/React.createElement(Grid, {
71
72
  className: classes.grid,
@@ -83,7 +84,9 @@ var BenefitsIcons = function BenefitsIcons(_ref) {
83
84
  var title = _ref2.title,
84
85
  text = _ref2.text,
85
86
  icon = _ref2.icon,
86
- alt = _ref2.alt;
87
+ alt = _ref2.alt,
88
+ itemClasses = _ref2.classes,
89
+ itemDataAttrs = _ref2.dataAttrs;
87
90
  var columnConfig = inOneColumn ? getOneColumnConfig(iconPosition) : getMultiColumnConfig(iconPosition, items.length, i);
88
91
  return /*#__PURE__*/React.createElement(GridColumn, _extends({
89
92
  className: cn('column', [classes.gridColumn]),
@@ -95,6 +98,8 @@ var BenefitsIcons = function BenefitsIcons(_ref) {
95
98
  }
96
99
  }, columnConfig), /*#__PURE__*/React.createElement(BenefitsIconsTile, {
97
100
  className: cn('tile', [classes.item]),
101
+ classes: itemClasses,
102
+ dataAttrs: itemDataAttrs,
98
103
  title: title,
99
104
  text: text,
100
105
  icon: icon,
@@ -106,6 +111,9 @@ var BenefitsIcons = function BenefitsIcons(_ref) {
106
111
  };
107
112
 
108
113
  BenefitsIcons.propTypes = {
114
+ dataAttrs: PropTypes.shape({
115
+ root: PropTypes.objectOf(PropTypes.string.isRequired)
116
+ }),
109
117
  rootRef: PropTypes.oneOfType([PropTypes.func, PropTypes.oneOfType([PropTypes.shape({
110
118
  current: PropTypes.elementType
111
119
  }), PropTypes.any])]),
@@ -113,9 +121,20 @@ BenefitsIcons.propTypes = {
113
121
  background: PropTypes.oneOf(Object.values(BackgroundEnum)),
114
122
  inOneColumn: PropTypes.bool,
115
123
  items: PropTypes.arrayOf(PropTypes.shape({
124
+ dataAttrs: PropTypes.shape({
125
+ root: PropTypes.objectOf(PropTypes.string.isRequired)
126
+ }),
127
+ classes: PropTypes.shape({
128
+ root: PropTypes.string,
129
+ icon: PropTypes.string,
130
+ title: PropTypes.string,
131
+ text: PropTypes.string,
132
+ contentWrapper: PropTypes.string
133
+ }),
116
134
  title: PropTypes.oneOfType([PropTypes.string, PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),
117
135
  text: PropTypes.oneOfType([PropTypes.string, PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),
118
- icon: PropTypes.node.isRequired
136
+ icon: PropTypes.node.isRequired,
137
+ alt: PropTypes.string
119
138
  }).isRequired).isRequired,
120
139
  className: PropTypes.string,
121
140
  classes: PropTypes.shape({
@@ -1,7 +1,8 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
1
2
  import "core-js/modules/es.object.values.js";
2
3
  import * as React from 'react';
3
4
  import { Header } from '@megafon/ui-core';
4
- import { cnCreate } from '@megafon/ui-helpers';
5
+ import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
5
6
  import PropTypes from 'prop-types';
6
7
  import { IconPositionEnum, BackgroundEnum } from "./types";
7
8
  import "./style/BenefitsIconsTile.css";
@@ -9,7 +10,10 @@ var testIdPrefix = 'BenefitsIconsTile';
9
10
  var cn = cnCreate('mfui-benefits-icons-tile');
10
11
 
11
12
  var BenefitsIconsTile = function BenefitsIconsTile(_ref) {
12
- var title = _ref.title,
13
+ var dataAttrs = _ref.dataAttrs,
14
+ _ref$classes = _ref.classes,
15
+ classes = _ref$classes === void 0 ? {} : _ref$classes,
16
+ title = _ref.title,
13
17
  text = _ref.text,
14
18
  icon = _ref.icon,
15
19
  iconPosition = _ref.iconPosition,
@@ -20,7 +24,7 @@ var BenefitsIconsTile = function BenefitsIconsTile(_ref) {
20
24
  var renderIcon = function renderIcon() {
21
25
  if (typeof icon === 'string') {
22
26
  return /*#__PURE__*/React.createElement("img", {
23
- className: cn('img-icon'),
27
+ className: cn('img-icon', [classes.icon]),
24
28
  src: icon,
25
29
  alt: alt,
26
30
  "data-testid": "".concat(testIdPrefix, "-img")
@@ -28,32 +32,42 @@ var BenefitsIconsTile = function BenefitsIconsTile(_ref) {
28
32
  }
29
33
 
30
34
  return /*#__PURE__*/React.createElement("div", {
31
- className: cn('svg-icon'),
35
+ className: cn('svg-icon', [classes.icon]),
32
36
  "data-testid": "".concat(testIdPrefix, "-svg")
33
37
  }, icon);
34
38
  };
35
39
 
36
- return /*#__PURE__*/React.createElement("div", {
40
+ return /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
37
41
  className: cn({
38
42
  'icon-position': iconPosition,
39
43
  background: background,
40
44
  image: typeof icon === 'string'
41
- }, [className]),
45
+ }, [className, classes.root]),
42
46
  "data-testid": "".concat(testIdPrefix, "-root")
43
- }, /*#__PURE__*/React.createElement("div", {
47
+ }), /*#__PURE__*/React.createElement("div", {
44
48
  className: cn('inner')
45
49
  }, renderIcon(), /*#__PURE__*/React.createElement("div", {
46
- className: cn('content-wrapper')
50
+ className: cn('content-wrapper', [classes.contentWrapper])
47
51
  }, title && /*#__PURE__*/React.createElement(Header, {
48
- className: cn('title'),
52
+ className: cn('title', [classes.title]),
49
53
  as: "h5"
50
54
  }, title), text && /*#__PURE__*/React.createElement("div", {
51
- className: cn('content')
55
+ className: cn('content', [classes.text])
52
56
  }, text))));
53
57
  };
54
58
 
55
59
  BenefitsIconsTile.propTypes = {
60
+ dataAttrs: PropTypes.shape({
61
+ root: PropTypes.objectOf(PropTypes.string.isRequired)
62
+ }),
56
63
  className: PropTypes.string,
64
+ classes: PropTypes.shape({
65
+ root: PropTypes.string,
66
+ icon: PropTypes.string,
67
+ title: PropTypes.string,
68
+ text: PropTypes.string,
69
+ contentWrapper: PropTypes.string
70
+ }),
57
71
  title: PropTypes.oneOfType([PropTypes.string, PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),
58
72
  text: PropTypes.oneOfType([PropTypes.string, PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),
59
73
  iconPosition: PropTypes.oneOf(Object.values(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
  /** Основной текст в бенефите */
@@ -5,6 +5,11 @@ export declare const ButtonColor: {
5
5
  readonly PURPLE: "purple";
6
6
  };
7
7
  declare type ButtonColorType = typeof ButtonColor[keyof typeof ButtonColor];
8
+ export declare const ButtonTypes: {
9
+ readonly PRIMARY: "primary";
10
+ readonly OUTLINE: "outline";
11
+ };
12
+ declare type ButtonTypesType = typeof ButtonTypes[keyof typeof ButtonTypes];
8
13
  export declare const ButtonTarget: {
9
14
  readonly SELF: "_self";
10
15
  readonly BLANK: "_blank";
@@ -46,6 +51,8 @@ export interface IButtonBannerProps {
46
51
  buttonTarget?: ButtonTargetType;
47
52
  /** Цвет кнопки */
48
53
  buttonColor?: ButtonColorType;
54
+ /** Тип кнопки */
55
+ buttonType?: ButtonTypesType;
49
56
  /** Rel - атрибут тега <a> */
50
57
  buttonRel?: string;
51
58
  /** Масштабирование изображения */
@@ -9,6 +9,10 @@ export var ButtonColor = {
9
9
  GREEN: 'green',
10
10
  PURPLE: 'purple'
11
11
  };
12
+ export var ButtonTypes = {
13
+ PRIMARY: 'primary',
14
+ OUTLINE: 'outline'
15
+ };
12
16
  export var ButtonTarget = {
13
17
  SELF: '_self',
14
18
  BLANK: '_blank'
@@ -44,6 +48,8 @@ var ButtonBanner = function ButtonBanner(_ref) {
44
48
  buttonTarget = _ref$buttonTarget === void 0 ? '_self' : _ref$buttonTarget,
45
49
  _ref$buttonColor = _ref.buttonColor,
46
50
  buttonColor = _ref$buttonColor === void 0 ? 'green' : _ref$buttonColor,
51
+ _ref$buttonType = _ref.buttonType,
52
+ buttonType = _ref$buttonType === void 0 ? 'primary' : _ref$buttonType,
47
53
  buttonRel = _ref.buttonRel,
48
54
  _ref$imageScaling = _ref.imageScaling,
49
55
  imageScaling = _ref$imageScaling === void 0 ? 'cover' : _ref$imageScaling,
@@ -57,6 +63,7 @@ var ButtonBanner = function ButtonBanner(_ref) {
57
63
  rel: buttonRel,
58
64
  target: buttonTarget,
59
65
  theme: buttonColor,
66
+ type: buttonType,
60
67
  onClick: onButtonClick,
61
68
  download: buttonDownload
62
69
  }, buttonText);
@@ -113,6 +120,7 @@ ButtonBanner.propTypes = {
113
120
  buttonDownload: PropTypes.bool,
114
121
  buttonTarget: PropTypes.oneOf(Object.values(ButtonTarget)),
115
122
  buttonColor: PropTypes.oneOf(Object.values(ButtonColor)),
123
+ buttonType: PropTypes.oneOf(Object.values(ButtonTypes)),
116
124
  buttonRel: PropTypes.string,
117
125
  onButtonClick: PropTypes.func
118
126
  };
@@ -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>;
@@ -92,32 +92,33 @@ var ImageBanner = function ImageBanner(_ref2) {
92
92
  var navTheme = getTheme(backgroundColor);
93
93
  var hasImage = !!(imageMobile || imageMobile2x || imageDesktop || imageDesktop2x);
94
94
  var renderBadges = !!badges.length && /*#__PURE__*/React.createElement("div", {
95
- className: cn('badges')
95
+ className: cn('badges', [classes.badges])
96
96
  }, badges.map(function (_ref3) {
97
97
  var text = _ref3.text,
98
98
  iconType = _ref3.iconType;
99
99
  return /*#__PURE__*/React.createElement(PriceBadge, {
100
+ className: classes.badge,
100
101
  theme: navTheme,
101
102
  iconType: iconType,
102
103
  key: text
103
104
  }, text);
104
105
  }));
105
106
  var renderAdBlock = !!adBlock && /*#__PURE__*/React.createElement("div", {
106
- className: cn('ad-block')
107
+ className: cn('ad-block', [classes.adBlock])
107
108
  }, adBlock);
108
109
  var renderContent = /*#__PURE__*/React.createElement("div", {
109
110
  className: cn('content')
110
111
  }, /*#__PURE__*/React.createElement("div", {
111
- className: cn('badges-container')
112
+ className: cn('badges-container', [classes.badgesContainer])
112
113
  }, renderBadges, renderAdBlock), !!title && /*#__PURE__*/React.createElement(Header, {
113
- className: cn('title'),
114
+ className: cn('title', [classes.title]),
114
115
  color: "inherit"
115
116
  }, typeof title === 'string' ? convert(title, titleConvertConfig) : title), !!description && /*#__PURE__*/React.createElement(Header, {
116
- className: cn('description'),
117
+ className: cn('description', [classes.description]),
117
118
  as: "h5",
118
119
  color: "inherit"
119
120
  }, typeof description === 'string' ? convert(description, titleConvertConfig) : description), !!cost && /*#__PURE__*/React.createElement("div", {
120
- className: cn('cost')
121
+ className: cn('cost', [classes.cost])
121
122
  }, convert(cost, typographyConfig)), !!children && !!React.Children.count(children) && /*#__PURE__*/React.createElement("div", {
122
123
  className: cn('children')
123
124
  }, children));
@@ -158,7 +159,14 @@ ImageBanner.propTypes = {
158
159
  className: PropTypes.string,
159
160
  classes: PropTypes.shape({
160
161
  root: PropTypes.string,
161
- image: PropTypes.string
162
+ image: PropTypes.string,
163
+ title: PropTypes.string,
164
+ description: PropTypes.string,
165
+ cost: PropTypes.string,
166
+ badgesContainer: PropTypes.string,
167
+ badges: PropTypes.string,
168
+ badge: PropTypes.string,
169
+ adBlock: PropTypes.string
162
170
  }),
163
171
  rootRef: PropTypes.oneOfType([PropTypes.func, PropTypes.oneOfType([PropTypes.shape({
164
172
  current: PropTypes.elementType