feat(web): Phase 11 UI/UX — TOC, dark mode toggle, /docs index

- Install rehype-slug (proper heading anchors) + github-slugger (matching TOC)
- TOC component: auto-generated from h2/h3 headings, clickable anchors
- Dark mode toggle: ThemeToggle (localStorage + system default), class-based
- /docs index page (lists all docs by section)
- Markdown.tsx uses rehype-slug for stable heading ids
- globals.css: @custom-variant dark (.dark class) for class-based dark mode
- layout.tsx: nav includes ThemeToggle

Note: per user instruction, installed real deps (rehype-slug, github-slugger,
@types/hast) instead of hacky inline any-cast hacks.
This commit is contained in:
asepharyana committed 2026-08-20 13:21:53 +07:00
1 parent b998826b71
commit 1dd16ebcba
11 files changed
+260 -25

No files matched your search

+10 -7
View File
@@ -1,6 +1,7 @@
import type { Metadata } from "next";
import Link from "next/link";
import "./globals.css";
import ThemeToggle from "@/components/ThemeToggle";
export const metadata: Metadata = {
title: "MCPedia",
@@ -20,15 +21,17 @@ export default function RootLayout({
<Link href="/" className="font-semibold tracking-tight">
MCPedia
</Link>
<nav className="flex gap-4 text-sm">
<Link href="/" className="hover:underline">Home</Link>
<Link href="/search" className="hover:underline">Search</Link>
<Link
href="/docs"
className="hover:underline"
>
<nav className="flex items-center gap-4 text-sm">
<Link href="/" className="hover:underline">
Home
</Link>
<Link href="/search" className="hover:underline">
Search
</Link>
<Link href="/docs" className="hover:underline">
Docs
</Link>
<ThemeToggle />
</nav>
</div>
</header>