Sakuga Back to Sakuga
Theme
Sound
Jump to a component

Core · Feedback

Toast

A short confirmation that something finished, rising into a corner. One line of title and one of detail, optional action, always dismissable. Never for errors that need a decision.

@anicanon/sakuga/uiv1.0Used onWeb · iOS · Android

Live, from @anicanon/sakuga 2.0.0

Sakuga for iOS and Android is coming

iOS

Coming soon

Toast for iOS is in the roughs. The tokens it will read are the ones on this page, the same on every platform.

Android

Coming soon

Toast for Android is in the roughs. The tokens it will read are the ones on this page, the same on every platform.

Use it for
A short confirmation that something finished, with an optional action.
Not for
  • An error that needs a decisionDialog
  • Context that stays on the pageNotice
  • Work that is still runningProgress

Guidelines

Motion: it rises in on motion-base with ease-enter and leaves on motion-fast with ease-exit.

  • Slide it sideways to dismiss it: it follows the pointer and fades; past toast-swipe-dismiss (35%) of its width it leaves and onDismiss runs, short of that it returns.
ToastExample.jsxReact
import { useState } from 'react';
import { Button, Toast } from '@anicanon/sakuga/ui';

export default function ToastExample() {
  const [open, setOpen] = useState(true);
  return (
    <>
      <Button variant="secondary" size="sm" onClick={() => setOpen(true)}>
        Save the look
      </Button>
      <Toast
        open={open}
        onDismiss={() => setOpen(false)}
        title="Plaid overshirt joined his looks"
        text="20 fragments charged. The portrait is on us."
      />
    </>
  );
}

PropsToastProps

titlerequired
string
text
string
icon
IconName
Leading glyph or avatar.
image
string
Leading glyph or avatar.
media
ReactNode
Drawn in place of the icon.
open
boolean
Set it to control the toast: false plays its exit, then it unmounts. Without it, Dismiss plays the exit and then calls onDismiss.
onDismiss
() => void
Without open, called after the exit has played.
children
ReactNode
An action button.
style
CSSProperties
className
string

An IconName is any of the names Icon lists.

ToastExample.swiftiOS · coming soon
ToastExample.ktAndroid · coming soon

Each token reads a role, and the role lands on a value in each theme. Change the role and every component that reads it follows.

Colour

toast-bgToast: surface.
bg-surfaceneutral-0#ffffff
bg-surfaceneutral-900#111117
toast-borderToast: edge.
border-dividershade-a12rgba(11,10,16,0.12)
border-dividerwhite-a12rgba(255,255,255,0.12)
toast-iconToast: leading icon.
accentcamellia-600#c2335f
accentcamellia-400#f4779f

Space and shape

toast-gap
gap-lg
12px
toast-swipe-dismiss
its own value
.35
toast-width
its own value
380px
toast-padding-y
inset-md
12px
toast-padding-x
inset-lg
16px
toast-radius
radius-lg
16px
toast-inset-ring-width
line-hairline
1px
toast-img-size
its own value
40px
toast-img-radius
radius-full
9999px
toast-icon-size
icon-size-md
20px
toast-forced-edge-width
line-hairline
1px

Type

toast-font-family
font-sans
Funnel Sans
toast-body-b-font
text-label
600 14px/20px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
toast-body-span-font
text-small
500 12px/16px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif

Motion

toast-swipe-duration
motion-base
240ms
toast-swipe-easing
ease-standard
cubic-bezier(0.2, 0, 0, 1)
toast-swipe-out-duration
motion-fast
160ms
toast-swipe-out-easing
ease-exit
cubic-bezier(0.3, 0, 1, 1)
toast-rise-in-animation
motion-rise
sk-rise-in 240ms cubic-bezier(0, 0, 0, 1)
toast-leaving-out-animation
its own value
sk-sink 160ms cubic-bezier(0.3, 0, 1, 1)

Checked automatically with axe-core 4.11.4 against WCAG 2.2 A and AA, on the live preview above, in light and dark, on 26 October 2026.

Result
No issues found, in light or in dark.
By design
Its title and text are said through the page's live region when it appears, and read in place with the icon and picture hidden; Tab reaches any actions in it and the "Dismiss" button, which runs onDismiss; dismissed with focus inside it, focus goes to the next toast, else back to where it came from. Sliding it away is for the pointer; the Dismiss button does the same.
Not tested
The automated check doesn't test keyboard use, focus order or what a screen reader says. The lines above are the design system's own account of them.