@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
@@ -0,0 +1,101 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import "core-js/modules/es.array.find.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 { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
8
+ import * as PropTypes from 'prop-types';
9
+ import Chip, { ChipColors, ChipPropType } from "../Chip";
10
+ import "./ChipsDropdown.css";
11
+ var cn = cnCreate('mfui-chips-dropdown');
12
+
13
+ var ChipsDropdown = function ChipsDropdown(_ref) {
14
+ var color = _ref.color,
15
+ moreTitle = _ref.moreTitle,
16
+ _ref$items = _ref.items,
17
+ items = _ref$items === void 0 ? [] : _ref$items,
18
+ value = _ref.value,
19
+ onClick = _ref.onClick,
20
+ dataAttrs = _ref.dataAttrs;
21
+
22
+ var _React$useState = React.useState(false),
23
+ _React$useState2 = _slicedToArray(_React$useState, 2),
24
+ isDropdownOpen = _React$useState2[0],
25
+ setIsDropdownOpen = _React$useState2[1];
26
+
27
+ var dropdownRef = React.useRef(null);
28
+ var listRef = React.useRef(null);
29
+ var currentItem = React.useMemo(function () {
30
+ return items.find(function (item) {
31
+ return item.id === value;
32
+ }) || {
33
+ id: '',
34
+ children: moreTitle
35
+ };
36
+ }, [items, value, moreTitle]);
37
+ var handleOutsideClick = React.useCallback(function (event) {
38
+ if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
39
+ setIsDropdownOpen(false);
40
+ }
41
+ }, []);
42
+
43
+ var handleOpenItemList = function handleOpenItemList() {
44
+ setIsDropdownOpen(true);
45
+ document.addEventListener('mousedown', handleOutsideClick);
46
+ };
47
+
48
+ var handleItemClick = React.useCallback(function (item) {
49
+ return function (e) {
50
+ e.persist();
51
+ setIsDropdownOpen(false);
52
+ onClick(e, item.id);
53
+ };
54
+ }, [onClick]);
55
+ React.useEffect(function () {
56
+ if (!isDropdownOpen) {
57
+ document.removeEventListener('mousedown', handleOutsideClick);
58
+ }
59
+ }, [handleOutsideClick, isDropdownOpen]);
60
+ React.useEffect(function () {
61
+ return function () {
62
+ return document.removeEventListener('mousedown', handleOutsideClick);
63
+ };
64
+ }, [handleOutsideClick]);
65
+ return /*#__PURE__*/React.createElement("div", _extends({
66
+ className: cn(),
67
+ ref: dropdownRef
68
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), /*#__PURE__*/React.createElement(Chip, _extends({}, currentItem, {
69
+ className: cn('button'),
70
+ color: color,
71
+ checked: !!currentItem.id,
72
+ arrow: isDropdownOpen ? 'up' : 'down',
73
+ onClick: handleOpenItemList
74
+ })), isDropdownOpen && /*#__PURE__*/React.createElement("div", _extends({
75
+ className: cn('list'),
76
+ ref: listRef
77
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.list)), /*#__PURE__*/React.createElement("div", {
78
+ className: cn('list-inner')
79
+ }, items.map(function (item, key) {
80
+ return /*#__PURE__*/React.createElement("div", {
81
+ key: key,
82
+ className: cn('list-item', {
83
+ 'with-icon': !!item.icon
84
+ }),
85
+ onClick: handleItemClick(item),
86
+ onKeyDown: handleItemClick(item)
87
+ }, !!(item === null || item === void 0 ? void 0 : item.icon) && /*#__PURE__*/React.createElement("span", {
88
+ className: cn('icon')
89
+ }, item.icon), !!(item === null || item === void 0 ? void 0 : item.children) && item.children);
90
+ }))));
91
+ };
92
+
93
+ ChipsDropdown.propTypes = {
94
+ moreTitle: PropTypes.string.isRequired,
95
+ value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
96
+ items: PropTypes.arrayOf(PropTypes.shape(ChipPropType).isRequired).isRequired,
97
+ color: PropTypes.oneOf(Object.values(ChipColors)).isRequired,
98
+ onClick: PropTypes.func.isRequired,
99
+ dataAttrs: PropTypes.objectOf(PropTypes.object)
100
+ };
101
+ export default ChipsDropdown;
@@ -0,0 +1,61 @@
1
+ .mfui-content-view {
2
+ min-width: 240px;
3
+ padding: 0 16px;
4
+ color: var(--content);
5
+ text-align: center;
6
+ }
7
+ .mfui-content-view__image {
8
+ max-width: 144px;
9
+ margin-bottom: 24px;
10
+ vertical-align: top;
11
+ }
12
+ .mfui-content-view__title {
13
+ font-weight: 500;
14
+ font-size: 20px;
15
+ line-height: 28px;
16
+ letter-spacing: 0.5px;
17
+ }
18
+ .mfui-content-view__text {
19
+ font-size: 15px;
20
+ line-height: 24px;
21
+ font-weight: 400;
22
+ margin-top: 4px;
23
+ }
24
+ .mfui-content-view__buttons {
25
+ display: -webkit-box;
26
+ display: -ms-flexbox;
27
+ display: flex;
28
+ -webkit-box-orient: vertical;
29
+ -webkit-box-direction: normal;
30
+ -ms-flex-direction: column;
31
+ flex-direction: column;
32
+ gap: 12px;
33
+ -webkit-box-align: center;
34
+ -ms-flex-align: center;
35
+ align-items: center;
36
+ padding-top: 32px;
37
+ }
38
+ .mfui-content-view_fullscreen {
39
+ display: -webkit-box;
40
+ display: -ms-flexbox;
41
+ display: flex;
42
+ -webkit-box-orient: vertical;
43
+ -webkit-box-direction: normal;
44
+ -ms-flex-direction: column;
45
+ flex-direction: column;
46
+ -webkit-box-align: center;
47
+ -ms-flex-align: center;
48
+ align-items: center;
49
+ -webkit-box-pack: center;
50
+ -ms-flex-pack: center;
51
+ justify-content: center;
52
+ min-height: 100%;
53
+ }
54
+ .mfui-content-view_fullscreen .mfui-content-view__content {
55
+ margin-top: auto;
56
+ }
57
+ .mfui-content-view_fullscreen .mfui-content-view__buttons {
58
+ margin-top: auto;
59
+ padding-top: 24px;
60
+ padding-bottom: 24px;
61
+ }
@@ -0,0 +1,49 @@
1
+ import * as React from 'react';
2
+ import './ContentView.less';
3
+ declare const imageMap: {
4
+ alarm: any;
5
+ empty: any;
6
+ error: any;
7
+ fail: any;
8
+ searchNoResult: any;
9
+ submit: any;
10
+ success: any;
11
+ update: any;
12
+ waiting: any;
13
+ };
14
+ declare type ElementType = {
15
+ /** Текст */
16
+ text?: string;
17
+ /** Атрибут href */
18
+ href?: string;
19
+ /** Атрибут target */
20
+ target?: '_self' | '_blank' | '_parent' | '_top';
21
+ /** Обработчик клика */
22
+ onClick?: (e: React.SyntheticEvent<EventTarget>) => void;
23
+ };
24
+ export interface IContentViewProps {
25
+ /** Дополнительный класс корневого элемента */
26
+ className?: string;
27
+ /** Заголовок */
28
+ title: string;
29
+ /** Тип встроенного изображения */
30
+ type?: keyof typeof imageMap;
31
+ /** Значение тега alt для изображения */
32
+ alt?: string;
33
+ /** Ссылка на изображение */
34
+ src?: string;
35
+ /** Параметры кнопки */
36
+ buttonParams?: ElementType;
37
+ /** Параметры ссылки */
38
+ linkParams?: ElementType;
39
+ /** Полноэкранный режим */
40
+ isFullscreen?: boolean;
41
+ /** Дополнительные data атрибуты к внутренним элементам */
42
+ dataAttrs?: {
43
+ root?: Record<string, string>;
44
+ button?: Record<string, string>;
45
+ link?: Record<string, string>;
46
+ };
47
+ }
48
+ declare const ContentView: React.FC<IContentViewProps>;
49
+ export default ContentView;
@@ -0,0 +1,103 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import "core-js/modules/es.string.link.js";
3
+ import * as React from 'react';
4
+ import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
5
+ import * as PropTypes from 'prop-types';
6
+ import Button from "../Button/Button";
7
+ import alarmImg from "./i/alarm.png";
8
+ import emptyImg from "./i/empty.png";
9
+ import errorImg from "./i/error.png";
10
+ import failImg from "./i/fail.png";
11
+ import searchNoResultImg from "./i/searchNoResult.png";
12
+ import submitImg from "./i/submit.png";
13
+ import successImg from "./i/success.png";
14
+ import updateImg from "./i/update.png";
15
+ import waitingImg from "./i/waiting.png";
16
+ import "./ContentView.css";
17
+ var imageMap = {
18
+ alarm: alarmImg,
19
+ empty: emptyImg,
20
+ error: errorImg,
21
+ fail: failImg,
22
+ searchNoResult: searchNoResultImg,
23
+ submit: submitImg,
24
+ success: successImg,
25
+ update: updateImg,
26
+ waiting: waitingImg
27
+ };
28
+ var cn = cnCreate('mfui-content-view');
29
+
30
+ var ContentView = function ContentView(_ref) {
31
+ var className = _ref.className,
32
+ title = _ref.title,
33
+ type = _ref.type,
34
+ _ref$alt = _ref.alt,
35
+ alt = _ref$alt === void 0 ? '' : _ref$alt,
36
+ src = _ref.src,
37
+ buttonParams = _ref.buttonParams,
38
+ linkParams = _ref.linkParams,
39
+ isFullscreen = _ref.isFullscreen,
40
+ dataAttrs = _ref.dataAttrs,
41
+ children = _ref.children;
42
+ var imageSrc = type ? imageMap[type] : src;
43
+ var showButtons = !!(buttonParams === null || buttonParams === void 0 ? void 0 : buttonParams.text) || !!(linkParams === null || linkParams === void 0 ? void 0 : linkParams.text);
44
+ return /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
45
+ className: cn({
46
+ fullscreen: isFullscreen
47
+ }, [className])
48
+ }), /*#__PURE__*/React.createElement("div", {
49
+ className: cn('content')
50
+ }, /*#__PURE__*/React.createElement("img", {
51
+ className: cn('image'),
52
+ src: imageSrc,
53
+ alt: alt
54
+ }), /*#__PURE__*/React.createElement("div", {
55
+ className: cn('title')
56
+ }, title), !!children && /*#__PURE__*/React.createElement("div", {
57
+ className: cn('text')
58
+ }, children)), showButtons && /*#__PURE__*/React.createElement("div", {
59
+ className: cn('buttons')
60
+ }, !!(buttonParams === null || buttonParams === void 0 ? void 0 : buttonParams.text) && /*#__PURE__*/React.createElement(Button, {
61
+ href: buttonParams.href,
62
+ target: buttonParams.target,
63
+ onClick: buttonParams.onClick,
64
+ dataAttrs: {
65
+ root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.button
66
+ }
67
+ }, buttonParams.text), !!(linkParams === null || linkParams === void 0 ? void 0 : linkParams.text) && /*#__PURE__*/React.createElement(Button, {
68
+ type: "text",
69
+ href: linkParams.href,
70
+ target: linkParams.target,
71
+ onClick: linkParams.onClick,
72
+ dataAttrs: {
73
+ root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.link
74
+ }
75
+ }, linkParams.text)));
76
+ };
77
+
78
+ ContentView.propTypes = {
79
+ className: PropTypes.string,
80
+ title: PropTypes.string.isRequired,
81
+ type: PropTypes.oneOf(['waiting', 'error', 'submit', 'success', 'fail', 'update', 'alarm', 'empty', 'searchNoResult']),
82
+ alt: PropTypes.string,
83
+ src: PropTypes.string,
84
+ buttonParams: PropTypes.shape({
85
+ text: PropTypes.string,
86
+ href: PropTypes.string,
87
+ target: PropTypes.oneOf(['_self', '_blank', '_parent', '_top']),
88
+ onClick: PropTypes.func
89
+ }),
90
+ linkParams: PropTypes.shape({
91
+ text: PropTypes.string,
92
+ href: PropTypes.string,
93
+ target: PropTypes.oneOf(['_self', '_blank', '_parent', '_top']),
94
+ onClick: PropTypes.func
95
+ }),
96
+ isFullscreen: PropTypes.bool,
97
+ dataAttrs: PropTypes.shape({
98
+ root: PropTypes.objectOf(PropTypes.string.isRequired),
99
+ button: PropTypes.objectOf(PropTypes.string.isRequired),
100
+ link: PropTypes.objectOf(PropTypes.string.isRequired)
101
+ })
102
+ };
103
+ export default ContentView;
@@ -13,6 +13,8 @@ export declare const SearchItemsPaddings: {
13
13
  export declare type SearchItem = {
14
14
  /** Значение value элемента */
15
15
  value: string;
16
+ /** Ссылка элемента */
17
+ href?: string;
16
18
  /** Настраиваемое отображение элементов в выпадающем списке */
17
19
  searchView?: ElementOrString;
18
20
  /** Размер горизонтальных отступов элемента */
@@ -152,8 +152,12 @@ var Search = function Search(_ref) {
152
152
  return;
153
153
  }
154
154
 
155
- var chosenValue = items[index].value;
156
- onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(chosenValue);
155
+ var chosenItem = items[index];
156
+ onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(chosenItem.value);
157
+
158
+ if (chosenItem.href) {
159
+ window.location.href = chosenItem.href;
160
+ }
157
161
  }, [disabled, items, onSubmit]);
