@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,154 @@
1
+ .mfui-slider-range {
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-range__head {
11
+ font-size: 15px;
12
+ line-height: 24px;
13
+ font-weight: 500;
14
+ margin-bottom: 8px;
15
+ }
16
+ .mfui-slider-range__display-values {
17
+ display: -webkit-box;
18
+ display: -ms-flexbox;
19
+ display: flex;
20
+ -webkit-box-pack: justify;
21
+ -ms-flex-pack: justify;
22
+ justify-content: space-between;
23
+ width: 100%;
24
+ margin-top: 8px;
25
+ }
26
+ .mfui-slider-range__range-container {
27
+ position: relative;
28
+ height: 12px;
29
+ margin: 6px 0;
30
+ }
31
+ .mfui-slider-range__range-input {
32
+ position: absolute;
33
+ top: 50%;
34
+ width: 100%;
35
+ height: 0;
36
+ margin: 0;
37
+ border: none;
38
+ background: none;
39
+ outline: none;
40
+ cursor: pointer;
41
+ -webkit-appearance: none;
42
+ -moz-appearance: none;
43
+ appearance: none;
44
+ pointer-events: none;
45
+ }
46
+ .mfui-slider-range__range-input_left {
47
+ z-index: 1;
48
+ }
49
+ .mfui-slider-range__range-input_left.mfui-slider-range__range-input_over {
50
+ z-index: 3;
51
+ }
52
+ .mfui-slider-range__range-input_right {
53
+ z-index: 2;
54
+ }
55
+ .mfui-slider-range__range-input:focus {
56
+ outline: none;
57
+ }
58
+ .mfui-slider-range__range-input::-webkit-slider-thumb {
59
+ width: var(--thumbSize);
60
+ height: var(--thumbSize);
61
+ border: none;
62
+ border-radius: 50%;
63
+ background-color: var(--stcWhite);
64
+ -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
65
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
66
+ -webkit-appearance: none;
67
+ pointer-events: auto;
68
+ }
69
+ .mfui-slider-range__range-input::-moz-range-thumb {
70
+ width: var(--thumbSize);
71
+ height: var(--thumbSize);
72
+ border: none;
73
+ border-radius: 50%;
74
+ background-color: var(--stcWhite);
75
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
76
+ -webkit-appearance: none;
77
+ pointer-events: auto;
78
+ }
79
+ .mfui-slider-range__range-input::-ms-thumb {
80
+ width: var(--thumbSize);
81
+ height: var(--thumbSize);
82
+ border: none;
83
+ border-radius: 50%;
84
+ background-color: var(--stcWhite);
85
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
86
+ -webkit-appearance: none;
87
+ pointer-events: auto;
88
+ }
89
+ .mfui-slider-range__range-track {
90
+ position: absolute;
91
+ right: 0;
92
+ left: 0;
93
+ z-index: 0;
94
+ height: 100%;
95
+ padding: 0 12px;
96
+ border-radius: 100px;
97
+ background-color: var(--spbSky0);
98
+ }
99
+ .mfui-slider-range__range-track-inner {
100
+ position: relative;
101
+ width: 100%;
102
+ height: 100%;
103
+ }
104
+ .mfui-slider-range__range-track-segment {
105
+ position: absolute;
106
+ height: 100%;
107
+ border-radius: 100px;
108
+ background-color: var(--brandGreen);
109
+ }
110
+ .mfui-slider-range_disabled .mfui-slider-range__head {
111
+ color: var(--spbSky3);
112
+ }
113
+ .mfui-slider-range_disabled .mfui-slider-range__range-input {
114
+ background-image: -webkit-gradient(linear, left top, left bottom, from(var(--spbSky1)), to(var(--spbSky1)));
115
+ background-image: linear-gradient(var(--spbSky1), var(--spbSky1));
116
+ cursor: default;
117
+ }
118
+ .mfui-slider-range_disabled .mfui-slider-range__range-track-segment {
119
+ background-color: var(--spbSky1);
120
+ }
121
+ .mfui-slider-range_disabled .mfui-slider-range__range-input::-webkit-slider-thumb {
122
+ width: var(--thumbSize);
123
+ height: var(--thumbSize);
124
+ border: none;
125
+ border-radius: 50%;
126
+ background-color: var(--stcWhite);
127
+ -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
128
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
129
+ -webkit-appearance: none;
130
+ pointer-events: auto;
131
+ background-color: var(--spbSky2);
132
+ }
133
+ .mfui-slider-range_disabled .mfui-slider-range__range-input::-moz-range-thumb {
134
+ width: var(--thumbSize);
135
+ height: var(--thumbSize);
136
+ border: none;
137
+ border-radius: 50%;
138
+ background-color: var(--stcWhite);
139
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
140
+ -webkit-appearance: none;
141
+ pointer-events: auto;
142
+ background-color: var(--spbSky2);
143
+ }
144
+ .mfui-slider-range_disabled .mfui-slider-range__range-input::-ms-thumb {
145
+ width: var(--thumbSize);
146
+ height: var(--thumbSize);
147
+ border: none;
148
+ border-radius: 50%;
149
+ background-color: var(--stcWhite);
150
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
151
+ -webkit-appearance: none;
152
+ pointer-events: auto;
153
+ background-color: var(--spbSky2);
154
+ }
@@ -0,0 +1,49 @@
1
+ import * as React from 'react';
2
+ import { DisplayValueType } from '../components/SliderDisplayValue/SliderDisplayValue';
3
+ import { ScaleType } from '../components/SliderScale/SliderScale';
4
+ import './SliderRange.less';
5
+ export interface ISliderRange {
6
+ /** Дополнительный класс корневого элемента */
7
+ className?: string;
8
+ /** Текущее значение ползунка слева */
9
+ leftValue?: number;
10
+ /** Текущее значение ползунка справа */
11
+ rightValue?: number;
12
+ /** Минимальное значение */
13
+ minValue: number;
14
+ /** Максимальное значение */
15
+ maxValue: number;
16
+ /** Лейбл */
17
+ label?: string;
18
+ /** Тип выводимого значения */
19
+ displayValueType?: DisplayValueType;
20
+ /** Префикс для выводимого значения слева */
21
+ displayLeftValuePrefix?: string;
22
+ /** Префикс для выводимого значения справа */
23
+ displayRightValuePrefix?: string;
24
+ /** Единица измерения выводимого значения */
25
+ displayValueUnit?: string;
26
+ /** Переводит компонент в контролируемое состояние */
27
+ isControlled?: boolean;
28
+ /** Шаг */
29
+ step?: number;
30
+ /** Тип встроенной шкалы */
31
+ scale?: ScaleType;
32
+ /** Кастомная шкала */
33
+ customScale?: string[];
34
+ /** Переводит компонент в выключенное состояние */
35
+ disabled?: boolean;
36
+ /** Дополнительные data атрибуты к внутренним элементам */
37
+ dataAttrs?: {
38
+ root?: Record<string, string>;
39
+ leftInput?: Record<string, string>;
40
+ rightInput?: Record<string, string>;
41
+ leftRangeInput?: Record<string, string>;
42
+ rightRangeInput?: Record<string, string>;
43
+ scale?: Record<string, string>;
44
+ };
45
+ /** Обработчик изменения значения */
46
+ onChange?: (leftValue: number, rightValue: number) => void;
47
+ }
48
+ declare const SliderRange: React.FC<ISliderRange>;
49
+ export default SliderRange;
@@ -0,0 +1,227 @@
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 } from "../helpers";
10
+ import { getTrackSize, getRangeValueByPageX, checkForThumbAtEndOfTrack } from "./helpers";
11
+ import "./SliderRange.css";
12
+ var THUMB_SIZE = 24;
13
+ var cn = cnCreate('mfui-slider-range');
14
+
15
+ var SliderRange = function SliderRange(_ref) {
16
+ var className = _ref.className,
17
+ label = _ref.label,
18
+ displayValueType = _ref.displayValueType,
19
+ displayLeftValuePrefix = _ref.displayLeftValuePrefix,
20
+ displayRightValuePrefix = _ref.displayRightValuePrefix,
21
+ displayValueUnit = _ref.displayValueUnit,
22
+ _ref$leftValue = _ref.leftValue,
23
+ outerLeftValue = _ref$leftValue === void 0 ? 0 : _ref$leftValue,
24
+ _ref$rightValue = _ref.rightValue,
25
+ outerRightValue = _ref$rightValue === void 0 ? 0 : _ref$rightValue,
26
+ minValue = _ref.minValue,
27
+ maxValue = _ref.maxValue,
28
+ _ref$isControlled = _ref.isControlled,
29
+ isControlled = _ref$isControlled === void 0 ? false : _ref$isControlled,
30
+ _ref$step = _ref.step,
31
+ step = _ref$step === void 0 ? 1 : _ref$step,
32
+ scale = _ref.scale,
33
+ customScale = _ref.customScale,
34
+ _ref$disabled = _ref.disabled,
35
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
36
+ dataAttrs = _ref.dataAttrs,
37
+ onChange = _ref.onChange;
38
+ var defaultLeftRangeValue = outerLeftValue || minValue;
39
+ var defaultRightRangeValue = outerRightValue || maxValue;
40
+ var rangeTrackInnerRef = React.useRef(null);
41
+
42
+ var _React$useState = React.useState(null),
43
+ _React$useState2 = _slicedToArray(_React$useState, 2),
44
+ rawLeftInputValue = _React$useState2[0],
45
+ setRawLeftInputValue = _React$useState2[1];
46
+
47
+ var _React$useState3 = React.useState(null),
48
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
49
+ rawRightInputValue = _React$useState4[0],
50
+ setRawRightInputValue = _React$useState4[1];
51
+
52
+ var _React$useState5 = React.useState(defaultLeftRangeValue),
53
+ _React$useState6 = _slicedToArray(_React$useState5, 2),
54
+ innerLeftRangeValue = _React$useState6[0],
55
+ setInnerLeftRangeValue = _React$useState6[1];
56
+
57
+ var _React$useState7 = React.useState(defaultRightRangeValue),
58
+ _React$useState8 = _slicedToArray(_React$useState7, 2),
59
+ innerRightRangeValue = _React$useState8[0],
60
+ setInnerRightRangeValue = _React$useState8[1];
61
+
62
+ var leftRangeValue = isControlled ? outerLeftValue : innerLeftRangeValue;
63
+ var rightRangeValue = isControlled ? outerRightValue : innerRightRangeValue;
64
+ var trackSize = getTrackSize(leftRangeValue, rightRangeValue, minValue, maxValue);
65
+ var isThumbAtEndOfTrack = checkForThumbAtEndOfTrack(leftRangeValue, minValue, maxValue, THUMB_SIZE);
66
+ var showHead = !!label || !!displayValueType;
67
+
68
+ var handleRangeTrackClick = function handleRangeTrackClick(e) {
69
+ if (!rangeTrackInnerRef.current) {
70
+ return;
71
+ }
72
+
73
+ var clickValue = getRangeValueByPageX(e.pageX, minValue, maxValue, rangeTrackInnerRef.current);
74
+ var newRangeValue = getRangeValue(clickValue, minValue, maxValue, step);
75
+ var leftHalfTrack = leftRangeValue + (rightRangeValue - leftRangeValue) / 2;
76
+
77
+ if (newRangeValue < leftHalfTrack) {
78
+ !isControlled && setInnerLeftRangeValue(newRangeValue);
79
+ onChange === null || onChange === void 0 ? void 0 : onChange(newRangeValue, rightRangeValue);
80
+ } else {
81
+ !isControlled && setInnerRightRangeValue(newRangeValue);
82
+ onChange === null || onChange === void 0 ? void 0 : onChange(leftRangeValue, newRangeValue);
83
+ }
84
+ };
85
+
86
+ var handleLeftInputChange = function handleLeftInputChange(isRange) {
87
+ return function (e) {
88
+ var targetValue = e.target.value;
89
+ var newRangeValue = getRangeValue(targetValue, minValue, rightRangeValue, step);
90
+ !isControlled && setInnerLeftRangeValue(newRangeValue);
91
+ !isRange && setRawLeftInputValue(targetValue);
92
+ onChange === null || onChange === void 0 ? void 0 : onChange(newRangeValue, rightRangeValue);
93
+ };
94
+ };
95
+
96
+ var handleRightInputChange = function handleRightInputChange(isRange) {
97
+ return function (e) {
98
+ var targetValue = e.target.value;
99
+ var newRangeValue = getRangeValue(targetValue, leftRangeValue, maxValue, step);
100
+ !isControlled && setInnerRightRangeValue(newRangeValue);
101
+ !isRange && setRawRightInputValue(targetValue);
102
+ onChange === null || onChange === void 0 ? void 0 : onChange(leftRangeValue, newRangeValue);
103
+ };
104
+ };
105
+
106
+ var handleInputBlur = function handleInputBlur(isLeft) {
107
+ return function () {
108
+ if (isLeft) {
109
+ setRawLeftInputValue(null);
110
+ } else {
111
+ setRawRightInputValue(null);
112
+ }
113
+ };
114
+ };
115
+
116
+ return /*#__PURE__*/React.createElement("div", _extends({
117
+ className: cn({
118
+ disabled: disabled
119
+ }, [className])
120
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
121
+ style: {
122
+ '--thumbSize': "".concat(THUMB_SIZE, "px")
123
+ }
124
+ }), showHead && /*#__PURE__*/React.createElement("div", {
125
+ className: cn('head')
126
+ }, !!label && /*#__PURE__*/React.createElement("div", {
127
+ className: cn('label')
128
+ }, label), !!displayValueType && /*#__PURE__*/React.createElement("div", {
129
+ className: cn('display-values')
130
+ }, /*#__PURE__*/React.createElement(SliderDisplayValue, {
131
+ value: rawLeftInputValue !== null && rawLeftInputValue !== void 0 ? rawLeftInputValue : leftRangeValue,
132
+ displayValueType: displayValueType,
133
+ displayValuePrefix: displayLeftValuePrefix,
134
+ displayValueUnit: displayValueUnit,
135
+ disabled: disabled,
136
+ onChange: handleLeftInputChange(false),
137
+ onBlur: handleInputBlur(true),
138
+ dataAttrs: {
139
+ input: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.leftInput
140
+ }
141
+ }), /*#__PURE__*/React.createElement(SliderDisplayValue, {
142
+ value: rawRightInputValue !== null && rawRightInputValue !== void 0 ? rawRightInputValue : rightRangeValue,
143
+ displayValueType: displayValueType,
144
+ displayValuePrefix: displayRightValuePrefix,
145
+ displayValueUnit: displayValueUnit,
146
+ disabled: disabled,
147
+ onChange: handleRightInputChange(false),
148
+ onBlur: handleInputBlur(false),
149
+ dataAttrs: {
150
+ input: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.rightInput
151
+ }
152
+ }))), /*#__PURE__*/React.createElement("div", {
153
+ className: cn('range-container')
154
+ }, /*#__PURE__*/React.createElement("input", _extends({
155
+ className: cn('range-input', {
156
+ left: true,
157
+ over: isThumbAtEndOfTrack
158
+ }),
159
+ type: "range",
160
+ value: leftRangeValue,
161
+ min: minValue,
162
+ max: maxValue,
163
+ step: step,
164
+ onChange: handleLeftInputChange(true),
165
+ disabled: disabled
166
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.leftRangeInput))), /*#__PURE__*/React.createElement("input", _extends({
167
+ className: cn('range-input', {
168
+ right: true
169
+ }),
170
+ type: "range",
171
+ value: rightRangeValue,
172
+ min: minValue,
173
+ max: maxValue,
174
+ step: step,
175
+ onChange: handleRightInputChange(true),
176
+ disabled: disabled
177
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.rightRangeInput))), /*#__PURE__*/React.createElement("div", {
178
+ className: cn('range-track'),
179
+ onClick: handleRangeTrackClick
180
+ }, /*#__PURE__*/React.createElement("div", {
181
+ className: cn('range-track-inner'),
182
+ ref: rangeTrackInnerRef
183
+ }, /*#__PURE__*/React.createElement("div", {
184
+ className: cn('range-track-segment'),
185
+ style: {
186
+ left: "".concat(trackSize.left, "%"),
187
+ right: "".concat(trackSize.right, "%")
188
+ }
189
+ })))), (!!scale || !!customScale) && /*#__PURE__*/React.createElement(SliderScale, {
190
+ minValue: minValue,
191
+ maxValue: maxValue,
192
+ scale: scale,
193
+ customScale: customScale,
194
+ disabled: disabled,
195
+ dataAttrs: {
196
+ root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.scale
197
+ }
198
+ }));
199
+ };
200
+
201
+ SliderRange.propTypes = {
202
+ className: PropTypes.string,
203
+ leftValue: PropTypes.number,
204
+ rightValue: PropTypes.number,
205
+ minValue: PropTypes.number.isRequired,
206
+ maxValue: PropTypes.number.isRequired,
207
+ label: PropTypes.string,
208
+ displayValueType: PropTypes.oneOf(Object.values(DisplayValue)),
209
+ displayLeftValuePrefix: PropTypes.string,
210
+ displayRightValuePrefix: PropTypes.string,
211
+ displayValueUnit: PropTypes.string,
212
+ isControlled: PropTypes.bool,
213
+ step: PropTypes.number,
214
+ scale: PropTypes.oneOf(Object.values(Scale)),
215
+ customScale: PropTypes.arrayOf(PropTypes.string.isRequired),
216
+ disabled: PropTypes.bool,
217
+ onChange: PropTypes.func,
218
+ dataAttrs: PropTypes.shape({
219
+ root: PropTypes.objectOf(PropTypes.string.isRequired),
220
+ leftInput: PropTypes.objectOf(PropTypes.string.isRequired),
221
+ rightInput: PropTypes.objectOf(PropTypes.string.isRequired),
222
+ leftRangeInput: PropTypes.objectOf(PropTypes.string.isRequired),
223
+ rightRangeInput: PropTypes.objectOf(PropTypes.string.isRequired),
224
+ scale: PropTypes.objectOf(PropTypes.string.isRequired)
225
+ })
226
+ };
227
+ export default SliderRange;
@@ -0,0 +1,6 @@
1
+ export declare const getTrackSize: (vleftValue: number | undefined, rightValue: number | undefined, minValue: number, maxValue: number) => {
2
+ left: number;
3
+ right: number;
4
+ };
5
+ export declare const getRangeValueByPageX: (pageX: number, minValue: number, maxValue: number, trackInnerNode: HTMLDivElement) => number;
6
+ export declare const checkForThumbAtEndOfTrack: (leftRangeValue: number, minValue: number, maxValue: number, thumbSize: number) => boolean;
@@ -0,0 +1,31 @@
1
+ import "core-js/modules/es.number.constructor.js";
2
+ import "core-js/modules/es.number.to-fixed.js";
3
+ export var getTrackSize = function getTrackSize() {
4
+ var vleftValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
5
+ var rightValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
6
+ var minValue = arguments.length > 2 ? arguments[2] : undefined;
7
+ var maxValue = arguments.length > 3 ? arguments[3] : undefined;
8
+ var valueDifference = maxValue - minValue;
9
+
10
+ if (valueDifference <= 0) {
11
+ return {
12
+ left: 0,
13
+ right: 0
14
+ };
15
+ }
16
+
17
+ var leftPercent = (vleftValue - minValue) * 100 / valueDifference;
18
+ var rightPercent = (maxValue - rightValue) * 100 / valueDifference;
19
+ return {
20
+ left: Number(leftPercent.toFixed(3)),
21
+ right: Number(rightPercent.toFixed(3))
22
+ };
23
+ };
24
+ export var getRangeValueByPageX = function getRangeValueByPageX(pageX, minValue, maxValue, trackInnerNode) {
25
+ var clickPosition = pageX - trackInnerNode.getBoundingClientRect().left;
26
+ var clickPositionPercent = clickPosition * 100 / trackInnerNode.offsetWidth;
27
+ return (maxValue - minValue) * clickPositionPercent / 100 + minValue;
28
+ };
29
+ export var checkForThumbAtEndOfTrack = function checkForThumbAtEndOfTrack(leftRangeValue, minValue, maxValue, thumbSize) {
30
+ return leftRangeValue > maxValue - thumbSize * (maxValue - minValue) / 100;
31
+ };
@@ -0,0 +1,209 @@
1
+ .mfui-slider-ratio {
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-ratio__head {
11
+ font-size: 15px;
12
+ line-height: 24px;
13
+ font-weight: 500;
14
+ margin-bottom: 8px;
15
+ }
16
+ .mfui-slider-ratio__display-values {
17
+ display: -webkit-box;
18
+ display: -ms-flexbox;
19
+ display: flex;
20
+ -webkit-box-pack: justify;
21
+ -ms-flex-pack: justify;
22
+ justify-content: space-between;
23
+ width: 100%;
24
+ margin-top: 8px;
25
+ }
26
+ .mfui-slider-ratio__range-container {
27
+ position: relative;
28
+ width: 100%;
29
+ }
30
+ .mfui-slider-ratio__range-input {
31
+ position: relative;
32
+ z-index: 1;
33
+ display: block;
34
+ width: 100%;
35
+ height: 12px;
36
+ margin: 6px 0;
37
+ border-radius: 100px;
38
+ background: var(--brandPurple);
39
+ background-image: -webkit-gradient(linear, left top, left bottom, from(var(--brandGreen)), to(var(--brandGreen)));
40
+ background-image: linear-gradient(var(--brandGreen), var(--brandGreen));
41
+ background-repeat: no-repeat;
42
+ outline: none;
43
+ cursor: pointer;
44
+ -webkit-appearance: none;
45
+ -moz-appearance: none;
46
+ appearance: none;
47
+ pointer-events: none;
48
+ }
49
+ .mfui-slider-ratio__range-input:focus {
50
+ outline: none;
51
+ }
52
+ .mfui-slider-ratio__range-input::-webkit-slider-thumb {
53
+ width: var(--thumbSize);
54
+ height: var(--thumbSize);
55
+ border: none;
56
+ border-radius: 50%;
57
+ background-color: var(--stcWhite);
58
+ background-image: url('./i/thumb.png');
59
+ background-repeat: no-repeat;
60
+ background-size: 100% 100%;
61
+ -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
62
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
63
+ -webkit-appearance: none;
64
+ pointer-events: auto;
65
+ }
66
+ .mfui-slider-ratio__range-input::-moz-range-thumb {
67
+ width: var(--thumbSize);
68
+ height: var(--thumbSize);
69
+ border: none;
70
+ border-radius: 50%;
71
+ background-color: var(--stcWhite);
72
+ background-image: url('./i/thumb.png');
73
+ background-repeat: no-repeat;
74
+ background-size: 100% 100%;
75
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
76
+ -webkit-appearance: none;
77
+ pointer-events: auto;
78
+ }
79
+ .mfui-slider-ratio__range-input::-ms-thumb {
80
+ width: var(--thumbSize);
81
+ height: var(--thumbSize);
82
+ border: none;
83
+ border-radius: 50%;
84
+ background-color: var(--stcWhite);
85
+ background-image: url('./i/thumb.png');
86
+ background-repeat: no-repeat;
87
+ background-size: 100% 100%;
88
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
89
+ -webkit-appearance: none;
90
+ pointer-events: auto;
91
+ }
92
+ .mfui-slider-ratio__range-input::-webkit-slider-runnable-track {
93
+ border: none;
94
+ background: transparent;
95
+ -webkit-box-shadow: none;
96
+ box-shadow: none;
97
+ -webkit-appearance: none;
98
+ }
99
+ .mfui-slider-ratio__range-input::-moz-range-track {
100
+ border: none;
101
+ background: transparent;
102
+ box-shadow: none;
103
+ -webkit-appearance: none;
104
+ }
105
+ .mfui-slider-ratio__range-input::-ms-track {
106
+ border: none;
107
+ background: transparent;
108
+ box-shadow: none;
109
+ -webkit-appearance: none;
110
+ }
111
+ .mfui-slider-ratio__range-track {
112
+ position: absolute;
113
+ top: 0;
114
+ z-index: 0;
115
+ width: 100%;
116
+ height: 100%;
117
+ cursor: pointer;
118
+ }
119
+ .mfui-slider-ratio__scale {
120
+ position: absolute;
121
+ top: 0;
122
+ right: calc(var(--thumbSize) / 2);
123
+ bottom: 0;
124
+ left: calc(var(--thumbSize) / 2);
125
+ z-index: 2;
126
+ display: -webkit-box;
127
+ display: -ms-flexbox;
128
+ display: flex;
129
+ -webkit-box-align: center;
130
+ -ms-flex-align: center;
131
+ align-items: center;
132
+ -webkit-box-pack: justify;
133
+ -ms-flex-pack: justify;
134
+ justify-content: space-between;
135
+ pointer-events: none;
136
+ }
137
+ .mfui-slider-ratio__scale-item {
138
+ width: 4px;
139
+ height: 4px;
140
+ border-radius: 50%;
141
+ background-color: var(--stcWhite);
142
+ }
143
+ .mfui-slider-ratio__scale-item:first-child {
144
+ margin-left: -2px;
145
+ }
146
+ .mfui-slider-ratio__scale-item:last-child {
147
+ margin-right: -2px;
148
+ }
149
+ .mfui-slider-ratio_disabled .mfui-slider-ratio__head {
150
+ color: var(--spbSky3);
151
+ }
152
+ .mfui-slider-ratio_disabled .mfui-slider-ratio__range-input {
153
+ background-color: var(--spbSky1);
154
+ background-image: -webkit-gradient(linear, left top, left bottom, from(var(--spbSky0)), to(var(--spbSky0)));
155
+ background-image: linear-gradient(var(--spbSky0), var(--spbSky0));
156
+ cursor: default;
157
+ }
158
+ .mfui-slider-ratio_disabled .mfui-slider-ratio__range-input::-webkit-slider-thumb {
159
+ width: var(--thumbSize);
160
+ height: var(--thumbSize);
161
+ border: none;
162
+ border-radius: 50%;
163
+ background-color: var(--stcWhite);
164
+ background-image: url('./i/thumb.png');
165
+ background-repeat: no-repeat;
166
+ background-size: 100% 100%;
167
+ -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
168
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
169
+ -webkit-appearance: none;
170
+ pointer-events: auto;
171
+ background-color: var(--spbSky2);
172
+ background-image: none;
173
+ }
174
+ .mfui-slider-ratio_disabled .mfui-slider-ratio__range-input::-moz-range-thumb {
175
+ width: var(--thumbSize);
176
+ height: var(--thumbSize);
177
+ border: none;
178
+ border-radius: 50%;
179
+ background-color: var(--stcWhite);
180
+ background-image: url('./i/thumb.png');
181
+ background-repeat: no-repeat;
182
+ background-size: 100% 100%;
183
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
184
+ -webkit-appearance: none;
185
+ pointer-events: auto;
186
+ background-color: var(--spbSky2);
187
+ background-image: none;
188
+ }
189
+ .mfui-slider-ratio_disabled .mfui-slider-ratio__range-input::-ms-thumb {
190
+ width: var(--thumbSize);
191
+ height: var(--thumbSize);
192
+ border: none;
193
+ border-radius: 50%;
194
+ background-color: var(--stcWhite);
195
+ background-image: url('./i/thumb.png');
196
+ background-repeat: no-repeat;
197
+ background-size: 100% 100%;
198
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
199
+ -webkit-appearance: none;
200
+ pointer-events: auto;
201
+ background-color: var(--spbSky2);
202
+ background-image: none;
203
+ }
204
+ .mfui-slider-ratio_disabled .mfui-slider-ratio__range-track {
205
+ cursor: default;
206
+ }
207
+ .mfui-slider-ratio_disabled .mfui-slider-ratio__scale {
208
+ display: none;
209
+ }