From b2ed4d6ada282c4d5ef35a6f05ca9e7dd2195924 Mon Sep 17 00:00:00 2001 From: Artea Date: Wed, 28 Jan 2026 04:05:11 +0800 Subject: [PATCH] feat(theme): add sidebar collapse functionality --- src/client/theme-default/Layout.vue | 6 +- .../theme-default/components/VPContent.vue | 13 +- .../theme-default/components/VPLocalNav.vue | 8 ++ .../theme-default/components/VPNavBar.vue | 135 +++++++++++++++++- .../components/VPNavBarSearch.vue | 59 ++++++-- .../components/VPNavBarTitle.vue | 105 +++++++++++--- .../theme-default/components/VPSidebar.vue | 13 +- .../theme-default/composables/sidebar.ts | 22 +++ src/client/theme-default/styles/icons.css | 6 + 9 files changed, 330 insertions(+), 37 deletions(-) diff --git a/src/client/theme-default/Layout.vue b/src/client/theme-default/Layout.vue index ace5edd5..899b3a66 100644 --- a/src/client/theme-default/Layout.vue +++ b/src/client/theme-default/Layout.vue @@ -9,7 +9,7 @@ import VPSidebar from './components/VPSidebar.vue' import VPSkipLink from './components/VPSkipLink.vue' import { useData } from './composables/data' import { layoutInfoInjectionKey, registerWatchers } from './composables/layout' -import { useSidebarControl } from './composables/sidebar' +import { useSidebarControl, useSidebarCollapse } from './composables/sidebar' const { isOpen: isSidebarOpen, @@ -17,6 +17,8 @@ const { close: closeSidebar } = useSidebarControl() +const { isCollapsed: isSidebarCollapsed } = useSidebarCollapse() + registerWatchers({ closeSidebar }) const { frontmatter } = useData() @@ -31,7 +33,7 @@ provide(layoutInfoInjectionKey, { heroImageSlotExists })
diff --git a/src/client/theme-default/components/VPContent.vue b/src/client/theme-default/components/VPContent.vue index b0eb5fc8..eb220a4b 100644 --- a/src/client/theme-default/components/VPContent.vue +++ b/src/client/theme-default/components/VPContent.vue @@ -2,19 +2,21 @@ import NotFound from '../NotFound.vue' import { useData } from '../composables/data' import { useLayout } from '../composables/layout' +import { useSidebarCollapse } from '../composables/sidebar' import VPDoc from './VPDoc.vue' import VPHome from './VPHome.vue' import VPPage from './VPPage.vue' const { page, frontmatter } = useData() const { isHome, hasSidebar } = useLayout() +const { isCollapsed } = useSidebarCollapse()