Arc
ComponentsBlocksDocsPricingTry the demo
Get Pro
Introduction
Installation
Theming
Motion
AI and MCP
Changelog
Metrics dashboardPro
KPI drilldownPro
Metric explorerPro
Revenue explorerPro
MRR waterfallPro
Cohort retentionPro
Usage forecastPro
Journey flowPro
Uptime statusPro
Pivot builderNewPro
Choropleth explorerPro
Connected scatterPro
Horizon chartPro
Account healthPro
Market terminalPro
Budget variancePro
Small multiplesPro
Line replayPro
AI chatPro
AI composerPro
AI answerPro
Model pickerPro
Model arenaPro
Prompt studioPro
Document extractionPro
Agent memoryPro
AI side panelPro
AI inline editPro
Research runPro
AI insight cardPro
Catch upPro
AI feature launchPro
AI search barPro
AI setup wizardPro
Call insightsPro
Lead scoringPro
Agent runPro
Agent tasksPro
Agent approvalsPro
Agent routinesPro
Agent orchestratorPro
MCP serversPro
Knowledge basePro
Eval suitePro
Agent builderPro
Agent galleryPro
SidebarPro4
Page header
Command palette
Notification center
Selection toolbarPro
Empty states
Search resultsPro
Login and sign up5, free and Pro variants
Onboarding illustrationPro
OTP input
Multi-step formPro
Two-factor setupPro
Magic linkPro
Settings pagePro
Settings commandPro
Security settingsPro
Billing overviewPro
Usage billingPro
Cancel flowPro
Onboarding surveyPro
Spend alertPro
Team membersPro
Invite peoplePro
Team directoryPro
Roles and permissionsPro
Profile pagePro
API keysPro
WebhooksPro
IntegrationsPro
Environment variablesPro
Domain verifyPro
Webhook testerPro
Plan comparison
Pricing calculatorPro
Usage pricingPro
Cart drawerPro
Checkout summaryPro
Live checkoutPro
Seat managerPro
Credit top-upPro
Invoice studioPro
Wallet cardPro
Delivery trackerPro
Product listingPro
Product detailPro
Seat mapPro
Activity feedPro
Inbox triagePro
Support conversationPro
Support widgetPro
Help centerPro
Feature votingPro
File upload
Media playerPro
Week calendarPro
Availability pickerPro
Project boardPro
Gantt timelineNewPro
Release readinessPro
Kanban boardPro
Feedback boardPro
Smart schedulerPro
Task breakdownPro
Goal trackerPro
Hero section
Hero signupPro
Scroll storyPro
Spotlight gridPro
Feature bentoPro
Comparison table
Logo marquee
Studio perspectivesPro
Stats band
Changelog feed
FAQ section
Contact section
Team showcasePro
Blog grid
Site header
Site footer
CTA section
Newsletter signup
Activity terrainPro
Revenue globePro
Customer galaxyPro
Semantic zoomPro
Layout morphPro
Exploded viewPro
What’s new4 new
BlocksNotification center

Notification center

A home for updates with read state, grouped information, and animated disclosure.

$pnpm dlx shadcn@latest add @uiarc/notification-center
Pattern · live

When to use

  • A bell in the app header with an unread badge and an inbox of recent updates.
  • Notifications people can mark read, expand, and dismiss in bulk.

When not to use

  • Use toast-stack for transient messages that should disappear.
  • Use inbox-triage for a full-page inbox.
  • Use badge for a count without a panel.

Installation

Add Notification center with the shadcn CLI, or copy the source by hand.

$pnpm dlx shadcn@latest add @uiarc/notification-centerpnpm dlx shadcn@latest add @uiarc/notification-center

Adds the block and its local dependencies, and installs motion, lucide-react, @radix-ui/react-popover. First time? Add the @uiarc registry to components.json, or use the full URL:

Usage

Use it when updates need a persistent home instead of a brief toast. Connect read state to your data store.

