# AppBar

**Maturity:** experimental

Provide top or bottom placement and bar context for region composition.

## Import

```tsx
import { AppBar } from "@liquidify/react/app-bar"
```

## Props

- `asChild`: `undefined`. Multiple owned elements cannot be merged onto one child.
- `className`: `string | undefined`. Optional additional CSS class merged into the glass surface class. The supported per-instance customisation seam: override any `--lq-*` custom property from this class's CSS — the token cascade the engine reads (ADR-0004). No raw inline style is involved, so this stays ADR-0003 clean.
- `gap`: `LayoutSpacing | undefined`. 
- `placement`: `"top" | "bottom"` (required). 
- `ref`: `Ref<HTMLElement> | undefined`. Forwarded ref to the rendered element — the component's native root (or the merged child element on a component that opts into {@link SlottableProps}). Generic over `E` (charter `docs/api-conventions.md` §4 rule 1, default `HTMLElement`) so a component with a polymorphic root (Link's navigation / action mode union, Text's `as`) can instantiate the concrete element per variant instead of leaving every consumer with a widened `Ref<HTMLElement>`. A component that does not narrow simply inherits the `HTMLElement` default — source-compatible with every pre-existing non-generic `extends ControlProps`.
- `slots`: `BarLayoutSlots` (required). 

## SwiftUI mapping

- `*(web-only, no direct SwiftUI analogue)*` → ``placement`` (web-only): Web header/footer placement context; toolbar placement is conceptual inspiration.
- `*(web-only, no direct SwiftUI analogue)*` → ``slots / gap`` (web-only): Opaque React content and token spacing delegated to BarLayout.
