Files
chatgpt-web/src/components/SvgIcon.vue
2023-02-09 11:21:33 +08:00

37 lines
878 B
Vue

<script setup lang='ts'>
import { computed, useAttrs } from 'vue'
import { Icon } from '@iconify/vue'
interface Props {
icon?: string
localIcon?: string
}
const props = defineProps<Props>()
const attrs = useAttrs()
const bindAttrs = computed<{ class: string; style: string }>(() => ({
class: (attrs.class as string) || '',
style: (attrs.style as string) || '',
}))
const symbolId = computed(() => {
const icon = props.localIcon || 'no-icon'
return `#icon-local-${icon}`
})
const renderLocalIcon = computed(() => props.localIcon || !props.icon)
</script>
<template>
<template v-if="renderLocalIcon">
<svg aria-hidden="true" width="1em" height="1em" v-bind="bindAttrs">
<use :xlink:href="symbolId" fill="currentColor" />
</svg>
</template>
<template v-else>
<Icon v-if="icon" :icon="icon" v-bind="bindAttrs" />
</template>
</template>