fix slider
							parent
							
								
									62964ceb6f
								
							
						
					
					
						commit
						f5925b8ec9
					
				|  | @ -12,84 +12,84 @@ The ToolTip has 12 placements choice. | |||
| <template> | ||||
|   <div id="components-a-tooltip-demo-placement"> | ||||
|     <div :style="{ marginLeft: `${buttonWidth}px`, whiteSpace: 'nowrap' }"> | ||||
|       <a-popconfirm placement="topLeft" > | ||||
|       <a-tooltip placement="topLeft" > | ||||
|         <template slot="title"> | ||||
|           <span>prompt text</span> | ||||
|         </template> | ||||
|         <a-button>TL</a-button> | ||||
|       </a-popconfirm> | ||||
|       <a-popconfirm placement="top" > | ||||
|       </a-tooltip> | ||||
|       <a-tooltip placement="top" > | ||||
|         <template slot="title"> | ||||
|           <span>prompt text</span> | ||||
|         </template> | ||||
|         <a-button>Top</a-button> | ||||
|       </a-popconfirm> | ||||
|       <a-popconfirm placement="topRight" > | ||||
|       </a-tooltip> | ||||
|       <a-tooltip placement="topRight" > | ||||
|         <template slot="title"> | ||||
|           <span>prompt text</span> | ||||
|         </template> | ||||
|         <a-button>TR</a-button> | ||||
|       </a-popconfirm> | ||||
|       </a-tooltip> | ||||
|     </div> | ||||
|     <div :style="{ width: `${buttonWidth}px`, float: 'left' }"> | ||||
|       <a-popconfirm placement="leftTop" > | ||||
|       <a-tooltip placement="leftTop" > | ||||
|         <template slot="title"> | ||||
|           <span>prompt text</span> | ||||
|         </template> | ||||
|         <a-button>LT</a-button> | ||||
|       </a-popconfirm> | ||||
|       <a-popconfirm placement="left" > | ||||
|       </a-tooltip> | ||||
|       <a-tooltip placement="left" > | ||||
|         <template slot="title"> | ||||
|           <span>prompt text</span> | ||||
|         </template> | ||||
|         <a-button>Left</a-button> | ||||
|       </a-popconfirm> | ||||
|       <a-popconfirm placement="leftBottom" > | ||||
|       </a-tooltip> | ||||
|       <a-tooltip placement="leftBottom" > | ||||
|         <template slot="title"> | ||||
|           <span>prompt text</span> | ||||
|         </template> | ||||
|         <a-button>LB</a-button> | ||||
|       </a-popconfirm> | ||||
|       </a-tooltip> | ||||
|     </div> | ||||
|     <div :style="{ width: `${buttonWidth}px`, marginLeft: `${buttonWidth * 4 + 24 }px`}"> | ||||
|       <a-popconfirm placement="rightTop" > | ||||
|       <a-tooltip placement="rightTop" > | ||||
|         <template slot="title"> | ||||
|           <span>prompt text</span> | ||||
|         </template> | ||||
|         <a-button>RT</a-button> | ||||
|       </a-popconfirm> | ||||
|       <a-popconfirm placement="right" > | ||||
|       </a-tooltip> | ||||
|       <a-tooltip placement="right" > | ||||
|         <template slot="title"> | ||||
|           <span>prompt text</span> | ||||
|         </template> | ||||
|         <a-button>Right</a-button> | ||||
|       </a-popconfirm> | ||||
|       <a-popconfirm placement="rightBottom" > | ||||
|       </a-tooltip> | ||||
|       <a-tooltip placement="rightBottom" > | ||||
|         <template slot="title"> | ||||
|           <span>prompt text</span> | ||||
|         </template> | ||||
|         <a-button>RB</a-button> | ||||
|       </a-popconfirm> | ||||
|       </a-tooltip> | ||||
|     </div> | ||||
|     <div :style="{ marginLeft: `${buttonWidth}px`, clear: 'both', whiteSpace: 'nowrap' }"> | ||||
|       <a-popconfirm placement="bottomLeft" > | ||||
|       <a-tooltip placement="bottomLeft" > | ||||
|         <template slot="title"> | ||||
|           <span>prompt text</span> | ||||
|         </template> | ||||
|         <a-button>BL</a-button> | ||||
|       </a-popconfirm> | ||||
|       <a-popconfirm placement="bottom" > | ||||
|       </a-tooltip> | ||||
|       <a-tooltip placement="bottom" > | ||||
|         <template slot="title"> | ||||
|             <span>prompt text</span> | ||||
|         </template> | ||||
|         <a-button>Bottom</a-button> | ||||
|       </a-popconfirm> | ||||
|       <a-popconfirm placement="bottomRight" > | ||||
|       </a-tooltip> | ||||
|       <a-tooltip placement="bottomRight" > | ||||
|         <template slot="title"> | ||||
|           <span>prompt text</span> | ||||
|         </template> | ||||
|         <a-button>BR</a-button> | ||||
|       </a-popconfirm> | ||||
|       </a-tooltip> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  |  | |||
|  | @ -0,0 +1,51 @@ | |||
| import Slider from '../index' | ||||
| import Tooltip from '../../vc-tooltip' | ||||
| import '../assets/index.less' | ||||
| import '../../vc-tooltip/assets/bootstrap.less' | ||||
| 
 | ||||
