@megafon/ui-core 5.14.1 → 5.16.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/colors/colorsData.js +3 -0
  3. package/dist/es/components/Accordion/Accordion.d.ts +4 -0
  4. package/dist/es/components/Accordion/Accordion.js +9 -3
  5. package/dist/es/components/Avatar/Avatar.css +52 -0
  6. package/dist/es/components/Avatar/Avatar.d.ts +22 -0
  7. package/dist/es/components/Avatar/Avatar.js +68 -0
  8. package/dist/es/components/Avatar/doc/i/img.png +0 -0
  9. package/dist/es/components/Avatar/i/placeholder.svg +1 -0
  10. package/dist/es/components/Carousel/Carousel.js +1 -0
  11. package/dist/es/components/ContentView/ContentView.d.ts +4 -0
  12. package/dist/es/components/ContentView/ContentView.js +4 -0
  13. package/dist/es/components/RadioButton/RadioButton.css +13 -7
  14. package/dist/es/index.d.ts +1 -0
  15. package/dist/es/index.js +1 -0
  16. package/dist/lib/colors/colorsData.js +3 -0
  17. package/dist/lib/components/Accordion/Accordion.d.ts +4 -0
  18. package/dist/lib/components/Accordion/Accordion.js +9 -3
  19. package/dist/lib/components/Avatar/Avatar.css +52 -0
  20. package/dist/lib/components/Avatar/Avatar.d.ts +22 -0
  21. package/dist/lib/components/Avatar/Avatar.js +87 -0
  22. package/dist/lib/components/Avatar/doc/i/img.png +0 -0
  23. package/dist/lib/components/Avatar/i/placeholder.svg +1 -0
  24. package/dist/lib/components/Carousel/Carousel.js +1 -0
  25. package/dist/lib/components/ContentView/ContentView.d.ts +4 -0
  26. package/dist/lib/components/ContentView/ContentView.js +4 -0
  27. package/dist/lib/components/RadioButton/RadioButton.css +13 -7
  28. package/dist/lib/index.d.ts +1 -0
  29. package/dist/lib/index.js +8 -0
  30. package/package.json +4 -4
  31. package/styles/colors.css +1 -0
  32. package/styles/colorsDark.css +1 -0
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.16.0](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-core@5.15.0...@megafon/ui-core@5.16.0) (2024-06-26)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **carousel:** unsibscribe throttle ([c595b66](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/c595b66d2ecff5b071ffd69c7ffb22dd18b8e9ca))
12
+ * **contentview:** add new props to component ContentView ([8780d37](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/8780d37b9699b336dd5575403f9e8e6aee95113e))
13
+ * **radiobutton:** fix hover on touch devices ([fecbc40](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/fecbc4023a545835e4a3995feec1caac1c3e0253))
14
+
15
+
16
+ ### Features
17
+
18
+ * **accordion:** add new prop titleTag for change title tag, add classes.title prop" ([6f265f5](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/6f265f53bbd552957454405d8c95cbe1549c72dd))
19
+
20
+
21
+
22
+
23
+
24
+ # [5.15.0](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-core@5.14.1...@megafon/ui-core@5.15.0) (2024-06-17)
25
+
26
+
27
+ ### Features
28
+
29
+ * **avatar:** create component Avatar ([d36574f](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/d36574f889a9eceb3a71b790670c2809a9c538aa))
30
+ * **colors:** add gradient Scrim ([ee4f5c6](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/ee4f5c6ddeea024573f5064308b3d8d30d31d575))
31
+
32
+
33
+
34
+
35
+
6
36
  ## [5.14.1](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-core@5.14.0...@megafon/ui-core@5.14.1) (2024-06-10)
7
37
 
8
38
 
@@ -110,6 +110,9 @@ var colors = {
110
110
  name: 'Exclusive',
111
111
  code: 'gradientExclusive',
112
112
  gradient: 'linear-gradient(90deg, #2A2674 0%, #444189 74%, #504D93 100%)'
113
+ }, {
114
+ name: 'Scrim',
115
+ code: 'gradientScrim'
113
116
  }]
114
117
  }
115
118
  },
@@ -1,10 +1,13 @@
1
1
  import * as React from 'react';
2
+ import { IHeaderProps } from '../Header/Header';
2
3
  import './Accordion.less';
