import type { ReactNode } from "react"; interface SidebarGroupProps { label: string; icon?: ReactNode; /** 펼침 상태 — 상태 소유는 소비처(feature)다. 이 컴포넌트는 비제어 프레젠테이션이다. */ isExpanded: boolean; onToggle: () => void; /** 자식 SidebarLink들(isNested로 들여쓰기). */ children: ReactNode; } /** * 사이드바 그룹 헤딩 — 자식 내비게이션 항목(SidebarLink)을 펼침/접힘으로 묶는다. * 상태를 갖지 않는 프레젠테이션 컴포넌트로, IconButton·SidebarLink와 동일한 관례로 * 'use client'를 붙이지 않는다: onToggle을 받아 {isExpanded &&
{children}
} ); } /** * 펼침/접힘 표시용 셰브론(오른쪽 화살표 — 펼치면 90도 회전해 아래를 향한다). 그룹 헤딩 * 전용 장식 요소라 components/ui/icons/에 별도 파일로 승격하지 않고 이 파일 안에 둔다. * moon-icon.tsx/sun-icon.tsx와 동일한 인라인 SVG 관례(stroke=currentColor로 상위 text * 색 토큰 상속, 장식용이라 aria-hidden). */ function ChevronIcon({ className }: { className?: string }) { return ( ); }