From 26b76d6d9e8fd3ae368c7a1e8ad6698cdeb73e7a Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Tue, 25 Aug 2026 02:34:56 +0530 Subject: [PATCH] feat(theme): redesign the navbar (#5397) Co-authored-by: bluwy <34116392+bluwy@users.noreply.github.com> Co-authored-by: xbsheng <56357338+xbsheng@users.noreply.github.com> Co-authored-by: fvsch <243601+fvsch@users.noreply.github.com> Co-authored-by: Claude Fable 5 --- .../theme/components/ApiPreference.vue | 29 +- .../theme/components/NavVersion.vue | 15 +- __tests__/e2e/navigation.test.ts | 151 +++++++++ .../composables/nav-overflow.test.ts | 135 ++++++++ docs/en/guide/extending-default-theme.md | 40 +++ docs/en/reference/default-theme-config.md | 21 ++ docs/en/reference/default-theme-nav.md | 1 + package.json | 2 +- src/client/theme-default/Layout.vue | 15 +- .../theme-default/components/VPFlyout.vue | 101 ++++-- .../theme-default/components/VPLocalNav.vue | 39 ++- .../components/VPLocalNavOutlineDropdown.vue | 18 +- .../theme-default/components/VPMenu.vue | 13 +- .../theme-default/components/VPMenuGroup.vue | 56 +++- .../theme-default/components/VPMenuLink.vue | 45 ++- src/client/theme-default/components/VPNav.vue | 1 - .../components/VPNavAppearance.vue | 92 ++++++ .../theme-default/components/VPNavBar.vue | 239 ++++++++------ .../components/VPNavBarAppearance.vue | 32 -- .../components/VPNavBarExtra.vue | 119 ++++--- .../components/VPNavBarHamburger.vue | 21 +- .../theme-default/components/VPNavBarMenu.vue | 46 --- .../components/VPNavBarMenuGroup.vue | 54 ---- .../components/VPNavBarMenuLink.vue | 47 --- .../components/VPNavBarSearch.vue | 1 - .../components/VPNavBarSocialLinks.vue | 27 -- .../components/VPNavBarTitle.vue | 24 +- .../components/VPNavBarTranslations.vue | 57 ---- .../theme-default/components/VPNavMenu.vue | 79 +++++ .../components/VPNavMenuGroup.vue | 150 +++++++++ ...avScreenMenuLink.vue => VPNavMenuLink.vue} | 45 ++- .../theme-default/components/VPNavScreen.vue | 32 +- .../components/VPNavScreenAppearance.vue | 40 --- .../components/VPNavScreenMenu.vue | 28 -- .../components/VPNavScreenMenuGroup.vue | 113 ------- .../components/VPNavScreenMenuGroupLink.vue | 49 --- .../VPNavScreenMenuGroupSection.vue | 35 -- .../components/VPNavScreenSocialLinks.vue | 14 - .../components/VPNavScreenTranslations.vue | 87 ----- .../components/VPNavSocialLinks.vue | 43 +++ .../components/VPNavTranslations.vue | 179 +++++++++++ .../components/VPSidebarItem.vue | 24 +- .../theme-default/components/VPSkipLink.vue | 7 +- .../theme-default/components/VPSwitch.vue | 6 +- .../components/VPSwitchAppearance.vue | 6 +- .../components/VPTeamMembers.vue | 5 +- .../theme-default/composables/flyout.ts | 1 + .../theme-default/composables/nav-overflow.ts | 299 ++++++++++++++++++ src/client/theme-default/composables/nav.ts | 68 +++- src/client/theme-default/styles/vars.css | 21 +- types/default-theme.d.ts | 23 ++ 51 files changed, 1851 insertions(+), 944 deletions(-) create mode 100644 __tests__/unit/client/theme-default/composables/nav-overflow.test.ts create mode 100644 src/client/theme-default/components/VPNavAppearance.vue delete mode 100644 src/client/theme-default/components/VPNavBarAppearance.vue delete mode 100644 src/client/theme-default/components/VPNavBarMenu.vue delete mode 100644 src/client/theme-default/components/VPNavBarMenuGroup.vue delete mode 100644 src/client/theme-default/components/VPNavBarMenuLink.vue delete mode 100644 src/client/theme-default/components/VPNavBarSocialLinks.vue delete mode 100644 src/client/theme-default/components/VPNavBarTranslations.vue create mode 100644 src/client/theme-default/components/VPNavMenu.vue create mode 100644 src/client/theme-default/components/VPNavMenuGroup.vue rename src/client/theme-default/components/{VPNavScreenMenuLink.vue => VPNavMenuLink.vue} (64%) delete mode 100644 src/client/theme-default/components/VPNavScreenAppearance.vue delete mode 100644 src/client/theme-default/components/VPNavScreenMenu.vue delete mode 100644 src/client/theme-default/components/VPNavScreenMenuGroup.vue delete mode 100644 src/client/theme-default/components/VPNavScreenMenuGroupLink.vue delete mode 100644 src/client/theme-default/components/VPNavScreenMenuGroupSection.vue delete mode 100644 src/client/theme-default/components/VPNavScreenSocialLinks.vue delete mode 100644 src/client/theme-default/components/VPNavScreenTranslations.vue create mode 100644 src/client/theme-default/components/VPNavSocialLinks.vue create mode 100644 src/client/theme-default/components/VPNavTranslations.vue create mode 100644 src/client/theme-default/composables/nav-overflow.ts diff --git a/__tests__/e2e/.vitepress/theme/components/ApiPreference.vue b/__tests__/e2e/.vitepress/theme/components/ApiPreference.vue index c286640b..0dfe61c8 100644 --- a/__tests__/e2e/.vitepress/theme/components/ApiPreference.vue +++ b/__tests__/e2e/.vitepress/theme/components/ApiPreference.vue @@ -5,12 +5,13 @@ const props = defineProps<{ options: string[] defaultOption: string screenMenu?: boolean + menu?: boolean }>() // reactivity isn't needed for props here const key = removeSpaces(`api-preference-${props.options.join('-')}`) -const name = key + (props.screenMenu ? '-screen-menu' : '') +const name = key + (props.screenMenu ? '-screen-menu' : props.menu ? '-menu' : '') const selected = useLocalStorage(key, () => props.defaultOption) @@ -25,8 +26,11 @@ function removeSpaces(str: string) {