Toast

Generates toast notifications.

View as Markdown

Anatomy

Import the component and assemble its parts:

Anatomy

API reference

Provider

Provides a context for creating and managing toasts.

limit

number

(default:

3

)
Name
Description

The maximum number of toasts that can be displayed at once. When the limit is reached, the oldest toast will be removed to make room for the new one.

Type

number

Default

3

toastManager

createToastManager.ToastManager

Description

A global manager for toasts to use outside of a React component.

Type

createToastManager.ToastManager

timeout

number

(default:

5000

)
Description

The default amount of time (in ms) before a toast is auto dismissed. A value of 0 will prevent the toast from being dismissed automatically.

Type

number

Default

5000

children

ReactNode

Type

ReactNode

Viewport

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

className

string | function

Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type

| string
| ((state: Toast.Viewport.State) => string)

render

ReactElement | function

Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type

| ReactElement
| ((props: HTMLProps, state: Toast.Viewport.State) => ReactElement)

data-expanded

Indicates toasts are expanded in the viewport.

Portal

A portal element that moves the viewport to a different part of the DOM. By default, the portal element is appended to <body>.

container

Union

Description

A parent element to render the portal element into.

Type

| HTMLElement
| RefObject<HTMLElement
| null>
| null

children

ReactNode

Type

ReactNode

Root

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

swipeDirection

Union

(default:

['down', 'right']

)
Description

Direction(s) in which the toast can be swiped to dismiss.

Type

| 'right'
| 'left'
| 'up'
| 'down'
| ('right' | 'left' | 'up' | 'down')[]

Default

['down', 'right']

toast*

Toast.Root.ToastObject<any>

Name
Description

The toast to render.

Type

Toast.Root.ToastObject<any>

className

string | function

Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type

| string
| ((state: Toast.Root.State) => string)

render

ReactElement | function

Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type

| ReactElement
| ((props: HTMLProps, state: Toast.Root.State) => ReactElement)

data-expanded

Present when the toast is expanded in the viewport.

data-limited

Present when the toast was removed due to exceeding the limit.

data-swipe-direction

The direction the toast was swiped.

data-swiping

Present when the toast is being swiped.

data-type

The type of the toast.

data-starting-style

Present when the toast is animating in.

data-ending-style

Present when the toast is animating out.

--toast-index

Indicates the index of the toast in the list.

--toast-offset-y

Indicates the vertical pixels offset of the toast in the list when expanded.

--toast-swipe-movement-x

Indicates the horizontal swipe movement of the toast.

--toast-swipe-movement-y

Indicates the vertical swipe movement of the toast.

Title

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

className

string | function

Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type

| string
| ((state: Toast.Title.State) => string)

render

ReactElement | function

Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type

| ReactElement
| ((props: HTMLProps, state: Toast.Title.State) => ReactElement)

data-type

The type of the toast.

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.

className

string | function

Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type

| string
| ((state: Toast.Description.State) => string)

render

ReactElement | function

Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type

| ReactElement
| ((props: HTMLProps, state: Toast.Description.State) => ReactElement)

data-type

The type of the toast.

Action

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

nativeButton

boolean

(default:

true

)
Description

Whether the component renders a native <button> element when replacing it via the render prop. Set to false if the rendered element is not a button (e.g. <div>).

Type

boolean

Default

true

className

string | function

Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type

| string
| ((state: Toast.Action.State) => string)

render

ReactElement | function

Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type

| ReactElement
| ((props: HTMLProps, state: Toast.Action.State) => ReactElement)

data-type

The type of the toast.

Close

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

nativeButton

boolean

(default:

true

)
Description

Whether the component renders a native <button> element when replacing it via the render prop. Set to false if the rendered element is not a button (e.g. <div>).

Type

boolean

Default

true

className

string | function

Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type

| string
| ((state: Toast.Close.State) => string)

render

ReactElement | function

Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type

| ReactElement
| ((props: HTMLProps, state: Toast.Close.State) => ReactElement)

data-type

The type of the toast.

useToastManager

Manages toasts, called inside of a Toast.Provider.

Usage

Return value

toasts

Toast.Root.ToastObject[]

Name
Description

The array of toast objects.

Type

Toast.Root.ToastObject[]

add

(options: useToast.AddOptions) => string

Name
Description

Add a toast to the toast list.

Type

(options: useToast.AddOptions) => string

close

(toastId: string) => void

Name
Description

Closes and removes a toast from the toast list.

Type

(toastId: string) => void

update

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

Name
Description

Update a toast in the toast list.

Type

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

promise

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

Description

Create a toast that resolves with a value, with three possible states for the toast: loading, success, and error.

Type

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

Method options

title

string

Name
Description

The title of the toast.

Type

string

description

string

Description

The description of the toast.

Type

string

type

string

Name
Description

The type of the toast. Used to conditionally style the toast or render different elements.

Type

string

timeout

number

Description

The amount of time (in ms) before the toast is auto dismissed.

Type

number

priority

'low' | 'high'

(default:

'low'

)
Description

The priority of the toast.

  • low - The toast will be announced politely.
  • high - The toast will be announced urgently.
Type

'low' | 'high'

Default

'low'

onClose

function

Description

A callback invoked when the toast is closed.

Type

() => void

onRemove

function

Description

A callback invoked when the toast is removed from the list after animations complete when closed.

Type

() => void

actionProps

React.ComponentPropsWithRef<'button'>

Description

The props of the action button.

Type

React.ComponentPropsWithRef<'button'>

data

Record<string, unknown>

Name
Description

The data of the toast.

Type

Record<string, unknown>

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

For high priority toasts, 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, unless they intentionally navigate to the toast viewport.

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

General 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.

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.

z-index stacking

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.

Expanded offset

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.

Swipe offset

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

Swipe direction

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.