From e32936b6ae1a93cf99b224b4ffa5009de5153714 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Thu, 26 May 2022 22:30:22 +0530 Subject: [PATCH] feat: add collapsible option to sidebar (#640) (#663) close #640 Co-authored-by: Kia King Ishii --- docs/.vitepress/config.ts | 3 + .../theme-default/components/VPSidebar.vue | 7 +- .../components/VPSidebarGroup.vue | 89 +++++++++++++++++-- .../components/icons/VPIconMinus.vue | 5 ++ .../components/icons/VPIconMinusSquare.vue | 6 ++ .../components/icons/VPIconPlusSquare.vue | 6 ++ src/client/theme-default/styles/base.css | 4 + types/default-theme.d.ts | 14 +++ 8 files changed, 124 insertions(+), 10 deletions(-) create mode 100644 src/client/theme-default/components/icons/VPIconMinus.vue create mode 100644 src/client/theme-default/components/icons/VPIconMinusSquare.vue create mode 100644 src/client/theme-default/components/icons/VPIconPlusSquare.vue diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 9a3d9224..cfc0d3ed 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -57,6 +57,7 @@ function sidebarGuide() { return [ { text: 'Introduction', + collapsible: true, items: [ { text: 'What is VitePress?', link: '/guide/what-is-vitepress' }, { text: 'Getting Started', link: '/guide/getting-started' }, @@ -71,6 +72,7 @@ function sidebarGuide() { }, { text: 'Theme', + collapsible: true, items: [ { text: 'Introduction', link: '/guide/theme-introduction' }, { text: 'Layout', link: '/guide/theme-layout' }, @@ -81,6 +83,7 @@ function sidebarGuide() { }, { text: 'Migrations', + collapsible: true, items: [ { text: 'Migration from VuePress', diff --git a/src/client/theme-default/components/VPSidebar.vue b/src/client/theme-default/components/VPSidebar.vue index a59b99be..c7511357 100644 --- a/src/client/theme-default/components/VPSidebar.vue +++ b/src/client/theme-default/components/VPSidebar.vue @@ -34,7 +34,12 @@ watchPostEffect(async () => {
- +
diff --git a/src/client/theme-default/components/VPSidebarGroup.vue b/src/client/theme-default/components/VPSidebarGroup.vue index db9362ac..c5e52aad 100644 --- a/src/client/theme-default/components/VPSidebarGroup.vue +++ b/src/client/theme-default/components/VPSidebarGroup.vue @@ -1,38 +1,109 @@ diff --git a/src/client/theme-default/components/icons/VPIconMinus.vue b/src/client/theme-default/components/icons/VPIconMinus.vue new file mode 100644 index 00000000..e0229195 --- /dev/null +++ b/src/client/theme-default/components/icons/VPIconMinus.vue @@ -0,0 +1,5 @@ + diff --git a/src/client/theme-default/components/icons/VPIconMinusSquare.vue b/src/client/theme-default/components/icons/VPIconMinusSquare.vue new file mode 100644 index 00000000..266ae3da --- /dev/null +++ b/src/client/theme-default/components/icons/VPIconMinusSquare.vue @@ -0,0 +1,6 @@ + diff --git a/src/client/theme-default/components/icons/VPIconPlusSquare.vue b/src/client/theme-default/components/icons/VPIconPlusSquare.vue new file mode 100644 index 00000000..88e5b5cf --- /dev/null +++ b/src/client/theme-default/components/icons/VPIconPlusSquare.vue @@ -0,0 +1,6 @@ + diff --git a/src/client/theme-default/styles/base.css b/src/client/theme-default/styles/base.css index 3b270430..0a316094 100644 --- a/src/client/theme-default/styles/base.css +++ b/src/client/theme-default/styles/base.css @@ -10,6 +10,10 @@ html { -webkit-text-size-adjust: 100%; } +html.dark { + color-scheme: dark; +} + body { margin: 0; width: 100%; diff --git a/types/default-theme.d.ts b/types/default-theme.d.ts index c61b1721..1166d2ac 100644 --- a/types/default-theme.d.ts +++ b/types/default-theme.d.ts @@ -82,6 +82,20 @@ export namespace DefaultTheme { export interface SidebarGroup { text: string items: SidebarItem[] + + /** + * If `true`, toggle button is shown. + * + * @default false + */ + collapsible?: boolean + + /** + * If `true`, collapsible group is collapsed by default. + * + * @default false + */ + collapsed?: boolean } export interface SidebarItem {