example.tsx
1import { NotificationCenter } from "@/components/arc/notification-center/notification-center";2 3export function HeaderBell() {4  return (5    <NotificationCenter6      notifications={[7        { id: "1", title: "Deploy finished", time: "2m", tone: "success" },8        { id: "2", title: "Ana commented", time: "1h", actor: { name: "Ana", photo: "/ana.jpg" } },9      ]}10      onReadChange={(item, read) => markRead(item.id, read)}11      onDismiss={item => dismiss(item.id)}12    />13  );14}
Built fromPopoverBadgeAction list

API reference

2 parts. The first is the root.

NotificationCenter

A bell trigger with an unread badge that opens a popover of notifications with All and Unread views, expandable rows, and bulk actions.

PropTypeDefaultDescription
notificationsRequiredNotificationItem[]–Initial notifications. The component keeps its own copy after mount.
labelstring"Notifications"Panel heading and trigger label.
onReadChange(notification: NotificationItem, read: boolean) => void–Called for each item marked read or unread, including Mark all read.
onDismiss(notification: NotificationItem) => void–Called for each dismissed item, including Clear read.
openboolean–Controlled open state.
onOpenChange(open: boolean) => void–Called when the popover opens or closes.
avoidCollisionsbooleantrueLets the popover flip or shift to stay in the viewport.

NotificationItem

Item type: { id: string; title: string; description?: string; time: string; read?: boolean; tone?: "info" | "success" | "warning"; actor?: { name: string; photo: string } }. actor shows an avatar instead of a tone icon.

No props.

Keyboard interactions

EnterorSpace
Opens the panel from the trigger, toggles a row's details, and activates actions.
Escape
Closes the panel and returns focus to the trigger (Radix Popover).
Tab
Moves through view toggles, rows, and row actions.

Accessibility

  • The trigger's aria-label includes the unread count; the visual badge is aria-hidden.
  • The summary line is aria-live polite, and outgoing text copies are aria-hidden while they fade.
  • Row toggles use aria-expanded and announce unread state; view toggles use aria-pressed.
  • Focus moves to the next row, or a view toggle, after an item is read, dismissed, or cleared.

Motion

  • The bell tilts when open; counts roll like an odometer in the direction of change.
  • Rows open and collapse their own height on a spring, and bulk actions cascade down the list in under a quarter second.
  • Reduced motion replaces height, roll, and tilt with instant fades.

Responsive behavior

  • The panel is min(424px, 100vw minus 24px) wide and at most min(590px, 100vh minus 24px) tall, with the list scrolling inside.
  • Below 380px padding tightens, the details indent shrinks, and the Mark all read label becomes icon only.
  • Titles and previews ellipsize on one line.

Performance

  • The list is not virtualized and keeps its own copy of the notifications; cap what you pass in.
  • The panel mounts in a portal only while open.

Notes for AI

Give your coding assistant the Markdown reference instead of screenshots.

  • Use in an app header for an inbox of updates. Use toast or toast-stack for transient messages and inbox-triage for a full-page inbox.
  • notifications seeds internal state; sync changes back to your server through onReadChange and onDismiss rather than re-passing the array.
/components/blocks/notification-center/markdown

The full library index for assistants is at /llms.txt.

Related

PopoverComponentA small anchored surface for contextual information.Toast stackComponentStack short results at the edge until you reach for them.BadgeComponentA small label for status, category, or metadata.AvatarComponentA compact identity marker for people and accounts.Inbox triageProBlockProcess a focused inbox with archive, snooze, and restore actions.

More like this in Pro

Explore Pro
Search resultsProBlockA faceted workspace search page with suggestions, facet counts that follow the query, filter chips, mixed doc, person and file results with highlighted matches, a gliding keyboard cursor and a preview pane.Selection toolbarProBlockA contextual batch action surface that appears when items are selected.SidebarProBlockApp and docs sidebars: a folding rail, a workspace switcher, a mail shell, and a docs tree.
PreviousCommand paletteNextSelection toolbar
Arc · 134 block pagesllms.txt

On this page

  • Preview
  • When to use
  • When not to use
  • Installation
  • Usage
  • API reference
  • Keyboard
  • Accessibility
  • Motion
  • Responsive behavior
  • Performance
  • Notes for AI
  • Related
View as Markdown
Open notifications