import type { ReactNode, Ref } from "react"; import { cx } from "../../utils"; export interface FoxHeadingGroupProps { /** 구역 제목. 화면 제목(`FoxPageHeader`)이 아니라 그 아래 구역의 이름이다. */ title: ReactNode; /** * 제목을 그릴 태그. 한 화면에 여러 구역이 서면 문서 구조가 어긋나지 않게 단계를 고른다. * 화면 제목은 `FoxPageHeader`가 `

`으로 그리므로 여기 기본은 `h2`다. */ as?: "h2" | "h3" | "h4"; /** 제목 아래 한 줄 설명. 넘기지 않으면 영역을 그리지 않는다. */ description?: ReactNode; /** 제목 오른쪽 자리. 보통 버튼이다. */ actions?: ReactNode; /** 참이면 렌더하지 않는다(DOM에 남지 않는다). */ hidden?: boolean; /** 배치 조정용. */ className?: string; ref?: Ref; } /** * @fox 구역 머리말 — 시안: 관리자페이지(QsFVFFUKGH68xAPVkF3SJ9) heading-group (3002:7177) * * 한 화면 안에서 목록·표 같은 구역을 이름 짓는다. `FoxPageHeader`와 역할이 다르다 — 그쪽은 * 화면에 하나뿐인 제목(`

`)과 현재 위치를 갖고, 이쪽은 화면 안에 여럿 설 수 있다. * 그래서 제목 태그를 `as`로 고를 수 있고 breadcrumb이 없다. * * 아래 여백은 이 조각이 갖는다(시안 spacing/bottom/md) — 뒤따르는 도구 줄·표가 간격을 따로 * 두지 않아도 되게 하려는 것이고, `FoxPageHeader`와 같은 규칙이다. * * 상호작용이 없어 `"use client"`가 아니다 — 서버 컴포넌트로 렌더된다. * * ⚠️ 스타일은 이 파일이 import하지 않는다 — 호스트 앱이 `@use "@fox/styles/components"` * (또는 개별 파티셜)로 한 번 불러와야 한다. */ export function FoxHeadingGroup({ title, as: Tag = "h2", description, actions, hidden = false, className, ref, }: FoxHeadingGroupProps) { if (hidden) { return null; } return (
{title}
{description && (

{description}

)}
{actions &&
{actions}
}
); }