TableOfContents
Renders a list of headings on the page and tracks current heading visible in the viewport
Source
LLM docs
Docs
PackageIcon
Usage
Use the TableOfContents component to display a table of contents like
in the sidebar of mantine.dev documentation. The component tracks
the scroll position and highlights the current heading in the list.
use-scroll-spy options
TableOfContents is based on the use-scroll-spy hook.
You can pass options down to the use-scroll-spy hook using the scrollSpyOptions prop.
Example of customizing selector, depth and value retrieval:
Pass props to controls
You can pass props down to controls rendered by the TableOfContents component
with the getControlProps function. It accepts an object with active and data
properties and should return a props object.
Example of changing controls to links:
Initial data
TableOfContents retrieves data on mount. If you want to render headings
before the TableOfContents component is mounted (for example during server-side rendering),
you can pass the initialData prop with an array of headings data. initialData is replaced
with actual data on mount.
Depth offset
Use the minDepthToOffset prop to set the minimum depth at which offset should be applied.
By default, minDepthToOffset is 1, which means that first and second level headings
will not be offset. Set it to 0 to apply offset to all headings.
To control the offset value in px, set the depthOffset prop:
autoContrast
TableOfContents supports the autoContrast prop and theme.autoContrast. If autoContrast is set either on TableOfContents or on the theme, the content color will be adjusted to have sufficient contrast with the value specified in the color prop.
Note that the autoContrast feature works only if you use the color prop to change the background color. autoContrast works only with the filled variant.
Styles API
Example of customizing TableOfContents with Styles API and data-* attributes:
Reinitialize
By default, TableOfContents does not track changes in the DOM. If you want
to update headings data after the parent component has mounted, you can use
reinitializeRef to get the reinitialize function from the use-scroll-spy hook: