Component

Announce dynamic status, validation, and background updates to assistive technologies without adding visual UI.

preview

Sync status

Ready to sync

Ready to sync
React
"use client" import { useState } from "react" import Button from "@radui/ui/Button" import Card from "@radui/ui/Card" import Heading from "@radui/ui/Heading" import LiveRegion from "@radui/ui/LiveRegion" import Text from "@radui/ui/Text" export default function LiveRegionExample() { const [message, setMessage] = useState("Ready to sync") return ( <Card className="w-full max-w-xl bg-gray-50 text-gray-1000"> <div className="flex items-center justify-between gap-4"> <div> <Heading as="h3" className="mb-1 text-base"> Sync status </Heading> <Text className="text-sm text-gray-800"> {message} </Text> </div> <Button onClick={() => setMessage("Settings synced")}> Sync </Button> <LiveRegion>{message}</LiveRegion> </div> </Card> ) }
  • Polite and assertive announcement modes
  • Visually hidden by default without removing content from the accessibility tree
  • Configurable live region role and ARIA announcement metadata
  • Stable data-slot and optional Theme class namespace hooks

Root component for announcing dynamic updates to assistive technologies.

PropTypeDefault
politeness
'polite' | 'assertive' | 'off'
'polite'
role
'status' | 'alert' | 'log'
'status'
atomic
boolean
true
relevant
'additions' | 'removals' | 'text' | 'all' | 'additions text'
'additions text'
busy
boolean
--
visuallyHidden
boolean
true
customRootClass
string
''
ShortcutDescription
Tab

The visually hidden region is not tabbable. Tab moves focus to the next tabbable element, and updating the region does not move focus to it.

ReferenceWhat Rad UI follows

Uses aria-live, aria-atomic, aria-relevant, and aria-busy to describe how assistive technologies should announce dynamic updates. The default role is status for polite updates and alert for assertive updates.