kaze風
Toast
トースト通知
プレビュー
トースト通知は画面の端に一時的に表示されるため、ここではプレビューを省略しています。
tone プロパティで通知の種類を指定できます。
使いどころ
使う場面
- 操作の結果を短く伝える(「保存しました」「リンクをコピーしました」)。数秒で消えても困らない内容
- tone で重さを選ぶ。default / info / positive は控えめ、warning / negative は強く読み上げられる
- 表示位置は画面の端で、作業の邪魔をしない。ToastProvider をルートに 1 つ置き、useToast() の toast() で呼ぶ
使わない場面
- 読み終えるまで残したいメッセージ、取り消せない失敗、次の操作が必要な通知。Alert を使う
- 確認や選択を求めること。Dialog を使う
- 入力欄の検証エラー。FormField の error を使う
- 見逃すと困る内容。自動で消えるので、読めなかった人は取り返せない。ボタンなど操作を載せることもできない
使い方
import type { ReactNode } from "react";
import { Button, ToastProvider, useToast } from "kaze-design-system";
// アプリのルートで 1 回だけ包む
export function Providers({ children }: { children: ReactNode }) {
return <ToastProvider>{children}</ToastProvider>;
}
// 配下のどのコンポーネントからでも呼べる
export function SaveButton() {
const { toast } = useToast();
return (
<Button
onClick={() =>
toast({ title: "保存しました", description: "変更は次回の読み込みから反映されます。", tone: "positive" })
}
>
保存
</Button>
);
}プロパティ
| 名前 | 型 | デフォルト | 説明 |
|---|---|---|---|
children必須 | ReactNode | なし | ToastProvider で包むアプリ全体 |
closeLabel | string | なし | Accessible label for the close button on each toast (default: "閉じる") |
containerLabel | string | なし | Accessible label for the toast container (default: "通知") |
ToastProvider | component | なし | アプリのルートに 1 つ置く。closeLabel / containerLabel で文言を変更可能 |
useToast() | { toast, dismiss } | なし | toast(options) は表示して id を返す。dismiss(id) で閉じる |
toast.title | string | なし | トーストのタイトル |
toast.description | string | なし | 本文(省略可) |
toast.tone | "default" | "positive" | "negative" | "warning" | "info" | "default" | 種類。negative / warning は role=alert で読み上げられる |
toast.duration | number | 4000 | 自動で閉じるまでのミリ秒。hover / focus 中は止まる |
型と必須かどうかはソースの型定義から自動で生成しています。表にない HTML 標準の属性(className や aria-* など)も、ルート要素にそのまま渡せます。
キーボード操作
| キー | 動作 |
|---|---|
| Tab | 表示中の Toast の閉じるボタンにフォーカスを移す(フォーカス中は自動で閉じるタイマーが止まる) |
| Enter / Space | 閉じるボタンを押して Toast を閉じる |
アクセシビリティ
- tone が negative / warning なら role="alert"(即時に割り込んで読み上げ)、それ以外は role="status"(現在の読み上げが終わってから)。緊急でない内容に negative / warning を使わない
- 自動で閉じるまでの既定は 4000ms。マウスホバーかフォーカスの間はタイマーが止まる(WCAG 2.2.1)。長い文は duration を延ばす
- Toast は Dialog や Drawer を開いている間も操作でき、背景の inert の対象外
- closeLabel と containerLabel で閉じるボタンと通知領域の名前を変えられる
文言
- title は結果を過去形か完了形で短く(「保存しました」「招待を送りました」)
- 失敗は理由と次の行動を description に書く。ただし重要な失敗は Alert に回す