--- import { Icon } from 'astro-icon/components' import TableOfContentsHeading from './TableOfContentsHeading.astro' export interface Heading { depth: number slug: string text: string subheadings: Heading[] } const { headings } = Astro.props const toc = buildToc(headings) function buildToc(headings: Heading[]): Heading[] { const toc: Heading[] = [] const stack: Heading[] = [] headings.forEach((h) => { const heading = { ...h, subheadings: [] } while (stack.length > 0 && stack[stack.length - 1].depth >= heading.depth) { stack.pop() } if (stack.length === 0) { toc.push(heading) } else { stack[stack.length - 1].subheadings.push(heading) } stack.push(heading) }) return toc } ---
Table of Contents