App Bar

Top navigation bar that can follow your scroll: its background and edge fade in as content passes underneath, titles swap smoothly, and a floating style frosts over. Includes a large-title style.

Preview

Installation

npx @lumioui/cli add app-bar

Usage

import { AppBarRoot, AppBarBack, AppBarAction, AppBarTitle, AppBar } from "@/components/ui/app-bar/app-bar";
<AppBar />

Also exported: AppBarRoot, AppBarBack, AppBarAction, AppBarTitle.

Examples

Action row

An issue-tracker detail screen: compact centred title with a status subtitle, accent back link, and trailing actions that change state.

Floating island

A hiking-trail detail screen.

Large title

A photo album: large title over the grid it names.

API reference

AppBar

Prop Type Default
title string

Bar title. "small" centers it inline; "large" renders a large title below the row.

—
subtitle string

Secondary line under the centered title (small mode only).

—
size "small" | "large"

"small" = classic inline bar; "large" = large-title header. Default "small".

—
showBack boolean

Show a back chevron + label on the leading edge.

—
backLabel string

Label next to the back chevron — conventionally the previous screen's title. Default "Back".

—
onBack () => void —
leading React.ReactNode

Leading slot — overrides the back button when set.

—
actions AppBarActionItem[]

Trailing action icon buttons.

—
trailing React.ReactNode

Trailing slot — overrides actions when set.

—
safeArea boolean

Pad for the status bar. Default true.

—
bordered boolean

Bottom hairline. Default true.

—
translucent boolean

Translucent bar: edge-to-edge glass material for content scrolling underneath, and the bar's buttons wear glass capsules — the bar is transparent and the controls carry the glass. Adjacent trailing actions union into one pill.

—
floating boolean

Floating capsule bar — the bar detaches into a rounded glass capsule hovering over the content (island bar). Implies translucent.

—
haptic "light" | "selection" | false

Haptic on button presses. Default "light".

—
scrollY SharedValue<number>

Scroll offset of the content under the bar. When passed, light follows scroll: the surface, its frost and the bottom hairline are clear at rest and fully on by 24pt (floating capsules sharpen instead). Drive it from useAnimatedScrollHandler — it is read on the UI thread.

—
className string —

AppBarBack

Prop Type Default
label string

Visible label next to the chevron. Default "Back".

"Back"
tone AppBarTone

Chevron + label tint. Default "primary"; glass bars pass "foreground".

"primary"
onPress () => void —
haptic "light" | "selection" | false "light"
className string —
accessibilityLabel string —

AppBarAction

Prop Type Default
haptic "light" | "selection" | false "light"
tone AppBarTone

Icon tint. Default "primary"; glass bars pass "foreground".

"primary"
className string —