VBarline.mjs.map 13 KB

1
  1. {"version":3,"file":"VBarline.mjs","names":["computed","makeLineProps","genericComponent","getPropertyFromItem","getUid","propsFactory","useRender","makeVBarlineProps","autoLineWidth","Boolean","VBarline","name","props","setup","_ref","slots","uid","id","autoDrawDuration","Number","hasLabels","showLabels","labels","length","label","lineWidth","parseFloat","totalWidth","Math","max","modelValue","value","width","boundary","minX","maxX","minY","maxY","parseInt","height","items","map","item","itemValue","genBars","values","totalValues","maxValue","minValue","min","gridX","gridY","horizonY","abs","index","x","y","parsedLabels","points","len","i","push","String","bars","offsetX","gradientData","gradient","slice","reverse","_createVNode","gradientDirection","color","smooth","autoDraw","_Fragment","textAnchor","dominantBaseline","fill","labelSize"],"sources":["../../../src/components/VSparkline/VBarline.tsx"],"sourcesContent":["// Utilities\nimport { computed } from 'vue'\nimport { makeLineProps } from './util/line'\nimport { genericComponent, getPropertyFromItem, getUid, propsFactory, useRender } from '@/util'\n\n// Types\nexport type VBarlineSlots = {\n default: void\n label: { index: number, value: string }\n}\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 Bar {\n x: number\n y: number\n height: number\n value: number\n}\n\nexport const makeVBarlineProps = propsFactory({\n autoLineWidth: Boolean,\n\n ...makeLineProps(),\n}, 'VBarline')\n\nexport const VBarline = genericComponent<VBarlineSlots>()({\n name: 'VBarline',\n\n props: makeVBarlineProps(),\n\n setup (props, { slots }) {\n const uid = getUid()\n const id = computed(() => props.id || `barline-${uid}`)\n const autoDrawDuration = computed(() => Number(props.autoDrawDuration) || 500)\n\n const hasLabels = computed(() => {\n return Boolean(\n props.showLabels ||\n props.labels.length > 0 ||\n !!slots?.label\n )\n })\n\n const lineWidth = computed(() => parseFloat(props.lineWidth) || 4)\n\n const totalWidth = computed(() => Math.max(props.modelValue.length * lineWidth.value, Number(props.width)))\n\n const boundary = computed<Boundary>(() => {\n return {\n minX: 0,\n maxX: totalWidth.value,\n minY: 0,\n maxY: parseInt(props.height, 10),\n }\n })\n const items = computed(() => props.modelValue.map(item => getPropertyFromItem(item, props.itemValue, item)))\n\n function genBars (\n values: number[],\n boundary: Boundary\n ): Bar[] {\n const { minX, maxX, minY, maxY } = boundary\n const totalValues = values.length\n let maxValue = props.max != null ? Number(props.max) : Math.max(...values)\n let minValue = props.min != null ? Number(props.min) : Math.min(...values)\n\n if (minValue > 0 && props.min == null) minValue = 0\n if (maxValue < 0 && props.max == null) maxValue = 0\n\n const gridX = maxX / totalValues\n const gridY = (maxY - minY) / ((maxValue - minValue) || 1)\n const horizonY = maxY - Math.abs(minValue * gridY)\n\n return values.map((value, index) => {\n const height = Math.abs(gridY * value)\n\n return {\n x: minX + index * gridX,\n y: horizonY - height +\n +(value < 0) * height,\n height,\n value,\n }\n })\n }\n\n const parsedLabels = computed(() => {\n const labels = []\n const points = genBars(items.value, boundary.value)\n const len = points.length\n\n for (let i = 0; labels.length < len; i++) {\n const item = points[i]\n let value = props.labels[i]\n\n if (!value) {\n value = typeof item === 'object'\n ? item.value\n : item\n }\n\n labels.push({\n x: item.x,\n value: String(value),\n })\n }\n\n return labels\n })\n\n const bars = computed(() => genBars(items.value, boundary.value))\n const offsetX = computed(() => (Math.abs(bars.value[0].x - bars.value[1].x) - lineWidth.value) / 2)\n\n useRender(() => {\n const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse()\n return (\n <svg\n display=\"block\"\n >\n <defs>\n <linearGradient\n id={ id.value }\n gradientUnits=\"userSpaceOnUse\"\n x1={ props.gradientDirection === 'left' ? '100%' : '0' }\n y1={ props.gradientDirection === 'top' ? '100%' : '0' }\n x2={ props.gradientDirection === 'right' ? '100%' : '0' }\n y2={ props.gradientDirection === 'bottom' ? '100%' : '0' }\n >\n {\n gradientData.map((color, index) => (\n <stop offset={ index / (Math.max(gradientData.length - 1, 1)) } stop-color={ color || 'currentColor' } />\n ))\n }\n </linearGradient>\n </defs>\n\n <clipPath id={ `${id.value}-clip` }>\n {\n bars.value.map(item => (\n <rect\n x={ item.x + offsetX.value }\n y={ item.y }\n width={ lineWidth.value }\n height={ item.height }\n rx={ typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0 }\n ry={ typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0 }\n >\n { props.autoDraw && (\n <>\n <animate\n attributeName=\"y\"\n from={ item.y + item.height }\n to={ item.y }\n dur={ `${autoDrawDuration.value}ms` }\n fill=\"freeze\"\n />\n <animate\n attributeName=\"height\"\n from=\"0\"\n to={ item.height }\n dur={ `${autoDrawDuration.value}ms` }\n fill=\"freeze\"\n />\n </>\n )}\n </rect>\n ))\n }\n </clipPath>\n\n { hasLabels.value && (\n <g\n key=\"labels\"\n style={{\n textAnchor: 'middle',\n dominantBaseline: 'mathematical',\n fill: 'currentColor',\n }}\n >\n {\n parsedLabels.value.map((item, i) => (\n <text\n x={ item.x + offsetX.value + lineWidth.value / 2 }\n y={ (parseInt(props.height, 10) - 2) + (parseInt(props.labelSize, 10) || 7 * 0.75) }\n font-size={ Number(props.labelSize) || 7 }\n >\n { slots.label?.({ index: i, value: item.value }) ?? item.value }\n </text>\n ))\n }\n </g>\n )}\n\n <g\n clip-path={ `url(#${id.value}-clip)` }\n fill={ `url(#${id.value})` }\n >\n <rect\n x={ 0 }\n y={ 0 }\n width={ Math.max(props.modelValue.length * lineWidth.value, Number(props.width)) }\n height={ props.height }\n ></rect>\n </g>\n </svg>\n )\n })\n },\n})\n\nexport type VBarline = InstanceType<typeof VBarline>\n"],"mappings":"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","ignoreList":[]}