refactor: `VPMenu` related component use generic type for component (#4883)

pull/4876/head
Artea 2 months ago committed by hyperz111
parent dc323925aa
commit 4d89e139f3

@ -1,4 +1,5 @@
<script lang="ts" setup> <script lang="ts" setup generic="T extends DefaultTheme.NavItem">
import type { DefaultTheme } from 'vitepress/theme'
import { ref } from 'vue' import { ref } from 'vue'
import { useFlyout } from '../composables/flyout' import { useFlyout } from '../composables/flyout'
import VPMenu from './VPMenu.vue' import VPMenu from './VPMenu.vue'
@ -7,7 +8,7 @@ defineProps<{
icon?: string icon?: string
button?: string button?: string
label?: string label?: string
items?: any[] items?: T[]
}>() }>()
const open = ref(false) const open = ref(false)

@ -1,9 +1,10 @@
<script lang="ts" setup> <script lang="ts" setup generic="T extends DefaultTheme.NavItem">
import type { DefaultTheme } from 'vitepress/theme'
import VPMenuLink from './VPMenuLink.vue' import VPMenuLink from './VPMenuLink.vue'
import VPMenuGroup from './VPMenuGroup.vue' import VPMenuGroup from './VPMenuGroup.vue'
defineProps<{ defineProps<{
items?: any[] items?: T[]
}>() }>()
</script> </script>

@ -1,9 +1,10 @@
<script lang="ts" setup> <script lang="ts" setup generic="T extends (DefaultTheme.NavItemComponent | DefaultTheme.NavItemChildren | DefaultTheme.NavItemWithLink)">
import type { DefaultTheme } from 'vitepress/theme'
import VPMenuLink from './VPMenuLink.vue' import VPMenuLink from './VPMenuLink.vue'
defineProps<{ defineProps<{
text?: string text?: string
items: any[] items: T[]
}>() }>()
</script> </script>
@ -11,7 +12,7 @@ defineProps<{
<div class="VPMenuGroup"> <div class="VPMenuGroup">
<p v-if="text" class="title">{{ text }}</p> <p v-if="text" class="title">{{ text }}</p>
<template v-for="item in items"> <template v-for="item in items" :key="JSON.stringify(item)">
<VPMenuLink v-if="'link' in item" :item /> <VPMenuLink v-if="'link' in item" :item />
</template> </template>
</div> </div>

@ -1,11 +1,11 @@
<script lang="ts" setup> <script lang="ts" setup generic="T extends DefaultTheme.NavItemWithLink">
import type { DefaultTheme } from 'vitepress/theme' import type { DefaultTheme } from 'vitepress/theme'
import { useData } from '../composables/data' import { useData } from '../composables/data'
import { isActive } from '../../shared' import { isActive } from '../../shared'
import VPLink from './VPLink.vue' import VPLink from './VPLink.vue'
defineProps<{ defineProps<{
item: DefaultTheme.NavItemWithLink item: T
}>() }>()
const { page } = useData() const { page } = useData()

Loading…
Cancel
Save