Page header
BlockA title with description, breadcrumbs and actions.
pnpm dlx shadcn@latest add https://caliperui.site/r/page-header.jsonDeployments
ProductionEvery build that has gone out, who shipped it, and whether it held.
When to use #
Use it for
- The top of an application page.
Skip it when
- A marketing page; use a hero.
Installation #
terminal
pnpm dlx shadcn@latest add https://caliperui.site/r/page-header.json
Adds its 3 files to components/ui/, each with its own stylesheet, and installs their packages. No account needed. The first part also adds Caliper UI’s tokens; import them once as in Installation.
Usage #
This is the code behind the preview above.
example.tsx
import { useState } from "react" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { PageHeader } from "@/components/ui/page-header" import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs" export function PageHeaderDemo() { const [tab, setTab] = useState("overview"); return ( <PageHeader breadcrumb={[{ label: "Projects", href: "#" }, { label: "Atlas platform", href: "#" }, { label: "Deployments" }]} title="Deployments" meta={<Badge>Production</Badge>} description="Every build that has gone out, who shipped it, and whether it held." actions={ <> <Button variant="secondary" size="sm">Export</Button> <Button size="sm">New deployment</Button> </> } > <Tabs value={tab} onValueChange={setTab}> <TabsList aria-label="Deployment views"> <TabsTrigger value="overview">Overview</TabsTrigger> <TabsTrigger value="history">History</TabsTrigger> <TabsTrigger value="settings">Settings</TabsTrigger> </TabsList> </Tabs> </PageHeader> ); }
API reference #
PageHeader
component
PropTypeDefaultDescription
title *string—
descriptionReactNode—
breadcrumbreadonly PageCrumb[]—Ancestors then the current page; the last item is the page itself.
metaReactNode—Status badges or small facts beside the title.
actionsReactNode—Buttons aligned to the end; they wrap under the title on narrow screens.
childrenReactNode—Anything that belongs to the header, such as tabs.
classNamestring—
Accessibility #
It is built on native elements, so roles and focus come from the browser.
No custom key handling; Tab and the native activation keys do the work.
Motion #
It declares no animation in its component source. Any transition comes from its stylesheet, which uses the duration tokens that collapse to instant under prefers-reduced-motion.