forked from nodejs/nodejs.org
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.tsx
More file actions
46 lines (40 loc) · 1.09 KB
/
index.tsx
File metadata and controls
46 lines (40 loc) · 1.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import classNames from 'classnames';
import type { Heading } from '@vcarl/remark-headings';
import type { FC } from 'react';
import styles from './index.module.css';
type TableOfContentsProps = {
headings: Array<Heading>;
minDepth?: number;
maxDepth?: number;
};
const TableOfContents: FC<TableOfContentsProps> = ({
headings,
minDepth = 2,
maxDepth = 4,
}) => {
const filteredHeadings = headings.filter(
({ depth }) => depth >= minDepth && depth <= maxDepth
);
return (
<details className={styles.details}>
<summary className={styles.summary}>On this page</summary>
<ul className={styles.list}>
{filteredHeadings.map(head => (
<li key={head.data?.id}>
<a
href={`#${head.data?.id}`}
className={classNames(
styles.link,
head.depth === 3 && styles.depthThree,
head.depth === 4 && styles.depthFour
)}
>
{head.value}
</a>
</li>
))}
</ul>
</details>
);
};
export default TableOfContents;