Skip to content

Toast

Imperative notification API (`toast.success`, `toast.error`, `toast.promise`). Differentiates `role="alert"` from `role="status"`.

Overlays & Feedback·Available inReactVueAngular·View as Markdown

Preview

tsx

Switch the framework picker (top-right of the panel) to render the same demo live in React, Vue, or Angular — same class names, ARIA, and visual output across all three.

Installation

Sisyphos UI ships unified packages for React, Vue, and Angular. Pick the one that matches your stack — every framework exports the same component classes, ARIA semantics, and CSS tokens.

$ pnpm add @sisyphos-ui/react

Then import the bundled stylesheet once at app entry: import "@sisyphos-ui/react/styles.css";

Usage

Idiomatic usage in each supported framework
import { Toaster, toast, Button } from "@sisyphos-ui/react";

export const App = () => (
  <>
    <Toaster position="bottom-right" />
    <Button onClick={() => toast.success("Saved")}>Save</Button>
  </>
);

Title + description

Second argument accepts `{ description, duration, dismissible, … }`.

tsx

With undo action

Pass any ReactNode as `action`. Use `toast.dismiss(id)` to close from inside the action.

tsx

Promise + loading

`toast.promise(p, { loading, success, error })` morphs a loading toast into success or error when the promise settles — same id, same slot, animated transition. `success` / `error` accept a function of the resolved value / thrown error.

tsx

All positions

Pick any of the six anchor points. The `<Toaster />` itself drives layout.

tsx

API

PropTypeDefaultDescription
position"top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right""bottom-right"Toaster: corner or edge where the stack is anchored.
maxnumber5Toaster: max toasts visible at once; excess remain queued in state.
gapnumber8Toaster: gap between stacked toasts in px.
descriptionReactNode`toast()` option: longer explanation rendered under the title.
durationnumber4000`toast()` option: auto-dismiss delay in ms; pass `Infinity` to persist.
iconReactNode | null`toast()` option: override the per-type default icon; pass `null` to hide it.
actionReactNode`toast()` option: action element (button) rendered on the right.
dismissiblebooleantrue`toast()` option: show the X close button.
idstring`toast()` option: provide an id to update or dedupe an existing toast.
onDismiss(id: string) => void`toast()` option: fired when the toast is removed for any reason.

The full API including refs, ARIA attributes, and HTML passthroughs lives in the package README on npm.

Accessibility

Adheres to the Alert WAI-ARIA design pattern.

  • Error toasts render role="alert" with aria-live="assertive"; every other type uses role="status" with aria-live="polite", so only errors interrupt the screen reader.
  • Auto-dismiss pauses while the pointer hovers a toast, giving users time to read or act.
  • The close button carries aria-label="Dismiss notification"; type icons are decorative and aria-hidden.
  • toast.loading and toast.promise reuse a stable id, so the loading → success/error transition updates the existing toast in place instead of spawning a new announcement.

Keyboard interactions

KeyAction
TabReaches a toast's action and dismiss buttons — both are native buttons in the document tab order.
EnterthenSpaceActivates the focused dismiss or action button.
Need more?View on npm →
Was this page helpful?