Toast

Generates toast notifications.

Usage

  • <Toast.Provider> can be wrapped around your entire app, ensuring all toasts are rendered in the same viewport.
  • F6 lets users jump into the toast viewport landmark region to navigate toasts with keyboard focus.

API reference

Import the component and assemble its parts:

Anatomy

Provider

Provides a context for creating and managing toasts.

PropTypeDefault
limit

number

3

toastManager

createToastManager.ToastManager

undefined

timeout

number

5000

Viewport

A container viewport for toasts. Renders a <div> element.

PropTypeDefault
className

string | (state) => string

undefined

render

| React.ReactElement
| (props, state) => React.ReactElement

undefined

Attribute
Description
data-expanded

Root

Groups all parts of an individual toast. Renders a <div> element.

PropTypeDefault
swipeDirection

| 'down'
| 'left'
| 'right'
| 'up'
| Array<'down'
| 'left'
| 'right'
| 'up'>

undefined

toast

ToastObject

undefined

className

string | (state) => string

undefined

render

| React.ReactElement
| (props, state) => React.ReactElement

undefined

Attribute
Description
data-expanded
data-limited
data-swipe-direction
data-swiping
data-type
data-starting-style
data-ending-style
CSS Variable
Description
--toast-index
--toast-offset-y
--toast-swipe-movement-x
--toast-swipe-movement-y

Title

A title that labels the toast. Renders an <h2> element.

PropTypeDefault
className

string | (state) => string

undefined

render

| React.ReactElement
| (props, state) => React.ReactElement

undefined

Attribute
Description
data-type

Description

A description that describes the toast. Can be used as the default message for the toast when no title is provided. Renders a <p> element.

PropTypeDefault
className

string | (state) => string

undefined

render

| React.ReactElement
| (props, state) => React.ReactElement

undefined

Attribute
Description
data-type

Action

Performs an action when clicked. Renders a <button> element.

PropTypeDefault
className

string | (state) => string

undefined

render

| React.ReactElement
| (props, state) => React.ReactElement

undefined

Attribute
Description
data-type

Close

Closes the toast when clicked. Renders a <button> element.

PropTypeDefault
className

string | (state) => string

undefined

render

| React.ReactElement
| (props, state) => React.ReactElement

undefined

Attribute
Description
data-type

useToastManager

Manages toasts, called inside of a Toast.Provider.

Usage

Return value

PropType
toasts

Toast.Root.ToastObject[]

add

(options: useToast.AddOptions) => string

close

(toastId: string) => void

update

(toastId: string, options: useToast.UpdateOptions) => void

promise

<Value>(promise: Promise<Value>, options: useToast.PromiseOptions) => Promise<Value>

Method options

PropTypeDefault
title

string

undefined

description

string

undefined

type

string

undefined

timeout

number

undefined

priority

'low' | 'high'

'low'

onClose

() => void

undefined

onRemove

() => void

undefined

actionProps

React.ComponentPropsWithRef<'button'>

undefined

data

Record<string, unknown>

undefined

add method

Creates a toast by adding it to the toast list.

Returns a toastId that can be used to update or close the toast later.

Usage
Example

The title and description strings are what are used to announce the toast to screen readers. Screen readers do not announce any extra content rendered inside Toast.Root, including the Toast.Title or Toast.Description components.

update method

Updates the toast with new options.

Usage

close method

Closes the toast, removing it from the toast list after any animations complete.

Usage

promise method

Creates an asynchronous toast with three possible states: loading, success, and error.

Description configuration

Each state also accepts the method options object to granularly control the toast for each state:

Method options configuration

Global manager

A global toast manager can be created by passing the toastManager prop to the Toast.Provider. This enables you to queue a toast from anywhere in the app (such as in functions outside the React tree) while still using the same toast renderer.

The created toastManager object has the same properties and methods as the Toast.useToastManager() hook.

Creating a manager instance
Using the instance

Stacking and animations

The --toast-index CSS variable can be used to determine the stacking order of the toasts. The 0th index toast appears at the front.

The --toast-offset-y CSS variable can be used to determine the vertical offset of the toasts when positioned absolutely with a translation offset — this is usually used with the data-expanded attribute, present when the toast viewport is being hovered or has focus.

The --toast-swipe-movement-x and --toast-swipe-movement-y CSS variables are used to determine the swipe movement of the toasts in order to add a translation offset.

The data-swipe-direction attribute can be used to determine the swipe direction of the toasts to add a translation offset upon dismissal.

The data-limited attribute indicates that the toast was removed from the list due to exceeding the limit option. This is useful for animating the toast differently when it is removed from the list.

Examples

Custom position

The position of the toasts is controlled by your own CSS. To change the toasts’ position, you can modify the Viewport and Root styles. A more general component could accept a data-position attribute, which the CSS handles for each variation. The following shows a top-center position:

Undo action

When adding a toast, the actionProps option can be used to define props for an action button inside of it—this enables the ability to undo an action associated with the toast.

Promise

An asynchronous toast can be created with three possible states: loading, success, and error. The type string matches these states to change the styling. Each of the states also accepts the method options object for more granular control.

Custom

A toast with custom data can be created by passing any typed object interface to the data option. This enables you to pass any data (including functions) you need to the toast and access it in the toast’s rendering logic.