@megafon/ui-core 5.7.1 → 5.9.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 (116) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/es/components/{Chip → Chips}/Chip.css +53 -32
  3. package/dist/es/components/Chips/Chip.d.ts +74 -0
  4. package/dist/es/components/{Chip → Chips}/Chip.js +45 -6
  5. package/dist/es/components/Chips/Chips.css +19 -0
  6. package/dist/es/components/Chips/Chips.d.ts +27 -0
  7. package/dist/es/components/Chips/Chips.js +129 -0
  8. package/dist/es/components/Chips/components/ChipsDropdown.css +106 -0
  9. package/dist/es/components/Chips/components/ChipsDropdown.d.ts +16 -0
  10. package/dist/es/components/Chips/components/ChipsDropdown.js +101 -0
  11. package/dist/es/components/ContentView/ContentView.css +61 -0
  12. package/dist/es/components/ContentView/ContentView.d.ts +49 -0
  13. package/dist/es/components/ContentView/ContentView.js +103 -0
  14. package/dist/es/components/ContentView/i/alarm.png +0 -0
  15. package/dist/es/components/ContentView/i/empty.png +0 -0
  16. package/dist/es/components/ContentView/i/error.png +0 -0
  17. package/dist/es/components/ContentView/i/fail.png +0 -0
  18. package/dist/es/components/ContentView/i/searchNoResult.png +0 -0
  19. package/dist/es/components/ContentView/i/submit.png +0 -0
  20. package/dist/es/components/ContentView/i/success.png +0 -0
  21. package/dist/es/components/ContentView/i/update.png +0 -0
  22. package/dist/es/components/ContentView/i/waiting.png +0 -0
  23. package/dist/es/components/Search/Search.d.ts +2 -0
  24. package/dist/es/components/Search/Search.js +7 -2
  25. package/dist/es/components/Sliders/Slider/Slider.css +127 -0
  26. package/dist/es/components/Sliders/Slider/Slider.d.ts +41 -0
  27. package/dist/es/components/Sliders/Slider/Slider.js +126 -0
  28. package/dist/es/components/Sliders/SliderRange/SliderRange.css +154 -0
  29. package/dist/es/components/Sliders/SliderRange/SliderRange.d.ts +49 -0
  30. package/dist/es/components/Sliders/SliderRange/SliderRange.js +227 -0
  31. package/dist/es/components/Sliders/SliderRange/helpers.d.ts +6 -0
  32. package/dist/es/components/Sliders/SliderRange/helpers.js +31 -0
  33. package/dist/es/components/Sliders/SliderRatio/SliderRatio.css +209 -0
  34. package/dist/es/components/Sliders/SliderRatio/SliderRatio.d.ts +42 -0
  35. package/dist/es/components/Sliders/SliderRatio/SliderRatio.js +206 -0
  36. package/dist/es/components/Sliders/SliderRatio/helpers.d.ts +15 -0
  37. package/dist/es/components/Sliders/SliderRatio/helpers.js +32 -0
  38. package/dist/es/components/Sliders/SliderRatio/i/thumb.png +0 -0
  39. package/dist/es/components/Sliders/SliderRatio/types.d.ts +8 -0
  40. package/dist/es/components/Sliders/SliderRatio/types.js +6 -0
  41. package/dist/es/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.css +83 -0
  42. package/dist/es/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.d.ts +23 -0
  43. package/dist/es/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.js +82 -0
  44. package/dist/es/components/Sliders/components/SliderScale/SliderScale.css +15 -0
  45. package/dist/es/components/Sliders/components/SliderScale/SliderScale.d.ts +19 -0
  46. package/dist/es/components/Sliders/components/SliderScale/SliderScale.js +51 -0
  47. package/dist/es/components/Sliders/components/SliderScale/helpers.d.ts +2 -0
  48. package/dist/es/components/Sliders/components/SliderScale/helpers.js +39 -0
  49. package/dist/es/components/Sliders/helpers.d.ts +2 -0
  50. package/dist/es/components/Sliders/helpers.js +33 -0
  51. package/dist/es/components/Switcher/Switcher.css +13 -0
  52. package/dist/es/components/Switcher/Switcher.d.ts +3 -1
  53. package/dist/es/components/Switcher/Switcher.js +5 -1
  54. package/dist/es/components/Tabs/Tabs.css +11 -3
  55. package/dist/es/components/TextField/i/textarea-resizer.svg +1 -0
  56. package/dist/es/index.d.ts +9 -2
  57. package/dist/es/index.js +9 -2
  58. package/dist/lib/components/{Chip → Chips}/Chip.css +53 -32
  59. package/dist/lib/components/Chips/Chip.d.ts +74 -0
  60. package/dist/lib/components/{Chip → Chips}/Chip.js +49 -7
  61. package/dist/lib/components/Chips/Chips.css +19 -0
  62. package/dist/lib/components/Chips/Chips.d.ts +27 -0
  63. package/dist/lib/components/Chips/Chips.js +159 -0
  64. package/dist/lib/components/Chips/components/ChipsDropdown.css +106 -0
  65. package/dist/lib/components/Chips/components/ChipsDropdown.d.ts +16 -0
  66. package/dist/lib/components/Chips/components/ChipsDropdown.js +131 -0
  67. package/dist/lib/components/ContentView/ContentView.css +61 -0
  68. package/dist/lib/components/ContentView/ContentView.d.ts +49 -0
  69. package/dist/lib/components/ContentView/ContentView.js +133 -0
  70. package/dist/lib/components/ContentView/i/alarm.png +0 -0
  71. package/dist/lib/components/ContentView/i/empty.png +0 -0
  72. package/dist/lib/components/ContentView/i/error.png +0 -0
  73. package/dist/lib/components/ContentView/i/fail.png +0 -0
  74. package/dist/lib/components/ContentView/i/searchNoResult.png +0 -0
  75. package/dist/lib/components/ContentView/i/submit.png +0 -0
  76. package/dist/lib/components/ContentView/i/success.png +0 -0
  77. package/dist/lib/components/ContentView/i/update.png +0 -0
  78. package/dist/lib/components/ContentView/i/waiting.png +0 -0
  79. package/dist/lib/components/Search/Search.d.ts +2 -0
  80. package/dist/lib/components/Search/Search.js +7 -2
  81. package/dist/lib/components/Sliders/Slider/Slider.css +127 -0
  82. package/dist/lib/components/Sliders/Slider/Slider.d.ts +41 -0
  83. package/dist/lib/components/Sliders/Slider/Slider.js +150 -0
  84. package/dist/lib/components/Sliders/SliderRange/SliderRange.css +154 -0
  85. package/dist/lib/components/Sliders/SliderRange/SliderRange.d.ts +49 -0
  86. package/dist/lib/components/Sliders/SliderRange/SliderRange.js +252 -0
  87. package/dist/lib/components/Sliders/SliderRange/helpers.d.ts +6 -0
  88. package/dist/lib/components/Sliders/SliderRange/helpers.js +48 -0
  89. package/dist/lib/components/Sliders/SliderRatio/SliderRatio.css +209 -0
  90. package/dist/lib/components/Sliders/SliderRatio/SliderRatio.d.ts +42 -0
  91. package/dist/lib/components/Sliders/SliderRatio/SliderRatio.js +237 -0
  92. package/dist/lib/components/Sliders/SliderRatio/helpers.d.ts +15 -0
  93. package/dist/lib/components/Sliders/SliderRatio/helpers.js +58 -0
  94. package/dist/lib/components/Sliders/SliderRatio/i/thumb.png +0 -0
  95. package/dist/lib/components/Sliders/SliderRatio/types.d.ts +8 -0
  96. package/dist/lib/components/Sliders/SliderRatio/types.js +13 -0
  97. package/dist/lib/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.css +83 -0
  98. package/dist/lib/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.d.ts +23 -0
  99. package/dist/lib/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.js +104 -0
  100. package/dist/lib/components/Sliders/components/SliderScale/SliderScale.css +15 -0
  101. package/dist/lib/components/Sliders/components/SliderScale/SliderScale.d.ts +19 -0
  102. package/dist/lib/components/Sliders/components/SliderScale/SliderScale.js +74 -0
  103. package/dist/lib/components/Sliders/components/SliderScale/helpers.d.ts +2 -0
  104. package/dist/lib/components/Sliders/components/SliderScale/helpers.js +60 -0
  105. package/dist/lib/components/Sliders/helpers.d.ts +2 -0
  106. package/dist/lib/components/Sliders/helpers.js +47 -0
  107. package/dist/lib/components/Switcher/Switcher.css +13 -0
  108. package/dist/lib/components/Switcher/Switcher.d.ts +3 -1
  109. package/dist/lib/components/Switcher/Switcher.js +5 -1
  110. package/dist/lib/components/Tabs/Tabs.css +11 -3
  111. package/dist/lib/components/TextField/i/textarea-resizer.svg +1 -0
  112. package/dist/lib/index.d.ts +9 -2
  113. package/dist/lib/index.js +65 -9
  114. package/package.json +5 -4
  115. package/dist/es/components/Chip/Chip.d.ts +0 -36
  116. package/dist/lib/components/Chip/Chip.d.ts +0 -36
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.9.0](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-core@5.8.0...@megafon/ui-core@5.9.0) (2024-04-08)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **tabs:** change tab color for dark theme ([5618d4b](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/5618d4b7f5a9ae862fad380691f9b3414a0fb3a0))
12
+
13
+
14
+ ### Features
15
+
16
+ * **chips:** add features to Chips ([2684b97](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/2684b974fe868ea2e869fec168ed6bced2f6b75e))
17
+ * **contentview:** add new component ContentView ([f2419dc](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/f2419dc1a659da427a306d41edd3fb67a123d25d))
18
+ * **sliders:** add new components: Slider, SliderRatio, SliderRange ([4e03e12](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/4e03e12b587637e3e2abbe2638b5adaf4b88c00c))
19
+ * **switcher:** add new prop theme ([2959b87](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/2959b87726cafeb2ee25e5ba50317c7423b9aa6e))
20
+
21
+
22
+
23
+
24
+
25
+ # [5.8.0](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-core@5.7.1...@megafon/ui-core@5.8.0) (2024-04-01)
26
+
27
+
28
+ ### Features
29
+
30
+ * **search:** add href to search item ([2c00dc8](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/2c00dc858352794b91962af2791c75927fcdf570))
31
+
32
+
33
+
34
+
35
+
6
36
  ## [5.7.1](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-core@5.7.0...@megafon/ui-core@5.7.1) (2024-03-26)