3
4
  export interface IAccordionProps {
4
5
  /** Ссылка на корневой элемент */
5
6
  rootRef?: React.Ref<HTMLDivElement>;
6
7
  /** Заголовок */
7
8
  title: string | React.ReactNode | React.ReactNode[];
9
+ /** Заголовок */
10
+ titleTag?: IHeaderProps['as'];
8
11
  /** Состояние открытости */
9
12
  isOpened?: boolean;
10
13
  /** Включить микроразметку */
@@ -17,6 +20,7 @@ export interface IAccordionProps {
17
20
  openedClass?: string;
18
21
  collapse?: string;
19
22
  titleWrap?: string;
23
+ title?: string;
20
24
  };
21
25
  /** Дополнительные data атрибуты к внутренним элементам */
22
26
  dataAttrs?: {
@@ -22,6 +22,8 @@ var cn = cnCreate('mfui-accordion');
22
22
  var Accordion = function Accordion(_ref) {
23
23
  var rootRef = _ref.rootRef,
24
24
  title = _ref.title,
25
+ _ref$titleTag = _ref.titleTag,
26
+ titleTag = _ref$titleTag === void 0 ? 'h5' : _ref$titleTag,
25
27
  _ref$isOpened = _ref.isOpened,
26
28
  isOpened = _ref$isOpened === void 0 ? false : _ref$isOpened,
27
29
  _ref$hasMicrodata = _ref.hasMicrodata,
@@ -33,6 +35,7 @@ var Accordion = function Accordion(_ref) {
33
35
  rootPropsClasses = _ref$classes.root,
34
36
  collapsePropsClasses = _ref$classes.collapse,
35
37
  titleWrapPropsClasses = _ref$classes.titleWrap,
38
+ titlePropsClasses = _ref$classes.title,
36
39
  dataAttrs = _ref.dataAttrs,
37
40
  onClickAccordion = _ref.onClickAccordion,
38
41
  children = _ref.children;
@@ -88,8 +91,9 @@ var Accordion = function Accordion(_ref) {
88
91
  }, hasMicrodata && {
89
92
  itemProp: 'name'
90
93
  }), /*#__PURE__*/React.createElement(Header, {
91
- as: "h5",
92
- dataAttrs: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.header
94
+ as: titleTag,
95
+ dataAttrs: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.header,
96
+ className: titlePropsClasses
93
97
  }, title), /*#__PURE__*/React.createElement("div", {
94
98
  className: cn('icon-box')
95
99
  }, /*#__PURE__*/React.createElement(ArrowDown, _extends({
@@ -107,6 +111,7 @@ Accordion.propTypes = {
107
111
  current: PropTypes.elementType
108
112
  }), PropTypes.any])]),
109
113
  title: PropTypes.oneOfType([PropTypes.string, PropTypes.node, PropTypes.arrayOf(PropTypes.node)]).isRequired,
114
+ titleTag: PropTypes.oneOf(['h1', 'h2', 'h3', 'h5']),
110
115
  isOpened: PropTypes.bool,
111
116
  hasMicrodata: PropTypes.bool,
112
117
  className: PropTypes.string,
@@ -114,7 +119,8 @@ Accordion.propTypes = {
114
119
  openedClass: PropTypes.string,
115
120
  root: PropTypes.string,
116
121
  collapse: PropTypes.string,
117
- titleWrap: PropTypes.string
122
+ titleWrap: PropTypes.string,
123
+ title: PropTypes.string
118
124
  }),
119
125
  dataAttrs: PropTypes.shape({
120
126
  root: PropTypes.objectOf(PropTypes.string.isRequired),
@@ -0,0 +1,52 @@
1
+ .mfui-avatar {
2
+ position: relative;
3
+ display: -webkit-inline-box;
4
+ display: -ms-inline-flexbox;
5
+ display: inline-flex;
6
+ -webkit-box-align: center;
7
+ -ms-flex-align: center;
8
+ align-items: center;
9
+ -webkit-box-pack: center;
10
+ -ms-flex-pack: center;
11
+ justify-content: center;
12
+ -webkit-box-sizing: border-box;
13
+ box-sizing: border-box;
14
+ width: 40px;
15
+ height: 40px;
16
+ border-radius: 50%;
17
+ overflow: hidden;
18
+ font-weight: 500;
19
+ font-size: 15px;
20
+ }
21
+ .mfui-avatar__text {
22
+ display: block;
23
+ }
24
+ .mfui-avatar__image {
25
+ width: 100%;
26
+ height: 100%;
27
+ -o-object-fit: cover;
28
+ object-fit: cover;
29
+ background-color: var(--base);
30
+ }
31
+ .mfui-avatar__placeholder {
32
+ opacity: 0.3;
33
+ }
34
+ .mfui-avatar_color_green {
35
+ color: var(--brandGreen);
36
+ background-color: var(--brandGreen20);
37
+ }
38
+ .mfui-avatar_color_green .mfui-avatar__placeholder {
39
+ fill: var(--brandGreen);
40
+ }
41
+ .mfui-avatar_color_gray {
42
+ color: var(--spbSky3);
43
+ background-color: var(--spbSky0);
44
+ }
45
+ .mfui-avatar_color_gray .mfui-avatar__placeholder {
46
+ fill: var(--spbSky3);
47
+ }
48
+ .mfui-avatar_size_auto {
49
+ width: 100%;
50
+ height: 100%;
51
+ font-size: inherit;
52
+ }
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ import './Avatar.less';
3
+ export interface IAvatarProps {
4
+ /** Ссылка на изображение. Имеет приоритет над текстом */
5
+ src?: string;
6
+ /** Значение тега alt для изображения */
7
+ alt?: string;
8
+ /** Текстовое отображение */
9
+ letters?: string;
10
+ /** Цвет заливки */
11
+ color?: 'green' | 'gray';
12
+ /** Размер (по умолчанию 40х40 пикселей). */
13
+ size?: 'default' | 'auto';
14
+ /** Дополнительный класс корневого элемента */
15
+ className?: string;
16
+ /** Дополнительные data атрибуты к внутренним элементам */
17
+ dataAttrs?: {
18
+ root?: Record<string, string>;
19
+ };
20
+ }
21
+ declare const Avatar: React.FC<IAvatarProps>;
22
+ export default Avatar;
@@ -0,0 +1,68 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import "core-js/modules/es.array.slice.js";
3
+ import * as React from 'react';
4
+ import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
5
+ import * as PropTypes from 'prop-types';
6
+ import "./Avatar.css";
7
+
8
+ var PlaceholderIcon = function PlaceholderIcon(props) {
9
+ return /*#__PURE__*/React.createElement("svg", _extends({
10
+ viewBox: "0 0 40 40"
11
+ }, props), /*#__PURE__*/React.createElement("path", {
12
+ d: "M29.188 40.75l2.625-9.752-.42-.407A16.63 16.63 0 0020 26.312a16.642 16.642 0 00-11.393 4.292l-.42.394 2.626 9.752h18.374zM12.125 15.813a7.875 7.875 0 1015.75 0 7.875 7.875 0 00-15.75 0z"
13
+ }));
14
+ };
15
+
16
+ var cn = cnCreate('mfui-avatar');
17
+
18
+ var Avatar = function Avatar(_ref) {
19
+ var src = _ref.src,
20
+ _ref$alt = _ref.alt,
21
+ alt = _ref$alt === void 0 ? 'avatar' : _ref$alt,
22
+ letters = _ref.letters,
23
+ _ref$color = _ref.color,
24
+ color = _ref$color === void 0 ? 'green' : _ref$color,
25
+ _ref$size = _ref.size,
26
+ size = _ref$size === void 0 ? 'default' : _ref$size,
27
+ className = _ref.className,
28
+ dataAttrs = _ref.dataAttrs;
29
+
30
+ var renderContent = function renderContent() {
31
+ if (src) {
32
+ return /*#__PURE__*/React.createElement("img", {
33
+ className: cn('image'),
34
+ src: src,
35
+ alt: alt
36
+ });
37
+ }
38
+
39
+ if (letters) {
40
+ var text = letters.slice(0, 2).toUpperCase();
41
+ return /*#__PURE__*/React.createElement("span", {
42
+ className: cn('text')
43
+ }, text);
44
+ }
45
+
46
+ return /*#__PURE__*/React.createElement(PlaceholderIcon, {
47
+ className: cn('placeholder')
48
+ });
49
+ };
50
+
51
+ return /*#__PURE__*/React.createElement("div", _extends({
52
+ className: cn({
53
+ color: color,
54
+ size: size
55
+ }, [className])
56
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), renderContent());
57
+ };
58
+
59
+ Avatar.propTypes = {
60
+ src: PropTypes.string,
61
+ alt: PropTypes.string,
62
+ letters: PropTypes.string,
63
+ color: PropTypes.oneOf(['green', 'gray']),
64
+ size: PropTypes.oneOf(['default', 'auto']),
65
+ className: PropTypes.string,
66
+ dataAttrs: PropTypes.objectOf(PropTypes.object)
67
+ };
68
+ export default Avatar;
@@ -0,0 +1 @@
1
+ <svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"><path d="M29.188 40.75l2.625-9.752-.42-.407A16.63 16.63 0 0020 26.312a16.642 16.642 0 00-11.393 4.292l-.42.394 2.626 9.752h18.374zM12.125 15.813a7.875 7.875 0 1015.75 0 7.875 7.875 0 00-15.75 0z"/></svg>
@@ -261,6 +261,7 @@ var Carousel = function Carousel(_ref) {
261
261
  var windowResizeHandlerThrottled = throttle(windowResizeHandler, throttleTime.resize);
262
262
  window.addEventListener('resize', windowResizeHandlerThrottled);
263
263
  return function () {
264
+ windowResizeHandlerThrottled.cancel();
264
265
  window.removeEventListener('resize', windowResizeHandlerThrottled);
265
266
  };
266
267
  }, [slidesSettings, swiperInstance]);
@@ -7,6 +7,10 @@ declare type ElementType = {
7
7
  href?: string;
8
8
  /** Атрибут target */
9
9
  target?: '_self' | '_blank' | '_parent' | '_top';
10
+ /** Отключение кнопки */
11
+ disabled?: boolean;
12
+ /** Показать загрузку */
13
+ showLoader?: boolean;
10
14
  /** Обработчик клика */
11
15
  onClick?: (e: React.SyntheticEvent<EventTarget>) => void;
12
16
  };
@@ -46,6 +46,8 @@ var ContentView = function ContentView(_ref) {
46
46
  className: cn('button', [classes.button]),
47
47
  href: buttonParams.href,
48
48
  target: buttonParams.target,
49
+ disabled: buttonParams.disabled,
50
+ showLoader: buttonParams.showLoader,
49
51
  onClick: buttonParams.onClick,
50
52
  dataAttrs: {
51
53
  root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.button
@@ -55,6 +57,8 @@ var ContentView = function ContentView(_ref) {
55
57
  type: "text",
56
58
  href: linkParams.href,
57
59
  target: linkParams.target,
60
+ disabled: linkParams.disabled,
61
+ showLoader: linkParams.showLoader,
58
62
  onClick: linkParams.onClick,
59
63
  dataAttrs: {
60
64
  root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.link
@@ -54,8 +54,10 @@
54
54
  .mfui-radio-button__input_dark:checked + .mfui-radio-button__custom-input:before {
55
55
  border: 7px solid var(--brandGreen);
56
56
  }
57
- .mfui-radio-button__label_dark:not(.mfui-radio-button__label_disabled):hover .mfui-radio-button__custom-input:before {
58
- border-color: var(--buttonHoverGreen);
57
+ @media (hover: hover) {
58
+ .mfui-radio-button__label_dark:not(.mfui-radio-button__label_disabled):hover .mfui-radio-button__custom-input:before {
59
+ border-color: var(--buttonHoverGreen);
60
+ }
59
61
  }
60
62
  .mfui-radio-button__label_dark:not(.mfui-radio-button__label_disabled):active .mfui-radio-button__custom-input:before {
61
63
  border-color: var(--buttonDown);
@@ -80,12 +82,16 @@
80
82
  border: 7px solid var(--stcWhite);
81
83
  background-color: var(--stcBlack);
82
84
  }
83
- .mfui-radio-button__label_light:not(.mfui-radio-button__label_disabled):hover .mfui-radio-button__custom-input:before {
84
- border-color: var(--buttonHoverGrey);
85
- background-color: var(--buttonHoverGrey);
85
+ @media (hover: hover) {
86
+ .mfui-radio-button__label_light:not(.mfui-radio-button__label_disabled):hover .mfui-radio-button__custom-input:before {
87
+ border-color: var(--buttonHoverGrey);
88
+ background-color: var(--buttonHoverGrey);
89
+ }
86
90
  }
87
- .mfui-radio-button__label_light:not(.mfui-radio-button__label_disabled):hover .mfui-radio-button__input:checked + .mfui-radio-button__custom-input:before {
88
- background-color: var(--stcBlack);
91
+ @media (hover: hover) {
92
+ .mfui-radio-button__label_light:not(.mfui-radio-button__label_disabled):hover .mfui-radio-button__input:checked + .mfui-radio-button__custom-input:before {
93
+ background-color: var(--stcBlack);
94
+ }
89
95
  }
90
96
  .mfui-radio-button__label_light:not(.mfui-radio-button__label_disabled):active .mfui-radio-button__custom-input:before {
91
97
  border-color: var(--buttonDown);
@@ -1,4 +1,5 @@
1
1
  export { default as Accordion } from './components/Accordion/Accordion';
2
+ export { default as Avatar } from './components/Avatar/Avatar';
2
3
  export { default as Banner } from './components/Banner/Banner';
3
4
  export { default as BannerDot } from './components/Banner/BannerDot';
4
5
  export { default as Button } from './components/Button/Button';
package/dist/es/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { default as Accordion } from "./components/Accordion/Accordion";
2
+ export { default as Avatar } from "./components/Avatar/Avatar";
2
3
  export { default as Banner } from "./components/Banner/Banner";
3
4
  export { default as BannerDot } from "./components/Banner/BannerDot";
4
5
  export { default as Button } from "./components/Button/Button";
@@ -116,6 +116,9 @@ var colors = {
116
116
  name: 'Exclusive',
117
117
  code: 'gradientExclusive',
118
118
  gradient: 'linear-gradient(90deg, #2A2674 0%, #444189 74%, #504D93 100%)'
119
+ }, {
120
+ name: 'Scrim',
121
+ code: 'gradientScrim'
119
122
  }]
120
123
  }
121
124
  },
@@ -1,10 +1,13 @@
1
1
  import * as React from 'react';
2
+ import { IHeaderProps } from '../Header/Header';
2
3
  import './Accordion.less';
3
4
  export interface IAccordionProps {
4
5
  /** Ссылка на корневой элемент */
5
6
  rootRef?: React.Ref<HTMLDivElement>;
6
7
  /** Заголовок */
7
8
  title: string | React.ReactNode | React.ReactNode[];
9
+ /** Заголовок */
10
+ titleTag?: IHeaderProps['as'];
8
11
  /** Состояние открытости */
9
12
  isOpened?: boolean;
10
13
  /** Включить микроразметку */
@@ -17,6 +20,7 @@ export interface IAccordionProps {
17
20
  openedClass?: string;
18
21
  collapse?: string;
19
22
  titleWrap?: string;
23
+ title?: string;
20
24
  };
21
25
  /** Дополнительные data атрибуты к внутренним элементам */
22
26
  dataAttrs?: {
@@ -42,6 +42,8 @@ var cn = (0, _uiHelpers.cnCreate)('mfui-accordion');
42
42
  var Accordion = function Accordion(_ref) {
43
43
  var rootRef = _ref.rootRef,
44
44
  title = _ref.title,
45
+ _ref$titleTag = _ref.titleTag,
46
+ titleTag = _ref$titleTag === void 0 ? 'h5' : _ref$titleTag,
45
47
  _ref$isOpened = _ref.isOpened,
46
48
  isOpened = _ref$isOpened === void 0 ? false : _ref$isOpened,
47
49
  _ref$hasMicrodata = _ref.hasMicrodata,
@@ -53,6 +55,7 @@ var Accordion = function Accordion(_ref) {
53
55
  rootPropsClasses = _ref$classes.root,
54
56
  collapsePropsClasses = _ref$classes.collapse,
55
57
  titleWrapPropsClasses = _ref$classes.titleWrap,
58
+ titlePropsClasses = _ref$classes.title,
56
59
  dataAttrs = _ref.dataAttrs,
57
60
  onClickAccordion = _ref.onClickAccordion,
58
61
  children = _ref.children;
@@ -108,8 +111,9 @@ var Accordion = function Accordion(_ref) {
108
111
  }, hasMicrodata && {
109
112
  itemProp: 'name'
110
113
  }), /*#__PURE__*/React.createElement(_Header["default"], {
111
- as: "h5",
112
- dataAttrs: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.header
114
+ as: titleTag,
115
+ dataAttrs: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.header,
116
+ className: titlePropsClasses
113
117
  }, title), /*#__PURE__*/React.createElement("div", {
114
118
  className: cn('icon-box')
115
119
  }, /*#__PURE__*/React.createElement(ArrowDown, (0, _extends2["default"])({
@@ -127,6 +131,7 @@ Accordion.propTypes = {
127
131
  current: PropTypes.elementType
128
132
  }), PropTypes.any])]),
129
133
  title: PropTypes.oneOfType([PropTypes.string, PropTypes.node, PropTypes.arrayOf(PropTypes.node)]).isRequired,
134
+ titleTag: PropTypes.oneOf(['h1', 'h2', 'h3', 'h5']),
130
135
  isOpened: PropTypes.bool,
131
136
  hasMicrodata: PropTypes.bool,
132
137
  className: PropTypes.string,
@@ -134,7 +139,8 @@ Accordion.propTypes = {
134
139
  openedClass: PropTypes.string,
135
140
  root: PropTypes.string,
136
141
  collapse: PropTypes.string,
137
- titleWrap: PropTypes.string
142
+ titleWrap: PropTypes.string,
143
+ title: PropTypes.string
138
144
  }),
139
145
  dataAttrs: PropTypes.shape({
140
146
  root: PropTypes.objectOf(PropTypes.string.isRequired),
@@ -0,0 +1,52 @@
1
+ .mfui-avatar {
2
+ position: relative;
3
+ display: -webkit-inline-box;
4
+ display: -ms-inline-flexbox;
5
+ display: inline-flex;
6
+ -webkit-box-align: center;
7
+ -ms-flex-align: center;
8
+ align-items: center;
9
+ -webkit-box-pack: center;
10
+ -ms-flex-pack: center;
11
+ justify-content: center;
12
+ -webkit-box-sizing: border-box;
13
+ box-sizing: border-box;
14
+ width: 40px;
15
+ height: 40px;
16
+ border-radius: 50%;
17
+ overflow: hidden;
18
+ font-weight: 500;
19
+ font-size: 15px;
20
+ }
21
+ .mfui-avatar__text {
22
+ display: block;
23
+ }
24
+ .mfui-avatar__image {
25
+ width: 100%;
26
+ height: 100%;
27
+ -o-object-fit: cover;
28
+ object-fit: cover;
29
+ background-color: var(--base);
30
+ }
31
+ .mfui-avatar__placeholder {
32
+ opacity: 0.3;
33
+ }
34
+ .mfui-avatar_color_green {
35
+ color: var(--brandGreen);
36
+ background-color: var(--brandGreen20);
37
+ }
38
+ .mfui-avatar_color_green .mfui-avatar__placeholder {
39
+ fill: var(--brandGreen);
40
+ }
41
+ .mfui-avatar_color_gray {
42
+ color: var(--spbSky3);
43
+ background-color: var(--spbSky0);
44
+ }
45
+ .mfui-avatar_color_gray .mfui-avatar__placeholder {
46
+ fill: var(--spbSky3);
47
+ }
48
+ .mfui-avatar_size_auto {
49
+ width: 100%;
50
+ height: 100%;
51
+ font-size: inherit;
52
+ }
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ import './Avatar.less';
3
+ export interface IAvatarProps {
4
+ /** Ссылка на изображение. Имеет приоритет над текстом */
5
+ src?: string;
6
+ /** Значение тега alt для изображения */
7
+ alt?: string;
8
+ /** Текстовое отображение */
9
+ letters?: string;
10
+ /** Цвет заливки */
11
+ color?: 'green' | 'gray';
12
+ /** Размер (по умолчанию 40х40 пикселей). */
13
+ size?: 'default' | 'auto';
14
+ /** Дополнительный класс корневого элемента */
15
+ className?: string;
16
+ /** Дополнительные data атрибуты к внутренним элементам */
17
+ dataAttrs?: {
18
+ root?: Record<string, string>;
19
+ };
20
+ }
21
+ declare const Avatar: React.FC<IAvatarProps>;
22
+ export default Avatar;
@@ -0,0 +1,87 @@
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
+ require("core-js/modules/es.array.slice.js");
13
+
14
+ var React = _interopRequireWildcard(require("react"));
15
+
16
+ var _uiHelpers = require("@megafon/ui-helpers");
17
+
18
+ var PropTypes = _interopRequireWildcard(require("prop-types"));
19
+
20
+ 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); }
21
+
22
+ 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; }
23
+
24
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
25
+
26
+ var PlaceholderIcon = function PlaceholderIcon(props) {
27
+ return /*#__PURE__*/React.createElement("svg", (0, _extends2["default"])({
28
+ viewBox: "0 0 40 40"
29
+ }, props), /*#__PURE__*/React.createElement("path", {
30
+ d: "M29.188 40.75l2.625-9.752-.42-.407A16.63 16.63 0 0020 26.312a16.642 16.642 0 00-11.393 4.292l-.42.394 2.626 9.752h18.374zM12.125 15.813a7.875 7.875 0 1015.75 0 7.875 7.875 0 00-15.75 0z"
31
+ }));
32
+ };
33
+
34
+ var cn = (0, _uiHelpers.cnCreate)('mfui-avatar');
35
+
36
+ var Avatar = function Avatar(_ref) {
37
+ var src = _ref.src,
38
+ _ref$alt = _ref.alt,
39
+ alt = _ref$alt === void 0 ? 'avatar' : _ref$alt,
40
+ letters = _ref.letters,
41
+ _ref$color = _ref.color,
42
+ color = _ref$color === void 0 ? 'green' : _ref$color,
43
+ _ref$size = _ref.size,
44
+ size = _ref$size === void 0 ? 'default' : _ref$size,
45
+ className = _ref.className,
46
+ dataAttrs = _ref.dataAttrs;
47
+
48
+ var renderContent = function renderContent() {
49
+ if (src) {
50
+ return /*#__PURE__*/React.createElement("img", {
51
+ className: cn('image'),
52
+ src: src,
53
+ alt: alt
54
+ });
55
+ }
56
+
57
+ if (letters) {
58
+ var text = letters.slice(0, 2).toUpperCase();
59
+ return /*#__PURE__*/React.createElement("span", {
60
+ className: cn('text')
61
+ }, text);
62
+ }
63
+
64
+ return /*#__PURE__*/React.createElement(PlaceholderIcon, {
65
+ className: cn('placeholder')
66
+ });
67
+ };
68
+
69
+ return /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({
70
+ className: cn({
71
+ color: color,
72
+ size: size
73
+ }, [className])
74
+ }, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), renderContent());
75
+ };
76
+
77
+ Avatar.propTypes = {
78
+ src: PropTypes.string,
79
+ alt: PropTypes.string,
80
+ letters: PropTypes.string,
81
+ color: PropTypes.oneOf(['green', 'gray']),
82
+ size: PropTypes.oneOf(['default', 'auto']),
83
+ className: PropTypes.string,
84
+ dataAttrs: PropTypes.objectOf(PropTypes.object)
85
+ };
86
+ var _default = Avatar;
87
+ exports["default"] = _default;
@@ -0,0 +1 @@
1
+ <svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"><path d="M29.188 40.75l2.625-9.752-.42-.407A16.63 16.63 0 0020 26.312a16.642 16.642 0 00-11.393 4.292l-.42.394 2.626 9.752h18.374zM12.125 15.813a7.875 7.875 0 1015.75 0 7.875 7.875 0 00-15.75 0z"/></svg>
@@ -302,6 +302,7 @@ var Carousel = function Carousel(_ref) {
302
302
  var windowResizeHandlerThrottled = (0, _lodash["default"])(windowResizeHandler, _throttleTime["default"].resize);
303
303
  window.addEventListener('resize', windowResizeHandlerThrottled);
304
304
  return function () {
305
+ windowResizeHandlerThrottled.cancel();
305
306
  window.removeEventListener('resize', windowResizeHandlerThrottled);
306
307
  };
307
308
  }, [slidesSettings, swiperInstance]);
@@ -7,6 +7,10 @@ declare type ElementType = {
7
7
  href?: string;
8
8
  /** Атрибут target */
9
9
  target?: '_self' | '_blank' | '_parent' | '_top';
10
+ /** Отключение кнопки */
11
+ disabled?: boolean;
12
+ /** Показать загрузку */
13
+ showLoader?: boolean;
10
14
  /** Обработчик клика */
11
15
  onClick?: (e: React.SyntheticEvent<EventTarget>) => void;
12
16
  };
@@ -66,6 +66,8 @@ var ContentView = function ContentView(_ref) {
66
66
  className: cn('button', [classes.button]),
67
67
  href: buttonParams.href,
68
68
  target: buttonParams.target,
69
+ disabled: buttonParams.disabled,
70
+ showLoader: buttonParams.showLoader,
69
71
  onClick: buttonParams.onClick,
70
72
  dataAttrs: {
71
73
  root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.button
@@ -75,6 +77,8 @@ var ContentView = function ContentView(_ref) {
75
77
  type: "text",
76
78
  href: linkParams.href,
77
79
  target: linkParams.target,
80
+ disabled: linkParams.disabled,
81
+ showLoader: linkParams.showLoader,
78
82
  onClick: linkParams.onClick,
79
83
  dataAttrs: {
80
84
  root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.link
@@ -54,8 +54,10 @@
54
54
  .mfui-radio-button__input_dark:checked + .mfui-radio-button__custom-input:before {
55
55
  border: 7px solid var(--brandGreen);
56
56
  }
57
- .mfui-radio-button__label_dark:not(.mfui-radio-button__label_disabled):hover .mfui-radio-button__custom-input:before {
58
- border-color: var(--buttonHoverGreen);
57
+ @media (hover: hover) {
58
+ .mfui-radio-button__label_dark:not(.mfui-radio-button__label_disabled):hover .mfui-radio-button__custom-input:before {
59
+ border-color: var(--buttonHoverGreen);
60
+ }
59
61
  }
60
62
  .mfui-radio-button__label_dark:not(.mfui-radio-button__label_disabled):active .mfui-radio-button__custom-input:before {
61
63
  border-color: var(--buttonDown);
@@ -80,12 +82,16 @@
80
82
  border: 7px solid var(--stcWhite);
81
83
  background-color: var(--stcBlack);
82
84
  }
83
- .mfui-radio-button__label_light:not(.mfui-radio-button__label_disabled):hover .mfui-radio-button__custom-input:before {
84
- border-color: var(--buttonHoverGrey);
85
- background-color: var(--buttonHoverGrey);
85
+ @media (hover: hover) {
86
+ .mfui-radio-button__label_light:not(.mfui-radio-button__label_disabled):hover .mfui-radio-button__custom-input:before {
87
+ border-color: var(--buttonHoverGrey);
88
+ background-color: var(--buttonHoverGrey);
89
+ }
86
90
  }
87
- .mfui-radio-button__label_light:not(.mfui-radio-button__label_disabled):hover .mfui-radio-button__input:checked + .mfui-radio-button__custom-input:before {
88
- background-color: var(--stcBlack);
91
+ @media (hover: hover) {
92
+ .mfui-radio-button__label_light:not(.mfui-radio-button__label_disabled):hover .mfui-radio-button__input:checked + .mfui-radio-button__custom-input:before {
93
+ background-color: var(--stcBlack);
94
+ }
89
95
  }
90
96
  .mfui-radio-button__label_light:not(.mfui-radio-button__label_disabled):active .mfui-radio-button__custom-input:before {
91
97
  border-color: var(--buttonDown);
@@ -1,4 +1,5 @@
1
1
  export { default as Accordion } from './components/Accordion/Accordion';
2
+ export { default as Avatar } from './components/Avatar/Avatar';
2
3
  export { default as Banner } from './components/Banner/Banner';
3
4
  export { default as BannerDot } from './components/Banner/BannerDot';
4
5
  export { default as Button } from './components/Button/Button';
package/dist/lib/index.js CHANGED
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "Accordion", {
9
9
  return _Accordion["default"];
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "Avatar", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _Avatar["default"];
16
+ }
17
+ });
12
18
  Object.defineProperty(exports, "Banner", {
13
19
  enumerable: true,
14
20
  get: function get() {
@@ -378,6 +384,8 @@ Object.defineProperty(exports, "usePagination", {
378
384
 
379
385
  var _Accordion = _interopRequireDefault(require("./components/Accordion/Accordion"));
380
386
 
387
+ var _Avatar = _interopRequireDefault(require("./components/Avatar/Avatar"));
388
+
381
389
  var _Banner = _interopRequireDefault(require("./components/Banner/Banner"));
382
390
 
383
391
  var _BannerDot = _interopRequireDefault(require("./components/Banner/BannerDot"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@megafon/ui-core",
3
- "version": "5.14.1",
3
+ "version": "5.16.0",
4
4
  "files": [
5
5
  "dist",
6
6
  "styles"
@@ -50,7 +50,7 @@
50
50
  "@babel/preset-env": "^7.8.6",
51
51
  "@babel/preset-react": "^7.8.3",
52
52
  "@babel/preset-typescript": "^7.8.3",
53
- "@megafon/ui-icons": "^2.24.0",
53
+ "@megafon/ui-icons": "^2.25.0",
54
54
  "@svgr/core": "^2.4.1",
55
55
  "@testing-library/jest-dom": "5.16.2",
56
56
  "@testing-library/react": "12.1.2",
@@ -86,7 +86,7 @@
86
86
  "dependencies": {
87
87
  "@babel/runtime": "^7.8.4",
88
88
  "@datepicker-react/hooks": "^2.7.0",
89
- "@megafon/ui-helpers": "^2.5.5",
89
+ "@megafon/ui-helpers": "^2.6.0",
90
90
  "@popperjs/core": "^2.5.3",
91
91
  "core-js": "^3.6.4",
92
92
  "date-fns": "^2.16.1",
@@ -97,5 +97,5 @@
97
97
  "react-popper": "^2.2.3",
98
98
  "swiper": "^6.5.6"
99
99
  },
100
- "gitHead": "13dc2b2721607f600ddb332e78fc49b0698c9fe2"
100
+ "gitHead": "0d4f96ecbc805db6a1b2200dd9adbb707349d474"
101
101
  }
package/styles/colors.css CHANGED
@@ -31,6 +31,7 @@
31
31
  --gradientBasic: linear-gradient(90deg, #01873F 0%, #00B956 74%, #14CD6A 100%);
32
32
  --gradientVIP: linear-gradient(90deg, #5B1168 0%, #731982 74%, #821E93 100%);
33
33
  --gradientExclusive: linear-gradient(90deg, #2A2674 0%, #444189 74%, #504D93 100%);
34
+ --gradientScrim: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #FFFFFF 22.73%);
34
35
 
35
36
  /* Static */
36
37
  --stcWhite: #FFFFFF;
@@ -32,6 +32,7 @@
32
32
  --gradientBasic: linear-gradient(90deg, #01873F 0%, #00B956 74%, #14CD6A 100%);
33
33
  --gradientVIP: linear-gradient(90deg, #5B1168 0%, #731982 74%, #821E93 100%);
34
34
  --gradientExclusive: linear-gradient(90deg, #2A2674 0%, #444189 74%, #504D93 100%);
35
+ --gradientScrim: linear-gradient(180deg, rgba(31, 31, 31, 0) 0%, #1F1F1F 22.73%);
35
36
 
36
37
  /* Static */
37
38
  --stcWhite: #FFFFFF;