Canonical page chrome component for OpenFrame surfaces, providing a consistent layout container with an optional header (`TitleBlock`), spacing, and action slots. ## Key Components ### `PageLayout` (default export) Main layout wrapper that composes a `TitleBlock` header and a flex content area. The header renders conditionally when any of `title`, `subtitle`, `image`, `backButton`, `actions`, `selector`, or `loading` are provided (and `showHeader` is not `false`). ### `PageLayoutProps` | Prop | Type | Default | Description | |---|---|---|---| | `title` | `string` | — | Page title text | | `subtitle` | `string` | — | Subtitle text below title | | `image` | `{ src, alt? }` | — | Header image | | `backButton` | `{ label?, onClick }` | — | Back navigation button | | `actions` | `PageActionButton[]` | — | Action buttons rendered in the header | | `actionsVariant` | `'icon-buttons' \| 'primary-buttons' \| 'menu-primary'` | `'icon-buttons'` | Action button display style | | `menuActions` | `ActionsMenuGroup[]` | — | Grouped menu actions | | `selector` | `ReactNode` | — | Desktop-only slot (e.g. `TabSelector`) | | `headerVariant` | `'plain' \| 'card'` | — | Adds card chrome on mobile when `'card'` | | `titleSize` | `'h1' \| 'h2'` | `'h2'` | Title typography size | | `titleAdornment` | `ReactNode` | — | Inline node next to the title (e.g. a status tag) | | `loading` | `boolean` | — | Renders skeleton bars at stable header height | | `titleWrap` | `boolean` | `false` | Allows long titles to wrap instead of truncating | | `showHeader` | `boolean` | `true` | Suppresses the entire header block | | `className` | `string` | — | Applied to the outer wrapper | | `contentClassName` | `string` | — | Applied to the content area | ## Usage Example ```typescript import { PageLayout } from './page-layout' export function MyPage() { return ( ) } ``` > ⛔️ **Frozen component** — this file is locked by design. Do not modify markup, CSS, or props without explicit human sign-off. See the file header for the full freeze rationale and sanctioned exceptions. ## Re-exports - `TitleBlock`, `TITLE_BLOCK_MIN_HEIGHT`, `TitleBlockProps` — from `./title-block` - `PageActionButton` — from `../ui/page-actions`