Renders a sticky, auto-hiding site header with configurable logo, navigation items, dropdown menus, and action slots for the OpenFrame platform shell. ## Key Components ### `Header` The main exported component. Accepts a `HeaderConfig` object and optional `platform` string to render a full application header with: - **Auto-hide on scroll** — hides when scrolling down past 50px, re-appears on scroll up (opt-in via `config.autoHide`) - **Dropdown menus** — custom-built dropdowns using `inert` for accessibility-safe show/hide (avoids `aria-hidden` focus retention bugs) - **Click-outside / Escape dismissal** — event listeners attached only while a dropdown is open - **Navigation rendering** — `renderNavigationItem` handles four cases: custom elements, dropdown parents, link/action buttons, and plain action buttons ### Exported Types | Export | Description | |---|---| | `HeaderProps` | `{ config: HeaderConfig; platform?: string }` | | `HeaderConfig` | Re-exported from `../../types/navigation` for consumer convenience | ## Usage Example ```typescript import { Header } from './header' import type { HeaderConfig } from './header' const config: HeaderConfig = { logo: { href: '/', element: Flamingo, }, autoHide: true, backgroundColor: 'bg-ods-card', navigation: { position: 'center', items: [ { id: 'docs', label: 'Docs', href: '/docs' }, { id: 'community', label: 'Community', children: [ { id: 'slack', label: 'Slack', href: 'https://www.openmsp.ai/', isExternal: true }, ], }, ], }, mingo: { enabled: true }, } export default function Layout() { return
} ``` > **Accessibility note:** Dropdowns use the HTML `inert` attribute (React 19 native) instead of `aria-hidden` to fully remove hidden content from the tab order and accessibility tree simultaneously.