Astro Integration to generate a customizable table of contents.
Warning
This plugin uses remark-comment. It may break other plugins that use comments.
npx astro add astro-custom-tocInstall the package
npm install astro-custom-tocAdd the plugin to your astro.config.mjs. This plugin must be inserted before the mdx() plugin if you are using it.
import { defineConfig } from "astro/config";
import customToc from "astro-custom-toc";
// https://astro.build/config
export default defineConfig({
// ... other config
integrations: [customToc(), mdx()]
});To include a table of contents in your markdown file, add showToc: true to the frontmatter of the markdown file. The table of contents will be inserted at the location of the <!-- toc --> comment or at the beginning of the file if no comment is found.
---
showToc: true
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
<!-- toc -->
## Section 1
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
### Subsection 1.1
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.type RemarkCustomTocTemplate = (html: string) => string;
interface RemarkCustomTocOptions {
template?: RemarkCustomTocTemplate;
maxDepth?: number;
ordered?: boolean;
}A function that takes the generated HTML and returns the final HTML. This can be used to wrap the generated HTML in a custom template.
Default:
const defaultTemplate = (html) => {
return `
<aside class="toc">
<h2>Contents</h2>
<nav>
${html}
</nav>
</aside>`.trim();
};The maximum depth of headings to include in the table of contents.
Default: 3
Whether to use an ordered list (<ol>) or an unordered list (<ul>).
Default: false
npm installnpm run buildnpm run format
npm run lintThis repository uses Changesets to manage versioning and releases. When creating a pull request, please run the Changesets CLI and commit the changeset file.
npx changeset