Socket
Socket
Sign inDemoInstall

rc-slider

Package Overview
Dependencies
Maintainers
8
Versions
187
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rc-slider - npm Package Compare versions

Comparing version 9.7.5 to 10.0.0-alpha.0

CHANGELOG.md

18

es/index.d.ts

@@ -1,14 +0,4 @@

/// <reference types="react" />
import { SliderProps } from './Slider';
import Range, { RangeProps } from './Range';
import Handle, { HandleProps } from './Handle';
import createSliderWithTooltip from './createSliderWithTooltip';
import SliderTooltip from './common/SliderTooltip';
interface CompoundedComponent extends React.ComponentClass<SliderProps> {
Range: typeof Range;
Handle: typeof Handle;
createSliderWithTooltip: typeof createSliderWithTooltip;
}
declare const InternalSlider: CompoundedComponent;
export default InternalSlider;
export { SliderProps, Range, RangeProps, Handle, HandleProps, createSliderWithTooltip, SliderTooltip, };
import Slider from './Slider';
import type { SliderProps } from './Slider';
export type { SliderProps };
export default Slider;
import Slider from './Slider';
import Range from './Range';
import Handle from './Handle';
import createSliderWithTooltip from './createSliderWithTooltip';
import SliderTooltip from './common/SliderTooltip';
var InternalSlider = Slider;
InternalSlider.Range = Range;
InternalSlider.Handle = Handle;
InternalSlider.createSliderWithTooltip = createSliderWithTooltip;
export default InternalSlider;
export { Range, Handle, createSliderWithTooltip, SliderTooltip };
export default Slider;

@@ -1,48 +0,4 @@

import type * as React from 'react';
export interface GenericSliderProps {
min?: number;
max?: number;
step?: number | null;
prefixCls?: string;
vertical?: boolean;
included?: boolean;
disabled?: boolean;
reverse?: boolean;
trackStyle?: React.CSSProperties | React.CSSProperties[];
handleStyle?: React.CSSProperties | React.CSSProperties[];
autoFocus?: boolean;
onFocus?: (e: React.FocusEvent<HTMLDivElement>) => void;
onBlur?: (e: React.FocusEvent<HTMLDivElement>) => void;
className?: string;
marks?: Record<number, React.ReactNode | {
style?: React.CSSProperties;
label?: string;
}>;
dots?: boolean;
maximumTrackStyle?: React.CSSProperties;
style?: React.CSSProperties;
railStyle?: React.CSSProperties;
dotStyle?: React.CSSProperties;
activeDotStyle?: React.CSSProperties;
draggableTrack?: boolean;
}
export interface GenericSliderState {
value?: any;
bounds?: number[];
}
export interface GenericSliderClass<Props, State> extends React.Component<Props, State> {
onStart: (position: number) => void;
positionGetValue: (pos: number) => number[];
onEnd: (force?: boolean) => void;
onMove: (e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>, position: number, inTrack: boolean, b: number[]) => void;
onKeyboard: (e: React.KeyboardEvent<HTMLDivElement>) => void;
onChange: (state: {
value: any;
}) => void;
trimAlignValue: (v: number, nextProps?: Partial<Props>) => number;
getUpperBound: () => number;
getLowerBound: () => number;
}
export interface GenericSlider<Props, State> extends Pick<React.ComponentClass<Props, State>, 'displayName' | 'defaultProps' | 'propTypes' | 'contextType' | 'contextTypes' | 'childContextTypes'> {
new (props: Props, context?: any): GenericSliderClass<Props, State>;
}
import type React from 'react';
export declare type Direction = 'rtl' | 'ltr' | 'ttb' | 'btt';
export declare type OnStartMove = (e: React.MouseEvent | React.TouchEvent, valueIndex: number) => void;
export declare type AriaValueFormat = (value: number) => string;

@@ -1,50 +0,64 @@

