UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 2.24 kB
{"version":3,"file":"avatar2.mjs","names":[],"sources":["../../../../../../packages/components/avatar/src/avatar.vue"],"sourcesContent":["<template>\n <span :class=\"avatarClass\" :style=\"sizeStyle\">\n <img\n v-if=\"(src || srcSet) && !hasLoadError\"\n :src=\"src\"\n :alt=\"alt\"\n :srcset=\"srcSet\"\n :style=\"fitStyle\"\n @error=\"handleError\"\n />\n <el-icon v-else-if=\"icon\">\n <component :is=\"icon\" />\n </el-icon>\n <slot v-else />\n </span>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref, watch } from 'vue'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { useNamespace } from '@element-plus/hooks'\nimport { addUnit, isNumber, isString } from '@element-plus/utils'\nimport { avatarEmits } from './avatar'\nimport { avatarGroupContextKey } from './constants'\n\nimport type { AvatarProps } from './avatar'\nimport type { CSSProperties } from 'vue'\n\ndefineOptions({\n name: 'ElAvatar',\n})\n\nconst props = withDefaults(defineProps<AvatarProps>(), {\n src: '',\n fit: 'cover',\n})\n\nconst emit = defineEmits(avatarEmits)\n\nconst avatarGroupContext = inject(avatarGroupContextKey, undefined)\n\nconst ns = useNamespace('avatar')\n\nconst hasLoadError = ref(false)\n\nconst size = computed(() => props.size ?? avatarGroupContext?.size)\nconst shape = computed(\n () => props.shape ?? avatarGroupContext?.shape ?? 'circle'\n)\n\nconst avatarClass = computed(() => {\n const { icon } = props\n const classList = [ns.b()]\n if (isString(size.value)) classList.push(ns.m(size.value))\n if (icon) classList.push(ns.m('icon'))\n if (shape.value) classList.push(ns.m(shape.value))\n return classList\n})\n\nconst sizeStyle = computed(() => {\n return isNumber(size.value)\n ? (ns.cssVarBlock({\n size: addUnit(size.value)!,\n }) as CSSProperties)\n : undefined\n})\n\nconst fitStyle = computed<CSSProperties>(() => ({\n objectFit: props.fit,\n}))\n\n// need reset hasLoadError to false if src changed\nwatch(\n () => [props.src, props.srcSet],\n () => (hasLoadError.value = false)\n)\n\nfunction handleError(e: Event) {\n hasLoadError.value = true\n emit('error', e)\n}\n</script>\n"],"mappings":""}