@megafon/ui-core 5.8.0 → 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 (112) hide show
  1. package/CHANGELOG.md +19 -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/Sliders/Slider/Slider.css +127 -0
  24. package/dist/es/components/Sliders/Slider/Slider.d.ts +41 -0
  25. package/dist/es/components/Sliders/Slider/Slider.js +126 -0
  26. package/dist/es/components/Sliders/SliderRange/SliderRange.css +154 -0
  27. package/dist/es/components/Sliders/SliderRange/SliderRange.d.ts +49 -0
  28. package/dist/es/components/Sliders/SliderRange/SliderRange.js +227 -0
  29. package/dist/es/components/Sliders/SliderRange/helpers.d.ts +6 -0
  30. package/dist/es/components/Sliders/SliderRange/helpers.js +31 -0
  31. package/dist/es/components/Sliders/SliderRatio/SliderRatio.css +209 -0
  32. package/dist/es/components/Sliders/SliderRatio/SliderRatio.d.ts +42 -0
  33. package/dist/es/components/Sliders/SliderRatio/SliderRatio.js +206 -0
  34. package/dist/es/components/Sliders/SliderRatio/helpers.d.ts +15 -0
  35. package/dist/es/components/Sliders/SliderRatio/helpers.js +32 -0
  36. package/dist/es/components/Sliders/SliderRatio/i/thumb.png +0 -0
  37. package/dist/es/components/Sliders/SliderRatio/types.d.ts +8 -0
  38. package/dist/es/components/Sliders/SliderRatio/types.js +6 -0
  39. package/dist/es/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.css +83 -0
  40. package/dist/es/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.d.ts +23 -0
  41. package/dist/es/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.js +82 -0
  42. package/dist/es/components/Sliders/components/SliderScale/SliderScale.css +15 -0
  43. package/dist/es/components/Sliders/components/SliderScale/SliderScale.d.ts +19 -0
  44. package/dist/es/components/Sliders/components/SliderScale/SliderScale.js +51 -0
  45. package/dist/es/components/Sliders/components/SliderScale/helpers.d.ts +2 -0
  46. package/dist/es/components/Sliders/components/SliderScale/helpers.js +39 -0
  47. package/dist/es/components/Sliders/helpers.d.ts +2 -0
  48. package/dist/es/components/Sliders/helpers.js +33 -0
  49. package/dist/es/components/Switcher/Switcher.css +13 -0
  50. package/dist/es/components/Switcher/Switcher.d.ts +3 -1
  51. package/dist/es/components/Switcher/Switcher.js +5 -1
  52. package/dist/es/components/Tabs/Tabs.css +11 -3
  53. package/dist/es/components/TextField/i/textarea-resizer.svg +1 -0
  54. package/dist/es/index.d.ts +9 -2
  55. package/dist/es/index.js +9 -2
  56. package/dist/lib/components/{Chip → Chips}/Chip.css +53 -32
  57. package/dist/lib/components/Chips/Chip.d.ts +74 -0
  58. package/dist/lib/components/{Chip → Chips}/Chip.js +49 -7
  59. package/dist/lib/components/Chips/Chips.css +19 -0
  60. package/dist/lib/components/Chips/Chips.d.ts +27 -0
  61. package/dist/lib/components/Chips/Chips.js +159 -0
  62. package/dist/lib/components/Chips/components/ChipsDropdown.css +106 -0
  63. package/dist/lib/components/Chips/components/ChipsDropdown.d.ts +16 -0
  64. package/dist/lib/components/Chips/components/ChipsDropdown.js +131 -0
  65. package/dist/lib/components/ContentView/ContentView.css +61 -0
  66. package/dist/lib/components/ContentView/ContentView.d.ts +49 -0
  67. package/dist/lib/components/ContentView/ContentView.js +133 -0
  68. package/dist/lib/components/ContentView/i/alarm.png +0 -0
  69. package/dist/lib/components/ContentView/i/empty.png +0 -0
  70. package/dist/lib/components/ContentView/i/error.png +0 -0
  71. package/dist/lib/components/ContentView/i/fail.png +0 -0
  72. package/dist/lib/components/ContentView/i/searchNoResult.png +0 -0
  73. package/dist/lib/components/ContentView/i/submit.png +0 -0
  74. package/dist/lib/components/ContentView/i/success.png +0 -0
  75. package/dist/lib/components/ContentView/i/update.png +0 -0
  76. package/dist/lib/components/ContentView/i/waiting.png +0 -0
  77. package/dist/lib/components/Sliders/Slider/Slider.css +127 -0
  78. package/dist/lib/components/Sliders/Slider/Slider.d.ts +41 -0
  79. package/dist/lib/components/Sliders/Slider/Slider.js +150 -0
  80. package/dist/lib/components/Sliders/SliderRange/SliderRange.css +154 -0
  81. package/dist/lib/components/Sliders/SliderRange/SliderRange.d.ts +49 -0
  82. package/dist/lib/components/Sliders/SliderRange/SliderRange.js +252 -0
  83. package/dist/lib/components/Sliders/SliderRange/helpers.d.ts +6 -0
  84. package/dist/lib/components/Sliders/SliderRange/helpers.js +48 -0
  85. package/dist/lib/components/Sliders/SliderRatio/SliderRatio.css +209 -0
  86. package/dist/lib/components/Sliders/SliderRatio/SliderRatio.d.ts +42 -0
  87. package/dist/lib/components/Sliders/SliderRatio/SliderRatio.js +237 -0
  88. package/dist/lib/components/Sliders/SliderRatio/helpers.d.ts +15 -0
  89. package/dist/lib/components/Sliders/SliderRatio/helpers.js +58 -0
  90. package/dist/lib/components/Sliders/SliderRatio/i/thumb.png +0 -0
  91. package/dist/lib/components/Sliders/SliderRatio/types.d.ts +8 -0
  92. package/dist/lib/components/Sliders/SliderRatio/types.js +13 -0
  93. package/dist/lib/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.css +83 -0
  94. package/dist/lib/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.d.ts +23 -0
  95. package/dist/lib/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.js +104 -0
  96. package/dist/lib/components/Sliders/components/SliderScale/SliderScale.css +15 -0
  97. package/dist/lib/components/Sliders/components/SliderScale/SliderScale.d.ts +19 -0
  98. package/dist/lib/components/Sliders/components/SliderScale/SliderScale.js +74 -0
  99. package/dist/lib/components/Sliders/components/SliderScale/helpers.d.ts +2 -0
  100. package/dist/lib/components/Sliders/components/SliderScale/helpers.js +60 -0
  101. package/dist/lib/components/Sliders/helpers.d.ts +2 -0
  102. package/dist/lib/components/Sliders/helpers.js +47 -0
  103. package/dist/lib/components/Switcher/Switcher.css +13 -0
  104. package/dist/lib/components/Switcher/Switcher.d.ts +3 -1
  105. package/dist/lib/components/Switcher/Switcher.js +5 -1
  106. package/dist/lib/components/Tabs/Tabs.css +11 -3
  107. package/dist/lib/components/TextField/i/textarea-resizer.svg +1 -0
  108. package/dist/lib/index.d.ts +9 -2
  109. package/dist/lib/index.js +65 -9
  110. package/package.json +5 -4
  111. package/dist/es/components/Chip/Chip.d.ts +0 -36
  112. package/dist/lib/components/Chip/Chip.d.ts +0 -36