| const { createSliderWithTooltip, Handle } = Slider | ||||
| const Range = createSliderWithTooltip(Slider.Range) | ||||
| 
 | ||||
| export default { | ||||
|   data () { | ||||
|     return { | ||||
|     } | ||||
|   }, | ||||
|   render () { | ||||
|     const handle = (props) => { | ||||
|       const { value, dragging, index, ...restProps } = props | ||||
|       const handleProps = { | ||||
|         props: { | ||||
|           ...restProps, | ||||
|           value, | ||||
|         }, | ||||
|         key: index, | ||||
|       } | ||||
|       return ( | ||||
|         <Tooltip | ||||
|           prefixCls='rc-slider-tooltip' | ||||
|           overlay={value} | ||||
|           visible={dragging} | ||||
|           placement='top' | ||||
|           key={index} | ||||
|         > | ||||
|           <Handle {...handleProps} /> | ||||
|         </Tooltip> | ||||
|       ) | ||||
|     } | ||||
|     const wrapperStyle = 'width: 400px; margin: 50px' | ||||
| 
 | ||||
|     return ( | ||||
|       <div> | ||||
|         <div style={wrapperStyle}> | ||||
|           <p>Slider with custom handle</p> | ||||
|           <Slider min={0} max={20} defaultValue={3} handle={handle} /> | ||||
|         </div> | ||||
|         {/* <div style={wrapperStyle}> | ||||
|           <p>Range with custom handle</p> | ||||
|           <Range min={0} max={20} defaultValue={[3, 10]} tipFormatter={value => `${value}%`} /> | ||||
|         </div> */} | ||||
|       </div> | ||||
|     ) | ||||
|   }, | ||||
| } | ||||
|  | @ -0,0 +1,2 @@ | |||
| import Slider from './src/' | ||||
| export default Slider | ||||
|  | @ -1,8 +1,6 @@ | |||
| 
 | ||||
| import classNames from 'classnames' | ||||
| import PropTypes from '../../../_util/vue-types' | ||||
| import addEventListener from '../../../_util/Dom/addEventListener' | ||||
| import BaseMixin from '../../../_util/BaseMixin' | ||||
| import PropTypes from '../../_util/vue-types' | ||||
| import addEventListener from '../../_util/Dom/addEventListener' | ||||
| import BaseMixin from '../../_util/BaseMixin' | ||||
| 
 | ||||
