diff --git a/package.json b/package.json index 6101b1c..48fb90e 100644 --- a/package.json +++ b/package.json @@ -51,11 +51,11 @@ "@types/node": "^18.15.3", "prettier": "^2.7.1", "typescript": "^4.9.5", - "vitepress": "^1.0.0-alpha.58", + "vitepress": "^1.0.0-alpha.60", "vue": "^3.2.47" }, "peerDependencies": { - "vitepress": "^1.0.0-alpha.58" + "vitepress": "^1.0.0-alpha.60" }, "pnpm": { "peerDependencyRules": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index baa1b0d..ef3deff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ specifiers: normalize.css: ^8.0.1 prettier: ^2.7.1 typescript: ^4.9.5 - vitepress: ^1.0.0-alpha.58 + vitepress: ^1.0.0-alpha.60 vue: ^3.2.47 dependencies: @@ -29,7 +29,7 @@ devDependencies: '@types/node': 18.15.3 prettier: 2.7.1 typescript: 4.9.5 - vitepress: 1.0.0-alpha.58_@types+node@18.15.3 + vitepress: 1.0.0-alpha.60_@types+node@18.15.3 vue: 3.2.47 packages: @@ -830,8 +830,8 @@ packages: fsevents: 2.3.2 dev: true - /vitepress/1.0.0-alpha.58_@types+node@18.15.3: - resolution: {integrity: sha512-aENSAiE2uKMoQPwBTELY8Nig5qSWrmAl+MgsO3l/TE8At6kXii+2rseEId/bVfT700JeucYdqtCgWxu+LwpYIw==} + /vitepress/1.0.0-alpha.60_@types+node@18.15.3: + resolution: {integrity: sha512-GI5iLDkZRqGEPixbSloT+p6pbKcMh9ykRRxt8vf9AjV1gaPit6Stg/t9WNxTdIhKVCuQMexGs1605DNApSRK2A==} hasBin: true dependencies: '@docsearch/css': 3.3.3 diff --git a/src/vitepress/components/VPContentDocOutline.vue b/src/vitepress/components/VPContentDocOutline.vue index 3823df7..50132d4 100644 --- a/src/vitepress/components/VPContentDocOutline.vue +++ b/src/vitepress/components/VPContentDocOutline.vue @@ -1,25 +1,15 @@ @@ -69,26 +40,6 @@ const handleClick = ({ target: el }: Event) => { letter-spacing: 0.4px; } -.outline-link { - color: var(--vt-c-text-2); - transition: color 0.5s; - line-height: 28px; - display: block; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.outline-link:hover, -.outline-link.active { - color: var(--vt-c-text-1); - transition: color 0.25s; -} - -.outline-link.nested { - padding-left: 1em; -} - .outline-marker { opacity: 0; position: absolute; @@ -102,9 +53,4 @@ const handleClick = ({ target: el }: Event) => { transition: top 0.25s cubic-bezier(0, 1, 0.5, 1), opacity 0.25s, background-color 0.5s; } - -.root { - z-index: 1; - position: relative; -} diff --git a/src/vitepress/components/VPDocOutlineItem.vue b/src/vitepress/components/VPDocOutlineItem.vue new file mode 100644 index 0000000..2f664a8 --- /dev/null +++ b/src/vitepress/components/VPDocOutlineItem.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/vitepress/components/VPLocalNav.vue b/src/vitepress/components/VPLocalNav.vue index 671ece7..1243364 100644 --- a/src/vitepress/components/VPLocalNav.vue +++ b/src/vitepress/components/VPLocalNav.vue @@ -1,18 +1,13 @@ diff --git a/src/vitepress/components/VPLocalNavOutlineDropdown.vue b/src/vitepress/components/VPLocalNavOutlineDropdown.vue new file mode 100644 index 0000000..9dc8255 --- /dev/null +++ b/src/vitepress/components/VPLocalNavOutlineDropdown.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/src/vitepress/composables/outline.ts b/src/vitepress/composables/outline.ts index 2417217..0cce3fe 100644 --- a/src/vitepress/composables/outline.ts +++ b/src/vitepress/composables/outline.ts @@ -1,18 +1,26 @@ -import { onMounted, onUnmounted, onUpdated, Ref } from 'vue' -import { Header } from 'vitepress' +import { computed, inject, onMounted, onUnmounted, onUpdated, Ref } from 'vue' +import { Header, useData } from 'vitepress' import { useMediaQuery } from '@vueuse/core' import { MenuItemWithLink } from '../../core' -interface HeaderWithChildren extends Header { +export interface HeaderWithChildren extends Header { hidden?: boolean } -interface MenuItemWithLinkAndChildren extends MenuItemWithLink { +export interface MenuItemWithLinkAndChildren extends MenuItemWithLink { children?: MenuItemWithLinkAndChildren[] hidden?: boolean } -export function resolveHeaders( +export function useOutlineHeaders() { + const { page } = useData() + const filterHeaders = inject('filter-headers', null) as any + return computed(() => { + return resolveHeaders(page.value.headers, filterHeaders) + }) +} + +function resolveHeaders( headers: HeaderWithChildren[], filter?: (h: HeaderWithChildren) => boolean ): MenuItemWithLinkAndChildren[] { @@ -142,7 +150,7 @@ function isAnchorActive( } function throttleAndDebounce(fn: () => void, delay: number): () => void { - let timeout: number + let timeout: any let called = false return () => { diff --git a/src/vitepress/config/baseConfig.js b/src/vitepress/config/baseConfig.js index dc8ac1d..96881d2 100644 --- a/src/vitepress/config/baseConfig.js +++ b/src/vitepress/config/baseConfig.js @@ -14,6 +14,8 @@ const deps = ['@vue/theme', '@vueuse/core', 'body-scroll-lock'] * @type {import('vitepress').UserConfig} */ const config = { + scrollOffset: ['header', '.VPLocalNav'], + vite: { ssr: { noExternal: deps diff --git a/tsconfig.json b/tsconfig.json index a756d9f..e827b52 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,6 +15,6 @@ "@vue/theme": ["src/index.ts"] } }, - "include": ["src", "types", "demo/.vitepress/theme"], + "include": ["src", "demo/.vitepress/theme"], "exclude": ["node_modules"] } diff --git a/types/vue-shim.d.ts b/types/vue-shim.d.ts deleted file mode 100644 index 025562f..0000000 --- a/types/vue-shim.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '*.vue' { - import { ComponentOptions } from 'vue' - const comp: ComponentOptions - export default comp -}