@@ -0,0 +1,42 @@
1
+ import * as React from 'react';
2
+ import { DisplayValueType } from '../components/SliderDisplayValue/SliderDisplayValue';
3
+ import { ValueType } from './types';
4
+ import './SliderRatio.less';
5
+ export interface ISliderRatio {
6
+ /** Дополнительный класс корневого элемента */
7
+ className?: string;
8
+ /** Список значений */
9
+ values: ValueType[];
10
+ /** Индекс текущего значения */
11
+ index?: number;
12
+ /** Лейбл */
13
+ label?: string;
14
+ /** Тип выводимого значения */
15
+ displayValueType?: DisplayValueType;
16
+ /** Префикс для выводимого значения слева */
17
+ displayLeftValuePrefix?: string;
18
+ /** Префикс для выводимого значения справа */
19
+ displayRightValuePrefix?: string;
20
+ /** Единица измерения выводимого значения слева */
21
+ displayLeftValueUnit?: string;
22
+ /** Единица измерения выводимого значения справа */
23
+ displayRightValueUnit?: string;
24
+ /** Переводит компонент в контролируемое состояние */
25
+ isControlled?: boolean;
26
+ /** Переводит компонент в выключенное состояние */
27
+ disabled?: boolean;
28
+ /** Включает отображение шкалы */
29
+ showScale?: boolean;
30
+ /** Дополнительные data атрибуты к внутренним элементам */
31
+ dataAttrs?: {
32
+ root?: Record<string, string>;
33
+ leftInput?: Record<string, string>;
34
+ rightInput?: Record<string, string>;
35
+ rangeInput?: Record<string, string>;
36
+ scale?: Record<string, string>;
37
+ };
38
+ /** Обработчик изменения значения */
39
+ onChange?: (index: number) => void;
40
+ }
41
+ declare const SliderRatio: React.FC<ISliderRatio>;
42
+ export default SliderRatio;
@@ -0,0 +1,206 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import "core-js/modules/es.array.iterator.js";
4
+ import "core-js/modules/es.object.to-string.js";
5
+ import "core-js/modules/web.dom-collections.iterator.js";
6
+ import "core-js/modules/es.number.constructor.js";
7
+ import "core-js/modules/es.array.find-index.js";
8
+ import "core-js/modules/es.array.map.js";
9
+ import "core-js/modules/es.object.values.js";
10
+ import * as React from 'react';
11
+ import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
12
+ import * as PropTypes from 'prop-types';
13
+ import SliderDisplayValue, { DisplayValue } from "../components/SliderDisplayValue/SliderDisplayValue";
14
+ import { getTrackSize } from "../helpers";
15
+ import { findClosestValue, getIndexByRangeValue, getRangeStepValue, inputReducer, getRangeValueByPageX } from "./helpers";
16
+ import { KeyValueEnum } from "./types";
17
+ import "./SliderRatio.css";
18
+ var THUMB_SIZE = 24;
19
+ var MIN_RANGE_VALUE = 0;
20
+ var MAX_RANGE_VALUE = 100;
21
+ var cn = cnCreate('mfui-slider-ratio');
22
+
23
+ var SliderRatio = function SliderRatio(_ref) {
24
+ var className = _ref.className,
25
+ label = _ref.label,
26
+ _ref$displayValueType = _ref.displayValueType,
27
+ displayValueType = _ref$displayValueType === void 0 ? DisplayValue.LINE : _ref$displayValueType,
28
+ displayLeftValuePrefix = _ref.displayLeftValuePrefix,
29
+ displayRightValuePrefix = _ref.displayRightValuePrefix,
30
+ displayLeftValueUnit = _ref.displayLeftValueUnit,
31
+ displayRightValueUnit = _ref.displayRightValueUnit,
32
+ values = _ref.values,
33
+ _ref$index = _ref.index,
34
+ outerIndex = _ref$index === void 0 ? 0 : _ref$index,
35
+ _ref$isControlled = _ref.isControlled,
36
+ isControlled = _ref$isControlled === void 0 ? false : _ref$isControlled,
37
+ _ref$disabled = _ref.disabled,
38
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
39
+ _ref$showScale = _ref.showScale,
40
+ showScale = _ref$showScale === void 0 ? false : _ref$showScale,
41
+ dataAttrs = _ref.dataAttrs,
42
+ onChange = _ref.onChange;
43
+
44
+ var _a, _b;
45
+
46
+ var stepCount = values.length - 1;
47
+
48
+ var _React$useState = React.useState(outerIndex),
49
+ _React$useState2 = _slicedToArray(_React$useState, 2),
50
+ innerIndex = _React$useState2[0],
51
+ setInnerIndex = _React$useState2[1];
52
+
53
+ var _React$useReducer = React.useReducer(inputReducer, {
54
+ left: null,
55
+ right: null
56
+ }),
57
+ _React$useReducer2 = _slicedToArray(_React$useReducer, 2),
58
+ rawInputValue = _React$useReducer2[0],
59
+ dispatchRawInputValue = _React$useReducer2[1];
60
+
61
+ var _React$useState3 = React.useState(null),
62
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
63
+ rawRangeValue = _React$useState4[0],
64
+ setRawRangeValue = _React$useState4[1];
65
+
66
+ var currentIndex = isControlled ? outerIndex : innerIndex;
67
+ var rangeValue = rawRangeValue !== null && rawRangeValue !== void 0 ? rawRangeValue : getRangeStepValue(stepCount, currentIndex);
68
+ var leftInputValue = (_a = rawInputValue.left) !== null && _a !== void 0 ? _a : values[currentIndex].leftValue;
69
+ var rightInputValue = (_b = rawInputValue.right) !== null && _b !== void 0 ? _b : values[currentIndex].rightValue;
70
+ var trackSize = getTrackSize(rangeValue, MIN_RANGE_VALUE, MAX_RANGE_VALUE);
71
+
72
+ var handleInputChange = function handleInputChange(key) {
73
+ return function (e) {
74
+ var targetValue = e.target.value;
75
+ var closestValue = findClosestValue(values, Number(targetValue), key);
76
+ var newIndex = values.findIndex(function (value) {
77
+ return value[key] === closestValue;
78
+ });
79
+ setRawRangeValue(null);
80
+ !isControlled && setInnerIndex(newIndex);
81
+ dispatchRawInputValue({
82
+ type: key,
83
+ value: targetValue
84
+ });
85
+ };
86
+ };
87
+
88
+ var handleRangeInputChange = function handleRangeInputChange(e) {
89
+ setRawRangeValue(Number(e.target.value));
90
+ };
91
+
92
+ var handleRangeInputPointerUp = function handleRangeInputPointerUp() {
93
+ var newIndex = getIndexByRangeValue(rangeValue, stepCount);
94
+ setRawRangeValue(null);
95
+ !isControlled && setInnerIndex(newIndex);
96
+ newIndex !== currentIndex && (onChange === null || onChange === void 0 ? void 0 : onChange(newIndex));
97
+ };
98
+
99
+ var handleRangeTrackClick = function handleRangeTrackClick(e) {
100
+ var currentTarget = e.currentTarget;
101
+ var newRangeValue = getRangeValueByPageX(e.pageX, currentTarget, THUMB_SIZE);
102
+ var newIndex = getIndexByRangeValue(newRangeValue, stepCount);
103
+ setRawRangeValue(null);
104
+ !isControlled && setInnerIndex(newIndex);
105
+ newIndex !== currentIndex && (onChange === null || onChange === void 0 ? void 0 : onChange(newIndex));
106
+ };
107
+
108
+ var handleInputBlur = function handleInputBlur(key) {
109
+ return function () {
110
+ onChange === null || onChange === void 0 ? void 0 : onChange(currentIndex);
111
+ dispatchRawInputValue({
112
+ type: key,
113
+ value: null
114
+ });
115
+ };
116
+ };
117
+
118
+ return /*#__PURE__*/React.createElement("div", _extends({
119
+ className: cn({
120
+ disabled: disabled
121
+ }, [className])
122
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
123
+ style: {
124
+ '--thumbSize': "".concat(THUMB_SIZE, "px")
125
+ }
126
+ }), /*#__PURE__*/React.createElement("div", {
127
+ className: cn('head')
128
+ }, !!label && /*#__PURE__*/React.createElement("div", {
129
+ className: cn('label')
130
+ }, label), /*#__PURE__*/React.createElement("div", {
131
+ className: cn('display-values')
132
+ }, /*#__PURE__*/React.createElement(SliderDisplayValue, {
133
+ value: leftInputValue,
134
+ displayValueType: displayValueType,
135
+ displayValuePrefix: displayLeftValuePrefix,
136
+ displayValueUnit: displayLeftValueUnit,
137
+ disabled: disabled,
138
+ onChange: handleInputChange(KeyValueEnum.LEFT),
139
+ onBlur: handleInputBlur(KeyValueEnum.LEFT),
140
+ dataAttrs: {
141
+ input: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.leftInput
142
+ }
143
+ }), /*#__PURE__*/React.createElement(SliderDisplayValue, {
144
+ value: rightInputValue,
145
+ displayValueType: displayValueType,
146
+ displayValuePrefix: displayRightValuePrefix,
147
+ displayValueUnit: displayRightValueUnit,
148
+ disabled: disabled,
149
+ onChange: handleInputChange(KeyValueEnum.RIGHT),
150
+ onBlur: handleInputBlur(KeyValueEnum.RIGHT),
151
+ dataAttrs: {
152
+ input: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.rightInput
153
+ }
154
+ }))), /*#__PURE__*/React.createElement("div", {
155
+ className: cn('range-container')
156
+ }, /*#__PURE__*/React.createElement("input", _extends({
157
+ className: cn('range-input'),
158
+ type: "range",
159
+ value: rangeValue,
160
+ min: MIN_RANGE_VALUE,
161
+ max: MAX_RANGE_VALUE,
162
+ onChange: handleRangeInputChange,
163
+ onPointerUp: handleRangeInputPointerUp,
164
+ disabled: disabled,
165
+ style: {
166
+ backgroundSize: "".concat(trackSize, "% 100%")
167
+ }
168
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.rangeInput))), /*#__PURE__*/React.createElement("div", {
169
+ className: cn('range-track'),
170
+ onClick: disabled ? undefined : handleRangeTrackClick
171
+ }), showScale && /*#__PURE__*/React.createElement("div", _extends({
172
+ className: cn('scale')
173
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.scale)), values.map(function (_, i) {
174
+ return /*#__PURE__*/React.createElement("div", {
175
+ className: cn('scale-item'),
176
+ key: i
177
+ });
178
+ }))));
179
+ };
180
+
181
+ SliderRatio.propTypes = {
182
+ className: PropTypes.string,
183
+ values: PropTypes.arrayOf(PropTypes.shape({
184
+ leftValue: PropTypes.number.isRequired,
185
+ rightValue: PropTypes.number.isRequired
186
+ }).isRequired).isRequired,
187
+ index: PropTypes.number,
188
+ label: PropTypes.string,
189
+ displayValueType: PropTypes.oneOf(Object.values(DisplayValue)),
190
+ displayLeftValuePrefix: PropTypes.string,
191
+ displayRightValuePrefix: PropTypes.string,
192
+ displayLeftValueUnit: PropTypes.string,
193
+ displayRightValueUnit: PropTypes.string,
194
+ isControlled: PropTypes.bool,
195
+ disabled: PropTypes.bool,
196
+ showScale: PropTypes.bool,
197
+ dataAttrs: PropTypes.shape({
198
+ root: PropTypes.objectOf(PropTypes.string.isRequired),
199
+ leftInput: PropTypes.objectOf(PropTypes.string.isRequired),
200
+ rightInput: PropTypes.objectOf(PropTypes.string.isRequired),
201
+ rangeInput: PropTypes.objectOf(PropTypes.string.isRequired),
202
+ scale: PropTypes.objectOf(PropTypes.string.isRequired)
203
+ }),
204
+ onChange: PropTypes.func
205
+ };
206
+ export default SliderRatio;
@@ -0,0 +1,15 @@
1
+ import { KeyValueEnum, ValueType } from './types';
2
+ export declare const inputReducer: (state: {
3
+ left: string | null;
4
+ right: string | null;
5
+ }, action: {
6
+ type: KeyValueEnum;
7
+ value: string | null;
8
+ }) => {
9
+ left: string | null;
10
+ right: string | null;
11
+ };
12
+ export declare const getRangeValueByPageX: (pageX: number, trackInnerNode: HTMLDivElement, thumbSize: number) => number;
13
+ export declare const getRangeStepValue: (valuesCount: number, index: number) => number;
14
+ export declare const getIndexByRangeValue: (rangeValue: number, valuesCount: number) => number;
15
+ export declare const findClosestValue: (values: ValueType[], target: number, key: KeyValueEnum) => number;
@@ -0,0 +1,32 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import "core-js/modules/es.array.reduce.js";
3
+ import { KeyValueEnum } from "./types";
4
+ export var inputReducer = function inputReducer(state, action) {
5
+ if (action.type === KeyValueEnum.LEFT) {
6
+ return _extends(_extends({}, state), {
7
+ left: action.value
8
+ });
9
+ }
10
+
11
+ return _extends(_extends({}, state), {
12
+ right: action.value
13
+ });
14
+ };
15
+ export var getRangeValueByPageX = function getRangeValueByPageX(pageX, trackInnerNode, thumbSize) {
16
+ var clickPosition = pageX - (trackInnerNode.getBoundingClientRect().left + thumbSize / 2);
17
+ var clickPositionPercent = clickPosition * 100 / (trackInnerNode.offsetWidth - thumbSize);
18
+ return Math.round(clickPositionPercent);
19
+ };
20
+ export var getRangeStepValue = function getRangeStepValue(valuesCount, index) {
21
+ var step = 100 / valuesCount;
22
+ return step * index;
23
+ };
24
+ export var getIndexByRangeValue = function getIndexByRangeValue(rangeValue, valuesCount) {
25
+ var step = 100 / valuesCount;
26
+ return Math.round(rangeValue / step);
27
+ };
28
+ export var findClosestValue = function findClosestValue(values, target, key) {
29
+ return values.reduce(function (closest, value) {
30
+ return Math.abs(value[key] - target) > Math.abs(closest - target) ? closest : value[key];
31
+ }, values[0][key]);
32
+ };
@@ -0,0 +1,8 @@
1
+ export declare enum KeyValueEnum {
2
+ LEFT = "leftValue",
3
+ RIGHT = "rightValue"
4
+ }
5
+ export declare type ValueType = {
6
+ [KeyValueEnum.LEFT]: number;
7
+ [KeyValueEnum.RIGHT]: number;
8
+ };
@@ -0,0 +1,6 @@
1
+ export var KeyValueEnum;
2
+
3
+ (function (KeyValueEnum) {
4
+ KeyValueEnum["LEFT"] = "leftValue";
5
+ KeyValueEnum["RIGHT"] = "rightValue";
6
+ })(KeyValueEnum || (KeyValueEnum = {}));
@@ -0,0 +1,83 @@
1
+ .mfui-slider-display-value {
2
+ display: -webkit-box;
3
+ display: -ms-flexbox;
4
+ display: flex;
5
+ max-width: 45%;
6
+ color: var(--content);
7
+ font-weight: 400;
8
+ background-color: var(--base);
9
+ }
10
+ .mfui-slider-display-value_interactive {
11
+ -webkit-box-align: center;
12
+ -ms-flex-align: center;
13
+ align-items: center;
14
+ min-width: 90px;
15
+ padding: 7px 16px;
16
+ border: 1px solid var(--spbSky2);
17
+ border-radius: 12px;
18
+ overflow: hidden;
19
+ cursor: text;
20
+ }
21
+ .mfui-slider-display-value_interactive.mfui-slider-display-value:hover,
22
+ .mfui-slider-display-value_interactive.mfui-slider-display-value_focus {
23
+ border-color: var(--content);
24
+ }
25
+ .mfui-slider-display-value_disabled {
26
+ border-color: var(--spbSky0);
27
+ color: var(--spbSky3);
28
+ background-color: var(--spbSky0);
29
+ cursor: default;
30
+ }
31
+ .mfui-slider-display-value_disabled.mfui-slider-display-value_interactive:hover {
32
+ border-color: var(--spbSky0);
33
+ }
34
+ .mfui-slider-display-value__box {
35
+ overflow: hidden;
36
+ }
37
+ .mfui-slider-display-value__line {
38
+ font-weight: 500;
39
+ }
40
+ .mfui-slider-display-value__unit {
41
+ margin-left: 4px;
42
+ }
43
+ .mfui-slider-display-value_interactive .mfui-slider-display-value__line {
44
+ height: 0;
45
+ visibility: hidden;
46
+ opacity: 0;
47
+ }
48
+ .mfui-slider-display-value__prefix {
49
+ margin-right: 4px;
50
+ color: var(--spbSky3);
51
+ }
52
+ .mfui-slider-display-value__input {
53
+ display: block;
54
+ width: 10px;
55
+ min-width: 100%;
56
+ margin: 0;
57
+ padding: 0;
58
+ border: none;
59
+ border-radius: 0;
60
+ color: inherit;
61
+ font-weight: 400;
62
+ background-color: transparent;
63
+ outline: none;
64
+ -webkit-box-shadow: none;
65
+ box-shadow: none;
66
+ cursor: text;
67
+ opacity: 1;
68
+ -webkit-appearance: none;
69
+ -moz-appearance: none;
70
+ appearance: none;
71
+ caret-color: var(--brandGreen);
72
+ font-family: inherit;
73
+ font-size: 15px;
74
+ line-height: 24px;
75
+ }
76
+ .mfui-slider-display-value__input::-webkit-outer-spin-button,
77
+ .mfui-slider-display-value__input::-webkit-inner-spin-button {
78
+ margin: 0;
79
+ -webkit-appearance: none;
80
+ }
81
+ .mfui-slider-display-value__input[type='number'] {
82
+ -moz-appearance: textfield;
83
+ }
@@ -0,0 +1,23 @@
1
+ import * as React from 'react';
2
+ import './SliderDisplayValue.less';
3
+ export declare const DisplayValue: {
4
+ readonly LINE: "line";
5
+ readonly INPUT: "input";
6
+ };
7
+ export declare type DisplayValueType = typeof DisplayValue[keyof typeof DisplayValue];
8
+ export interface ISliderDisplayValue {
9
+ className?: string;
10
+ value: string | number;
11
+ displayValueType?: DisplayValueType;
12
+ displayValuePrefix?: string;
13
+ displayValueUnit?: string;
14
+ disabled?: boolean;
15
+ dataAttrs?: {
16
+ root?: Record<string, string>;
17
+ input?: Record<string, string>;
18
+ };
19
+ onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
20
+ onBlur: () => void;
21
+ }
22
+ declare const SliderDisplayValue: React.FC<ISliderDisplayValue>;
23
+ export default SliderDisplayValue;
@@ -0,0 +1,82 @@
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.css";
8
+ export var DisplayValue = {
9
+ LINE: 'line',
10
+ INPUT: 'input'
11
+ };
12
+ var cn = cnCreate('mfui-slider-display-value');
13
+
14
+ var SliderDisplayValue = function SliderDisplayValue(_ref) {
15
+ var className = _ref.className,
16
+ value = _ref.value,
17
+ displayValueType = _ref.displayValueType,
18
+ displayValuePrefix = _ref.displayValuePrefix,
19
+ displayValueUnit = _ref.displayValueUnit,
20
+ disabled = _ref.disabled,
21
+ dataAttrs = _ref.dataAttrs,
22
+ onChange = _ref.onChange,
23
+ onBlur = _ref.onBlur;
24
+
25
+ var _React$useState = React.useState(false),
26
+ _React$useState2 = _slicedToArray(_React$useState, 2),
27
+ isFocused = _React$useState2[0],
28
+ setIsFocused = _React$useState2[1];
29
+
30
+ var isDisplayValueInput = displayValueType === DisplayValue.INPUT;
31
+
32
+ var handleInputBlur = function handleInputBlur() {
33
+ setIsFocused(false);
34
+ onBlur();
35
+ };
36
+
37
+ var handleInputFocus = function handleInputFocus() {
38
+ setIsFocused(true);
39
+ };
40
+
41
+ return (
42
+ /*#__PURE__*/
43
+ // eslint-disable-next-line jsx-a11y/label-has-associated-control
44
+ React.createElement("label", _extends({
45
+ className: cn({
46
+ interactive: isDisplayValueInput,
47
+ focus: isFocused,
48
+ disabled: disabled
49
+ }, [className])
50
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), !!displayValuePrefix && /*#__PURE__*/React.createElement("div", {
51
+ className: cn('prefix')
52
+ }, displayValuePrefix), /*#__PURE__*/React.createElement("div", {
53
+ className: cn('box')
54
+ }, isDisplayValueInput && /*#__PURE__*/React.createElement("input", _extends({
55
+ className: cn('input'),
56
+ type: "number",
57
+ value: value,
58
+ onChange: onChange,
59
+ onBlur: handleInputBlur,
60
+ onFocus: handleInputFocus,
61
+ disabled: disabled
62
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.input))), /*#__PURE__*/React.createElement("div", {
63
+ className: cn('line')
64
+ }, value)), !!displayValueUnit && /*#__PURE__*/React.createElement("div", {
65
+ className: cn('unit')
66
+ }, displayValueUnit))
67
+ );
68
+ };
69
+
70
+ SliderDisplayValue.propTypes = {
71
+ value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
72
+ displayValueType: PropTypes.oneOf(Object.values(DisplayValue)),
73
+ displayValueUnit: PropTypes.string,
74
+ disabled: PropTypes.bool,
75
+ onChange: PropTypes.func.isRequired,
76
+ onBlur: PropTypes.func.isRequired,
77
+ dataAttrs: PropTypes.shape({
78
+ root: PropTypes.objectOf(PropTypes.string.isRequired),
79
+ input: PropTypes.objectOf(PropTypes.string.isRequired)
80
+ })
81
+ };
82
+ export default SliderDisplayValue;
@@ -0,0 +1,15 @@
1
+ .mfui-slider-scale {
2
+ font-size: 12px;
3
+ line-height: 18px;
4
+ position: relative;
5
+ height: 18px;
6
+ margin: 8px 12px 0 12px;
7
+ }
8
+ .mfui-slider-scale_disabled {
9
+ color: var(--spbSky3);
10
+ }
11
+ .mfui-slider-scale__item {
12
+ position: absolute;
13
+ translate: -50% 0;
14
+ white-space: nowrap;
15
+ }
@@ -0,0 +1,19 @@
1
+ import * as React from 'react';
2
+ import './SliderScale.less';
3
+ export declare const Scale: {
4
+ readonly BASE: "base";
5
+ readonly INTERVAL: "interval";
6
+ };
7
+ export declare type ScaleType = typeof Scale[keyof typeof Scale];
8
+ export interface ISliderScale {
9
+ minValue: number;
10
+ maxValue: number;
11
+ scale?: ScaleType;
12
+ customScale?: string[];
13
+ disabled?: boolean;
14
+ dataAttrs?: {
15
+ root?: Record<string, string>;
16
+ };
17
+ }
18
+ declare const SliderScale: React.FC<ISliderScale>;
19
+ export default SliderScale;
@@ -0,0 +1,51 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import "core-js/modules/es.array.map.js";
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 { getIntervalScale } from "./helpers";
8
+ import "./SliderScale.css";
9
+ export var Scale = {
10
+ BASE: 'base',
11
+ INTERVAL: 'interval'
12
+ };
13
+ var cn = cnCreate('mfui-slider-scale');
14
+
15
+ var SliderScale = function SliderScale(_ref) {
16
+ var minValue = _ref.minValue,
17
+ maxValue = _ref.maxValue,
18
+ _ref$scale = _ref.scale,
19
+ scale = _ref$scale === void 0 ? 'base' : _ref$scale,
20
+ customScale = _ref.customScale,
21
+ disabled = _ref.disabled,
22
+ dataAttrs = _ref.dataAttrs;
23
+ var builtInScale = scale === Scale.BASE ? [minValue, maxValue] : getIntervalScale(minValue, maxValue);
24
+ var currentScale = customScale || builtInScale;
25
+ var leftOffset = 100 / (currentScale.length - 1);
26
+ return /*#__PURE__*/React.createElement("div", _extends({
27
+ className: cn({
28
+ disabled: disabled
29
+ })
30
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), currentScale.map(function (item, i) {
31
+ return /*#__PURE__*/React.createElement("div", {
32
+ className: cn('item'),
33
+ style: {
34
+ left: "calc(".concat(leftOffset * i, "%)")
35
+ },
36
+ key: i
37
+ }, item);
38
+ }));
39
+ };
40
+
41
+ SliderScale.propTypes = {
42
+ minValue: PropTypes.number.isRequired,
43
+ maxValue: PropTypes.number.isRequired,
44
+ scale: PropTypes.oneOf(Object.values(Scale)),
45
+ customScale: PropTypes.arrayOf(PropTypes.string.isRequired),
46
+ disabled: PropTypes.bool,
47
+ dataAttrs: PropTypes.shape({
48
+ root: PropTypes.objectOf(PropTypes.string.isRequired)
49
+ })
50
+ };
51
+ export default SliderScale;
@@ -0,0 +1,2 @@
1
+ export declare const getIntervalScale: (minValue: number, maxValue: number) => number[];
2
+ export default getIntervalScale;
@@ -0,0 +1,39 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import "core-js/modules/es.array.from.js";
3
+ import "core-js/modules/es.string.iterator.js";
4
+ import "core-js/modules/es.array.iterator.js";
5
+ import "core-js/modules/es.object.to-string.js";
6
+ import "core-js/modules/web.dom-collections.iterator.js";
7
+ import "core-js/modules/es.array.reduce.js";
8
+ import "core-js/modules/es.array.concat.js";
9
+ var SCALE_MAX_LENGTH = 10;
10
+ var SCALE_SEGMENT_COUNT = 9;
11
+ var SCALE_WITHOUT_EDGE_LENGTH = SCALE_MAX_LENGTH - 2;
12
+ export var getIntervalScale = function getIntervalScale(minValue, maxValue) {
13
+ var valueDifference = maxValue - minValue;
14
+
15
+ if (valueDifference < SCALE_MAX_LENGTH) {
16
+ return Array.from({
17
+ length: valueDifference + 1
18
+ }, function (_, i) {
19
+ return minValue + i;
20
+ });
21
+ }
22
+
23
+ var interval = valueDifference / SCALE_SEGMENT_COUNT;
24
+ var midItems = Array.from(Array(SCALE_WITHOUT_EDGE_LENGTH).keys());
25
+
26
+ var _midItems$reduce = midItems.reduce(function (acc) {
27
+ return {
28
+ current: acc.current + interval,
29
+ items: [].concat(_toConsumableArray(acc.items), [Math.round(acc.current + interval)])
30
+ };
31
+ }, {
32
+ current: minValue,
33
+ items: []
34
+ }),
35
+ items = _midItems$reduce.items;
36
+
37
+ return [minValue].concat(_toConsumableArray(items), [maxValue]);
38
+ };
39
+ export default getIntervalScale;
@@ -0,0 +1,2 @@
1
+ export declare const getRangeValue: (value: string | number, minValue: number, maxValue: number, step: number) => number;
2
+ export declare const getTrackSize: (value: number | undefined, minValue: number, maxValue: number) => number;
@@ -0,0 +1,33 @@
1
+ import "core-js/modules/es.number.constructor.js";
2
+ import "core-js/modules/es.number.to-fixed.js";
3
+ export var getRangeValue = function getRangeValue(value, minValue, maxValue, step) {
4
+ var numberValue = Number(value);
5
+
6
+ if (numberValue < minValue) {
7
+ return minValue;
8
+ }
9
+
10
+ if (numberValue > maxValue) {
11
+ return maxValue;
12
+ }
13
+
14
+ var valueDifference = maxValue - minValue;
15
+ var expectedStepCount = valueDifference / step;
16
+ var receivedStepCount = valueDifference / numberValue;
17
+ var stepPosition = Math.round(expectedStepCount / receivedStepCount);
18
+ return step * stepPosition;
19
+ };
20
+ export var getTrackSize = function getTrackSize() {
21
+ var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
22
+ var minValue = arguments.length > 1 ? arguments[1] : undefined;
23
+ var maxValue = arguments.length > 2 ? arguments[2] : undefined;
24
+ var valueDifference = maxValue - minValue;
25
+
26
+ if (valueDifference <= 0) {
27
+ return 0;
28
+ }
29
+
30
+ var finalValue = value - minValue;
31
+ var percent = finalValue * 100 / valueDifference;
32
+ return Number(percent.toFixed(3));
33
+ };