Announcement bar
FreeA thin bar for product news that rotates messages and remembers dismissal.
pnpm dlx shadcn@latest add https://caliperui.site/r/announcement-bar.jsonWhen to use #
Use it for
- Launches, maintenance windows and offers that apply across the whole product.
- Messages with a countdown or one clear action.
Skip it when
- The message is about one task; use an alert beside it.
- Several urgent messages compete; show the most important one.
Installation #
pnpm dlx shadcn@latest add https://caliperui.site/r/announcement-bar.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. It is built from AnnouncementBar and clearAnnouncementDismissal.
import { AnnouncementBar } from "@/components/ui/announcement-bar" export function LaunchBar() { return ( <div className="w-full"> <AnnouncementBar id="docs-launch-bar" messages={[ { id: "launch", message: "Workflows are in preview.", action: { label: "Look around", onClick: () => undefined } }, { id: "tip", message: "Press ⌘K to search every component." }, ]} /> </div> ); }
API reference #
AnnouncementBar
component
clearAnnouncementDismissal
component
No props of its own; it accepts the native props of its root element.
Accessibility #
It is built on native elements and keeps aria-label and aria-hidden in step with state.
No custom key handling; Tab and the native activation keys do the work.
Motion #
Transitions use the shared duration and easing tokens. Under prefers-reduced-motion those tokens collapse to instant and travel distances go to zero, so state changes still happen without movement.