Skip to contents

Toast

Generates toast notifications.

View as Markdown

Anatomy

Import the component and assemble its parts:

Anatomy

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.
  • The data-swipe-ignore attribute can be manually added to elements inside of a toast to prevent swipe-to-dismiss gestures on them. Interactive elements are automatically prevented.

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

<Toast.Content> is used to hide overflow from taller toasts while the stack is collapsed. The data-behind attribute marks content that sits behind the frontmost toast and pairs with the data-expanded attribute so the content fades back in when the viewport expands:

Collapsed content

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

Anchored toasts

Toasts can be anchored to a specific element using <Toast.Positioner> and the positionerProps option when adding a toast. This is useful for showing contextual feedback like transient “Copied” toasts that appear near the button that triggered the action.

Anchored toasts should be rendered in a separate <Toast.Provider> from stacked toasts. A global toast manager can be created for each to manage them separately throughout your app:

Mixing stacked and anchored toasts

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.

Varying heights

Toasts with varying heights are stacked by ensuring that the <Toast.Content> element has overflow: hidden set, along with all toasts’ heights matching the frontmost toast at index 0. This prevents taller toasts from overflowing the stack when collapsed.

API reference

Provider

Provides a context for creating and managing toasts.

limit
number
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 | undefined
Default
3
toastManager
ToastManager
Description

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

Type
ToastManager | undefined
timeout
number
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 | undefined
Default
5000
children
React.ReactNode
Type
React.ReactNode | undefined

Additional Types

Toast.Provider.Props

Re-Export of Provider props as ToastProviderProps

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
style
React.CSSProperties | function
Name
Type
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
data-expanded
Indicates toasts are expanded in the viewport.
--toast-frontmost-height

Indicates the height of the frontmost toast.

Additional Types

Toast.Viewport.Props

Re-Export of Viewport props as ToastViewportProps

Toast.Viewport.State

Portal

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

container
Union
Description

A parent element to render the portal element into.

Type
className
string | function
Description

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

Type
style
React.CSSProperties | function
Name
Type
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

Additional Types

Toast.Portal.Props

Re-Export of Portal props as ToastPortalProps

Toast.Portal.State

Root

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

swipeDirection
Union
['down', 'right']
Description

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

Type
Default
['down', 'right']
toast*
Toast.Root.ToastManagerAddOptions<any>
Name
Description

The toast to render.

Type
Toast.Root.ToastManagerAddOptions<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
style
React.CSSProperties | function
Name
Type
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
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-height

Indicates the measured natural height of the toast in pixels.

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

Additional Types

Toast.Root.Props

Re-Export of Root props as ToastRootProps

Toast.Root.State
Toast.Root.ToastObject

Content

A container for the contents of a toast. 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
style
React.CSSProperties | function
Name
Type
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
data-behind
Present when the toast is behind the frontmost toast in the stack.
data-expanded
Present when the toast viewport is expanded.

Additional Types

Toast.Content.Props

Re-Export of Content props as ToastContentProps

Toast.Content.State

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
style
React.CSSProperties | function
Name
Type
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
data-type
The type of the toast.

Additional Types

Toast.Title.Props

Re-Export of Title props as ToastTitleProps

Toast.Title.State

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
style
React.CSSProperties | function
Name
Type
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
data-type
The type of the toast.

Additional Types

Toast.Description.Props

Re-Export of Description props as ToastDescriptionProps

Toast.Description.State

Action

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

nativeButton
boolean
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 (for example, <div>).

Type
boolean | undefined
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
style
React.CSSProperties | function
Name
Type
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
data-type
The type of the toast.

Additional Types

Toast.Action.Props

Re-Export of Action props as ToastActionProps

Toast.Action.State

Close

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

nativeButton
boolean
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 (for example, <div>).

Type
boolean | undefined
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
style
React.CSSProperties | function
Name
Type
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
data-type
The type of the toast.

Additional Types

Toast.Close.Props

Re-Export of Close props as ToastCloseProps

Toast.Close.State

Positioner

Positions the toast against the anchor. Renders a <div> element.

disableAnchorTracking
boolean
false
Description

Whether to disable the popup from tracking any layout shift of its positioning anchor.

Type
boolean | undefined
Default
false
toast*
ToastManagerAddOptions<any>
Name
Description

The toast object associated with the positioner.

