HeroUI

ToastPreview

Display temporary notifications and messages to users with automatic dismissal and customizable placement

Under construction. The Toast component is currently in development and some features might not work as expected.

Import

import { Toast, toast } from '@heroui/react';

Setup

Render the container in the root of your app.

import { Toast, Button, toast } from '@heroui/react';

function App() {
  return (
    <div>
      <Toast.Container />
      <Button onPress={() => toast("Simple message")}>
        Show toast
      </Button>
    </div>
  );
}

Usage

"use client";

import {Persons} from "@gravity-ui/icons";
import {Button, toast} from "@heroui/react";

Variants

"use client";

import {HardDrive, Persons} from "@gravity-ui/icons";
import {Button, toast} from "@heroui/react";

Placements

"use client";

import type {ToastVariants} from "@heroui/react";

import {Button, Toast, ToastQueue} from "@heroui/react";

Simple Toasts

"use client";

import {Button, toast} from "@heroui/react";

export function Simple() {

Custom Indicators

"use client";

import {Star} from "@gravity-ui/icons";
import {Button, toast} from "@heroui/react";

Custom Toast Rendering

"use client";

import type {ToastContentValue} from "@heroui/react";

import {

Custom Queues

"use client";

import {Button, Toast, ToastQueue} from "@heroui/react";

export function CustomQueue() {

Anatomy

<Toast.Container>
  <Toast>
    <Toast.Indicator />
    <Toast.Content>
      <Toast.Title />
      <Toast.Description />
    </Toast.Content>
    <Toast.ActionButton />
    <Toast.CloseButton />
  </Toast>
</Toast.Container>

Styling

Passing Tailwind CSS classes

<Toast.Container className="bottom-8 right-8" placement="bottom end" />

Customizing the component classes

To customize the Toast component classes, you can use the @layer components directive.
Learn more.

@layer components {
  .toast {
    @apply rounded-xl shadow-lg;
  }

  .toast__content {
    @apply gap-2;
  }
}

HeroUI follows the BEM methodology to ensure component variants and states are reusable and easy to customize.

CSS Classes

The Toast component uses these CSS classes (View source styles):

Base Classes

  • .toast - Base toast container
  • .toast__region - Toast region container
  • .toast__content - Content wrapper for title and description
  • .toast__indicator - Icon/indicator container
  • .toast__title - Toast title text
  • .toast__description - Toast description text
  • .toast__action - Action button container
  • .toast__close - Close button container

Variant Classes

  • .toast--default - Default gray variant
  • .toast--accent - Accent blue variant
  • .toast--success - Success green variant
  • .toast--warning - Warning yellow/orange variant
  • .toast--danger - Danger red variant

Interactive States

The component supports various states:

  • Frontmost: [data-frontmost] - Applied to the topmost visible toast
  • Index: [data-index] - Applied based on toast position in stack
  • Placement: [data-placement="*"] - Applied based on toast region placement

API Reference

Toast.Container Props

PropTypeDefaultDescription
placement"top start" | "top" | "top end" | "bottom start" | "bottom" | "bottom end""bottom"Placement of the toast region
gapnumber14The gap between toasts in pixels
maxVisibleToastsnumber3Maximum number of toasts to display at once
scaleFactornumber0.05Scale factor for stacked toasts (0-1)
queueToastQueue<T>-Custom toast queue instance
childrenReactNode | ((props: {toast: QueuedToast<T>}) => ReactNode)-Custom render function or children
classNamestring-Additional CSS classes

Toast Props

PropTypeDefaultDescription
toastQueuedToast<T>-Toast data from queue (required)
variant"default" | "accent" | "success" | "warning" | "danger""default"Visual variant of the toast
placementToastVariants["placement"]-Placement (inherited from Container)
scaleFactornumber-Scale factor (inherited from Container)
classNamestring-Additional CSS classes
childrenReactNode-Toast content (ToastContent, ToastIndicator, etc.)

Toast.Content Props

PropTypeDefaultDescription
childrenReactNode-Content (typically ToastTitle and ToastDescription)
classNamestring-Additional CSS classes

Toast.Indicator Props

PropTypeDefaultDescription
variantToastVariants["variant"]-Variant for default icon
childrenReactNode-Custom indicator icon (defaults to variant icon)
classNamestring-Additional CSS classes

Toast.Title Props

PropTypeDefaultDescription
childrenReactNode-Title text
classNamestring-Additional CSS classes

Toast.Description Props

PropTypeDefaultDescription
childrenReactNode-Description text
classNamestring-Additional CSS classes

Toast.Action Props

PropTypeDefaultDescription
childrenReactNode-Action button content
classNamestring-Additional CSS classes
All Button props--Accepts all Button component props

Toast.CloseButton Props

PropTypeDefaultDescription
classNamestring-Additional CSS classes
All CloseButton props--Accepts all CloseButton component props

ToastQueue

A ToastQueue manages the state for a <Toast.Container>. The state is stored outside React so you can trigger toasts from anywhere in your application.

Constructor Options

OptionTypeDefaultDescription
maxVisibleToastsnumber3Maximum number of toasts to display at once
wrapUpdate(fn: () => void) => void-Function to wrap state updates (e.g., for view transitions)

Methods

MethodParametersReturnsDescription
add(content: T, options?: ToastOptions)stringAdd a toast to the queue, returns toast key
close(key: string)voidClose a toast by its key
pauseAll()voidPause all toast timers
resumeAll()voidResume all toast timers
clear()voidClose all toasts
subscribe(fn: () => void)() => voidSubscribe to queue changes, returns unsubscribe function

toast Function

The default toast function provides convenient methods for showing toasts:

import { toast } from '@heroui/react';

// Basic toast
toast("Message");

// Variant methods
toast.success("Success message");
toast.info("Info message");
toast.warning("Warning message");
toast.danger("Error message");

// With options
toast("Message", {
  description: "Additional details",
  variant: "default",
  timeout: 5000,
  onClose: () => console.log("Closed"),
  actionProps: {
    children: "Action",
    onPress: () => {},
  },
  indicator: <CustomIcon />,
});

// Promise support
toast.promise(
  fetchData(),
  {
    loading: "Loading...",
    success: "Data loaded",
    error: "Failed to load",
  }
);

// Queue methods
toast.close(key);
toast.clear();
toast.pauseAll();
toast.resumeAll();

toast Options

OptionTypeDefaultDescription
titleReactNode-Toast title (first parameter for variant methods)
descriptionReactNode-Optional description text
variant"default" | "accent" | "success" | "warning" | "danger""default"Visual variant
indicatorReactNode-Custom indicator icon (null to hide)
actionPropsButtonProps-Props for action button
timeoutnumber-Auto-dismiss timeout in milliseconds (0 for persistent)
onClose() => void-Callback when toast is closed

toast.promise Options

OptionTypeDefaultDescription
loadingReactNode-Message shown while promise is pending
successReactNode | ((data: T) => ReactNode)-Message shown on success (can be function)
errorReactNode | ((error: Error) => ReactNode)-Message shown on error (can be function)

On this page