7
37
 
8
38
  **Note:** Version bump only for package @megafon/ui-core
@@ -11,9 +11,6 @@
11
11
  align-items: center;
12
12
  -webkit-box-sizing: border-box;
13
13
  box-sizing: border-box;
14
- min-width: -webkit-fit-content;
15
- min-width: -moz-fit-content;
16
- min-width: fit-content;
17
14
  padding: 8px 20px;
18
15
  border: none;
19
16
  border-radius: 20px;
@@ -43,6 +40,47 @@
43
40
  .mfui-chip:hover {
44
41
  background-color: var(--spbSky1);
45
42
  }
43
+ .mfui-chip__inner {
44
+ overflow: hidden;
45
+ white-space: nowrap;
46
+ text-overflow: ellipsis;
47
+ }
48
+ .mfui-chip__counter {
49
+ display: -webkit-inline-box;
50
+ display: -ms-inline-flexbox;
51
+ display: inline-flex;
52
+ -webkit-box-align: center;
53
+ -ms-flex-align: center;
54
+ align-items: center;
55
+ margin-left: 6px;
56
+ color: var(--spbSky3);
57
+ }
58
+ @media screen and (max-width: 767px) {
59
+ .mfui-chip__counter {
60
+ margin-left: 4px;
61
+ }
62
+ }
63
+ .mfui-chip__icon,
64
+ .mfui-chip__icon-arrow {
65
+ display: block;
66
+ width: 20px;
67
+ min-width: 20px;
68
+ max-height: 20px;
69
+ }
70
+ .mfui-chip__icon svg,
71
+ .mfui-chip__icon-arrow svg {
72
+ display: block;
73
+ width: 100%;
74
+ height: 100%;
75
+ }
76
+ .mfui-chip__icon {
77
+ margin-right: 6px;
78
+ }
79
+ @media screen and (max-width: 767px) {
80
+ .mfui-chip__icon {
81
+ margin-right: 4px;
82
+ }
83
+ }
46
84
  .mfui-chip_disabled,
