refactor: slider to ts
parent
7dbc86ea5c
commit
e1f979014d
|
@ -1,4 +1,4 @@
|
||||||
// base rc-slider 8.7.1
|
// base rc-slider 9.7.2
|
||||||
import Slider from './src/';
|
import Slider from './src/';
|
||||||
|
|
||||||
export default Slider;
|
export default Slider;
|
||||||
|
|
|
@ -1,151 +0,0 @@
|
||||||
import { defineComponent } from 'vue';
|
|
||||||
import classNames from '../../_util/classNames';
|
|
||||||
import PropTypes from '../../_util/vue-types';
|
|
||||||
import BaseMixin from '../../_util/BaseMixin';
|
|
||||||
import { getOptionProps } from '../../_util/props-util';
|
|
||||||
import addEventListener from '../../vc-util/Dom/addEventListener';
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
name: 'Handle',
|
|
||||||
mixins: [BaseMixin],
|
|
||||||
inheritAttrs: false,
|
|
||||||
props: {
|
|
||||||
prefixCls: PropTypes.string,
|
|
||||||
vertical: PropTypes.looseBool,
|
|
||||||
offset: PropTypes.number,
|
|
||||||
disabled: PropTypes.looseBool,
|
|
||||||
min: PropTypes.number,
|
|
||||||
max: PropTypes.number,
|
|
||||||
value: PropTypes.number,
|
|
||||||
tabindex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
||||||
reverse: PropTypes.looseBool,
|
|
||||||
ariaLabel: String,
|
|
||||||
ariaLabelledBy: String,
|
|
||||||
ariaValueTextFormatter: Function,
|
|
||||||
// handleFocus: PropTypes.func.def(noop),
|
|
||||||
// handleBlur: PropTypes.func.def(noop),
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
clickFocused: false,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
// mouseup won't trigger if mouse moved out of handle
|
|
||||||
// so we listen on document here.
|
|
||||||
this.onMouseUpListener = addEventListener(document, 'mouseup', this.handleMouseUp);
|
|
||||||
},
|
|
||||||
beforeUnmount() {
|
|
||||||
if (this.onMouseUpListener) {
|
|
||||||
this.onMouseUpListener.remove();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
setHandleRef(node) {
|
|
||||||
this.handle = node;
|
|
||||||
},
|
|
||||||
setClickFocus(focused) {
|
|
||||||
this.setState({ clickFocused: focused });
|
|
||||||
},
|
|
||||||
handleMouseUp() {
|
|
||||||
if (document.activeElement === this.handle) {
|
|
||||||
this.setClickFocus(true);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
handleBlur(e) {
|
|
||||||
this.setClickFocus(false);
|
|
||||||
this.__emit('blur', e);
|
|
||||||
},
|
|
||||||
handleKeyDown() {
|
|
||||||
this.setClickFocus(false);
|
|
||||||
},
|
|
||||||
clickFocus() {
|
|
||||||
this.setClickFocus(true);
|
|
||||||
this.focus();
|
|
||||||
},
|
|
||||||
focus() {
|
|
||||||
this.handle.focus();
|
|
||||||
},
|
|
||||||
blur() {
|
|
||||||
this.handle.blur();
|
|
||||||
},
|
|
||||||
// when click can not focus in vue, use mousedown trigger focus
|
|
||||||
handleMousedown(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
this.focus();
|
|
||||||
this.__emit('mousedown', e);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
render() {
|
|
||||||
const {
|
|
||||||
prefixCls,
|
|
||||||
vertical,
|
|
||||||
reverse,
|
|
||||||
offset,
|
|
||||||
disabled,
|
|
||||||
min,
|
|
||||||
max,
|
|
||||||
value,
|
|
||||||
tabindex,
|
|
||||||
ariaLabel,
|
|
||||||
ariaLabelledBy,
|
|
||||||
ariaValueTextFormatter,
|
|
||||||
} = getOptionProps(this);
|
|
||||||
const className = classNames(this.$attrs.class, {
|
|
||||||
[`${prefixCls}-handle-click-focused`]: this.clickFocused,
|
|
||||||
});
|
|
||||||
|
|
||||||
const positionStyle = vertical
|
|
||||||
? {
|
|
||||||
[reverse ? 'top' : 'bottom']: `${offset}%`,
|
|
||||||
[reverse ? 'bottom' : 'top']: 'auto',
|
|
||||||
transform: reverse ? null : `translateY(+50%)`,
|
|
||||||
}
|
|
||||||
: {
|
|
||||||
[reverse ? 'right' : 'left']: `${offset}%`,
|
|
||||||
[reverse ? 'left' : 'right']: 'auto',
|
|
||||||
transform: `translateX(${reverse ? '+' : '-'}50%)`,
|
|
||||||
};
|
|
||||||
|
|
||||||
const ariaProps = {
|
|
||||||
'aria-valuemin': min,
|
|
||||||
'aria-valuemax': max,
|
|
||||||
'aria-valuenow': value,
|
|
||||||
'aria-disabled': !!disabled,
|
|
||||||
};
|
|
||||||
const elStyle = {
|
|
||||||
...this.$attrs.style,
|
|
||||||
...positionStyle,
|
|
||||||
};
|
|
||||||
let mergedTabIndex = tabindex || 0;
|
|
||||||
if (disabled || tabindex === null) {
|
|
||||||
mergedTabIndex = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
let ariaValueText;
|
|
||||||
if (ariaValueTextFormatter) {
|
|
||||||
ariaValueText = ariaValueTextFormatter(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleProps = {
|
|
||||||
...this.$attrs,
|
|
||||||
role: 'slider',
|
|
||||||
tabindex: mergedTabIndex,
|
|
||||||
...ariaProps,
|
|
||||||
class: className,
|
|
||||||
onBlur: this.handleBlur,
|
|
||||||
onKeydown: this.handleKeyDown,
|
|
||||||
onMousedown: this.handleMousedown,
|
|
||||||
ref: this.setHandleRef,
|
|
||||||
style: elStyle,
|
|
||||||
};
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
{...handleProps}
|
|
||||||
aria-label={ariaLabel}
|
|
||||||
aria-labelledby={ariaLabelledBy}
|
|
||||||
aria-valuetext={ariaValueText}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
},
|
|
||||||
});
|
|
|
@ -0,0 +1,265 @@
|
||||||
|
import { computed, CSSProperties, defineComponent, ref } from 'vue';
|
||||||
|
import classNames from '../../_util/classNames';
|
||||||
|
import PropTypes from '../../_util/vue-types';
|
||||||
|
import addEventListener from '../../vc-util/Dom/addEventListener';
|
||||||
|
import { onMounted } from 'vue';
|
||||||
|
import { onBeforeUnmount } from 'vue';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: 'Handle',
|
||||||
|
inheritAttrs: false,
|
||||||
|
props: {
|
||||||
|
prefixCls: PropTypes.string,
|
||||||
|
vertical: PropTypes.looseBool,
|
||||||
|
offset: PropTypes.number,
|
||||||
|
disabled: PropTypes.looseBool,
|
||||||
|
min: PropTypes.number,
|
||||||
|
max: PropTypes.number,
|
||||||
|
value: PropTypes.number,
|
||||||
|
tabindex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
||||||
|
reverse: PropTypes.looseBool,
|
||||||
|
ariaLabel: String,
|
||||||
|
ariaLabelledBy: String,
|
||||||
|
ariaValueTextFormatter: Function,
|
||||||
|
},
|
||||||
|
setup(props, { attrs, emit, expose }) {
|
||||||
|
const clickFocused = ref(false);
|
||||||
|
const handle = ref();
|
||||||
|
const handleMouseUp = () => {
|
||||||
|
if (document.activeElement === handle.value) {
|
||||||
|
clickFocused.value = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const handleBlur = () => {
|
||||||
|
clickFocused.value = false;
|
||||||
|
emit('blur');
|
||||||
|
};
|
||||||
|
const handleKeyDown = () => {
|
||||||
|
clickFocused.value = false;
|
||||||
|
};
|
||||||
|
const focus = () => {
|
||||||
|
handle.value?.focus();
|
||||||
|
};
|
||||||
|
const blur = () => {
|
||||||
|
handle.value?.blur();
|
||||||
|
};
|
||||||
|
const clickFocus = () => {
|
||||||
|
clickFocused.value = true;
|
||||||
|
focus();
|
||||||
|
};
|
||||||
|
|
||||||
|
// when click can not focus in vue, use mousedown trigger focus
|
||||||
|
const handleMousedown = (e: MouseEvent) => {
|
||||||
|
e.preventDefault();
|
||||||
|
focus();
|
||||||
|
emit('mousedown', e);
|
||||||
|
};
|
||||||
|
expose({
|
||||||
|
focus,
|
||||||
|
blur,
|
||||||
|
clickFocus,
|
||||||
|
});
|
||||||
|
let onMouseUpListener = null;
|
||||||
|
onMounted(() => {
|
||||||
|
onMouseUpListener = addEventListener(document, 'mouseup', handleMouseUp);
|
||||||
|
});
|
||||||
|
onBeforeUnmount(() => {
|
||||||
|
onMouseUpListener?.remove();
|
||||||
|
});
|
||||||
|
|
||||||
|
const positionStyle = computed(() => {
|
||||||
|
const { vertical, offset, reverse } = props;
|
||||||
|
return vertical
|
||||||
|
? {
|
||||||
|
[reverse ? 'top' : 'bottom']: `${offset}%`,
|
||||||
|
[reverse ? 'bottom' : 'top']: 'auto',
|
||||||
|
transform: reverse ? null : `translateY(+50%)`,
|
||||||
|
}
|
||||||
|
: {
|
||||||
|
[reverse ? 'right' : 'left']: `${offset}%`,
|
||||||
|
[reverse ? 'left' : 'right']: 'auto',
|
||||||
|
transform: `translateX(${reverse ? '+' : '-'}50%)`,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return () => {
|
||||||
|
const {
|
||||||
|
prefixCls,
|
||||||
|
disabled,
|
||||||
|
min,
|
||||||
|
max,
|
||||||
|
value,
|
||||||
|
tabindex,
|
||||||
|
ariaLabel,
|
||||||
|
ariaLabelledBy,
|
||||||
|
ariaValueTextFormatter,
|
||||||
|
} = props;
|
||||||
|
const className = classNames(attrs.class, {
|
||||||
|
[`${prefixCls}-handle-click-focused`]: clickFocused.value,
|
||||||
|
});
|
||||||
|
|
||||||
|
const ariaProps = {
|
||||||
|
'aria-valuemin': min,
|
||||||
|
'aria-valuemax': max,
|
||||||
|
'aria-valuenow': value,
|
||||||
|
'aria-disabled': !!disabled,
|
||||||
|
};
|
||||||
|
const elStyle = {
|
||||||
|
...(attrs.style as CSSProperties),
|
||||||
|
...positionStyle.value,
|
||||||
|
};
|
||||||
|
let mergedTabIndex = tabindex || 0;
|
||||||
|
if (disabled || tabindex === null) {
|
||||||
|
mergedTabIndex = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
let ariaValueText;
|
||||||
|
if (ariaValueTextFormatter) {
|
||||||
|
ariaValueText = ariaValueTextFormatter(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleProps = {
|
||||||
|
...attrs,
|
||||||
|
role: 'slider',
|
||||||
|
tabindex: mergedTabIndex,
|
||||||
|
...ariaProps,
|
||||||
|
class: className,
|
||||||
|
onBlur: handleBlur,
|
||||||
|
onKeydown: handleKeyDown,
|
||||||
|
onMousedown: handleMousedown,
|
||||||
|
ref: handle,
|
||||||
|
style: elStyle,
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
{...handleProps}
|
||||||
|
aria-label={ariaLabel}
|
||||||
|
aria-labelledby={ariaLabelledBy}
|
||||||
|
aria-valuetext={ariaValueText}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
// data() {
|
||||||
|
// return {
|
||||||
|
// clickFocused: false,
|
||||||
|
// };
|
||||||
|
// },
|
||||||
|
// mounted() {
|
||||||
|
// // mouseup won't trigger if mouse moved out of handle
|
||||||
|
// // so we listen on document here.
|
||||||
|
// this.onMouseUpListener = addEventListener(document, 'mouseup', this.handleMouseUp);
|
||||||
|
// },
|
||||||
|
// beforeUnmount() {
|
||||||
|
// if (this.onMouseUpListener) {
|
||||||
|
// this.onMouseUpListener.remove();
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// methods: {
|
||||||
|
// setHandleRef(node) {
|
||||||
|
// this.handle = node;
|
||||||
|
// },
|
||||||
|
// setClickFocus(focused) {
|
||||||
|
// this.setState({ clickFocused: focused });
|
||||||
|
// },
|
||||||
|
// handleMouseUp() {
|
||||||
|
// if (document.activeElement === this.handle) {
|
||||||
|
// this.setClickFocus(true);
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// handleBlur(e) {
|
||||||
|
// this.setClickFocus(false);
|
||||||
|
// this.__emit('blur', e);
|
||||||
|
// },
|
||||||
|
// handleKeyDown() {
|
||||||
|
// this.setClickFocus(false);
|
||||||
|
// },
|
||||||
|
// clickFocus() {
|
||||||
|
// this.setClickFocus(true);
|
||||||
|
// this.focus();
|
||||||
|
// },
|
||||||
|
// focus() {
|
||||||
|
// this.handle.focus();
|
||||||
|
// },
|
||||||
|
// blur() {
|
||||||
|
// this.handle.blur();
|
||||||
|
// },
|
||||||
|
// // when click can not focus in vue, use mousedown trigger focus
|
||||||
|
// handleMousedown(e) {
|
||||||
|
// e.preventDefault();
|
||||||
|
// this.focus();
|
||||||
|
// this.__emit('mousedown', e);
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// render() {
|
||||||
|
// const {
|
||||||
|
// prefixCls,
|
||||||
|
// vertical,
|
||||||
|
// reverse,
|
||||||
|
// offset,
|
||||||
|
// disabled,
|
||||||
|
// min,
|
||||||
|
// max,
|
||||||
|
// value,
|
||||||
|
// tabindex,
|
||||||
|
// ariaLabel,
|
||||||
|
// ariaLabelledBy,
|
||||||
|
// ariaValueTextFormatter,
|
||||||
|
// } = getOptionProps(this);
|
||||||
|
// const className = classNames(this.$attrs.class, {
|
||||||
|
// [`${prefixCls}-handle-click-focused`]: this.clickFocused,
|
||||||
|
// });
|
||||||
|
|
||||||
|
// const positionStyle = vertical
|
||||||
|
// ? {
|
||||||
|
// [reverse ? 'top' : 'bottom']: `${offset}%`,
|
||||||
|
// [reverse ? 'bottom' : 'top']: 'auto',
|
||||||
|
// transform: reverse ? null : `translateY(+50%)`,
|
||||||
|
// }
|
||||||
|
// : {
|
||||||
|
// [reverse ? 'right' : 'left']: `${offset}%`,
|
||||||
|
// [reverse ? 'left' : 'right']: 'auto',
|
||||||
|
// transform: `translateX(${reverse ? '+' : '-'}50%)`,
|
||||||
|
// };
|
||||||
|
|
||||||
|
// const ariaProps = {
|
||||||
|
// 'aria-valuemin': min,
|
||||||
|
// 'aria-valuemax': max,
|
||||||
|
// 'aria-valuenow': value,
|
||||||
|
// 'aria-disabled': !!disabled,
|
||||||
|
// };
|
||||||
|
// const elStyle = {
|
||||||
|
// ...this.$attrs.style,
|
||||||
|
// ...positionStyle,
|
||||||
|
// };
|
||||||
|
// let mergedTabIndex = tabindex || 0;
|
||||||
|
// if (disabled || tabindex === null) {
|
||||||
|
// mergedTabIndex = null;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// let ariaValueText;
|
||||||
|
// if (ariaValueTextFormatter) {
|
||||||
|
// ariaValueText = ariaValueTextFormatter(value);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const handleProps = {
|
||||||
|
// ...this.$attrs,
|
||||||
|
// role: 'slider',
|
||||||
|
// tabindex: mergedTabIndex,
|
||||||
|
// ...ariaProps,
|
||||||
|
// class: className,
|
||||||
|
// onBlur: this.handleBlur,
|
||||||
|
// onKeydown: this.handleKeyDown,
|
||||||
|
// onMousedown: this.handleMousedown,
|
||||||
|
// ref: this.setHandleRef,
|
||||||
|
// style: elStyle,
|
||||||
|
// };
|
||||||
|
// return (
|
||||||
|
// <div
|
||||||
|
// {...handleProps}
|
||||||
|
// aria-label={ariaLabel}
|
||||||
|
// aria-labelledby={ariaLabelledBy}
|
||||||
|
// aria-valuetext={ariaValueText}
|
||||||
|
// />
|
||||||
|
// );
|
||||||
|
// },
|
||||||
|
});
|
|
@ -2,7 +2,7 @@ import supportsPassive from '../../../_util/supportsPassive';
|
||||||
import classNames from '../../../_util/classNames';
|
import classNames from '../../../_util/classNames';
|
||||||
import { isValidElement } from '../../../_util/props-util';
|
import { isValidElement } from '../../../_util/props-util';
|
||||||
|
|
||||||
const Marks = (_, { attrs, slots }) => {
|
const Marks = (_: any, { attrs, slots }: any) => {
|
||||||
const {
|
const {
|
||||||
class: className,
|
class: className,
|
||||||
vertical,
|
vertical,
|
|
@ -1,7 +1,16 @@
|
||||||
|
import { CSSProperties } from 'vue';
|
||||||
import classNames from '../../../_util/classNames';
|
import classNames from '../../../_util/classNames';
|
||||||
|
import { VueNode } from '../../../_util/type';
|
||||||
import warning from '../../../_util/warning';
|
import warning from '../../../_util/warning';
|
||||||
|
|
||||||
const calcPoints = (vertical, marks, dots, step, min, max) => {
|
const calcPoints = (
|
||||||
|
_vertical: boolean,
|
||||||
|
marks: Record<number, VueNode | { style?: CSSProperties; label?: string }>,
|
||||||
|
dots: boolean,
|
||||||
|
step: number,
|
||||||
|
min: number,
|
||||||
|
max: number,
|
||||||
|
) => {
|
||||||
warning(
|
warning(
|
||||||
dots ? step > 0 : true,
|
dots ? step > 0 : true,
|
||||||
'Slider',
|
'Slider',
|
||||||
|
@ -20,7 +29,7 @@ const calcPoints = (vertical, marks, dots, step, min, max) => {
|
||||||
return points;
|
return points;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Steps = (_, { attrs }) => {
|
const Steps = (_: any, { attrs }) => {
|
||||||
const {
|
const {
|
||||||
prefixCls,
|
prefixCls,
|
||||||
vertical,
|
vertical,
|
|
@ -1,87 +0,0 @@
|
||||||
import PropTypes from '../../_util/vue-types';
|
|
||||||
import BaseMixin from '../../_util/BaseMixin';
|
|
||||||
import Tooltip from '../../vc-tooltip';
|
|
||||||
import { getOptionProps } from '../../_util/props-util';
|
|
||||||
import Handle from './Handle';
|
|
||||||
|
|
||||||
export default function createSliderWithTooltip(Component) {
|
|
||||||
return {
|
|
||||||
name: 'SliderTooltip',
|
|
||||||
inheritAttrs: false,
|
|
||||||
mixins: [BaseMixin, Component],
|
|
||||||
props: {
|
|
||||||
...Component.props,
|
|
||||||
tipFormatter: PropTypes.func.def(value => {
|
|
||||||
return value;
|
|
||||||
}),
|
|
||||||
handleStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.arrayOf(PropTypes.object)]),
|
|
||||||
tipProps: PropTypes.object.def(() => ({})),
|
|
||||||
getTooltipContainer: PropTypes.func.def(node => node.parentNode),
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
visibles: {},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
handleTooltipVisibleChange(index, visible) {
|
|
||||||
this.setState(prevState => {
|
|
||||||
return {
|
|
||||||
visibles: {
|
|
||||||
...prevState.visibles,
|
|
||||||
[index]: visible,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
});
|
|
||||||
},
|
|
||||||
handleWithTooltip({ value, dragging, index, disabled, ...restProps }) {
|
|
||||||
const { tipFormatter, tipProps, handleStyle, getTooltipContainer } = this.$props;
|
|
||||||
|
|
||||||
const {
|
|
||||||
prefixCls = 'rc-slider-tooltip',
|
|
||||||
overlay = tipFormatter(value),
|
|
||||||
placement = 'top',
|
|
||||||
visible = false,
|
|
||||||
...restTooltipProps
|
|
||||||
} = tipProps;
|
|
||||||
|
|
||||||
let handleStyleWithIndex;
|
|
||||||
if (Array.isArray(handleStyle)) {
|
|
||||||
handleStyleWithIndex = handleStyle[index] || handleStyle[0];
|
|
||||||
} else {
|
|
||||||
handleStyleWithIndex = handleStyle;
|
|
||||||
}
|
|
||||||
|
|
||||||
const tooltipProps = {
|
|
||||||
...restTooltipProps,
|
|
||||||
getTooltipContainer,
|
|
||||||
prefixCls,
|
|
||||||
overlay,
|
|
||||||
placement,
|
|
||||||
visible: (!disabled && (this.visibles[index] || dragging)) || visible,
|
|
||||||
key: index,
|
|
||||||
};
|
|
||||||
const handleProps = {
|
|
||||||
value,
|
|
||||||
...restProps,
|
|
||||||
onMouseenter: () => this.handleTooltipVisibleChange(index, true),
|
|
||||||
onMouseleave: () => this.handleTooltipVisibleChange(index, false),
|
|
||||||
style: handleStyleWithIndex,
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Tooltip {...tooltipProps}>
|
|
||||||
<Handle {...handleProps} />
|
|
||||||
</Tooltip>
|
|
||||||
);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
render() {
|
|
||||||
const componentProps = {
|
|
||||||
...getOptionProps(this),
|
|
||||||
handle: this.handleWithTooltip,
|
|
||||||
};
|
|
||||||
return <Component {...componentProps} />;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
import Slider from './Slider';
|
|
||||||
import Range from './Range';
|
|
||||||
import Handle from './Handle';
|
|
||||||
import createSliderWithTooltip from './createSliderWithTooltip';
|
|
||||||
|
|
||||||
Slider.Range = Range;
|
|
||||||
Slider.Handle = Handle;
|
|
||||||
Slider.createSliderWithTooltip = createSliderWithTooltip;
|
|
||||||
export default Slider;
|
|
||||||
export { Range, Handle, createSliderWithTooltip };
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
import Slider from './Slider';
|
||||||
|
import Range from './Range';
|
||||||
|
import Handle from './Handle';
|
||||||
|
|
||||||
|
Slider.Range = Range;
|
||||||
|
Slider.Handle = Handle;
|
||||||
|
export default Slider;
|
||||||
|
export { Range, Handle };
|
|
@ -1,7 +1,7 @@
|
||||||
import keyCode from '../../_util/KeyCode';
|
import keyCode from '../../_util/KeyCode';
|
||||||
import { findDOMNode } from '../../_util/props-util';
|
import { findDOMNode } from '../../_util/props-util';
|
||||||
|
|
||||||
export function isEventFromHandle(e, handles) {
|
export function isEventFromHandle(e: { target: HTMLElement }, handles) {
|
||||||
try {
|
try {
|
||||||
return Object.keys(handles).some(
|
return Object.keys(handles).some(
|
||||||
key => e.target === findDOMNode(handles[key]) || e.target === handles[key],
|
key => e.target === findDOMNode(handles[key]) || e.target === handles[key],
|
||||||
|
@ -11,15 +11,15 @@ export function isEventFromHandle(e, handles) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isValueOutOfRange(value, { min, max }) {
|
export function isValueOutOfRange(value: number, { min, max }: { min?: number; max?: number }) {
|
||||||
return value < min || value > max;
|
return value < min || value > max;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isNotTouchEvent(e) {
|
export function isNotTouchEvent(e: TouchEvent) {
|
||||||
return e.touches.length > 1 || (e.type.toLowerCase() === 'touchend' && e.touches.length > 0);
|
return e.touches.length > 1 || (e.type.toLowerCase() === 'touchend' && e.touches.length > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getClosestPoint(val, { marks, step, min, max }) {
|
export function getClosestPoint(val: number, { marks, step, min, max }) {
|
||||||
const points = Object.keys(marks).map(parseFloat);
|
const points = Object.keys(marks).map(parseFloat);
|
||||||
if (step !== null) {
|
if (step !== null) {
|
||||||
const baseNum = 10 ** getPrecision(step);
|
const baseNum = 10 ** getPrecision(step);
|
||||||
|
@ -32,7 +32,7 @@ export function getClosestPoint(val, { marks, step, min, max }) {
|
||||||
return points[diffs.indexOf(Math.min(...diffs))];
|
return points[diffs.indexOf(Math.min(...diffs))];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getPrecision(step) {
|
export function getPrecision(step: number) {
|
||||||
const stepString = step.toString();
|
const stepString = step.toString();
|
||||||
let precision = 0;
|
let precision = 0;
|
||||||
if (stepString.indexOf('.') >= 0) {
|
if (stepString.indexOf('.') >= 0) {
|
||||||
|
@ -41,7 +41,7 @@ export function getPrecision(step) {
|
||||||
return precision;
|
return precision;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getMousePosition(vertical, e) {
|
export function getMousePosition(vertical: boolean, e: MouseEvent) {
|
||||||
let zoom = 1;
|
let zoom = 1;
|
||||||
if (window.visualViewport) {
|
if (window.visualViewport) {
|
||||||
zoom = +(window.visualViewport.width / document.body.getBoundingClientRect().width).toFixed(2);
|
zoom = +(window.visualViewport.width / document.body.getBoundingClientRect().width).toFixed(2);
|
||||||
|
@ -49,7 +49,7 @@ export function getMousePosition(vertical, e) {
|
||||||
return (vertical ? e.clientY : e.pageX) / zoom;
|
return (vertical ? e.clientY : e.pageX) / zoom;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getTouchPosition(vertical, e) {
|
export function getTouchPosition(vertical: boolean, e: TouchEvent) {
|
||||||
let zoom = 1;
|
let zoom = 1;
|
||||||
if (window.visualViewport) {
|
if (window.visualViewport) {
|
||||||
zoom = +(window.visualViewport.width / document.body.getBoundingClientRect().width).toFixed(2);
|
zoom = +(window.visualViewport.width / document.body.getBoundingClientRect().width).toFixed(2);
|
||||||
|
@ -57,14 +57,14 @@ export function getTouchPosition(vertical, e) {
|
||||||
return (vertical ? e.touches[0].clientY : e.touches[0].pageX) / zoom;
|
return (vertical ? e.touches[0].clientY : e.touches[0].pageX) / zoom;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getHandleCenterPosition(vertical, handle) {
|
export function getHandleCenterPosition(vertical: boolean, handle: HTMLElement) {
|
||||||
const coords = handle.getBoundingClientRect();
|
const coords = handle.getBoundingClientRect();
|
||||||
return vertical
|
return vertical
|
||||||
? coords.top + coords.height * 0.5
|
? coords.top + coords.height * 0.5
|
||||||
: window.pageXOffset + coords.left + coords.width * 0.5;
|
: window.pageXOffset + coords.left + coords.width * 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function ensureValueInRange(val, { max, min }) {
|
export function ensureValueInRange(val: number, { max, min }: { max?: number; min?: number }) {
|
||||||
if (val <= min) {
|
if (val <= min) {
|
||||||
return min;
|
return min;
|
||||||
}
|
}
|
||||||
|
@ -74,13 +74,13 @@ export function ensureValueInRange(val, { max, min }) {
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function ensureValuePrecision(val, props) {
|
export function ensureValuePrecision(val: number, props: any) {
|
||||||
const { step } = props;
|
const { step } = props;
|
||||||
const closestPoint = isFinite(getClosestPoint(val, props)) ? getClosestPoint(val, props) : 0; // eslint-disable-line
|
const closestPoint = isFinite(getClosestPoint(val, props)) ? getClosestPoint(val, props) : 0; // eslint-disable-line
|
||||||
return step === null ? closestPoint : parseFloat(closestPoint.toFixed(getPrecision(step)));
|
return step === null ? closestPoint : parseFloat(closestPoint.toFixed(getPrecision(step)));
|
||||||
}
|
}
|
||||||
|
|
||||||
export function pauseEvent(e) {
|
export function pauseEvent(e: Event) {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
|
@ -103,7 +103,7 @@ export function calculateNextValue(func, value, props) {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getKeyboardValueMutator(e, vertical, reverse) {
|
export function getKeyboardValueMutator(e: KeyboardEvent, vertical: boolean, reverse: boolean) {
|
||||||
const increase = 'increase';
|
const increase = 'increase';
|
||||||
const decrease = 'decrease';
|
const decrease = 'decrease';
|
||||||
let method = increase;
|
let method = increase;
|
||||||
|
@ -122,9 +122,9 @@ export function getKeyboardValueMutator(e, vertical, reverse) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case keyCode.END:
|
case keyCode.END:
|
||||||
return (value, props) => props.max;
|
return (_value, props) => props.max;
|
||||||
case keyCode.HOME:
|
case keyCode.HOME:
|
||||||
return (value, props) => props.min;
|
return (_value, props) => props.min;
|
||||||
case keyCode.PAGE_UP:
|
case keyCode.PAGE_UP:
|
||||||
return (value, props) => value + props.step * 2;
|
return (value, props) => value + props.step * 2;
|
||||||
case keyCode.PAGE_DOWN:
|
case keyCode.PAGE_DOWN:
|
2
v2-doc
2
v2-doc
|
@ -1 +1 @@
|
||||||
Subproject commit 157cce105e1f0a369658dfb29cc802ebc09d0d93
|
Subproject commit 36b2776cbf91e0db3b14d40d14879417490c56eb
|
Loading…
Reference in New Issue