sashigane
コンポーネント

Alert

アラート。その場に残る通知で、読んだあとも消えない

出て消えるものは Toast です。 読み終わったあとも残っていてほしいものをここに置きます。

<Alert tone="danger" title="保存できませんでした">
  接続が切れています。もう一度お試しください。
</Alert>

トーンは意味を運びません

色の違いだけでは、何が起きたのかは伝わりません。 文言だけで意味が通るようにしてください。

{/* 色を外すと何も残りません */}
<Alert tone="danger" title="エラーが発生しました" />

{/* 文言だけで通ります */}
<Alert tone="danger" title="保存できませんでした">
  接続が切れています。もう一度お試しください。
</Alert>

トーンごとの既定のアイコンは持っていません。持つと文言が短くなります—— 色とアイコンがあるから説明は要らない、という方向へ倒れるためです。

アイコンを置きたいときは icon に渡してください。読み上げには出ません。

読み上げには既定で割り込みません

その場に最初からある知らせは、文書の順に読まれます。 読み上げの領域にすると、同じ文が二度読まれます。

後から出したときだけ live を渡してください。

{failed ? (
  <Alert tone="danger" title="送信に失敗しました" live>
    宛先のうち3件が見つかりませんでした。
  </Alert>
) : null}

danger だけが割り込みます(role="alert")。それ以外は読み終わるのを待ちます (role="status")。全部割り込ませると、読んでいる途中の文が毎回切られます。

見出しと本文の関連付けは Alert が作ります

title を渡すと、Alert が名前として結びつけます。本文は説明になります。

書かせる形にしていません。 忘れても見た目は変わらないので、 そのまま残ります。

見出しだけ、本文だけ、どちらでも置けます。

見出しは段落です。 h2 などにはしていません——何段目が正しいかは 置かれた場所で決まり、Alert はそれを知らないためです。固定すると、 置いた先の見出しの階層が飛びます。

見出しの階層に入れたいときは、title を渡さずに本文へ自分の見出しを書いてください。

閉じられるのは渡したときだけです

onDismiss を渡したときだけ閉じるボタンが出ます。 渡さなければ閉じられません——消してはいけない知らせがあるためです。

<Alert tone="info" title="9月10日に停止します" onDismiss={() => setShown(false)}>
  当日の午前2時から4時のあいだ、この機能は使えません。
</Alert>

閉じたあとどうするかは利用側が決めます。このコンポーネントは自分を消しません。

色は tone で決まります

中立は凹んだ面を宣言し、色付きは淡い塗りを使います。 どちらも背景と文字が対で決まるので、背景だけを塗る道はありません。

3つの状態

通常・空・エッジケースの3つは、どのコンポーネントにも必ずあります。

通常default.tsx

通常。その場に残る知らせ。

下書きは保存されています

この画面を閉じても、書きかけの内容は残ります。

保存できませんでした

接続が切れています。もう一度お試しください。

この操作は取り消せません

削除した予定は元に戻せません。

送信しました

受け取りの控えをメールで送りました。

9月10日に停止します

当日の午前2時から4時のあいだ、この機能は使えません。

空empty.tsx

空。見出しだけのとき、本文だけのとき。

まだ何も登録されていません

ここに書かれた内容は、あなたにだけ見えます。

エッジケースedge.tsx

エッジケース。閉じられるもの、長い文言、後から出すもの。

閉じられる知らせ

閉じるボタンは、閉じたときの処理を渡したときだけ出ます。

長い文言でも折り返す

住所の変更は、次の請求が確定するまで反映されません。すでに確定している請求は 古い住所のまま送られます。急ぎのときは、請求の担当へ直接お問い合わせください。

props

Prop

Type

型と説明はコンポーネントのソースから抽出しています。既定値は出していません——cva の defaultVariants は 署名に現れないので、表に出すと「引数のデフォルトが書かれているものだけ」になり、嘘になります。

On this page