ModelessDialog

モードレスなダイアログです。ダイアログを表示したまま、ダイアログの裏側の画面も操作できます。

基本的に、ダイアログと裏側の画面を同時並行で閲覧・操作する場合に使います。

使用上の注意

ダイアログを乱用しない

ModelessDialogは、ユーザーが直前まで見ていた画面の一部を覆い隠します。

ダイアログが表示されることによってユーザーの操作を妨げてしまわないか、ダイアログとして表示する・操作させるべき内容なのか、慎重にユースケースを定義し、使用を検討してください。

レイアウト

基準サイズ

ダイアログの横幅サイズの基準値は以下のとおりです。
サイズに意図がない場合は、下記の値から想定に近い値を選択してください。

デスクトップ、タブレット(TABLET

サイズ補足説明
XS480px(30rem)幅の最小値として使います。
S560px(35rem)
M640px(40rem)
L880px(55rem)
XL1120px(70rem)
MAXcalc(100vw - 16px)幅の最大値として使います。

スマートフォン(SP

スマートフォンは表示領域が狭いため、サイズの最大値/最小値は同じとします。

サイズ補足説明
標準calc(100vw - 16px)幅の最大値/最小値として使います。

表示位置

top bottom left right propsで表示位置を指定できます。指定しない場合、画面の天地左右中央に表示されます。

  • ModelessDialogの場合は、ダイアログを開く操作をした箇所の付近に表示します。
    • モーダルなダイアログと違って、ダイアログの裏側の画面がスクリム(幕)で隠されないため、開く操作をした箇所から遠い位置に表示すると、ユーザーがダイアログを見つけにくいためです。

アクセシビリティ

キーボード操作

ESCキーを押すことでダイアログを閉じることができます。

構成

ModelessDialogは以下の要素で構成されます。

  1. ヘッダーエリア
  2. 本文
  3. フッターエリア(任意)

ModelessDialogの構成

1. ヘッダーエリア

ヘッダーエリアの左端にはダイアログのタイトルが、右側にはダイアログを閉じるボタンが配置されます。

  • ダイアログのタイトルは、表示する情報を簡潔に表現するものをつけます。
  • ヘッダーエリアをドラッグしてダイアログの位置を移動できます。

ModelessDialogのヘッダーエリアをドラッグして移動している様子

2. 本文

ユーザーに提示したい情報を表示します。

3. フッターエリア(任意)

必要に応じてアクションボタンやリンクなどを配置します。

Props

header必須
string number false true ReactElement<any, string | JSXElementConstructor<any>> Iterable<ReactNode> ReactPortal

ダイアログのヘッダ部分の内容

footer
string number false true ReactElement<any, string | JSXElementConstructor<any>> Iterable<ReactNode> ReactPortal

ダイアログのフッタ部分の内容

isOpen必須
false true

ダイアログが開かれているかどうかの真偽値

onClickClose
(e: MouseEvent<HTMLButtonElement, MouseEvent>) => void

閉じるボタンを押下したときのハンドラ

onPressEscape
() => void

ダイアログが開いている状態で Escape キーを押下したときのハンドラ

width
string number

ダイアログの幅

height
string number

ダイアログの高さ

top
string number

ダイアログを開いたときの初期 top 位置

left
string number

ダイアログを開いたときの初期 left 位置

right
string number

ダイアログを開いたときの初期 right 位置

bottom
string number

ダイアログを開いたときの初期 bottom 位置

portalParent
HTMLElement RefObject<HTMLElement>

ポータルの container となる DOM 要素を追加する親要素

decorators
DecoratorsType<"closeButtonIconAlt"> & { dialogHandlerAriaLabel?: (txt: string) => string; dialogHandlerAriaValuetext?: (txt: string, data: DOMRect) => string; }

コンポーネント内の文言を変更するための関数を設定

contentBgColor
"GREY_5" "GREY_6" "GREY_7" "GREY_9" "GREY_20" "WHITE" "BACKGROUND" "COLUMN" "BASE_GREY" "OVER_BACKGROUND" "HEAD" "BORDER" "ACTION_BACKGROUND"
contentPadding
0 0.25 0.5 0.75 1 1.25 1.5 2 2.5 3 3.5 4 8 -0.25 -0.5 -0.75 -1 -1.25 -1.5 -2 -2.5 -3 -3.5 -4 -8 "XXS" "XS" "S" "M" "L" "XL" "XXL" "X3S" "X3L" { block?: Gap; inline?: Gap; }
className
string
ref
(instance: HTMLDivElement) => void RefObject<HTMLDivElement>
resizable
false true