Menu
トリガーのクリックで開くアクション項目リスト(ドロップダウンメニュー)です。fandhe-frontend-headless-ui の menu mod が構造・アクセシビリティ(WAI-ARIA・キーボード操作)・表示状態(data-*)のみを提供する unstyled 部品であり、Themes 版と異なりスタイル(CSS)は一切持ちません。CheckboxItem/RadioItemGroup による checked 状態やサブメニューの入れ子構成にも対応します。
スタイル済みの表示例は Menu を参照してください。
関連 API: fandhe-frontend-headless-ui API
Demo
枠線・余白は docs サイト側のデモ枠であり、fandhe-frontend-headless-ui 自体はスタイルを持ちません。
Features
- トリガー起点のオーバーレイ + アクション項目リスト。Root / Trigger / Indicator / Positioner / Content / Arrow / ArrowTip / Item / ItemGroup / ItemGroupLabel / Separator / TriggerItem / ContextTrigger / CheckboxItem / RadioItemGroup / RadioItem の 16 anatomy パーツを持つ(menu.rs モジュール doc)。
- サブメニューは親 Menu インスタンスの content 内に子 Menu インスタンス由来の TriggerItem/Positioner/Content を入れ子で配置して表現し、親子双方に aria-haspopup="menu" を付与する(「haspopup 連鎖」でネストを支援技術へ伝える)。
- CheckboxItem/RadioItemGroup は Menu の開閉状態とは独立した checked 状態機械(MenuCheckboxItem/MenuRadioItemGroup、Checkable/SingleSelect を埋め込む)を持つ。
- ContextTrigger は右クリック起点のトリガーであり、ARIA 属性を一切付与しない(右クリックは SSR/no-JS では成立せず、ARIA を付けると JS なしで実現できない操作性を誤って約束するため)。
- 開閉は Disclosure を埋め込んだ状態機械 Menu が管理する(dispatch は "open"/"close"/"toggle")。
Anatomy
root
trigger
indicator
positioner
content
arrow
arrow-tip
item-group
item-group-label
item
separatorAPI Reference
Arguments
| Name | Type | Default | Description |
|---|---|---|---|
| trigger(controls) | Option<&str> | Some のとき aria-controls で content と関連付ける。 | |
| item(value) | &str | data-value として出力される項目識別値。 | |
| item(disabled) | bool | true のとき aria-disabled="true"+data-disabled を付与する(div ベースのため native disabled は持たない)。 | |
| item(highlighted) | bool | キーボードナビゲーションのフォーカス位置。true のとき data-highlighted を付与する。 | |
| checkbox_item(checked) | bool | role="menuitemcheckbox" の aria-checked(true/false のみ、indeterminate 非対応)。 |
Data Attributes
| Part | Attribute | Observed Values |
|---|---|---|
| content | data-state | open |
| indicator | data-state | open |
| item | data-highlighted | |
| item | data-value | delete, rename |
| positioner | data-state | open |
| root | data-state | open |
| trigger | data-state | open |
Examples
ItemGroup を使わない単純な Item 列
ItemGroup/Separator を省き、Item のみを並べた最小構成です。
Accessibility
WAI-ARIA
| Attribute | Description |
|---|---|
| aria-haspopup="menu" | trigger(およびサブメニューの trigger-item)に固定付与。 |
| aria-expanded / aria-controls | trigger に付与。開閉状態と対応する content の id を表す。 |
| role="menu" | content に固定付与。aria-labelledby は labelledby が Some のときのみ出力される。 |
| role="menuitem" / role="menuitemcheckbox" / role="menuitemradio" | item/checkbox-item/radio-item にそれぞれ固定付与。 |
| role="group" | item-group/radio-item-group に固定付与。labelledby が Some のときのみ aria-labelledby が付与される。 |