@megafon/ui-core 5.12.1 → 5.13.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 (36) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/es/components/Row/Row.css +238 -0
  3. package/dist/es/components/Row/Row.d.ts +46 -0
  4. package/dist/es/components/Row/Row.js +107 -0
  5. package/dist/es/components/Sliders/Slider/Slider.css +2 -6
  6. package/dist/es/components/Sliders/Slider/Slider.js +2 -2
  7. package/dist/es/components/Sliders/SliderRange/SliderRange.css +12 -3
  8. package/dist/es/components/Sliders/SliderRange/SliderRange.js +41 -8
  9. package/dist/es/components/Sliders/SliderRatio/SliderRatio.css +8 -3
  10. package/dist/es/components/Sliders/SliderRatio/SliderRatio.js +38 -5
  11. package/dist/es/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.css +1 -1
  12. package/dist/es/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.js +21 -1
  13. package/dist/es/components/Sliders/helpers.d.ts +1 -0
  14. package/dist/es/components/Sliders/helpers.js +5 -0
  15. package/dist/es/components/Snackbar/Snackbar.css +5 -3
  16. package/dist/es/components/Snackbar/Snackbar.js +5 -2
  17. package/dist/es/index.d.ts +1 -0
  18. package/dist/es/index.js +1 -0
  19. package/dist/lib/components/Row/Row.css +238 -0
  20. package/dist/lib/components/Row/Row.d.ts +46 -0
  21. package/dist/lib/components/Row/Row.js +127 -0
  22. package/dist/lib/components/Sliders/Slider/Slider.css +2 -6
  23. package/dist/lib/components/Sliders/Slider/Slider.js +1 -1
  24. package/dist/lib/components/Sliders/SliderRange/SliderRange.css +12 -3
  25. package/dist/lib/components/Sliders/SliderRange/SliderRange.js +40 -7
  26. package/dist/lib/components/Sliders/SliderRatio/SliderRatio.css +8 -3
  27. package/dist/lib/components/Sliders/SliderRatio/SliderRatio.js +37 -4
  28. package/dist/lib/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.css +1 -1
  29. package/dist/lib/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.js +22 -1
  30. package/dist/lib/components/Sliders/helpers.d.ts +1 -0
  31. package/dist/lib/components/Sliders/helpers.js +12 -2
  32. package/dist/lib/components/Snackbar/Snackbar.css +5 -3
  33. package/dist/lib/components/Snackbar/Snackbar.js +5 -2
  34. package/dist/lib/index.d.ts +1 -0
  35. package/dist/lib/index.js +8 -0
  36. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [5.13.0](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-core@5.12.1...@megafon/ui-core@5.13.0) (2024-05-27)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **sliders:** fix bugs ([f09615a](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/f09615a4a417836ceaa71b3c604a9288f81ba69a))
12
+
13
+
14
+ ### Features
15
+
16
+ * **row:** create component Row ([08da88f](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/08da88fcbbdaea5c5fb1a88cffbfb820025e6d84))
17
+ * **snackbar:** update snackbar component ([71713f1](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/commit/71713f11e81bb4da0e4b531fd27e2882287b6122))
18
+
19
+
20
+
21
+
22
+
6
23
  ## [5.12.1](https://hq-gitlab.megafon.ru/site-portal/services/megafon-ui/compare/@megafon/ui-core@5.12.0...@megafon/ui-core@5.12.1) (2024-05-14)
7
24
 
8
25
 
