UNPKG

nimiq-vitepress-theme

Version:

Nimiq UI theme for VitePress

51 lines (50 loc) 2.09 kB
import { useData, useRoute, withBase } from "vitepress"; import { computed } from "vue"; import { useCurrentModule } from "./useCurrentModule.mjs"; export function useBreadcrumbs() { const { currentDocModule } = useCurrentModule(); const route = useRoute(); const { frontmatter } = useData(); const showBreadcrumbs = computed(() => { if (frontmatter.value.breadcrumbs !== void 0) return frontmatter.value.breadcrumbs; if (frontmatter.value.layout === "home") return false; return true; }); const breadcrumbs = computed(() => { const items = []; if (!currentDocModule.value) return items; items.push({ text: currentDocModule.value.text, link: currentDocModule.value.subpath }); const currentSidebar = currentDocModule.value.sidebar.find((section) => { return section.items.some( (item) => item.link && (`${withBase(item.link)}/` === route.path || withBase(item.link) === route.path) || item.items?.some((subitem) => `${withBase(subitem.link)}/` === route.path || withBase(subitem.link) === route.path) ); }); if (currentSidebar?.label) items.push({ text: currentSidebar.label }); const parentItem = currentSidebar?.items.find( (item) => item.items?.some((subitem) => `${withBase(subitem.link)}/` === route.path || withBase(subitem.link) === route.path) ); if (parentItem) items.push({ text: parentItem.text }); const currentItem = currentSidebar?.items.find( (item) => item.link && (withBase(item.link) === route.path || `${withBase(item.link)}/` === route.path) ) || currentSidebar?.items.find((item) => item.items?.some( (subitem) => subitem.link && (withBase(subitem.link) === route.path || `${withBase(subitem.link)}/` === route.path) ))?.items?.find( (subitem) => subitem.link && (withBase(subitem.link) === route.path || `${withBase(subitem.link)}/` === route.path) ); if (currentItem) items.push({ text: currentItem.text }); return items; }); return { breadcrumbs, showBreadcrumbs }; }