@megafon/ui-core 8.3.0 → 8.5.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 (46) hide show
  1. package/dist/es/components/Banner/Banner.css +1 -1
  2. package/dist/es/components/Banner/Banner.d.ts +26 -0
  3. package/dist/es/components/Banner/Banner.js +25 -1
  4. package/dist/es/components/Banner/BannerDot.css +1 -1
  5. package/dist/es/components/Banner/BannerDot.d.ts +3 -0
  6. package/dist/es/components/Banner/BannerDot.js +23 -11
  7. package/dist/es/components/Chips/Chip.css +1 -1
  8. package/dist/es/components/Chips/Chip.d.ts +3 -0
  9. package/dist/es/components/Chips/Chip.js +4 -2
  10. package/dist/es/components/Chips/Chips.css +1 -1
  11. package/dist/es/components/Chips/Chips.d.ts +16 -2
  12. package/dist/es/components/Chips/Chips.js +62 -20
  13. package/dist/{lib/components/Chips/components → es/components/Chips/components/ChipsDropdown}/ChipsDropdown.d.ts +2 -2
  14. package/dist/es/components/Chips/components/{ChipsDropdown.js → ChipsDropdown/ChipsDropdown.js} +7 -4
  15. package/dist/es/components/Chips/components/ChipsScrollPanel/ChipsScrollPanel.css +1 -0
  16. package/dist/es/components/Chips/components/ChipsScrollPanel/ChipsScrollPanel.d.ts +11 -0
  17. package/dist/es/components/Chips/components/ChipsScrollPanel/ChipsScrollPanel.js +83 -0
  18. package/dist/es/components/Modal/_ModalContent/ModalContent.css +1 -1
  19. package/dist/es/components/Modal/_ModalContent/ModalContent.js +10 -2
  20. package/dist/es/index.d.ts +2 -1
  21. package/dist/es/index.js +2 -1
  22. package/dist/lib/components/Banner/Banner.css +1 -1
  23. package/dist/lib/components/Banner/Banner.d.ts +26 -0
  24. package/dist/lib/components/Banner/Banner.js +26 -2
  25. package/dist/lib/components/Banner/BannerDot.css +1 -1
  26. package/dist/lib/components/Banner/BannerDot.d.ts +3 -0
  27. package/dist/lib/components/Banner/BannerDot.js +23 -11
  28. package/dist/lib/components/Chips/Chip.css +1 -1
  29. package/dist/lib/components/Chips/Chip.d.ts +3 -0
  30. package/dist/lib/components/Chips/Chip.js +4 -2
  31. package/dist/lib/components/Chips/Chips.css +1 -1
  32. package/dist/lib/components/Chips/Chips.d.ts +16 -2
  33. package/dist/lib/components/Chips/Chips.js +61 -19
  34. package/dist/{es/components/Chips/components → lib/components/Chips/components/ChipsDropdown}/ChipsDropdown.d.ts +2 -2
  35. package/dist/lib/components/Chips/components/{ChipsDropdown.js → ChipsDropdown/ChipsDropdown.js} +7 -4
  36. package/dist/lib/components/Chips/components/ChipsScrollPanel/ChipsScrollPanel.css +1 -0
  37. package/dist/lib/components/Chips/components/ChipsScrollPanel/ChipsScrollPanel.d.ts +11 -0
  38. package/dist/lib/components/Chips/components/ChipsScrollPanel/ChipsScrollPanel.js +92 -0
  39. package/dist/lib/components/Modal/_ModalContent/ModalContent.css +1 -1
  40. package/dist/lib/components/Modal/_ModalContent/ModalContent.js +10 -2
  41. package/dist/lib/index.d.ts +2 -1
  42. package/dist/lib/index.js +8 -1
  43. package/package.json +3 -3
  44. package/styles/colors.css +5 -5
  45. /package/dist/es/components/Chips/components/{ChipsDropdown.css → ChipsDropdown/ChipsDropdown.css} +0 -0
  46. /package/dist/lib/components/Chips/components/{ChipsDropdown.css → ChipsDropdown/ChipsDropdown.css} +0 -0
