| 
									
										
										
										
											2024-01-15 11:44:48 +08:00
										 |  |  | import { useActiveHeading } from "@/hooks/useActiveHeading"; | 
					
						
							| 
									
										
										
										
											2024-09-26 16:48:47 +08:00
										 |  |  | import type { TTOCItem } from "@/types/docs.type"; | 
					
						
							| 
									
										
										
										
											2023-12-25 17:21:39 +08:00
										 |  |  | import Link from "next/link"; | 
					
						
							| 
									
										
										
										
											2024-01-15 11:44:48 +08:00
										 |  |  | import { twMerge } from "tailwind-merge"; | 
					
						
							| 
									
										
										
										
											2023-12-25 17:21:39 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export const TOC = (props: { data: TTOCItem[] }) => { | 
					
						
							| 
									
										
										
										
											2024-01-15 11:44:48 +08:00
										 |  |  |   const activeId = useActiveHeading(props.data.map((item) => `#${item.anchorId}`)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-25 17:21:39 +08:00
										 |  |  |   return ( | 
					
						
							| 
									
										
										
										
											2024-04-03 22:08:27 +08:00
										 |  |  |     <div className="mx-5"> | 
					
						
							| 
									
										
										
										
											2024-08-14 12:57:22 +08:00
										 |  |  |       <div className="border-gray-500 border-t-2 border-b-2 p-2 text-center font-bold text-lg"> | 
					
						
							| 
									
										
										
										
											2024-04-03 22:08:27 +08:00
										 |  |  |         {"TABLE OF CONTENTS"} | 
					
						
							|  |  |  |       </div> | 
					
						
							| 
									
										
										
										
											2024-08-14 12:57:22 +08:00
										 |  |  |       <div className="flat-scrollbar-normal h-[60vh] overflow-y-auto px-2 py-2"> | 
					
						
							| 
									
										
										
										
											2024-04-03 22:08:27 +08:00
										 |  |  |         <div> | 
					
						
							| 
									
										
										
										
											2024-01-09 16:48:48 +08:00
										 |  |  |           {props.data?.map((item) => ( | 
					
						
							| 
									
										
										
										
											2024-04-03 22:08:27 +08:00
										 |  |  |             <Link href={`#${item.anchorId}`} key={`toc-${item.anchorId}`}> | 
					
						
							|  |  |  |               <div | 
					
						
							| 
									
										
										
										
											2024-01-15 11:44:48 +08:00
										 |  |  |                 className={twMerge( | 
					
						
							| 
									
										
										
										
											2024-08-14 12:57:22 +08:00
										 |  |  |                   "rounded-lg py-2 text-sm hover:text-sky-700 dark:hover:text-sky-400", | 
					
						
							| 
									
										
										
										
											2024-04-03 22:08:27 +08:00
										 |  |  |                   activeId === `#${item.anchorId}` ? "text-sky-700 dark:text-sky-400" : "", | 
					
						
							| 
									
										
										
										
											2024-01-15 11:44:48 +08:00
										 |  |  |                 )} | 
					
						
							| 
									
										
										
										
											2024-01-09 16:48:48 +08:00
										 |  |  |                 style={{ paddingLeft: `${item.level - 1}em` }} | 
					
						
							| 
									
										
										
										
											2024-04-03 22:08:27 +08:00
										 |  |  |               >{`${item.title}`}</div> | 
					
						
							| 
									
										
										
										
											2024-01-09 16:48:48 +08:00
										 |  |  |             </Link> | 
					
						
							|  |  |  |           ))} | 
					
						
							| 
									
										
										
										
											2024-04-03 22:08:27 +08:00
										 |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |     </div> | 
					
						
							| 
									
										
										
										
											2023-12-25 17:21:39 +08:00
										 |  |  |   ); | 
					
						
							|  |  |  | }; |