47
85
  .mfui-chip_disabled:hover {
48
86
  color: var(--spbSky3);
@@ -54,6 +92,10 @@
54
92
  .mfui-chip_disabled:hover svg {
55
93
  fill: var(--spbSky3);
56
94
  }
95
+ .mfui-chip_disabled .mfui-chip__counter,
96
+ .mfui-chip_disabled:hover .mfui-chip__counter {
97
+ color: var(--spbSky2);
98
+ }
57
99
  .mfui-chip_checked,
58
100
  .mfui-chip_checked:hover {
59
101
  color: var(--stcWhite);
@@ -63,6 +105,10 @@
63
105
  .mfui-chip_checked:hover svg {
64
106
  fill: var(--stcWhite);
65
107
  }
108
+ .mfui-chip_checked .mfui-chip__counter,
109
+ .mfui-chip_checked:hover .mfui-chip__counter {
110
+ color: var(--stcWhite);
111
+ }
66
112
  .mfui-chip_checked.mfui-chip_color_black,
67
113
  .mfui-chip_checked.mfui-chip_color_black:hover {
68
114
  color: var(--base);
@@ -72,6 +118,10 @@
72
118
  .mfui-chip_checked.mfui-chip_color_black:hover svg {
73
119
  fill: var(--base);
74
120
  }
121
+ .mfui-chip_checked.mfui-chip_color_black .mfui-chip__counter,
122
+ .mfui-chip_checked.mfui-chip_color_black:hover .mfui-chip__counter {
123
+ color: var(--base);
124
+ }
75
125
  .mfui-chip_with-icon {
76
126
  padding-left: 16px;
77
127
  }
@@ -80,32 +130,3 @@
80
130
  padding-left: 8px;
81
131
  }
82
132
  }
83
- .mfui-chip__inner {
84
- display: -webkit-inline-box;
85
- display: -ms-inline-flexbox;
86
- display: inline-flex;
87
- -webkit-box-align: center;
88
- -ms-flex-align: center;
89
- align-items: center;
90
- -webkit-box-pack: center;
91
- -ms-flex-pack: center;
92
- justify-content: center;
93
- white-space: nowrap;
94
- }
95
- .mfui-chip__icon {
96
- display: block;
97
- width: 20px;
98
- min-width: 20px;
99
- max-height: 20px;
100
- margin-right: 6px;
101
- }
102
- @media screen and (max-width: 767px) {
103
- .mfui-chip__icon {
104
- margin-right: 4px;
105
- }
106
- }
107
- .mfui-chip__icon svg {
108
- display: block;
109
- width: 100%;
110
- height: 100%;
111
- }
@@ -0,0 +1,74 @@
1
+ import React, { Ref } from 'react';
2
+ import * as PropTypes from 'prop-types';
3
+ import './Chip.less';
4
+ export declare type ChipIdType = number | string;
5
+ export declare const ChipColors: {
6
+ readonly DEFAULT: "default";
7
+ readonly BLACK: "black";
8
+ };
9
+ export declare type ChipColorsType = typeof ChipColors[keyof typeof ChipColors];
10
+ export declare const ChipArrow: {
11
+ readonly UP: "up";
12
+ readonly DOWN: "down";
13
+ };
14
+ export declare type ChipArrowType = typeof ChipArrow[keyof typeof ChipArrow];
15
+ export interface IChipProps {
16
+ /** Идентификатор */
17
+ id: ChipIdType;
18
+ /** Набор цветов для компонента */
19
+ color?: ChipColorsType;
20
+ /** Отображение в отмеченном (зажатом) состоянии */
21
+ checked?: boolean;
22
+ /** Отключенное состояние */
23
+ disabled?: boolean;
24
+ /** Иконка */
25
+ icon?: JSX.Element;
26
+ /** Значение счетчика */
27
+ counterValue?: number;
28
+ /** Стрелка вверх или вниз */
29
+ arrow?: ChipArrowType;
30
+ /** Обработчик нажатия */
31
+ onClick?: (e: React.SyntheticEvent<EventTarget>, id?: ChipIdType) => void;
32
+ /** Дочерние элементы */
33
+ children?: React.ReactNode;
34
+ /** Дополнительный класс корневого элемента */
35
+ className?: string;
36
+ /** Дополнительные классы для внутренних элементов */
37
+ classes?: {
38
+ root?: string;
39
+ inner?: string;
40
+ icon?: string;
41
+ counter?: string;
42
+ };
43
+ /** Дополнительные data атрибуты к внутренним элементам */
44
+ dataAttrs?: {
45
+ root?: Record<string, string>;
46
+ inner?: Record<string, string>;
47
+ icon?: Record<string, string>;
48
+ counter?: Record<string, string>;
49
+ arrow?: Record<string, string>;
50
+ };
51
+ /** Ссылка на элемент */
52
+ rootRef?: Ref<HTMLButtonElement>;
53
+ }
54
+ declare const Chip: React.FC<IChipProps>;
55
+ export declare const ChipPropType: {
56
+ id: PropTypes.Validator<string | number>;
57
+ color: PropTypes.Requireable<"default" | "black">;
58
+ checked: PropTypes.Requireable<boolean>;
59
+ disabled: PropTypes.Requireable<boolean>;
60
+ icon: PropTypes.Requireable<PropTypes.ReactElementLike>;
61
+ counterValue: PropTypes.Requireable<number>;
62
+ arrow: PropTypes.Requireable<"down" | "up">;
63
+ onClick: PropTypes.Requireable<(...args: any[]) => any>;
64
+ children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
65
+ className: PropTypes.Requireable<string>;
66
+ classes: PropTypes.Requireable<{
67
+ [x: string]: string | null | undefined;
68
+ }>;
69
+ dataAttrs: PropTypes.Requireable<{
70
+ [x: string]: object | null | undefined;
71
+ }>;
72
+ rootRef: PropTypes.Requireable<any>;
73
+ };
74
+ export default Chip;
@@ -1,8 +1,38 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
+ import "core-js/modules/es.object.values.js";
2
3
  import React from 'react';
3
4
  import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
4
5
  import * as PropTypes from 'prop-types';
5
6
  import "./Chip.css";
7
+
8
+ var ArrowDown = function ArrowDown(props) {
9
+ return /*#__PURE__*/React.createElement("svg", _extends({
10
+ viewBox: "0 0 20 20"
11
+ }, props), /*#__PURE__*/React.createElement("path", {
12
+ d: "M6 8h8l-4 5z",
13
+ fillRule: "evenodd",
14
+ clipRule: "evenodd"
15
+ }));
16
+ };
17
+
18
+ var ArrowUp = function ArrowUp(props) {
19
+ return /*#__PURE__*/React.createElement("svg", _extends({
20
+ viewBox: "0 0 20 20"
21
+ }, props), /*#__PURE__*/React.createElement("path", {
22
+ d: "M14 12H6l4-5z",
23
+ fillRule: "evenodd",
24
+ clipRule: "evenodd"
25
+ }));
26
+ };
27
+
28
+ export var ChipColors = {
29
+ DEFAULT: 'default',
30
+ BLACK: 'black'
31
+ };
32
+ export var ChipArrow = {
33
+ UP: 'up',
34
+ DOWN: 'down'
35
+ };
6
36
  var cn = cnCreate('mfui-chip');
7
37
 
8
38
  var Chip = function Chip(_ref) {
@@ -14,6 +44,8 @@ var Chip = function Chip(_ref) {
14
44
  _ref$disabled = _ref.disabled,
15
45
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
16
46
  icon = _ref.icon,
47
+ counterValue = _ref.counterValue,
48
+ arrow = _ref.arrow,
17
49
  onClick = _ref.onClick,
18
50
  children = _ref.children,
19
51
  className = _ref.className,
@@ -40,22 +72,29 @@ var Chip = function Chip(_ref) {
40
72
  className: cn('icon', [classes.icon])
41
73
  }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.icon)), icon), /*#__PURE__*/React.createElement("span", _extends({
42
74
  className: cn('inner', [classes.inner])
43
- }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.inner)), children));
75
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.inner)), children), !!counterValue && /*#__PURE__*/React.createElement("span", _extends({
76
+ className: cn('counter', [classes.counter])
77
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.counter)), counterValue), !!arrow && /*#__PURE__*/React.createElement("div", _extends({
78
+ className: cn('icon-arrow')
79
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.arrow)), arrow === 'up' ? /*#__PURE__*/React.createElement(ArrowUp, null) : /*#__PURE__*/React.createElement(ArrowDown, null)));
44
80
  };
