From 7182c4231f3c435f1471dfecacdce99d48270978 Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 14 Mar 2023 12:47:46 +0800 Subject: [PATCH] feat(theme): page outline for mobile --- docs/reference/site-config.md | 14 --- src/client/theme-default/components/VPDoc.vue | 12 ++ .../components/VPDocAsideOutline.vue | 23 +--- .../components/VPDocOutlineDropdown.vue | 76 ++++++++++++ ...deOutlineItem.vue => VPDocOutlineItem.vue} | 12 +- .../theme-default/components/VPLocalNav.vue | 24 +--- .../components/VPLocalNavOutlineDropdown.vue | 113 ++++++++++++++++++ .../theme-default/composables/outline.ts | 10 ++ 8 files changed, 229 insertions(+), 55 deletions(-) create mode 100644 src/client/theme-default/components/VPDocOutlineDropdown.vue rename src/client/theme-default/components/{VPDocAsideOutlineItem.vue => VPDocOutlineItem.vue} (74%) create mode 100644 src/client/theme-default/components/VPLocalNavOutlineDropdown.vue diff --git a/docs/reference/site-config.md b/docs/reference/site-config.md index b8881385..e04101dd 100644 --- a/docs/reference/site-config.md +++ b/docs/reference/site-config.md @@ -6,20 +6,6 @@ outline: deep Site config is where you can define the global settings of the site. App config options define settings that apply to every VitePress site, regardless of what theme it is using. For example, the base directory or the title of the site. -
- -[[toc]] - -
- - - ## Overview ### Config Resolution diff --git a/src/client/theme-default/components/VPDoc.vue b/src/client/theme-default/components/VPDoc.vue index 70557157..6451a62f 100644 --- a/src/client/theme-default/components/VPDoc.vue +++ b/src/client/theme-default/components/VPDoc.vue @@ -4,6 +4,7 @@ import { computed } from 'vue' import { useSidebar } from '../composables/sidebar.js' import VPDocAside from './VPDocAside.vue' import VPDocFooter from './VPDocFooter.vue' +import VPDocOutlineDropdown from './VPDocOutlineDropdown.vue' const route = useRoute() const { hasSidebar, hasAside } = useSidebar() @@ -38,6 +39,7 @@ const pageName = computed(() =>
+
@@ -56,6 +58,16 @@ const pageName = computed(() => width: 100%; } +.VPDoc .VPDocOutlineDropdown { + display: none; +} + +@media (min-width: 768px) and (max-width: 1280px) { + .VPDoc .VPDocOutlineDropdown { + display: block; + } +} + @media (min-width: 768px) { .VPDoc { padding: 48px 32px 128px; diff --git a/src/client/theme-default/components/VPDocAsideOutline.vue b/src/client/theme-default/components/VPDocAsideOutline.vue index 701fcb90..6f186be5 100644 --- a/src/client/theme-default/components/VPDocAsideOutline.vue +++ b/src/client/theme-default/components/VPDocAsideOutline.vue @@ -3,10 +3,11 @@ import { ref, shallowRef } from 'vue' import { useData } from '../composables/data.js' import { getHeaders, + resolveTitle, useActiveAnchor, type MenuItem } from '../composables/outline.js' -import VPDocAsideOutlineItem from './VPDocAsideOutlineItem.vue' +import VPDocOutlineItem from './VPDocOutlineItem.vue' import { onContentUpdated } from 'vitepress' const { frontmatter, theme } = useData() @@ -23,14 +24,6 @@ const container = ref() const marker = ref() useActiveAnchor(container, marker) - -function handleClick({ target: el }: Event) { - const id = '#' + (el as HTMLAnchorElement).href!.split('#')[1] - const heading = document.querySelector( - decodeURIComponent(id) - ) - heading?.focus() -}