kaze風
Drawer
画面の端から出るモーダルパネル。Dialog と同じ挙動(フォーカストラップ・背景の inert 化・スクロールロック・Escape・背景クリック・閉じアニメ・フォーカス復帰)で、フィルターや詳細表示のように一覧を見たまま操作したい場面に向きます。モバイル幅では side="bottom"(ボトムシート)を推奨します。
プレビュー
使いどころ
使う場面
- 一覧や表を見ながら、行の詳細を確認・編集したいとき。背景の文脈を残せる
- 絞り込みや設定など、画面の横から出す補助的なパネル
- side は "right"(既定)、"left"、"bottom"。狭い画面では "bottom"。size は sm / md / lg
使わない場面
- 短い確認や、はい・いいえの判断。Dialog を使う
- 結果を伝えるだけ。Toast を使う
- 画面の主な内容。常に見せたいなら Sidebar か通常のレイアウトに置く
- ツールチップ程度の補足。Popover か HelpButton を使う
使い方
import { Button, Drawer, DrawerBody, DrawerFooter, DrawerHeader, DrawerTitle } from "kaze-design-system";
<Drawer open={open} onOpenChange={setOpen} side="right" size="md">
<DrawerHeader>
<DrawerTitle>絞り込み</DrawerTitle>
</DrawerHeader>
<DrawerBody>
<p>条件を選んでください。</p>
</DrawerBody>
<DrawerFooter>
<Button variant="outline" onClick={() => setOpen(false)}>
キャンセル
</Button>
<Button onClick={() => setOpen(false)}>適用</Button>
</DrawerFooter>
</Drawer>プロパティ
| 名前 | 型 | デフォルト | 説明 |
|---|---|---|---|
open必須 | boolean | なし | 表示状態 |
onOpenChange | (open: boolean) => void | なし | Escape・背景クリック・閉じる操作で false が渡る。open を false にするのは呼び出し側 |
side | "left" | "right" | "bottom" | "right" | パネルが出てくる端。モバイル幅では bottom(ボトムシート)を推奨 |
size | "sm" | "md" | "lg" | "md" | left / right では幅(20rem / 28rem / 40rem)、bottom では高さの上限(40% / 60% / 90%) |
aria-label | string | なし | DrawerTitle を置かない場合の名前。指定すると aria-labelledby は付かない |
DrawerHeader / DrawerTitle / DrawerBody / DrawerFooter | HTMLAttributes | なし | DrawerTitle は h2 で、Drawer の aria-labelledby に自動で接続される。DrawerBody だけがスクロールする |
型と必須かどうかはソースの型定義から自動で生成しています。表にない HTML 標準の属性(className や aria-* など)も、ルート要素にそのまま渡せます。
キーボード操作
| キー | 動作 |
|---|---|
| Tab / Shift + Tab | Drawer 内の操作に順にフォーカスを移す。端では反対側に回り、外には出ない |
| Escape | onOpenChange(false) を呼ぶ。重なっているときは最前面だけ閉じる |
アクセシビリティ
- role="dialog" と aria-modal="true" が付く。モーダルなので、背景は inert になり、スクロールも止まる
- 名前は DrawerTitle から付く。タイトルを置かない場合は aria-label を渡す
- 開くと最初のフォーカスできる要素に移り、閉じると開いた要素に戻る
- 背景クリックでも閉じる。open を false にするのは呼び出し側
文言
- DrawerTitle は対象と目的が分かる名詞にする(「注文の詳細」「絞り込み」)
- フッターのボタンは Dialog と同じく動詞で書く(「保存する」「閉じる」)