@megafon/ui-shared 5.1.0 → 5.2.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
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.2.0](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-shared@5.1.0...@megafon/ui-shared@5.2.0) (2023-09-21)
7
+
8
+
9
+ ### Features
10
+
11
+ * **property:** add type ReactNode to props item.value ([5f59136](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/5f59136ffdc6fc863a6910bd45f17c6783be19c8))
12
+ * **table:** add vAlign and disableHeightLimit props ([813b1ce](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/813b1ceef71576104d8c397cf372c52192daa258))
13
+
14
+
15
+
16
+
17
+
6
18
  # [5.1.0](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-shared@5.0.1...@megafon/ui-shared@5.1.0) (2023-09-14)
7
19
 
8
20
 
@@ -1,5 +1,5 @@
1
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
1
  import _extends from "@babel/runtime/helpers/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  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';
@@ -9,120 +9,10 @@ import throttle from 'lodash.throttle';
9
9
  import PropTypes from 'prop-types';
10
10
  import throttleTime from "../../constants/throttleTime";
11
11
  import BenefitsIconsTile from "./BenefitsIconsTile";
12
+ import getMultiColumnConfig, { getOneColumnConfig } from "./helpers";
12
13
  import { IconPositionEnum, ItemsAlignEnum } from "./types";
13
- import "./style/BenefitsIcons.css"; // left-aligned column with left side icon,
14
-
15
- var getLeftSideConfig = function getLeftSideConfig(count, index) {
16
- var everySecondWithoutOffset = index % 2 ? '1' : undefined;
17
- var columnSize = {
18
- wide: '4',
19
- desktop: '5',
20
- tablet: '10'
21
- };
22
-
23
- switch (count) {
24
- case 2:
25
- case 4:
26
- return _extends(_extends({}, columnSize), {
27
- leftOffsetWide: everySecondWithoutOffset,
28
- leftOffsetDesktop: everySecondWithoutOffset
29
- });
30
-
31
- default:
32
- return _extends(_extends({}, columnSize), {
33
- leftOffsetDesktop: everySecondWithoutOffset
34
- });
35
- }
36
- }; // left-aligned column with left-aligned icon on top
37
-
38
-
39
- var getLeftTopConfig = function getLeftTopConfig(count, index) {
40
- var everySecondWithoutOffset = index % 2 ? '1' : undefined;
41
- var everyThirdWithoutOffset = index % 3 ? '1' : undefined;
42
-
43
- switch (count) {
44
- case 2:
45
- return {
46
- wide: '4',
47
- desktop: '4',
48
- tablet: '5',
49
- leftOffsetWide: everySecondWithoutOffset,
50
- leftOffsetDesktop: everySecondWithoutOffset,
51
- leftOffsetTablet: everySecondWithoutOffset
52
- };
53
-
54
- case 4:
55
- return {
56
- wide: '3',
57
- desktop: '4',
58
- tablet: '5',
59
- leftOffsetDesktop: everySecondWithoutOffset,
60
- leftOffsetTablet: everySecondWithoutOffset
61
- };
62
-
63
- default:
64
- return {
65
- wide: '3',
66
- desktop: '4',
67
- tablet: '5',
68
- leftOffsetWide: everyThirdWithoutOffset,
69
- leftOffsetTablet: everySecondWithoutOffset
70
- };
71
- }
72
- }; // center-aligned column with center-aligned icon on top
73
-
74
-
75
- var getCenterTopConfig = function getCenterTopConfig(count, index) {
76
- var isEvenIndex = !(index % 2);
77
- var everyEvenWithLeftOffset = isEvenIndex ? '1' : undefined;
78
- var everyOddWithRightOffset = isEvenIndex ? undefined : '1';
79
-
80
- switch (count) {
81
- case 4:
82
- return {
83
- wide: '3',
84
- desktop: '5',
85
- tablet: '5',
86
- leftOffsetDesktop: everyEvenWithLeftOffset,
87
- leftOffsetTablet: everyEvenWithLeftOffset,
88
- rightOffsetTablet: everyOddWithRightOffset,
89
- rightOffsetDesktop: everyOddWithRightOffset
90
- };
91
-
92
- default:
93
- return {
94
- wide: '4',
95
- desktop: '4',
96
- tablet: '4'
97
- };
98
- }
99
- };
100
-
101
- var getOneColumnConfig = function getOneColumnConfig(iconPosition) {
102
- return iconPosition !== IconPositionEnum.CENTER_TOP ? {
103
- wide: '10',
104
- desktop: '10',
105
- tablet: '10'
106
- } : {
107
- wide: '12',
108
- desktop: '12',
109
- tablet: '12'
110
- };
111
- };
112
-
113
- var getMultiColumnConfig = function getMultiColumnConfig(iconPosition, count, index) {
114
- switch (iconPosition) {
115
- case IconPositionEnum.LEFT_TOP:
116
- return getLeftTopConfig(count, index);
117
-
118
- case IconPositionEnum.CENTER_TOP:
119
- return getCenterTopConfig(count, index);
120
-
121
- default:
122
- return getLeftSideConfig(count, index);
123
- }
124
- };
125
-
14
+ import "./style/BenefitsIcons.css";
15
+ var testIdPrefix = 'BenefitsIcons';
126
16
  var cn = cnCreate('mfui-benefits-icons');
