@pingux/astro 2.124.0-alpha.1 → 2.124.0-alpha.3
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.
- package/lib/cjs/components/SliderField/SliderActiveTrack.js +3 -5
- package/lib/cjs/components/SliderField/SliderField.stories.d.ts +3 -1
- package/lib/cjs/components/SliderField/SliderField.stories.js +10 -7
- package/lib/cjs/components/SliderField/SliderField.test.js +51 -0
- package/lib/cjs/hooks/useSliderField/useSliderField.d.ts +10 -0
- package/lib/cjs/hooks/useSliderField/useSliderField.js +45 -2
- package/lib/cjs/hooks/useSliderField/useSliderField.test.js +71 -0
- package/lib/cjs/types/sliderField.d.ts +2 -0
- package/lib/components/SliderField/SliderActiveTrack.js +8 -10
- package/lib/components/SliderField/SliderField.stories.js +10 -7
- package/lib/components/SliderField/SliderField.test.js +51 -0
- package/lib/hooks/useSliderField/useSliderField.js +42 -1
- package/lib/hooks/useSliderField/useSliderField.test.js +71 -0
- package/package.json +1 -1
@@ -15,14 +15,13 @@ _Object$defineProperty(exports, "__esModule", {
|
|
15
15
|
value: true
|
16
16
|
});
|
17
17
|
exports["default"] = void 0;
|
18
|
-
var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/values"));
|
19
18
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
20
19
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
21
20
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
22
21
|
var _react = _interopRequireWildcard(require("react"));
|
23
22
|
var _index = require("../../index");
|
24
23
|
var _react2 = require("@emotion/react");
|
25
|
-
var _excluded = ["className", "isHorizontal", "isMultiThumb", "
|
24
|
+
var _excluded = ["className", "isHorizontal", "isMultiThumb", "length", "sx", "trackStart"];
|
26
25
|
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
27
26
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
28
27
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
@@ -31,11 +30,10 @@ var SliderActiveTrack = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref
|
|
31
30
|
var className = props.className,
|
32
31
|
isHorizontal = props.isHorizontal,
|
33
32
|
isMultiThumb = props.isMultiThumb,
|
34
|
-
|
33
|
+
length = props.length,
|
35
34
|
sx = props.sx,
|
35
|
+
trackStart = props.trackStart,
|
36
36
|
others = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
37
|
-
var length = isMultiThumb ? "".concat((0, _values["default"])(state)[1] - (0, _values["default"])(state)[0], "%") : "".concat((0, _values["default"])(state)[0], "%");
|
38
|
-
var trackStart = "".concat((0, _values["default"])(state)[0], "%");
|
39
37
|
var cssLenProp = isHorizontal ? 'width' : 'height';
|
40
38
|
var cssStartProp = isHorizontal ? 'left' : 'top';
|
41
39
|
return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
|
@@ -4,7 +4,9 @@ export default _default;
|
|
4
4
|
export declare const Default: ({ ...args }: {
|
5
5
|
[x: string]: any;
|
6
6
|
}) => React.JSX.Element;
|
7
|
-
export declare const Controlled: (
|
7
|
+
export declare const Controlled: ({ ...args }: {
|
8
|
+
[x: string]: any;
|
9
|
+
}) => React.JSX.Element;
|
8
10
|
export declare const Vertical: () => React.JSX.Element;
|
9
11
|
export declare const MultiThumb: () => React.JSX.Element;
|
10
12
|
export declare const ControlledMultiThumb: () => React.JSX.Element;
|
@@ -81,22 +81,22 @@ var loremText = 'Lorem ipsum';
|
|
81
81
|
var Default = function Default(_ref) {
|
82
82
|
var args = (0, _extends2["default"])({}, ((0, _objectDestructuringEmpty2["default"])(_ref), _ref));
|
83
83
|
return (0, _react2.jsx)(_index.SliderField, (0, _extends2["default"])({
|
84
|
-
label: loremText
|
85
|
-
defaultValue: 40
|
84
|
+
label: loremText
|
86
85
|
}, args));
|
87
86
|
};
|
88
87
|
exports.Default = Default;
|
89
|
-
var Controlled = function Controlled() {
|
90
|
-
var
|
88
|
+
var Controlled = function Controlled(_ref2) {
|
89
|
+
var args = (0, _extends2["default"])({}, ((0, _objectDestructuringEmpty2["default"])(_ref2), _ref2));
|
90
|
+
var _useState = (0, _react.useState)(75),
|
91
91
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
92
92
|
value = _useState2[0],
|
93
93
|
setValue = _useState2[1];
|
94
|
-
return (0, _react2.jsx)(_index.SliderField, {
|
94
|
+
return (0, _react2.jsx)(_index.SliderField, (0, _extends2["default"])({}, args, {
|
95
95
|
value: value,
|
96
96
|
onChange: setValue,
|
97
97
|
displayValue: "(".concat(value, "px)"),
|
98
98
|
label: loremText
|
99
|
-
});
|
99
|
+
}));
|
100
100
|
};
|
101
101
|
exports.Controlled = Controlled;
|
102
102
|
var Vertical = function Vertical() {
|
@@ -110,7 +110,10 @@ exports.Vertical = Vertical;
|
|
110
110
|
var MultiThumb = function MultiThumb() {
|
111
111
|
return (0, _react2.jsx)(_index.SliderField, {
|
112
112
|
label: loremText,
|
113
|
-
isMultiThumb: true
|
113
|
+
isMultiThumb: true,
|
114
|
+
defaultValue: [100, 180],
|
115
|
+
maxValue: 540,
|
116
|
+
minValue: 40
|
114
117
|
});
|
115
118
|
};
|
116
119
|
exports.MultiThumb = MultiThumb;
|
@@ -14,6 +14,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/hel
|
|
14
14
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
15
15
|
var _react = _interopRequireDefault(require("react"));
|
16
16
|
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
17
|
+
var _useSliderField = require("../../hooks/useSliderField/useSliderField");
|
17
18
|
var _testWrapper = require("../../utils/testUtils/testWrapper");
|
18
19
|
var _universalComponentTest = require("../../utils/testUtils/universalComponentTest");
|
19
20
|
var _universalFormSubmitTest = require("../../utils/testUtils/universalFormSubmitTest");
|
@@ -354,4 +355,54 @@ describe('SliderField Component', function () {
|
|
354
355
|
padding: '20px'
|
355
356
|
});
|
356
357
|
});
|
358
|
+
});
|
359
|
+
describe('getLengthValues', function () {
|
360
|
+
it('should calculate correct values for a single thumb slider', function () {
|
361
|
+
var minValue = 0;
|
362
|
+
var maxValue = 100;
|
363
|
+
var state = {
|
364
|
+
values: [50]
|
365
|
+
};
|
366
|
+
var result = (0, _useSliderField.getLengthValues)(minValue, maxValue, state);
|
367
|
+
expect(result).toEqual({
|
368
|
+
length: '50%',
|
369
|
+
trackStart: '50%'
|
370
|
+
});
|
371
|
+
});
|
372
|
+
it('should calculate correct values for a multi-thumb slider', function () {
|
373
|
+
var minValue = 0;
|
374
|
+
var maxValue = 100;
|
375
|
+
var state = {
|
376
|
+
values: [30, 70]
|
377
|
+
};
|
378
|
+
var result = (0, _useSliderField.getLengthValuesMultiThumb)(minValue, maxValue, state);
|
379
|
+
expect(result).toEqual({
|
380
|
+
length: '40%',
|
381
|
+
trackStart: '30%'
|
382
|
+
});
|
383
|
+
});
|
384
|
+
it('should handle edge cases where values are at the boundaries', function () {
|
385
|
+
var minValue = 0;
|
386
|
+
var maxValue = 100;
|
387
|
+
var state = {
|
388
|
+
values: [0, 100]
|
389
|
+
};
|
390
|
+
var result = (0, _useSliderField.getLengthValuesMultiThumb)(minValue, maxValue, state);
|
391
|
+
expect(result).toEqual({
|
392
|
+
length: '100%',
|
393
|
+
trackStart: '0%'
|
394
|
+
});
|
395
|
+
});
|
396
|
+
it('should handle cases where minValue and maxValue are not 0 and 100', function () {
|
397
|
+
var minValue = 50;
|
398
|
+
var maxValue = 150;
|
399
|
+
var state = {
|
400
|
+
values: [75, 125]
|
401
|
+
};
|
402
|
+
var result = (0, _useSliderField.getLengthValuesMultiThumb)(minValue, maxValue, state);
|
403
|
+
expect(result).toEqual({
|
404
|
+
length: '50%',
|
405
|
+
trackStart: '25%'
|
406
|
+
});
|
407
|
+
});
|
357
408
|
});
|
@@ -11,6 +11,14 @@ export declare const getDisplayValue: ({ displayValueProp, isMultiThumb, state,
|
|
11
11
|
isMultiThumb: any;
|
12
12
|
state: any;
|
13
13
|
}) => any;
|
14
|
+
export declare const getLengthValues: (minValue: any, maxValue: any, state: any) => {
|
15
|
+
length: string;
|
16
|
+
trackStart: string;
|
17
|
+
};
|
18
|
+
export declare const getLengthValuesMultiThumb: (minValue: any, maxValue: any, state: any) => {
|
19
|
+
length: string;
|
20
|
+
trackStart: string;
|
21
|
+
};
|
14
22
|
declare const useSliderField: (props: UseSliderFieldProps) => {
|
15
23
|
containerProps: {
|
16
24
|
sx: {
|
@@ -260,6 +268,8 @@ declare const useSliderField: (props: UseSliderFieldProps) => {
|
|
260
268
|
className: string;
|
261
269
|
};
|
262
270
|
sliderActiveTrackProps: {
|
271
|
+
length: string;
|
272
|
+
trackStart: string;
|
263
273
|
isMultiThumb: boolean;
|
264
274
|
className: string;
|
265
275
|
isHorizontal: boolean;
|
@@ -12,10 +12,12 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
|
|
12
12
|
_Object$defineProperty(exports, "__esModule", {
|
13
13
|
value: true
|
14
14
|
});
|
15
|
-
exports.getDisplayValue = exports.getDefaultValue = exports["default"] = void 0;
|
15
|
+
exports.getLengthValuesMultiThumb = exports.getLengthValues = exports.getDisplayValue = exports.getDefaultValue = exports["default"] = void 0;
|
16
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
17
17
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
18
18
|
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
|
19
|
+
var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/values"));
|
20
|
+
var _react = require("react");
|
19
21
|
var _reactAria = require("react-aria");
|
20
22
|
var _reactStately = require("react-stately");
|
21
23
|
var _ariaAttributes = require("../../utils/docUtils/ariaAttributes");
|
@@ -47,6 +49,29 @@ var getDisplayValue = function getDisplayValue(_ref2) {
|
|
47
49
|
return state.getThumbValueLabel(0);
|
48
50
|
};
|
49
51
|
exports.getDisplayValue = getDisplayValue;
|
52
|
+
var getLengthValues = function getLengthValues(minValue, maxValue, state) {
|
53
|
+
var total = maxValue - minValue;
|
54
|
+
var firstValue = ((0, _values["default"])(state)[0] - minValue) / total * 100;
|
55
|
+
var length = "".concat(firstValue, "%");
|
56
|
+
var trackStart = "".concat(firstValue, "%");
|
57
|
+
return {
|
58
|
+
length: length,
|
59
|
+
trackStart: trackStart
|
60
|
+
};
|
61
|
+
};
|
62
|
+
exports.getLengthValues = getLengthValues;
|
63
|
+
var getLengthValuesMultiThumb = function getLengthValuesMultiThumb(minValue, maxValue, state) {
|
64
|
+
var total = maxValue - minValue;
|
65
|
+
var firstValue = ((0, _values["default"])(state)[0] - minValue) / total * 100;
|
66
|
+
var secondValue = ((0, _values["default"])(state)[1] - (0, _values["default"])(state)[0]) / total * 100;
|
67
|
+
var length = "".concat(secondValue, "%");
|
68
|
+
var trackStart = "".concat(firstValue, "%");
|
69
|
+
return {
|
70
|
+
length: length,
|
71
|
+
trackStart: trackStart
|
72
|
+
};
|
73
|
+
};
|
74
|
+
exports.getLengthValuesMultiThumb = getLengthValuesMultiThumb;
|
50
75
|
var useSliderField = function useSliderField(props) {
|
51
76
|
var activeTrackProps = props.activeTrackProps,
|
52
77
|
autoFocus = props.autoFocus,
|
@@ -114,6 +139,23 @@ var useSliderField = function useSliderField(props) {
|
|
114
139
|
var _getAriaAttributeProp = (0, _ariaAttributes.getAriaAttributeProps)(others),
|
115
140
|
ariaProps = _getAriaAttributeProp.ariaProps,
|
116
141
|
nonAriaProps = _getAriaAttributeProp.nonAriaProps;
|
142
|
+
(0, _react.useEffect)(function () {
|
143
|
+
if ((0, _values["default"])(state)[0] < minValue) {
|
144
|
+
state.setThumbValue(0, minValue);
|
145
|
+
}
|
146
|
+
}, [minValue, state]);
|
147
|
+
(0, _react.useEffect)(function () {
|
148
|
+
if ((0, _values["default"])(state).length === 1) {
|
149
|
+
if ((0, _values["default"])(state)[0] > maxValue) {
|
150
|
+
state.setThumbValue(0, maxValue);
|
151
|
+
}
|
152
|
+
}
|
153
|
+
if ((0, _values["default"])(state).length === 2) {
|
154
|
+
if ((0, _values["default"])(state)[1] > maxValue) {
|
155
|
+
state.setThumbValue(1, maxValue);
|
156
|
+
}
|
157
|
+
}
|
158
|
+
}, [maxValue, state]);
|
117
159
|
var thumbOptions = _objectSpread(_objectSpread({}, thumbProps), {}, {
|
118
160
|
autoFocus: autoFocus,
|
119
161
|
isDisabled: isDisabled,
|
@@ -179,6 +221,7 @@ var useSliderField = function useSliderField(props) {
|
|
179
221
|
var mergedLabelProps = (0, _reactAria.mergeProps)(labelProps, raLabelProps, {
|
180
222
|
hintText: hintText
|
181
223
|
});
|
224
|
+
var trackDisplayValues = isMultiThumb ? getLengthValuesMultiThumb(minValue, maxValue, state) : getLengthValues(minValue, maxValue, state);
|
182
225
|
var labelContainerProps = {
|
183
226
|
label: label,
|
184
227
|
labelProps: mergedLabelProps,
|
@@ -196,7 +239,7 @@ var useSliderField = function useSliderField(props) {
|
|
196
239
|
isHorizontal: isHorizontal,
|
197
240
|
isVertical: isVertical,
|
198
241
|
state: state
|
199
|
-
});
|
242
|
+
}, trackDisplayValues);
|
200
243
|
var wrapperPropsSpread = _objectSpread(_objectSpread({}, wrapperProps), {}, {
|
201
244
|
className: wrapperClassName,
|
202
245
|
variant: 'slider.wrapper'
|
@@ -106,4 +106,75 @@ describe('useSliderField hook', function () {
|
|
106
106
|
defaultValue: 30
|
107
107
|
}));
|
108
108
|
});
|
109
|
+
});
|
110
|
+
describe('useSliderField - minValue and maxValue constraints', function () {
|
111
|
+
test('should set thumb value to minValue if it is less than minValue', function () {
|
112
|
+
var _renderHook3 = (0, _react.renderHook)(function (props) {
|
113
|
+
return (0, _useSliderField["default"])(props);
|
114
|
+
}, {
|
115
|
+
initialProps: _objectSpread(_objectSpread({}, defaultProps), {}, {
|
116
|
+
minValue: 20,
|
117
|
+
defaultValue: 10
|
118
|
+
})
|
119
|
+
}),
|
120
|
+
result = _renderHook3.result,
|
121
|
+
rerender = _renderHook3.rerender;
|
122
|
+
|
123
|
+
// Verify that the thumb value is adjusted to minValue
|
124
|
+
expect((0, _values["default"])(result.current.sliderActiveTrackProps.state)[0]).toEqual(20);
|
125
|
+
|
126
|
+
// Update minValue and verify adjustment
|
127
|
+
rerender(_objectSpread(_objectSpread({}, defaultProps), {}, {
|
128
|
+
defaultValue: 10,
|
129
|
+
minValue: 30
|
130
|
+
}));
|
131
|
+
expect((0, _values["default"])(result.current.sliderActiveTrackProps.state)[0]).toEqual(30);
|
132
|
+
});
|
133
|
+
test('should set thumb value to maxValue if it exceeds maxValue', function () {
|
134
|
+
var _renderHook4 = (0, _react.renderHook)(function (props) {
|
135
|
+
return (0, _useSliderField["default"])(props);
|
136
|
+
}, {
|
137
|
+
initialProps: _objectSpread(_objectSpread({}, defaultProps), {}, {
|
138
|
+
maxValue: 80,
|
139
|
+
defaultValue: 90
|
140
|
+
})
|
141
|
+
}),
|
142
|
+
result = _renderHook4.result,
|
143
|
+
rerender = _renderHook4.rerender;
|
144
|
+
|
145
|
+
// Verify that the thumb value is adjusted to maxValue
|
146
|
+
expect((0, _values["default"])(result.current.sliderActiveTrackProps.state)[0]).toEqual(80);
|
147
|
+
|
148
|
+
// Update maxValue and verify adjustment
|
149
|
+
rerender(_objectSpread(_objectSpread({}, defaultProps), {}, {
|
150
|
+
defaultValue: 10,
|
151
|
+
maxValue: 70
|
152
|
+
}));
|
153
|
+
expect((0, _values["default"])(result.current.sliderActiveTrackProps.state)[0]).toEqual(70);
|
154
|
+
});
|
155
|
+
test('should handle multi-thumb sliders with minValue and maxValue constraints', function () {
|
156
|
+
var _renderHook5 = (0, _react.renderHook)(function (props) {
|
157
|
+
return (0, _useSliderField["default"])(props);
|
158
|
+
}, {
|
159
|
+
initialProps: _objectSpread(_objectSpread({}, defaultProps), {}, {
|
160
|
+
isMultiThumb: true,
|
161
|
+
minValue: 20,
|
162
|
+
maxValue: 80,
|
163
|
+
defaultValue: [10, 90]
|
164
|
+
})
|
165
|
+
}),
|
166
|
+
result = _renderHook5.result,
|
167
|
+
rerender = _renderHook5.rerender;
|
168
|
+
|
169
|
+
// Verify that both thumb values are adjusted to minValue and maxValue
|
170
|
+
expect((0, _values["default"])(result.current.sliderActiveTrackProps.state)).toEqual([20, 80]);
|
171
|
+
|
172
|
+
// Update minValue and maxValue and verify adjustment
|
173
|
+
rerender(_objectSpread(_objectSpread({}, defaultProps), {}, {
|
174
|
+
isMultiThumb: true,
|
175
|
+
minValue: 30,
|
176
|
+
maxValue: 70
|
177
|
+
}));
|
178
|
+
expect((0, _values["default"])(result.current.sliderActiveTrackProps.state)).toEqual([30, 70]);
|
179
|
+
});
|
109
180
|
});
|
@@ -38,8 +38,10 @@ export interface SliderActiveTrackProps {
|
|
38
38
|
isHorizontal?: boolean;
|
39
39
|
isMultiThumb?: boolean;
|
40
40
|
isVertical?: boolean;
|
41
|
+
length: string;
|
41
42
|
state: SliderState;
|
42
43
|
sx?: ThemeUICSSObject | object;
|
44
|
+
trackStart: string;
|
43
45
|
}
|
44
46
|
export interface SliderFieldProps {
|
45
47
|
activeTrackProps?: BoxProps;
|
@@ -1,10 +1,3 @@
|
|
1
|
-
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
2
|
-
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
3
|
-
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
4
|
-
var _excluded = ["className", "isHorizontal", "isMultiThumb", "state", "sx"];
|
5
|
-
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
6
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
7
|
-
import _valuesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/values";
|
8
1
|
import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
|
9
2
|
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
|
10
3
|
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
@@ -13,6 +6,12 @@ import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/inst
|
|
13
6
|
import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
|
14
7
|
import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
|
15
8
|
import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
|
9
|
+
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
10
|
+
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
11
|
+
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
12
|
+
var _excluded = ["className", "isHorizontal", "isMultiThumb", "length", "sx", "trackStart"];
|
13
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
14
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
16
15
|
import React, { forwardRef } from 'react';
|
17
16
|
import { Box } from '../../index';
|
18
17
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
@@ -20,11 +19,10 @@ var SliderActiveTrack = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
20
19
|
var className = props.className,
|
21
20
|
isHorizontal = props.isHorizontal,
|
22
21
|
isMultiThumb = props.isMultiThumb,
|
23
|
-
|
22
|
+
length = props.length,
|
24
23
|
sx = props.sx,
|
24
|
+
trackStart = props.trackStart,
|
25
25
|
others = _objectWithoutProperties(props, _excluded);
|
26
|
-
var length = isMultiThumb ? "".concat(_valuesInstanceProperty(state)[1] - _valuesInstanceProperty(state)[0], "%") : "".concat(_valuesInstanceProperty(state)[0], "%");
|
27
|
-
var trackStart = "".concat(_valuesInstanceProperty(state)[0], "%");
|
28
26
|
var cssLenProp = isHorizontal ? 'width' : 'height';
|
29
27
|
var cssStartProp = isHorizontal ? 'left' : 'top';
|
30
28
|
return ___EmotionJSX(Box, _extends({
|
@@ -67,21 +67,21 @@ var loremText = 'Lorem ipsum';
|
|
67
67
|
export var Default = function Default(_ref) {
|
68
68
|
var args = _extends({}, (_objectDestructuringEmpty(_ref), _ref));
|
69
69
|
return ___EmotionJSX(SliderField, _extends({
|
70
|
-
label: loremText
|
71
|
-
defaultValue: 40
|
70
|
+
label: loremText
|
72
71
|
}, args));
|
73
72
|
};
|
74
|
-
export var Controlled = function Controlled() {
|
75
|
-
var
|
73
|
+
export var Controlled = function Controlled(_ref2) {
|
74
|
+
var args = _extends({}, (_objectDestructuringEmpty(_ref2), _ref2));
|
75
|
+
var _useState = useState(75),
|
76
76
|
_useState2 = _slicedToArray(_useState, 2),
|
77
77
|
value = _useState2[0],
|
78
78
|
setValue = _useState2[1];
|
79
|
-
return ___EmotionJSX(SliderField, {
|
79
|
+
return ___EmotionJSX(SliderField, _extends({}, args, {
|
80
80
|
value: value,
|
81
81
|
onChange: setValue,
|
82
82
|
displayValue: "(".concat(value, "px)"),
|
83
83
|
label: loremText
|
84
|
-
});
|
84
|
+
}));
|
85
85
|
};
|
86
86
|
export var Vertical = function Vertical() {
|
87
87
|
return ___EmotionJSX(SliderField, {
|
@@ -93,7 +93,10 @@ export var Vertical = function Vertical() {
|
|
93
93
|
export var MultiThumb = function MultiThumb() {
|
94
94
|
return ___EmotionJSX(SliderField, {
|
95
95
|
label: loremText,
|
96
|
-
isMultiThumb: true
|
96
|
+
isMultiThumb: true,
|
97
|
+
defaultValue: [100, 180],
|
98
|
+
maxValue: 540,
|
99
|
+
minValue: 40
|
97
100
|
});
|
98
101
|
};
|
99
102
|
export var ControlledMultiThumb = function ControlledMultiThumb() {
|
@@ -13,6 +13,7 @@ function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (
|
|
13
13
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
14
14
|
import React from 'react';
|
15
15
|
import userEvent from '@testing-library/user-event';
|
16
|
+
import { getLengthValues, getLengthValuesMultiThumb } from '../../hooks/useSliderField/useSliderField';
|
16
17
|
import { fireEvent, render, screen } from '../../utils/testUtils/testWrapper';
|
17
18
|
import { universalComponentTests } from '../../utils/testUtils/universalComponentTest';
|
18
19
|
import { universalFieldComponentTests } from '../../utils/testUtils/universalFormSubmitTest';
|
@@ -351,4 +352,54 @@ describe('SliderField Component', function () {
|
|
351
352
|
padding: '20px'
|
352
353
|
});
|
353
354
|
});
|
355
|
+
});
|
356
|
+
describe('getLengthValues', function () {
|
357
|
+
it('should calculate correct values for a single thumb slider', function () {
|
358
|
+
var minValue = 0;
|
359
|
+
var maxValue = 100;
|
360
|
+
var state = {
|
361
|
+
values: [50]
|
362
|
+
};
|
363
|
+
var result = getLengthValues(minValue, maxValue, state);
|
364
|
+
expect(result).toEqual({
|
365
|
+
length: '50%',
|
366
|
+
trackStart: '50%'
|
367
|
+
});
|
368
|
+
});
|
369
|
+
it('should calculate correct values for a multi-thumb slider', function () {
|
370
|
+
var minValue = 0;
|
371
|
+
var maxValue = 100;
|
372
|
+
var state = {
|
373
|
+
values: [30, 70]
|
374
|
+
};
|
375
|
+
var result = getLengthValuesMultiThumb(minValue, maxValue, state);
|
376
|
+
expect(result).toEqual({
|
377
|
+
length: '40%',
|
378
|
+
trackStart: '30%'
|
379
|
+
});
|
380
|
+
});
|
381
|
+
it('should handle edge cases where values are at the boundaries', function () {
|
382
|
+
var minValue = 0;
|
383
|
+
var maxValue = 100;
|
384
|
+
var state = {
|
385
|
+
values: [0, 100]
|
386
|
+
};
|
387
|
+
var result = getLengthValuesMultiThumb(minValue, maxValue, state);
|
388
|
+
expect(result).toEqual({
|
389
|
+
length: '100%',
|
390
|
+
trackStart: '0%'
|
391
|
+
});
|
392
|
+
});
|
393
|
+
it('should handle cases where minValue and maxValue are not 0 and 100', function () {
|
394
|
+
var minValue = 50;
|
395
|
+
var maxValue = 150;
|
396
|
+
var state = {
|
397
|
+
values: [75, 125]
|
398
|
+
};
|
399
|
+
var result = getLengthValuesMultiThumb(minValue, maxValue, state);
|
400
|
+
expect(result).toEqual({
|
401
|
+
length: '50%',
|
402
|
+
trackStart: '25%'
|
403
|
+
});
|
404
|
+
});
|
354
405
|
});
|
@@ -4,6 +4,7 @@ var _excluded = ["activeTrackProps", "autoFocus", "className", "defaultValue", "
|
|
4
4
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
5
5
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context2, _context3; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(source), !0)).call(_context2, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context3 = ownKeys(Object(source))).call(_context3, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
6
6
|
import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
|
7
|
+
import _valuesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/values";
|
7
8
|
import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
|
8
9
|
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
|
9
10
|
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
@@ -12,6 +13,7 @@ import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/inst
|
|
12
13
|
import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
|
13
14
|
import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
|
14
15
|
import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
|
16
|
+
import { useEffect } from 'react';
|
15
17
|
import { mergeProps, useNumberFormatter, useSlider } from 'react-aria';
|
16
18
|
import { useSliderState } from 'react-stately';
|
17
19
|
import { getAriaAttributeProps } from '../../utils/docUtils/ariaAttributes';
|
@@ -38,6 +40,27 @@ export var getDisplayValue = function getDisplayValue(_ref2) {
|
|
38
40
|
}
|
39
41
|
return state.getThumbValueLabel(0);
|
40
42
|
};
|
43
|
+
export var getLengthValues = function getLengthValues(minValue, maxValue, state) {
|
44
|
+
var total = maxValue - minValue;
|
45
|
+
var firstValue = (_valuesInstanceProperty(state)[0] - minValue) / total * 100;
|
46
|
+
var length = "".concat(firstValue, "%");
|
47
|
+
var trackStart = "".concat(firstValue, "%");
|
48
|
+
return {
|
49
|
+
length: length,
|
50
|
+
trackStart: trackStart
|
51
|
+
};
|
52
|
+
};
|
53
|
+
export var getLengthValuesMultiThumb = function getLengthValuesMultiThumb(minValue, maxValue, state) {
|
54
|
+
var total = maxValue - minValue;
|
55
|
+
var firstValue = (_valuesInstanceProperty(state)[0] - minValue) / total * 100;
|
56
|
+
var secondValue = (_valuesInstanceProperty(state)[1] - _valuesInstanceProperty(state)[0]) / total * 100;
|
57
|
+
var length = "".concat(secondValue, "%");
|
58
|
+
var trackStart = "".concat(firstValue, "%");
|
59
|
+
return {
|
60
|
+
length: length,
|
61
|
+
trackStart: trackStart
|
62
|
+
};
|
63
|
+
};
|
41
64
|
var useSliderField = function useSliderField(props) {
|
42
65
|
var activeTrackProps = props.activeTrackProps,
|
43
66
|
autoFocus = props.autoFocus,
|
@@ -105,6 +128,23 @@ var useSliderField = function useSliderField(props) {
|
|
105
128
|
var _getAriaAttributeProp = getAriaAttributeProps(others),
|
106
129
|
ariaProps = _getAriaAttributeProp.ariaProps,
|
107
130
|
nonAriaProps = _getAriaAttributeProp.nonAriaProps;
|
131
|
+
useEffect(function () {
|
132
|
+
if (_valuesInstanceProperty(state)[0] < minValue) {
|
133
|
+
state.setThumbValue(0, minValue);
|
134
|
+
}
|
135
|
+
}, [minValue, state]);
|
136
|
+
useEffect(function () {
|
137
|
+
if (_valuesInstanceProperty(state).length === 1) {
|
138
|
+
if (_valuesInstanceProperty(state)[0] > maxValue) {
|
139
|
+
state.setThumbValue(0, maxValue);
|
140
|
+
}
|
141
|
+
}
|
142
|
+
if (_valuesInstanceProperty(state).length === 2) {
|
143
|
+
if (_valuesInstanceProperty(state)[1] > maxValue) {
|
144
|
+
state.setThumbValue(1, maxValue);
|
145
|
+
}
|
146
|
+
}
|
147
|
+
}, [maxValue, state]);
|
108
148
|
var thumbOptions = _objectSpread(_objectSpread({}, thumbProps), {}, {
|
109
149
|
autoFocus: autoFocus,
|
110
150
|
isDisabled: isDisabled,
|
@@ -170,6 +210,7 @@ var useSliderField = function useSliderField(props) {
|
|
170
210
|
var mergedLabelProps = mergeProps(labelProps, raLabelProps, {
|
171
211
|
hintText: hintText
|
172
212
|
});
|
213
|
+
var trackDisplayValues = isMultiThumb ? getLengthValuesMultiThumb(minValue, maxValue, state) : getLengthValues(minValue, maxValue, state);
|
173
214
|
var labelContainerProps = {
|
174
215
|
label: label,
|
175
216
|
labelProps: mergedLabelProps,
|
@@ -187,7 +228,7 @@ var useSliderField = function useSliderField(props) {
|
|
187
228
|
isHorizontal: isHorizontal,
|
188
229
|
isVertical: isVertical,
|
189
230
|
state: state
|
190
|
-
});
|
231
|
+
}, trackDisplayValues);
|
191
232
|
var wrapperPropsSpread = _objectSpread(_objectSpread({}, wrapperProps), {}, {
|
192
233
|
className: wrapperClassName,
|
193
234
|
variant: 'slider.wrapper'
|
@@ -99,4 +99,75 @@ describe('useSliderField hook', function () {
|
|
99
99
|
defaultValue: 30
|
100
100
|
}));
|
101
101
|
});
|
102
|
+
});
|
103
|
+
describe('useSliderField - minValue and maxValue constraints', function () {
|
104
|
+
test('should set thumb value to minValue if it is less than minValue', function () {
|
105
|
+
var _renderHook3 = renderHook(function (props) {
|
106
|
+
return useSliderField(props);
|
107
|
+
}, {
|
108
|
+
initialProps: _objectSpread(_objectSpread({}, defaultProps), {}, {
|
109
|
+
minValue: 20,
|
110
|
+
defaultValue: 10
|
111
|
+
})
|
112
|
+
}),
|
113
|
+
result = _renderHook3.result,
|
114
|
+
rerender = _renderHook3.rerender;
|
115
|
+
|
116
|
+
// Verify that the thumb value is adjusted to minValue
|
117
|
+
expect(_valuesInstanceProperty(result.current.sliderActiveTrackProps.state)[0]).toEqual(20);
|
118
|
+
|
119
|
+
// Update minValue and verify adjustment
|
120
|
+
rerender(_objectSpread(_objectSpread({}, defaultProps), {}, {
|
121
|
+
defaultValue: 10,
|
122
|
+
minValue: 30
|
123
|
+
}));
|
124
|
+
expect(_valuesInstanceProperty(result.current.sliderActiveTrackProps.state)[0]).toEqual(30);
|
125
|
+
});
|
126
|
+
test('should set thumb value to maxValue if it exceeds maxValue', function () {
|
127
|
+
var _renderHook4 = renderHook(function (props) {
|
128
|
+
return useSliderField(props);
|
129
|
+
}, {
|
130
|
+
initialProps: _objectSpread(_objectSpread({}, defaultProps), {}, {
|
131
|
+
maxValue: 80,
|
132
|
+
defaultValue: 90
|
133
|
+
})
|
134
|
+
}),
|
135
|
+
result = _renderHook4.result,
|
136
|
+
rerender = _renderHook4.rerender;
|
137
|
+
|
138
|
+
// Verify that the thumb value is adjusted to maxValue
|
139
|
+
expect(_valuesInstanceProperty(result.current.sliderActiveTrackProps.state)[0]).toEqual(80);
|
140
|
+
|
141
|
+
// Update maxValue and verify adjustment
|
142
|
+
rerender(_objectSpread(_objectSpread({}, defaultProps), {}, {
|
143
|
+
defaultValue: 10,
|
144
|
+
maxValue: 70
|
145
|
+
}));
|
146
|
+
expect(_valuesInstanceProperty(result.current.sliderActiveTrackProps.state)[0]).toEqual(70);
|
147
|
+
});
|
148
|
+
test('should handle multi-thumb sliders with minValue and maxValue constraints', function () {
|
149
|
+
var _renderHook5 = renderHook(function (props) {
|
150
|
+
return useSliderField(props);
|
151
|
+
}, {
|
152
|
+
initialProps: _objectSpread(_objectSpread({}, defaultProps), {}, {
|
153
|
+
isMultiThumb: true,
|
154
|
+
minValue: 20,
|
155
|
+
maxValue: 80,
|
156
|
+
defaultValue: [10, 90]
|
157
|
+
})
|
158
|
+
}),
|
159
|
+
result = _renderHook5.result,
|
160
|
+
rerender = _renderHook5.rerender;
|
161
|
+
|
162
|
+
// Verify that both thumb values are adjusted to minValue and maxValue
|
163
|
+
expect(_valuesInstanceProperty(result.current.sliderActiveTrackProps.state)).toEqual([20, 80]);
|
164
|
+
|
165
|
+
// Update minValue and maxValue and verify adjustment
|
166
|
+
rerender(_objectSpread(_objectSpread({}, defaultProps), {}, {
|
167
|
+
isMultiThumb: true,
|
168
|
+
minValue: 30,
|
169
|
+
maxValue: 70
|
170
|
+
}));
|
171
|
+
expect(_valuesInstanceProperty(result.current.sliderActiveTrackProps.state)).toEqual([30, 70]);
|
172
|
+
});
|
102
173
|
});
|