<template>
	<div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" />
	<svg v-else :class="svgClass" aria-hidden="true">
		<use v-if="color" :xlink:href="iconName" :fill="color" />
		<use v-else :xlink:href="iconName" />
	</svg>
</template>

<script setup name="SvgIcon">
import { computed } from 'vue'

const props = defineProps({
	iconClass: { type: String, required: true },
	className: { type: String, default: '' },
	color: { type: String, default: '#333' }
})

const isExternal = computed(() => {
	let isExternal = /^(https?:|mailto:|tel:)/.test(props.iconClass)
	return isExternal
})

const iconName = computed(() => {
	return `#icon-${props.iconClass}`
})

const svgClass = computed(() => {
	return props.className ? `svg-icon ${props.className}` : 'svg-icon'
})

const styleExternalIcon = computed(() => {
	return {
		mask: `url(${props.iconClass}) no-repeat 50% 50%`
		// "-webkit-mask": `url(${props.iconClass}) no-repeat 50% 50%`,
	}
})
</script>

<style scoped>
.svg-icon {
	width: 1em;
	height: 1em;
	vertical-align: -0.15em;
	fill: currentColor;
	overflow: hidden;
}

.svg-external-icon {
	background-color: currentColor;
	mask-size: cover !important;
	display: inline-block;
}
</style>
