UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 10.3 kB
{"version":3,"file":"progress2.mjs","sources":["../../../../../../packages/components/progress/src/progress.vue"],"sourcesContent":["<template>\n <div\n :class=\"[\n ns.b(),\n ns.m(type),\n ns.is(status),\n {\n [ns.m('without-text')]: !showText,\n [ns.m('text-inside')]: textInside,\n },\n ]\"\n role=\"progressbar\"\n :aria-valuenow=\"percentage\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <div v-if=\"type === 'line'\" :class=\"ns.b('bar')\">\n <div\n :class=\"ns.be('bar', 'outer')\"\n :style=\"{ height: `${strokeWidth}px` }\"\n >\n <div\n :class=\"[\n ns.be('bar', 'inner'),\n { [ns.bem('bar', 'inner', 'indeterminate')]: indeterminate },\n ]\"\n :style=\"barStyle\"\n >\n <div\n v-if=\"(showText || $slots.default) && textInside\"\n :class=\"ns.be('bar', 'innerText')\"\n >\n <slot :percentage=\"percentage\">\n <span>{{ content }}</span>\n </slot>\n </div>\n </div>\n </div>\n </div>\n <div\n v-else\n :class=\"ns.b('circle')\"\n :style=\"{ height: `${width}px`, width: `${width}px` }\"\n >\n <svg viewBox=\"0 0 100 100\">\n <path\n :class=\"ns.be('circle', 'track')\"\n :d=\"trackPath\"\n :stroke=\"`var(${ns.cssVarName('fill-color-light')}, #e5e9f2)`\"\n :stroke-width=\"relativeStrokeWidth\"\n fill=\"none\"\n :style=\"trailPathStyle\"\n />\n <path\n :class=\"ns.be('circle', 'path')\"\n :d=\"trackPath\"\n :stroke=\"stroke\"\n fill=\"none\"\n :opacity=\"percentage ? 1 : 0\"\n :stroke-linecap=\"strokeLinecap\"\n :stroke-width=\"relativeStrokeWidth\"\n :style=\"circlePathStyle\"\n />\n </svg>\n </div>\n <div\n v-if=\"(showText || $slots.default) && !textInside\"\n :class=\"ns.e('text')\"\n :style=\"{ fontSize: `${progressTextSize}px` }\"\n >\n <slot :percentage=\"percentage\">\n <span v-if=\"!status\">{{ content }}</span>\n <el-icon v-else><component :is=\"statusIcon\" /></el-icon>\n </slot>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n// @ts-nocheck\nimport { computed } from 'vue'\nimport { ElIcon } from '@element-plus/components/icon'\nimport {\n Check,\n CircleCheck,\n CircleClose,\n Close,\n WarningFilled,\n} from '@element-plus/icons-vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport { isFunction, isString } from '@element-plus/utils'\nimport { progressProps } from './progress'\nimport type { CSSProperties } from 'vue'\nimport type { ProgressColor } from './progress'\n\ndefineOptions({\n name: 'ElProgress',\n})\n\nconst STATUS_COLOR_MAP = {\n success: '#13ce66',\n exception: '#ff4949',\n warning: '#e6a23c',\n default: '#20a0ff',\n}\n\nconst props = defineProps(progressProps)\n\nconst ns = useNamespace('progress')\n\nconst barStyle = computed<CSSProperties>(() => ({\n width: `${props.percentage}%`,\n animationDuration: `${props.duration}s`,\n backgroundColor: getCurrentColor(props.percentage),\n}))\n\nconst relativeStrokeWidth = computed(() =>\n ((props.strokeWidth / props.width) * 100).toFixed(1)\n)\n\nconst radius = computed(() => {\n if (['circle', 'dashboard'].includes(props.type)) {\n return Number.parseInt(\n `${50 - Number.parseFloat(relativeStrokeWidth.value) / 2}`,\n 10\n )\n }\n return 0\n})\n\nconst trackPath = computed(() => {\n const r = radius.value\n const isDashboard = props.type === 'dashboard'\n return `\n M 50 50\n m 0 ${isDashboard ? '' : '-'}${r}\n a ${r} ${r} 0 1 1 0 ${isDashboard ? '-' : ''}${r * 2}\n a ${r} ${r} 0 1 1 0 ${isDashboard ? '' : '-'}${r * 2}\n `\n})\n\nconst perimeter = computed(() => 2 * Math.PI * radius.value)\n\nconst rate = computed(() => (props.type === 'dashboard' ? 0.75 : 1))\n\nconst strokeDashoffset = computed(() => {\n const offset = (-1 * perimeter.value * (1 - rate.value)) / 2\n return `${offset}px`\n})\n\nconst trailPathStyle = computed<CSSProperties>(() => ({\n strokeDasharray: `${perimeter.value * rate.value}px, ${perimeter.value}px`,\n strokeDashoffset: strokeDashoffset.value,\n}))\n\nconst circlePathStyle = computed<CSSProperties>(() => ({\n strokeDasharray: `${\n perimeter.value * rate.value * (props.percentage / 100)\n }px, ${perimeter.value}px`,\n strokeDashoffset: strokeDashoffset.value,\n transition:\n 'stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s',\n}))\n\nconst stroke = computed(() => {\n let ret: string\n if (props.color) {\n ret = getCurrentColor(props.percentage)\n } else {\n ret = STATUS_COLOR_MAP[props.status] || STATUS_COLOR_MAP.default\n }\n return ret\n})\n\nconst statusIcon = computed(() => {\n if (props.status === 'warning') {\n return WarningFilled\n }\n if (props.type === 'line') {\n return props.status === 'success' ? CircleCheck : CircleClose\n } else {\n return props.status === 'success' ? Check : Close\n }\n})\n\nconst progressTextSize = computed(() => {\n return props.type === 'line'\n ? 12 + props.strokeWidth * 0.4\n : props.width * 0.111111 + 2\n})\n\nconst content = computed(() => props.format(props.percentage))\n\nfunction getColors(color: ProgressColor[]) {\n const span = 100 / color.length\n const seriesColors = color.map((seriesColor, index) => {\n if (isString(seriesColor)) {\n return {\n color: seriesColor,\n percentage: (index + 1) * span,\n }\n }\n return seriesColor\n })\n return seriesColors.sort((a, b) => a.percentage - b.percentage)\n}\n\nconst getCurrentColor = (percentage: number) => {\n const { color } = props\n if (isFunction(color)) {\n return color(percentage)\n } else if (isString(color)) {\n return color\n } else {\n const colors = getColors(color)\n for (const color of colors) {\n if (color.percentage > percentage) return color.color\n }\n return colors[colors.length - 1]?.color\n }\n}\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAmGA,IAAA,MAAA,gBAAA,GAAA;AAAA,MACA,OAAA,EAAA,SAAA;AAAA,MACA,SAAA,EAAA,SAAA;AAAA,MACA,OAAA,EAAA,SAAA;AAAA,MACA,OAAA,EAAA,SAAA;AAAA,KACA,CAAA;AAIA,IAAA,MAAA,EAAA,GAAA,aAAA,UAAA,CAAA,CAAA;AAEA,IAAA,MAAA,QAAA,GAAA,SAAA,OAAA;AAAA,MACA,KAAA,EAAA,GAAA,KAAA,CAAA,UAAA,CAAA,CAAA,CAAA;AAAA,MACA,iBAAA,EAAA,GAAA,KAAA,CAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MACA,eAAA,EAAA,eAAA,CAAA,KAAA,CAAA,UAAA,CAAA;AAAA,KACA,CAAA,CAAA,CAAA;AAEA,IAAA,MAAA,mBAAA,GAAA,QAAA,CAAA,MACA,CAAA,KAAA,CAAA,WAAA,GAAA,MAAA,KAAA,GAAA,GAAA,EAAA,OAAA,CAAA,CAAA,CACA,CAAA,CAAA;AAEA,IAAA,MAAA,MAAA,GAAA,SAAA,MAAA;AACA,MAAA,IAAA,CAAA,QAAA,EAAA,WAAA,EAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,EAAA;AACA,QAAA,OAAA,MAAA,CAAA,QACA,CAAA,CAAA,EAAA,EAAA,GAAA,MAAA,CAAA,WAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EACA,EACA,CAAA,CAAA;AAAA,OACA;AACA,MAAA,OAAA,CAAA,CAAA;AAAA,KACA,CAAA,CAAA;AAEA,IAAA,MAAA,SAAA,GAAA,SAAA,MAAA;AACA,MAAA,MAAA,IAAA,MAAA,CAAA,KAAA,CAAA;AACA,MAAA,MAAA,WAAA,GAAA,MAAA,IAAA,KAAA,WAAA,CAAA;AACA,MAAA,OAAA,CAAA;AAAA;AAAA,cAEA,EAAA,WAAA,GAAA,KAAA,GAAA,CAAA,EAAA,CAAA,CAAA;AAAA,YAAA,EACA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,SAAA,EAAA,WAAA,GAAA,GAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAA;AAAA,YAAA,EACA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,SAAA,EAAA,WAAA,GAAA,EAAA,GAAA,MAAA,CAAA,GAAA,CAAA,CAAA;AAAA,UAAA,CAAA,CAAA;AAAA,KAEA,CAAA,CAAA;AAEA,IAAA,MAAA,YAAA,QAAA,CAAA,MAAA,IAAA,IAAA,CAAA,EAAA,GAAA,OAAA,KAAA,CAAA,CAAA;AAEA,IAAA,MAAA,OAAA,QAAA,CAAA,MAAA,MAAA,IAAA,KAAA,WAAA,GAAA,OAAA,CAAA,CAAA,CAAA;AAEA,IAAA,MAAA,gBAAA,GAAA,SAAA,MAAA;AACA,MAAA,MAAA,SAAA,CAAA,CAAA,GAAA,SAAA,CAAA,KAAA,IAAA,CAAA,GAAA,KAAA,KAAA,CAAA,GAAA,CAAA,CAAA;AACA,MAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KACA,CAAA,CAAA;AAEA,IAAA,MAAA,cAAA,GAAA,SAAA,OAAA;AAAA,MACA,iBAAA,CAAA,EAAA,SAAA,CAAA,KAAA,GAAA,IAAA,CAAA,YAAA,SAAA,CAAA,KAAA,CAAA,EAAA,CAAA;AAAA,MACA,kBAAA,gBAAA,CAAA,KAAA;AAAA,KACA,CAAA,CAAA,CAAA;AAEA,IAAA,MAAA,eAAA,GAAA,SAAA,OAAA;AAAA,MACA,eAAA,EAAA,GACA,SAAA,CAAA,KAAA,GAAA,KAAA,KAAA,IAAA,KAAA,CAAA,UAAA,GAAA,GAAA,CAAA,CAAA,IAAA,EACA,SAAA,CAAA,KAAA,CAAA,EAAA,CAAA;AAAA,MACA,kBAAA,gBAAA,CAAA,KAAA;AAAA,MACA,UACA,EAAA,oEAAA;AAAA,KACA,CAAA,CAAA,CAAA;AAEA,IAAA,MAAA,MAAA,GAAA,SAAA,MAAA;AACA,MAAA,IAAA,GAAA,CAAA;AACA,MAAA,IAAA,MAAA,KAAA,EAAA;AACA,QAAA,GAAA,GAAA,eAAA,CAAA,MAAA,UAAA,CAAA,CAAA;AAAA,OACA,MAAA;AACA,QAAA,GAAA,GAAA,gBAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,gBAAA,CAAA,OAAA,CAAA;AAAA,OACA;AACA,MAAA,OAAA,GAAA,CAAA;AAAA,KACA,CAAA,CAAA;AAEA,IAAA,MAAA,UAAA,GAAA,SAAA,MAAA;AACA,MAAA,IAAA,KAAA,CAAA,WAAA,SAAA,EAAA;AACA,QAAA,OAAA,aAAA,CAAA;AAAA,OACA;AACA,MAAA,IAAA,KAAA,CAAA,SAAA,MAAA,EAAA;AACA,QAAA,OAAA,KAAA,CAAA,MAAA,KAAA,SAAA,GAAA,WAAA,GAAA,WAAA,CAAA;AAAA,OACA,MAAA;AACA,QAAA,OAAA,KAAA,CAAA,MAAA,KAAA,SAAA,GAAA,KAAA,GAAA,KAAA,CAAA;AAAA,OACA;AAAA,KACA,CAAA,CAAA;AAEA,IAAA,MAAA,gBAAA,GAAA,SAAA,MAAA;AACA,MAAA,OAAA,KAAA,CAAA,SAAA,MACA,GAAA,EAAA,GAAA,MAAA,WAAA,GAAA,GAAA,GACA,KAAA,CAAA,KAAA,GAAA,QAAA,GAAA,CAAA,CAAA;AAAA,KACA,CAAA,CAAA;AAEA,IAAA,MAAA,UAAA,QAAA,CAAA,MAAA,MAAA,MAAA,CAAA,KAAA,CAAA,UAAA,CAAA,CAAA,CAAA;AAEA,IAAA,SAAA,SAAA,CAAA,KAAA,EAAA;AACA,MAAA,MAAA,IAAA,GAAA,MAAA,KAAA,CAAA,MAAA,CAAA;AACA,MAAA,MAAA,YAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAA,aAAA,KAAA,KAAA;AACA,QAAA,IAAA,QAAA,CAAA,WAAA,CAAA,EAAA;AACA,UAAA,OAAA;AAAA,YACA,KAAA,EAAA,WAAA;AAAA,YACA,UAAA,EAAA,SAAA,CAAA,IAAA,IAAA;AAAA,WACA,CAAA;AAAA,SACA;AACA,QAAA,OAAA,WAAA,CAAA;AAAA,OACA,CAAA,CAAA;AACA,MAAA,OAAA,YAAA,CAAA,KAAA,CAAA,CAAA,EAAA,MAAA,CAAA,CAAA,UAAA,GAAA,EAAA,UAAA,CAAA,CAAA;AAAA,KACA;AAEA,IAAA,MAAA,eAAA,GAAA,CAAA,UAAA,KAAA;AACA,MAAA,IAAA,EAAA;AACA,MAAA,MAAA,EAAA,KAAA,EAAA,QAAA,CAAA;AACA,MAAA,IAAA,WAAA,KAAA,CAAA,EAAA;AAAA,QACA,OAAA,KAAA,CAAA,UAAA,CAAA,CAAA;AACA,OAAA,MAAA,IAAA,QAAA,CAAA,KAAA,CAAA,EAAA;AAAA,QACA,OAAA,KAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,MAAA,kBAAA,CAAA,KAAA,CAAA,CAAA;AACA,QAAA,KAAA,YAAA,IAAA,MAAA,EAAA;AAAA,UAAA,IAAA,MAAA,CAAA,UAAA,GAAA,UAAA;AAAA,YACA,OAAA,MAAA,CAAA,KAAA,CAAA;AACA,SAAA;AAAA,QACA,OAAA,CAAA,EAAA,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,GAAA,CAAA,CAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAA;AAAA,OACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}