import type { HTMLAttributes, ReactNode } from "react";
import { cn } from "./cn";
/** Flat bordered surface. No shadow, 3 px radius. */
export function Card({ className, children, ...rest }: HTMLAttributes) {
return (
{children}
);
}
export function CardHeader({ title, description, aside, className, level = 3 }: { title: ReactNode; description?: ReactNode; aside?: ReactNode; className?: string; level?: 2 | 3 }) {
const H = level === 2 ? "h2" : "h3";
return (
{title}
{description &&
{description}
}
{aside &&
{aside}
}
);
}
export function CardBody({ className, children, padded = true }: { className?: string; children: ReactNode; padded?: boolean }) {
return {children}
;
}
/** Page-level section: heading row + content, hairline top. */
export function Section({ title, description, aside, children, className, id, level = 2 }: { title: ReactNode; description?: ReactNode; aside?: ReactNode; children: ReactNode; className?: string; id?: string; level?: 2 | 3 }) {
const H = level === 2 ? "h2" : "h3";
return (
{title}
{description &&
{description}
}
{aside &&
{aside}
}
{children}
);
}
/** Uniform page container. */
export function Page({ children, className, wide }: { children: ReactNode; className?: string; wide?: boolean }) {
return {children}
;
}
export function PageHeader({ title, eyebrow, description, aside, className }: { title: ReactNode; eyebrow?: ReactNode; description?: ReactNode; aside?: ReactNode; className?: string }) {
return (
{eyebrow &&
{eyebrow}
}
{title}
{description &&
{description}
}
{aside && {aside}
}
);
}