Page header

A React block (a whole screen) in Beamline's Blocks category.

The top of a record or project page: breadcrumb, title with status, description and meta, a primary action with secondary actions that fold into a More menu when the width runs out, and tabs underneath; on long pages it can condense into a compact bar pinned to the top as you scroll.

Use it for

  • The top of a record, project or settings page: where it sits, what it is, its state, what you can do with it and its sub-views.

Not for

Anatomy

  • breadcrumb
  • media (optional avatar or icon tile)
  • title
  • status badge (dot and word)
  • description
  • meta row (people, updated time)
  • actions: primary, secondaries, More menu
  • tabs (with counts)
  • tab panels (children)
  • compact bar (condense): title that scrolls back to the top, status, primary action

States

  • all actions shown
  • some actions folded into More (measured against the space they need)
  • only the primary and More
  • an action disabled
  • a destructive menu item
  • no tabs
  • tab selected (controlled or not)
  • condensed (condense: the header has scrolled by; a compact bar with title, status and the primary action is pinned to the top of the scrolling area)

Keyboard

  • Tab: breadcrumb links, actions, More, then the tab list
  • More: Enter, Space or ↓ opens; ↑/↓ move; Enter runs; Esc closes and focus returns
  • Tabs: ←/→ move between tabs, Home/End to the ends
  • The compact bar's title returns to the top of the page and moves focus to the page title; the bar is inert while hidden

Motion

Actions fold without animation (layout, not an event); the tab indicator slides between tabs; the menu opens on --motion-in. The compact bar fades in on --motion-in with a 6px drop and leaves on --motion-out; under reduced motion it only fades.

Props

PropTypeDefaultDescription
title (required)ReactNode—
descriptionReactNode—
breadcrumbBreadcrumbItem[]—From the top level to this page; long paths fold their middle.
status{ label: string; tone?: BadgeTone }—A word with a dot, never colour alone.
mediaReactNode—An avatar or icon tile before the title.
metaReactNode—A line under the description: people, dates, ids.
actionsPageHeaderAction[]—The first is the primary and always shows; the rest fold into More, from the end, when they do not fit.
menuMenuItem[]—Items that always live in More (copy link, delete).
tabsPageHeaderTab[]—value, label, count, icon, disabled, href (navigation mode: the tab is a link).
tab / defaultTab / onTabChangestring—
childrenReactNode—Tab panels (TabsContent from tabs) or the page under the header.
headingLevel1 | 21
classNamestring—
condensebooleanfalseOnce the header scrolls by, a compact bar with title, status and the primary action stays pinned to the top of the scrolling area.
classNamesPageHeaderClassNames—
tabsMode"panels" | "navigation"—panels: the tabs switch TabsContent children (tabs and tab panels). navigation: they switch pages or routes, a nav whose current item is aria-current=page, same look; a tab with href is a link. Default: panels when the children hold TabsContent (also in fragments), else navigation. Pass panels for panels wrapped in your own component.
style / refCSSProperties / Ref<HTMLDivElement>—
menuClassNamesMenuClassNames—Shared overflow-menu parts; more targets its trigger and matching measurement copy.

Built from

Dependencies

lucide-react

Import

import { PageHeader } from "@/blocks/page-header/page-header";

Get it

Page header is part of Beamline: 190 React components and screens your coding agent (Claude Code, Codex, Cursor or any MCP client) installs into your app through Beamline's MCP server, as a ready-built package or as plain React source you can change. $49 one payment (regular $200), no subscription, a year of updates, one licence for your whole team. Get Beamline · Connect your agent

More in Blocks

  • AI agent workspace: Threads, a conversation with streamed reasoning, cited answers and a plan that waits for approval then runs step by step, and an artifacts panel with…
  • Analytics dashboard: A SaaS overview in the app shell, fed by your metrics hook: range and segment filters drive KPIs, new and expansion revenue, channels, plan mix, uptime…
  • Auth page: The whole sign-in / sign-up route: product mark, a quiet dotted field with a light that follows the mouse, an optional notice, the SignIn and SignupForm…
  • Changelog feed: An in-app What's new page: release notes grouped by month with tags, versions, pictures and details, a tag filter with counts, entries since your last…
  • CRM pipeline: A pipeline screen: KPIs and stage mix derived from a virtualised deals grid with inline edit, bulk moves and delete with undo; a row opens the deal in a…
  • Empty states: The five empty moments every product has, written and wired: first use with a first step, no results with the filters to clear, an error with retry and a…
  • Plan comparison: Plans side by side against every feature: prices that roll between monthly and yearly, the current and recommended plan marked, a header that stays in…
  • Settings: Profile and workspace settings with one draft and real save handler. Personal mode omits workspace data; optional profile fields share validation…
  • Sign in: The sign-in card: email and password, a one-time code or a magic link, passkeys and single sign-on, with validation, progress, errors and a signed-in…
  • Sign up form: The account creation card: single sign-on, name, work email and a password with strength and Caps Lock hints, terms consent, inline validation, your…
  • Step form: The finished frame for any multi-step form you compose — onboarding, intake brief, questionnaire, booking, application: a wide card with progress, the…
  • Trading terminal: A perpetuals terminal on your feed and your account: ticker tape, market header with funding, candles, book / trades / depth, order ticket, account…
  • Voice agent: A voice agent in three layouts on one session: a support panel that mixes typing and talking, a call screen with the agent's orb and one call button, and…