158
162
  var handleSelectSubmit = React.useCallback(function (index) {
159
163
  return function () {
@@ -465,6 +469,7 @@ Search.propTypes = {
465
469
  hideIcon: PropTypes.bool,
466
470
  items: PropTypes.arrayOf(PropTypes.shape({
467
471
  value: PropTypes.string.isRequired,
472
+ href: PropTypes.string,
468
473
  searchView: PropTypes.oneOfType([PropTypes.string, PropTypes.element, PropTypes.arrayOf(PropTypes.element)]),
469
474
  paddings: PropTypes.oneOf(Object.values(SearchItemsPaddings))
470
475
  }).isRequired),
@@ -0,0 +1,127 @@
1
+ .mfui-slider {
2
+ display: -webkit-box;
3
+ display: -ms-flexbox;
4
+ display: flex;
5
+ -webkit-box-orient: vertical;
6
+ -webkit-box-direction: normal;
7
+ -ms-flex-direction: column;
8
+ flex-direction: column;
9
+ }
10
+ .mfui-slider__head {
11
+ font-size: 15px;
12
+ line-height: 24px;
13
+ font-weight: 500;
14
+ display: -webkit-box;
15
+ display: -ms-flexbox;
16
+ display: flex;
17
+ -webkit-box-align: end;
18
+ -ms-flex-align: end;
19
+ align-items: flex-end;
20
+ margin-bottom: 8px;
21
+ }
22
+ .mfui-slider__display-value {
23
+ margin-left: auto;
24
+ }
25
+ .mfui-slider__range-input {
26
+ height: 12px;
27
+ margin: 6px 0;
28
+ border-radius: 100px;
29
+ background: var(--spbSky0);
30
+ background-image: -webkit-gradient(linear, left top, left bottom, from(var(--brandGreen)), to(var(--brandGreen)));
31
+ background-image: linear-gradient(var(--brandGreen), var(--brandGreen));
32
+ background-repeat: no-repeat;
33
+ outline: none;
34
+ cursor: pointer;
35
+ -webkit-appearance: none;
36
+ -moz-appearance: none;
37
+ appearance: none;
38
+ }
39
+ .mfui-slider__range-input:focus {
40
+ outline: none;
41
+ }
42
+ .mfui-slider__range-input::-webkit-slider-thumb {
43
+ width: 24px;
44
+ height: 24px;
45
+ border: none;
46
+ border-radius: 50%;
47
+ background-color: var(--stcWhite);
48
+ -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
49
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
50
+ -webkit-appearance: none;
51
+ }
52
+ .mfui-slider__range-input::-moz-range-thumb {
53
+ width: 24px;
54
+ height: 24px;
55
+ border: none;
56
+ border-radius: 50%;
57
+ background-color: var(--stcWhite);
58
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
59
+ -webkit-appearance: none;
60
+ }
61
+ .mfui-slider__range-input::-ms-thumb {
62
+ width: 24px;
63
+ height: 24px;
64
+ border: none;
65
+ border-radius: 50%;
66
+ background-color: var(--stcWhite);
67
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
68
+ -webkit-appearance: none;
69
+ }
70
+ .mfui-slider__range-input::-webkit-slider-runnable-track {
71
+ border: none;
72
+ background: transparent;
73
+ -webkit-box-shadow: none;
74
+ box-shadow: none;
75
+ -webkit-appearance: none;
76
+ }
77
+ .mfui-slider__range-input::-moz-range-track {
78
+ border: none;
79
+ background: transparent;
80
+ box-shadow: none;
81
+ -webkit-appearance: none;
82
+ }
83
+ .mfui-slider__range-input::-ms-track {
84
+ border: none;
85
+ background: transparent;
86
+ box-shadow: none;
87
+ -webkit-appearance: none;
88
+ }
89
+ .mfui-slider_disabled .mfui-slider__head {
90
+ color: var(--spbSky3);
91
+ }
92
+ .mfui-slider_disabled .mfui-slider__range-input {
93
+ background-image: -webkit-gradient(linear, left top, left bottom, from(var(--spbSky1)), to(var(--spbSky1)));
94
+ background-image: linear-gradient(var(--spbSky1), var(--spbSky1));
95
+ cursor: default;
96
+ }
97
+ .mfui-slider_disabled .mfui-slider__range-input::-webkit-slider-thumb {
98
+ width: 24px;
99
+ height: 24px;
100
+ border: none;
101
+ border-radius: 50%;
102
+ background-color: var(--stcWhite);
103
+ -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
104
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
105
+ -webkit-appearance: none;
106
+ background-color: var(--spbSky2);
107
+ }
108
+ .mfui-slider_disabled .mfui-slider__range-input::-moz-range-thumb {
109
+ width: 24px;
110
+ height: 24px;
111
+ border: none;
112
+ border-radius: 50%;
113
+ background-color: var(--stcWhite);
114
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
115
+ -webkit-appearance: none;
116
+ background-color: var(--spbSky2);
117
+ }
118
+ .mfui-slider_disabled .mfui-slider__range-input::-ms-thumb {
119
+ width: 24px;
120
+ height: 24px;
121
+ border: none;
122
+ border-radius: 50%;
123
+ background-color: var(--stcWhite);
124
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
125
+ -webkit-appearance: none;
126
+ background-color: var(--spbSky2);
127
+ }
@@ -0,0 +1,41 @@
1
+ import * as React from 'react';
2
+ import { DisplayValueType } from '../components/SliderDisplayValue/SliderDisplayValue';
3
+ import { ScaleType } from '../components/SliderScale/SliderScale';
4
+ import './Slider.less';
5
+ export interface ISlider {
6
+ /** Дополнительный класс корневого элемента */
7
+ className?: string;
8
+ /** Текущее значение */
9
+ value?: number;
10
+ /** Минимальное значение */
11
+ minValue: number;
12
+ /** Максимальное значение */
13
+ maxValue: number;
14
+ /** Лейбл */
15
+ label?: string;
16
+ /** Тип выводимого значения */
17
+ displayValueType?: DisplayValueType;
18
+ /** Единица измерения выводимого значения */
19
+ displayValueUnit?: string;
20
+ /** Переводит компонент в контролируемое состояние */
21
+ isControlled?: boolean;
22
+ /** Шаг */
23
+ step?: number;
24
+ /** Тип встроенной шкалы */
25
+ scale?: ScaleType;
26
+ /** Кастомная шкала */
27
+ customScale?: string[];
28
+ /** Переводит компонент в выключенное состояние */
29
+ disabled?: boolean;
30
+ /** Дополнительные data атрибуты к внутренним элементам */
31
+ dataAttrs?: {
32
+ root?: Record<string, string>;
33
+ input?: Record<string, string>;
34
+ rangeInput?: Record<string, string>;
35
+ scale?: Record<string, string>;
36
+ };
37
+ /** Обработчик изменения значения */
38
+ onChange?: (value: number) => void;
39
+ }
40
+ declare const Slider: React.FC<ISlider>;
41
+ export default Slider;
@@ -0,0 +1,126 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import "core-js/modules/es.object.values.js";
4
+ import * as React from 'react';
5
+ import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
6
+ import * as PropTypes from 'prop-types';
7
+ import SliderDisplayValue, { DisplayValue } from "../components/SliderDisplayValue/SliderDisplayValue";
8
+ import SliderScale, { Scale } from "../components/SliderScale/SliderScale";
9
+ import { getRangeValue, getTrackSize } from "../helpers";
10
+ import "./Slider.css";
11
+ var cn = cnCreate('mfui-slider');
12
+
13
+ var Slider = function Slider(_ref) {
14
+ var className = _ref.className,
15
+ label = _ref.label,
16
+ displayValueType = _ref.displayValueType,
17
+ displayValueUnit = _ref.displayValueUnit,
18
+ _ref$value = _ref.value,
19
+ outerRangeValue = _ref$value === void 0 ? 0 : _ref$value,
20
+ minValue = _ref.minValue,
21
+ maxValue = _ref.maxValue,
22
+ _ref$isControlled = _ref.isControlled,
23
+ isControlled = _ref$isControlled === void 0 ? false : _ref$isControlled,
24
+ _ref$step = _ref.step,
25
+ step = _ref$step === void 0 ? 1 : _ref$step,
26
+ scale = _ref.scale,
27
+ customScale = _ref.customScale,
28
+ _ref$disabled = _ref.disabled,
29
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
30
+ dataAttrs = _ref.dataAttrs,
31
+ onChange = _ref.onChange;
32
+ var defaultRangeValue = outerRangeValue || minValue;
33
+
34
+ var _React$useState = React.useState(null),
35
+ _React$useState2 = _slicedToArray(_React$useState, 2),
36
+ rawInputValue = _React$useState2[0],
37
+ setRawInputValue = _React$useState2[1];
38
+
39
+ var _React$useState3 = React.useState(defaultRangeValue),
40
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
41
+ innerRangeValue = _React$useState4[0],
42
+ setInnerRangeValue = _React$useState4[1];
43
+
44
+ var rangeValue = isControlled ? outerRangeValue : innerRangeValue;
45
+ var trackSize = getTrackSize(rangeValue, minValue, maxValue);
46
+ var showHead = !!label || !!displayValueType;
47
+
48
+ var handleInputChange = function handleInputChange(isRange) {
49
+ return function (e) {
50
+ var targetValue = e.target.value;
51
+ var newRangeValue = getRangeValue(targetValue, minValue, maxValue, step);
52
+ !isControlled && setInnerRangeValue(newRangeValue);
53
+ !isRange && setRawInputValue(targetValue);
54
+ onChange === null || onChange === void 0 ? void 0 : onChange(newRangeValue);
55
+ };
56
+ };
57
+
58
+ var handleInputBlur = function handleInputBlur() {
59
+ setRawInputValue(null);
60
+ };
61
+
62
+ return /*#__PURE__*/React.createElement("div", _extends({
63
+ className: cn({
64
+ disabled: disabled
65
+ }, [className])
66
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), showHead && /*#__PURE__*/React.createElement("div", {
67
+ className: cn('head')
68
+ }, !!label && /*#__PURE__*/React.createElement("div", {
69
+ className: cn('label')
70
+ }, label), !!displayValueType && /*#__PURE__*/React.createElement(SliderDisplayValue, {
71
+ className: cn('display-value'),
72
+ value: rawInputValue !== null && rawInputValue !== void 0 ? rawInputValue : rangeValue,
73
+ displayValueType: displayValueType,
74
+ displayValueUnit: displayValueUnit,
75
+ disabled: disabled,
76
+ onChange: handleInputChange(false),
77
+ onBlur: handleInputBlur,
78
+ dataAttrs: {
79
+ input: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.input
80
+ }
81
+ })), /*#__PURE__*/React.createElement("input", _extends({
82
+ className: cn('range-input'),
83
+ type: "range",
84
+ value: rangeValue,
85
+ min: minValue,
86
+ max: maxValue,
87
+ step: step,
88
+ onChange: handleInputChange(true),
89
+ disabled: disabled,
90
+ style: {
91
+ backgroundSize: "".concat(trackSize, "% 100%")
92
+ }
93
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.rangeInput))), (!!scale || !!customScale) && /*#__PURE__*/React.createElement(SliderScale, {
94
+ minValue: minValue,
95
+ maxValue: maxValue,
96
+ scale: scale,
97
+ customScale: customScale,
98
+ disabled: disabled,
99
+ dataAttrs: {
100
+ root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.scale
101
+ }
102
+ }));
103
+ };
104
+
105
+ Slider.propTypes = {
106
+ className: PropTypes.string,
107
+ value: PropTypes.number,
108
+ minValue: PropTypes.number.isRequired,
109
+ maxValue: PropTypes.number.isRequired,
110
+ label: PropTypes.string,
111
+ displayValueType: PropTypes.oneOf(Object.values(DisplayValue)),
112
+ displayValueUnit: PropTypes.string,
113
+ isControlled: PropTypes.bool,
114
+ step: PropTypes.number,
115
+ scale: PropTypes.oneOf(Object.values(Scale)),
116
+ customScale: PropTypes.arrayOf(PropTypes.string.isRequired),
117
+ disabled: PropTypes.bool,
118
+ onChange: PropTypes.func,
119
+ dataAttrs: PropTypes.shape({
120
+ root: PropTypes.objectOf(PropTypes.string.isRequired),
121
+ input: PropTypes.objectOf(PropTypes.string.isRequired),
122
+ rangeInput: PropTypes.objectOf(PropTypes.string.isRequired),
123
+ scale: PropTypes.objectOf(PropTypes.string.isRequired)
124
+ })
125
+ };
126
+ export default Slider;