From 9fa60e84f64737a79a028118e0dbb58129578740 Mon Sep 17 00:00:00 2001
From: Miroma <136986257+its-miroma@users.noreply.github.com>
Date: Fri, 26 Sep 2025 22:51:12 +0200
Subject: [PATCH] feat: allow function for NavItem link
---
.../theme-default/components/VPMenuLink.vue | 13 ++++++++++---
.../components/VPNavBarMenuGroup.vue | 2 +-
.../theme-default/components/VPNavBarMenuLink.vue | 13 ++++++++++---
.../components/VPNavScreenMenuGroupLink.vue | 15 ++++++++++++---
.../components/VPNavScreenMenuLink.vue | 15 ++++++++++++---
types/default-theme.d.ts | 2 +-
6 files changed, 46 insertions(+), 14 deletions(-)
diff --git a/src/client/theme-default/components/VPMenuLink.vue b/src/client/theme-default/components/VPMenuLink.vue
index a4cebc10..249b7eee 100644
--- a/src/client/theme-default/components/VPMenuLink.vue
+++ b/src/client/theme-default/components/VPMenuLink.vue
@@ -1,15 +1,22 @@
@@ -20,11 +27,11 @@ defineOptions({ inheritAttrs: false })
:class="{
active: isActive(
page.relativePath,
- item.activeMatch || item.link,
+ item.activeMatch || href,
!!item.activeMatch
)
}"
- :href="item.link"
+ :href
:target="item.target"
:rel="item.rel"
:no-icon="item.noIcon"
diff --git a/src/client/theme-default/components/VPNavBarMenuGroup.vue b/src/client/theme-default/components/VPNavBarMenuGroup.vue
index 12e8cf6f..76cd42c5 100644
--- a/src/client/theme-default/components/VPNavBarMenuGroup.vue
+++ b/src/client/theme-default/components/VPNavBarMenuGroup.vue
@@ -17,7 +17,7 @@ const isChildActive = (navItem: DefaultTheme.NavItem) => {
if ('link' in navItem) {
return isActive(
page.value.relativePath,
- navItem.link,
+ typeof navItem.link === "function" ? navItem.link(page.value) : navItem.link,
!!props.item.activeMatch
)
}
diff --git a/src/client/theme-default/components/VPNavBarMenuLink.vue b/src/client/theme-default/components/VPNavBarMenuLink.vue
index 6f504791..e9869e1f 100644
--- a/src/client/theme-default/components/VPNavBarMenuLink.vue
+++ b/src/client/theme-default/components/VPNavBarMenuLink.vue
@@ -1,14 +1,21 @@
@@ -17,11 +24,11 @@ const { page } = useData()
VPNavBarMenuLink: true,
active: isActive(
page.relativePath,
- item.activeMatch || item.link,
+ item.activeMatch || href,
!!item.activeMatch
)
}"
- :href="item.link"
+ :href
:target="item.target"
:rel="item.rel"
:no-icon="item.noIcon"
diff --git a/src/client/theme-default/components/VPNavScreenMenuGroupLink.vue b/src/client/theme-default/components/VPNavScreenMenuGroupLink.vue
index 7633a8bb..32e97c83 100644
--- a/src/client/theme-default/components/VPNavScreenMenuGroupLink.vue
+++ b/src/client/theme-default/components/VPNavScreenMenuGroupLink.vue
@@ -1,20 +1,29 @@