vitepress
Advanced tools
Comparing version 1.0.0-alpha.51 to 1.0.0-alpha.52
import { defineComponent, h } from 'vue'; | ||
import { useRoute } from '../router.js'; | ||
import { contentUpdatedCallbacks } from '../utils.js'; | ||
const runCbs = () => contentUpdatedCallbacks.forEach((fn) => fn()); | ||
export const Content = defineComponent({ | ||
@@ -11,5 +13,10 @@ name: 'VitePressContent', | ||
return () => h(props.as, { style: { position: 'relative' } }, [ | ||
route.component ? h(route.component) : '404 Page Not Found' | ||
route.component | ||
? h(route.component, { | ||
onVnodeMounted: runCbs, | ||
onVnodeUpdated: runCbs | ||
}) | ||
: '404 Page Not Found' | ||
]); | ||
} | ||
}); |
import { siteDataRef } from './data.js'; | ||
import { inBrowser, EXTERNAL_URL_RE, sanitizeFileName } from '../shared.js'; | ||
import { onUnmounted } from 'vue'; | ||
export { inBrowser } from '../shared.js'; | ||
@@ -52,1 +53,12 @@ /** | ||
} | ||
export let contentUpdatedCallbacks = []; | ||
/** | ||
* Register callback that is called every time the markdown content is updated | ||
* in the DOM. | ||
*/ | ||
export function onContentUpdated(fn) { | ||
contentUpdatedCallbacks.push(fn); | ||
onUnmounted(() => { | ||
contentUpdatedCallbacks = contentUpdatedCallbacks.filter((f) => f !== fn); | ||
}); | ||
} |
@@ -72,2 +72,7 @@ import * as vue from 'vue'; | ||
declare function withBase(path: string): string; | ||
/** | ||
* Register callback that is called every time the markdown content is updated | ||
* in the DOM. | ||
*/ | ||
declare function onContentUpdated(fn: () => any): void; | ||
@@ -90,2 +95,2 @@ declare const Content: vue.DefineComponent<{ | ||
export { Content, EnhanceAppContext, Route, Router, Theme, VitePressData, inBrowser, useData, useRoute, useRouter, withBase }; | ||
export { Content, EnhanceAppContext, Route, Router, Theme, VitePressData, inBrowser, onContentUpdated, useData, useRoute, useRouter, withBase }; |
@@ -7,4 +7,4 @@ // exports in this file are exposed to themes and md files via 'vitepress' | ||
// utilities | ||
export { inBrowser, withBase } from './app/utils.js'; | ||
export { inBrowser, withBase, onContentUpdated } from './app/utils.js'; | ||
// components | ||
export { Content } from './app/components/Content.js'; |
@@ -6,2 +6,31 @@ import { onMounted, onUnmounted, onUpdated } from 'vue'; | ||
const PAGE_OFFSET = 71; | ||
export function getHeaders(range) { | ||
const headers = [...document.querySelectorAll('.VPDoc h2,h3,h4,h5,h6')] | ||
.filter((el) => el.id && el.hasChildNodes()) | ||
.map((el) => { | ||
const level = Number(el.tagName[1]); | ||
return { | ||
title: serializeHeader(el), | ||
link: '#' + el.id, | ||
level | ||
}; | ||
}); | ||
return resolveHeaders(headers, range); | ||
} | ||
function serializeHeader(h) { | ||
let ret = ''; | ||
for (const node of h.childNodes) { | ||
if (node.nodeType === 1) { | ||
if (node.classList.contains('VPBadge') || | ||
node.classList.contains('header-anchor')) { | ||
continue; | ||
} | ||
ret += node.textContent; | ||
} | ||
else if (node.nodeType === 3) { | ||
ret += node.textContent; | ||
} | ||
} | ||
return ret.trim(); | ||
} | ||
export function resolveHeaders(headers, range) { | ||
@@ -14,3 +43,3 @@ if (range === false) { | ||
: range) || 2; | ||
const levels = typeof levelsRange === 'number' | ||
const [high, low] = typeof levelsRange === 'number' | ||
? [levelsRange, levelsRange] | ||
@@ -20,26 +49,22 @@ : levelsRange === 'deep' | ||
: levelsRange; | ||
const isInRange = (h) => h.level >= levels[0] && h.level <= levels[1]; | ||
return filterHeaders(headers, isInRange); | ||
} | ||
function filterHeaders(headers, isInRange) { | ||
const result = []; | ||
headers = headers.map((h) => ({ ...h })); | ||
headers.forEach((h) => { | ||
if (isInRange(h)) { | ||
if (h.children) { | ||
const filteredChildren = filterHeaders(h.children, isInRange); | ||
if (filteredChildren.length) { | ||
h.children = filteredChildren; | ||
headers = headers.filter((h) => h.level >= high && h.level <= low); | ||
const ret = []; | ||
outer: for (let i = 0; i < headers.length; i++) { | ||
const cur = headers[i]; | ||
if (i === 0) { | ||
ret.push(cur); | ||
} | ||
else { | ||
for (let j = i - 1; j >= 0; j--) { | ||
const prev = headers[j]; | ||
if (prev.level < cur.level) { | ||
; | ||
(prev.children || (prev.children = [])).push(cur); | ||
continue outer; | ||
} | ||
else { | ||
delete h.children; | ||
} | ||
} | ||
result.push(h); | ||
ret.push(cur); | ||
} | ||
else if (h.children) { | ||
result.push(...filterHeaders(h.children, isInRange)); | ||
} | ||
}); | ||
return result; | ||
} | ||
return ret; | ||
} | ||
@@ -46,0 +71,0 @@ export function useActiveAnchor(container, marker) { |
@@ -12,2 +12,5 @@ import './styles/fonts.css'; | ||
import Layout from './Layout.vue'; | ||
// Note: if we add more optional components here, i.e. components that are not | ||
// used in the theme by default unless the user imports them, make sure to update | ||
// the `lazyDefaultThemeComponentsRE` regex in src/node/build/bundle.ts. | ||
export { default as VPHomeHero } from './components/VPHomeHero.vue'; | ||
@@ -14,0 +17,0 @@ export { default as VPHomeFeatures } from './components/VPHomeFeatures.vue'; |
@@ -1,2 +0,2 @@ | ||
import { p as picocolorsExports, h as build, s as serve, i as init, f as createServer } from './serve-6171016e.js'; | ||
import { p as picocolorsExports, h as build, s as serve, i as init, f as createServer } from './serve-9eb311e5.js'; | ||
import { createLogger } from 'vite'; | ||
@@ -292,3 +292,3 @@ import 'url'; | ||
var version = "1.0.0-alpha.51"; | ||
var version = "1.0.0-alpha.52"; | ||
@@ -295,0 +295,0 @@ const argv = minimist(process.argv.slice(2)); |
@@ -1732,3 +1732,3 @@ import { Options } from '@vitejs/plugin-vue'; | ||
frontmatter?: FrontmatterPluginOptions; | ||
headers?: HeadersPluginOptions; | ||
headers?: HeadersPluginOptions | false; | ||
sfc?: SfcPluginOptions; | ||
@@ -1735,0 +1735,0 @@ theme?: ThemeOptions; |
@@ -1,2 +0,2 @@ | ||
export { S as ScaffoldThemeType, h as build, g as createMarkdownRenderer, f as createServer, a as defineConfig, b as defineConfigWithTheme, d as defineLoader, i as init, r as resolveConfig, e as resolvePages, c as resolveSiteData, j as scaffold, s as serve } from './serve-6171016e.js'; | ||
export { S as ScaffoldThemeType, h as build, g as createMarkdownRenderer, f as createServer, a as defineConfig, b as defineConfigWithTheme, d as defineLoader, i as init, r as resolveConfig, e as resolvePages, c as resolveSiteData, j as scaffold, s as serve } from './serve-9eb311e5.js'; | ||
export { loadEnv } from 'vite'; | ||
@@ -3,0 +3,0 @@ import 'dns'; |
{ | ||
"name": "vitepress", | ||
"version": "1.0.0-alpha.51", | ||
"version": "1.0.0-alpha.52", | ||
"description": "Vite & Vue powered static site generator", | ||
@@ -91,3 +91,3 @@ "type": "module", | ||
"@types/minimist": "^1.2.2", | ||
"@types/node": "^18.14.6", | ||
"@types/node": "^18.15.0", | ||
"@types/prompts": "^2.4.2", | ||
@@ -106,3 +106,3 @@ "chokidar": "^3.5.3", | ||
"get-port": "^6.1.2", | ||
"lint-staged": "^13.1.2", | ||
"lint-staged": "^13.2.0", | ||
"lodash.template": "^4.5.0", | ||
@@ -129,3 +129,3 @@ "lru-cache": "^7.18.3", | ||
"rimraf": "^4.4.0", | ||
"rollup": "^3.18.0", | ||
"rollup": "^3.19.1", | ||
"rollup-plugin-dts": "^5.2.0", | ||
@@ -165,10 +165,10 @@ "rollup-plugin-esbuild": "^5.0.0", | ||
"check": "run-s format-fail build test", | ||
"test": "run-p --aggregate-output test-unit test-preview test-build test-init", | ||
"test": "run-p --aggregate-output test-unit test-e2e test-e2e-build test-init", | ||
"test-unit": "vitest run -r __tests__/unit", | ||
"test-preview": "vitest run -r __tests__/e2e", | ||
"test-build": "VITE_TEST_BUILD=1 pnpm test-preview", | ||
"test-e2e": "vitest run -r __tests__/e2e", | ||
"test-e2e-build": "VITE_TEST_BUILD=1 pnpm test-e2e", | ||
"test-init": "vitest run -r __tests__/init", | ||
"test-init-build": "VITE_TEST_BUILD=1 pnpm test-init", | ||
"debug-preview": "DEBUG=1 vitest -r __tests__/e2e", | ||
"debug-build": "VITE_TEST_BUILD=1 pnpm debug-preview", | ||
"debug-e2e": "DEBUG=1 vitest -r __tests__/e2e", | ||
"debug-e2e-build": "VITE_TEST_BUILD=1 pnpm debug-e2e", | ||
"unit-dev": "vitest -r __tests__/unit", | ||
@@ -175,0 +175,0 @@ "e2e-dev": "wait-on -d 100 dist/node/cli.js && node ./bin/vitepress dev __tests__/e2e", |
@@ -26,9 +26,2 @@ import { DocSearchProps } from './docsearch.js' | ||
/** | ||
* Disable this to hide badge text from outline. | ||
* | ||
* @default true | ||
*/ | ||
outlineBadges?: boolean | ||
/** | ||
* @deprecated | ||
@@ -35,0 +28,0 @@ * Use `outline.label` instead. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
3611191
111886