# HeaderHeroPrimaryMedia Pattern A page-level hero pattern featuring a headline, subtitle, call-to-action buttons, and a primary media element. Supports images, videos, or custom React elements with enforced aspect ratios and object-fit constraints. ## Overview The HeaderHeroPrimaryMedia component provides a structured hero section with: - Responsive headline and subtitle layout - Primary and optional secondary call-to-action buttons - Media element (image, video, or custom) with responsive aspect ratios - Development-time validation warnings ## Basic Usage ```tsx import HeaderHeroPrimaryMedia from "shared/patterns/HeaderHeroPrimaryMedia/HeaderHeroPrimaryMedia"; function MyPage() { return ( ); } ``` ## Props | Prop | Type | Required | Description | | --------------- | ------------------------------ | -------- | ------------------------------------------------------------ | | `headline` | `React.ReactNode` | Yes | Hero headline text (display-md typography) | | `subtitle` | `React.ReactNode` | Yes | Hero subtitle text (label-l typography) | | `callsToAction` | `[ButtonProps, ButtonProps?]` | Yes | Array with primary CTA (required) and optional secondary CTA | | `media` | `HeaderHeroMedia` | Yes | Media element (image, video, or custom) | | `className` | `string` | No | Additional CSS classes for the header element | | `...rest` | `HTMLHeaderElement attributes` | No | Any other HTML header attributes | ### Calls to Action The `callsToAction` prop accepts Button component props, but `variant` and `color` are automatically set: - **Primary CTA**: `variant="primary"`, `color="green"` - **Secondary CTA**: `variant="tertiary"`, `color="green"` All other Button props are supported (e.g., `children`, `href`, `onClick`, etc.). ## Media Types The `media` prop accepts a discriminated union of three types: ### Image Media ```tsx media={{ type: "image", src: string, // Required alt: string, // Required // ... all native props except className and style }} ``` **Example:** ```tsx media={{ type: "image", src: "/img/hero.png", alt: "Hero image", loading: "lazy", decoding: "async" }} ``` ### Video Media ```tsx media={{ type: "video", src: string, // Required alt?: string, // Optional but recommended // ... all native