Skip to content

Commit e0dcd1c

Browse files
committed
feat(icon): allow passing a component instead of a name
1 parent f1a0166 commit e0dcd1c

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

src/runtime/components/Icon.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<script lang="ts">
2+
import type { Component } from 'vue'
3+
24
export interface IconProps {
3-
name: string
5+
name: string | Component
46
mode?: 'svg' | 'css'
57
size?: string | number
68
customize?: (
@@ -22,5 +24,6 @@ const iconProps = useForwardProps(reactivePick(props, 'name', 'mode', 'size', 'c
2224
</script>
2325

2426
<template>
25-
<Icon v-bind="iconProps" />
27+
<Icon v-if="typeof name === 'string'" v-bind="iconProps" />
28+
<component :is="name" v-else />
2629
</template>

src/runtime/vue/components/Icon.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<script lang="ts">
2+
import type { IconProps as NuxtIconProps } from '../../types'
3+
24
export interface IconProps {
3-
name: string
5+
name: NuxtIconProps['name']
46
}
57
</script>
68

@@ -11,5 +13,6 @@ defineProps<IconProps>()
1113
</script>
1214

1315
<template>
14-
<IconifyIcon :icon="name.replace(/^i-/, '')" />
16+
<IconifyIcon v-if="typeof name === 'string'" :icon="name.replace(/^i-/, '')" />
17+
<component :is="name" v-else />
1518
</template>

0 commit comments

Comments
 (0)