import { Toc } from 'types/Toc' interface TOCInlineProps { toc: Toc indentDepth?: number fromHeading?: number toHeading?: number asDisclosure?: boolean exclude?: string | string[] } /** * Generates an inline table of contents * Exclude titles matching this string (new RegExp('^(' + string + ')$', 'i')). * If an array is passed the array gets joined with a pipe (new RegExp('^(' + array.join('|') + ')$', 'i')). * * @param {TOCInlineProps} { * toc, * indentDepth = 3, * fromHeading = 1, * toHeading = 6, * asDisclosure = false, * exclude = '', * } * */ const TOCInline = ({ toc, indentDepth = 3, fromHeading = 1, toHeading = 6, asDisclosure = false, exclude = '', }: TOCInlineProps) => { const re = Array.isArray(exclude) ? new RegExp('^(' + exclude.join('|') + ')$', 'i') : new RegExp('^(' + exclude + ')$', 'i') const filteredToc = toc.filter( (heading) => heading.depth >= fromHeading && heading.depth <= toHeading && !re.test(heading.value) ) const tocList = ( ) return ( <> {asDisclosure ? (
Table of Contents
{tocList}
) : ( tocList )} ) } export default TOCInline