@@ -1 +1 @@
1
- h1,h2,h3,h4,h5{margin:0}.mfui-banner{position:relative}.mfui-banner .swiper-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex}.mfui-banner .mfui-banner__swiper-container{position:relative}.mfui-banner__swiper{overflow:hidden}.mfui-banner__slide{-ms-flex-negative:0;flex-shrink:0;height:500px}@media screen and (min-width:1024px) and (max-width:1279px){.mfui-banner__slide{height:420px}}@media screen and (min-width:1280px){.mfui-banner__slide{height:400px}}.mfui-banner__slide-content{border-right:1px solid transparent;margin-right:-1px}@media screen and (max-width:1023px){.mfui-banner__slide-content{height:100%}}.mfui-banner_auto-height .mfui-banner__slide{height:auto}.mfui-banner .mfui-banner__arrow{position:absolute;top:50%;-webkit-transition:scale .2s linear;transition:scale .2s linear;translate:0 -50%;z-index:10}@media screen and (max-width:767px){.mfui-banner .mfui-banner__arrow{display:none}}.mfui-banner .mfui-banner__arrow_theme_white{height:64px;width:64px}@media screen and (max-width:1023px){.mfui-banner .mfui-banner__arrow_theme_white{display:none}}.mfui-banner .mfui-banner__arrow_prev{left:12px}@media screen and (max-width:767px){.mfui-banner .mfui-banner__arrow_prev{left:8px}}@media screen and (min-width:768px) and (max-width:1023px){.mfui-banner .mfui-banner__arrow_prev{left:16px}}@media screen and (min-width:1280px){.mfui-banner .mfui-banner__arrow_prev{left:20px}}.mfui-banner .mfui-banner__arrow_next{right:12px}@media screen and (max-width:767px){.mfui-banner .mfui-banner__arrow_next{right:8px}}@media screen and (min-width:768px) and (max-width:1023px){.mfui-banner .mfui-banner__arrow_next{right:16px}}@media screen and (min-width:1280px){.mfui-banner .mfui-banner__arrow_next{right:20px}}.mfui-banner .mfui-banner__arrow_prev.mfui-banner__arrow_theme_white{left:0;translate:-50% -50%}.mfui-banner .mfui-banner__arrow_next.mfui-banner__arrow_theme_white{right:0;translate:50% -50%}.mfui-banner_no-touch .mfui-banner__arrow_theme_white:hover{scale:1.25}.mfui-banner_no-touch .mfui-banner__arrow_theme_white:active{scale:1.125}.mfui-banner__pagination{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;left:50%;z-index:10;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:32px}.mfui-banner__pagination_bottom-offset{bottom:60px;left:50%;position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:10}@media screen and (min-width:768px) and (max-width:1023px){.mfui-banner__pagination_bottom-offset{bottom:89px}}@media screen and (min-width:1024px) and (max-width:1279px){.mfui-banner__pagination_bottom-offset{bottom:90px}}@media screen and (min-width:1280px) and (max-width:1439px){.mfui-banner__pagination_bottom-offset{bottom:65px}}@media screen and (min-width:1440px){.mfui-banner__pagination_bottom-offset{bottom:72px}}.mfui-banner_margin-top{margin-top:24px}.mfui-banner_radius_rounded .mfui-banner__swiper{border-radius:24px}@media screen and (max-width:767px){.mfui-banner_show-next-slide .mfui-banner__swiper{border-radius:0;margin-left:-16px;margin-right:-16px;padding-left:16px;padding-right:32px}.mfui-banner_show-next-slide .mfui-banner__slide-content{border-right:none;margin-right:0}.mfui-banner_show-next-slide.mfui-banner_radius_rounded .mfui-banner__slide-content{border-radius:24px}}.mfui-banner_background-color_green .mfui-banner__swiper{background-color:var(--brandGreen)}.mfui-banner_background-color_purple .mfui-banner__swiper{background-color:var(--brandPurple)}.mfui-banner_background-color_gradient .mfui-banner__swiper{background:-webkit-gradient(linear,right top,left top,from(#ada6ba),to(#f6f2f9));background:linear-gradient(270deg,#ada6ba,#f6f2f9)}.mfui-banner_background-color_light .mfui-banner__swiper{background-color:#f6f2f9}.mfui-banner_background-color_spbSky0 .mfui-banner__swiper{background-color:var(--spbSky0)}
1
+ h1,h2,h3,h4,h5{margin:0}.mfui-banner{position:relative}.mfui-banner .swiper-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex}.mfui-banner .mfui-banner__swiper-container{position:relative}.mfui-banner__swiper{overflow:hidden}.mfui-banner__slide{-ms-flex-negative:0;flex-shrink:0;height:500px}@media screen and (min-width:1024px) and (max-width:1279px){.mfui-banner__slide{height:420px}}@media screen and (min-width:1280px){.mfui-banner__slide{height:400px}}.mfui-banner__slide-content{border-right:1px solid transparent;margin-right:-1px}@media screen and (max-width:1023px){.mfui-banner__slide-content{height:100%}}.mfui-banner_auto-height .mfui-banner__slide{height:auto}.mfui-banner .mfui-banner__arrow{position:absolute;top:50%;-webkit-transition:scale .2s linear;transition:scale .2s linear;translate:0 -50%;z-index:10}@media screen and (max-width:767px){.mfui-banner .mfui-banner__arrow{display:none}}.mfui-banner .mfui-banner__arrow_theme_white{height:64px;width:64px}@media screen and (max-width:1023px){.mfui-banner .mfui-banner__arrow_theme_white{display:none}}.mfui-banner .mfui-banner__arrow_prev{left:12px}@media screen and (max-width:767px){.mfui-banner .mfui-banner__arrow_prev{left:8px}}@media screen and (min-width:768px) and (max-width:1023px){.mfui-banner .mfui-banner__arrow_prev{left:16px}}@media screen and (min-width:1280px){.mfui-banner .mfui-banner__arrow_prev{left:20px}}.mfui-banner .mfui-banner__arrow_next{right:12px}@media screen and (max-width:767px){.mfui-banner .mfui-banner__arrow_next{right:8px}}@media screen and (min-width:768px) and (max-width:1023px){.mfui-banner .mfui-banner__arrow_next{right:16px}}@media screen and (min-width:1280px){.mfui-banner .mfui-banner__arrow_next{right:20px}}.mfui-banner .mfui-banner__arrow_prev.mfui-banner__arrow_theme_white{left:0;translate:-50% -50%}.mfui-banner .mfui-banner__arrow_next.mfui-banner__arrow_theme_white{right:0;translate:50% -50%}.mfui-banner_no-touch .mfui-banner__arrow_theme_white:hover{scale:1.25}.mfui-banner_no-touch .mfui-banner__arrow_theme_white:active{scale:1.125}.mfui-banner__pagination{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;left:50%;z-index:10;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:32px}.mfui-banner__pagination_position_top-in{left:0;margin-top:0;padding:0 24px;position:absolute;top:16px;width:100%}@media screen and (min-width:1280px){.mfui-banner__pagination_position_top-in{padding:0 80px}}.mfui-banner__pagination_type_flat{gap:4px}@media screen and (min-width:1280px){.mfui-banner__pagination_type_flat{gap:10px}}.mfui-banner__pagination_align_left{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.mfui-banner__pagination_bottom-offset{bottom:60px;left:50%;position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:10}@media screen and (min-width:768px) and (max-width:1023px){.mfui-banner__pagination_bottom-offset{bottom:89px}}@media screen and (min-width:1024px) and (max-width:1279px){.mfui-banner__pagination_bottom-offset{bottom:90px}}@media screen and (min-width:1280px) and (max-width:1439px){.mfui-banner__pagination_bottom-offset{bottom:65px}}@media screen and (min-width:1440px){.mfui-banner__pagination_bottom-offset{bottom:72px}}.mfui-banner_margin-top{margin-top:24px}.mfui-banner_radius_rounded .mfui-banner__swiper{border-radius:24px}@media screen and (max-width:767px){.mfui-banner_show-next-slide .mfui-banner__swiper{border-radius:0;margin-left:-16px;margin-right:-16px;padding-left:16px;padding-right:32px}.mfui-banner_show-next-slide .mfui-banner__slide-content{border-right:none;margin-right:0}.mfui-banner_show-next-slide.mfui-banner_radius_rounded .mfui-banner__slide-content{border-radius:24px}}.mfui-banner_background-color_green .mfui-banner__swiper{background-color:var(--brandGreen)}.mfui-banner_background-color_purple .mfui-banner__swiper{background-color:var(--brandPurple)}.mfui-banner_background-color_gradient .mfui-banner__swiper{background:-webkit-gradient(linear,right top,left top,from(#ada6ba),to(#f6f2f9));background:linear-gradient(270deg,#ada6ba,#f6f2f9)}.mfui-banner_background-color_light .mfui-banner__swiper{background-color:#f6f2f9}.mfui-banner_background-color_spbSky0 .mfui-banner__swiper{background-color:var(--spbSky0)}
@@ -21,6 +21,22 @@ export declare const NavTheme: {
21
21
  readonly DARK: "dark";
22
22
  };
23
23
  type NavThemeType = (typeof NavTheme)[keyof typeof NavTheme];
24
+ export declare const PaginationTheme: {
25
+ readonly DEFAULT: "default";
26
+ readonly LIGHT: "light";
27
+ readonly DARK: "dark";
28
+ };
29
+ export type PaginationThemeType = (typeof PaginationTheme)[keyof typeof PaginationTheme];
30
+ export declare const PaginationButtonType: {
31
+ readonly DOT: "dot";
32
+ readonly FLAT: "flat";
33
+ };
34
+ export type PaginationType = (typeof PaginationButtonType)[keyof typeof PaginationButtonType];
35
+ export declare const PaginationPositionType: {
36
+ readonly BOTTOM_OUT: "bottom-out";
37
+ readonly TOP_IN: "top-in";
38
+ };
39
+ type PaginationPositionType = (typeof PaginationPositionType)[keyof typeof PaginationPositionType];
24
40
  export interface IBannerProps {
25
41
  /** Сss класс для внешнего контейнера */
26
42
  className?: string;
@@ -44,7 +60,17 @@ export interface IBannerProps {
44
60
  arrowNext?: Record<string, string>;
45
61
  pagination?: Record<string, string>;
46
62
  dot?: Record<string, string>;
63
+ dotSvg?: Record<string, string>;
64
+ dotInner?: Record<string, string>;
47
65
  };
66
+ /** Выравнивание блока пагинации */
67
+ paginationAlign?: 'center' | 'left';
68
+ /** Цветовая тема пагинации */
69
+ paginationTheme?: PaginationThemeType;
70
+ /** Тип кнопок пагинации */
71
+ paginationType?: PaginationType;
72
+ /** Расположение пагинации */
73
+ paginationPosition?: PaginationPositionType;
48
74
  /** Предполагается использование с наезжанием на баннер следующего за баннером элемента */
49
75
  withPaginationBottomOffset?: boolean;
50
76
  /** Автоматическая прокрутка */
@@ -40,6 +40,19 @@ export var NavTheme = {
40
40
  LIGHT: 'light',
41
41
  DARK: 'dark'
42
42
  };
43
+ export var PaginationTheme = {
44
+ DEFAULT: 'default',
45
+ LIGHT: 'light',
46
+ DARK: 'dark'
47
+ };
48
+ export var PaginationButtonType = {
49
+ DOT: 'dot',
50
+ FLAT: 'flat'
51
+ };
52
+ export var PaginationPositionType = {
53
+ BOTTOM_OUT: 'bottom-out',
54
+ TOP_IN: 'top-in'
55
+ };
43
56
  var getAutoPlayConfig = function getAutoPlayConfig(delay) {
44
57
  return {
45
58
  delay: delay,
@@ -54,6 +67,10 @@ var Banner = function Banner(_ref) {
54
67
  _ref$classes = _ref.classes,
55
68
  classes = _ref$classes === void 0 ? {} : _ref$classes,
56
69
  dataAttrs = _ref.dataAttrs,
70
+ paginationAlign = _ref.paginationAlign,
71
+ paginationTheme = _ref.paginationTheme,
72
+ paginationType = _ref.paginationType,
73
+ paginationPosition = _ref.paginationPosition,
57
74
  _ref$withPaginationBo = _ref.withPaginationBottomOffset,
58
75
  withPaginationBottomOffset = _ref$withPaginationBo === void 0 ? false : _ref$withPaginationBo,
59
76
  _ref$autoPlay = _ref.autoPlay,
@@ -236,19 +253,26 @@ var Banner = function Banner(_ref) {
236
253
  }));
237
254
  var renderPagination = /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.pagination), {
238
255
  className: cn('pagination', {
256
+ type: paginationType,
257
+ align: paginationAlign,
258
+ position: paginationPosition,
239
259
  'bottom-offset': withPaginationBottomOffset
240
260
  }, [classes.pagination])
241
261
  }), children && React.Children.map(children, function (_, i) {
242
262
  return /*#__PURE__*/React.createElement(BannerDot, {
243
263
  className: cn('dot', [classes.dot]),
244
264
  dataAttrs: {
245
- root: _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.dot, i + 1))
265
+ root: _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.dot, i + 1)),
266
+ svg: _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.dotSvg, i + 1)),
267
+ inner: _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.dotInner, i + 1))
246
268
  },
247
269
  key: i,
248
270
  index: i,
249
271
  isActive: i === activeIndex,
250
272
  showTimer: showDotTimer,
251
273
  timerDelay: dotTimerDelay,
274
+ type: paginationType,
275
+ theme: paginationTheme,
252
276
  onClick: handleDotClick
253
277
  });
254
278
  }));
@@ -1 +1 @@
1
- h1,h2,h3,h4,h5{margin:0}.mfui-banner-dot{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;justify-content:center;margin:-2px;padding:2px}.mfui-banner-dot:before{background-color:var(--spbSky2);border-radius:4px;content:"";display:block;height:8px;width:8px}.mfui-banner-dot_active{cursor:default}.mfui-banner-dot_active:before{background-color:var(--brandGreen);width:24px}.mfui-banner-dot_active .mfui-banner-dot__timer-inner{fill:var(--brandGreen)}.mfui-banner-dot_active.mfui-banner-dot_timer:before{background-color:var(--spbSky2)}.mfui-banner-dot__timer{border-radius:4px;display:block;height:8px;position:absolute;width:24px}.mfui-banner-dot__timer-inner{-webkit-animation:timer linear;animation:timer linear;-webkit-transform:scaleX(-1);transform:scaleX(-1);-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes timer{0%{width:100%}to{width:0}}@keyframes timer{0%{width:100%}to{width:0}}
1
+ h1,h2,h3,h4,h5{margin:0}.mfui-banner-dot{background-color:var(--spbSky2);border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;height:8px;position:relative;width:8px}.mfui-banner-dot_active{background-color:var(--brandGreen);cursor:default;-webkit-transition:background-color .2s linear;transition:background-color .2s linear;width:24px}.mfui-banner-dot_active .mfui-banner-dot__timer-inner{fill:var(--brandGreen)}.mfui-banner-dot_active.mfui-banner-dot_has-timer{background-color:var(--spbSky2)}.mfui-banner-dot_type_flat{-webkit-box-flex:1;border-radius:24px;-ms-flex:1 1 auto;flex:1 1 auto;height:2px;width:auto}.mfui-banner-dot_type_flat .mfui-banner-dot__timer{height:100%;width:100%}.mfui-banner-dot_type_flat .mfui-banner-dot__timer-inner{-webkit-animation:timer-reversed linear;animation:timer-reversed linear;height:100%;-webkit-transform:scale(1);transform:scale(1);width:100%}.mfui-banner-dot_theme_light,.mfui-banner-dot_theme_light .mfui-banner-dot__timer{background-color:var(--stcWhite50)}.mfui-banner-dot_theme_light .mfui-banner-dot__timer-inner{fill:var(--stcWhite)}.mfui-banner-dot_theme_light.mfui-banner-dot_active{background-color:var(--stcWhite)}.mfui-banner-dot_theme_light.mfui-banner-dot_has-timer{background-color:transparent}.mfui-banner-dot_theme_dark,.mfui-banner-dot_theme_dark .mfui-banner-dot__timer{background-color:var(--stcBlack10)}.mfui-banner-dot_theme_dark .mfui-banner-dot__timer-inner{fill:var(--stcBlack)}.mfui-banner-dot_theme_dark.mfui-banner-dot_active{background-color:var(--stcBlack)}.mfui-banner-dot_theme_dark.mfui-banner-dot_has-timer{background-color:transparent}.mfui-banner-dot__timer{border-radius:4px;display:block;height:8px;left:0;position:absolute;top:0;width:24px}.mfui-banner-dot__timer-inner{-webkit-animation:timer linear;animation:timer linear;-webkit-transform:scaleX(-1);transform:scaleX(-1);-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes timer{0%{width:100%}to{width:0}}@keyframes timer{0%{width:100%}to{width:0}}@-webkit-keyframes timer-reversed{0%{width:0}to{width:100%}}@keyframes timer-reversed{0%{width:0}to{width:100%}}
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import { type PaginationThemeType, type PaginationType } from './Banner';
2
3
  import './BannerDot.scss';
3
4
  export interface IBannerDotProps {
4
5
  className?: string;
@@ -11,6 +12,8 @@ export interface IBannerDotProps {
11
12
  svg?: Record<string, string>;
12
13
  inner?: Record<string, string>;
13
14
  };
15
+ type?: PaginationType;
16
+ theme?: PaginationThemeType;
14
17
  onClick: (index: number) => void;
15
18
  }
16
19
  declare const BannerDot: React.FC<IBannerDotProps>;
@@ -1,7 +1,17 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import * as React from 'react';
3
3
  import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
4
+ import { PaginationButtonType } from "./Banner";
4
5
  import "./BannerDot.css";
6
+ var DOT_VIEW_BOX = '0 0 250 100';
7
+ var DOT_RECT_PROPS = {
8
+ x: '0',
9
+ y: '0',
10
+ width: '250',
11
+ height: '100',
12
+ rx: '50',
13
+ ry: '50'
14
+ };
5
15
  var cn = cnCreate('mfui-banner-dot');
6
16
  var BannerDot = function BannerDot(_ref) {
7
17
  var className = _ref.className,
@@ -10,30 +20,32 @@ var BannerDot = function BannerDot(_ref) {
10
20
  isActive = _ref.isActive,
11
21
  showTimer = _ref.showTimer,
12
22
  timerDelay = _ref.timerDelay,
23
+ _ref$type = _ref.type,
24
+ type = _ref$type === void 0 ? PaginationButtonType.DOT : _ref$type,
25
+ theme = _ref.theme,
13
26
  onClick = _ref.onClick;
27
+ var viewBox = type === PaginationButtonType.DOT ? DOT_VIEW_BOX : undefined;
28
+ var rectProps = type === PaginationButtonType.DOT ? DOT_RECT_PROPS : {};
29
+ var hasTimer = showTimer && isActive;
14
30
  var handleDotClick = React.useCallback(function () {
15
31
  onClick(index);
16
32
  }, [onClick, index]);
17
33
  return /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
18
34
  className: cn({
19
35
  active: isActive,
20
- timer: showTimer
36
+ type: type,
37
+ theme: theme,
38
+ 'has-timer': hasTimer
21
39
  }, className),
22
40
  onClick: handleDotClick
23
- }), showTimer && isActive && /*#__PURE__*/React.createElement("svg", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.svg), {
41
+ }), hasTimer && /*#__PURE__*/React.createElement("svg", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.svg), {
24
42
  className: cn('timer'),
25
- viewBox: "0 0 250 100"
26
- }), /*#__PURE__*/React.createElement("rect", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.inner), {
43
+ viewBox: viewBox
44
+ }), /*#__PURE__*/React.createElement("rect", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.inner), rectProps, {
27
45
  className: cn('timer-inner'),
28
46
  style: {
29
47
  animationDuration: "".concat(timerDelay, "s")
30
- },
31
- x: "0",
32
- y: "0",
33
- width: "250",
34
- height: "100",
35
- rx: "50",
36
- ry: "50"
48
+ }
37
49
  }))));
