# Toast
Display brief messages to users.
```tsx
import { Toast, createToaster } from '@skeletonlabs/skeleton-react';
export default function Default() {
const toaster = createToaster({});
return (
<>
{(toast) => (
{toast.title}{toast.description}
)}
>
);
}
```
## Usage
This component acts as a Singleton - meaning you only implement a single instance (typically at the root scope of your app) and then reused it over and over. To do this, implement the `` at the root scope of your app, and use a shared `createToaster()` instance to trigger messages to that group from anywhere in your application.
## Type
```tsx
import { Toast, createToaster } from '@skeletonlabs/skeleton-react';
export default function Type() {
const toaster = createToaster({});
return (
<>
{(toast) => (
{toast.title}{toast.description}
)}
>
);
}
```
Types can be specified in one of two ways:
* Via a trigger method: `toaster.{info|success|warning|error}()`
* Via the object key: `type: {info|success|warning|error}`
## Action
Include an optional action button.
```tsx
import { Toast, createToaster } from '@skeletonlabs/skeleton-react';
export default function Action() {
const toaster = createToaster({});
return (
<>
{(toast) => (
{toast.title}{toast.description}
{toast.action && {toast.action.label}}
)}
>
);
}
```
## Closable
By passing `closable: false` you can disable the close button.
```tsx
import { Toast, createToaster } from '@skeletonlabs/skeleton-react';
export default function Closable() {
const toaster = createToaster({});
return (
<>
{(toast) => (
{toast.title}{toast.description}
{toast.closable && }
)}
>
);
}
```
## Placement
```tsx
import { Toast, createToaster } from '@skeletonlabs/skeleton-react';
export default function Placement() {
const toaster = createToaster({
placement: 'bottom-end',
});
return (
<>
{(toast) => (
{toast.title}{toast.description}
)}
>
);
}
```
## Meta
Use the `meta` key to provide arbitrary data. Then use this to modify your Toast template.
```tsx
import { Toast, createToaster } from '@skeletonlabs/skeleton-react';
import { SkullIcon } from 'lucide-react';
export default function Meta() {
const toaster = createToaster({});
return (
<>
{(toast) => (
{toast.meta!.icon}
{toast.title}{toast.description}
)}
>
);
}
```
## Promise
Use promises for asynchronous triggers.
```tsx
import { Toast, createToaster } from '@skeletonlabs/skeleton-react';
export default function Promise_() {
const toaster = createToaster({});
function generatePositiveNumber() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const number = Math.random() - 0.5;
if (number > 0) {
resolve(number);
} else {
reject(number);
}
}, 2000);
});
}
return (
<>
{(toast) => (
{toast.title}{toast.description}
)}
>
);
}
```
## API Reference
### ToastRootProps
| Property | Default | Type | Description |
| -------- | ------- | -------------------------------------------------------------- | --------------------------- |
| toast | - | Omit\, "id" \| "parent"> | - |
| element? | - | ((attributes: HTMLAttributes\<"div">) => Element) \| undefined | Render the element yourself |
### ToastRootContextProps
| Property | Default | Type | Description |
| -------- | ------- | ----------------------------------------------- | ----------- |
| children | - | (toast: ToastApi\) => ReactNode | - |
### ToastGroupProps
| Property | Default | Type | Description |
| --------- | ------- | -------------------------------------------------------------- | --------------------------- |
| toaster | - | ToastStore\ | - |
| children? | - | ((toast: ToastProps\) => Element \| null) \| undefined | - |
| element? | - | ((attributes: HTMLAttributes\<"div">) => Element) \| undefined | Render the element yourself |
### ToastMessageProps
| Property | Default | Type | Description |
| -------- | ------- | -------------------------------------------------------------- | --------------------------- |
| element? | - | ((attributes: HTMLAttributes\<"div">) => Element) \| undefined | Render the element yourself |
### ToastTitleProps
| Property | Default | Type | Description |
| -------- | ------- | -------------------------------------------------------------- | --------------------------- |
| element? | - | ((attributes: HTMLAttributes\<"div">) => Element) \| undefined | Render the element yourself |
### ToastDescriptionProps
| Property | Default | Type | Description |
| -------- | ------- | -------------------------------------------------------------- | --------------------------- |
| element? | - | ((attributes: HTMLAttributes\<"div">) => Element) \| undefined | Render the element yourself |
### ToastActionTriggerProps
| Property | Default | Type | Description |
| -------- | ------- | ----------------------------------------------------------------- | --------------------------- |
| element? | - | ((attributes: HTMLAttributes\<"button">) => Element) \| undefined | Render the element yourself |
### ToastCloseTriggerProps
| Property | Default | Type | Description |
| -------- | ------- | ----------------------------------------------------------------- | --------------------------- |
| element? | - | ((attributes: HTMLAttributes\<"button">) => Element) \| undefined | Render the element yourself |