TableOfContents
Renders a list of headings on the page and tracks current heading visible in the viewport
Import
Source
Docs
Package
Usage
Use TableOfContents
component to display table of contents like
in the sidebar of mantine.dev documentation. The component tracks
scroll position and highlights current heading in the list.
use-scroll-spy options
TableOfContents
in based on use-scroll-spy hook.
You can pass options down to use-scroll-spy
hook using scrollSpyOptions
prop.
Example of customizing selector, depth and value retrieval:
Pass props to controls
You can pass props down to controls rendered by TableOfContents
component
with getControlProps
function. It accepts an object with active
and data
properties and should return props object.
Example of changing controls to links:
Initial data
TableOfContents
retrieves data on mount. If you want to render headings
before TableOfContents
component is mounted (for example during server-side rendering),
you can pass initialData
prop with array of headings data. initialData
is replaced
with actual data on mount.
Depth offset
Use minDepthToOffset
prop to set 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 offset value in px, set depthOffset
prop:
autoContrast
TableOfContents
supports autoContrast
prop and theme.autoContrast. If autoContrast
is set either on TableOfContents
or on theme, content color will be adjusted to have sufficient contrast with the value specified in color
prop.
Note that autoContrast
feature works only if you use color
prop to change background color. autoContrast
works only with 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 reinitialize function from use-scroll-spy hook: