import { PageFrame, type PageFrameMaxWidth, type PageFrameProps, } from "./page-frame"; import { createElement, type ReactNode } from "react"; import { cn } from "../../lib/cn"; export type PageSectionMaxWidth = PageFrameMaxWidth; export type PageSectionProps = Omit & { actions?: ReactNode; as?: "div" | "section"; description?: ReactNode; descriptionClassName?: string; eyebrow?: ReactNode; eyebrowClassName?: string; header?: ReactNode; headingAs?: "h2" | "h3"; title?: ReactNode; titleClassName?: string; }; /** A section frame with breadcrumbs followed by a contained semantic header. */ export function PageSection({ actions, as = "section", description, descriptionClassName, eyebrow, eyebrowClassName, header, headerClassName, headingAs = "h2", title, titleClassName, ...props }: PageSectionProps) { const hasGeneratedHeader = Boolean(eyebrow || title || description || actions); const generatedHeader = hasGeneratedHeader ? (
{eyebrow ? (
{eyebrow}
) : null} {title ? createElement( headingAs, { className: cn( "m-0 text-3xl font-semibold tracking-[-0.04em] text-[var(--uhuru-text-primary)]", titleClassName, ), style: { fontFamily: "var(--uhuru-font-heading)" }, }, title, ) : null} {description ? (
{description}
) : null}
{actions ? (
{actions}
) : null}
) : null; const sectionHeader = header !== undefined ? header : generatedHeader; return ( ); }