Foundation
PackagesUIComponents

Toast

操作結果をユーザーに一時的に通知する非ブロッキングなフィードバック。

いつ使うか

  • フォーム送信、データ保存、削除などの操作が成功・失敗した後のフィードバックに使用する
  • ユーザーの作業フローを中断せずに結果を通知したいとき
  • 数秒で自動的に消えても問題ない情報を伝えるとき

いつ使わないか

  • フォームのバリデーションエラーには使わない。インラインの FormField エラーメッセージを使用する
  • ユーザーの判断が必要な場面には使わない。ConfirmDialog を使用する
  • 重大なエラー(認証切れ等)には使わない。AlertDialog またはページ遷移で対応する
  • 長文の説明が必要な場合は使わない

Usage

アプリのルートレイアウトに Toaster を配置し、任意の場所から toast() を呼び出す。

// layout.tsx
import { Toaster } from '@bi-shop-it/ui/toaster';

const Layout = ({ children }: { children: React.ReactNode }) => (
  <>
    {children}
    <Toaster />
  </>
);
// 任意のコンポーネント
import { toast } from '@bi-shop-it/ui/toaster';

const handleSave = async () => {
  try {
    await saveData();
    toast({ title: '保存しました', variant: 'success' });
  } catch {
    toast({
      title: '保存に失敗しました',
      description: 'しばらくしてからもう一度お試しください。',
      variant: 'destructive',
    });
  }
};

Props

toast() の引数

Propデフォルト説明
titlestring通知のタイトル(必須)
descriptionstringundefined補足テキスト
variant'default' | 'success' | 'warning' | 'destructive' | 'info''default'通知の種類。アイコンと左ボーダーの色が変わる
durationnumber5000自動消去までの時間(ミリ秒)
action{ label: string; onClick: () => void }undefinedトースト内のアクションボタン

dismissToast()

引数説明
idstring消すトーストのID。省略時は全て消去する

toast() はトーストのIDを返す。このIDを dismissToast() に渡すことで個別に消去できる。

バリアント

toast({ title: '保存しました', variant: 'success' });
toast({ title: '変更が未保存です', variant: 'warning' });
toast({ title: '削除に失敗しました', variant: 'destructive' });
toast({ title: '新しいバージョンがあります', variant: 'info' });

説明付き

toast({
  title: '保存に失敗しました',
  description: 'しばらくしてからもう一度お試しください。',
  variant: 'destructive',
});

アクション付き

toast({
  title: '項目を削除しました',
  action: {
    label: '元に戻す',
    onClick: () => undoDelete(),
  },
});

アクセシビリティ

コンポーネントが内部で処理すること

  • Radix UIの Toast プリミティブを使用し、WAI-ARIAのToastパターンに準拠する
  • aria-live="polite" リージョン内にトーストを配置し、スクリーンリーダーに通知する
  • 閉じるボタンに aria-label="閉じる" を付与する
  • アクションボタンの altText をスクリーンリーダー向けに提供する
  • 装飾アイコンに aria-hidden="true" を付与する

利用者が対応すること

  • 自動消去の duration は十分な長さを確保する(デフォルト5000msを推奨)
  • 重要な情報(エラー等)はToastだけに頼らず、他の手段でも伝える

関連コンポーネント

  • ConfirmDialog — ユーザーの判断が必要な場面で使用する。Toastは一方的な通知のみ
  • AlertDialog — 重大なエラーなど、確実にユーザーの注意を引きたい場面で使用する
  • StatusBadge — 状態を永続的に表示する場合に使用する。Toastは一時的な通知

On this page