"use client"; import { useId, useState, type ReactNode } from "react"; import { Bookmark, ChevronDown, ChevronRight, PenLine } from "lucide-react"; /** หุบ/กางกลุ่มรายการ (Bookmark/Annotation) ในหน้าสรุป — client component ตัวเดียว * ของหน้า: เก็บแค่ state หุบ/กางต่อบล็อก เริ่มกางไว้เสมอ (เปิดหน้าสรุปครั้งแรกเห็น * ครบ ผู้ใช้พับเฉพาะกลุ่มที่ไม่สนใจ) — รายการ (children) ส่งมาจาก server component * ได้ตรง ๆ และเยื้องเข้า (pl-5) ให้หัวข้อกับรายการไม่ชิดเส้นซ้ายเดียวกัน */ const HEADS = { bookmark: { label: "Bookmark", Icon: Bookmark, iconCls: "text-amber-500" }, annotation: { label: "Annotation", Icon: PenLine, iconCls: "text-slate-400" }, } as const; export default function CollapsibleBlock({ kind, count, children, }: { kind: keyof typeof HEADS; count: number; children: ReactNode; }) { const [open, setOpen] = useState(true); // design review 2026-09-17 L2: aria-controls ชี้ id ของก้อนเนื้อหา (useId // กันชนกันระหว่างหลายหน้าเอกสารที่ render บล็อกนี้ซ้ำ) const contentId = useId(); const { label, Icon, iconCls } = HEADS[kind]; return (