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/'; | ||||
| 
 | ||||
| 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 { isValidElement } from '../../../_util/props-util'; | ||||
| 
 | ||||
| const Marks = (_, { attrs, slots }) => { | ||||
| const Marks = (_: any, { attrs, slots }: any) => { | ||||
|   const { | ||||
|     class: className, | ||||
|     vertical, | ||||
|  | @ -1,7 +1,16 @@ | |||
| import { CSSProperties } from 'vue'; | ||||
| import classNames from '../../../_util/classNames'; | ||||
| import { VueNode } from '../../../_util/type'; | ||||
| 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( | ||||
|     dots ? step > 0 : true, | ||||
|     'Slider', | ||||
|  | @ -20,7 +29,7 @@ const calcPoints = (vertical, marks, dots, step, min, max) => { | |||
|   return points; | ||||
| }; | ||||
| 
 | ||||
| const Steps = (_, { attrs }) => { | ||||
| const Steps = (_: any, { attrs }) => { | ||||
|   const { | ||||
|     prefixCls, | ||||
|     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 { findDOMNode } from '../../_util/props-util'; | ||||
| 
 | ||||
| export function isEventFromHandle(e, handles) { | ||||
| export function isEventFromHandle(e: { target: HTMLElement }, handles) { | ||||
|   try { | ||||
|     return Object.keys(handles).some( | ||||
|       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; | ||||
| } | ||||
| 
 | ||||
| export function isNotTouchEvent(e) { | ||||
| export function isNotTouchEvent(e: TouchEvent) { | ||||
|   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); | ||||
|   if (step !== null) { | ||||
|     const baseNum = 10 ** getPrecision(step); | ||||
|  | @ -32,7 +32,7 @@ export function getClosestPoint(val, { marks, step, min, max }) { | |||
|   return points[diffs.indexOf(Math.min(...diffs))]; | ||||
| } | ||||
| 
 | ||||
| export function getPrecision(step) { | ||||
| export function getPrecision(step: number) { | ||||
|   const stepString = step.toString(); | ||||
|   let precision = 0; | ||||
|   if (stepString.indexOf('.') >= 0) { | ||||
|  | @ -41,7 +41,7 @@ export function getPrecision(step) { | |||
|   return precision; | ||||
| } | ||||
| 
 | ||||
| export function getMousePosition(vertical, e) { | ||||
| export function getMousePosition(vertical: boolean, e: MouseEvent) { | ||||
|   let zoom = 1; | ||||
|   if (window.visualViewport) { | ||||
|     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; | ||||
| } | ||||
| 
 | ||||
| export function getTouchPosition(vertical, e) { | ||||
| export function getTouchPosition(vertical: boolean, e: TouchEvent) { | ||||
|   let zoom = 1; | ||||
|   if (window.visualViewport) { | ||||
|     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; | ||||
| } | ||||
| 
 | ||||
| export function getHandleCenterPosition(vertical, handle) { | ||||
| export function getHandleCenterPosition(vertical: boolean, handle: HTMLElement) { | ||||
|   const coords = handle.getBoundingClientRect(); | ||||
|   return vertical | ||||
|     ? coords.top + coords.height * 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) { | ||||
|     return min; | ||||
|   } | ||||
|  | @ -74,13 +74,13 @@ export function ensureValueInRange(val, { max, min }) { | |||
|   return val; | ||||
| } | ||||
| 
 | ||||
| export function ensureValuePrecision(val, props) { | ||||
| export function ensureValuePrecision(val: number, props: any) { | ||||
|   const { step } = props; | ||||
|   const closestPoint = isFinite(getClosestPoint(val, props)) ? getClosestPoint(val, props) : 0; // eslint-disable-line
 | ||||
|   return step === null ? closestPoint : parseFloat(closestPoint.toFixed(getPrecision(step))); | ||||
| } | ||||
| 
 | ||||
| export function pauseEvent(e) { | ||||
| export function pauseEvent(e: Event) { | ||||
|   e.stopPropagation(); | ||||
|   e.preventDefault(); | ||||
| } | ||||
|  | @ -103,7 +103,7 @@ export function calculateNextValue(func, value, props) { | |||
|   return value; | ||||
| } | ||||
| 
 | ||||
| export function getKeyboardValueMutator(e, vertical, reverse) { | ||||
| export function getKeyboardValueMutator(e: KeyboardEvent, vertical: boolean, reverse: boolean) { | ||||
|   const increase = 'increase'; | ||||
|   const decrease = 'decrease'; | ||||
|   let method = increase; | ||||
|  | @ -122,9 +122,9 @@ export function getKeyboardValueMutator(e, vertical, reverse) { | |||
|       break; | ||||
| 
 | ||||
|     case keyCode.END: | ||||
|       return (value, props) => props.max; | ||||
|       return (_value, props) => props.max; | ||||
|     case keyCode.HOME: | ||||
|       return (value, props) => props.min; | ||||
|       return (_value, props) => props.min; | ||||
|     case keyCode.PAGE_UP: | ||||
|       return (value, props) => value + props.step * 2; | ||||
|     case keyCode.PAGE_DOWN: | ||||
							
								
								
									
										2
									
								
								v2-doc
								
								
								
								
							
							
								
								
								
								
								
								
							
						
						
									
										2
									
								
								v2-doc
								
								
								
								
							|  | @ -1 +1 @@ | |||
| Subproject commit 157cce105e1f0a369658dfb29cc802ebc09d0d93 | ||||
| Subproject commit 36b2776cbf91e0db3b14d40d14879417490c56eb | ||||
		Loading…
	
		Reference in New Issue
	
	 tangjinzhou
						tangjinzhou