import React from 'react';
import type { GenericSliderProps, GenericSliderState } from './interface';
export interface SliderProps extends GenericSliderProps {
value?: number;
defaultValue?: number;
import * as React from 'react';
import type { HandlesProps } from './Handles';
import type { AriaValueFormat } from './interface';
import type { MarkObj } from './Marks';
/**
* New:
* - click mark to update range value
* - handleRender
* - Fix handle with count not correct
* - Fix pushable not work in some case
* - No more FindDOMNode
* - Move all position related style into inline style
* - Key: up is plus, down is minus
* - fix Key with step = null not align with marks
* - Change range should not trigger onChange
* - keyboard support pushable
*/
export interface SliderProps<ValueType = number | number[]> {
prefixCls?: string;
className?: string;
style?: React.CSSProperties;
disabled?: boolean;
autoFocus?: boolean;
onFocus?: (e: React.FocusEvent<HTMLDivElement>) => void;
onBlur?: (e: React.FocusEvent<HTMLDivElement>) => void;
range?: boolean;
count?: number;
min?: number;
max?: number;
step?: number | null;
prefixCls?: string;
onChange?: (value: number) => void;
onBeforeChange?: (value: number) => void;
onAfterChange?: (value: number) => void;
value?: ValueType;
defaultValue?: ValueType;
onChange?: (value: ValueType) => void;
/** @deprecated It's always better to use `onChange` instead */
onBeforeChange?: (value: ValueType) => void;
/** @deprecated It's always better to use `onChange` instead */
onAfterChange?: (value: ValueType) => void;
allowCross?: boolean;
pushable?: boolean | number;
/** range only */
draggableTrack?: boolean;
reverse?: boolean;
vertical?: boolean;
included?: boolean;
disabled?: boolean;
reverse?: boolean;
minimumTrackStyle?: React.CSSProperties;
trackStyle?: React.CSSProperties;
handleStyle?: React.CSSProperties;
tabIndex?: number;
ariaLabelForHandle?: string;
ariaLabelledByForHandle?: string;
ariaValueTextFormatterForHandle?: (value: number) => string;
startPoint?: number;
handle?: (props: {
className: string;
prefixCls?: string;
vertical?: boolean;
offset: number;
value: number;
dragging?: boolean;
disabled?: boolean;
min?: number;
max?: number;
reverse?: boolean;
index: number;
tabIndex?: number;
ariaLabel: string;
ariaLabelledBy: string;
ariaValueTextFormatter?: (value: number) => string;
style?: React.CSSProperties;
ref?: React.Ref<any>;
}) => React.ReactElement;
trackStyle?: React.CSSProperties | React.CSSProperties[];
handleStyle?: React.CSSProperties | React.CSSProperties[];
railStyle?: React.CSSProperties;
dotStyle?: React.CSSProperties;
activeDotStyle?: React.CSSProperties;
marks?: Record<string | number, React.ReactNode | MarkObj>;
dots?: boolean;
handleRender?: HandlesProps['handleRender'];
tabIndex?: number | number[];
ariaLabelForHandle?: string | string[];
ariaLabelledByForHandle?: string | string[];
ariaValueTextFormatterForHandle?: AriaValueFormat | AriaValueFormat[];
}
export interface SliderState extends GenericSliderState {
value: number;
dragging: boolean;
export interface SliderRef {
focus: () => void;
blur: () => void;
}
declare const _default: React.ComponentClass<SliderProps, SliderState>;
export default _default;
declare const Slider: React.ForwardRefExoticComponent<SliderProps<number | number[]> & React.RefAttributes<SliderRef>>;
export default Slider;

@@ -1,275 +0,416 @@

import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
import _createClass from "@babel/runtime/helpers/esm/createClass";
import _inherits from "@babel/runtime/helpers/esm/inherits";
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
import React from 'react';
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _typeof from "@babel/runtime/helpers/esm/typeof";
import * as React from 'react';
import classNames from 'classnames';
import shallowEqual from 'shallowequal';
import useMergedState from "rc-util/es/hooks/useMergedState";
import Handles from './Handles';
import useDrag from './hooks/useDrag';
import SliderContext from './context';
import Tracks from './Tracks';
import Marks from './Marks';
import Steps from './Steps';
import useOffset from './hooks/useOffset';
import warning from "rc-util/es/warning";
import Track from './common/Track';
import createSlider from './common/createSlider';
import * as utils from './utils';
var Slider = /*#__PURE__*/React.forwardRef(function (props, ref) {
var _classNames;
var Slider = /*#__PURE__*/function (_React$Component) {
_inherits(Slider, _React$Component);
var _props$prefixCls = props.prefixCls,
prefixCls = _props$prefixCls === void 0 ? 'rc-slider' : _props$prefixCls,
className = props.className,
style = props.style,
_props$disabled = props.disabled,
disabled = _props$disabled === void 0 ? false : _props$disabled,
autoFocus = props.autoFocus,
onFocus = props.onFocus,
onBlur = props.onBlur,
_props$min = props.min,
min = _props$min === void 0 ? 0 : _props$min,
_props$max = props.max,
max = _props$max === void 0 ? 100 : _props$max,
_props$step = props.step,
step = _props$step === void 0 ? 1 : _props$step,
value = props.value,
defaultValue = props.defaultValue,
range = props.range,
count = props.count,
onChange = props.onChange,
onBeforeChange = props.onBeforeChange,
onAfterChange = props.onAfterChange,
_props$allowCross = props.allowCross,
allowCross = _props$allowCross === void 0 ? true : _props$allowCross,
_props$pushable = props.pushable,
pushable = _props$pushable === void 0 ? false : _props$pushable,
draggableTrack = props.draggableTrack,
reverse = props.reverse,
vertical = props.vertical,
_props$included = props.included,
included = _props$included === void 0 ? true : _props$included,
startPoint = props.startPoint,
trackStyle = props.trackStyle,
handleStyle = props.handleStyle,
railStyle = props.railStyle,
dotStyle = props.dotStyle,
activeDotStyle = props.activeDotStyle,
marks = props.marks,
dots = props.dots,
handleRender = props.handleRender,
_props$tabIndex = props.tabIndex,
tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,
ariaLabelForHandle = props.ariaLabelForHandle,
ariaLabelledByForHandle = props.ariaLabelledByForHandle,
ariaValueTextFormatterForHandle = props.ariaValueTextFormatterForHandle;
var handlesRef = React.useRef();
var containerRef = React.useRef();
var direction = React.useMemo(function () {
if (vertical) {
return reverse ? 'ttb' : 'btt';
}
var _super = _createSuper(Slider);
return reverse ? 'rtl' : 'ltr';
}, [reverse, vertical]); // ============================ Range =============================
/* eslint-enable */
function Slider(props) {
var _this;
var mergedMin = React.useMemo(function () {
return isFinite(min) ? min : 0;
}, [min]);
var mergedMax = React.useMemo(function () {
return isFinite(max) ? max : 100;
}, [max]); // ============================= Step =============================
_classCallCheck(this, Slider);
var mergedStep = React.useMemo(function () {
return step !== null && step <= 0 ? 1 : step;
}, [step]); // ============================= Push =============================
_this = _super.call(this, props);
var mergedPush = React.useMemo(function () {
if (pushable === true) {
return mergedStep;
}
_this.positionGetValue = function (position) {
return [];
};
return pushable >= 0 ? pushable : false;
}, [pushable, mergedStep]); // ============================ Marks =============================
_this.onEnd = function (force) {
var dragging = _this.state.dragging;
var markList = React.useMemo(function () {
var keys = Object.keys(marks || {});
return keys.map(function (key) {
var mark = marks[key];
var markObj = {
value: Number(key)
};
_this.removeDocumentEvents();
if (mark && _typeof(mark) === 'object' && ! /*#__PURE__*/React.isValidElement(mark) && ('label' in mark || 'style' in mark)) {
markObj.style = mark.style;
markObj.label = mark.label;
} else {
markObj.label = mark;
}
if (dragging || force) {
_this.props.onAfterChange(_this.getValue());
return markObj;
}).sort(function (a, b) {
return a.value - b.value;
});
}, [marks]); // ============================ Format ============================
var _useOffset = useOffset(mergedMin, mergedMax, mergedStep, markList, allowCross, mergedPush),
_useOffset2 = _slicedToArray(_useOffset, 2),
formatValue = _useOffset2[0],
offsetValues = _useOffset2[1]; // ============================ Values ============================
var _useMergedState = useMergedState(defaultValue, {
value: value
}),
_useMergedState2 = _slicedToArray(_useMergedState, 2),
mergedValue = _useMergedState2[0],
setValue = _useMergedState2[1];
var rawValues = React.useMemo(function () {
var valueList = mergedValue === null || mergedValue === undefined ? [] : Array.isArray(mergedValue) ? mergedValue : [mergedValue];
var _valueList = _slicedToArray(valueList, 1),
_valueList$ = _valueList[0],
val0 = _valueList$ === void 0 ? mergedMin : _valueList$;
var returnValues = mergedValue === null ? [] : [val0]; // Format as range
if (range) {
returnValues = _toConsumableArray(valueList); // When count provided or value is `undefined`, we fill values
if (count || mergedValue === undefined) {
var pointCount = count >= 0 ? count + 1 : 2;
returnValues = returnValues.slice(0, pointCount); // Fill with count
while (returnValues.length < pointCount) {
var _returnValues;
returnValues.push((_returnValues = returnValues[returnValues.length - 1]) !== null && _returnValues !== void 0 ? _returnValues : mergedMin);
}
}
_this.setState({
dragging: false
returnValues.sort(function (a, b) {
return a - b;
});
};
} // Align in range
var defaultValue = props.defaultValue !== undefined ? props.defaultValue : props.min;
var value = props.value !== undefined ? props.value : defaultValue;
_this.state = {
value: _this.trimAlignValue(value),
dragging: false
};
warning(!('minimumTrackStyle' in props), 'minimumTrackStyle will be deprecated, please use trackStyle instead.');
warning(!('maximumTrackStyle' in props), 'maximumTrackStyle will be deprecated, please use railStyle instead.');
return _this;
}
/**
* [Legacy] Used for inherit other component.
* It's a bad code style which should be refactor.
*/
/* eslint-disable @typescript-eslint/no-unused-vars, class-methods-use-this */
returnValues.forEach(function (val, index) {
returnValues[index] = formatValue(val);
});
return returnValues;
}, [mergedValue, range, mergedMin, count, formatValue]); // =========================== onChange ===========================
var rawValuesRef = React.useRef(rawValues);
rawValuesRef.current = rawValues;
_createClass(Slider, [{
key: "calcValueByPos",
value: function calcValueByPos(value) {
return 0;
}
}, {
key: "calcOffset",
value: function calcOffset(value) {
return 0;
}
}, {
key: "saveHandle",
value: function saveHandle(index, h) {}
}, {
key: "removeDocumentEvents",
value: function removeDocumentEvents() {}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate(prevProps, prevState) {
var _this$props = this.props,
min = _this$props.min,
max = _this$props.max,
value = _this$props.value,
onChange = _this$props.onChange;
var getTriggerValue = function getTriggerValue(triggerValues) {
return range ? triggerValues : triggerValues[0];
};
if (!('min' in this.props || 'max' in this.props)) {
return;
}
var triggerChange = function triggerChange(nextValues) {
// Order first
var cloneNextValues = _toConsumableArray(nextValues).sort(function (a, b) {
return a - b;
}); // Trigger event if needed
var theValue = value !== undefined ? value : prevState.value;
var nextValue = this.trimAlignValue(theValue, this.props);
if (nextValue === prevState.value) {
return;
} // eslint-disable-next-line
if (onChange && !shallowEqual(cloneNextValues, rawValuesRef.current)) {
onChange(getTriggerValue(cloneNextValues));
} // We set this later since it will re-render component immediately
this.setState({
value: nextValue
});
setValue(cloneNextValues);
};
if (!(min === prevProps.min && max === prevProps.max) && utils.isValueOutOfRange(theValue, this.props)) {
onChange(nextValue);
var changeToCloseValue = function changeToCloseValue(newValue) {
if (!disabled) {
var valueIndex = 0;
var valueDist = mergedMax - mergedMin;
rawValues.forEach(function (val, index) {
var dist = Math.abs(newValue - val);
if (dist <= valueDist) {
valueDist = dist;
valueIndex = index;
}
}); // Create new values
var cloneNextValues = _toConsumableArray(rawValues);
cloneNextValues[valueIndex] = newValue; // Fill value to match default 2
if (range && !rawValues.length && count === undefined) {
cloneNextValues.push(newValue);
}
triggerChange(cloneNextValues);
onAfterChange === null || onAfterChange === void 0 ? void 0 : onAfterChange(cloneNextValues);
}
}, {
key: "onChange",
value: function onChange(state) {
var props = this.props;
var isNotControlled = !('value' in props);
var nextState = state.value > this.props.max ? _objectSpread(_objectSpread({}, state), {}, {
value: this.props.max
}) : state;
}; // ============================ Click =============================
if (isNotControlled) {
this.setState(nextState);
}
var changedValue = nextState.value;
props.onChange(changedValue);
var onSliderMouseDown = function onSliderMouseDown(e) {
e.preventDefault();
var _containerRef$current = containerRef.current.getBoundingClientRect(),
width = _containerRef$current.width,
height = _containerRef$current.height,
left = _containerRef$current.left,
top = _containerRef$current.top,
bottom = _containerRef$current.bottom,
right = _containerRef$current.right;
var clientX = e.clientX,
clientY = e.clientY;
var percent;
switch (direction) {
case 'btt':
percent = (bottom - clientY) / height;
break;
case 'ttb':
percent = (clientY - top) / height;
break;
case 'rtl':
percent = (right - clientX) / width;
break;
default:
percent = (clientX - left) / width;
}
}, {
key: "onStart",
value: function onStart(position) {
this.setState({
dragging: true
});
var props = this.props;
var prevValue = this.getValue();
props.onBeforeChange(prevValue);
var value = this.calcValueByPos(position);
this.startValue = value;
this.startPosition = position;
if (value === prevValue) return;
this.prevMovedHandleIndex = 0;
this.onChange({
value: value
});
var nextValue = mergedMin + percent * (mergedMax - mergedMin);
changeToCloseValue(formatValue(nextValue));
}; // =========================== Keyboard ===========================
var _React$useState = React.useState(null),
_React$useState2 = _slicedToArray(_React$useState, 2),
keyboardValue = _React$useState2[0],
setKeyboardValue = _React$useState2[1];
var onHandleOffsetChange = function onHandleOffsetChange(offset, valueIndex) {
if (!disabled) {
var next = offsetValues(rawValues, offset, valueIndex);
onBeforeChange === null || onBeforeChange === void 0 ? void 0 : onBeforeChange(getTriggerValue(rawValues));
triggerChange(next.values);
onAfterChange === null || onAfterChange === void 0 ? void 0 : onAfterChange(getTriggerValue(next.values));
setKeyboardValue(next.value);
}
}, {
key: "onMove",
value: function onMove(e, position) {
utils.pauseEvent(e);
var oldValue = this.state.value;
var value = this.calcValueByPos(position);
if (value === oldValue) return;
this.onChange({
value: value
});
}
}, {
key: "onKeyboard",
value: function onKeyboard(e) {
var _this$props2 = this.props,
reverse = _this$props2.reverse,
vertical = _this$props2.vertical;
var valueMutator = utils.getKeyboardValueMutator(e, vertical, reverse);
};
if (valueMutator) {
utils.pauseEvent(e);
var state = this.state;
var oldValue = state.value;
var mutatedValue = valueMutator(oldValue, this.props);
var value = this.trimAlignValue(mutatedValue);
if (value === oldValue) return;
this.onChange({
value: value
});
this.props.onAfterChange(value);
this.onEnd();
React.useEffect(function () {
if (keyboardValue !== null) {
var valueIndex = rawValues.indexOf(keyboardValue);
if (valueIndex >= 0) {
handlesRef.current.focus(valueIndex);
}
}
}, {
key: "getValue",
value: function getValue() {
return this.state.value;
}
}, {
key: "getLowerBound",
value: function getLowerBound() {
var minPoint = this.props.startPoint || this.props.min;
return this.state.value > minPoint ? minPoint : this.state.value;
}
}, {
key: "getUpperBound",
value: function getUpperBound() {
if (this.state.value < this.props.startPoint) {
return this.props.startPoint;
setKeyboardValue(null);
}, [keyboardValue]); // ============================= Drag =============================
var mergedDraggableTrack = React.useMemo(function () {
if (draggableTrack && mergedStep === null) {
if (process.env.NODE_ENV !== 'production') {
warning(false, '`draggableTrack` is not supported when `step` is `null`.');
}
return this.state.value;
return false;
}
}, {
key: "trimAlignValue",
value: function trimAlignValue(v) {
var nextProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (v === null) {
return null;
}
return draggableTrack;
}, [draggableTrack, mergedStep]);
var mergedProps = _objectSpread(_objectSpread({}, this.props), nextProps);
var finishChange = function finishChange() {
onAfterChange === null || onAfterChange === void 0 ? void 0 : onAfterChange(getTriggerValue(rawValuesRef.current));
};
var val = utils.ensureValueInRange(v, mergedProps);
return utils.ensureValuePrecision(val, mergedProps);
var _useDrag = useDrag(containerRef, direction, rawValues, mergedMin, mergedMax, formatValue, triggerChange, finishChange, offsetValues),
_useDrag2 = _slicedToArray(_useDrag, 4),
draggingIndex = _useDrag2[0],
draggingValue = _useDrag2[1],
cacheValues = _useDrag2[2],
onStartDrag = _useDrag2[3];
var onStartMove = function onStartMove(e, valueIndex) {
onStartDrag(e, valueIndex);
onBeforeChange === null || onBeforeChange === void 0 ? void 0 : onBeforeChange(getTriggerValue(rawValuesRef.current));
}; // Auto focus for updated handle
var dragging = draggingIndex !== -1;
React.useEffect(function () {
if (!dragging) {
var valueIndex = rawValues.lastIndexOf(draggingValue);
handlesRef.current.focus(valueIndex);
}
}, {
key: "render",
value: function render() {
var _this2 = this;
}, [dragging]); // =========================== Included ===========================
var _this$props3 = this.props,
prefixCls = _this$props3.prefixCls,
vertical = _this$props3.vertical,
included = _this$props3.included,
disabled = _this$props3.disabled,
minimumTrackStyle = _this$props3.minimumTrackStyle,
trackStyle = _this$props3.trackStyle,
handleStyle = _this$props3.handleStyle,
tabIndex = _this$props3.tabIndex,
ariaLabelForHandle = _this$props3.ariaLabelForHandle,
ariaLabelledByForHandle = _this$props3.ariaLabelledByForHandle,
ariaValueTextFormatterForHandle = _this$props3.ariaValueTextFormatterForHandle,
min = _this$props3.min,
max = _this$props3.max,
startPoint = _this$props3.startPoint,
reverse = _this$props3.reverse,
handleGenerator = _this$props3.handle;
var _this$state = this.state,
value = _this$state.value,
dragging = _this$state.dragging;
var offset = this.calcOffset(value);
var handle = handleGenerator({
className: "".concat(prefixCls, "-handle"),
prefixCls: prefixCls,
vertical: vertical,
offset: offset,
value: value,
dragging: dragging,
disabled: disabled,
min: min,
max: max,
reverse: reverse,
index: 0,
tabIndex: tabIndex,
ariaLabel: ariaLabelForHandle,
ariaLabelledBy: ariaLabelledByForHandle,
ariaValueTextFormatter: ariaValueTextFormatterForHandle,
style: handleStyle[0] || handleStyle,
ref: function ref(h) {
return _this2.saveHandle(0, h);
var sortedCacheValues = React.useMemo(function () {
return _toConsumableArray(cacheValues).sort(function (a, b) {
return a - b;
});
}, [cacheValues]); // Provide a range values with included [min, max]
// Used for Track, Mark & Dot
var _React$useMemo = React.useMemo(function () {
if (!range) {
return [mergedMin, sortedCacheValues[0]];
}
return [sortedCacheValues[0], sortedCacheValues[sortedCacheValues.length - 1]];
}, [sortedCacheValues, range, mergedMin]),
_React$useMemo2 = _slicedToArray(_React$useMemo, 2),
includedStart = _React$useMemo2[0],
includedEnd = _React$useMemo2[1]; // ============================= Refs =============================
React.useImperativeHandle(ref, function () {
return {
focus: function focus() {
handlesRef.current.focus(0);
},
blur: function blur() {
var _document = document,
activeElement = _document.activeElement;
if (containerRef.current.contains(activeElement)) {
activeElement === null || activeElement === void 0 ? void 0 : activeElement.blur();
}
});
var trackOffset = startPoint !== undefined ? this.calcOffset(startPoint) : 0;
var mergedTrackStyle = trackStyle[0] || trackStyle;
var track = /*#__PURE__*/React.createElement(Track, {
className: "".concat(prefixCls, "-track"),
vertical: vertical,
included: included,
offset: trackOffset,
reverse: reverse,
length: offset - trackOffset,
style: _objectSpread(_objectSpread({}, minimumTrackStyle), mergedTrackStyle)
});
return {
tracks: track,
handles: handle
};
}
};
}); // ========================== Auto Focus ==========================
React.useEffect(function () {
if (autoFocus) {
handlesRef.current.focus(0);
}
}]);
}, []); // =========================== Context ============================
return Slider;
}(React.Component);
var context = React.useMemo(function () {
return {
min: mergedMin,
max: mergedMax,
direction: direction,
disabled: disabled,
step: mergedStep,
included: included,
includedStart: includedStart,
includedEnd: includedEnd,
range: range,
tabIndex: tabIndex,
ariaLabelForHandle: ariaLabelForHandle,
ariaLabelledByForHandle: ariaLabelledByForHandle,
ariaValueTextFormatterForHandle: ariaValueTextFormatterForHandle
};
}, [mergedMin, mergedMax, direction, disabled, mergedStep, included, includedStart, includedEnd, range, tabIndex, ariaLabelForHandle, ariaLabelledByForHandle, ariaValueTextFormatterForHandle]); // ============================ Render ============================
export default createSlider(Slider);
return /*#__PURE__*/React.createElement(SliderContext.Provider, {
value: context
}, /*#__PURE__*/React.createElement("div", {
ref: containerRef,
className: classNames(prefixCls, className, (_classNames = {}, _defineProperty(_classNames, "".concat(prefixCls, "-disabled"), disabled), _defineProperty(_classNames, "".concat(prefixCls, "-vertical"), vertical), _defineProperty(_classNames, "".concat(prefixCls, "-horizontal"), !vertical), _classNames)),
style: style,
onMouseDown: onSliderMouseDown
}, /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-rail"),
style: railStyle
}), /*#__PURE__*/React.createElement(Tracks, {
prefixCls: prefixCls,
style: trackStyle,
values: sortedCacheValues,
startPoint: startPoint,
onStartMove: mergedDraggableTrack ? onStartMove : null
}), /*#__PURE__*/React.createElement(Steps, {
prefixCls: prefixCls,
marks: markList,
dots: dots,
style: dotStyle,
activeStyle: activeDotStyle
}), /*#__PURE__*/React.createElement(Handles, {
ref: handlesRef,
prefixCls: prefixCls,
style: handleStyle,
values: cacheValues,
draggingIndex: draggingIndex,
onStartMove: onStartMove,
onOffsetChange: onHandleOffsetChange,
onFocus: onFocus,
onBlur: onBlur,
handleRender: handleRender
}), /*#__PURE__*/React.createElement(Marks, {
prefixCls: prefixCls,
marks: markList,
onClick: changeToCloseValue
})));
});
if (process.env.NODE_ENV !== 'production') {
Slider.displayName = 'Slider';
}
export default Slider;

@@ -1,14 +0,4 @@

/// <reference types="react" />
import { SliderProps } from './Slider';
import Range, { RangeProps } from './Range';
import Handle, { HandleProps } from './Handle';
import createSliderWithTooltip from './createSliderWithTooltip';
import SliderTooltip from './common/SliderTooltip';
interface CompoundedComponent extends React.ComponentClass<SliderProps> {
Range: typeof Range;
Handle: typeof Handle;
createSliderWithTooltip: typeof createSliderWithTooltip;
}
declare const InternalSlider: CompoundedComponent;
export default InternalSlider;
export { SliderProps, Range, RangeProps, Handle, HandleProps, createSliderWithTooltip, SliderTooltip, };
import Slider from './Slider';
import type { SliderProps } from './Slider';
export type { SliderProps };
export default Slider;

@@ -8,26 +8,2 @@ "use strict";

});
Object.defineProperty(exports, "Range", {
enumerable: true,
get: function get() {
return _Range.default;
}
});
Object.defineProperty(exports, "Handle", {
enumerable: true,
get: function get() {
return _Handle.default;
}
});
Object.defineProperty(exports, "createSliderWithTooltip", {
enumerable: true,
get: function get() {
return _createSliderWithTooltip.default;
}
});
Object.defineProperty(exports, "SliderTooltip", {
enumerable: true,
get: function get() {
return _SliderTooltip.default;
}
});
exports.default = void 0;

@@ -37,15 +13,3 @@

var _Range = _interopRequireDefault(require("./Range"));
var _Handle = _interopRequireDefault(require("./Handle"));
var _createSliderWithTooltip = _interopRequireDefault(require("./createSliderWithTooltip"));
var _SliderTooltip = _interopRequireDefault(require("./common/SliderTooltip"));
var InternalSlider = _Slider.default;
InternalSlider.Range = _Range.default;
InternalSlider.Handle = _Handle.default;
InternalSlider.createSliderWithTooltip = _createSliderWithTooltip.default;
var _default = InternalSlider;
var _default = _Slider.default;
exports.default = _default;

@@ -1,48 +0,4 @@

import type * as React from 'react';
export interface GenericSliderProps {
min?: number;
max?: number;
step?: number | null;
prefixCls?: string;
vertical?: boolean;
included?: boolean;
disabled?: boolean;
reverse?: boolean;
trackStyle?: React.CSSProperties | React.CSSProperties[];
handleStyle?: React.CSSProperties | React.CSSProperties[];
autoFocus?: boolean;
onFocus?: (e: React.FocusEvent<HTMLDivElement>) => void;
onBlur?: (e: React.FocusEvent<HTMLDivElement>) => void;
className?: string;
marks?: Record<number, React.ReactNode | {
style?: React.CSSProperties;
label?: string;
}>;
dots?: boolean;
maximumTrackStyle?: React.CSSProperties;
style?: React.CSSProperties;
railStyle?: React.CSSProperties;
dotStyle?: React.CSSProperties;
activeDotStyle?: React.CSSProperties;
draggableTrack?: boolean;
}
export interface GenericSliderState {
value?: any;
bounds?: number[];
}
export interface GenericSliderClass<Props, State> extends React.Component<Props, State> {
onStart: (position: number) => void;
positionGetValue: (pos: number) => number[];
onEnd: (force?: boolean) => void;
onMove: (e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>, position: number, inTrack: boolean, b: number[]) => void;
onKeyboard: (e: React.KeyboardEvent<HTMLDivElement>) => void;
onChange: (state: {
value: any;
}) => void;
trimAlignValue: (v: number, nextProps?: Partial<Props>) => number;
getUpperBound: () => number;
getLowerBound: () => number;
}
export interface GenericSlider<Props, State> extends Pick<React.ComponentClass<Props, State>, 'displayName' | 'defaultProps' | 'propTypes' | 'contextType' | 'contextTypes' | 'childContextTypes'> {
new (props: Props, context?: any): GenericSliderClass<Props, State>;
}
import type React from 'react';
export declare type Direction = 'rtl' | 'ltr' | 'ttb' | 'btt';
export declare type OnStartMove = (e: React.MouseEvent | React.TouchEvent, valueIndex: number) => void;
export declare type AriaValueFormat = (value: number) => string;

@@ -1,50 +0,64 @@

import React from 'react';
import type { GenericSliderProps, GenericSliderState } from './interface';
export interface SliderProps extends GenericSliderProps {
value?: number;
defaultValue?: number;
import * as React from 'react';
import type { HandlesProps } from './Handles';
import type { AriaValueFormat } from './interface';
import type { MarkObj } from './Marks';
/**
* New:
* - click mark to update range value
* - handleRender
* - Fix handle with count not correct
* - Fix pushable not work in some case
* - No more FindDOMNode
* - Move all position related style into inline style
* - Key: up is plus, down is minus
* - fix Key with step = null not align with marks
* - Change range should not trigger onChange
* - keyboard support pushable
*/
export interface SliderProps<ValueType = number | number[]> {
prefixCls?: string;
className?: string;
style?: React.CSSProperties;
disabled?: boolean;
autoFocus?: boolean;
onFocus?: (e: React.FocusEvent<HTMLDivElement>) => void;
onBlur?: (e: React.FocusEvent<HTMLDivElement>) => void;
range?: boolean;
count?: number;
min?: number;
max?: number;
step?: number | null;
prefixCls?: string;
onChange?: (value: number) => void;
onBeforeChange?: (value: number) => void;
onAfterChange?: (value: number) => void;
value?: ValueType;
defaultValue?: ValueType;
onChange?: (value: ValueType) => void;
/** @deprecated It's always better to use `onChange` instead */
onBeforeChange?: (value: ValueType) => void;
/** @deprecated It's always better to use `onChange` instead */
onAfterChange?: (value: ValueType) => void;
allowCross?: boolean;
pushable?: boolean | number;
/** range only */
draggableTrack?: boolean;
reverse?: boolean;
vertical?: boolean;
included?: boolean;
disabled?: boolean;
reverse?: boolean;
minimumTrackStyle?: React.CSSProperties;
trackStyle?: React.CSSProperties;
handleStyle?: React.CSSProperties;
tabIndex?: number;
ariaLabelForHandle?: string;
ariaLabelledByForHandle?: string;
ariaValueTextFormatterForHandle?: (value: number) => string;
startPoint?: number;
handle?: (props: {
className: string;
prefixCls?: string;
vertical?: boolean;
offset: number;
value: number;
dragging?: boolean;
disabled?: boolean;
min?: number;
max?: number;
reverse?: boolean;
index: number;
tabIndex?: number;
ariaLabel: string;
ariaLabelledBy: string;
ariaValueTextFormatter?: (value: number) => string;
style?: React.CSSProperties;
ref?: React.Ref<any>;
}) => React.ReactElement;
trackStyle?: React.CSSProperties | React.CSSProperties[];
handleStyle?: React.CSSProperties | React.CSSProperties[];
railStyle?: React.CSSProperties;
dotStyle?: React.CSSProperties;
activeDotStyle?: React.CSSProperties;
marks?: Record<string | number, React.ReactNode | MarkObj>;
dots?: boolean;
handleRender?: HandlesProps['handleRender'];
tabIndex?: number | number[];
ariaLabelForHandle?: string | string[];
ariaLabelledByForHandle?: string | string[];
ariaValueTextFormatterForHandle?: AriaValueFormat | AriaValueFormat[];
}
export interface SliderState extends GenericSliderState {
value: number;
dragging: boolean;
export interface SliderRef {
focus: () => void;
blur: () => void;
}
declare const _default: React.ComponentClass<SliderProps, SliderState>;
export default _default;
declare const Slider: React.ForwardRefExoticComponent<SliderProps<number | number[]> & React.RefAttributes<SliderRef>>;
export default Slider;

@@ -12,286 +12,432 @@ "use strict";

var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
var React = _interopRequireWildcard(require("react"));
var _react = _interopRequireDefault(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _shallowequal = _interopRequireDefault(require("shallowequal"));
var _useMergedState3 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
var _Handles = _interopRequireDefault(require("./Handles"));
var _useDrag3 = _interopRequireDefault(require("./hooks/useDrag"));
var _context = _interopRequireDefault(require("./context"));
var _Tracks = _interopRequireDefault(require("./Tracks"));
var _Marks = _interopRequireDefault(require("./Marks"));
var _Steps = _interopRequireDefault(require("./Steps"));
var _useOffset3 = _interopRequireDefault(require("./hooks/useOffset"));
var _warning = _interopRequireDefault(require("rc-util/lib/warning"));
var _Track = _interopRequireDefault(require("./common/Track"));
var Slider = /*#__PURE__*/React.forwardRef(function (props, ref) {
var _classNames;
var _createSlider = _interopRequireDefault(require("./common/createSlider"));
var _props$prefixCls = props.prefixCls,
prefixCls = _props$prefixCls === void 0 ? 'rc-slider' : _props$prefixCls,
className = props.className,
style = props.style,
_props$disabled = props.disabled,
disabled = _props$disabled === void 0 ? false : _props$disabled,
autoFocus = props.autoFocus,
onFocus = props.onFocus,
onBlur = props.onBlur,
_props$min = props.min,
min = _props$min === void 0 ? 0 : _props$min,
_props$max = props.max,
max = _props$max === void 0 ? 100 : _props$max,
_props$step = props.step,
step = _props$step === void 0 ? 1 : _props$step,
value = props.value,
defaultValue = props.defaultValue,
range = props.range,
count = props.count,
onChange = props.onChange,
onBeforeChange = props.onBeforeChange,
onAfterChange = props.onAfterChange,
_props$allowCross = props.allowCross,
allowCross = _props$allowCross === void 0 ? true : _props$allowCross,
_props$pushable = props.pushable,
pushable = _props$pushable === void 0 ? false : _props$pushable,
draggableTrack = props.draggableTrack,
reverse = props.reverse,
vertical = props.vertical,
_props$included = props.included,
included = _props$included === void 0 ? true : _props$included,
startPoint = props.startPoint,
trackStyle = props.trackStyle,
handleStyle = props.handleStyle,
railStyle = props.railStyle,
dotStyle = props.dotStyle,
activeDotStyle = props.activeDotStyle,
marks = props.marks,
dots = props.dots,
handleRender = props.handleRender,
_props$tabIndex = props.tabIndex,
tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,
ariaLabelForHandle = props.ariaLabelForHandle,
ariaLabelledByForHandle = props.ariaLabelledByForHandle,
ariaValueTextFormatterForHandle = props.ariaValueTextFormatterForHandle;
var handlesRef = React.useRef();
var containerRef = React.useRef();
var direction = React.useMemo(function () {
if (vertical) {
return reverse ? 'ttb' : 'btt';
}
var utils = _interopRequireWildcard(require("./utils"));
return reverse ? 'rtl' : 'ltr';
}, [reverse, vertical]); // ============================ Range =============================
var Slider = /*#__PURE__*/function (_React$Component) {
(0, _inherits2.default)(Slider, _React$Component);
var mergedMin = React.useMemo(function () {
return isFinite(min) ? min : 0;
}, [min]);
var mergedMax = React.useMemo(function () {
return isFinite(max) ? max : 100;
}, [max]); // ============================= Step =============================
var _super = (0, _createSuper2.default)(Slider);
var mergedStep = React.useMemo(function () {
return step !== null && step <= 0 ? 1 : step;
}, [step]); // ============================= Push =============================
/* eslint-enable */
function Slider(props) {
var _this;
var mergedPush = React.useMemo(function () {
if (pushable === true) {
return mergedStep;
}
(0, _classCallCheck2.default)(this, Slider);
_this = _super.call(this, props);
return pushable >= 0 ? pushable : false;
}, [pushable, mergedStep]); // ============================ Marks =============================
_this.positionGetValue = function (position) {
return [];
};
var markList = React.useMemo(function () {
var keys = Object.keys(marks || {});
return keys.map(function (key) {
var mark = marks[key];
var markObj = {
value: Number(key)
};
_this.onEnd = function (force) {
var dragging = _this.state.dragging;
if (mark && (0, _typeof2.default)(mark) === 'object' && ! /*#__PURE__*/React.isValidElement(mark) && ('label' in mark || 'style' in mark)) {
markObj.style = mark.style;
markObj.label = mark.label;
} else {
markObj.label = mark;
}
_this.removeDocumentEvents();
return markObj;
}).sort(function (a, b) {
return a.value - b.value;
});
}, [marks]); // ============================ Format ============================
if (dragging || force) {
_this.props.onAfterChange(_this.getValue());
var _useOffset = (0, _useOffset3.default)(mergedMin, mergedMax, mergedStep, markList, allowCross, mergedPush),
_useOffset2 = (0, _slicedToArray2.default)(_useOffset, 2),
formatValue = _useOffset2[0],
offsetValues = _useOffset2[1]; // ============================ Values ============================
var _useMergedState = (0, _useMergedState3.default)(defaultValue, {
value: value
}),
_useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
mergedValue = _useMergedState2[0],
setValue = _useMergedState2[1];
var rawValues = React.useMemo(function () {
var valueList = mergedValue === null || mergedValue === undefined ? [] : Array.isArray(mergedValue) ? mergedValue : [mergedValue];
var _valueList = (0, _slicedToArray2.default)(valueList, 1),
_valueList$ = _valueList[0],
val0 = _valueList$ === void 0 ? mergedMin : _valueList$;
var returnValues = mergedValue === null ? [] : [val0]; // Format as range
if (range) {
returnValues = (0, _toConsumableArray2.default)(valueList); // When count provided or value is `undefined`, we fill values
if (count || mergedValue === undefined) {
var pointCount = count >= 0 ? count + 1 : 2;
returnValues = returnValues.slice(0, pointCount); // Fill with count
while (returnValues.length < pointCount) {
var _returnValues;
returnValues.push((_returnValues = returnValues[returnValues.length - 1]) !== null && _returnValues !== void 0 ? _returnValues : mergedMin);
}
}
_this.setState({
dragging: false
returnValues.sort(function (a, b) {
return a - b;
});
};
} // Align in range
var defaultValue = props.defaultValue !== undefined ? props.defaultValue : props.min;
var value = props.value !== undefined ? props.value : defaultValue;
_this.state = {
value: _this.trimAlignValue(value),
dragging: false
};
(0, _warning.default)(!('minimumTrackStyle' in props), 'minimumTrackStyle will be deprecated, please use trackStyle instead.');
(0, _warning.default)(!('maximumTrackStyle' in props), 'maximumTrackStyle will be deprecated, please use railStyle instead.');
return _this;
}
/**
* [Legacy] Used for inherit other component.
* It's a bad code style which should be refactor.
*/
/* eslint-disable @typescript-eslint/no-unused-vars, class-methods-use-this */
returnValues.forEach(function (val, index) {
returnValues[index] = formatValue(val);
});
return returnValues;
}, [mergedValue, range, mergedMin, count, formatValue]); // =========================== onChange ===========================
var rawValuesRef = React.useRef(rawValues);
rawValuesRef.current = rawValues;
(0, _createClass2.default)(Slider, [{
key: "calcValueByPos",
value: function calcValueByPos(value) {
return 0;
}
}, {
key: "calcOffset",
value: function calcOffset(value) {
return 0;
}
}, {
key: "saveHandle",
value: function saveHandle(index, h) {}
}, {
key: "removeDocumentEvents",
value: function removeDocumentEvents() {}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate(prevProps, prevState) {
var _this$props = this.props,
min = _this$props.min,
max = _this$props.max,
value = _this$props.value,
onChange = _this$props.onChange;
var getTriggerValue = function getTriggerValue(triggerValues) {
return range ? triggerValues : triggerValues[0];
};
if (!('min' in this.props || 'max' in this.props)) {
return;
}
var triggerChange = function triggerChange(nextValues) {
// Order first
var cloneNextValues = (0, _toConsumableArray2.default)(nextValues).sort(function (a, b) {
return a - b;
}); // Trigger event if needed
var theValue = value !== undefined ? value : prevState.value;
var nextValue = this.trimAlignValue(theValue, this.props);
if (onChange && !(0, _shallowequal.default)(cloneNextValues, rawValuesRef.current)) {
onChange(getTriggerValue(cloneNextValues));
} // We set this later since it will re-render component immediately
if (nextValue === prevState.value) {
return;
} // eslint-disable-next-line
setValue(cloneNextValues);
};
this.setState({
value: nextValue
});
var changeToCloseValue = function changeToCloseValue(newValue) {
if (!disabled) {
var valueIndex = 0;
var valueDist = mergedMax - mergedMin;
rawValues.forEach(function (val, index) {
var dist = Math.abs(newValue - val);
if (!(min === prevProps.min && max === prevProps.max) && utils.isValueOutOfRange(theValue, this.props)) {
onChange(nextValue);
if (dist <= valueDist) {
valueDist = dist;
valueIndex = index;
}
}); // Create new values
var cloneNextValues = (0, _toConsumableArray2.default)(rawValues);
cloneNextValues[valueIndex] = newValue; // Fill value to match default 2
if (range && !rawValues.length && count === undefined) {
cloneNextValues.push(newValue);
}
triggerChange(cloneNextValues);
onAfterChange === null || onAfterChange === void 0 ? void 0 : onAfterChange(cloneNextValues);
}
}, {
key: "onChange",
value: function onChange(state) {
var props = this.props;
var isNotControlled = !('value' in props);
var nextState = state.value > this.props.max ? (0, _objectSpread2.default)((0, _objectSpread2.default)({}, state), {}, {
value: this.props.max
}) : state;
}; // ============================ Click =============================
if (isNotControlled) {
this.setState(nextState);
}
var changedValue = nextState.value;
props.onChange(changedValue);
var onSliderMouseDown = function onSliderMouseDown(e) {
e.preventDefault();
var _containerRef$current = containerRef.current.getBoundingClientRect(),
width = _containerRef$current.width,
height = _containerRef$current.height,
left = _containerRef$current.left,
top = _containerRef$current.top,
bottom = _containerRef$current.bottom,
right = _containerRef$current.right;
var clientX = e.clientX,
clientY = e.clientY;
var percent;
switch (direction) {
case 'btt':
percent = (bottom - clientY) / height;
break;
case 'ttb':
percent = (clientY - top) / height;
break;
case 'rtl':
percent = (right - clientX) / width;
break;
default:
percent = (clientX - left) / width;
}
}, {
key: "onStart",
value: function onStart(position) {
this.setState({
dragging: true
});
var props = this.props;
var prevValue = this.getValue();
props.onBeforeChange(prevValue);
var value = this.calcValueByPos(position);
this.startValue = value;
this.startPosition = position;
if (value === prevValue) return;
this.prevMovedHandleIndex = 0;
this.onChange({
value: value
});
var nextValue = mergedMin + percent * (mergedMax - mergedMin);
changeToCloseValue(formatValue(nextValue));
}; // =========================== Keyboard ===========================
var _React$useState = React.useState(null),
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
keyboardValue = _React$useState2[0],
setKeyboardValue = _React$useState2[1];
var onHandleOffsetChange = function onHandleOffsetChange(offset, valueIndex) {
if (!disabled) {
var next = offsetValues(rawValues, offset, valueIndex);
onBeforeChange === null || onBeforeChange === void 0 ? void 0 : onBeforeChange(getTriggerValue(rawValues));
triggerChange(next.values);
onAfterChange === null || onAfterChange === void 0 ? void 0 : onAfterChange(getTriggerValue(next.values));
setKeyboardValue(next.value);
}
}, {
key: "onMove",
value: function onMove(e, position) {
utils.pauseEvent(e);
var oldValue = this.state.value;
var value = this.calcValueByPos(position);
if (value === oldValue) return;
this.onChange({
value: value
});
};
React.useEffect(function () {
if (keyboardValue !== null) {
var valueIndex = rawValues.indexOf(keyboardValue);
if (valueIndex >= 0) {
handlesRef.current.focus(valueIndex);
}
}
}, {
key: "onKeyboard",
value: function onKeyboard(e) {
var _this$props2 = this.props,
reverse = _this$props2.reverse,
vertical = _this$props2.vertical;
var valueMutator = utils.getKeyboardValueMutator(e, vertical, reverse);
if (valueMutator) {
utils.pauseEvent(e);
var state = this.state;
var oldValue = state.value;
var mutatedValue = valueMutator(oldValue, this.props);
var value = this.trimAlignValue(mutatedValue);
if (value === oldValue) return;
this.onChange({
value: value
});
this.props.onAfterChange(value);
this.onEnd();
setKeyboardValue(null);
}, [keyboardValue]); // ============================= Drag =============================
var mergedDraggableTrack = React.useMemo(function () {
if (draggableTrack && mergedStep === null) {
if (process.env.NODE_ENV !== 'production') {
(0, _warning.default)(false, '`draggableTrack` is not supported when `step` is `null`.');
}
return false;
}
}, {
key: "getValue",
value: function getValue() {
return this.state.value;
return draggableTrack;
}, [draggableTrack, mergedStep]);
var finishChange = function finishChange() {
onAfterChange === null || onAfterChange === void 0 ? void 0 : onAfterChange(getTriggerValue(rawValuesRef.current));
};
var _useDrag = (0, _useDrag3.default)(containerRef, direction, rawValues, mergedMin, mergedMax, formatValue, triggerChange, finishChange, offsetValues),
_useDrag2 = (0, _slicedToArray2.default)(_useDrag, 4),
draggingIndex = _useDrag2[0],
draggingValue = _useDrag2[1],
cacheValues = _useDrag2[2],
onStartDrag = _useDrag2[3];
var onStartMove = function onStartMove(e, valueIndex) {
onStartDrag(e, valueIndex);
onBeforeChange === null || onBeforeChange === void 0 ? void 0 : onBeforeChange(getTriggerValue(rawValuesRef.current));
}; // Auto focus for updated handle
var dragging = draggingIndex !== -1;
React.useEffect(function () {
if (!dragging) {
var valueIndex = rawValues.lastIndexOf(draggingValue);
handlesRef.current.focus(valueIndex);
}
}, {
key: "getLowerBound",
value: function getLowerBound() {
var minPoint = this.props.startPoint || this.props.min;
return this.state.value > minPoint ? minPoint : this.state.value;
}
}, {
key: "getUpperBound",
value: function getUpperBound() {
if (this.state.value < this.props.startPoint) {
return this.props.startPoint;
}
}, [dragging]); // =========================== Included ===========================
return this.state.value;
var sortedCacheValues = React.useMemo(function () {
return (0, _toConsumableArray2.default)(cacheValues).sort(function (a, b) {
return a - b;
});
}, [cacheValues]); // Provide a range values with included [min, max]
// Used for Track, Mark & Dot
var _React$useMemo = React.useMemo(function () {
if (!range) {
return [mergedMin, sortedCacheValues[0]];
}
}, {
key: "trimAlignValue",
value: function trimAlignValue(v) {
var nextProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (v === null) {
return null;
return [sortedCacheValues[0], sortedCacheValues[sortedCacheValues.length - 1]];
}, [sortedCacheValues, range, mergedMin]),
_React$useMemo2 = (0, _slicedToArray2.default)(_React$useMemo, 2),
includedStart = _React$useMemo2[0],
includedEnd = _React$useMemo2[1]; // ============================= Refs =============================
React.useImperativeHandle(ref, function () {
return {
focus: function focus() {
handlesRef.current.focus(0);
},
blur: function blur() {
var _document = document,
activeElement = _document.activeElement;
if (containerRef.current.contains(activeElement)) {
activeElement === null || activeElement === void 0 ? void 0 : activeElement.blur();
}
}
};
}); // ========================== Auto Focus ==========================
var mergedProps = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, this.props), nextProps);
var val = utils.ensureValueInRange(v, mergedProps);
return utils.ensureValuePrecision(val, mergedProps);
React.useEffect(function () {
if (autoFocus) {
handlesRef.current.focus(0);
}
}, {
key: "render",
value: function render() {
var _this2 = this;
}, []); // =========================== Context ============================
var _this$props3 = this.props,
prefixCls = _this$props3.prefixCls,
vertical = _this$props3.vertical,
included = _this$props3.included,
disabled = _this$props3.disabled,
minimumTrackStyle = _this$props3.minimumTrackStyle,
trackStyle = _this$props3.trackStyle,
handleStyle = _this$props3.handleStyle,
tabIndex = _this$props3.tabIndex,
ariaLabelForHandle = _this$props3.ariaLabelForHandle,
ariaLabelledByForHandle = _this$props3.ariaLabelledByForHandle,
ariaValueTextFormatterForHandle = _this$props3.ariaValueTextFormatterForHandle,
min = _this$props3.min,
max = _this$props3.max,
startPoint = _this$props3.startPoint,
reverse = _this$props3.reverse,
handleGenerator = _this$props3.handle;
var _this$state = this.state,
value = _this$state.value,
dragging = _this$state.dragging;
var offset = this.calcOffset(value);
var handle = handleGenerator({
className: "".concat(prefixCls, "-handle"),
prefixCls: prefixCls,
vertical: vertical,
offset: offset,
value: value,
dragging: dragging,
disabled: disabled,
min: min,
max: max,
reverse: reverse,
index: 0,
tabIndex: tabIndex,
ariaLabel: ariaLabelForHandle,
ariaLabelledBy: ariaLabelledByForHandle,
ariaValueTextFormatter: ariaValueTextFormatterForHandle,
style: handleStyle[0] || handleStyle,
ref: function ref(h) {
return _this2.saveHandle(0, h);
}
});
var trackOffset = startPoint !== undefined ? this.calcOffset(startPoint) : 0;
var mergedTrackStyle = trackStyle[0] || trackStyle;
var context = React.useMemo(function () {
return {
min: mergedMin,
max: mergedMax,
direction: direction,
disabled: disabled,
step: mergedStep,
included: included,
includedStart: includedStart,
includedEnd: includedEnd,
range: range,
tabIndex: tabIndex,
ariaLabelForHandle: ariaLabelForHandle,
ariaLabelledByForHandle: ariaLabelledByForHandle,
ariaValueTextFormatterForHandle: ariaValueTextFormatterForHandle
};
}, [mergedMin, mergedMax, direction, disabled, mergedStep, included, includedStart, includedEnd, range, tabIndex, ariaLabelForHandle, ariaLabelledByForHandle, ariaValueTextFormatterForHandle]); // ============================ Render ============================
var track = /*#__PURE__*/_react.default.createElement(_Track.default, {
className: "".concat(prefixCls, "-track"),
vertical: vertical,
included: included,
offset: trackOffset,
reverse: reverse,
length: offset - trackOffset,
style: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, minimumTrackStyle), mergedTrackStyle)
});
return /*#__PURE__*/React.createElement(_context.default.Provider, {
value: context
}, /*#__PURE__*/React.createElement("div", {
ref: containerRef,
className: (0, _classnames.default)(prefixCls, className, (_classNames = {}, (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-disabled"), disabled), (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-vertical"), vertical), (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-horizontal"), !vertical), _classNames)),
style: style,
onMouseDown: onSliderMouseDown
}, /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-rail"),
style: railStyle
}), /*#__PURE__*/React.createElement(_Tracks.default, {
prefixCls: prefixCls,
style: trackStyle,
values: sortedCacheValues,
startPoint: startPoint,
onStartMove: mergedDraggableTrack ? onStartMove : null
}), /*#__PURE__*/React.createElement(_Steps.default, {
prefixCls: prefixCls,
marks: markList,
dots: dots,
style: dotStyle,
activeStyle: activeDotStyle
}), /*#__PURE__*/React.createElement(_Handles.default, {
ref: handlesRef,
prefixCls: prefixCls,
style: handleStyle,
values: cacheValues,
draggingIndex: draggingIndex,
onStartMove: onStartMove,
onOffsetChange: onHandleOffsetChange,
onFocus: onFocus,
onBlur: onBlur,
handleRender: handleRender
}), /*#__PURE__*/React.createElement(_Marks.default, {
prefixCls: prefixCls,
marks: markList,
onClick: changeToCloseValue
})));
});
return {
tracks: track,
handles: handle
};
}
}]);
return Slider;
}(_react.default.Component);
if (process.env.NODE_ENV !== 'production') {
Slider.displayName = 'Slider';
}
var _default = (0, _createSlider.default)(Slider);
var _default = Slider;
exports.default = _default;
{
"name": "rc-slider",
"version": "9.7.5",
"version": "10.0.0-alpha.0",
"description": "Slider UI component for React",

@@ -55,6 +55,8 @@ "engines": {

"rc-tooltip": "^5.0.1",
"rc-util": "^5.16.1",
"rc-util": "^5.18.1",
"shallowequal": "^1.1.0"
},
"devDependencies": {
"@testing-library/jest-dom": "^5.16.2",
"@testing-library/react": "^12.1.3",
"@types/classnames": "^2.2.9",

@@ -64,2 +66,3 @@ "@types/jest": "^26.0.0",

"@types/react-dom": "^16.9.0",
"@types/shallowequal": "^1.1.1",
"@umijs/fabric": "^2.0.0",

@@ -81,4 +84,5 @@ "cross-env": "^7.0.0",

"react-dom": "^16.0.0",
"regenerator-runtime": "^0.13.9",
"typescript": "^4.0.5"
}
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc