index.vue 826 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <template>
  2. <svg :class="svgClass" aria-hidden="true">
  3. <use :xlink:href="iconName" :fill="color" />
  4. </svg>
  5. </template>
  6. <script setup lang="ts">
  7. import { propTypes } from '@/utils/propTypes';
  8. const props = defineProps({
  9. iconClass: propTypes.string.isRequired,
  10. className: propTypes.string.def(''),
  11. color: propTypes.string.def(''),
  12. })
  13. const iconName = computed(() => `#icon-${props.iconClass}`);
  14. const svgClass = computed(() => {
  15. if (props.className) {
  16. return `svg-icon ${props.className}`
  17. }
  18. return 'svg-icon'
  19. })
  20. </script>
  21. <style scope lang="scss">
  22. .sub-el-icon,
  23. .nav-icon {
  24. display: inline-block;
  25. font-size: 15px;
  26. margin-right: 12px;
  27. position: relative;
  28. }
  29. .svg-icon {
  30. width: 1em;
  31. height: 1em;
  32. position: relative;
  33. fill: currentColor;
  34. vertical-align: -2px;
  35. }
  36. </style>