フィードバック · 準拠済み
Snackbar
SnackbarSnackbarActionSnackbarProps
import { useState } from 'react'
import { Button, Snackbar, Surface, Text } from '@language-lit/material3-expressive'
export function SnackbarExample() {
const [savedOpen, setSavedOpen] = useState(false)
const [removedOpen, setRemovedOpen] = useState(false)
const [sentOpen, setSentOpen] = useState(false)
return (
<Surface
as="section"
aria-labelledby="snackbar-example-title"
color="surface-container-low"
shape="extra-large"
className="snackbar-example"
>
<Text as="h2" id="snackbar-example-title" variant="titleLarge" emphasis="emphasized">
Snackbar
</Text>
<Text as="p" variant="bodyMedium">
Transient status feedback that auto-dismisses unless it carries an
action, and pauses its countdown while hovered or focused.
</Text>
<div className="snackbar-example__row">
<Button variant="outlined" onClick={() => setSavedOpen(true)}>
Show short snackbar
</Button>
<Button variant="outlined" onClick={() => setRemovedOpen(true)}>
Show snackbar with action
</Button>
<Button variant="outlined" onClick={() => setSentOpen(true)}>
Show snackbar with action and dismiss
</Button>
</div>
<Snackbar message="Saved" open={savedOpen} onOpenChange={setSavedOpen} dismissible />
<Snackbar
message="Conversation removed"
action={{ label: 'Undo', onClick: () => setRemovedOpen(false) }}
open={removedOpen}
onOpenChange={setRemovedOpen}
/>
<Snackbar
message="Message sent"
action={{ label: 'Undo', onClick: () => setSentOpen(false) }}
dismissible
open={sentOpen}
onOpenChange={setSentOpen}
/>
</Surface>
)
}Snackbarは画面下部に固定される、一時的なステータスメッセージをポータル表示します。キューではなく単一の制御可能なコンポーネントです。複数のメッセージをキューに入れる場合は、利用側の状態で管理します。
import { useState } from 'react'
import { Snackbar } from '@language-lit/material3-expressive'
import '@language-lit/material3-expressive/styles.css'
const [open, setOpen] = useState(false)
<Snackbar
message="Conversation removed"
action={{ label: 'Undo', onClick: handleUndo }}
open={open}
onOpenChange={setOpen}
/>仕様
open/defaultOpen/onOpenChangeは、ほかの状態を持つコンポーネントと同じ制御/非制御の形式です。自動閉じタイマー、アクション、閉じるボタンによってSnackbarが閉じるたびにonOpenChangeが呼び出されます。messageは必須の本文です。action?: { label, onClick }を指定するとインラインのテキストボタンを1つ表示します。押すとonClickを呼び出してから閉じます。dismissible(既定値false)を指定すると閉じるアイコンボタンを表示します。dismissLabel(既定値'Dismiss')はそのアクセシブルネームです。durationには'short'(4000ms)、'long'(10000ms)、'indefinite'、またはミリ秒数を指定できます。既定値はアクションがない場合'short'、ある場合'indefinite'で、固定されたMaterialソースの既定の決定方法に合わせています。
動作
Snackbarにポインターが乗っている間、またはフォーカスがある間は自動閉じのカウントダウンを一時停止し、離れると残り時間から再開します。長いメッセージを読んだり、アクションを選んだりしている最中に消えることはありません。role="status"でフォーカスを奪わずにメッセージを穏やかに通知します。
トークンと境界
色、形状、モーションの値はすべて1つの--m3e-comp-snackbar-*登録にまとめられています。テーマの上書きはMaterial3Providerのスコープ内で適用されます。Snackbarは実行時スタイルを注入せず、Next.js、Vite、ルーター、アニメーションライブラリ、非公開のアプリケーションコードをインポートしません。