From 34886c667d1305a79d64c957f8c52931ea122f47 Mon Sep 17 00:00:00 2001
From: Andrey Nering
Date: Fri, 1 Aug 2025 11:53:06 -0300
Subject: [PATCH 1/7] feat(theme): add `rel="me"` to social links by default
(#4873)
---
src/client/theme-default/components/VPSocialLink.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/client/theme-default/components/VPSocialLink.vue b/src/client/theme-default/components/VPSocialLink.vue
index 905ec897..75d0c367 100644
--- a/src/client/theme-default/components/VPSocialLink.vue
+++ b/src/client/theme-default/components/VPSocialLink.vue
@@ -45,7 +45,7 @@ if (import.meta.env.SSR) {
:href="link"
:aria-label="ariaLabel ?? (typeof icon === 'string' ? icon : '')"
target="_blank"
- rel="noopener"
+ rel="me noopener"
v-html="svg"
>
From eb7658d4068653d0e48294f76bd5fa03d803178d Mon Sep 17 00:00:00 2001
From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com>
Date: Fri, 1 Aug 2025 20:33:20 +0530
Subject: [PATCH 2/7] fix(theme): don't add `rel=me` for team members
---
src/client/theme-default/components/VPSocialLink.vue | 3 ++-
src/client/theme-default/components/VPSocialLinks.vue | 8 ++++++--
src/client/theme-default/components/VPTeamMembersItem.vue | 2 +-
3 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/src/client/theme-default/components/VPSocialLink.vue b/src/client/theme-default/components/VPSocialLink.vue
index 75d0c367..2a016462 100644
--- a/src/client/theme-default/components/VPSocialLink.vue
+++ b/src/client/theme-default/components/VPSocialLink.vue
@@ -7,6 +7,7 @@ const props = defineProps<{
icon: DefaultTheme.SocialLinkIcon
link: string
ariaLabel?: string
+ me: boolean
}>()
const el = ref()
@@ -45,7 +46,7 @@ if (import.meta.env.SSR) {
:href="link"
:aria-label="ariaLabel ?? (typeof icon === 'string' ? icon : '')"
target="_blank"
- rel="me noopener"
+ :rel="me ? 'me noopener' : 'noopener'"
v-html="svg"
>
diff --git a/src/client/theme-default/components/VPSocialLinks.vue b/src/client/theme-default/components/VPSocialLinks.vue
index 21656102..b188fb89 100644
--- a/src/client/theme-default/components/VPSocialLinks.vue
+++ b/src/client/theme-default/components/VPSocialLinks.vue
@@ -2,9 +2,12 @@
import type { DefaultTheme } from 'vitepress/theme'
import VPSocialLink from './VPSocialLink.vue'
-defineProps<{
+withDefaults(defineProps<{
links: DefaultTheme.SocialLink[]
-}>()
+ me?: boolean
+}>(), {
+ me: true
+})
@@ -15,6 +18,7 @@ defineProps<{
:icon
:link
:ariaLabel
+ :me
/>
diff --git a/src/client/theme-default/components/VPTeamMembersItem.vue b/src/client/theme-default/components/VPTeamMembersItem.vue
index f84bdc03..a4dc411b 100644
--- a/src/client/theme-default/components/VPTeamMembersItem.vue
+++ b/src/client/theme-default/components/VPTeamMembersItem.vue
@@ -40,7 +40,7 @@ withDefaults(defineProps(), {
-
+
From e1a35b63b38e511c62c417430c4546f634fa50d7 Mon Sep 17 00:00:00 2001
From: Artea
Date: Sun, 3 Aug 2025 21:54:05 +0800
Subject: [PATCH 3/7] chore(devtool): remove `as any` (#4881)
---
src/client/app/devtools.ts | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/client/app/devtools.ts b/src/client/app/devtools.ts
index 54998fb1..cbc0fd3b 100644
--- a/src/client/app/devtools.ts
+++ b/src/client/app/devtools.ts
@@ -21,8 +21,7 @@ export const setupDevtools = (
componentStateTypes: [COMPONENT_STATE_TYPE]
},
(api) => {
- // TODO: remove any
- api.on.inspectComponent((payload: any) => {
+ api.on.inspectComponent((payload) => {
payload.instanceData.state.push({
type: COMPONENT_STATE_TYPE,
key: 'route',
From f97635916e8fd3524712af43a016f5b600d2bcf4 Mon Sep 17 00:00:00 2001
From: Artea
Date: Sun, 3 Aug 2025 23:59:47 +0800
Subject: [PATCH 4/7] refactor: `VPMenu` related component use generic type for
component (#4883)
---
src/client/theme-default/components/VPFlyout.vue | 5 +++--
src/client/theme-default/components/VPMenu.vue | 5 +++--
src/client/theme-default/components/VPMenuGroup.vue | 7 ++++---
src/client/theme-default/components/VPMenuLink.vue | 4 ++--
4 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/src/client/theme-default/components/VPFlyout.vue b/src/client/theme-default/components/VPFlyout.vue
index 7ce56162..c05c579c 100644
--- a/src/client/theme-default/components/VPFlyout.vue
+++ b/src/client/theme-default/components/VPFlyout.vue
@@ -1,4 +1,5 @@
-
diff --git a/src/client/theme-default/components/VPMenuGroup.vue b/src/client/theme-default/components/VPMenuGroup.vue
index 11f86714..7d12eb75 100644
--- a/src/client/theme-default/components/VPMenuGroup.vue
+++ b/src/client/theme-default/components/VPMenuGroup.vue
@@ -1,9 +1,10 @@
-
@@ -11,7 +12,7 @@ defineProps<{
diff --git a/src/client/theme-default/components/VPMenuLink.vue b/src/client/theme-default/components/VPMenuLink.vue
index d9ed1089..0a708186 100644
--- a/src/client/theme-default/components/VPMenuLink.vue
+++ b/src/client/theme-default/components/VPMenuLink.vue
@@ -1,11 +1,11 @@
-
diff --git a/src/client/theme-default/components/VPHero.vue b/src/client/theme-default/components/VPHero.vue
index e1653085..4e1e2e9b 100644
--- a/src/client/theme-default/components/VPHero.vue
+++ b/src/client/theme-default/components/VPHero.vue
@@ -1,6 +1,7 @@
diff --git a/src/client/theme-default/components/VPNav.vue b/src/client/theme-default/components/VPNav.vue
index 577c8ece..d33949a6 100644
--- a/src/client/theme-default/components/VPNav.vue
+++ b/src/client/theme-default/components/VPNav.vue
@@ -2,7 +2,7 @@
import { inBrowser } from 'vitepress'
import { computed, provide, watchEffect } from 'vue'
import { useData } from '../composables/data'
-import { useNav } from '../composables/nav'
+import { navInjectionKey, useNav } from '../composables/nav'
import VPNavBar from './VPNavBar.vue'
import VPNavScreen from './VPNavScreen.vue'
@@ -13,7 +13,7 @@ const hasNavbar = computed(() => {
return frontmatter.value.navbar !== false
})
-provide('close-screen', closeScreen)
+provide(navInjectionKey, { closeScreen })
watchEffect(() => {
if (inBrowser) {
diff --git a/src/client/theme-default/components/VPNavScreenMenuGroupLink.vue b/src/client/theme-default/components/VPNavScreenMenuGroupLink.vue
index 283cec7c..7633a8bb 100644
--- a/src/client/theme-default/components/VPNavScreenMenuGroupLink.vue
+++ b/src/client/theme-default/components/VPNavScreenMenuGroupLink.vue
@@ -1,13 +1,14 @@
diff --git a/src/client/theme-default/components/VPNavScreenMenuLink.vue b/src/client/theme-default/components/VPNavScreenMenuLink.vue
index fde606fe..17b5a955 100644
--- a/src/client/theme-default/components/VPNavScreenMenuLink.vue
+++ b/src/client/theme-default/components/VPNavScreenMenuLink.vue
@@ -1,13 +1,14 @@
diff --git a/src/client/theme-default/composables/layout.ts b/src/client/theme-default/composables/layout.ts
index 1b993ea6..e0484cf2 100644
--- a/src/client/theme-default/composables/layout.ts
+++ b/src/client/theme-default/composables/layout.ts
@@ -1,6 +1,13 @@
import { inBrowser, onContentUpdated, useRoute } from 'vitepress'
import type { DefaultTheme, useLayout as expected } from 'vitepress/theme'
-import { computed, shallowReadonly, shallowRef, watch } from 'vue'
+import {
+ computed,
+ shallowReadonly,
+ shallowRef,
+ watch,
+ type ComputedRef,
+ type InjectionKey
+} from 'vue'
import { getSidebar, getSidebarGroups } from '../support/sidebar'
import { useData } from './data'
import { getHeaders } from './outline'
@@ -102,3 +109,10 @@ export function registerWatchers({ closeSidebar }: RegisterWatchersOptions) {
useCloseSidebarOnEscape(closeSidebar)
}
+
+export interface LayoutInfo {
+ heroImageSlotExists: ComputedRef
+}
+
+export const layoutInfoInjectionKey: InjectionKey =
+ Symbol('layout-info')
diff --git a/src/client/theme-default/composables/nav.ts b/src/client/theme-default/composables/nav.ts
index fbefa6f4..370c9e08 100644
--- a/src/client/theme-default/composables/nav.ts
+++ b/src/client/theme-default/composables/nav.ts
@@ -1,5 +1,5 @@
import { useRoute } from 'vitepress'
-import { ref, watch } from 'vue'
+import { ref, watch, type InjectionKey } from 'vue'
export function useNav() {
const isScreenOpen = ref(false)
@@ -35,3 +35,9 @@ export function useNav() {
toggleScreen
}
}
+
+export interface NavExposedMethods {
+ closeScreen: () => void
+}
+
+export const navInjectionKey: InjectionKey = Symbol('nav')