Alert
ステータスやフィードバックを伝えるインラインメッセージです。ニュートラルなサーフェス、色付きのアイコン、滑らかに折りたたまれる閉じる操作を備えています。
pnpm dlx shadcn@latest add https://hextaui.com/r/alert.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cn次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/alert.tsx components/ui/button.tsx lib/motion.ts インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
バリアント
variant はアイコンにのみ色を付けるため、面は中立のままで、主張しすぎずに状態がひと目で分かります。
Soft
appearance="soft" は枠線をなくし、面全体を variant の色で淡く染めます。
部分的なコンテンツ
タイトルのみ、説明のみ、アイコンなしのいずれも、追加のクラスなしで揃います。グリッドが各パーツをそれぞれの列に配置します。
アクション
ボタンを <AlertAction /> に入れます。タイトルが折り返しても、ボタンはタイトルの 1 行目に揃います。
閉じられる alert
<AlertClose /> を追加すると、ユーザーが閉じられるようになります。alert はなめらかに折りたたまれ、下のコンテンツが上にスライドします。キーボードで閉じると、フォーカスは次のコントロール(ここでは「Reset」)に移ります。
制御
open と onOpenChange を渡すと、独自の state で制御できます。表示と非表示の両方がアニメーションします。
閉じる操作のキャンセル
閉じるボタンの onClick で event.preventDefault() を呼ぶと、alert を開いたままにできます。たとえば、先に確認を求めたい場合に使えます。
読み込み後に挿入
ページの読み込み後にマウントされた alert はフェードとスライドで表示され、スクリーンリーダーに通知されます。サーバーの HTML にすでに含まれている alert は、モーションなしで表示されます。
リッチなコンテンツ
説明内のインラインアイコンやリンクは、それぞれのスタイルを保ちます。タイトルに見出しレベルを付けるには render を使います。
右から左
アイコン、コンテンツ、閉じるボタンは、読む方向に合わせて反転します。
| キー | アクション |
|---|---|
| Tab | フォーカスを alert 内のリンク、アクション、閉じるボタンに移動します。 |
| EnterSpace | フォーカス中の閉じるボタンを実行します。alert が折りたたまれると、フォーカスは次のフォーカス可能な要素に移り、後続がない場合は前の要素に移ります。 |
destructiveとwarningの alert にはrole="alert"が付き、すぐに通知されます。それ以外の variant にはrole="status"が付き、間を待って通知されます。- 閉じるボタンには「Dismiss」というラベルが付いています。翻訳するには
aria-labelを渡します。 - フォーカスのある alert が閉じても、フォーカスが失われることはありません。
- モーションの低減が有効な場合、alert は即座に表示・非表示になります。
各パーツは、レンダリングする要素の属性をすべて受け付けます。variant は alertVariants としてエクスポートされており、他の要素に同じスタイルを適用できます。
| プロパティ | 型 | デフォルト |
|---|---|---|
variantアイコンに色を付けます。destructive と warning は assertive で通知されます。 | "default" | "destructive" | "success" | "info" | "warning" | "default" |
appearance | "outline" | "soft" | "outline" |
open | boolean | – |
defaultOpen | boolean | true |
onOpenChange閉じるボタンが押されたときに呼ばれます。 | (open: boolean) => void | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| 属性 | 説明 |
|---|---|
data-slot="alert" | CSS で alert を指定します。 |
data-variant | 現在のバリアント。 |
data-appearance | 現在の外観。 |
data-ending-style | 閉じた後に alert が折りたたまれている間、付与されます。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| 属性 | 説明 |
|---|---|
data-slot="alert-title" | CSS でタイトルを指定します。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| 属性 | 説明 |
|---|---|
data-slot="alert-description" | CSS で説明を指定します。内部のリンクには自動で下線が付きます。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| 属性 | 説明 |
|---|---|
data-slot="alert-action" | CSS でアクション領域を指定します。 |
最も近い alert を閉じる ghost の <Button />。Button のすべての props を受け付け、<Alert /> の内側で使う必要があります。
| プロパティ | 型 | デフォルト |
|---|---|---|
aria-label | string | "Dismiss" |
children | ReactNode | <IconX /> |
onClickevent.preventDefault() を呼ぶと、alert を開いたままにします。 | (event: MouseEvent) => void | – |
| 属性 | 説明 |
|---|---|
data-slot="alert-close" | CSS で閉じるボタンを指定します。 |
- Buttonすべてのバリアントとサイズのボタンです。読み込み、成功、エラーのフローを内蔵し、高速なリクエストではスピナーを省略します。
- Motionすべてのコンポーネントがアニメーションに使うイージングカーブ、継続時間、モーション軽減のチェックと、サイズのモーフィングやスライドするハイライト用のフックです。
- Emptyまだ表示するものがない画面のためのプレースホルダーです。アイコン、メッセージ、次の操作を備えています。
- Progressタスクの進み具合を示すバーまたはリングです。更新のたびに滑らかに動き、全体量が不明なときはスライドします。
- Skeleton150ms待ってから表示され、包んだコンテンツと同じサイズになり、何も動かさずにコンテンツをフェードインさせるプレースホルダーです。
- SpinnerApple風の目盛りまたは呼吸するリングで表示する読み込みインジケーターです。表示までの待機と、ちらつかない最短表示時間を設定できます。
使用しているブロック
Alert の上に構築されるブロック。
- BillingCursor、Claude、Vercelのスタイルによる、AIプロダクト向けのプランと使用量です。モデルごとに分かれ、サイクル終了時を予測してクレジット切れの前に警告する使用量メーター、ドラッグで確認できる日別チャート、メーター上でプレビューできるアラートつきの支出上限、正確な日割り計算によるプラン変更、実際のバリデーションを備えたカードフォーム、PDFでダウンロードできる請求書を備えています。
- MarkdownAIの回答向けに作られたMarkdownです。滑らかにストリーミングされ、入力途中の構文を表示しません。リンクできる見出し、MarkdownやCSVとしてコピーできるテーブル、GitHubのコールアウト、タスクリスト、脚注、画像、インラインの引用、完全なコードブロックに対応します。