@@ -0,0 +1,238 @@
1
+ .mfui-row {
2
+ position: relative;
3
+ display: inline-block;
4
+ -webkit-box-sizing: border-box;
5
+ box-sizing: border-box;
6
+ width: 100%;
7
+ height: -webkit-fit-content;
8
+ height: -moz-fit-content;
9
+ height: fit-content;
10
+ padding: 12px 16px;
11
+ border: none;
12
+ border-radius: 12px;
13
+ color: var(--content);
14
+ text-decoration: none;
15
+ background-color: var(--base);
16
+ -webkit-transition: background-color, color, -webkit-box-shadow;
17
+ transition: background-color, color, -webkit-box-shadow;
18
+ transition: background-color, color, box-shadow;
19
+ transition: background-color, color, box-shadow, -webkit-box-shadow;
20
+ -webkit-transition-duration: 0.3s;
21
+ transition-duration: 0.3s;
22
+ }
23
+ @media screen and (min-width: 768px) {
24
+ .mfui-row {
25
+ padding: 20px 24px;
26
+ }
27
+ }
28
+ @media screen and (min-width: 1024px) {
29
+ .mfui-row {
30
+ padding: 24px 32px;
31
+ }
32
+ }
33
+ .mfui-row__wrapper {
34
+ display: -webkit-box;
35
+ display: -ms-flexbox;
36
+ display: flex;
37
+ -webkit-box-align: center;
38
+ -ms-flex-align: center;
39
+ align-items: center;
40
+ }
41
+ .mfui-row__icon-container {
42
+ display: -webkit-box;
43
+ display: -ms-flexbox;
44
+ display: flex;
45
+ -ms-flex-negative: 0;
46
+ flex-shrink: 0;
47
+ -webkit-box-align: center;
48
+ -ms-flex-align: center;
49
+ align-items: center;
50
+ -webkit-box-pack: center;
51
+ -ms-flex-pack: center;
52
+ justify-content: center;
53
+ width: 40px;
54
+ height: 40px;
55
+ margin-right: 8px;
56
+ }
57
+ @media screen and (max-width: 767px) {
58
+ .mfui-row__icon-container {
59
+ margin-left: -4px;
60
+ }
61
+ }
62
+ @media screen and (min-width: 768px) {
63
+ .mfui-row__icon-container {
64
+ width: 48px;
65
+ height: 48px;
66
+ margin-right: 12px;
67
+ }
68
+ }
69
+ @media screen and (min-width: 1024px) {
70
+ .mfui-row__icon-container {
71
+ width: 56px;
72
+ height: 56px;
73
+ margin-right: 16px;
74
+ }
75
+ }
76
+ .mfui-row__icon-container svg {
77
+ fill: var(--content);
78
+ }
79
+ .mfui-row__icon-container_colored {
80
+ border-radius: 50%;
81
+ background-color: var(--brandGreen20);
82
+ }
83
+ .mfui-row__icon-container_colored svg {
84
+ fill: var(--brandGreen);
85
+ }
86
+ .mfui-row__icon,
87
+ .mfui-row__icon svg {
88
+ width: 32px;
89
+ min-width: 32px;
90
+ height: 32px;
91
+ }
92
+ @media screen and (min-width: 1024px) {
93
+ .mfui-row__icon,
94
+ .mfui-row__icon svg {
95
+ width: 40px;
96
+ min-width: 40px;
97
+ height: 40px;
98
+ }
99
+ }
100
+ .mfui-row__header {
101
+ margin-right: auto;
102
+ padding-right: 12px;
103
+ }
104
+ @media screen and (max-width: 767px) {
105
+ .mfui-row__title {
106
+ font-size: 15px;
107
+ line-height: 24px;
108
+ font-weight: 500;
109
+ }
110
+ }
111
+ .mfui-row__sub-title {
112
+ font-size: 12px;
113
+ line-height: 18px;
114
+ margin-top: 2px;
115
+ color: var(--spbSky3);
116
+ }
117
+ @media screen and (min-width: 768px) {
118
+ .mfui-row__sub-title:not(.mfui-row_size_small) {
119
+ font-size: 15px;
120
+ line-height: 24px;
121
+ margin-top: 4px;
122
+ }
123
+ }
124
+ .mfui-row__arrow {
125
+ width: 32px;
126
+ min-width: 32px;
127
+ height: 32px;
128
+ fill: var(--spbSky3);
129
+ }
130
+ @media screen and (min-width: 768px) {
131
+ .mfui-row__arrow {
132
+ margin-left: 4px;
133
+ }
134
+ }
135
+ @media screen and (min-width: 1024px) {
136
+ .mfui-row__arrow {
137
+ margin-left: 12px;
138
+ }
139
+ }
140
+ .mfui-row__children {
141
+ font-size: 15px;
142
+ line-height: 24px;
143
+ font-weight: 500;
144
+ }
145
+ @media screen and (min-width: 768px) {
146
+ .mfui-row__children {
147
+ font-weight: 500;
148
+ font-size: 18px;
149
+ line-height: 24px;
150
+ letter-spacing: 0.5px;
151
+ }
152
+ }
153
+ @media screen and (min-width: 768px) and screen and (min-width: 1280px) {
154
+ .mfui-row__children {
155
+ font-size: 20px;
156
+ line-height: 28px;
157
+ }
158
+ }
159
+ .mfui-row_view_shadow {
160
+ -webkit-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
161
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
162
+ }
163
+ .mfui-row_view_stroke {
164
+ border: 1px solid var(--spbSky2);
165
+ background-color: inherit;
166
+ }
167
+ .mfui-row_pointer {
168
+ cursor: pointer;
169
+ }
170
+ .mfui-row_pointer.mfui-row_view_shadow:hover {
171
+ -webkit-box-shadow: 0 8px 28px rgba(0, 0, 0, 0.1);
172
+ box-shadow: 0 8px 28px rgba(0, 0, 0, 0.1);
173
+ }
174
+ .mfui-row_pointer.mfui-row_view_shadow:hover:after {
175
+ content: '';
176
+ position: absolute;
177
+ top: 0;
178
+ right: 0;
179
+ bottom: 0;
180
+ left: 0;
181
+ border-radius: 12px;
182
+ background-color: var(--stcWhite10);
183
+ pointer-events: none;
184
+ }
185
+ .mfui-row_pointer.mfui-row_view_stroke:hover {
186
+ background-color: var(--spbSky0);
187
+ }
188
+ .mfui-row_has-arrow {
189
+ padding-right: 8px;
190
+ }
191
+ @media screen and (min-width: 768px) {
192
+ .mfui-row_has-arrow {
193
+ padding-right: 16px;
194
+ }
195
+ }
196
+ @media screen and (min-width: 1024px) {
197
+ .mfui-row_has-arrow {
198
+ padding-right: 20px;
199
+ }
200
+ }
201
+ @media screen and (min-width: 1024px) {
202
+ .mfui-row_has-arrow.mfui-row_size_small {
203
+ padding-right: 16px;
204
+ }
205
+ }
206
+ @media screen and (min-width: 768px) {
207
+ .mfui-row_size_small {
208
+ padding: 16px 24px 16px 20px;
209
+ }
210
+ }
211
+ @media screen and (min-width: 1024px) {
212
+ .mfui-row_size_small {
213
+ padding: 20px 24px;
214
+ }
215
+ }
216
+ @media screen and (min-width: 1024px) {
217
+ .mfui-row_size_small .mfui-row__sub-title {
218
+ font-size: 15px;
219
+ line-height: 24px;
220
+ margin-top: 4px;
221
+ }
222
+ }
223
+ @media screen and (min-width: 768px) and (max-width: 1023px) {
224
+ .mfui-row_size_small .mfui-row__icon-container {
225
+ width: 40px;
226
+ height: 40px;
227
+ }
228
+ }
229
+ @media screen and (min-width: 768px) and (max-width: 1023px) {
230
+ .mfui-row_size_small .mfui-row__arrow {
231
+ margin-right: -4px;
232
+ }
233
+ }
234
+ .mfui-row_size_small .mfui-row__children {
235
+ font-size: 15px;
236
+ line-height: 24px;
237
+ font-weight: 500;
238
+ }
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ import './Row.less';
3
+ export interface IRowProps {
4
+ /** Заголовок */
5
+ title: string;
6
+ /** Дополнительный текст */
7
+ subTitle?: string;
8
+ /** Размер компонента */
9
+ size?: 'big' | 'small';
10
+ /** Визуальный эффект фона */
11
+ backgroundView?: 'shadow' | 'stroke';
12
+ /** Иконка */
13
+ icon?: JSX.Element;
14
+ /** Фоновая заливка у иконки */
15
+ isIconColored?: boolean;
16
+ /** Показать стелку */
17
+ showArrow?: boolean;
18
+ /** Показать загрузку */
19
+ showLoader?: boolean;
20
+ /** Ссылка */
21
+ href?: string;
22
+ /** Атрибут для открытия ссылки */
23
+ target?: '_self' | '_blank';
24
+ /** rel - аргумент тега <a> */
25
+ rel?: string;
26
+ /** Обработчик клика */
27
+ onClick?: (e: React.SyntheticEvent<EventTarget>) => void;
28
+ /** Дочерние элементы: Badges, Switcher, Selector */
29
+ children?: React.ReactNode | string;
30
+ /** Дополнительный класс корневого элемента */
31
+ className?: string;
32
+ /** Дополнительные классы для внутренних элементов */
33
+ classes?: {
34
+ root?: string;
35
+ title?: string;
36
+ subtitle?: string;
37
+ };
38
+ /** Дополнительные data атрибуты к внутренним элементам */
39
+ dataAttrs?: {
40
+ root?: Record<string, string>;
41
+ arrow?: Record<string, string>;
42
+ preloader?: Record<string, string>;
43
+ };
44
+ }
45
+ declare const Row: React.FC<IRowProps>;
46
+ export default Row;
@@ -0,0 +1,107 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React from 'react';
3
+ import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
4
+ import * as PropTypes from 'prop-types';
5
+ import Header from "../Header/Header";
6
+ import Preloader from "../Preloader/Preloader";
7
+ import "./Row.css";
8
+
9
+ var ArrowRight = function ArrowRight(props) {
10
+ return /*#__PURE__*/React.createElement("svg", _extends({
11
+ viewBox: "0 0 32 32"
12
+ }, props), /*#__PURE__*/React.createElement("path", {
13
+ d: "M12.5 20.8l4.8-4.8-4.8-4.8 1.6-1.7 6.4 6.5-6.4 6.5z"
14
+ }));
15
+ };
16
+
17
+ var cn = cnCreate('mfui-row');
18
+
19
+ var Row = function Row(_ref) {
20
+ var title = _ref.title,
21
+ subTitle = _ref.subTitle,
22
+ _ref$size = _ref.size,
23
+ size = _ref$size === void 0 ? 'big' : _ref$size,
24
+ _ref$backgroundView = _ref.backgroundView,
25
+ backgroundView = _ref$backgroundView === void 0 ? 'shadow' : _ref$backgroundView,
26
+ icon = _ref.icon,
27
+ _ref$isIconColored = _ref.isIconColored,
28
+ isIconColored = _ref$isIconColored === void 0 ? false : _ref$isIconColored,
29
+ _ref$showArrow = _ref.showArrow,
30
+ showArrow = _ref$showArrow === void 0 ? false : _ref$showArrow,
31
+ _ref$showLoader = _ref.showLoader,
32
+ showLoader = _ref$showLoader === void 0 ? false : _ref$showLoader,
33
+ href = _ref.href,
34
+ _ref$target = _ref.target,
35
+ target = _ref$target === void 0 ? '_self' : _ref$target,
36
+ rel = _ref.rel,
37
+ onClick = _ref.onClick,
38
+ children = _ref.children,
39
+ className = _ref.className,
40
+ _ref$classes = _ref.classes,
41
+ classes = _ref$classes === void 0 ? {} : _ref$classes,
42
+ dataAttrs = _ref.dataAttrs;
43
+ var ElementType = href ? 'a' : 'div';
44
+ var isActive = !showLoader && (!!href || !!onClick);
45
+ var isSmallSize = size === 'small';
46
+
47
+ var handleClick = function handleClick(e) {
48
+ onClick === null || onClick === void 0 ? void 0 : onClick(e);
49
+ };
50
+
51
+ return /*#__PURE__*/React.createElement(ElementType, _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
52
+ className: cn({
53
+ size: size,
54
+ view: backgroundView,
55
+ pointer: isActive,
56
+ 'has-arrow': showArrow && !showLoader
57
+ }, [className, classes.root]),
58
+ href: href,
59
+ target: href ? target : undefined,
60
+ rel: rel,
61
+ onClick: handleClick
62
+ }), /*#__PURE__*/React.createElement("div", {
63
+ className: cn('wrapper')
64
+ }, !!icon && /*#__PURE__*/React.createElement("div", {
65
+ className: cn('icon-container', {
66
+ colored: isIconColored
67
+ })
68
+ }, /*#__PURE__*/React.createElement("div", {
69
+ className: cn('icon')
70
+ }, icon)), /*#__PURE__*/React.createElement("div", {
71
+ className: cn('header')
72
+ }, /*#__PURE__*/React.createElement(Header, {
73
+ className: cn('title', [classes.title]),
74
+ as: isSmallSize ? 'h5' : 'h3'
75
+ }, title), !!subTitle && /*#__PURE__*/React.createElement("div", {
76
+ className: cn('sub-title', [classes.subtitle])
77
+ }, subTitle)), !showLoader ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
78
+ className: cn('children')
79
+ }, children), showArrow && /*#__PURE__*/React.createElement(ArrowRight, _extends({
80
+ className: cn('arrow')
81
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.arrow)))) : /*#__PURE__*/React.createElement(Preloader, {
82
+ delay: false,
83
+ dataAttrs: {
84
+ root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.preloader
85
+ }
86
+ })));
87
+ };
88
+
89
+ Row.propTypes = {
90
+ title: PropTypes.string.isRequired,
91
+ subTitle: PropTypes.string,
92
+ size: PropTypes.oneOf(['big', 'small']),
93
+ backgroundView: PropTypes.oneOf(['shadow', 'stroke']),
94
+ icon: PropTypes.element,
95
+ isIconColored: PropTypes.bool,
96
+ showArrow: PropTypes.bool,
97
+ showLoader: PropTypes.bool,
98
+ href: PropTypes.string,
99
+ target: PropTypes.oneOf(['_self', '_blank']),
100
+ rel: PropTypes.string,
101
+ onClick: PropTypes.func,
102
+ children: PropTypes.node,
103
+ className: PropTypes.string,
104
+ classes: PropTypes.objectOf(PropTypes.string),
105
+ dataAttrs: PropTypes.objectOf(PropTypes.object)
106
+ };
107
+ export default Row;
@@ -11,12 +11,8 @@
11
11
  font-size: 15px;
