ダイアログDialogBeta

背後を無効化したオーバーレイのウィンドウです。

プレビュー

状態とバリエーション

フォームを含む

画面遷移せずに短い編集を完了するための標準的な構成です。

通常操作の確認

取り消せる操作や軽い確認は Dialog、取り消せない操作は AlertDialog を使います。

要約付きの確認

長い本文をそのまま入れず、要点を短くまとめて確認しやすくします。

長いフォーム(スクロール)

DialogBody を直下に置くと、ダイアログが高さ制限され、ヘッダー/フッター固定・中央スクロールになります。

プロパティ

表は横にスクロールできます
プロパティ初期値説明
openboolean-開閉状態を外部で制御します。
onOpenChange(open: boolean) => void-開閉状態が変わった時に呼び出されます。
showCloseButtonbooleantrue右上の閉じるボタンを表示するかを制御します。
portalContainerHTMLElement | null-プレビュー枠や疑似ブラウザ内に閉じ込めたい場合のポータル先です。
DialogBodyReact.HTMLAttributes<HTMLDivElement>-長いフォーム用のスクロール領域。DialogContent の直下に置くと Content が高さ制限つき flex 列になり、ヘッダー/フッター固定・中央スクロールになります。(#293)

使い方

import {
  Button,
  Dialog,
  DialogClose,
  DialogContent,
  DialogDescription,
  DialogFooter,
  DialogHeader,
  DialogTitle,
  DialogTrigger,
  Input,
  Label,
  Textarea,
} from "@gunjo/ui";

export function EditProfileDialog() {
  return (
    <Dialog>
      <DialogTrigger asChild>
        <Button variant="outline">プロフィールを編集</Button>
      </DialogTrigger>
      <DialogContent
        className="sm:max-w-[440px]"
        onOpenAutoFocus={(event) => event.preventDefault()}
      >
        <DialogHeader>
          <DialogTitle>プロフィールを編集</DialogTitle>
          <DialogDescription>
            表示名とハンドル名を更新します。保存するまで変更は反映されません。
          </DialogDescription>
        </DialogHeader>
        <div className="grid gap-4 py-2">
          <div className="grid gap-2 sm:grid-cols-[96px_minmax(0,1fr)] sm:items-center">
            <Label htmlFor="display-name" className="sm:text-right">表示名</Label>
            <Input id="display-name" className="w-full" defaultValue="青井 はな" />
          </div>
          <div className="grid gap-2 sm:grid-cols-[96px_minmax(0,1fr)] sm:items-center">
            <Label htmlFor="handle" className="sm:text-right">ハンドル</Label>
            <Input id="handle" className="w-full" defaultValue="@aoi" />
          </div>
          <div className="grid gap-2 sm:grid-cols-[96px_minmax(0,1fr)]">
            <Label htmlFor="bio" className="pt-2 sm:text-right">メモ</Label>
            <Textarea id="bio" className="w-full" defaultValue="デザインシステムを管理しています。" />
          </div>
        </div>
        <DialogFooter>
          <DialogClose asChild>
            <Button variant="outline">キャンセル</Button>
          </DialogClose>
          <Button>保存</Button>
        </DialogFooter>
      </DialogContent>
    </Dialog>
  );
}

使用コンポーネント

設計の判断(UIXHERO)

「いつ・なぜ使うか」の判断は、姉妹サイト UIXHERO の記事で解説しています。