@megafon/ui-core 5.9.2 → 5.10.1

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 (56) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/es/components/Badges/components/PriceBadge/PriceBadge.css +15 -0
  3. package/dist/es/components/Badges/components/PriceBadge/PriceBadge.d.ts +2 -0
  4. package/dist/es/components/Badges/components/PriceBadge/PriceBadge.js +3 -1
  5. package/dist/es/components/Banner/Banner.css +62 -32
  6. package/dist/es/components/Banner/Banner.d.ts +29 -1
  7. package/dist/es/components/Banner/Banner.js +94 -46
  8. package/dist/es/components/Banner/BannerDot.css +27 -21
  9. package/dist/es/components/Banner/BannerDot.d.ts +8 -1
  10. package/dist/es/components/Banner/BannerDot.js +20 -8
  11. package/dist/es/components/Button/Button.css +6 -0
  12. package/dist/es/components/Button/Button.d.ts +2 -0
  13. package/dist/es/components/Button/Button.js +4 -0
  14. package/dist/es/components/ContentView/ContentView.css +9 -4
  15. package/dist/es/components/ContentView/ContentView.d.ts +6 -0
  16. package/dist/es/components/ContentView/ContentView.js +5 -1
  17. package/dist/es/components/NavArrow/NavArrow.css +16 -0
  18. package/dist/es/components/NavArrow/NavArrow.d.ts +2 -1
  19. package/dist/es/components/NavArrow/NavArrow.js +3 -2
  20. package/dist/es/components/Sliders/Slider/Slider.css +4 -0
  21. package/dist/es/components/Sliders/Slider/Slider.js +3 -3
  22. package/dist/es/components/Sliders/SliderRange/SliderRange.css +4 -0
  23. package/dist/es/components/Sliders/SliderRatio/SliderRatio.css +4 -0
  24. package/dist/es/components/Sliders/SliderRatio/SliderRatio.js +19 -7
  25. package/dist/es/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.css +1 -1
  26. package/dist/es/components/Snackbar/SnackbarTimer/SnackbarTimer.css +3 -0
  27. package/dist/es/components/Snackbar/SnackbarTimer/SnackbarTimer.js +1 -1
  28. package/dist/es/components/Tooltip/Tooltip.css +3 -0
  29. package/dist/lib/components/Badges/components/PriceBadge/PriceBadge.css +15 -0
  30. package/dist/lib/components/Badges/components/PriceBadge/PriceBadge.d.ts +2 -0
  31. package/dist/lib/components/Badges/components/PriceBadge/PriceBadge.js +3 -1
  32. package/dist/lib/components/Banner/Banner.css +62 -32
  33. package/dist/lib/components/Banner/Banner.d.ts +29 -1
  34. package/dist/lib/components/Banner/Banner.js +95 -45
  35. package/dist/lib/components/Banner/BannerDot.css +27 -21
  36. package/dist/lib/components/Banner/BannerDot.d.ts +8 -1
  37. package/dist/lib/components/Banner/BannerDot.js +23 -9
  38. package/dist/lib/components/Button/Button.css +6 -0
  39. package/dist/lib/components/Button/Button.d.ts +2 -0
  40. package/dist/lib/components/Button/Button.js +4 -0
  41. package/dist/lib/components/ContentView/ContentView.css +9 -4
  42. package/dist/lib/components/ContentView/ContentView.d.ts +6 -0
  43. package/dist/lib/components/ContentView/ContentView.js +5 -1
  44. package/dist/lib/components/NavArrow/NavArrow.css +16 -0
  45. package/dist/lib/components/NavArrow/NavArrow.d.ts +2 -1
  46. package/dist/lib/components/NavArrow/NavArrow.js +2 -1
  47. package/dist/lib/components/Sliders/Slider/Slider.css +4 -0
  48. package/dist/lib/components/Sliders/Slider/Slider.js +3 -3
  49. package/dist/lib/components/Sliders/SliderRange/SliderRange.css +4 -0
  50. package/dist/lib/components/Sliders/SliderRatio/SliderRatio.css +4 -0
  51. package/dist/lib/components/Sliders/SliderRatio/SliderRatio.js +19 -7
  52. package/dist/lib/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.css +1 -1
  53. package/dist/lib/components/Snackbar/SnackbarTimer/SnackbarTimer.css +3 -0
  54. package/dist/lib/components/Snackbar/SnackbarTimer/SnackbarTimer.js +1 -1
  55. package/dist/lib/components/Tooltip/Tooltip.css +3 -0
  56. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -3,6 +3,40 @@
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.10.1](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-core@5.10.0...@megafon/ui-core@5.10.1) (2024-04-24)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **banner:** fix children background ([a6e3d12](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/a6e3d127dd5b73dcea4d54e96e95ae8189f61824))
12
+
13
+
14
+
15
+
16
+
17
+ # [5.10.0](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-core@5.9.2...@megafon/ui-core@5.10.0) (2024-04-22)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **sliders:** fix bugs ([2992a34](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/2992a348fab99cc65a190a2892262e7e4b65b693))
23
+ * **snackbartimer:** update color timer value ([911fb68](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/911fb681d36db1e89c43d10f7899fb6038336a36))
24
+ * **tooltip:** add border ([ba4461f](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/ba4461ff86b98a021dca47b7836e2cd2c05cbfcd))
25
+
26
+
27
+ ### Features
28
+
29
+ * **banner:** update Banner component ([a2fde9e](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/a2fde9ebda0993ac9cefe80e61d40780d2b20452))
30
+ * **bannerdot:** update BannerDot component ([22b03d6](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/22b03d61f19304d242229f8c8d925bcd1adb7da4))
31
+ * **button:** add new prop for Button component ([98fb1bd](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/98fb1bd8964ddd76866074d2b8f5890b99253b97))
32
+ * **contentview:** add classes props ([2871dd6](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/2871dd6dd836762da0e9c8c21c07ba445361e6b2))
33
+ * **navarrow:** add new theme for NavArrow component ([aff36c6](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/aff36c6e055bbe708fc45d0cbe22e3a4a3669850))
34
+ * **pricebadge:** add new themes for PriceBadge component ([e521f40](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/e521f405f8b2bc78bd15da5555c397b098f5c81d))
35
+
36
+
37
+
38
+
39
+
6
40
  ## [5.9.2](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-core@5.9.1...@megafon/ui-core@5.9.2) (2024-04-11)
