1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 | var _typeof3 = require("@babel/runtime/helpers/typeof");
|
5 | Object.defineProperty(exports, "__esModule", {
|
6 | value: true
|
7 | });
|
8 | exports.default = void 0;
|
9 | var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
10 | var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
11 | var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
12 | var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
13 | var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
14 | var _classnames = _interopRequireDefault(require("classnames"));
|
15 | var _useMergedState3 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
|
16 | var _isEqual = _interopRequireDefault(require("rc-util/lib/isEqual"));
|
17 | var _warning = _interopRequireDefault(require("rc-util/lib/warning"));
|
18 | var React = _interopRequireWildcard(require("react"));
|
19 | var _Handles = _interopRequireDefault(require("./Handles"));
|
20 | var _Marks = _interopRequireDefault(require("./Marks"));
|
21 | var _Steps = _interopRequireDefault(require("./Steps"));
|
22 | var _Tracks = _interopRequireDefault(require("./Tracks"));
|
23 | var _context = _interopRequireDefault(require("./context"));
|
24 | var _useDrag3 = _interopRequireDefault(require("./hooks/useDrag"));
|
25 | var _useOffset3 = _interopRequireDefault(require("./hooks/useOffset"));
|
26 | function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
27 | function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 | var Slider = React.forwardRef(function (props, ref) {
|
43 | var _props$prefixCls = props.prefixCls,
|
44 | prefixCls = _props$prefixCls === void 0 ? 'rc-slider' : _props$prefixCls,
|
45 | className = props.className,
|
46 | style = props.style,
|
47 | classNames = props.classNames,
|
48 | styles = props.styles,
|
49 | _props$disabled = props.disabled,
|
50 | disabled = _props$disabled === void 0 ? false : _props$disabled,
|
51 | _props$keyboard = props.keyboard,
|
52 | keyboard = _props$keyboard === void 0 ? true : _props$keyboard,
|
53 | autoFocus = props.autoFocus,
|
54 | onFocus = props.onFocus,
|
55 | onBlur = props.onBlur,
|
56 | _props$min = props.min,
|
57 | min = _props$min === void 0 ? 0 : _props$min,
|
58 | _props$max = props.max,
|
59 | max = _props$max === void 0 ? 100 : _props$max,
|
60 | _props$step = props.step,
|
61 | step = _props$step === void 0 ? 1 : _props$step,
|
62 | value = props.value,
|
63 | defaultValue = props.defaultValue,
|
64 | range = props.range,
|
65 | count = props.count,
|
66 | onChange = props.onChange,
|
67 | onBeforeChange = props.onBeforeChange,
|
68 | onAfterChange = props.onAfterChange,
|
69 | onChangeComplete = props.onChangeComplete,
|
70 | _props$allowCross = props.allowCross,
|
71 | allowCross = _props$allowCross === void 0 ? true : _props$allowCross,
|
72 | _props$pushable = props.pushable,
|
73 | pushable = _props$pushable === void 0 ? false : _props$pushable,
|
74 | draggableTrack = props.draggableTrack,
|
75 | reverse = props.reverse,
|
76 | vertical = props.vertical,
|
77 | _props$included = props.included,
|
78 | included = _props$included === void 0 ? true : _props$included,
|
79 | startPoint = props.startPoint,
|
80 | trackStyle = props.trackStyle,
|
81 | handleStyle = props.handleStyle,
|
82 | railStyle = props.railStyle,
|
83 | dotStyle = props.dotStyle,
|
84 | activeDotStyle = props.activeDotStyle,
|
85 | marks = props.marks,
|
86 | dots = props.dots,
|
87 | handleRender = props.handleRender,
|
88 | activeHandleRender = props.activeHandleRender,
|
89 | _props$tabIndex = props.tabIndex,
|
90 | tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,
|
91 | ariaLabelForHandle = props.ariaLabelForHandle,
|
92 | ariaLabelledByForHandle = props.ariaLabelledByForHandle,
|
93 | ariaValueTextFormatterForHandle = props.ariaValueTextFormatterForHandle;
|
94 | var handlesRef = React.useRef(null);
|
95 | var containerRef = React.useRef(null);
|
96 | var direction = React.useMemo(function () {
|
97 | if (vertical) {
|
98 | return reverse ? 'ttb' : 'btt';
|
99 | }
|
100 | return reverse ? 'rtl' : 'ltr';
|
101 | }, [reverse, vertical]);
|
102 |
|
103 |
|
104 | var mergedMin = React.useMemo(function () {
|
105 | return isFinite(min) ? min : 0;
|
106 | }, [min]);
|
107 | var mergedMax = React.useMemo(function () {
|
108 | return isFinite(max) ? max : 100;
|
109 | }, [max]);
|
110 |
|
111 |
|
112 | var mergedStep = React.useMemo(function () {
|
113 | return step !== null && step <= 0 ? 1 : step;
|
114 | }, [step]);
|
115 |
|
116 |
|
117 | var mergedPush = React.useMemo(function () {
|
118 | if (typeof pushable === 'boolean') {
|
119 | return pushable ? mergedStep : false;
|
120 | }
|
121 | return pushable >= 0 ? pushable : false;
|
122 | }, [pushable, mergedStep]);
|
123 |
|
124 |
|
125 | var markList = React.useMemo(function () {
|
126 | return Object.keys(marks || {}).map(function (key) {
|
127 | var mark = marks[key];
|
128 | var markObj = {
|
129 | value: Number(key)
|
130 | };
|
131 | if (mark && (0, _typeof2.default)(mark) === 'object' && ! React.isValidElement(mark) && ('label' in mark || 'style' in mark)) {
|
132 | markObj.style = mark.style;
|
133 | markObj.label = mark.label;
|
134 | } else {
|
135 | markObj.label = mark;
|
136 | }
|
137 | return markObj;
|
138 | }).filter(function (_ref) {
|
139 | var label = _ref.label;
|
140 | return label || typeof label === 'number';
|
141 | }).sort(function (a, b) {
|
142 | return a.value - b.value;
|
143 | });
|
144 | }, [marks]);
|
145 |
|
146 |
|
147 | var _useOffset = (0, _useOffset3.default)(mergedMin, mergedMax, mergedStep, markList, allowCross, mergedPush),
|
148 | _useOffset2 = (0, _slicedToArray2.default)(_useOffset, 2),
|
149 | formatValue = _useOffset2[0],
|
150 | offsetValues = _useOffset2[1];
|
151 |
|
152 |
|
153 | var _useMergedState = (0, _useMergedState3.default)(defaultValue, {
|
154 | value: value
|
155 | }),
|
156 | _useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
|
157 | mergedValue = _useMergedState2[0],
|
158 | setValue = _useMergedState2[1];
|
159 | var rawValues = React.useMemo(function () {
|
160 | var valueList = mergedValue === null || mergedValue === undefined ? [] : Array.isArray(mergedValue) ? mergedValue : [mergedValue];
|
161 | var _valueList = (0, _slicedToArray2.default)(valueList, 1),
|
162 | _valueList$ = _valueList[0],
|
163 | val0 = _valueList$ === void 0 ? mergedMin : _valueList$;
|
164 | var returnValues = mergedValue === null ? [] : [val0];
|
165 |
|
166 |
|
167 | if (range) {
|
168 | returnValues = (0, _toConsumableArray2.default)(valueList);
|
169 |
|
170 |
|
171 | if (count || mergedValue === undefined) {
|
172 | var pointCount = count >= 0 ? count + 1 : 2;
|
173 | returnValues = returnValues.slice(0, pointCount);
|
174 |
|
175 |
|
176 | while (returnValues.length < pointCount) {
|
177 | var _returnValues;
|
178 | returnValues.push((_returnValues = returnValues[returnValues.length - 1]) !== null && _returnValues !== void 0 ? _returnValues : mergedMin);
|
179 | }
|
180 | }
|
181 | returnValues.sort(function (a, b) {
|
182 | return a - b;
|
183 | });
|
184 | }
|
185 |
|
186 |
|
187 | returnValues.forEach(function (val, index) {
|
188 | returnValues[index] = formatValue(val);
|
189 | });
|
190 | return returnValues;
|
191 | }, [mergedValue, range, mergedMin, count, formatValue]);
|
192 |
|
193 |
|
194 | var rawValuesRef = React.useRef(rawValues);
|
195 | rawValuesRef.current = rawValues;
|
196 | var getTriggerValue = function getTriggerValue(triggerValues) {
|
197 | return range ? triggerValues : triggerValues[0];
|
198 | };
|
199 | var triggerChange = function triggerChange(nextValues) {
|
200 |
|
201 | var cloneNextValues = (0, _toConsumableArray2.default)(nextValues).sort(function (a, b) {
|
202 | return a - b;
|
203 | });
|
204 |
|
205 |
|
206 | if (onChange && !(0, _isEqual.default)(cloneNextValues, rawValuesRef.current, true)) {
|
207 | onChange(getTriggerValue(cloneNextValues));
|
208 | }
|
209 |
|
210 |
|
211 | setValue(cloneNextValues);
|
212 | };
|
213 | var finishChange = function finishChange() {
|
214 | var finishValue = getTriggerValue(rawValuesRef.current);
|
215 | onAfterChange === null || onAfterChange === void 0 || onAfterChange(finishValue);
|
216 | (0, _warning.default)(!onAfterChange, '[rc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.');
|
217 | onChangeComplete === null || onChangeComplete === void 0 || onChangeComplete(finishValue);
|
218 | };
|
219 | var _useDrag = (0, _useDrag3.default)(containerRef, direction, rawValues, mergedMin, mergedMax, formatValue, triggerChange, finishChange, offsetValues),
|
220 | _useDrag2 = (0, _slicedToArray2.default)(_useDrag, 4),
|
221 | draggingIndex = _useDrag2[0],
|
222 | draggingValue = _useDrag2[1],
|
223 | cacheValues = _useDrag2[2],
|
224 | onStartDrag = _useDrag2[3];
|
225 | var changeToCloseValue = function changeToCloseValue(newValue, e) {
|
226 | if (!disabled) {
|
227 | var valueIndex = 0;
|
228 | var valueDist = mergedMax - mergedMin;
|
229 | rawValues.forEach(function (val, index) {
|
230 | var dist = Math.abs(newValue - val);
|
231 | if (dist <= valueDist) {
|
232 | valueDist = dist;
|
233 | valueIndex = index;
|
234 | }
|
235 | });
|
236 |
|
237 |
|
238 | var cloneNextValues = (0, _toConsumableArray2.default)(rawValues);
|
239 | cloneNextValues[valueIndex] = newValue;
|
240 |
|
241 |
|
242 | if (range && !rawValues.length && count === undefined) {
|
243 | cloneNextValues.push(newValue);
|
244 | }
|
245 | onBeforeChange === null || onBeforeChange === void 0 || onBeforeChange(getTriggerValue(cloneNextValues));
|
246 | triggerChange(cloneNextValues);
|
247 | if (e) {
|
248 | var _document$activeEleme, _document$activeEleme2;
|
249 | (_document$activeEleme = document.activeElement) === null || _document$activeEleme === void 0 || (_document$activeEleme2 = _document$activeEleme.blur) === null || _document$activeEleme2 === void 0 || _document$activeEleme2.call(_document$activeEleme);
|
250 | handlesRef.current.focus(valueIndex);
|
251 | onStartDrag(e, valueIndex, cloneNextValues);
|
252 | }
|
253 | }
|
254 | };
|
255 |
|
256 |
|
257 | var onSliderMouseDown = function onSliderMouseDown(e) {
|
258 | e.preventDefault();
|
259 | var _containerRef$current = containerRef.current.getBoundingClientRect(),
|
260 | width = _containerRef$current.width,
|
261 | height = _containerRef$current.height,
|
262 | left = _containerRef$current.left,
|
263 | top = _containerRef$current.top,
|
264 | bottom = _containerRef$current.bottom,
|
265 | right = _containerRef$current.right;
|
266 | var clientX = e.clientX,
|
267 | clientY = e.clientY;
|
268 | var percent;
|
269 | switch (direction) {
|
270 | case 'btt':
|
271 | percent = (bottom - clientY) / height;
|
272 | break;
|
273 | case 'ttb':
|
274 | percent = (clientY - top) / height;
|
275 | break;
|
276 | case 'rtl':
|
277 | percent = (right - clientX) / width;
|
278 | break;
|
279 | default:
|
280 | percent = (clientX - left) / width;
|
281 | }
|
282 | var nextValue = mergedMin + percent * (mergedMax - mergedMin);
|
283 | changeToCloseValue(formatValue(nextValue), e);
|
284 | };
|
285 |
|
286 |
|
287 | var _React$useState = React.useState(null),
|
288 | _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
289 | keyboardValue = _React$useState2[0],
|
290 | setKeyboardValue = _React$useState2[1];
|
291 | var onHandleOffsetChange = function onHandleOffsetChange(offset, valueIndex) {
|
292 | if (!disabled) {
|
293 | var next = offsetValues(rawValues, offset, valueIndex);
|
294 | onBeforeChange === null || onBeforeChange === void 0 || onBeforeChange(getTriggerValue(rawValues));
|
295 | triggerChange(next.values);
|
296 | setKeyboardValue(next.value);
|
297 | }
|
298 | };
|
299 | React.useEffect(function () {
|
300 | if (keyboardValue !== null) {
|
301 | var valueIndex = rawValues.indexOf(keyboardValue);
|
302 | if (valueIndex >= 0) {
|
303 | handlesRef.current.focus(valueIndex);
|
304 | }
|
305 | }
|
306 | setKeyboardValue(null);
|
307 | }, [keyboardValue]);
|
308 |
|
309 |
|
310 | var mergedDraggableTrack = React.useMemo(function () {
|
311 | if (draggableTrack && mergedStep === null) {
|
312 | if (process.env.NODE_ENV !== 'production') {
|
313 | (0, _warning.default)(false, '`draggableTrack` is not supported when `step` is `null`.');
|
314 | }
|
315 | return false;
|
316 | }
|
317 | return draggableTrack;
|
318 | }, [draggableTrack, mergedStep]);
|
319 | var onStartMove = function onStartMove(e, valueIndex) {
|
320 | onStartDrag(e, valueIndex);
|
321 | onBeforeChange === null || onBeforeChange === void 0 || onBeforeChange(getTriggerValue(rawValuesRef.current));
|
322 | };
|
323 |
|
324 |
|
325 | var dragging = draggingIndex !== -1;
|
326 | React.useEffect(function () {
|
327 | if (!dragging) {
|
328 | var valueIndex = rawValues.lastIndexOf(draggingValue);
|
329 | handlesRef.current.focus(valueIndex);
|
330 | }
|
331 | }, [dragging]);
|
332 |
|
333 |
|
334 | var sortedCacheValues = React.useMemo(function () {
|
335 | return (0, _toConsumableArray2.default)(cacheValues).sort(function (a, b) {
|
336 | return a - b;
|
337 | });
|
338 | }, [cacheValues]);
|
339 |
|
340 |
|
341 |
|
342 | var _React$useMemo = React.useMemo(function () {
|
343 | if (!range) {
|
344 | return [mergedMin, sortedCacheValues[0]];
|
345 | }
|
346 | return [sortedCacheValues[0], sortedCacheValues[sortedCacheValues.length - 1]];
|
347 | }, [sortedCacheValues, range, mergedMin]),
|
348 | _React$useMemo2 = (0, _slicedToArray2.default)(_React$useMemo, 2),
|
349 | includedStart = _React$useMemo2[0],
|
350 | includedEnd = _React$useMemo2[1];
|
351 |
|
352 |
|
353 | React.useImperativeHandle(ref, function () {
|
354 | return {
|
355 | focus: function focus() {
|
356 | handlesRef.current.focus(0);
|
357 | },
|
358 | blur: function blur() {
|
359 | var _containerRef$current2;
|
360 | var _document = document,
|
361 | activeElement = _document.activeElement;
|
362 | if ((_containerRef$current2 = containerRef.current) !== null && _containerRef$current2 !== void 0 && _containerRef$current2.contains(activeElement)) {
|
363 | activeElement === null || activeElement === void 0 || activeElement.blur();
|
364 | }
|
365 | }
|
366 | };
|
367 | });
|
368 |
|
369 |
|
370 | React.useEffect(function () {
|
371 | if (autoFocus) {
|
372 | handlesRef.current.focus(0);
|
373 | }
|
374 | }, []);
|
375 |
|
376 |
|
377 | var context = React.useMemo(function () {
|
378 | return {
|
379 | min: mergedMin,
|
380 | max: mergedMax,
|
381 | direction: direction,
|
382 | disabled: disabled,
|
383 | keyboard: keyboard,
|
384 | step: mergedStep,
|
385 | included: included,
|
386 | includedStart: includedStart,
|
387 | includedEnd: includedEnd,
|
388 | range: range,
|
389 | tabIndex: tabIndex,
|
390 | ariaLabelForHandle: ariaLabelForHandle,
|
391 | ariaLabelledByForHandle: ariaLabelledByForHandle,
|
392 | ariaValueTextFormatterForHandle: ariaValueTextFormatterForHandle,
|
393 | styles: styles || {},
|
394 | classNames: classNames || {}
|
395 | };
|
396 | }, [mergedMin, mergedMax, direction, disabled, keyboard, mergedStep, included, includedStart, includedEnd, range, tabIndex, ariaLabelForHandle, ariaLabelledByForHandle, ariaValueTextFormatterForHandle, styles, classNames]);
|
397 |
|
398 |
|
399 | return React.createElement(_context.default.Provider, {
|
400 | value: context
|
401 | }, React.createElement("div", {
|
402 | ref: containerRef,
|
403 | className: (0, _classnames.default)(prefixCls, className, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(prefixCls, "-disabled"), disabled), "".concat(prefixCls, "-vertical"), vertical), "".concat(prefixCls, "-horizontal"), !vertical), "".concat(prefixCls, "-with-marks"), markList.length)),
|
404 | style: style,
|
405 | onMouseDown: onSliderMouseDown
|
406 | }, React.createElement("div", {
|
407 | className: (0, _classnames.default)("".concat(prefixCls, "-rail"), classNames === null || classNames === void 0 ? void 0 : classNames.rail),
|
408 | style: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, railStyle), styles === null || styles === void 0 ? void 0 : styles.rail)
|
409 | }), React.createElement(_Tracks.default, {
|
410 | prefixCls: prefixCls,
|
411 | style: trackStyle,
|
412 | values: sortedCacheValues,
|
413 | startPoint: startPoint,
|
414 | onStartMove: mergedDraggableTrack ? onStartMove : undefined
|
415 | }), React.createElement(_Steps.default, {
|
416 | prefixCls: prefixCls,
|
417 | marks: markList,
|
418 | dots: dots,
|
419 | style: dotStyle,
|
420 | activeStyle: activeDotStyle
|
421 | }), React.createElement(_Handles.default, {
|
422 | ref: handlesRef,
|
423 | prefixCls: prefixCls,
|
424 | style: handleStyle,
|
425 | values: cacheValues,
|
426 | draggingIndex: draggingIndex,
|
427 | onStartMove: onStartMove,
|
428 | onOffsetChange: onHandleOffsetChange,
|
429 | onFocus: onFocus,
|
430 | onBlur: onBlur,
|
431 | handleRender: handleRender,
|
432 | activeHandleRender: activeHandleRender,
|
433 | onChangeComplete: finishChange
|
434 | }), React.createElement(_Marks.default, {
|
435 | prefixCls: prefixCls,
|
436 | marks: markList,
|
437 | onClick: changeToCloseValue
|
438 | })));
|
439 | });
|
440 | if (process.env.NODE_ENV !== 'production') {
|
441 | Slider.displayName = 'Slider';
|
442 | }
|
443 | var _default = exports.default = Slider; |
\ | No newline at end of file |