1 |
- {"version":3,"sources":["../../../src/components/VSparkline/VSparkline.ts"],"names":[],"mappings":"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","sourcesContent":["// Mixins\nimport Colorable from '../../mixins/colorable'\n\n// Utilities\nimport mixins, { ExtractVue } from '../../util/mixins'\nimport { genPoints } from './helpers/core'\nimport { genPath } from './helpers/path'\n\n// Types\nimport Vue, { VNode } from 'vue'\nimport { Prop, PropValidator } from 'vue/types/options'\n\nexport type SparklineItem = number | { value: number }\n\nexport type SparklineText = {\n x: number\n value: string\n}\n\nexport interface Boundary {\n minX: number\n minY: number\n maxX: number\n maxY: number\n}\n\nexport interface Point {\n x: number\n y: number\n value: number\n}\n\nexport interface BarText {\n points: Point[]\n boundary: Boundary\n offsetX: number\n}\n\ninterface options extends Vue {\n $refs: {\n path: SVGPathElement\n }\n}\n\nexport default mixins<options &\n/* eslint-disable indent */\n ExtractVue<[\n typeof Colorable\n ]>\n/* eslint-enable indent */\n>(\n Colorable\n).extend({\n name: 'VSparkline',\n\n props: {\n autoDraw: Boolean,\n autoDrawDuration: {\n type: Number,\n default: 2000\n },\n autoDrawEasing: {\n type: String,\n default: 'ease'\n },\n autoLineWidth: {\n type: Boolean,\n default: false\n },\n color: {\n type: String,\n default: 'primary'\n },\n fill: {\n type: Boolean,\n default: false\n },\n gradient: {\n type: Array as Prop<string[]>,\n default: () => ([])\n },\n gradientDirection: {\n type: String as Prop<'top' | 'bottom' | 'left' | 'right'>,\n validator: (val: string) => ['top', 'bottom', 'left', 'right'].includes(val),\n default: 'top'\n },\n height: {\n type: [String, Number],\n default: 75\n },\n labels: {\n type: Array as Prop<SparklineItem[]>,\n default: () => ([])\n },\n lineWidth: {\n type: [String, Number],\n default: 4\n },\n padding: {\n type: [String, Number],\n default: 8\n },\n smooth: {\n type: [Boolean, Number, String],\n default: false\n },\n showLabels: Boolean,\n type: {\n type: String,\n default: 'trend',\n validator: (val: string) => ['trend', 'bar'].includes(val)\n } as PropValidator<'trend' | 'bar'>,\n value: {\n type: Array as Prop<SparklineItem[]>,\n default: () => ([])\n },\n width: {\n type: [Number, String],\n default: 300\n },\n labelSize: {\n type: [Number, String],\n default: 7\n }\n },\n\n data: () => ({\n lastLength: 0\n }),\n\n computed: {\n parsedPadding (): number {\n return Number(this.padding)\n },\n parsedWidth (): number {\n return Number(this.width)\n },\n totalBars (): number {\n return this.value.length\n },\n _lineWidth (): number {\n if (this.autoLineWidth && this.type !== 'trend') {\n const totalPadding = this.parsedPadding * (this.totalBars + 1)\n return (this.parsedWidth - totalPadding) / this.totalBars\n } else {\n return Number(this.lineWidth) || 4\n }\n },\n boundary (): Boundary {\n const height = Number(this.height)\n\n return {\n minX: this.parsedPadding,\n minY: this.parsedPadding,\n maxX: this.parsedWidth - this.parsedPadding,\n maxY: height - this.parsedPadding\n }\n },\n hasLabels (): boolean {\n return Boolean(\n this.showLabels ||\n this.labels.length > 0 ||\n this.$scopedSlots.label\n )\n },\n parsedLabels (): SparklineText[] {\n const labels = []\n const points = this.points\n const len = points.length\n\n for (let i = 0; labels.length < len; i++) {\n const item = points[i]\n let value = this.labels[i]\n\n if (!value) {\n value = item === Object(item)\n ? item.value\n : item\n }\n\n labels.push({\n ...item,\n value: String(value)\n })\n }\n\n return labels\n },\n points (): Point[] {\n return genPoints(this.value.slice(), this.boundary, this.type)\n },\n textY (): number {\n return this.boundary.maxY + 6\n }\n },\n\n watch: {\n value: {\n immediate: true,\n handler () {\n this.$nextTick(() => {\n if (!this.autoDraw || this.type === 'bar') return\n\n const path = this.$refs.path\n const length = path.getTotalLength()\n\n if (!this.fill) {\n path.style.transition = 'none'\n path.style.strokeDasharray = length + ' ' + length\n path.style.strokeDashoffset = Math.abs(length - (this.lastLength || 0)).toString()\n path.getBoundingClientRect()\n path.style.transition = `stroke-dashoffset ${this.autoDrawDuration}ms ${this.autoDrawEasing}`\n path.style.strokeDashoffset = '0'\n } else {\n path.style.transformOrigin = 'bottom center'\n path.style.transition = 'none'\n path.style.transform = `scaleY(0)`\n path.getBoundingClientRect()\n path.style.transition = `transform ${this.autoDrawDuration}ms ${this.autoDrawEasing}`\n path.style.transform = `scaleY(1)`\n }\n this.lastLength = length\n })\n }\n }\n },\n\n methods: {\n genGradient () {\n const gradientDirection = this.gradientDirection\n const gradient = this.gradient.slice()\n\n // Pushes empty string to force\n // a fallback to currentColor\n if (!gradient.length) gradient.push('')\n\n const len = Math.max(gradient.length - 1, 1)\n const stops = gradient.reverse().map((color, index) =>\n this.$createElement('stop', {\n attrs: {\n offset: index / len,\n 'stop-color': color || this.color || 'currentColor'\n }\n })\n )\n\n return this.$createElement('defs', [\n this.$createElement('linearGradient', {\n attrs: {\n id: this._uid,\n x1: +(gradientDirection === 'left'),\n y1: +(gradientDirection === 'top'),\n x2: +(gradientDirection === 'right'),\n y2: +(gradientDirection === 'bottom')\n }\n }, stops)\n ])\n },\n genG (children: VNode[]) {\n return this.$createElement('g', {\n style: {\n fontSize: '8',\n textAnchor: 'middle',\n dominantBaseline: 'mathematical',\n fill: this.color || 'currentColor'\n }\n }, children)\n },\n genLabels () {\n if (!this.hasLabels) return undefined\n\n return this.genG(this.parsedLabels.map(this.genText))\n },\n genPath () {\n const radius = this.smooth === true ? 8 : Number(this.smooth)\n\n return this.$createElement('path', {\n attrs: {\n id: this._uid,\n d: genPath(this.points.slice(), radius, this.fill, Number(this.height)),\n fill: this.fill ? `url(#${this._uid})` : 'none',\n stroke: this.fill ? 'none' : `url(#${this._uid})`\n },\n ref: 'path'\n })\n },\n genText (item: SparklineText, index: number) {\n const children = this.$scopedSlots.label\n ? this.$scopedSlots.label({ index, value: item.value })\n : item.value\n\n return this.$createElement('text', {\n attrs: {\n x: item.x,\n y: this.textY\n }\n }, [children])\n },\n genBar () {\n if (!this.value || this.totalBars < 2) return undefined as never\n const { width, height, parsedPadding, _lineWidth } = this\n const viewWidth = width || this.totalBars * parsedPadding * 2\n const viewHeight = height || 75\n const boundary: Boundary = {\n minX: parsedPadding,\n minY: parsedPadding,\n maxX: Number(viewWidth) - parsedPadding,\n maxY: Number(viewHeight) - parsedPadding\n }\n const props = {\n ...this.$props\n }\n\n props.points = genPoints(this.value, boundary, this.type)\n\n const totalWidth = boundary.maxX / (props.points.length - 1)\n\n props.boundary = boundary\n props.lineWidth = _lineWidth || (totalWidth - Number(parsedPadding || 5))\n props.offsetX = 0\n if (!this.autoLineWidth) {\n props.offsetX = ((boundary.maxX / this.totalBars) / 2) - boundary.minX\n }\n\n return this.$createElement('svg', {\n attrs: {\n width: '100%',\n height: '25%',\n viewBox: `0 0 ${viewWidth} ${viewHeight}`\n }\n }, [\n this.genGradient(),\n this.genClipPath(props.offsetX, props.lineWidth, 'sparkline-bar-' + this._uid),\n this.hasLabels ? this.genBarLabels(props as BarText) : undefined as never,\n this.$createElement('g', {\n attrs: {\n transform: `scale(1,-1) translate(0,-${boundary.maxY})`,\n 'clip-path': `url(#sparkline-bar-${this._uid}-clip)`,\n fill: `url(#${this._uid})`\n }\n }, [\n this.$createElement('rect', {\n attrs: {\n x: 0,\n y: 0,\n width: viewWidth,\n height: viewHeight\n }\n })\n ])\n ])\n },\n genClipPath (offsetX: number, lineWidth: number, id: string) {\n const { maxY } = this.boundary\n const rounding = typeof this.smooth === 'number'\n ? this.smooth\n : this.smooth ? 2 : 0\n\n return this.$createElement('clipPath', {\n attrs: {\n id: `${id}-clip`\n }\n }, this.points.map(item => {\n return this.$createElement('rect', {\n attrs: {\n x: item.x + offsetX,\n y: 0,\n width: lineWidth,\n height: Math.max(maxY - item.y, 0),\n rx: rounding,\n ry: rounding\n }\n }, [\n this.autoDraw ? this.$createElement('animate', {\n attrs: {\n attributeName: 'height',\n from: 0,\n to: maxY - item.y,\n dur: `${this.autoDrawDuration}ms`,\n fill: 'freeze'\n }\n }) : undefined as never\n ])\n }))\n },\n genBarLabels (props: BarText): VNode {\n const offsetX = props.offsetX || 0\n\n const children = props.points.map(item => (\n this.$createElement('text', {\n attrs: {\n x: item.x + offsetX + this._lineWidth / 2,\n y: props.boundary.maxY + (Number(this.labelSize) || 7),\n 'font-size': Number(this.labelSize) || 7\n }\n }, item.value.toString())\n ))\n\n return this.genG(children)\n },\n genTrend () {\n return this.$createElement('svg', this.setTextColor(this.color, {\n attrs: {\n 'stroke-width': this._lineWidth || 1,\n width: '100%',\n height: '25%',\n viewBox: `0 0 ${this.width} ${this.height}`\n }\n }), [\n this.genGradient(),\n this.genLabels(),\n this.genPath()\n ])\n }\n },\n\n render (h): VNode {\n if (this.totalBars < 2) return undefined as never\n\n return this.type === 'trend'\n ? this.genTrend()\n : this.genBar()\n }\n})\n"],"sourceRoot":""}
|