7
41
 
8
42
 
@@ -64,6 +64,21 @@
64
64
  .mfui-price-badge_theme_red .mfui-price-badge__icon {
65
65
  fill: var(--fury);
66
66
  }
67
+ .mfui-price-badge_theme_light {
68
+ background-color: var(--stcWhite20);
69
+ }
70
+ .mfui-price-badge_theme_dark {
71
+ background-color: var(--stcBlack20);
72
+ }
73
+ .mfui-price-badge_theme_light .mfui-price-badge__text,
74
+ .mfui-price-badge_theme_dark .mfui-price-badge__text {
75
+ font-weight: 400;
76
+ color: var(--stcWhite);
77
+ }
78
+ .mfui-price-badge_theme_light .mfui-price-badge__icon,
79
+ .mfui-price-badge_theme_dark .mfui-price-badge__icon {
80
+ fill: var(--stcWhite);
81
+ }
67
82
  .mfui-price-badge_size_big {
68
83
  padding: 12px 12px 12px 4px;
69
84
  font-size: 15px;
@@ -5,6 +5,8 @@ export declare const PriceBadgeTheme: {
5
5
  readonly GREY: "grey";
6
6
  readonly GREEN: "green";
7
7
  readonly ORANGE: "orange";
8
+ readonly LIGHT: "light";
9
+ readonly DARK: "dark";
8
10
  };
9
11
  export declare const PriceBadgeIcon: {
10
12
  readonly TIMER: "timer";
@@ -117,7 +117,9 @@ export var PriceBadgeTheme = {
117
117
  RED: 'red',
118
118
  GREY: 'grey',
119
119
  GREEN: 'green',
120
- ORANGE: 'orange'
120
+ ORANGE: 'orange',
121
+ LIGHT: 'light',
122
+ DARK: 'dark'
121
123
  };
122
124
  export var PriceBadgeIcon = {
123
125
  TIMER: 'timer',
@@ -1,31 +1,19 @@
1
1
  .mfui-banner {
2
2
  position: relative;
3
- overflow: hidden;
4
3
  }
5
4
  .mfui-banner .swiper-wrapper {
6
5
  display: -webkit-box;
7
6
  display: -ms-flexbox;
8
7
  display: flex;
9
8
  }
9
+ .mfui-banner__swiper {
10
+ overflow: hidden;
11
+ }
10
12
  .mfui-banner__slide {
11
13
  -ms-flex-negative: 0;
12
14
  flex-shrink: 0;
13
15
  height: 500px;
14
16
  }
15
- @media screen and (min-width: 768px) and (max-width: 1023px) {
16
- .mfui-banner__slide {
17
- height: 540px;
18
- }
19
- }
20
- @media screen and (min-width: 1024px) {
21
- .mfui-banner__slide {
22
- -webkit-backface-visibility: hidden;
23
- backface-visibility: hidden;
24
- opacity: 0;
25
- -webkit-transition: opacity 0.2s;
26
- transition: opacity 0.2s;
27
- }
28
- }
29
17
  @media screen and (min-width: 1024px) and (max-width: 1279px) {
30
18
  .mfui-banner__slide {
31
19
  height: 420px;
@@ -50,14 +38,24 @@
50
38
  position: absolute;
51
39
  top: 50%;
52
40
  z-index: 10;
53
- -webkit-transform: translateY(-50%);
54
- transform: translateY(-50%);
41
+ translate: 0 -50%;
42
+ -webkit-transition: scale 0.2s linear;
43
+ transition: scale 0.2s linear;
55
44
  }
56
45
  @media screen and (max-width: 767px) {
57
46
  .mfui-banner__arrow {
58
47
  display: none;
59
48
  }
60
49
  }
50
+ .mfui-banner__arrow_theme_white {
51
+ width: 64px;
52
+ height: 64px;
53
+ }
54
+ @media screen and (max-width: 1023px) {
55
+ .mfui-banner__arrow_theme_white {
56
+ display: none;
57
+ }
58
+ }
61
59
  .mfui-banner__arrow_prev {
62
60
  left: 12px;
63
61
  }
@@ -94,33 +92,44 @@
94
92
  right: 20px;
95
93
  }
96
94
  }
95
+ .mfui-banner__arrow_prev.mfui-banner__arrow_theme_white {
96
+ left: 0;
97
+ translate: -50% -50%;
98
+ }
99
+ .mfui-banner__arrow_next.mfui-banner__arrow_theme_white {
100
+ right: 0;
101
+ translate: 50% -50%;
102
+ }
103
+ .mfui-banner_no-touch .mfui-banner__arrow_theme_white:hover {
104
+ scale: 1.25;
105
+ }
106
+ .mfui-banner_no-touch .mfui-banner__arrow_theme_white:active {
107
+ scale: 1.125;
108
+ }
97
109
  .mfui-banner__pagination {
98
110
  position: absolute;
99
- bottom: 16px;
111
+ bottom: 24px;
100
112
  left: 50%;
101
113
  z-index: 10;
102
114
  display: -webkit-box;
103
115
  display: -ms-flexbox;
104
116
  display: flex;
117
+ gap: 8px;
105
118
  -webkit-box-align: center;
106
119
  -ms-flex-align: center;
107
120
  align-items: center;
108
121
  -webkit-box-pack: center;
109
122
  -ms-flex-pack: center;
110
123
  justify-content: center;
111
- padding: 6px;
124
+ padding: 6px 10px;
112
125
  border-radius: 12px;
113
126
  -webkit-transform: translateX(-50%);
114
127
  transform: translateX(-50%);
115
128
  }
116
- .mfui-banner__pagination_theme_light {
117
- background-color: transparent;
118
- }
119
- .mfui-banner__pagination_theme_green {
120
- background-color: var(--brandGreen);
121
- }
122
- .mfui-banner__pagination_theme_dark {
123
- background-color: var(--stcBlack20);
129
+ @media screen and (min-width: 1024px) {
130
+ .mfui-banner__pagination {
131
+ bottom: 16px;
132
+ }
124
133
  }
125
134
  .mfui-banner__pagination_bottom-offset {
126
135
  bottom: 60px;
@@ -145,10 +154,31 @@
145
154
  bottom: 72px;
146
155
  }
147
156
  }
148
- .mfui-banner__dot {
149
- width: 12px;
150
- height: 12px;
157
+ .mfui-banner__pagination_theme_light {
158
+ background-color: var(--stcWhite20);
159
+ }
160
+ .mfui-banner__pagination_theme_dark {
161
+ background-color: var(--stcBlack20);
162
+ }
163
+ .mfui-banner_radius_rounded {
164
+ border-radius: 24px;
165
+ }
166
+ .mfui-banner_radius_rounded .mfui-banner__swiper {
167
+ border-radius: 24px;
168
+ }
169
+ .mfui-banner_background-color_green {
170
+ background-color: var(--brandGreen);
171
+ }
172
+ .mfui-banner_background-color_purple {
173
+ background-color: var(--brandPurple);
174
+ }
175
+ .mfui-banner_background-color_gradient {
176
+ background: -webkit-gradient(linear, right top, left top, from(#ADA6BA), to(#F6F2F9));
177
+ background: linear-gradient(270deg, #ADA6BA 0%, #F6F2F9 100%);
178
+ }
179
+ .mfui-banner_background-color_light {
180
+ background-color: #F6F2F9;
151
181
  }
152
- .mfui-banner__dot:not(:last-child) {
153
- margin-right: 8px;
182
+ .mfui-banner_background-color_spbSky0 {
183
+ background-color: var(--spbSky0);
154
184
  }
@@ -1,8 +1,23 @@
1
1
  import * as React from 'react';
2
+ import SwiperCore from 'swiper';
3
+ import { ThemeType as ArrowThemeType } from '../NavArrow/NavArrow';
2
4
  import './Banner.less';
5
+ export declare const BackgroundColor: {
6
+ readonly TRANSPARENT: "transparent";
7
+ readonly GREEN: "green";
8
+ readonly PURPLE: "purple";
9
+ readonly SPB_SKY_0: "spbSky0";
10
+ readonly GRADIENT: "gradient";
11
+ readonly LIGHT: "light";
12
+ };
13
+ declare type BackgroundColorType = typeof BackgroundColor[keyof typeof BackgroundColor];
14
+ export declare const Radius: {
15
+ readonly CORNERS: "corners";
16
+ readonly ROUNDED: "rounded";
17
+ };
18
+ export declare type RadiusType = typeof Radius[keyof typeof Radius];
3
19
  export declare const NavTheme: {
4
20
  readonly LIGHT: "light";
5
- readonly GREEN: "green";
6
21
  readonly DARK: "dark";
7
22
  };
8
23
  declare type NavThemeType = typeof NavTheme[keyof typeof NavTheme];
@@ -13,8 +28,13 @@ export interface IBannerProps {
13
28
  loop?: boolean;
14
29
  /** Дополнительные классы для корневого и внутренних элементов */
15
30
  classes?: {
31
+ swiper?: string;
16
32
  slide?: string;
17
33
  arrow?: string;
34
+ arrowPrev?: string;
35
+ arrowNext?: string;
36
+ pagination?: string;
37
+ dot?: string;
18
38
  };
19
39
  /** Дополнительные data атрибуты к внутренним элементам */
20
40
  dataAttrs?: {
@@ -34,10 +54,18 @@ export interface IBannerProps {
34
54
  autoPlayDelay?: number;
35
55
  /** Пауза автоматической прокрутки при наведении курсора на компонент */
36
56
  pauseOnHover?: boolean;
57
+ /** Фоновый цвет */
58
+ backgroundColor?: BackgroundColorType;
59
+ /** Радиус границы */
60
+ radius?: RadiusType;
37
61
  /** Цветовая тема навигации */
38
62
  navTheme?: NavThemeType;
63
+ /** Цветовая тема стрелок */
64
+ arrowTheme?: ArrowThemeType;
39
65
  /** Автоматическая высота слайдов */
40
66
  autoHeight?: boolean;
67
+ /** Ref на swiper */
68
+ getSwiper?: (instance: SwiperCore) => void;
41
69
  /** Обработчик клика по стрелке "вперед" (должен быть обернут в useCallback) */
42
70
  onNextClick?: (index: number) => void;
43
71
  /** Обработчик клика по стрелке "назад" (должен быть обернут в useCallback) */
@@ -4,17 +4,28 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  import "core-js/modules/es.array.map.js";
5
5
  import "core-js/modules/es.object.values.js";
6
6
  import * as React from 'react';
7
- import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
7
+ import { cnCreate, detectTouch, filterDataAttrs } from '@megafon/ui-helpers';
8
8
  import * as PropTypes from 'prop-types';
9
9
  import SwiperCore, { Autoplay } from 'swiper';
10
10
  import { Swiper, SwiperSlide } from 'swiper/react';
11
11
  import NavArrow, { Theme as ArrowTheme } from "../NavArrow/NavArrow";
12
- import "./Banner.css";
13
12
  import BannerDot from "./BannerDot";
13
+ import "./Banner.css";
14
14
  SwiperCore.use([Autoplay]);
15
+ export var BackgroundColor = {
16
+ TRANSPARENT: 'transparent',
17
+ GREEN: 'green',
18
+ PURPLE: 'purple',
19
+ SPB_SKY_0: 'spbSky0',
20
+ GRADIENT: 'gradient',
21
+ LIGHT: 'light'
22
+ };
23
+ export var Radius = {
24
+ CORNERS: 'corners',
25
+ ROUNDED: 'rounded'
26
+ };
15
27
  export var NavTheme = {
16
28
  LIGHT: 'light',
17
- GREEN: 'green',
18
29
  DARK: 'dark'
19
30
  };
20
31
 
@@ -42,11 +53,18 @@ var Banner = function Banner(_ref) {
42
53
  _ref$loop = _ref.loop,
43
54
  loop = _ref$loop === void 0 ? false : _ref$loop,
44
55
  _ref$navTheme = _ref.navTheme,
45
- navTheme = _ref$navTheme === void 0 ? 'light' : _ref$navTheme,
56
+ navTheme = _ref$navTheme === void 0 ? NavTheme.LIGHT : _ref$navTheme,
57
+ _ref$arrowTheme = _ref.arrowTheme,
58
+ arrowTheme = _ref$arrowTheme === void 0 ? ArrowTheme.DARK : _ref$arrowTheme,
59
+ _ref$backgroundColor = _ref.backgroundColor,
60
+ backgroundColor = _ref$backgroundColor === void 0 ? BackgroundColor.TRANSPARENT : _ref$backgroundColor,
61
+ _ref$radius = _ref.radius,
62
+ radius = _ref$radius === void 0 ? Radius.ROUNDED : _ref$radius,
46
63
  _ref$autoHeight = _ref.autoHeight,
47
64
  autoHeight = _ref$autoHeight === void 0 ? false : _ref$autoHeight,
48
65
  _ref$children = _ref.children,
49
66
  children = _ref$children === void 0 ? [] : _ref$children,
67
+ getSwiper = _ref.getSwiper,
50
68
  onNextClick = _ref.onNextClick,
51
69
  onPrevClick = _ref.onPrevClick,
52
70
  onDotClick = _ref.onDotClick,
@@ -55,44 +73,49 @@ var Banner = function Banner(_ref) {
55
73
  _ref$pauseOnHover = _ref.pauseOnHover,
56
74
  pauseOnHover = _ref$pauseOnHover === void 0 ? false : _ref$pauseOnHover;
57
75
 
58
- var _React$useState = React.useState(),
76
+ var _React$useState = React.useState(false),
59
77
  _React$useState2 = _slicedToArray(_React$useState, 2),
60
- swiperInstance = _React$useState2[0],
61
- setSwiperInstance = _React$useState2[1];
78
+ isTouch = _React$useState2[0],
79
+ setTouch = _React$useState2[1];
62
80
 
63
- var _React$useState3 = React.useState(true),
81
+ var _React$useState3 = React.useState(),
64
82
  _React$useState4 = _slicedToArray(_React$useState3, 2),
65
- isBeginning = _React$useState4[0],
66
- setBeginning = _React$useState4[1];
83
+ swiperInstance = _React$useState4[0],
84
+ setSwiperInstance = _React$useState4[1];
67
85
 
68
- var _React$useState5 = React.useState(false),
86
+ var _React$useState5 = React.useState(true),
69
87
  _React$useState6 = _slicedToArray(_React$useState5, 2),
70
- isEnd = _React$useState6[0],
71
- setEnd = _React$useState6[1];
88
+ isBeginning = _React$useState6[0],
89
+ setBeginning = _React$useState6[1];
72
90
 
73
- var _React$useState7 = React.useState(autoPlay),
91
+ var _React$useState7 = React.useState(false),
74
92
  _React$useState8 = _slicedToArray(_React$useState7, 2),
75
- isAutoPlaying = _React$useState8[0],
76
- setAutoPlaying = _React$useState8[1];
93
+ isEnd = _React$useState8[0],
94
+ setEnd = _React$useState8[1];
77
95
 
78
- var _React$useState9 = React.useState(0),
96
+ var _React$useState9 = React.useState(autoPlay),
79
97
  _React$useState10 = _slicedToArray(_React$useState9, 2),
80
- activeIndex = _React$useState10[0],
81
- setActiveIndex = _React$useState10[1];
98
+ isAutoPlaying = _React$useState10[0],
99
+ setAutoPlaying = _React$useState10[1];
82
100
 
83
- var _React$useState11 = React.useState(autoPlayDelay),
101
+ var _React$useState11 = React.useState(0),
84
102
  _React$useState12 = _slicedToArray(_React$useState11, 2),
85
- delay = _React$useState12[0],
86
- setDelay = _React$useState12[1];
103
+ activeIndex = _React$useState12[0],
104
+ setActiveIndex = _React$useState12[1];
87
105
 
88
- var _React$useState13 = React.useState(false),
106
+ var _React$useState13 = React.useState(autoPlayDelay),
89
107
  _React$useState14 = _slicedToArray(_React$useState13, 2),
90
- isIncreasedDelay = _React$useState14[0],
91
- setIsIncreasedDelay = _React$useState14[1];
108
+ delay = _React$useState14[0],
109
+ setDelay = _React$useState14[1];
110
+
111
+ var _React$useState15 = React.useState(false),
112
+ _React$useState16 = _slicedToArray(_React$useState15, 2),
113
+ isIncreasedDelay = _React$useState16[0],
114
+ setIsIncreasedDelay = _React$useState16[1];
92
115
 
116
+ var isSingleSlide = React.Children.count(children) === 1;
93
117
  var showDotTimer = loop ? isAutoPlaying : isAutoPlaying && !isEnd;
94
118
  var dotTimerDelay = delay / 1000;
95
- var navArrowTheme = navTheme === NavTheme.DARK ? ArrowTheme.DARK : ArrowTheme.PURPLE;
96
119
  var rootRef = React.useRef(null);
97
120
  var increaseAutoplayDelay = React.useCallback(function (_ref2) {
98
121
  var params = _ref2.params,
@@ -162,6 +185,13 @@ var Banner = function Banner(_ref) {
162
185
  setActiveIndex(realIndex);
163
186
  onChange === null || onChange === void 0 ? void 0 : onChange(realIndex);
164
187
  }, [onChange]);
188
+ var handleSwiper = React.useCallback(function (swiper) {
189
+ setSwiperInstance(swiper);
190
+ getSwiper === null || getSwiper === void 0 ? void 0 : getSwiper(swiper);
191
+ }, [getSwiper]);
192
+ React.useEffect(function () {
193
+ setTouch(detectTouch());
194
+ }, []);
165
195
  React.useEffect(function () {
166
196
  var rootElement = rootRef.current;
167
197
 
@@ -181,15 +211,18 @@ var Banner = function Banner(_ref) {
181
211
  return /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
182
212
  className: cn({
183
213
  'nav-theme': navTheme,
184
- 'auto-height': autoHeight
214
+ 'auto-height': autoHeight,
215
+ 'background-color': backgroundColor,
216
+ 'no-touch': !isTouch,
217
+ radius: radius
185
218
  }, className),
186
219
  ref: rootRef
187
220
  }), /*#__PURE__*/React.createElement(Swiper, _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.swiper), {
188
- className: cn('swiper'),
221
+ className: cn('swiper', [classes.swiper]),
189
222
  loop: loop,
190
223
  autoplay: autoPlay ? getAutoPlayConfig(autoPlayDelay) : false,
191
224
  watchSlidesVisibility: true,
192
- onSwiper: setSwiperInstance,
225
+ onSwiper: handleSwiper,
193
226
  onReachBeginning: handleReachBeginning,
194
227
  onReachEnd: handleReachEnd,
195
228
  onFromEdge: handleFromEdge,
@@ -197,58 +230,68 @@ var Banner = function Banner(_ref) {
197
230
  onTouchEnd: increaseAutoplayDelay
198
231
  }), React.Children.map(children, function (child, i) {
199
232
  return /*#__PURE__*/React.createElement(SwiperSlide, _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.slide, i + 1), {
200
- key: i,
201
- className: cn('slide', classes === null || classes === void 0 ? void 0 : classes.slide)
202
- }), child);
203
- })), /*#__PURE__*/React.createElement(NavArrow, {
233
+ className: cn('slide', [classes.slide]),
234
+ key: i
235
+ }), /*#__PURE__*/React.isValidElement(child) && /*#__PURE__*/React.cloneElement(child, {
236
+ hasBottomOffset: !isSingleSlide
237
+ }));
238
+ })), !isSingleSlide && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(NavArrow, {
239
+ className: cn('arrow', {
240
+ prev: true,
241
+ theme: arrowTheme
242
+ }, [classes.arrow, classes.arrowPrev]),
204
243
  dataAttrs: {
205
244
  root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.arrowPrev
206
245
  },
207
- className: cn('arrow', {
208
- prev: true
209
- }, [classes.arrow]),
210
246
  onClick: handlePrevClick,
211
247
  disabled: !loop && isBeginning,
212
- theme: navArrowTheme
248
+ theme: arrowTheme
213
249
  }), /*#__PURE__*/React.createElement(NavArrow, {
250
+ className: cn('arrow', {
251
+ next: true,
252
+ theme: arrowTheme
253
+ }, [classes.arrow, classes.arrowNext]),
214
254
  dataAttrs: {
215
255
  root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.arrowNext
216
256
  },
217
- className: cn('arrow', {
218
- next: true
219
- }, [classes.arrow]),
220
257
  view: "next",
221
258
  onClick: handleNextClick,
222
259
  disabled: !loop && isEnd,
223
- theme: navArrowTheme
260
+ theme: arrowTheme
224
261
  }), /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.pagination), {
225
262
  className: cn('pagination', {
226
263
  theme: navTheme,
227
264
  'bottom-offset': withPaginationBottomOffset
228
- })
265
+ }, [classes.pagination])
229
266
  }), React.Children.map(children, function (_, i) {
230
267
  return /*#__PURE__*/React.createElement(BannerDot, {
268
+ className: cn('dot', [classes.dot]),
231
269
  dataAttrs: {
232
270
  root: _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.dot, i + 1))
233
271
  },
234
272
  key: i,
235
- className: cn('dot'),
236
273
  index: i,
237
274
  isActive: i === activeIndex,
238
275
  showTimer: showDotTimer,
239
276
  timerDelay: dotTimerDelay,
277
+ theme: navTheme,
240
278
  onClick: handleDotClick
241
279
  });
242
- })));
280
+ }))));
243
281
  };