45
81
 
46
- Chip.propTypes = {
47
- id: PropTypes.string.isRequired,
48
- color: PropTypes.oneOf(['default', 'black']),
82
+ export var ChipPropType = {
83
+ id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
84
+ color: PropTypes.oneOf(Object.values(ChipColors)),
49
85
  checked: PropTypes.bool,
50
86
  disabled: PropTypes.bool,
51
87
  icon: PropTypes.element,
88
+ counterValue: PropTypes.number,
89
+ arrow: PropTypes.oneOf(Object.values(ChipArrow)),
90
+ onClick: PropTypes.func,
91
+ children: PropTypes.node,
52
92
  className: PropTypes.string,
53
93
  classes: PropTypes.objectOf(PropTypes.string),
54
94
  dataAttrs: PropTypes.objectOf(PropTypes.object),
55
- onClick: PropTypes.func,
56
- children: PropTypes.node,
57
95
  rootRef: PropTypes.oneOfType([PropTypes.func, PropTypes.oneOfType([PropTypes.shape({
58
96
  current: PropTypes.elementType
59
97
  }), PropTypes.any])])
60
98
  };
99
+ Chip.propTypes = ChipPropType;
61
100
  export default Chip;
@@ -0,0 +1,19 @@
1
+ .mfui-chips {
2
+ display: -webkit-box;
3
+ display: -ms-flexbox;
4
+ display: flex;
5
+ -ms-flex-wrap: wrap;
6
+ flex-wrap: wrap;
7
+ gap: 12px;
8
+ width: 100%;
9
+ }
10
+ @media screen and (max-width: 767px) {
11
+ .mfui-chips {
12
+ gap: 8px;
13
+ }
14
+ }
15
+ .mfui-chips_hidden {
16
+ display: grid;
17
+ grid-template-columns: repeat(auto-fit, minMax(0, -webkit-min-content));
18
+ grid-template-columns: repeat(auto-fit, minMax(0, min-content));
19
+ }
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import { ChipColorsType, ChipIdType, IChipProps } from './Chip';
3
+ import './Chips.less';
4
+ export interface IChipsProps {
5
+ /** Массив элементов */
6
+ items: IChipProps[];
7
+ /** Значение */
8
+ value: ChipIdType;
9
+ /** Цвет активного элемента */
10
+ color?: ChipColorsType;
11
+ /** Количество отображаемых элементов на всех разрешениях экрана */
12
+ visibleItemsCountAll?: number;
13
+ /** Количество отображаемых элементов на разрешении 768 - 1023 */
14
+ visibleItemsCountTablet?: number;
15
+ /** Количество отображаемых элементов на разрешении 1024 - 1279 */
16
+ visibleItemsCountDesktop?: number;
17
+ /** Количество отображаемых элементов на разрешении 1280+ */
18
+ visibleItemsCountWide?: number;
19
+ /** Название дополнительной кнопки */
20
+ moreTitle?: string;
21
+ /** Обработчик изменения значения */
22
+ onChange?: (id: ChipIdType, e?: React.SyntheticEvent<EventTarget>) => void;
23
+ /** Дополнительный класс корневого элемента */
24
+ className?: string;
25
+ }
26
+ declare const Chips: React.FC<IChipsProps>;
27
+ export default Chips;
@@ -0,0 +1,129 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import "core-js/modules/es.array.slice.js";
4
+ import "core-js/modules/es.array.map.js";
5
+ import "core-js/modules/es.object.values.js";
6
+ import React from 'react';
7
+ import { breakpoints, cnCreate } from '@megafon/ui-helpers';
8
+ import throttleTime from '@megafon/ui-shared/src/constants/throttleTime';
9
+ import throttle from 'lodash.throttle';
10
+ import * as PropTypes from 'prop-types';
11
+ import Chip, { ChipColors, ChipPropType } from "./Chip";
12
+ import ChipsDropdown from "./components/ChipsDropdown";
13
+ import "./Chips.css";
14
+ var DESKTOP_SMALL_START = breakpoints.DESKTOP_SMALL_START,
15
+ DESKTOP_MIDDLE_START = breakpoints.DESKTOP_MIDDLE_START,
16
+ MOBILE_BIG_START = breakpoints.MOBILE_BIG_START;
17
+ var cn = cnCreate('mfui-chips');
18
+
19
+ var Chips = function Chips(_ref) {
20
+ var items = _ref.items,
21
+ value = _ref.value,
22
+ _ref$color = _ref.color,
23
+ color = _ref$color === void 0 ? 'default' : _ref$color,
24
+ _ref$moreTitle = _ref.moreTitle,
25
+ moreTitle = _ref$moreTitle === void 0 ? 'Еще' : _ref$moreTitle,
26
+ visibleItemsCountAll = _ref.visibleItemsCountAll,
27
+ visibleItemsCountTablet = _ref.visibleItemsCountTablet,
28
+ visibleItemsCountDesktop = _ref.visibleItemsCountDesktop,
29
+ visibleItemsCountWide = _ref.visibleItemsCountWide,
30
+ onChange = _ref.onChange,
31
+ className = _ref.className;
32
+
33
+ var _React$useState = React.useState(value),
34
+ _React$useState2 = _slicedToArray(_React$useState, 2),
35
+ selectedId = _React$useState2[0],
36
+ setSelectedId = _React$useState2[1];
37
+
38
+ var _React$useState3 = React.useState(visibleItemsCountAll),
39
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
40
+ visibleItemsCount = _React$useState4[0],
41
+ setVisibleItemsCount = _React$useState4[1];
42
+
43
+ var _React$useState5 = React.useState([]),
44
+ _React$useState6 = _slicedToArray(_React$useState5, 2),
45
+ visibleItems = _React$useState6[0],
46
+ setVisibleItems = _React$useState6[1];
47
+
48
+ var _React$useState7 = React.useState(null),
49
+ _React$useState8 = _slicedToArray(_React$useState7, 2),
50
+ hiddenItems = _React$useState8[0],
51
+ setHiddenItems = _React$useState8[1];
52
+
53
+ var handleClick = React.useCallback(function (e, id) {
54
+ e.persist();
55
+ setSelectedId(id);
56
+ onChange === null || onChange === void 0 ? void 0 : onChange(id, e);
57
+ }, [onChange]);
58
+ React.useEffect(function () {
59
+ var resizeHandler = function resizeHandler() {
60
+ var windowWidth = window.innerWidth;
61
+
62
+ if (visibleItemsCountWide && windowWidth >= DESKTOP_MIDDLE_START) {
63
+ setVisibleItemsCount(visibleItemsCountWide);
64
+ return;
65
+ }
66
+
67
+ if (visibleItemsCountDesktop && windowWidth >= DESKTOP_SMALL_START && windowWidth < DESKTOP_MIDDLE_START) {
68
+ setVisibleItemsCount(visibleItemsCountDesktop);
69
+ return;
70
+ }
71
+
72
+ if (visibleItemsCountTablet && windowWidth >= MOBILE_BIG_START && windowWidth < DESKTOP_SMALL_START) {
73
+ setVisibleItemsCount(visibleItemsCountTablet);
74
+ return;
75
+ }
76
+
77
+ setVisibleItemsCount(visibleItemsCountAll);
78
+ };
79
+
80
+ var resizeHandlerThrottled = throttle(resizeHandler, throttleTime.resize);
81
+ resizeHandler();
82
+ window.addEventListener('resize', resizeHandlerThrottled);
83
+ return function () {
84
+ window.removeEventListener('resize', resizeHandlerThrottled);
85
+ };
86
+ }, [visibleItemsCountAll, visibleItemsCountDesktop, visibleItemsCountTablet, visibleItemsCountWide]);
87
+ React.useEffect(function () {
88
+ if (visibleItemsCount && items.length > visibleItemsCount) {
89
+ setVisibleItems(items.slice(0, visibleItemsCount));
90
+ setHiddenItems(items.slice(visibleItemsCount));
91
+ } else {
92
+ setVisibleItems(items);
93
+ setHiddenItems(null);
94
+ }
95
+ }, [items, visibleItemsCount]);
96
+ return /*#__PURE__*/React.createElement("div", {
97
+ className: cn({
98
+ hidden: !!hiddenItems
99
+ }, [className])
100
+ }, visibleItems.map(function (item) {
101
+ return /*#__PURE__*/React.createElement(Chip, _extends({
102
+ key: item.id
103
+ }, item, {
104
+ checked: item.id === selectedId,
105
+ color: color,
106
+ onClick: handleClick
107
+ }), !!(item === null || item === void 0 ? void 0 : item.children) && item.children);
108
+ }), !!hiddenItems && /*#__PURE__*/React.createElement(ChipsDropdown, {
109
+ value: selectedId,
110
+ items: hiddenItems,
111
+ moreTitle: moreTitle,
112
+ color: color,
113
+ onClick: handleClick
114
+ }));
115
+ };
116
+
117
+ Chips.propTypes = {
118
+ items: PropTypes.arrayOf(PropTypes.shape(ChipPropType).isRequired).isRequired,
119
+ value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
120
+ color: PropTypes.oneOf(Object.values(ChipColors)),
121
+ visibleItemsCountAll: PropTypes.number,
122
+ visibleItemsCountTablet: PropTypes.number,
123
+ visibleItemsCountDesktop: PropTypes.number,
124
+ visibleItemsCountWide: PropTypes.number,
125
+ moreTitle: PropTypes.string,
126
+ onChange: PropTypes.func,
127
+ className: PropTypes.string
128
+ };
129
+ export default Chips;
@@ -0,0 +1,106 @@
1
+ @-webkit-keyframes listAppear {
2
+ from {
3
+ -webkit-transform: translateY(-25px);
4
+ transform: translateY(-25px);
5
+ opacity: 0;
6
+ }
7
+ to {
8
+ -webkit-transform: translateY(0);
9
+ transform: translateY(0);
10
+ opacity: 1;
11
+ }
12
+ }
13
+ @keyframes listAppear {
14
+ from {
15
+ -webkit-transform: translateY(-25px);
16
+ transform: translateY(-25px);
17
+ opacity: 0;
18
+ }
19
+ to {
20
+ -webkit-transform: translateY(0);
21
+ transform: translateY(0);
22
+ opacity: 1;
23
+ }
24
+ }
25
+ .mfui-chips-dropdown {
26
+ position: relative;
27
+ }
28
+ .mfui-chips-dropdown__button {
29
+ width: 100%;
30
+ }
31
+ .mfui-chips-dropdown__list {
32
+ position: absolute;
33
+ top: 100%;
34
+ left: 0;
35
+ z-index: 100;
36
+ display: block;
37
+ border-radius: 12px;
38
+ background-color: var(--base);
39
+ -webkit-box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
40
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
41
+ -webkit-animation-name: listAppear;
42
+ animation-name: listAppear;
43
+ -webkit-animation-duration: 0.3s;
44
+ animation-duration: 0.3s;
45
+ -webkit-animation-timing-function: ease-in-out;
46
+ animation-timing-function: ease-in-out;
47
+ }
48
+ .mfui-chips-dropdown__list-inner {
49
+ -webkit-box-sizing: border-box;
50
+ box-sizing: border-box;
51
+ max-height: 320px;
52
+ width: -webkit-max-content;
53
+ width: -moz-max-content;
54
+ width: max-content;
55
+ max-width: 256px;
56
+ padding: 16px;
57
+ overflow-y: auto;
58
+ scrollbar-width: thin;
59
+ scrollbar-color: var(--spbSky2) transparent;
60
+ overflow-wrap: normal;
61
+ }
62
+ .mfui-chips-dropdown__list-inner::-webkit-scrollbar {
63
+ width: 16px;
64
+ }
65
+ .mfui-chips-dropdown__list-inner::-webkit-scrollbar-thumb {
66
+ border: 6px solid transparent;
67
+ border-radius: 16px;
68
+ background-color: var(--spbSky2);
69
+ background-clip: padding-box;
70
+ }
71
+ .mfui-chips-dropdown__list-inner::-webkit-scrollbar-thumb:hover {
72
+ background-color: var(--spbSky3);
73
+ }
74
+ .mfui-chips-dropdown__list-item {
75
+ font-family: inherit;
76
+ font-size: 15px;
77
+ line-height: 24px;
78
+ font-weight: 500;
79
+ display: -webkit-box;
80
+ display: -ms-flexbox;
81
+ display: flex;
82
+ padding: 12px 32px;
83
+ border-radius: 12px;
84
+ background-color: transparent;
85
+ cursor: pointer;
86
+ }
87
+ .mfui-chips-dropdown__list-item:hover {
88
+ background-color: var(--spbSky0);
89
+ }
90
+ .mfui-chips-dropdown__list-item_with-icon {
91
+ padding-left: 16px;
92
+ padding-right: 16px;
93
+ }
94
+ .mfui-chips-dropdown__icon {
95
+ display: block;
96
+ width: 24px;
97
+ min-width: 24px;
98
+ max-height: 24px;
99
+ margin-right: 16px;
100
+ }
101
+ .mfui-chips-dropdown__icon svg {
102
+ display: block;
103
+ width: 100%;
104
+ height: 100%;
105
+ fill: var(--content);
106
+ }
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { ChipColorsType, ChipIdType, IChipProps } from '../Chip';
3
+ import './ChipsDropdown.less';
4
+ export interface IChipsDropdownProps {
5
+ moreTitle: string;
6
+ value: ChipIdType;
7
+ items: IChipProps[];
8
+ color: ChipColorsType;
9
+ onClick: (e: React.SyntheticEvent<EventTarget>, id: ChipIdType) => void;
10
+ dataAttrs?: {
11
+ root?: Record<string, string>;
12
+ list?: Record<string, string>;
13
+ };
14
+ }
15
+ declare const ChipsDropdown: React.FC<IChipsDropdownProps>;
16
+ export default ChipsDropdown;