UNPKG

ant-design-vue

Version:

An enterprise-class UI design language and Vue-based implementation

97 lines (84 loc) 3.11 kB
import _mergeJSXProps from 'babel-helper-vue-jsx-merge-props'; import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties'; import Vue from 'vue'; import ref from 'vue-ref'; import { initDefaultProps } from '../../_util/props-util'; import enhancer from './enhancer'; import { propTypes, defaultProps } from './types'; Vue.use(ref, { name: 'ant-ref' }); var Line = { props: initDefaultProps(propTypes, defaultProps), created: function created() { this.paths = {}; }, render: function render() { var _this = this; var h = arguments[0]; var _$props = this.$props, percent = _$props.percent, prefixCls = _$props.prefixCls, strokeColor = _$props.strokeColor, strokeLinecap = _$props.strokeLinecap, strokeWidth = _$props.strokeWidth, trailColor = _$props.trailColor, trailWidth = _$props.trailWidth, transition = _$props.transition, restProps = _objectWithoutProperties(_$props, ['percent', 'prefixCls', 'strokeColor', 'strokeLinecap', 'strokeWidth', 'trailColor', 'trailWidth', 'transition']); delete restProps.gapPosition; var percentList = Array.isArray(percent) ? percent : [percent]; var strokeColorList = Array.isArray(strokeColor) ? strokeColor : [strokeColor]; var center = strokeWidth / 2; var right = 100 - strokeWidth / 2; var pathString = 'M ' + (strokeLinecap === 'round' ? center : 0) + ',' + center + '\n L ' + (strokeLinecap === 'round' ? right : 100) + ',' + center; var viewBoxString = '0 0 100 ' + strokeWidth; var stackPtg = 0; var pathFirst = { attrs: { d: pathString, 'stroke-linecap': strokeLinecap, stroke: trailColor, 'stroke-width': trailWidth || strokeWidth, 'fill-opacity': '0' }, 'class': prefixCls + '-line-trail' }; return h( 'svg', _mergeJSXProps([{ 'class': prefixCls + '-line', attrs: { viewBox: viewBoxString, preserveAspectRatio: 'none' } }, restProps]), [h('path', pathFirst), percentList.map(function (ptg, index) { var pathStyle = { strokeDasharray: ptg + 'px, 100px', strokeDashoffset: '-' + stackPtg + 'px', transition: transition || 'stroke-dashoffset 0.3s ease 0s, stroke-dasharray .3s ease 0s, stroke 0.3s linear' }; var color = strokeColorList[index] || strokeColorList[strokeColorList.length - 1]; stackPtg += ptg; var pathProps = { key: index, attrs: { d: pathString, 'stroke-linecap': strokeLinecap, stroke: color, 'stroke-width': strokeWidth, 'fill-opacity': '0' }, 'class': prefixCls + '-line-path', style: pathStyle, directives: [{ name: 'ant-ref', value: function value(c) { _this.paths[index] = c; } }] }; return h('path', pathProps); })] ); } }; export default enhancer(Line);