Skip to content

Commit 11e6461

Browse files
committed
feat(docs): add mobile docs menu
- add a compact docs sidebar trigger in the header on mobile - close the menu after selecting a nav item
1 parent c710e50 commit 11e6461

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

web/src/app/docs/layout.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import Image from "next/image";
22
import Link from "next/link";
33
import { Button } from "@/components/ui/button";
44
import { asset } from "@/lib/asset";
5-
import { DocsSidebar } from "@/components/docs-sidebar";
5+
import { DocsSidebar, MobileDocsMenu } from "@/components/docs-sidebar";
66
import { ThemeToggle } from "@/components/theme-toggle";
77

88
const GITHUB_URL = "https://github.com/kacigaya/webskrap";
@@ -21,6 +21,7 @@ export default function DocsLayout({
2121
<span className="font-semibold tracking-tight">WebSkrap</span>
2222
</Link>
2323
<nav className="flex items-center gap-2">
24+
<MobileDocsMenu />
2425
<ThemeToggle />
2526
<Button variant="outline" size="sm" render={<a href={GITHUB_URL} />}>
2627
GitHub

web/src/components/docs-sidebar.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import Link from "next/link";
44
import { usePathname } from "next/navigation";
5+
import { Menu } from "lucide-react";
6+
import { useRef } from "react";
57
import { NAV } from "@/lib/docs-nav";
68
import { cn } from "@/lib/utils";
79

@@ -39,3 +41,22 @@ export function DocsSidebar() {
3941
</nav>
4042
);
4143
}
44+
45+
export function MobileDocsMenu() {
46+
const details = useRef<HTMLDetailsElement>(null);
47+
48+
return (
49+
<details ref={details} className="relative md:hidden">
50+
<summary className="flex size-8 cursor-pointer list-none items-center justify-center rounded-md border hover:bg-accent [&::-webkit-details-marker]:hidden">
51+
<Menu className="size-4" />
52+
<span className="sr-only">Open documentation menu</span>
53+
</summary>
54+
<div
55+
className="absolute right-0 top-11 max-h-[calc(100vh-6rem)] w-72 overflow-y-auto rounded-xl border bg-background p-4 shadow-lg"
56+
onClick={() => details.current?.removeAttribute("open")}
57+
>
58+
<DocsSidebar />
59+
</div>
60+
</details>
61+
);
62+
}

0 commit comments

Comments
 (0)