align
Align
'center'
Name
Description

How to align the popup relative to the specified side.

Type
Default
'center'
alignOffset
number | OffsetFunction
0
Description

Additional offset along the alignment axis in pixels. Also accepts a function that returns the offset to read the dimensions of the anchor and positioner elements, along with its side and alignment.

The function takes a data object parameter with the following properties:

  • data.anchor: the dimensions of the anchor element with properties width and height.
  • data.positioner: the dimensions of the positioner element with properties width and height.
  • data.side: which side of the anchor element the positioner is aligned against.
  • data.align: how the positioner is aligned relative to the specified side.
Type
Default
0
Example
side
Side
'top'
Name
Description

Which side of the anchor element to align the toast against. May automatically change to avoid collisions.

Type
Default
'top'
sideOffset
number | OffsetFunction
0
Description

Distance between the anchor and the popup in pixels. Also accepts a function that returns the distance to read the dimensions of the anchor and positioner elements, along with its side and alignment.

The function takes a data object parameter with the following properties:

  • data.anchor: the dimensions of the anchor element with properties width and height.
  • data.positioner: the dimensions of the positioner element with properties width and height.
  • data.side: which side of the anchor element the positioner is aligned against.
  • data.align: how the positioner is aligned relative to the specified side.
Type
Default
0
Example
arrowPadding
number
5
Description

Minimum distance to maintain between the arrow and the edges of the popup.

Use it to prevent the arrow element from hanging out of the rounded corners of a popup.

Type
number | undefined
Default
5
anchor
Element | null
Name
Description

An element to position the toast against.

Type
Element | null | undefined
collisionAvoidance
CollisionAvoidance
Description

Determines how to handle collisions when positioning the popup.

Type
CollisionAvoidance | undefined
Example
collisionBoundary
Boundary
'clipping-ancestors'
Description

An element or a rectangle that delimits the area that the popup is confined to.

Type
Boundary | undefined
Default
'clipping-ancestors'
collisionPadding
Padding
5
Description

Additional space to maintain from the edge of the collision boundary.

Type
Padding | undefined
Default
5
sticky
boolean
false
Name
Description

Whether to maintain the popup in the viewport after the anchor element was scrolled out of view.

Type
boolean | undefined
Default
false
positionMethod
'absolute' | 'fixed'
'absolute'
Description

Determines which CSS position property to use.

Type
'absolute' | 'fixed' | undefined
Default
'absolute'
className
string | function
Description

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

Type
style
React.CSSProperties | function
Name
Type
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
data-anchor-hidden
Present when the anchor is hidden.
data-align
Indicates how the toast is aligned relative to specified side.
data-side
Indicates which side the toast is positioned relative to the trigger.
--anchor-height

The anchor’s height.

--anchor-width

The anchor’s width.

--available-height

The available height between the anchor and the edge of the viewport.

--available-width

The available width between the anchor and the edge of the viewport.

--transform-origin

The coordinates that this element is anchored to. Used for animations and transitions.

Additional Types

Toast.Positioner.Props

Re-Export of Positioner props as ToastPositionerProps

Toast.Positioner.State

Arrow

Displays an element positioned against the toast anchor. 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
style
React.CSSProperties | function
Name
Type
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
data-uncentered
Present when the toast arrow is uncentered.
data-align
Indicates how the toast is aligned relative to specified side.
data-side
Indicates which side the toast is positioned relative to the anchor.

Additional Types

Toast.Arrow.Props

Re-Export of Arrow props as ToastArrowProps

Toast.Arrow.State

useToastManager

Manages toasts, called inside of a <Toast.Provider>.

Usage

Return value

toasts
ToastManagerAddOptions<{}>[]
add
function
Name
Type
((options: ToastManagerAddOptions<{}>) => string)
close
function
Name
Type
((toastId: string) => void)
update
function
Name
Type
((toastId: string, options: ToastManagerUpdateOptions<{}>) => void)
promise
function
Type
((promise: Promise<Value>, options: ToastManagerPromiseOptions<Value, {}>) => Promise<Value>)

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

See full promise method options

Additional Types

Additional Types

ToastObject
ToastManager
ToastManagerAddOptions
ToastManagerEvent
ToastManagerPositionerProps
ToastManagerPromiseOptions
ToastManagerUpdateOptions
UseToastManagerReturnValue