12
12
  line-height: 24px;
13
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;
14
+ display: grid;
15
+ grid-template-columns: auto 55%;
20
16
  margin-bottom: 8px;
21
17
  }
22
18
  .mfui-slider__display-value {
@@ -6,7 +6,7 @@ import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
6
6
  import * as PropTypes from 'prop-types';
7
7
  import SliderDisplayValue, { DisplayValue } from "../components/SliderDisplayValue/SliderDisplayValue";
8
8
  import SliderScale, { Scale } from "../components/SliderScale/SliderScale";
9
- import { getRangeValue, getTrackSize } from "../helpers";
9
+ import { getRangeValue, getTrackSize, removeFirstZeros } from "../helpers";
10
10
  import "./Slider.css";
11
11
  var cn = cnCreate('mfui-slider');
12
12
 
@@ -47,7 +47,7 @@ var Slider = function Slider(_ref) {
47
47
 
48
48
  var handleInputChange = function handleInputChange(isRange) {
49
49
  return function (e) {
50
- var targetValue = e.target.value;
50
+ var targetValue = removeFirstZeros(e.target.value);
51
51
  var newRangeValue = getRangeValue(targetValue, minValue, maxValue, step);
52
52
  !isControlled && setInnerRangeValue(newRangeValue);
53
53
  !isRange && setRawInputValue(targetValue);
@@ -14,15 +14,20 @@
14
14
  margin-bottom: 8px;
15
15
  }
16
16
  .mfui-slider-range__display-values {
17
- display: -webkit-box;
18
- display: -ms-flexbox;
19
- display: flex;
17
+ display: grid;
18
+ grid-template-columns: 45% 45%;
20
19
  -webkit-box-pack: justify;
21
20
  -ms-flex-pack: justify;
22
21
  justify-content: space-between;
23
22
  width: 100%;
24
23
  margin-top: 8px;
25
24
  }
25
+ .mfui-slider-range__display-value_left {
26
+ margin-right: auto;
27
+ }
28
+ .mfui-slider-range__display-value_right {
29
+ margin-left: auto;
30
+ }
26
31
  .mfui-slider-range__range-container {
27
32
  position: relative;
28
33
  height: 12px;
@@ -97,6 +102,7 @@
97
102
  padding: 0 12px;
98
103
  border-radius: 100px;
99
104
  background-color: var(--spbSky0);
105
+ cursor: pointer;
100
106
  }
101
107
  .mfui-slider-range__range-track-inner {
102
108
  position: relative;
@@ -112,6 +118,9 @@
112
118
  .mfui-slider-range_disabled .mfui-slider-range__head {
113
119
  color: var(--spbSky3);
114
120
  }
121
+ .mfui-slider-range_disabled .mfui-slider-range__range-track {
122
+ cursor: default;
123
+ }
115
124
  .mfui-slider-range_disabled .mfui-slider-range__range-input {
116
125
  background-image: -webkit-gradient(linear, left top, left bottom, from(var(--spbSky1)), to(var(--spbSky1)));
117
126
  background-image: linear-gradient(var(--spbSky1), var(--spbSky1));
@@ -6,7 +6,7 @@ import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
6
6
  import * as PropTypes from 'prop-types';
7
7
  import SliderDisplayValue, { DisplayValue } from "../components/SliderDisplayValue/SliderDisplayValue";
8
8
  import SliderScale, { Scale } from "../components/SliderScale/SliderScale";
9
- import { getRangeValue } from "../helpers";
9
+ import { getRangeValue, removeFirstZeros } from "../helpers";
10
10
  import { getTrackSize, getRangeValueByPageX, checkForThumbAtEndOfTrack } from "./helpers";
11
11
  import "./SliderRange.css";
12
12
  var THUMB_SIZE = 24;
@@ -35,6 +35,9 @@ var SliderRange = function SliderRange(_ref) {
35
35
  onChange = _ref.onChange;
36
36
  var outerLeftRangeValue = getRangeValue(outerLeftValue !== null && outerLeftValue !== void 0 ? outerLeftValue : minValue, minValue, maxValue, step);
37
37
  var outerRightRangeValue = getRangeValue(outerRightValue !== null && outerRightValue !== void 0 ? outerRightValue : maxValue, minValue, maxValue, step);
38
+ var leftRangeInputRef = React.useRef(null);
39
+ var rightRangeInputRef = React.useRef(null);
40
+ var rangeTrackRef = React.useRef(null);
38
41
  var rangeTrackInnerRef = React.useRef(null);
39
42
 
40
43
  var _React$useState = React.useState(null),
@@ -63,8 +66,8 @@ var SliderRange = function SliderRange(_ref) {
63
66
  var isThumbAtEndOfTrack = checkForThumbAtEndOfTrack(leftRangeValue, minValue, maxValue, THUMB_SIZE);
64
67
  var showHead = !!label || !!displayValueType;
65
68
 
66
- var handleRangeTrackClick = function handleRangeTrackClick(e) {
67
- if (!rangeTrackInnerRef.current) {
69
+ var handleRangeTrackPointerUp = function handleRangeTrackPointerUp(e) {
70
+ if (!rangeTrackInnerRef.current || disabled) {
68
71
  return;
69
72
  }
70
73
 
@@ -81,9 +84,27 @@ var SliderRange = function SliderRange(_ref) {
81
84
  }
82
85
  };
83
86
 
87
+ var handleRangeTrackPointerLeave = React.useCallback(function () {
88
+ var _a, _b, _c;
89
+
90
+ (_a = leftRangeInputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
91
+ (_b = rightRangeInputRef.current) === null || _b === void 0 ? void 0 : _b.focus();
92
+ (_c = rangeTrackRef.current) === null || _c === void 0 ? void 0 : _c.removeEventListener('pointerleave', handleRangeTrackPointerLeave);
93
+ }, []);
94
+
95
+ var handleRangeTrackPointerDown = function handleRangeTrackPointerDown() {
96
+ var _a;
97
+
98
+ if (disabled) {
99
+ return;
100
+ }
101
+
102
+ (_a = rangeTrackRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener('pointerleave', handleRangeTrackPointerLeave);
103
+ };
104
+
84
105
  var handleLeftInputChange = function handleLeftInputChange(isRange) {
85
106
  return function (e) {
86
- var targetValue = e.target.value;
107
+ var targetValue = removeFirstZeros(e.target.value);
87
108
  var newRangeValue = getRangeValue(targetValue, minValue, rightRangeValue, step);
88
109
  !isControlled && setInnerLeftRangeValue(newRangeValue);
89
110
  !isRange && setRawLeftInputValue(targetValue);
@@ -93,7 +114,7 @@ var SliderRange = function SliderRange(_ref) {
93
114
 
94
115
  var handleRightInputChange = function handleRightInputChange(isRange) {
95
116
  return function (e) {
96
- var targetValue = e.target.value;
117
+ var targetValue = removeFirstZeros(e.target.value);
97
118
  var newRangeValue = getRangeValue(targetValue, leftRangeValue, maxValue, step);
98
119
  !isControlled && setInnerRightRangeValue(newRangeValue);
99
120
  !isRange && setRawRightInputValue(targetValue);
@@ -126,6 +147,9 @@ var SliderRange = function SliderRange(_ref) {
126
147
  }, label), !!displayValueType && /*#__PURE__*/React.createElement("div", {
127
148
  className: cn('display-values')
128
149
  }, /*#__PURE__*/React.createElement(SliderDisplayValue, {
150
+ className: cn('display-value', {
151
+ left: true
152
+ }),
129
153
  value: rawLeftInputValue !== null && rawLeftInputValue !== void 0 ? rawLeftInputValue : leftRangeValue,
130
154
  displayValueType: displayValueType,
131
155
  displayValuePrefix: displayLeftValuePrefix,
@@ -137,6 +161,9 @@ var SliderRange = function SliderRange(_ref) {
137
161
  input: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.leftInput
138
162
  }
139
163
  }), /*#__PURE__*/React.createElement(SliderDisplayValue, {
164
+ className: cn('display-value', {
165
+ right: true
166
+ }),
140
167
  value: rawRightInputValue !== null && rawRightInputValue !== void 0 ? rawRightInputValue : rightRangeValue,
141
168
  displayValueType: displayValueType,
142
169
  displayValuePrefix: displayRightValuePrefix,
@@ -160,7 +187,9 @@ var SliderRange = function SliderRange(_ref) {
160
187
  max: maxValue,
161
188
  onChange: handleLeftInputChange(true),
162
189
  disabled: disabled
163
- }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.leftRangeInput))), /*#__PURE__*/React.createElement("input", _extends({
190
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.leftRangeInput), {
191
+ ref: leftRangeInputRef
192
+ })), /*#__PURE__*/React.createElement("input", _extends({
164
193
  className: cn('range-input', {
165
194
  right: true
166
195
  }),
@@ -170,9 +199,13 @@ var SliderRange = function SliderRange(_ref) {
170
199
  max: maxValue,
171
200
  onChange: handleRightInputChange(true),
172
201
  disabled: disabled
173
- }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.rightRangeInput))), /*#__PURE__*/React.createElement("div", {
202
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.rightRangeInput), {
203
+ ref: rightRangeInputRef
204
+ })), /*#__PURE__*/React.createElement("div", {
174
205
  className: cn('range-track'),
175
- onClick: handleRangeTrackClick
206
+ onPointerUp: handleRangeTrackPointerUp,
207
+ onPointerDown: handleRangeTrackPointerDown,
208
+ ref: rangeTrackRef
176
209
  }, /*#__PURE__*/React.createElement("div", {
177
210
  className: cn('range-track-inner'),
178
211
  ref: rangeTrackInnerRef
@@ -14,15 +14,20 @@
14
14
  margin-bottom: 8px;
15
15
  }
16
16
  .mfui-slider-ratio__display-values {
17
- display: -webkit-box;
18
- display: -ms-flexbox;
19
- display: flex;
17
+ display: grid;
18
+ grid-template-columns: 45% 45%;
20
19
  -webkit-box-pack: justify;
21
20
  -ms-flex-pack: justify;
22
21
  justify-content: space-between;
23
22
  width: 100%;
24
23
  margin-top: 8px;
25
24
  }
25
+ .mfui-slider-ratio__display-value_left {
26
+ margin-right: auto;
27
+ }
28
+ .mfui-slider-ratio__display-value_right {
29
+ margin-left: auto;
30
+ }
26
31
  .mfui-slider-ratio__range-container {
27
32
  position: relative;
28
33
  width: 100%;