127
17
 
128
18
  var BenefitsIcons = function BenefitsIcons(_ref) {
@@ -177,7 +67,15 @@ var BenefitsIcons = function BenefitsIcons(_ref) {
177
67
  }, /*#__PURE__*/React.createElement(Grid, {
178
68
  className: classes.grid,
179
69
  guttersLeft: "medium",
180
- hAlign: itemsAlign
70
+ hAlign: itemsAlign,
71
+ dataAttrs: {
72
+ root: {
73
+ 'data-testid': "".concat(testIdPrefix, "-grid-root")
74
+ },
75
+ container: {
76
+ 'data-testid': "".concat(testIdPrefix, "-grid-container")
77
+ }
78
+ }
181
79
  }, items.map(function (_ref2, i) {
182
80
  var title = _ref2.title,
183
81
  text = _ref2.text,
@@ -185,7 +83,12 @@ var BenefitsIcons = function BenefitsIcons(_ref) {
185
83
  var columnConfig = inOneColumn ? getOneColumnConfig(iconPosition) : getMultiColumnConfig(iconPosition, items.length, i);
186
84
  return /*#__PURE__*/React.createElement(GridColumn, _extends({
187
85
  className: classes.gridColumn,
188
- key: i
86
+ key: i,
87
+ dataAttrs: {
88
+ root: {
89
+ 'data-testid': "".concat(testIdPrefix, "-grid-column")
90
+ }
91
+ }
189
92
  }, columnConfig), /*#__PURE__*/React.createElement(BenefitsIconsTile, {
190
93
  className: cn('tile', [classes.item]),
191
94
  title: title,
@@ -5,6 +5,7 @@ import { cnCreate } from '@megafon/ui-helpers';
5
5
  import PropTypes from 'prop-types';
6
6
  import { IconPositionEnum } from "./types";
7
7
  import "./style/BenefitsIconsTile.css";
8
+ var testIdPrefix = 'BenefitsIconsTile';
8
9
  var cn = cnCreate('mfui-benefits-icons-tile');
9
10
 
10
11
  var BenefitsIconsTile = function BenefitsIconsTile(_ref) {
@@ -17,7 +18,8 @@ var BenefitsIconsTile = function BenefitsIconsTile(_ref) {
17
18
  return /*#__PURE__*/React.createElement("div", {
18
19
  className: cn({
19
20
  'icon-position': iconPosition
20
- }, [className])
21
+ }, [className]),
22
+ "data-testid": "".concat(testIdPrefix, "-root")
21
23
  }, /*#__PURE__*/React.createElement("div", {
22
24
  className: cn('svg-icon')
23
25
  }, icon), /*#__PURE__*/React.createElement("div", {
@@ -0,0 +1,8 @@
1
+ import { GridConfig } from './types';
2
+ declare const getLeftSideConfig: (count: number, index: number) => GridConfig;
3
+ declare const getLeftTopConfig: (count: number, index: number) => GridConfig;
4
+ declare const getCenterTopConfig: (count: number, index: number) => GridConfig;
5
+ declare const getOneColumnConfig: (iconPosition: "left-top" | "center-top" | "left-side") => GridConfig;
6
+ declare const getMultiColumnConfig: (iconPosition: "left-top" | "center-top" | "left-side", count: number, index: number) => GridConfig;
7
+ export default getMultiColumnConfig;
8
+ export { getLeftSideConfig, getLeftTopConfig, getCenterTopConfig, getOneColumnConfig };
@@ -0,0 +1,116 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import { IconPositionEnum } from "./types"; // left-aligned column with left side icon
3
+
4
+ var getLeftSideConfig = function getLeftSideConfig(count, index) {
5
+ var everySecondWithoutOffset = index % 2 ? '1' : undefined;
6
+ var columnSize = {
7
+ wide: '4',
8
+ desktop: '5',
9
+ tablet: '10'
10
+ };
11
+
12
+ switch (count) {
13
+ case 2:
14
+ case 4:
15
+ return _extends(_extends({}, columnSize), {
16
+ leftOffsetWide: everySecondWithoutOffset,
17
+ leftOffsetDesktop: everySecondWithoutOffset
18
+ });
19
+
20
+ default:
21
+ return _extends(_extends({}, columnSize), {
22
+ leftOffsetDesktop: everySecondWithoutOffset
23
+ });
24
+ }
25
+ }; // left-aligned column with left-aligned icon on top
26
+
27
+
28
+ var getLeftTopConfig = function getLeftTopConfig(count, index) {
29
+ var everySecondWithoutOffset = index % 2 ? '1' : undefined;
30
+ var everyThirdWithoutOffset = index % 3 ? '1' : undefined;
31
+
32
+ switch (count) {
33
+ case 2:
34
+ return {
35
+ wide: '4',
36
+ desktop: '4',
37
+ tablet: '5',
38
+ leftOffsetWide: everySecondWithoutOffset,
39
+ leftOffsetDesktop: everySecondWithoutOffset,
40
+ leftOffsetTablet: everySecondWithoutOffset
41
+ };
42
+
43
+ case 4:
44
+ return {
45
+ wide: '3',
46
+ desktop: '4',
47
+ tablet: '5',
48
+ leftOffsetDesktop: everySecondWithoutOffset,
49
+ leftOffsetTablet: everySecondWithoutOffset
50
+ };
51
+
52
+ default:
53
+ return {
54
+ wide: '3',
55
+ desktop: '4',
56
+ tablet: '5',
57
+ leftOffsetWide: everyThirdWithoutOffset,
58
+ leftOffsetTablet: everySecondWithoutOffset
59
+ };
60
+ }
61
+ }; // center-aligned column with center-aligned icon on top
62
+
63
+
64
+ var getCenterTopConfig = function getCenterTopConfig(count, index) {
65
+ var isEvenIndex = !(index % 2);
66
+ var everyEvenWithLeftOffset = isEvenIndex ? '1' : undefined;
67
+ var everyOddWithRightOffset = isEvenIndex ? undefined : '1';
68
+
69
+ switch (count) {
70
+ case 4:
71
+ return {
72
+ wide: '3',
73
+ desktop: '5',
74
+ tablet: '5',
75
+ leftOffsetDesktop: everyEvenWithLeftOffset,
76
+ leftOffsetTablet: everyEvenWithLeftOffset,
77
+ rightOffsetTablet: everyOddWithRightOffset,
78
+ rightOffsetDesktop: everyOddWithRightOffset
79
+ };
80
+
81
+ default:
82
+ return {
83
+ wide: '4',
84
+ desktop: '4',
85
+ tablet: '4'
86
+ };
87
+ }
88
+ };
89
+
90
+ var getOneColumnConfig = function getOneColumnConfig(iconPosition) {
91
+ return iconPosition !== IconPositionEnum.CENTER_TOP ? {
92
+ wide: '10',
93
+ desktop: '10',
94
+ tablet: '10'
95
+ } : {
96
+ wide: '12',
97
+ desktop: '12',
98
+ tablet: '12'
99
+ };
100
+ };
101
+
102
+ var getMultiColumnConfig = function getMultiColumnConfig(iconPosition, count, index) {
103
+ switch (iconPosition) {
104
+ case IconPositionEnum.LEFT_TOP:
105
+ return getLeftTopConfig(count, index);
106
+
107
+ case IconPositionEnum.CENTER_TOP:
108
+ return getCenterTopConfig(count, index);
109
+
110
+ default:
111
+ return getLeftSideConfig(count, index);
112
+ }
113
+ };
114
+
115
+ export default getMultiColumnConfig;
116
+ export { getLeftSideConfig, getLeftTopConfig, getCenterTopConfig, getOneColumnConfig };
@@ -98,7 +98,7 @@ var Property = function Property(_ref) {
98
98
  "data-testid": "".concat(testIdPrefix, "-value")
99
99
  }, /*#__PURE__*/React.createElement("div", {
100
100
  className: cn('value')
101
- }, convert(value, {})), valueUnit && /*#__PURE__*/React.createElement(Caption, {
101
+ }, typeof value === 'string' ? convert(value, {}) : value), valueUnit && /*#__PURE__*/React.createElement(Caption, {
102
102
  className: cn('value-unit'),
103
103
  hasMargin: false
104
104
  }, convert(valueUnit, {})));
@@ -157,7 +157,7 @@ Property.propTypes = {
157
157
  value: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.node)]).isRequired,
158
158
  isCollapsible: PropTypes.bool
159
159
  })),
160
- value: PropTypes.string,
160
+ value: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
161
161
  titleSize: PropTypes.oneOf(['default', 'big']),
162
162
  valueUnit: PropTypes.string,
163
163
  valueFrameColor: PropTypes.oneOf(['none', 'default', 'gray'])
@@ -14,7 +14,7 @@ export declare type Item = {
14
14
  title?: string[] | React.ReactNode[];
15
15
  titleSize?: 'default' | 'big';
16
16
  description?: Desc[];
17
- value?: string;
17
+ value?: string | React.ReactNode;
18
18
  valueUnit?: string;
19
19
  valueFrameColor?: 'none' | 'default' | 'gray';
20
20
  };
@@ -40,7 +40,7 @@ h5 {
40
40
  overflow: auto;
41
41
  }
42
42
  @media screen and (min-width: 1024px) {
43
- .mfui-table__scroll {
43
+ .mfui-table__scroll_limit {
44
44
  max-height: 500px;
45
45
  }
46
46
  }
@@ -131,6 +131,15 @@ h5 {
131
131
  .mfui-table__row:not(:last-child) .mfui-table__cell {
132
132
  border-bottom: 1px solid var(--spbSky2);
133
133
  }
134
+ .mfui-table__row_align_bottom .mfui-table__cell {
135
+ vertical-align: bottom;
136
+ }
137
+ .mfui-table__row_align_top .mfui-table__cell {
138
+ vertical-align: top;
139
+ }
140
+ .mfui-table__row_align_top.mfui-table__row_head .mfui-table__cell {
141
+ padding-top: 12px;
142
+ }
134
143
  .mfui-table_min-cell-size_small .mfui-table__cell:not(:first-child) {
135
144
  min-width: 72px;
136
145
  }
@@ -8,6 +8,8 @@ export interface ITable {
8
8
  fixColumn?: boolean;
9
9
  /** Минимальный размер ячеек */
10
10
  minCellSize?: 'small' | 'large';
11
+ /** Отключить ограничение по высоте при разрешении больше 1024px */
12
+ disableHeightLimit?: boolean;
11
13
  children: Array<React.ReactElement<ITableRow>>;
12
14
  }
13
15
  declare const Table: React.FC<ITable>;
@@ -14,6 +14,8 @@ var Table = function Table(_ref) {
14
14
  fixColumn = _ref$fixColumn === void 0 ? true : _ref$fixColumn,
15
15
  _ref$minCellSize = _ref.minCellSize,
16
16
  minCellSize = _ref$minCellSize === void 0 ? 'large' : _ref$minCellSize,
17
+ _ref$disableHeightLim = _ref.disableHeightLimit,
18
+ disableHeightLimit = _ref$disableHeightLim === void 0 ? false : _ref$disableHeightLim,
17
19
  children = _ref.children;
18
20
  var scrollRef = React.useRef(null);
19
21
 
@@ -75,17 +77,23 @@ var Table = function Table(_ref) {
75
77
  }, []);
76
78
 
77
79
  var renderRows = function renderRows() {
78
- return React.Children.map(children, function (_ref2) {
80
+ return React.Children.map(children, function (_ref2, index) {
79
81
  var _ref2$props = _ref2.props,
80
82
  cells = _ref2$props.children,
81
- head = _ref2$props.head;
83
+ head = _ref2$props.head,
84
+ _ref2$props$vAlign = _ref2$props.vAlign,
85
+ vAlign = _ref2$props$vAlign === void 0 ? 'default' : _ref2$props$vAlign;
82
86
  return /*#__PURE__*/React.createElement("tr", {
87
+ key: index,
83
88
  className: cn('row', {
84
- head: head
85
- })
86
- }, React.Children.map(cells, function (_ref3) {
89
+ head: head,
90
+ align: vAlign
91
+ }),
92
+ "data-testid": "Table-row"
93
+ }, React.Children.map(cells, function (_ref3, cellIndex) {
87
94
  var cell = _ref3.props.children;
88
95
  return /*#__PURE__*/React.createElement("td", {
96
+ key: cellIndex,
89
97
  className: cn('cell')
90
98
  }, typeof cell === 'string' ? convert(cell) : cell);
91
99
  }));
@@ -99,7 +107,9 @@ var Table = function Table(_ref) {
99
107
  touch: isTouchDevice
100
108
  }, [className])
101
109
  }, /*#__PURE__*/React.createElement("div", {
102
- className: cn('scroll'),
110
+ className: cn('scroll', {
111
+ limit: !disableHeightLimit
112
+ }),
103
113
  ref: scrollRef,
104
114
  onScroll: handleTableScroll
105
115
  }, isTopShadow && /*#__PURE__*/React.createElement("div", {
@@ -119,6 +129,7 @@ Table.propTypes = {
119
129
  className: PropTypes.string,
120
130
  fixColumn: PropTypes.bool,
121
131
  minCellSize: PropTypes.oneOf(['small', 'large']),
132
+ disableHeightLimit: PropTypes.bool,
122
133
  children: PropTypes.arrayOf(PropTypes.element.isRequired).isRequired
123
134
  };
124
135
  export default Table;
@@ -3,6 +3,8 @@ import { ITableCell } from './TableCell';
3
3
  export interface ITableRow {
4
4
  /** Ряд таблицы как заголовок */
5
5
  head?: boolean;
6
+ /** Выравнивание по вертикали в ячейках таблицы */
7
+ vAlign?: 'default' | 'bottom' | 'top';
6
8
  children: Array<React.ReactElement<ITableCell>>;
7
9
  }
8
10
  declare const TableRow: React.FC<ITableRow>;
@@ -9,6 +9,8 @@ var TableRow = function TableRow(_ref) {
9
9
  TableRow.propTypes = {
10
10
  // eslint-disable-next-line react/no-unused-prop-types
11
11
  head: PropTypes.bool,
12
+ // eslint-disable-next-line react/no-unused-prop-types
13
+ vAlign: PropTypes.oneOf(['default', 'bottom', 'top']),
12
14
  children: PropTypes.arrayOf(PropTypes.element.isRequired).isRequired
13
15
  };
14
16
  export default TableRow;
@@ -7,10 +7,10 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = void 0;
9
9
 
10
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
-
12
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
11
 
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
14
  require("core-js/modules/es.array.map.js");
15
15
 
16
16
  require("core-js/modules/es.object.values.js");
@@ -29,6 +29,8 @@ var _throttleTime = _interopRequireDefault(require("../../constants/throttleTime
29
29
 
30
30
  var _BenefitsIconsTile = _interopRequireDefault(require("./BenefitsIconsTile"));
31
31
 
32
+ var _helpers = _interopRequireWildcard(require("./helpers"));
33
+
32
34
  var _types = require("./types");
33
35
 
34
36
  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); }
@@ -37,117 +39,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
37
39
 
38
40
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
39
41
 
40
- var getLeftSideConfig = function getLeftSideConfig(count, index) {
41
- var everySecondWithoutOffset = index % 2 ? '1' : undefined;
42
- var columnSize = {
43
- wide: '4',
44
- desktop: '5',
45
- tablet: '10'
46
- };
47
-
48
- switch (count) {
49
- case 2:
50
- case 4:
51
- return (0, _extends2["default"])((0, _extends2["default"])({}, columnSize), {
52
- leftOffsetWide: everySecondWithoutOffset,
53
- leftOffsetDesktop: everySecondWithoutOffset
54
- });
55
-
56
- default:
57
- return (0, _extends2["default"])((0, _extends2["default"])({}, columnSize), {
58
- leftOffsetDesktop: everySecondWithoutOffset
59
- });
60
- }
61
- }; // left-aligned column with left-aligned icon on top
62
-
63
-
64
- var getLeftTopConfig = function getLeftTopConfig(count, index) {
65
- var everySecondWithoutOffset = index % 2 ? '1' : undefined;
66
- var everyThirdWithoutOffset = index % 3 ? '1' : undefined;
67
-
68
- switch (count) {
69
- case 2:
70
- return {
71
- wide: '4',
72
- desktop: '4',
73
- tablet: '5',
74
- leftOffsetWide: everySecondWithoutOffset,
75
- leftOffsetDesktop: everySecondWithoutOffset,
76
- leftOffsetTablet: everySecondWithoutOffset
77
- };
78
-
79
- case 4:
80
- return {
81
- wide: '3',
82
- desktop: '4',
83
- tablet: '5',
84
- leftOffsetDesktop: everySecondWithoutOffset,
85
- leftOffsetTablet: everySecondWithoutOffset
86
- };
87
-
88
- default:
89
- return {
90
- wide: '3',
91
- desktop: '4',
92
- tablet: '5',
93
- leftOffsetWide: everyThirdWithoutOffset,
94
- leftOffsetTablet: everySecondWithoutOffset
95
- };
96
- }
97
- }; // center-aligned column with center-aligned icon on top
98
-
99
-
100
- var getCenterTopConfig = function getCenterTopConfig(count, index) {
101
- var isEvenIndex = !(index % 2);
102
- var everyEvenWithLeftOffset = isEvenIndex ? '1' : undefined;
103
- var everyOddWithRightOffset = isEvenIndex ? undefined : '1';
104
-
105
- switch (count) {
106
- case 4:
107
- return {
108
- wide: '3',
109
- desktop: '5',
110
- tablet: '5',
111
- leftOffsetDesktop: everyEvenWithLeftOffset,
112
- leftOffsetTablet: everyEvenWithLeftOffset,
113
- rightOffsetTablet: everyOddWithRightOffset,
114
- rightOffsetDesktop: everyOddWithRightOffset
115
- };
116
-
117
- default:
118
- return {
119
- wide: '4',
120
- desktop: '4',
121
- tablet: '4'
122
- };
123
- }
124
- };
125
-
126
- var getOneColumnConfig = function getOneColumnConfig(iconPosition) {
127
- return iconPosition !== _types.IconPositionEnum.CENTER_TOP ? {
128
- wide: '10',
129
- desktop: '10',
130
- tablet: '10'
131
- } : {
132
- wide: '12',
133
- desktop: '12',
134
- tablet: '12'
135
- };
136
- };
137
-
138
- var getMultiColumnConfig = function getMultiColumnConfig(iconPosition, count, index) {
139
- switch (iconPosition) {
140
- case _types.IconPositionEnum.LEFT_TOP:
141
- return getLeftTopConfig(count, index);
142
-
143
- case _types.IconPositionEnum.CENTER_TOP:
144
- return getCenterTopConfig(count, index);
145
-
146
- default:
147
- return getLeftSideConfig(count, index);
148
- }
149
- };
150
-
42
+ var testIdPrefix = 'BenefitsIcons';
151
43
  var cn = (0, _uiHelpers.cnCreate)('mfui-benefits-icons');
152
44
 
153
45
  var BenefitsIcons = function BenefitsIcons(_ref) {
@@ -202,15 +94,28 @@ var BenefitsIcons = function BenefitsIcons(_ref) {
202
94
  }, /*#__PURE__*/React.createElement(_uiCore.Grid, {
203
95
  className: classes.grid,
204
96
  guttersLeft: "medium",
205
- hAlign: itemsAlign
97
+ hAlign: itemsAlign,
98
+ dataAttrs: {
99
+ root: {
100
+ 'data-testid': "".concat(testIdPrefix, "-grid-root")
101
+ },
102
+ container: {
103
+ 'data-testid': "".concat(testIdPrefix, "-grid-container")
104
+ }
105
+ }
206
106
  }, items.map(function (_ref2, i) {
207
107
  var title = _ref2.title,
208
108
  text = _ref2.text,
209
109
  icon = _ref2.icon;
210
- var columnConfig = inOneColumn ? getOneColumnConfig(iconPosition) : getMultiColumnConfig(iconPosition, items.length, i);
110
+ var columnConfig = inOneColumn ? (0, _helpers.getOneColumnConfig)(iconPosition) : (0, _helpers["default"])(iconPosition, items.length, i);
211
111
  return /*#__PURE__*/React.createElement(_uiCore.GridColumn, (0, _extends2["default"])({
212
112
  className: classes.gridColumn,
213
- key: i
113
+ key: i,
114
+ dataAttrs: {
115
+ root: {
116
+ 'data-testid': "".concat(testIdPrefix, "-grid-column")
117
+ }
118
+ }
214
119
  }, columnConfig), /*#__PURE__*/React.createElement(_BenefitsIconsTile["default"], {
215
120
  className: cn('tile', [classes.item]),
216
121
  title: title,
@@ -25,6 +25,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
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
+ var testIdPrefix = 'BenefitsIconsTile';
28
29
  var cn = (0, _uiHelpers.cnCreate)('mfui-benefits-icons-tile');
29
30
 
30
31
  var BenefitsIconsTile = function BenefitsIconsTile(_ref) {
@@ -37,7 +38,8 @@ var BenefitsIconsTile = function BenefitsIconsTile(_ref) {
37
38
  return /*#__PURE__*/React.createElement("div", {
38
39
  className: cn({
39
40
  'icon-position': iconPosition
40
- }, [className])
41
+ }, [className]),
42
+ "data-testid": "".concat(testIdPrefix, "-root")
41
43
  }, /*#__PURE__*/React.createElement("div", {
42
44
  className: cn('svg-icon')
43
45
  }, icon), /*#__PURE__*/React.createElement("div", {
@@ -0,0 +1,8 @@
1
+ import { GridConfig } from './types';
2
+ declare const getLeftSideConfig: (count: number, index: number) => GridConfig;
3
+ declare const getLeftTopConfig: (count: number, index: number) => GridConfig;
4
+ declare const getCenterTopConfig: (count: number, index: number) => GridConfig;
5
+ declare const getOneColumnConfig: (iconPosition: "left-top" | "center-top" | "left-side") => GridConfig;
6
+ declare const getMultiColumnConfig: (iconPosition: "left-top" | "center-top" | "left-side", count: number, index: number) => GridConfig;
7
+ export default getMultiColumnConfig;
8
+ export { getLeftSideConfig, getLeftTopConfig, getCenterTopConfig, getOneColumnConfig };
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getOneColumnConfig = exports.getCenterTopConfig = exports.getLeftTopConfig = exports.getLeftSideConfig = exports["default"] = void 0;
7
+
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+
10
+ var _types = require("./types");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
+
14
+ // left-aligned column with left side icon
15
+ var getLeftSideConfig = function getLeftSideConfig(count, index) {
16
+ var everySecondWithoutOffset = index % 2 ? '1' : undefined;
17
+ var columnSize = {
18
+ wide: '4',
19
+ desktop: '5',
20
+ tablet: '10'
21
+ };
22
+
23
+ switch (count) {
24
+ case 2:
25
+ case 4:
26
+ return (0, _extends2["default"])((0, _extends2["default"])({}, columnSize), {
27
+ leftOffsetWide: everySecondWithoutOffset,
28
+ leftOffsetDesktop: everySecondWithoutOffset
29
+ });
30
+
31
+ default:
32
+ return (0, _extends2["default"])((0, _extends2["default"])({}, columnSize), {
33
+ leftOffsetDesktop: everySecondWithoutOffset
34
+ });
35
+ }
36
+ }; // left-aligned column with left-aligned icon on top
37
+
38
+
39
+ exports.getLeftSideConfig = getLeftSideConfig;
40
+
41
+ var getLeftTopConfig = function getLeftTopConfig(count, index) {
42
+ var everySecondWithoutOffset = index % 2 ? '1' : undefined;
43
+ var everyThirdWithoutOffset = index % 3 ? '1' : undefined;
44
+
45
+ switch (count) {
46
+ case 2:
47
+ return {
48
+ wide: '4',
49
+ desktop: '4',
50
+ tablet: '5',
51
+ leftOffsetWide: everySecondWithoutOffset,
52
+ leftOffsetDesktop: everySecondWithoutOffset,
53
+ leftOffsetTablet: everySecondWithoutOffset
54
+ };
55
+
56
+ case 4:
57
+ return {
58
+ wide: '3',
59
+ desktop: '4',
60
+ tablet: '5',
61
+ leftOffsetDesktop: everySecondWithoutOffset,
62
+ leftOffsetTablet: everySecondWithoutOffset
63
+ };
64
+
65
+ default:
66
+ return {
67
+ wide: '3',
68
+ desktop: '4',
69
+ tablet: '5',
70
+ leftOffsetWide: everyThirdWithoutOffset,
71
+ leftOffsetTablet: everySecondWithoutOffset
72
+ };
73
+ }
74
+ }; // center-aligned column with center-aligned icon on top
75
+
76
+
77
+ exports.getLeftTopConfig = getLeftTopConfig;
78
+
79
+ var getCenterTopConfig = function getCenterTopConfig(count, index) {
80
+ var isEvenIndex = !(index % 2);
81
+ var everyEvenWithLeftOffset = isEvenIndex ? '1' : undefined;
82
+ var everyOddWithRightOffset = isEvenIndex ? undefined : '1';
83
+
84
+ switch (count) {
85
+ case 4:
86
+ return {
87
+ wide: '3',
88
+ desktop: '5',
89
+ tablet: '5',
90
+ leftOffsetDesktop: everyEvenWithLeftOffset,
91
+ leftOffsetTablet: everyEvenWithLeftOffset,
92
+ rightOffsetTablet: everyOddWithRightOffset,
93
+ rightOffsetDesktop: everyOddWithRightOffset
94
+ };
95
+
96
+ default:
97
+ return {
98
+ wide: '4',
99
+ desktop: '4',
100
+ tablet: '4'
101
+ };
102
+ }
103
+ };
104
+
105
+ exports.getCenterTopConfig = getCenterTopConfig;
106
+
107
+ var getOneColumnConfig = function getOneColumnConfig(iconPosition) {
108
+ return iconPosition !== _types.IconPositionEnum.CENTER_TOP ? {
109
+ wide: '10',
110
+ desktop: '10',
111
+ tablet: '10'
112
+ } : {
113
+ wide: '12',
114
+ desktop: '12',
115
+ tablet: '12'
116
+ };
117
+ };
118
+
119
+ exports.getOneColumnConfig = getOneColumnConfig;
120
+
121
+ var getMultiColumnConfig = function getMultiColumnConfig(iconPosition, count, index) {
122
+ switch (iconPosition) {
123
+ case _types.IconPositionEnum.LEFT_TOP:
124
+ return getLeftTopConfig(count, index);
125
+
126
+ case _types.IconPositionEnum.CENTER_TOP:
127
+ return getCenterTopConfig(count, index);
128
+
129
+ default:
130
+ return getLeftSideConfig(count, index);
131
+ }
132
+ };
133
+
134
+ var _default = getMultiColumnConfig;
135
+ exports["default"] = _default;
@@ -122,7 +122,7 @@ var Property = function Property(_ref) {
122
122
  "data-testid": "".concat(testIdPrefix, "-value")
123
123
  }, /*#__PURE__*/_react["default"].createElement("div", {
124
124
  className: cn('value')
125
- }, (0, _uiHelpers.convert)(value, {})), valueUnit && /*#__PURE__*/_react["default"].createElement(_uiCore.Caption, {
125
+ }, typeof value === 'string' ? (0, _uiHelpers.convert)(value, {}) : value), valueUnit && /*#__PURE__*/_react["default"].createElement(_uiCore.Caption, {
126
126
  className: cn('value-unit'),
127
127
  hasMargin: false
128
128
  }, (0, _uiHelpers.convert)(valueUnit, {})));
@@ -181,7 +181,7 @@ Property.propTypes = {
181
181
  value: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].arrayOf(_propTypes["default"].node)]).isRequired,
182
182
  isCollapsible: _propTypes["default"].bool
183
183
  })),
184
- value: _propTypes["default"].string,
184
+ value: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].node]),
185
185
  titleSize: _propTypes["default"].oneOf(['default', 'big']),
186
186
  valueUnit: _propTypes["default"].string,
187
187
  valueFrameColor: _propTypes["default"].oneOf(['none', 'default', 'gray'])
@@ -14,7 +14,7 @@ export declare type Item = {
14
14
  title?: string[] | React.ReactNode[];
15
15
  titleSize?: 'default' | 'big';
16
16
  description?: Desc[];
17
- value?: string;
17
+ value?: string | React.ReactNode;
18
18
  valueUnit?: string;
19
19
  valueFrameColor?: 'none' | 'default' | 'gray';
20
20
  };
@@ -40,7 +40,7 @@ h5 {
40
40
  overflow: auto;
41
41
  }
42
42
  @media screen and (min-width: 1024px) {
43
- .mfui-table__scroll {
43
+ .mfui-table__scroll_limit {
44
44
  max-height: 500px;
45
45
  }
46
46
  }
@@ -131,6 +131,15 @@ h5 {
131
131
  .mfui-table__row:not(:last-child) .mfui-table__cell {
132
132
  border-bottom: 1px solid var(--spbSky2);
133
133
  }
134
+ .mfui-table__row_align_bottom .mfui-table__cell {
135
+ vertical-align: bottom;
136
+ }
137
+ .mfui-table__row_align_top .mfui-table__cell {
138
+ vertical-align: top;
139
+ }
140
+ .mfui-table__row_align_top.mfui-table__row_head .mfui-table__cell {
141
+ padding-top: 12px;
142
+ }
134
143
  .mfui-table_min-cell-size_small .mfui-table__cell:not(:first-child) {
135
144
  min-width: 72px;
136
145
  }
@@ -8,6 +8,8 @@ export interface ITable {
8
8
  fixColumn?: boolean;
9
9
  /** Минимальный размер ячеек */
10
10
  minCellSize?: 'small' | 'large';
11
+ /** Отключить ограничение по высоте при разрешении больше 1024px */
12
+ disableHeightLimit?: boolean;
11
13
  children: Array<React.ReactElement<ITableRow>>;
12
14
  }
13
15
  declare const Table: React.FC<ITable>;
@@ -35,6 +35,8 @@ var Table = function Table(_ref) {
35
35
  fixColumn = _ref$fixColumn === void 0 ? true : _ref$fixColumn,
36
36
  _ref$minCellSize = _ref.minCellSize,
37
37
  minCellSize = _ref$minCellSize === void 0 ? 'large' : _ref$minCellSize,
38
+ _ref$disableHeightLim = _ref.disableHeightLimit,
39
+ disableHeightLimit = _ref$disableHeightLim === void 0 ? false : _ref$disableHeightLim,
38
40
  children = _ref.children;
39
41
  var scrollRef = React.useRef(null);
40
42
 
@@ -96,17 +98,23 @@ var Table = function Table(_ref) {
96
98
  }, []);
97
99
 
98
100
  var renderRows = function renderRows() {
99
- return React.Children.map(children, function (_ref2) {
101
+ return React.Children.map(children, function (_ref2, index) {
100
102
  var _ref2$props = _ref2.props,
101
103
  cells = _ref2$props.children,
102
- head = _ref2$props.head;
104
+ head = _ref2$props.head,
105
+ _ref2$props$vAlign = _ref2$props.vAlign,
106
+ vAlign = _ref2$props$vAlign === void 0 ? 'default' : _ref2$props$vAlign;
103
107
  return /*#__PURE__*/React.createElement("tr", {
108
+ key: index,
104
109
  className: cn('row', {
105
- head: head
106
- })
107
- }, React.Children.map(cells, function (_ref3) {
110
+ head: head,
111
+ align: vAlign
112
+ }),
113
+ "data-testid": "Table-row"
114
+ }, React.Children.map(cells, function (_ref3, cellIndex) {
108
115
  var cell = _ref3.props.children;
109
116
  return /*#__PURE__*/React.createElement("td", {
117
+ key: cellIndex,
110
118
  className: cn('cell')
111
119
  }, typeof cell === 'string' ? (0, _htmr["default"])(cell) : cell);
112
120
  }));
@@ -120,7 +128,9 @@ var Table = function Table(_ref) {
120
128
  touch: isTouchDevice
121
129
  }, [className])
122
130
  }, /*#__PURE__*/React.createElement("div", {
123
- className: cn('scroll'),
131
+ className: cn('scroll', {
132
+ limit: !disableHeightLimit
133
+ }),
124
134
  ref: scrollRef,
125
135
  onScroll: handleTableScroll
126
136
  }, isTopShadow && /*#__PURE__*/React.createElement("div", {
@@ -140,6 +150,7 @@ Table.propTypes = {
140
150
  className: PropTypes.string,
141
151
  fixColumn: PropTypes.bool,
142
152
  minCellSize: PropTypes.oneOf(['small', 'large']),
153
+ disableHeightLimit: PropTypes.bool,
143
154
  children: PropTypes.arrayOf(PropTypes.element.isRequired).isRequired
144
155
  };
145
156
  var _default = Table;
@@ -3,6 +3,8 @@ import { ITableCell } from './TableCell';
3
3
  export interface ITableRow {
4
4
  /** Ряд таблицы как заголовок */
5
5
  head?: boolean;
6
+ /** Выравнивание по вертикали в ячейках таблицы */
7
+ vAlign?: 'default' | 'bottom' | 'top';
6
8
  children: Array<React.ReactElement<ITableCell>>;
7
9
  }
8
10
  declare const TableRow: React.FC<ITableRow>;
@@ -23,6 +23,8 @@ var TableRow = function TableRow(_ref) {
23
23
  TableRow.propTypes = {
24
24
  // eslint-disable-next-line react/no-unused-prop-types
25
25
  head: PropTypes.bool,
26
+ // eslint-disable-next-line react/no-unused-prop-types
27
+ vAlign: PropTypes.oneOf(['default', 'bottom', 'top']),
26
28
  children: PropTypes.arrayOf(PropTypes.element.isRequired).isRequired
27
29
  };
28
30
  var _default = TableRow;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@megafon/ui-shared",
3
- "version": "5.1.0",
3
+ "version": "5.2.0",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -90,5 +90,5 @@
90
90
  "prop-types": "^15.7.2",
91
91
  "swiper": "^6.5.6"
92
92
  },
93
- "gitHead": "67d1595c72454846b31ebcd4acc8f7550a5f0df3"
93
+ "gitHead": "03a9bcbea7cad951a3c18033c77696c25427c15e"
94
94
  }