tav-ui
Version:
1 lines • 5.58 kB
Source Map (JSON)
{"version":3,"file":"icon2.mjs","sources":["../../../../../../../packages/components/icon/src/icon.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, onMounted, ref, unref, watch } from 'vue'\nimport Iconify from '@iconify/iconify'\nimport { isString } from '@tav-ui/utils/is'\nimport { propTypes } from '@tav-ui/utils/propTypes'\nimport SvgIcon from '@tav-ui/components/icon-svg'\nimport type { CSSProperties, PropType } from 'vue'\n\nconst SVG_END_WITH_FLAG = '|svg'\ndeclare type Nullable<T> = T | null\ndeclare type ElRef<T extends HTMLElement = HTMLDivElement> = Nullable<T>\nexport default defineComponent({\n name: 'TaIcon',\n components: { SvgIcon },\n props: {\n // icon name\n icon: propTypes.string,\n // icon color\n color: propTypes.string,\n // icon size\n size: {\n type: [String, Number] as PropType<string | number>,\n default: 16,\n },\n spin: propTypes.bool.def(false),\n prefix: propTypes.string.def(''),\n },\n setup(props) {\n const elRef = ref<ElRef>(null)\n\n const isSvgIcon = computed(() => props.icon?.endsWith(SVG_END_WITH_FLAG))\n const getSvgIcon = computed(() => props.icon.replace(SVG_END_WITH_FLAG, ''))\n const getIconRef = computed(() => `${props.prefix ? `${props.prefix}:` : ''}${props.icon}`)\n\n const update = async () => {\n if (unref(isSvgIcon)) return\n\n const el = unref(elRef)\n if (!el) return\n\n await nextTick()\n const icon = unref(getIconRef)\n if (!icon) return\n\n const svg = Iconify.renderSVG(icon, {})\n if (svg) {\n el.textContent = ''\n el.appendChild(svg)\n } else {\n const span = document.createElement('span')\n span.className = 'iconify'\n span.dataset.icon = icon\n el.textContent = ''\n el.appendChild(span)\n }\n }\n\n const getWrapStyle = computed((): CSSProperties => {\n const { size, color } = props\n let fs = size\n if (isString(size)) fs = parseInt(size, 10)\n\n return {\n fontSize: `${fs}px`,\n color,\n display: 'inline-flex',\n }\n })\n\n watch(() => props.icon, update, { flush: 'post' })\n\n onMounted(update)\n\n return { elRef, getWrapStyle, isSvgIcon, getSvgIcon }\n },\n})\n</script>\n<template>\n <SvgIcon\n v-if=\"isSvgIcon\"\n :size=\"size\"\n :name=\"getSvgIcon\"\n :class=\"[$attrs.class, 'anticon']\"\n :spin=\"spin\"\n />\n <span\n v-else\n ref=\"elRef\"\n :class=\"[$attrs.class, 'app-iconify anticon', spin && 'app-iconify-spin']\"\n :style=\"getWrapStyle\"\n />\n</template>\n"],"names":["SvgIcon","_openBlock","_createBlock","_normalizeClass","_createElementBlock","_normalizeStyle"],"mappings":"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"}