38
50
  };
39
51
  export default BannerDot;
@@ -1 +1 @@
1
- h1,h2,h3,h4,h5{margin:0}.mfui-chip{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:inherit;font-size:15px;font-weight:500;line-height:24px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--spbSky0);border:none;border-radius:20px;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--content);cursor:pointer;outline:none;overflow:hidden;padding:8px 20px;text-align:center;text-decoration:none;-webkit-transition:background-color .3s,color .3s;transition:background-color .3s,color .3s}.mfui-chip svg{-webkit-transition:fill .3s;transition:fill .3s;fill:var(--content)}@media screen and (max-width:767px){.mfui-chip{padding:4px 12px}}.mfui-chip:hover{background-color:var(--spbSky1)}.mfui-chip__inner{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mfui-chip__counter{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--spbSky3);margin-left:6px}@media screen and (max-width:767px){.mfui-chip__counter{margin-left:4px}}.mfui-chip__icon,.mfui-chip__icon-arrow{display:block;max-height:20px;min-width:20px;width:20px}.mfui-chip__icon svg,.mfui-chip__icon-arrow svg{display:block;height:100%;width:100%}.mfui-chip__icon{margin-right:6px}@media screen and (max-width:767px){.mfui-chip__icon{margin-right:4px}}.mfui-chip_disabled,.mfui-chip_disabled:hover{background-color:var(--spbSky0);color:var(--spbSky3);cursor:default;pointer-events:none}.mfui-chip_disabled svg,.mfui-chip_disabled:hover svg{fill:var(--spbSky3)}.mfui-chip_disabled .mfui-chip__counter,.mfui-chip_disabled:hover .mfui-chip__counter{color:var(--spbSky2)}.mfui-chip_checked,.mfui-chip_checked:hover{background-color:var(--night);color:var(--stcWhite)}.mfui-chip_checked svg,.mfui-chip_checked:hover svg{fill:var(--stcWhite)}.mfui-chip_checked .mfui-chip__counter,.mfui-chip_checked:hover .mfui-chip__counter{color:var(--stcWhite)}.mfui-chip_checked.mfui-chip_color_black,.mfui-chip_checked.mfui-chip_color_black:hover{background-color:var(--content);color:var(--base)}.mfui-chip_checked.mfui-chip_color_black svg,.mfui-chip_checked.mfui-chip_color_black:hover svg{fill:var(--base)}.mfui-chip_checked.mfui-chip_color_black .mfui-chip__counter,.mfui-chip_checked.mfui-chip_color_black:hover .mfui-chip__counter{color:var(--base)}.mfui-chip_with-icon{padding-left:16px}@media screen and (max-width:767px){.mfui-chip_with-icon{padding-left:8px}}
1
+ h1,h2,h3,h4,h5{margin:0}.mfui-chip{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:inherit;font-size:15px;font-weight:500;line-height:24px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--spbSky0);border:none;border-radius:20px;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--content);overflow:hidden;padding:8px 20px;text-align:center;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;outline:none;-webkit-transition:background-color .3s,color .3s;transition:background-color .3s,color .3s}.mfui-chip svg{-webkit-transition:fill .3s;transition:fill .3s;fill:var(--content)}@media screen and (max-width:767px){.mfui-chip{padding:4px 12px}}.mfui-chip:hover{background-color:var(--spbSky1)}.mfui-chip__inner{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mfui-chip__counter{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--spbSky3);margin-left:6px}@media screen and (max-width:767px){.mfui-chip__counter{margin-left:4px}}.mfui-chip__icon,.mfui-chip__icon-arrow{display:block;max-height:20px;min-width:20px;width:20px}.mfui-chip__icon svg,.mfui-chip__icon-arrow svg{display:block;height:100%;width:100%}.mfui-chip__icon{margin-right:6px}@media screen and (max-width:767px){.mfui-chip__icon{margin-right:4px}}.mfui-chip_disabled,.mfui-chip_disabled:hover{background-color:var(--spbSky0);color:var(--spbSky3);cursor:default;pointer-events:none}.mfui-chip_disabled svg,.mfui-chip_disabled:hover svg{fill:var(--spbSky3)}.mfui-chip_disabled .mfui-chip__counter,.mfui-chip_disabled:hover .mfui-chip__counter{color:var(--spbSky2)}.mfui-chip_checked,.mfui-chip_checked:hover{background-color:var(--night);color:var(--stcWhite)}.mfui-chip_checked svg,.mfui-chip_checked:hover svg{fill:var(--stcWhite)}.mfui-chip_checked .mfui-chip__counter,.mfui-chip_checked:hover .mfui-chip__counter{color:var(--stcWhite)}.mfui-chip_checked.mfui-chip_color_black,.mfui-chip_checked.mfui-chip_color_black:hover{background-color:var(--content);color:var(--base)}.mfui-chip_checked.mfui-chip_color_black svg,.mfui-chip_checked.mfui-chip_color_black:hover svg{fill:var(--base)}.mfui-chip_checked.mfui-chip_color_black .mfui-chip__counter,.mfui-chip_checked.mfui-chip_color_black:hover .mfui-chip__counter{color:var(--base)}.mfui-chip_with-icon{padding-left:16px}@media screen and (max-width:767px){.mfui-chip_with-icon{padding-left:8px}}
@@ -14,6 +14,8 @@ export type ChipArrowType = (typeof ChipArrow)[keyof typeof ChipArrow];
14
14
  export interface IChipProps {
15
15
  /** Идентификатор */
16
16
  id: ChipIdType;
17
+ /** Заголовок */
18
+ title?: string;
17
19
  /** Набор цветов для компонента */
18
20
  color?: ChipColorsType;
19
21
  /** Отображение в отмеченном (зажатом) состоянии */
@@ -35,6 +37,7 @@ export interface IChipProps {
35
37
  /** Дополнительные классы для внутренних элементов */
36
38
  classes?: {
37
39
  root?: string;
40
+ checked?: string;
38
41
  inner?: string;
39
42
  icon?: string;
40
43
  counter?: string;
@@ -31,6 +31,7 @@ export var ChipArrow = {
31
31
  var cn = cnCreate('mfui-chip');
32
32
  var Chip = function Chip(_ref) {
33
33
  var id = _ref.id,
34
+ title = _ref.title,
34
35
  _ref$color = _ref.color,
35
36
  color = _ref$color === void 0 ? 'default' : _ref$color,
36
37
  _ref$checked = _ref.checked,
@@ -47,6 +48,7 @@ var Chip = function Chip(_ref) {
47
48
  classes = _ref$classes === void 0 ? {} : _ref$classes,
48
49
  dataAttrs = _ref.dataAttrs,
49
50
  rootRef = _ref.rootRef;
51
+ var checkedClass = checked ? classes.checked : undefined;
50
52
  var handleClick = React.useCallback(function (e) {
51
53
  onClick === null || onClick === void 0 ? void 0 : onClick(e, id);
52
54
  }, [onClick, id]);
@@ -57,7 +59,7 @@ var Chip = function Chip(_ref) {
57
59
  checked: checked,
58
60
  disabled: disabled,
59
61
  'with-icon': !!icon
60
- }, [className, classes.root])
62
+ }, [className, classes.root, checkedClass])
61
63
  }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
62
64
  disabled: disabled,
63
65
  onClick: handleClick,
@@ -66,7 +68,7 @@ var Chip = function Chip(_ref) {
66
68
  className: cn('icon', [classes.icon])
67
69
  }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.icon)), icon), /*#__PURE__*/React.createElement("span", _extends({
68
70
  className: cn('inner', [classes.inner])
69
- }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.inner)), children), !!counterValue && /*#__PURE__*/React.createElement("span", _extends({
71
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.inner)), children || title), !!counterValue && /*#__PURE__*/React.createElement("span", _extends({
70
72
  className: cn('counter', [classes.counter])
71
73
  }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.counter)), counterValue), !!arrow && /*#__PURE__*/React.createElement("div", _extends({
72
74
  className: cn('icon-arrow')
@@ -1 +1 @@
1
- h1,h2,h3,h4,h5{margin:0}.mfui-chips{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:12px;width:100%}@media screen and (max-width:767px){.mfui-chips{gap:8px}}.mfui-chips_hidden{display:grid;grid-template-columns:repeat(auto-fit,minMax(0,-webkit-min-content));grid-template-columns:repeat(auto-fit,minMax(0,min-content))}
1
+ h1,h2,h3,h4,h5{margin:0}.mfui-chips{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:12px;width:100%}@media screen and (max-width:767px){.mfui-chips{gap:8px}}.mfui-chips_hidden{display:grid;grid-template-columns:repeat(auto-fit,minMax(0,-webkit-min-content));grid-template-columns:repeat(auto-fit,minMax(0,min-content))}.mfui-chips_align_center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
@@ -4,10 +4,16 @@ import './Chips.scss';
4
4
  export interface IChipsProps {
5
5
  /** Массив элементов */
6
6
  items: IChipProps[];
7
- /** Значение */
8
- value: ChipIdType;
7
+ /** Значение (идентификатор активного элемента). Начальное значение в неконтролируемом состоянии */
8
+ value?: ChipIdType;
9
9
  /** Цвет активного элемента */
10
10
  color?: ChipColorsType;
11
+ /** Горизонтальное выравнивание */
12
+ align?: 'left' | 'center';
13
+ /** Переводит компонент в контролируемое состояние */
14
+ isControlled?: boolean;
15
+ /** Горизонтальный скролл (отключается на разрешениях, для которых задан лимит отображаемых элементов) */
16
+ isScrollable?: boolean;
11
17
  /** Количество отображаемых элементов на всех разрешениях экрана */
12
18
  visibleItemsCountAll?: number;
13
19
  /** Количество отображаемых элементов на разрешении 768 - 1023 */
@@ -22,6 +28,14 @@ export interface IChipsProps {
22
28
  onChange?: (id: ChipIdType, e?: React.SyntheticEvent<EventTarget>) => void;
23
29
  /** Дополнительный класс корневого элемента */
24
30
  className?: string;
31
+ /** Дополнительные классы для внутренних элементов */
32
+ classes?: {
33
+ root?: string;
34
+ };
35
+ /** Дополнительные data атрибуты к внутренним элементам */
36
+ dataAttrs?: {
37
+ root?: Record<string, string>;
38
+ };
25
39
  }
26
40
  declare const Chips: React.FC<IChipsProps>;
27
41
  export default Chips;
@@ -1,13 +1,24 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import "core-js/modules/es.symbol.js";
4
+ import "core-js/modules/es.array.index-of.js";
3
5
  import "core-js/modules/es.array.map.js";
4
6
  import "core-js/modules/es.array.slice.js";
7
+ var __rest = this && this.__rest || function (s, e) {
8
+ var t = {};
9
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
10
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
11
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
12
+ }
13
+ return t;
14
+ };
5
15
  import * as React from 'react';
6
- import { breakpoints, cnCreate } from '@megafon/ui-helpers';
16
+ import { breakpoints, cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
7
17
  import throttle from 'lodash.throttle';
8
18
  import throttleTime from "../../constants/throttleTime";
9
19
  import Chip from "./Chip";
10
- import ChipsDropdown from "./components/ChipsDropdown";
20
+ import ChipsDropdown from "./components/ChipsDropdown/ChipsDropdown";
21
+ import ChipsScrollPanel from "./components/ChipsScrollPanel/ChipsScrollPanel";
11
22
  import "./Chips.css";
12
23
  var DESKTOP_SMALL_START = breakpoints.DESKTOP_SMALL_START,
13
24
  DESKTOP_MIDDLE_START = breakpoints.DESKTOP_MIDDLE_START,
@@ -24,12 +35,20 @@ var Chips = function Chips(_ref) {
24
35
  visibleItemsCountTablet = _ref.visibleItemsCountTablet,
25
36
  visibleItemsCountDesktop = _ref.visibleItemsCountDesktop,
26
37
  visibleItemsCountWide = _ref.visibleItemsCountWide,
38
+ _ref$isScrollable = _ref.isScrollable,
39
+ isScrollable = _ref$isScrollable === void 0 ? false : _ref$isScrollable,
40
+ _ref$isControlled = _ref.isControlled,
41
+ isControlled = _ref$isControlled === void 0 ? false : _ref$isControlled,
42
+ align = _ref.align,
27
43
  onChange = _ref.onChange,
28
- className = _ref.className;
44
+ className = _ref.className,
45
+ _ref$classes = _ref.classes,
46
+ classes = _ref$classes === void 0 ? {} : _ref$classes,
47
+ dataAttrs = _ref.dataAttrs;
29
48
  var _React$useState = React.useState(value),
30
49
  _React$useState2 = _slicedToArray(_React$useState, 2),
31
- selectedId = _React$useState2[0],
32
- setSelectedId = _React$useState2[1];
50
+ innerSelectedId = _React$useState2[0],
51
+ setInnerSelectedId = _React$useState2[1];
33
52
  var _React$useState3 = React.useState(visibleItemsCountAll),
34
53
  _React$useState4 = _slicedToArray(_React$useState3, 2),
35
54
  visibleItemsCount = _React$useState4[0],
@@ -42,13 +61,40 @@ var Chips = function Chips(_ref) {
42
61
  _React$useState8 = _slicedToArray(_React$useState7, 2),
43
62
  hiddenItems = _React$useState8[0],
44
63
  setHiddenItems = _React$useState8[1];
64
+ var _React$useState9 = React.useState(isScrollable && !visibleItemsCount),
65
+ _React$useState10 = _slicedToArray(_React$useState9, 2),
66
+ isScrollableMode = _React$useState10[0],
67
+ setIsScrollableMode = _React$useState10[1];
68
+ var selectedId = isControlled ? value : innerSelectedId;
45
69
  var handleClick = React.useCallback(function (e, id) {
46
70
  e.persist();
47
- if (id) {
48
- setSelectedId(id);
71
+ if (id && id !== selectedId) {
72
+ !isControlled && setInnerSelectedId(id);
49
73
  onChange === null || onChange === void 0 ? void 0 : onChange(id, e);
50
74
  }
51
- }, [onChange]);
75
+ }, [isControlled, onChange, selectedId]);
76
+ var renderItems = function renderItems() {
77
+ if (isScrollableMode) {
78
+ return /*#__PURE__*/React.createElement(ChipsScrollPanel, {
79
+ value: selectedId,
80
+ items: visibleItems,
81
+ color: color,
82
+ onClick: handleClick
83
+ });
84
+ }
85
+ return visibleItems.map(function (_a) {
86
+ var id = _a.id,
87
+ children = _a.children,
88
+ rest = __rest(_a, ["id", "children"]);
89
+ return /*#__PURE__*/React.createElement(Chip, _extends({
90
+ key: id,
91
+ id: id,
92
+ checked: id === selectedId,
93
+ color: color,
94
+ onClick: handleClick
95
+ }, rest), !!children && children);
96
+ });
97
+ };
52
98
  React.useEffect(function () {
53
99
  var resizeHandler = function resizeHandler() {
54
100
  var windowWidth = window.innerWidth;
@@ -82,19 +128,15 @@ var Chips = function Chips(_ref) {
82
128
  setHiddenItems(null);
83
129
  }
84
130
  }, [items, visibleItemsCount]);
85
- return /*#__PURE__*/React.createElement("div", {
131
+ React.useEffect(function () {
132
+ setIsScrollableMode(isScrollable && !visibleItemsCount);
133
+ }, [isScrollable, visibleItemsCount]);
134
+ return /*#__PURE__*/React.createElement("div", _extends({
86
135
  className: cn({
87
- hidden: !!hiddenItems
88
- }, [className])
89
- }, visibleItems.map(function (item) {
90
- return /*#__PURE__*/React.createElement(Chip, _extends({
91
- key: item.id
92
- }, item, {
93
- checked: item.id === selectedId,
94
- color: color,
95
- onClick: handleClick
96
- }), !!(item === null || item === void 0 ? void 0 : item.children) && item.children);
97
- }), !!hiddenItems && /*#__PURE__*/React.createElement(ChipsDropdown, {
136
+ hidden: !!hiddenItems,
137
+ align: align
138
+ }, [className, classes.root])
139
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), renderItems(), !!hiddenItems && /*#__PURE__*/React.createElement(ChipsDropdown, {
98
140
  value: selectedId,
99
141
  items: hiddenItems,
100
142
  moreTitle: moreTitle,
@@ -1,9 +1,9 @@
1
1
  import * as React from 'react';
2
- import { ChipColorsType, ChipIdType, IChipProps } from '../Chip';
2
+ import { ChipColorsType, ChipIdType, IChipProps } from '../../Chip';
3
3
  import './ChipsDropdown.scss';
4
4
  export interface IChipsDropdownProps {
5
5
  moreTitle: string;
6
- value: ChipIdType;
6
+ value?: ChipIdType;
7
7
  items: IChipProps[];
8
8
  color: ChipColorsType;
9
9
  onClick: (e: React.SyntheticEvent<EventTarget>, id: ChipIdType) => void;
@@ -5,7 +5,7 @@ import "core-js/modules/es.array.map.js";
5
5
  import "core-js/modules/es.object.to-string.js";
6
6
  import * as React from 'react';
7
7
  import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
8
- import Chip from "../Chip";
8
+ import Chip from "../../Chip";
9
9
  import "./ChipsDropdown.css";
10
10
  var cn = cnCreate('mfui-chips-dropdown');
11
11
  var ChipsDropdown = function ChipsDropdown(_ref) {
@@ -71,16 +71,19 @@ var ChipsDropdown = function ChipsDropdown(_ref) {
71
71
  }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.list)), /*#__PURE__*/React.createElement("div", {
72
72
  className: cn('list-inner')
73
73
  }, items.map(function (item, key) {
74
+ var children = item.children,
75
+ title = item.title,
76
+ icon = item.icon;
74
77
  return /*#__PURE__*/React.createElement("div", {
75
78
  key: key,
76
79
  className: cn('list-item', {
77
- 'with-icon': !!item.icon
80
+ 'with-icon': !!icon
78
81
  }),
79
82
  onClick: handleItemClick(item),
80
83
  onKeyDown: handleItemClick(item)
81
- }, !!(item === null || item === void 0 ? void 0 : item.icon) && /*#__PURE__*/React.createElement("span", {
84
+ }, !!icon && /*#__PURE__*/React.createElement("span", {
82
85
  className: cn('icon')
83
- }, item.icon), !!(item === null || item === void 0 ? void 0 : item.children) && item.children);
86
+ }, icon), children || title);
84
87
  }))));
85
88
  };
86
89
  export default ChipsDropdown;
@@ -0,0 +1 @@
1
+ h1,h2,h3,h4,h5{margin:0}.mfui-chips-scroll-panel{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;overflow-x:auto;overflow-y:hidden;position:relative;-ms-overflow-style:none;scrollbar-width:none}.mfui-chips-scroll-panel::-webkit-scrollbar{display:none}.mfui-chips-scroll-panel__inner{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;height:100%}@media screen and (max-width:767px){.mfui-chips-scroll-panel__inner{gap:8px}}
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ import { ChipColorsType, ChipIdType, IChipProps } from '../../Chip';
3
+ import './ChipsScrollPanel.scss';
4
+ export interface IChipsScrollPanelProps {
5
+ value?: ChipIdType;
6
+ items: IChipProps[];
7
+ color: ChipColorsType;
8
+ onClick: (e: React.SyntheticEvent<EventTarget>, id?: ChipIdType) => void;
9
+ }
10
+ declare const ChipsScrollPanel: React.FC<IChipsScrollPanelProps>;
11
+ export default ChipsScrollPanel;
@@ -0,0 +1,83 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import "core-js/modules/es.symbol.js";
4
+ import "core-js/modules/es.array.index-of.js";
5
+ import "core-js/modules/es.array.map.js";
6
+ var __rest = this && this.__rest || function (s, e) {
7
+ var t = {};
8
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
9
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
10
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
11
+ }
12
+ return t;
13
+ };
14
+ import * as React from 'react';
15
+ import { cnCreate } from '@megafon/ui-helpers';
16
+ import Chip from "../../Chip";
17
+ import "./ChipsScrollPanel.css";
18
+ var HALF_DIVIDER = 2;
19
+ var cn = cnCreate('mfui-chips-scroll-panel');
20
+ var ChipsScrollPanel = function ChipsScrollPanel(_ref) {
21
+ var value = _ref.value,
22
+ items = _ref.items,
23
+ color = _ref.color,
24
+ onClick = _ref.onClick;
25
+ var _React$useState = React.useState(),
26
+ _React$useState2 = _slicedToArray(_React$useState, 2),
27
+ currentValue = _React$useState2[0],
28
+ setCurrentValue = _React$useState2[1];
29
+ var containerRef = React.useRef(null);
30
+ var checkedItemRef = React.useRef(null);
31
+ var scrollToActiveItem = React.useCallback(function () {
32
+ var _a, _b;
33
+ if (!containerRef.current || !checkedItemRef.current) {
34
+ return;
35
+ }
36
+ var activeItemElement = checkedItemRef.current;
37
+ var _activeItemElement$ge = activeItemElement.getBoundingClientRect(),
38
+ itemWidth = _activeItemElement$ge.width;
39
+ var itemOffsetLeft = activeItemElement.offsetLeft;
40
+ var panelCenter = containerRef.current.getBoundingClientRect().width / HALF_DIVIDER;
41
+ var itemCenter = itemWidth / HALF_DIVIDER;
42
+ var activeItemPosition = itemOffsetLeft - panelCenter + itemCenter;
43
+ (_b = (_a = containerRef.current).scrollTo) === null || _b === void 0 ? void 0 : _b.call(_a, {
44
+ left: activeItemPosition,
45
+ behavior: 'smooth'
46
+ });
47
+ }, []);
48
+ var handleClick = React.useCallback(function (e, id) {
49
+ onClick(e, id);
50
+ scrollToActiveItem();
51
+ }, [onClick, scrollToActiveItem]);
52
+ React.useEffect(function () {
53
+ var isCurrentValueActual = currentValue === value;
54
+ if (isCurrentValueActual) {
55
+ scrollToActiveItem();
56
+ } else {
57
+ setCurrentValue(value);
58
+ }
59
+ }, [value, currentValue, scrollToActiveItem]);
60
+ return /*#__PURE__*/React.createElement("div", {
61
+ className: cn(),
62
+ ref: containerRef
63
+ }, /*#__PURE__*/React.createElement("div", {
64
+ className: cn('inner'),
65
+ tabIndex: -1
66
+ }, items.map(function (_a) {
67
+ var id = _a.id,
68
+ children = _a.children,
69
+ rest = __rest(_a, ["id", "children"]);
70
+ var checked = id === value;
71
+ return /*#__PURE__*/React.createElement("div", {
72
+ key: id,
73
+ className: cn('slide')
74
+ }, /*#__PURE__*/React.createElement(Chip, _extends({}, rest, {
75
+ id: id,
76
+ checked: checked,
77
+ color: color,
78
+ onClick: handleClick,
79
+ rootRef: checked ? checkedItemRef : null
80
+ }), children));
81
+ })));
82
+ };
83
+ export default ChipsScrollPanel;
@@ -1 +1 @@
1
- h1,h2,h3,h4,h5{margin:0}.mfui-modal-content__background{background-color:rgba(0,0,0,.8);bottom:0;left:0;position:fixed;right:0;top:0}.mfui-modal-content__container-wrap{-webkit-animation:show-popup .3s ease-out;animation:show-popup .3s ease-out;position:relative;width:100%}@media screen and (min-width:768px){.mfui-modal-content__container-wrap{-webkit-transition:height .1s;transition:height .1s;width:740px}}.mfui-modal-content__container-inner{background-color:var(--background);font-family:inherit;width:100%}.mfui-modal-content__header{position:relative}.mfui-modal-content__header_shadow{-webkit-box-shadow:0 2px 12px rgba(0,0,0,.1);box-shadow:0 2px 12px rgba(0,0,0,.1)}.mfui-modal-content__header-main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:52px}@media screen and (min-width:768px){.mfui-modal-content__header-main{min-height:64px}}.mfui-modal-content__header-button{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;top:12px;z-index:2;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;background:transparent;border:none;cursor:pointer;height:32px;justify-content:center;outline:none;width:32px}@media screen and (min-width:768px){.mfui-modal-content__header-button{height:40px;width:40px}}.mfui-modal-content__header-button_back{left:16px}.mfui-modal-content__header-button_close{right:16px}.mfui-modal-content__header-button_shadow{background:var(--base);border-radius:50%;-webkit-box-shadow:0 2px 12px rgba(0,0,0,.1);box-shadow:0 2px 12px rgba(0,0,0,.1)}.mfui-modal-content__header-button svg{fill:var(--content)}.mfui-modal-content__title-area{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 48px;padding:12px}@media screen and (min-width:768px){.mfui-modal-content__title-area{margin:0 56px;padding:16px}}.mfui-modal-content__title{font-size:18px;font-weight:500;letter-spacing:.5px;line-height:24px;text-align:center}@media screen and (min-width:1280px){.mfui-modal-content__title{font-size:20px;line-height:28px}}@media screen and (min-width:768px){.mfui-modal-content__title{font-size:20px;font-weight:500;letter-spacing:.5px;line-height:28px}}.mfui-modal-content__header-additional{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px 16px;text-align:center}@media screen and (min-width:768px){.mfui-modal-content__header-additional{padding-left:32px;padding-right:32px}}.mfui-modal-content__container-body{-webkit-box-sizing:border-box;box-sizing:border-box;padding-bottom:24px;padding-right:6px}@media screen and (min-width:768px){.mfui-modal-content__container-body{padding-bottom:32px;padding-right:12px}}.mfui-modal-content__children{-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:16px;padding-right:4px;padding-top:24px}@media screen and (min-width:768px){.mfui-modal-content__children{padding-left:32px;padding-right:14px}}.mfui-modal-content__container-wrap_static-header .mfui-modal-content__container-body{padding-top:24px}.mfui-modal-content__container-wrap_static-header .mfui-modal-content__children{padding-top:0}.mfui-modal-content__container-wrap_static-header .mfui-modal-content__header{margin-bottom:24px;margin-left:-16px;margin-right:-16px}@media screen and (min-width:768px){.mfui-modal-content__container-wrap_static-header .mfui-modal-content__header{margin-left:-32px;margin-right:-32px}}.mfui-modal-content__container-wrap_static-header .mfui-modal-content__header-main{min-height:40px}.mfui-modal-content__container-wrap_static-header .mfui-modal-content__header-button{top:0}.mfui-modal-content__container-wrap_static-header .mfui-modal-content__title-area{padding-bottom:4px;padding-top:4px}.mfui-modal-content__container-wrap_hide-header .mfui-modal-content__container-body{padding-top:24px}.mfui-modal-content__container-wrap_hide-header .mfui-modal-content__children{padding-top:0}.mfui-modal-content__container-wrap_sticky-footer .mfui-modal-content__container-body{padding-bottom:0}.mfui-modal-content__container-wrap_sticky-footer .mfui-modal-content__footer{padding-left:16px;padding-right:16px}@media screen and (min-width:768px){.mfui-modal-content__container-wrap_sticky-footer .mfui-modal-content__footer{padding-left:32px;padding-right:32px}}.mfui-modal-content__container-wrap_sticky-footer .mfui-modal-content__footer_shadow{-webkit-box-shadow:0 2px 12px rgba(0,0,0,.1);box-shadow:0 2px 12px rgba(0,0,0,.1)}.mfui-modal-content__container-wrap_out-side-buttons .mfui-modal-content__container-body{padding-top:24px}.mfui-modal-content__container-wrap_native-scroll .mfui-modal-content__children,.mfui-modal-content__container-wrap_native-scroll .mfui-modal-content__container-body{padding:0}.mfui-modal-content__container-wrap_transition-end{-webkit-animation:hide-popup .2s ease-in;animation:hide-popup .2s ease-in}@-webkit-keyframes show-popup{0%{-webkit-transform:scale(95%);transform:scale(95%);-webkit-transform-origin:top;transform-origin:top}to{-webkit-transform:scale(100%);transform:scale(100%)}}@keyframes show-popup{0%{-webkit-transform:scale(95%);transform:scale(95%);-webkit-transform-origin:top;transform-origin:top}to{-webkit-transform:scale(100%);transform:scale(100%)}}@-webkit-keyframes hide-popup{0%{-webkit-transform:scale(100%);transform:scale(100%)}to{-webkit-transform:scale(95%);transform:scale(95%)}}@keyframes hide-popup{0%{-webkit-transform:scale(100%);transform:scale(100%)}to{-webkit-transform:scale(95%);transform:scale(95%)}}
1
+ h1,h2,h3,h4,h5{margin:0}.mfui-modal-content__background{background-color:rgba(0,0,0,.8);bottom:0;left:0;position:fixed;right:0;top:0}.mfui-modal-content__container-wrap{-webkit-animation:show-popup .3s ease-out;animation:show-popup .3s ease-out;position:relative;width:100%}@media screen and (min-width:768px){.mfui-modal-content__container-wrap{-webkit-transition:height .1s;transition:height .1s;width:740px}}.mfui-modal-content__container-inner{background-color:var(--background);font-family:inherit;width:100%}.mfui-modal-content__header{position:relative}.mfui-modal-content__header_shadow{-webkit-box-shadow:0 2px 12px rgba(0,0,0,.1);box-shadow:0 2px 12px rgba(0,0,0,.1)}.mfui-modal-content__header-main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:52px}@media screen and (min-width:768px){.mfui-modal-content__header-main{min-height:64px}}.mfui-modal-content__header-button{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;top:12px;z-index:2;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;background:transparent;border:none;cursor:pointer;height:32px;justify-content:center;outline:none;width:32px}@media screen and (min-width:768px){.mfui-modal-content__header-button{height:40px;width:40px}}.mfui-modal-content__header-button_back{left:16px}.mfui-modal-content__header-button_close{right:16px}.mfui-modal-content__header-button_shadow{background:var(--base);border-radius:50%;-webkit-box-shadow:0 2px 12px rgba(0,0,0,.1);box-shadow:0 2px 12px rgba(0,0,0,.1)}.mfui-modal-content__header-icon{height:32px;min-width:32px;width:32px;fill:var(--content)}@media screen and (min-width:768px){.mfui-modal-content__header-icon{height:40px;min-width:40px;width:40px}}.mfui-modal-content__title-area{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 48px;padding:12px}@media screen and (min-width:768px){.mfui-modal-content__title-area{margin:0 56px;padding:16px}}.mfui-modal-content__title{font-size:18px;font-weight:500;letter-spacing:.5px;line-height:24px;text-align:center}@media screen and (min-width:1280px){.mfui-modal-content__title{font-size:20px;line-height:28px}}@media screen and (min-width:768px){.mfui-modal-content__title{font-size:20px;font-weight:500;letter-spacing:.5px;line-height:28px}}.mfui-modal-content__header-additional{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px 16px;text-align:center}@media screen and (min-width:768px){.mfui-modal-content__header-additional{padding-left:32px;padding-right:32px}}.mfui-modal-content__container-body{-webkit-box-sizing:border-box;box-sizing:border-box;padding-bottom:24px;padding-right:6px}@media screen and (min-width:768px){.mfui-modal-content__container-body{padding-bottom:32px;padding-right:12px}}.mfui-modal-content__children{-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:16px;padding-right:4px;padding-top:24px}@media screen and (min-width:768px){.mfui-modal-content__children{padding-left:32px;padding-right:14px}}.mfui-modal-content__container-wrap_static-header .mfui-modal-content__container-body{padding-top:24px}.mfui-modal-content__container-wrap_static-header .mfui-modal-content__children{padding-top:0}.mfui-modal-content__container-wrap_static-header .mfui-modal-content__header{margin-bottom:24px;margin-left:-16px;margin-right:-16px}@media screen and (min-width:768px){.mfui-modal-content__container-wrap_static-header .mfui-modal-content__header{margin-left:-32px;margin-right:-32px}}.mfui-modal-content__container-wrap_static-header .mfui-modal-content__header-main{min-height:40px}.mfui-modal-content__container-wrap_static-header .mfui-modal-content__header-button{top:0}.mfui-modal-content__container-wrap_static-header .mfui-modal-content__title-area{padding-bottom:4px;padding-top:4px}.mfui-modal-content__container-wrap_hide-header .mfui-modal-content__container-body{padding-top:24px}.mfui-modal-content__container-wrap_hide-header .mfui-modal-content__children{padding-top:0}.mfui-modal-content__container-wrap_sticky-footer .mfui-modal-content__container-body{padding-bottom:0}.mfui-modal-content__container-wrap_sticky-footer .mfui-modal-content__footer{padding-left:16px;padding-right:16px}@media screen and (min-width:768px){.mfui-modal-content__container-wrap_sticky-footer .mfui-modal-content__footer{padding-left:32px;padding-right:32px}}.mfui-modal-content__container-wrap_sticky-footer .mfui-modal-content__footer_shadow{-webkit-box-shadow:0 2px 12px rgba(0,0,0,.1);box-shadow:0 2px 12px rgba(0,0,0,.1)}.mfui-modal-content__container-wrap_out-side-buttons .mfui-modal-content__container-body{padding-top:24px}.mfui-modal-content__container-wrap_native-scroll .mfui-modal-content__children,.mfui-modal-content__container-wrap_native-scroll .mfui-modal-content__container-body{padding:0}.mfui-modal-content__container-wrap_transition-end{-webkit-animation:hide-popup .2s ease-in;animation:hide-popup .2s ease-in}@-webkit-keyframes show-popup{0%{-webkit-transform:scale(95%);transform:scale(95%);-webkit-transform-origin:top;transform-origin:top}to{-webkit-transform:scale(100%);transform:scale(100%)}}@keyframes show-popup{0%{-webkit-transform:scale(95%);transform:scale(95%);-webkit-transform-origin:top;transform-origin:top}to{-webkit-transform:scale(100%);transform:scale(100%)}}@-webkit-keyframes hide-popup{0%{-webkit-transform:scale(100%);transform:scale(100%)}to{-webkit-transform:scale(95%);transform:scale(95%)}}@keyframes hide-popup{0%{-webkit-transform:scale(100%);transform:scale(100%)}to{-webkit-transform:scale(95%);transform:scale(95%)}}
@@ -97,7 +97,11 @@ var ModalContent = function ModalContent(_ref) {
97
97
  }, classes === null || classes === void 0 ? void 0 : classes.headerBackButton),
98
98
  type: "button",
99
99
  onClick: onBackButtonClick
100
- }), isSmallIcon ? /*#__PURE__*/React.createElement(ArrowLeft24, null) : /*#__PURE__*/React.createElement(ArrowLeft32, null));
100
+ }), isSmallIcon ? /*#__PURE__*/React.createElement(ArrowLeft24, {
101
+ className: cn('header-icon')
102
+ }) : /*#__PURE__*/React.createElement(ArrowLeft32, {
103
+ className: cn('header-icon')
104
+ }));
101
105
  var renderCloseButton = /*#__PURE__*/React.createElement("button", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.headerCloseButton), {
102
106
  className: cn('header-button', {
103
107
  close: true,
@@ -105,7 +109,11 @@ var ModalContent = function ModalContent(_ref) {
105
109
  }, classes === null || classes === void 0 ? void 0 : classes.headerCloseButton),
106
110
  type: "button",
107
111
  onClick: onPopupClose
108
- }), isSmallIcon ? /*#__PURE__*/React.createElement(Cancel24, null) : /*#__PURE__*/React.createElement(Cancel32, null));
112
+ }), isSmallIcon ? /*#__PURE__*/React.createElement(Cancel24, {
113
+ className: cn('header-icon')
114
+ }) : /*#__PURE__*/React.createElement(Cancel32, {
115
+ className: cn('header-icon')
116
+ }));
109
117
  var renderHeader = /*#__PURE__*/React.createElement("div", {
110
118
  className: cn('header', {
111
119
  shadow: showHeaderShadow