Skip to content

Headless Core — Alert

Powers Alert internally. A single inline status message — compare with Toast, its floating, auto-dismissing, queued relative.

import { createAlert } from '@andersseen/headless-components/alert';
const alert = createAlert({
variant: 'destructive',
dismissible: true,
onDismiss: () => console.log('Alert dismissed'),
});
alert.actions.setVariant('success');
alert.actions.dismiss();
OptionTypeDefault
variant'default' | 'destructive' | 'success' | 'warning' | 'info''default'
dismissiblebooleanfalse
defaultVisiblebooleantrue
onDismiss() => void
onVisibilityChange(visible: boolean) => void

variant, visible, dismissible.

dismiss() (no-ops unless both dismissible and currently visible), show(), setVariant(v), setDismissible(v) — no queries bucket; read alert.state.visible directly.

getAlertProps() returns role, aria-live, aria-atomic: true, data-state, data-variant. destructive and warning variants get role="alert" + aria-live="assertive" (interrupts screen readers immediately); every other variant gets role="status" + aria-live="polite" (announced without interrupting) — the factory picks this for you based on variant, you don’t set it directly.

getDismissButtonProps() returns aria-label: 'Dismiss alert', type: 'button'.

Cycle variant Dismiss Show again

Toast — the floating, queued, auto-dismissing relative of this same “status message” idea.