import type { HTMLAttributes, ReactNode } from "react"; /** Page title block per DESIGN-GUIDE ยง6; other `
` attributes (id, className, style, data-*, aria-*) land on the root. */ export interface PageHeaderProps extends Omit, "title" | "color" | "children" | "dangerouslySetInnerHTML"> { /** Rendered as the page's h1. */ title: ReactNode; /** Muted small line under the title. */ subtitle?: ReactNode; /** Right-aligned button row; wraps under the title on narrow screens. */ actions?: ReactNode; /** Rendered above the title; a descendant with aria-current="page" gets the stronger text colour. */ breadcrumbs?: ReactNode; /** Avatar or icon left of the title; `titleAddon` sits inline after it (status Tag). */ leading?: ReactNode; /** Rendered inline right after the h1, e.g. a status Tag; wraps under a long title. */ titleAddon?: ReactNode; /** Wrapping row of muted xs items under the subtitle (owner, updated-at, etc.). */ meta?: ReactNode; /** Rendered full-width below the whole header, e.g. a Tabs list. */ tabs?: ReactNode; /** "md" = 18px/600 (default); "lg" = 24px/700; "xl" = 24px, 30px from `md`, 700, tighter tracking. */ titleSize?: PageHeaderTitleSize; /** "auto" (default) wraps actions below the title whenever they don't fit beside it; "stacked" always stacks; "inline" never wraps from `md` up. */ actionsLayout?: PageHeaderActionsLayout; "data-testid"?: string; } /** Title ramp step. */ export type PageHeaderTitleSize = "md" | "lg" | "xl"; /** How the actions row sits against the title block. */ export type PageHeaderActionsLayout = "auto" | "stacked" | "inline";