| export default { | ||||
|   mixins: [BaseMixin], | ||||
|  | @ -15,6 +13,7 @@ export default { | |||
|     max: PropTypes.number, | ||||
|     value: PropTypes.number, | ||||
|     tabIndex: PropTypes.number, | ||||
|     refStr: PropTypes.any, | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|  | @ -24,6 +23,7 @@ export default { | |||
|   mounted () { | ||||
|     this.$nextTick(() => { | ||||
|       this.onMouseUpListener = addEventListener(document, 'mouseup', this.handleMouseUp) | ||||
|       this.refStr = this.$props.refStr | ||||
|     }) | ||||
|   }, | ||||
|   beforeDestroy () { | ||||
|  | @ -53,22 +53,21 @@ export default { | |||
|       this.focus() | ||||
|     }, | ||||
|     focus () { | ||||
|       this.$refs.handle.focus() | ||||
|       this.$refs[this.refStr].focus() | ||||
|     }, | ||||
|     blur () { | ||||
|       this.$refs.handle.blur() | ||||
|       this.$refs[this.refStr].blur() | ||||
|     }, | ||||
|   }, | ||||
|   render () { | ||||
|     const { | ||||
|       prefixCls, vertical, offset, disabled, min, max, value, tabIndex, ...restProps | ||||
|       prefixCls, vertical, offset, disabled, min, max, value, tabIndex, refStr, ...restProps | ||||
|     } = this.$props | ||||
| 
 | ||||
|     const className = classNames( | ||||
|       { | ||||
|         [`${prefixCls}-handle-click-focused`]: this.clickFocused, | ||||
|       } | ||||
|     ) | ||||
|     const className = { | ||||
|       [`${prefixCls}-handle`]: true, | ||||
|       [`${prefixCls}-handle-click-focused`]: this.clickFocused, | ||||
|     } | ||||
| 
 | ||||
|     const postionStyle = vertical ? { bottom: `${offset}%` } : { left: `${offset}%` } | ||||
|     const elStyle = { | ||||
|  | @ -84,18 +83,24 @@ export default { | |||
|         'aria-disabled': !!disabled, | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     const handleProps = { | ||||
|       attrs: { | ||||
|         role: 'slider', | ||||
|         tabIndex: disabled ? null : (tabIndex || 0), | ||||
|         ...ariaProps, | ||||
|         ...restProps, | ||||
|       }, | ||||
|       style: elStyle, | ||||
|       class: className, | ||||
|       on: { | ||||
|         blur: this.handleBlur, | ||||
|         keydown: this.handleKeyDown, | ||||
|       }, | ||||
|       ref: refStr, | ||||
|     } | ||||
|     return ( | ||||
|       <div | ||||
|         ref='handle' | ||||
|         role='slider' | ||||
|         tabIndex= {disabled ? null : (tabIndex || 0)} | ||||
|         {...ariaProps} | ||||
|         {...restProps} | ||||
|         class={className} | ||||
|         style={elStyle} | ||||
|         onBlur={this.handleBlur} | ||||
|         onKeydown={this.handleKeyDown} | ||||
|         {...handleProps} | ||||
|       /> | ||||
|     ) | ||||
|   }, | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| import classNames from 'classnames' | ||||
| import PropTypes from '../../../_util/vue-types' | ||||
| import BaseMixin from '../../../_util/BaseMixin' | ||||
| import { initDefaultProps, hasProp } from '../../../_util/props-util' | ||||
| import PropTypes from '../../_util/vue-types' | ||||
| import BaseMixin from '../../_util/BaseMixin' | ||||
| import { initDefaultProps, hasProp } from '../../_util/props-util' | ||||
| import Track from './common/Track' | ||||
| import createSlider from './common/createSlider' | ||||
| import * as utils from './utils' | ||||
|  | @ -334,7 +334,7 @@ const Range = { | |||
|       max, | ||||
|       disabled, | ||||
|       style: handleStyle[i], | ||||
|       ref: h => this.saveHandle(i, h), | ||||
|       refStr: 'handleRef' + i, | ||||
|     })) | ||||
| 
 | ||||
|     const tracks = bounds.slice(0, -1).map((_, index) => { | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| import PropTypes from '../../../_util/vue-types' | ||||
| import warning from '../../../_util/warning' | ||||
| import BaseMixin from '../../../_util/BaseMixin' | ||||
| import { hasProp } from '../../../_util/props-util' | ||||
| import PropTypes from '../../_util/vue-types' | ||||
| import warning from '../../_util/warning' | ||||
| import BaseMixin from '../../_util/BaseMixin' | ||||
| import { hasProp } from '../../_util/props-util' | ||||
| import Track from './common/Track' | ||||
| import createSlider from './common/createSlider' | ||||
| import * as utils from './utils' | ||||
|  | @ -136,6 +136,21 @@ const Slider = { | |||
|       const val = utils.ensureValueInRange(v, mergedProps) | ||||
|       return utils.ensureValuePrecision(val, mergedProps) | ||||
|     }, | ||||
|     getTrack ({ prefixCls, vertical, included, offset, minimumTrackStyle, _trackStyle }) { | ||||
|       return ( | ||||
|         <Track | ||||
|           class={`${prefixCls}-track`} | ||||
|           vertical={vertical} | ||||
|           included={included} | ||||
|           offset={0} | ||||
|           length={offset} | ||||
|           style={{ | ||||
|             ...minimumTrackStyle, | ||||
|             ..._trackStyle, | ||||
|           }} | ||||
|         /> | ||||
|       ) | ||||
|     }, | ||||
|   }, | ||||
|   render () { | ||||
|     const { | ||||
|  | @ -151,14 +166,14 @@ const Slider = { | |||
|       max, | ||||
|       handle: handleGenerator, | ||||
|     } = this | ||||
|     const { value, dragging } = this.state | ||||
|     const offset = this.calcOffset(value) | ||||
|     const { sValue, dragging } = this | ||||
|     const offset = this.calcOffset(sValue) | ||||
|     const handle = handleGenerator({ | ||||
|       className: `${prefixCls}-handle`, | ||||
|       prefixCls, | ||||
|       vertical, | ||||
|       offset, | ||||
|       value, | ||||
|       value: sValue, | ||||
|       dragging, | ||||
|       disabled, | ||||
|       min, | ||||
|  | @ -166,24 +181,14 @@ const Slider = { | |||
|       index: 0, | ||||
|       tabIndex, | ||||
|       style: handleStyle[0] || handleStyle, | ||||
|       ref: h => this.saveHandle(0, h), | ||||
|       refStr: 'handleRef0', | ||||
|     }) | ||||
| 
 | ||||
|     const _trackStyle = trackStyle[0] || trackStyle | ||||
|     const track = ( | ||||
|       <Track | ||||
|         class={`${prefixCls}-track`} | ||||
|         vertical={vertical} | ||||
|         included={included} | ||||
|         offset={0} | ||||
|         length={offset} | ||||
|         style={{ | ||||
|           ...minimumTrackStyle, | ||||
|           ..._trackStyle, | ||||
|         }} | ||||
|       /> | ||||
|     ) | ||||
|     return { tracks: track, handles: handle } | ||||
|     return { | ||||
|       tracks: this.getTrack({ prefixCls, vertical, included, offset, minimumTrackStyle, _trackStyle }), | ||||
|       handles: handle, | ||||
|     } | ||||
|   }, | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ const Steps = { | |||
|   functional: true, | ||||
|   render (createElement, context) { | ||||
|     const { prefixCls, vertical, marks, dots, step, included, | ||||
|       lowerBound, upperBound, max, min, dotStyle, activeDotStyle } = context.data | ||||
|       lowerBound, upperBound, max, min, dotStyle, activeDotStyle } = context.props | ||||
|     const range = max - min | ||||
|     const elements = calcPoints(vertical, marks, dots, step, min, max).map((point) => { | ||||
|       const offset = `${Math.abs(point - min) / range * 100}%` | ||||
|  | @ -37,10 +37,10 @@ const Steps = { | |||
|         [`${prefixCls}-dot-active`]: isActived, | ||||
|       }) | ||||
| 
 | ||||
|       return <span className={pointClassName} style={style} key={point} /> | ||||
|       return <span class={pointClassName} style={style} key={point} /> | ||||
|     }) | ||||
| 
 | ||||
|     return <div className={`${prefixCls}-step`}>{elements}</div> | ||||
|     return <div class={`${prefixCls}-step`}>{elements}</div> | ||||
|   }, | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,7 +2,8 @@ | |||
| const Track = { | ||||
|   functional: true, | ||||
|   render (createElement, context) { | ||||
|     const { included, vertical, offset, length, style } = context.data | ||||
|     const { included, vertical, offset, length } = context.props | ||||
|     const { style, class: className } = context.data | ||||
| 
 | ||||
|     const positonStyle = vertical ? { | ||||
|       bottom: `${offset}%`, | ||||
|  | @ -12,11 +13,11 @@ const Track = { | |||
|       width: `${length}%`, | ||||
|     } | ||||
| 
 | ||||
|     context.data.style = { | ||||
|     const elStyle = { | ||||
|       ...style, | ||||
|       ...positonStyle, | ||||
|     } | ||||
|     return included ? createElement('div', context.data, context.children) : null | ||||
|     return included ? <div class={className} style={elStyle} /> : null | ||||
|   }, | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -34,6 +34,7 @@ export default function createSlider (Component) { | |||
|     autoFocus: PropTypes.bool, | ||||
|   } | ||||
|   return { | ||||
|     mixins: [Component], | ||||
|     props: initDefaultProps(propTypes, { | ||||
|       ...Component.defaultProps, | ||||
|       prefixCls: 'rc-slider', | ||||
|  | @ -43,7 +44,13 @@ export default function createSlider (Component) { | |||
|       marks: {}, | ||||
|       handle ({ index, ...restProps }) { | ||||
|         delete restProps.dragging | ||||
|         return <Handle {...restProps} key={index} /> | ||||
|         const handleProps = { | ||||
|           props: { | ||||
|             ...restProps, | ||||
|           }, | ||||
|           key: index, | ||||
|         } | ||||
|         return <Handle {...handleProps} /> | ||||
|       }, | ||||
|       included: true, | ||||
|       disabled: false, | ||||
|  | @ -65,7 +72,7 @@ export default function createSlider (Component) { | |||
|           step | ||||
|         ) | ||||
|       } | ||||
|       this.handlesRefs = {} | ||||
|       this.handlesRefs = [] | ||||
|       return {} | ||||
|     }, | ||||
|     beforeDestroy () { | ||||
|  | @ -78,9 +85,19 @@ export default function createSlider (Component) { | |||
|       this.$nextTick(() => { | ||||
|         // Snapshot testing cannot handle refs, so be sure to null-check this. | ||||
|         this.document = this.$refs.sliderRef && this.$refs.sliderRef.ownerDocument | ||||
|         this.setHandleRefs() | ||||
|       }) | ||||
|     }, | ||||
|     methods: { | ||||
|       setHandleRefs () { | ||||
|         const refs = this.$refs | ||||
|         Object.keys(refs).map((item) => { | ||||
|           if (item.indexOf('handlesRefs') > -1) { | ||||
|             const handleArr = item.split('handlesRefs') | ||||
|             this.handlesRefs[handleArr[1]] = item | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|       onMouseDown (e) { | ||||
|         if (e.button !== 0) { return } | ||||
|         const isVertical = this.vertical | ||||
|  | @ -208,13 +225,10 @@ export default function createSlider (Component) { | |||
|         return nextValue | ||||
|       }, | ||||
|       calcOffset (value) { | ||||
|         const { min, max } = this.props | ||||
|         const { min, max } = this | ||||
|         const ratio = (value - min) / (max - min) | ||||
|         return ratio * 100 | ||||
|       }, | ||||
|       saveHandle (index, handle) { | ||||
|         this.handlesRefs[index] = handle | ||||
|       }, | ||||
|       onClickMarkLabel (e, value) { | ||||
|         e.stopPropagation() | ||||
|         this.$emit('change', { value }) | ||||
|  | @ -236,7 +250,7 @@ export default function createSlider (Component) { | |||
|         dotStyle, | ||||
|         activeDotStyle, | ||||
|       } = this | ||||
|       const { tracks, handles } = super.render() | ||||
|       const { tracks, handles } = Component.render.call(this) | ||||
| 
 | ||||
|       const sliderClassName = classNames(prefixCls, { | ||||
|         [`${prefixCls}-with-marks`]: Object.keys(marks).length, | ||||
|  | @ -262,10 +276,10 @@ export default function createSlider (Component) { | |||
|         <div | ||||
|           ref='sliderRef' | ||||
|           class={sliderClassName} | ||||
|           onTouchStart={disabled ? noop : this.onTouchStart} | ||||
|           onMouseDown={disabled ? noop : this.onMouseDown} | ||||
|           onMouseUp={disabled ? noop : this.onMouseUp} | ||||
|           onKeyDown={disabled ? noop : this.onKeyDown} | ||||
|           onTouchstart={disabled ? noop : this.onTouchStart} | ||||
|           onMousedown={disabled ? noop : this.onMouseDown} | ||||
|           onMouseup={disabled ? noop : this.onMouseUp} | ||||
|           onKeydown={disabled ? noop : this.onKeyDown} | ||||
|           onFocus={disabled ? noop : this.onFocus} | ||||
|           onBlur={disabled ? noop : this.onBlur} | ||||
|         > | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| import PropTypes from '../../../_util/vue-types' | ||||
| import BaseMixin from '../../../_util/BaseMixin' | ||||
| import PropTypes from '../../_util/vue-types' | ||||
| import BaseMixin from '../../_util/BaseMixin' | ||||
| import Tooltip from '../../vc-tooltip' | ||||
| import Handle from './Handle' | ||||
| 
 | ||||
|  |  | |||
|  | @ -64,6 +64,7 @@ export default { | |||
|     } | ||||
|     const triggerProps = { | ||||
|       props: { | ||||
|         ...extraProps, | ||||
|         popupClassName: overlayClassName, | ||||
|         prefixCls: prefixCls, | ||||
|         action: trigger, | ||||
|  | @ -79,7 +80,6 @@ export default { | |||
|         mouseLeaveDelay: mouseLeaveDelay, | ||||
|         popupStyle: overlayStyle, | ||||
|         mouseEnterDelay: mouseEnterDelay, | ||||
|         ...extraProps, | ||||
|       }, | ||||
|       on: { | ||||
|         popupVisibleChange: this.$listeners.visibleChange || noop, | ||||
|  |  | |||
|  | @ -0,0 +1,58 @@ | |||
| .@{tooltip-prefix-cls} { | ||||
|   .effect() { | ||||
|     animation-duration: 0.3s; | ||||
|     animation-fill-mode: both; | ||||
|   } | ||||
| 
 | ||||
|   &&-zoom-enter, &&-zoom-leave { | ||||
|     display: block; | ||||
|   } | ||||
| 
 | ||||
|   &-zoom-enter, &-zoom-appear { | ||||
|     opacity: 0; | ||||
|     .effect(); | ||||
|     animation-timing-function: cubic-bezier(0.18, 0.89, 0.32, 1.28); | ||||
|     animation-play-state: paused; | ||||
|   } | ||||
| 
 | ||||
|   &-zoom-leave { | ||||
|     .effect(); | ||||
|     animation-timing-function: cubic-bezier(0.6, -0.3, 0.74, 0.05); | ||||
|     animation-play-state: paused; | ||||
|   } | ||||
| 
 | ||||
|   &-zoom-enter&-zoom-enter-active, &-zoom-appear&-zoom-appear-active { | ||||
|     animation-name: rcToolTipZoomIn; | ||||
|     animation-play-state: running; | ||||
|   } | ||||
| 
 | ||||
|   &-zoom-leave&-zoom-leave-active { | ||||
|     animation-name: rcToolTipZoomOut; | ||||
|     animation-play-state: running; | ||||
|   } | ||||
| 
 | ||||
|   @keyframes rcToolTipZoomIn { | ||||
|     0% { | ||||
|       opacity: 0; | ||||
|       transform-origin: 50% 50%; | ||||
|       transform: scale(0, 0); | ||||
|     } | ||||
|     100% { | ||||
|       opacity: 1; | ||||
|       transform-origin: 50% 50%; | ||||
|       transform: scale(1, 1); | ||||
|     } | ||||
|   } | ||||
|   @keyframes rcToolTipZoomOut { | ||||
|     0% { | ||||
|       opacity: 1; | ||||
|       transform-origin: 50% 50%; | ||||
|       transform: scale(1, 1); | ||||
|     } | ||||
|     100% { | ||||
|       opacity: 0; | ||||
|       transform-origin: 50% 50%; | ||||
|       transform: scale(0, 0); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | @ -0,0 +1,164 @@ | |||
| @import "boostrap/anim.less"; | ||||
| 
 | ||||
| @tooltip-prefix-cls: rc-tooltip; | ||||
| 
 | ||||
| // | ||||
| // Tooltips | ||||
| // -------------------------------------------------- | ||||
| @font-size-base         : 12px; | ||||
| @line-height-base       : 1.5; | ||||
| @border-radius-base     : 6px; | ||||
| @overlay-shadow              : 0 0 4px rgba(0, 0, 0, 0.17); | ||||
| //** Tooltip text color | ||||
| @tooltip-color: #fff; | ||||
| //** Tooltip background color | ||||
| @tooltip-bg: #373737; | ||||
| @tooltip-opacity: 0.9; | ||||
| 
 | ||||
| //** Tooltip arrow width | ||||
| @tooltip-arrow-width: 5px; | ||||
| //** Tooltip distance with trigger | ||||
| @tooltip-distance: @tooltip-arrow-width + 4; | ||||
| //** Tooltip arrow color | ||||
| @tooltip-arrow-color: @tooltip-bg; | ||||
| 
 | ||||
| // Base class | ||||
| .@{tooltip-prefix-cls} { | ||||
|   position: absolute; | ||||
|   z-index: 1070; | ||||
|   display: block; | ||||
|   visibility: visible; | ||||
|   // remove left/top by yiminghe | ||||
|   // left: -9999px; | ||||
|   // top: -9999px; | ||||
|   font-size: @font-size-base; | ||||
|   line-height: @line-height-base; | ||||
|   opacity: @tooltip-opacity; | ||||
| 
 | ||||
|   &-hidden { | ||||
|     display: none; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-top, &-placement-topLeft, &-placement-topRight { | ||||
|     padding: @tooltip-arrow-width 0 @tooltip-distance 0; | ||||
|   } | ||||
|   &-placement-right, &-placement-rightTop, &-placement-rightBottom { | ||||
|     padding: 0 @tooltip-arrow-width 0 @tooltip-distance; | ||||
|   } | ||||
|   &-placement-bottom, &-placement-bottomLeft, &-placement-bottomRight { | ||||
|     padding: @tooltip-distance 0 @tooltip-arrow-width 0; | ||||
|   } | ||||
|   &-placement-left, &-placement-leftTop, &-placement-leftBottom { | ||||
|     padding: 0 @tooltip-distance 0 @tooltip-arrow-width; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| // Wrapper for the tooltip content | ||||
| .@{tooltip-prefix-cls}-inner { | ||||
|   padding: 8px 10px; | ||||
|   color: @tooltip-color; | ||||
|   text-align: left; | ||||
|   text-decoration: none; | ||||
|   background-color: @tooltip-bg; | ||||
|   border-radius: @border-radius-base; | ||||
|   box-shadow: @overlay-shadow; | ||||
|   min-height: 34px; | ||||
| } | ||||
| 
 | ||||
| // Arrows | ||||
| .@{tooltip-prefix-cls}-arrow { | ||||
|   position: absolute; | ||||
|   width: 0; | ||||
|   height: 0; | ||||
|   border-color: transparent; | ||||
|   border-style: solid; | ||||
| } | ||||
| 
 | ||||
| .@{tooltip-prefix-cls} { | ||||
|   &-placement-top &-arrow, | ||||
|   &-placement-topLeft &-arrow, | ||||
|   &-placement-topRight &-arrow { | ||||
|     bottom: @tooltip-distance - @tooltip-arrow-width; | ||||
|     margin-left: -@tooltip-arrow-width; | ||||
|     border-width: @tooltip-arrow-width @tooltip-arrow-width 0; | ||||
|     border-top-color: @tooltip-arrow-color; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-top &-arrow { | ||||
|     left: 50%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-topLeft &-arrow { | ||||
|     left: 15%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-topRight &-arrow { | ||||
|     right: 15%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-right &-arrow, | ||||
|   &-placement-rightTop &-arrow, | ||||
|   &-placement-rightBottom &-arrow { | ||||
|     left: @tooltip-distance - @tooltip-arrow-width; | ||||
|     margin-top: -@tooltip-arrow-width; | ||||
|     border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0; | ||||
|     border-right-color: @tooltip-arrow-color; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-right &-arrow { | ||||
|     top: 50%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-rightTop &-arrow { | ||||
|     top: 15%; | ||||
|     margin-top: 0; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-rightBottom &-arrow { | ||||
|     bottom: 15%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-left &-arrow, | ||||
|   &-placement-leftTop &-arrow, | ||||
|   &-placement-leftBottom &-arrow { | ||||
|     right: @tooltip-distance - @tooltip-arrow-width; | ||||
|     margin-top: -@tooltip-arrow-width; | ||||
|     border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width; | ||||
|     border-left-color: @tooltip-arrow-color; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-left &-arrow { | ||||
|     top: 50%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-leftTop &-arrow { | ||||
|     top: 15%; | ||||
|     margin-top: 0; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-leftBottom &-arrow { | ||||
|     bottom: 15%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-bottom &-arrow, | ||||
|   &-placement-bottomLeft &-arrow, | ||||
|   &-placement-bottomRight &-arrow { | ||||
|     top: @tooltip-distance - @tooltip-arrow-width; | ||||
|     margin-left: -@tooltip-arrow-width; | ||||
|     border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; | ||||
|     border-bottom-color: @tooltip-arrow-color; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-bottom &-arrow { | ||||
|     left: 50%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-bottomLeft &-arrow { | ||||
|     left: 15%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-bottomRight &-arrow { | ||||
|     right: 15%; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  | @ -0,0 +1,190 @@ | |||
| @import "boostrap/anim.less"; | ||||
| 
 | ||||
| @tooltip-prefix-cls: rc-tooltip; | ||||
| 
 | ||||
| // | ||||
| // Tooltips | ||||
| // -------------------------------------------------- | ||||
| @font-size-base         : 12px; | ||||
| @line-height-base       : 1.5; | ||||
| @border-radius-base     : 3px; | ||||
| @overlay-shadow              : 0 0 4px rgba(0, 0, 0, 0.17); | ||||
| //** Tooltip text color | ||||
| @tooltip-color: #333333; | ||||
| //** Tooltip background color | ||||
| @tooltip-bg: #ffffff; | ||||
| @tooltip-opacity: 0.9; | ||||
| 
 | ||||
| @tooltip-border-width: 1px; | ||||
| @tooltip-border-color: #b1b1b1; | ||||
| @tooltip-shadow-width: 1px; | ||||
| 
 | ||||
| //** Tooltip arrow width | ||||
| @tooltip-arrow-width: 6px; | ||||
| //** Tooltip distance with trigger | ||||
| //** Tooltip arrow color | ||||
| @tooltip-arrow-color: @tooltip-border-color; | ||||
| @tooltip-arrow-inner-color: @tooltip-bg; | ||||
| 
 | ||||
| // Base class | ||||
| .@{tooltip-prefix-cls} { | ||||
|   position: absolute; | ||||
|   z-index: 1070; | ||||
|   display: block; | ||||
|   visibility: visible; | ||||
|   line-height: @line-height-base; | ||||
|   font-size: @font-size-base; | ||||
|   background-color:rgba(0, 0, 0, 0.05); | ||||
|   padding: @tooltip-shadow-width; | ||||
|   opacity: @tooltip-opacity; | ||||
| 
 | ||||
|   &-hidden { | ||||
|     display: none; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| // Wrapper for the tooltip content | ||||
| .@{tooltip-prefix-cls}-inner { | ||||
|   padding: 8px 10px; | ||||
|   color: @tooltip-color; | ||||
|   text-align: left; | ||||
|   text-decoration: none; | ||||
|   background-color: @tooltip-bg; | ||||
|   border-radius: @border-radius-base; | ||||
|   min-height: 34px; | ||||
|   border:@tooltip-border-width solid @tooltip-border-color; | ||||
| } | ||||
| 
 | ||||
| // Arrows | ||||
| .@{tooltip-prefix-cls}-arrow, | ||||
| .@{tooltip-prefix-cls}-arrow-inner{ | ||||
|   position: absolute; | ||||
|   width: 0; | ||||
|   height: 0; | ||||
|   border-color: transparent; | ||||
|   border-style: solid; | ||||
| } | ||||
| 
 | ||||
| .@{tooltip-prefix-cls} { | ||||
|   &-placement-top &-arrow, | ||||
|   &-placement-topLeft &-arrow, | ||||
|   &-placement-topRight &-arrow{ | ||||
|     bottom: -@tooltip-arrow-width + @tooltip-shadow-width; | ||||
|     margin-left: -@tooltip-arrow-width; | ||||
|     border-width: @tooltip-arrow-width @tooltip-arrow-width 0; | ||||
|     border-top-color: @tooltip-arrow-color; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-top &-arrow-inner, | ||||
|   &-placement-topLeft &-arrow-inner, | ||||
|   &-placement-topRight &-arrow-inner{ | ||||
|     bottom: @tooltip-border-width; | ||||
|     margin-left: -@tooltip-arrow-width; | ||||
|     border-width: @tooltip-arrow-width @tooltip-arrow-width 0; | ||||
|     border-top-color: @tooltip-arrow-inner-color; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-top &-arrow { | ||||
|     left: 50%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-topLeft &-arrow { | ||||
|     left: 15%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-topRight &-arrow { | ||||
|     right: 15%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-right &-arrow, | ||||
|   &-placement-rightTop &-arrow, | ||||
|   &-placement-rightBottom &-arrow { | ||||
|     left: -@tooltip-arrow-width + @tooltip-shadow-width; | ||||
|     margin-top: -@tooltip-arrow-width; | ||||
|     border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0; | ||||
|     border-right-color: @tooltip-arrow-color; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-right &-arrow-inner, | ||||
|   &-placement-rightTop &-arrow-inner, | ||||
|   &-placement-rightBottom &-arrow-inner { | ||||
|     left: @tooltip-border-width; | ||||
|     margin-top: -@tooltip-arrow-width; | ||||
|     border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0; | ||||
|     border-right-color: @tooltip-arrow-inner-color; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-right &-arrow { | ||||
|     top: 50%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-rightTop &-arrow { | ||||
|     top: 15%; | ||||
|     margin-top: 0; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-rightBottom &-arrow { | ||||
|     bottom: 15%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-left &-arrow, | ||||
|   &-placement-leftTop &-arrow, | ||||
|   &-placement-leftBottom &-arrow { | ||||
|     right: -@tooltip-arrow-width + @tooltip-shadow-width; | ||||
|     margin-top: -@tooltip-arrow-width; | ||||
|     border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width; | ||||
|     border-left-color: @tooltip-arrow-color; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-left &-arrow-inner, | ||||
|   &-placement-leftTop &-arrow-inner, | ||||
|   &-placement-leftBottom &-arrow-inner { | ||||
|     right: @tooltip-border-width; | ||||
|     margin-top: -@tooltip-arrow-width; | ||||
|     border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width; | ||||
|     border-left-color: @tooltip-arrow-inner-color; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-left &-arrow { | ||||
|     top: 50%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-leftTop &-arrow { | ||||
|     top: 15%; | ||||
|     margin-top: 0; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-leftBottom &-arrow { | ||||
|     bottom: 15%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-bottom &-arrow, | ||||
|   &-placement-bottomLeft &-arrow, | ||||
|   &-placement-bottomRight &-arrow { | ||||
|     top: -@tooltip-arrow-width + @tooltip-shadow-width;; | ||||
|     margin-left: -@tooltip-arrow-width; | ||||
|     border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; | ||||
|     border-bottom-color: @tooltip-arrow-color; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-bottom &-arrow-inner, | ||||
|   &-placement-bottomLeft &-arrow-inner, | ||||
|   &-placement-bottomRight &-arrow-inner { | ||||
|     top: @tooltip-border-width; | ||||
|     margin-left: -@tooltip-arrow-width; | ||||
|     border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; | ||||
|     border-bottom-color: @tooltip-arrow-inner-color; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-bottom &-arrow { | ||||
|     left: 50%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-bottomLeft &-arrow { | ||||
|     left: 15%; | ||||
|   } | ||||
| 
 | ||||
|   &-placement-bottomRight &-arrow { | ||||
|     right: 15%; | ||||
|   } | ||||
| } | ||||
|  | @ -55,12 +55,3 @@ Slider | |||
| Table | ||||
| Timeline | ||||
| Transfer | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ const AsyncComp = () => { | |||
|   const hashs = window.location.hash.split('/') | ||||
|   const d = hashs[hashs.length - 1] | ||||
|   return { | ||||
|     component: import(`../components/popconfirm/demo/${d}`), | ||||
|     component: import(`../components/vc-slider/demo/${d}`), | ||||
|   } | ||||
| } | ||||
| export default [ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 wangxueliang
						wangxueliang