244
282
 
245
283
  Banner.propTypes = {
246
284
  className: PropTypes.string,
247
285
  loop: PropTypes.bool,
248
286
  classes: PropTypes.shape({
249
- slide: PropTypes.string
287
+ swiper: PropTypes.string,
288
+ slide: PropTypes.string,
289
+ arrow: PropTypes.string,
290
+ arrowPrev: PropTypes.string,
291
+ arrowNext: PropTypes.string,
292
+ pagination: PropTypes.string,
293
+ dot: PropTypes.string
250
294
  }),
251
- withPaginationBottomOffset: PropTypes.bool,
252
295
  dataAttrs: PropTypes.shape({
253
296
  root: PropTypes.objectOf(PropTypes.string.isRequired),
254
297
  swiper: PropTypes.objectOf(PropTypes.string.isRequired),
@@ -258,11 +301,16 @@ Banner.propTypes = {
258
301
  pagination: PropTypes.objectOf(PropTypes.string.isRequired),
259
302
  dot: PropTypes.objectOf(PropTypes.string.isRequired)
260
303
  }),
304
+ withPaginationBottomOffset: PropTypes.bool,
261
305
  autoPlay: PropTypes.bool,
262
306
  autoPlayDelay: PropTypes.number,
263
307
  pauseOnHover: PropTypes.bool,
308
+ backgroundColor: PropTypes.oneOf(Object.values(BackgroundColor)),
309
+ radius: PropTypes.oneOf(Object.values(Radius)),
264
310
  navTheme: PropTypes.oneOf(Object.values(NavTheme)),
311
+ arrowTheme: PropTypes.oneOf(Object.values(ArrowTheme)),
265
312
  autoHeight: PropTypes.bool,
313
+ getSwiper: PropTypes.func,
266
314
  onNextClick: PropTypes.func,
267
315
  onPrevClick: PropTypes.func,
268
316
  onDotClick: PropTypes.func,
@@ -1,4 +1,5 @@
1
1
  .mfui-banner-dot {
2
+ position: relative;
2
3
  display: -webkit-box;
3
4
  display: -ms-flexbox;
4
5
  display: flex;
@@ -11,60 +12,65 @@
11
12
  -webkit-box-sizing: border-box;
12
13
  box-sizing: border-box;
13
14
  padding: 2px;
14
- border-radius: 50%;
15
15
  cursor: pointer;
16
16
  }
17
17
  .mfui-banner-dot:before {
18
18
  content: '';
19
19
  display: block;
20
- width: 100%;
21
- height: 100%;
22
- border-radius: 50%;
20
+ width: 8px;
21
+ height: 8px;
22
+ border-radius: 4px;
23
23
  background-color: var(--stcWhite50);
24
24
  }
25
+ .mfui-banner-dot_theme_light.mfui-banner-dot_active:before {
26
+ background-color: var(--stcWhite);
27
+ }
28
+ .mfui-banner-dot_theme_light.mfui-banner-dot_active .mfui-banner-dot__timer-inner {
29
+ fill: var(--stcWhite);
30
+ }
31
+ .mfui-banner-dot_theme_dark.mfui-banner-dot_active:before {
32
+ background-color: var(--brandGreen);
33
+ }
34
+ .mfui-banner-dot_theme_dark.mfui-banner-dot_active .mfui-banner-dot__timer-inner {
35
+ fill: var(--brandGreen);
36
+ }
25
37
  .mfui-banner-dot_active {
26
- padding: 0;
27
38
  cursor: default;
28
39
  }
29
40
  .mfui-banner-dot_active:before {
30
- background-color: var(--stcWhite);
41
+ width: 24px;
31
42
  }
32
43
  .mfui-banner-dot_active.mfui-banner-dot_timer:before {
33
- display: none;
44
+ background-color: var(--stcWhite50);
34
45
  }
35
46
  .mfui-banner-dot__timer {
47
+ position: absolute;
36
48
  display: block;
37
- width: 100%;
38
- height: 100%;
39
- border-radius: 50%;
40
- -webkit-transform: rotate(90deg);
41
- transform: rotate(90deg);
49
+ width: 24px;
50
+ height: 8px;
51
+ border-radius: 4px;
42
52
  }
43
- .mfui-banner-dot__timer-circle {
53
+ .mfui-banner-dot__timer-inner {
44
54
  -webkit-transform: scale(-1, 1);
45
55
  transform: scale(-1, 1);
46
56
  -webkit-transform-origin: center;
47
57
  transform-origin: center;
48
58
  -webkit-animation: timer linear;
49
59
  animation: timer linear;
50
- fill: var(--stcWhite50);
51
- stroke: var(--base);
52
- stroke-width: 100;
53
- stroke-dasharray: 1000;
54
60
  }
55
61
  @-webkit-keyframes timer {
56
62
  0% {
57
- stroke-dashoffset: -350;
63
+ width: 100%;
58
64
  }
59
65
  100% {
60
- stroke-dashoffset: 0;
66
+ width: 0;
61
67
  }
62
68
  }
63
69
  @keyframes timer {
64
70
  0% {
65
- stroke-dashoffset: -350;
71
+ width: 100%;
66
72
  }
67
73
  100% {
68
- stroke-dashoffset: 0;
74
+ width: 0;
69
75
  }
70
76
  }
@@ -1,15 +1,22 @@
1
1
  import * as React from 'react';
2
2
  import './BannerDot.less';
3
+ export declare const BannerDotTheme: {
4
+ readonly LIGHT: "light";
5
+ readonly DARK: "dark";
6
+ };
7
+ declare type BannerDotThemeType = typeof BannerDotTheme[keyof typeof BannerDotTheme];
3
8
  export interface IBannerDotProps {
4
9
  className?: string;
5
10
  index: number;
6
11
  isActive: boolean;
7
12
  showTimer: boolean;
8
13
  timerDelay: number;
14
+ /** Цветовая тема */
15
+ theme?: BannerDotThemeType;
9
16
  dataAttrs?: {
10
17
  root?: Record<string, string>;
11
18
  svg?: Record<string, string>;
12
- circle?: Record<string, string>;
19
+ inner?: Record<string, string>;
13
20
  };
14
21
  onClick: (index: number) => void;
15
22
  }