MCPcopy
hub / github.com/TheOrcDev/8bitcn-ui / DocsTableOfContents

Function DocsTableOfContents

components/docs-toc.tsx:49–125  ·  view source on GitHub ↗
({
  toc,
  variant = "list",
  className,
}: {
  toc: {
    title?: ReactNode;
    url: string;
    depth: number;
  }[];
  variant?: "dropdown" | "list";
  className?: string;
})

Source from the content-addressed store, hash-verified

47}
48
49export function DocsTableOfContents({
50 toc,
51 variant = "list",
52 className,
53}: {
54 toc: {
55 title?: ReactNode;
56 url: string;
57 depth: number;
58 }[];
59 variant?: "dropdown" | "list";
60 className?: string;
61}) {
62 const [open, setOpen] = useState(false);
63 const itemIds = useMemo(
64 () => toc.map((item) => item.url.replace("#", "")),
65 [toc]
66 );
67 const activeHeading = useActiveItem(itemIds);
68
69 if (!toc?.length) {
70 return null;
71 }
72
73 if (variant === "dropdown") {
74 return (
75 <DropdownMenu onOpenChange={setOpen} open={open}>
76 <DropdownMenuTrigger asChild>
77 <Button
78 className={cn("h-8 md:h-7", className)}
79 size="sm"
80 variant="outline"
81 >
82 <IconMenu3 /> On This Page
83 </Button>
84 </DropdownMenuTrigger>
85 <DropdownMenuContent
86 align="start"
87 className="no-scrollbar max-h-[70svh]"
88 >
89 {toc.map((item) => (
90 <DropdownMenuItem
91 asChild
92 className="data-[depth=3]:pl-6 data-[depth=4]:pl-8"
93 data-depth={item.depth}
94 key={item.url}
95 onClick={() => {
96 setOpen(false);
97 }}
98 >
99 <a href={item.url}>{item.title}</a>
100 </DropdownMenuItem>
101 ))}
102 </DropdownMenuContent>
103 </DropdownMenu>
104 );
105 }
106

Callers

nothing calls this directly

Calls 2

cnFunction · 0.90
useActiveItemFunction · 0.85

Tested by

no test coverage detected