Skip to content
fandhe-frontend
GitHub

Dialog

モーダルダイアログです。fandhe-frontend-headless-uidialog mod は Root / Trigger / Backdrop / Positioner / Content / Title / Description / CloseTrigger の 8 anatomy パーツと、DialogRole(Dialog/Alertdialog)で 切り替えられる rolearia-modalaria-haspopup="dialog" を提供します。 フォーカストラップ・Escape キーでの閉鎖・外側クリックでの閉鎖は JS ランタイム 側の責務としてスコープ外であり、本部品は SSR での属性出力のみを担います。

スタイル済みの表示例は Dialog を参照してください。

関連 API: fandhe-frontend-headless-ui API

Demo

枠線・余白は docs サイト側のデモ枠であり、fandhe-frontend-headless-ui 自体はスタイルを持ちません。

Features

  • Root / Trigger / Backdrop / Positioner / Content / Title / Description / CloseTrigger の 8 anatomy パーツと、Disclosure を埋め込んだ開閉状態機械 Dialog を提供する(dispatch: open/close/toggle)。
  • trigger は type="button" を固定付与し、aria-haspopup="dialog" を常に付与する。
  • content は DialogRole(Dialog/Alertdialog)で role を切り替えられ、modal 引数で aria-modal の値を制御できる。
  • backdrop/positioner は closed のとき hidden 存在属性を付与し、JS なしの SSR でも閉状態を表現する。
  • フォーカストラップ・Escape キー閉鎖・外側クリック閉鎖は JS ランタイム側の責務としてスコープ外(SSR/属性出力のみ)。

Anatomy

trigger
root
  backdrop
  positioner
    content
      title
      description
      close-trigger

API Reference

Arguments

NameTypeDefaultDescription
root: stateOpenStateClosedダイアログ全体の開閉状態(data-state へ反映)。
trigger: stateOpenStateClosedaria-expanded/data-state へ反映される開閉状態。
trigger: controlsOption<&str>Some のとき aria-controls で content と関連付ける。
backdrop: stateOpenStateClosedclosed のとき hidden 存在属性を付与する背面レイヤーの開閉状態。
positioner: stateOpenStateClosedclosed のとき hidden 存在属性を付与する配置ラッパーの開閉状態。
content: stateOpenStateClosed開閉状態(closed のとき hidden 存在属性を付与)。
content: role_kindDialogRolerole 属性の値(Dialog="dialog" / Alertdialog="alertdialog")。
content: modalboolaria-modal へ反映する値。
content: idsContentIdsContentIds::default()content 自身の id・aria-labelledby・aria-describedby をまとめた構造体(各フィールドが Some のときのみ対応する属性を出力)。
title: idOption<&str>content の labelledby と対で aria-labelledby 関連付けを成立させる。
description: idOption<&str>content の describedby と対で aria-describedby 関連付けを成立させる。

Data Attributes

PartAttributeObserved Values
backdropdata-stateopen
contentdata-stateopen
positionerdata-stateopen
rootdata-stateopen
triggerdata-stateopen

Examples

Alert dialog (non-modal)

DialogRole::Alertdialog + modal=false の組み合わせで、role="alertdialog" かつ aria-modal="false" を出力する例です。

Delete this item?

Accessibility

WAI-ARIA

AttributeDescription
aria-haspopup="dialog"trigger に固定付与。
aria-expandedtrigger に付与。開閉状態を反映する。
aria-controlstrigger に付与。controls が Some のとき content と関連付ける。
aria-hidden="true"backdrop に固定付与(装飾層のため読み上げ対象外)。
role="dialog" / role="alertdialog"content に付与。role_kind の値を反映する。
aria-modalcontent に付与。modal 引数の値を反映する。
aria-labelledby / aria-describedbycontent に付与。ids.labelledby/ids.describedby が Some のときのみ出力される。