メインコンテンツへスキップ

Dropdown ドロップダウンメニュー

アクションメニューをトリガーの下に折りたたみ、ホバーまたはクリックで展開します。メニューは role="menu" セマンティクスで、 完全なキーボードナビゲーション(方向キー / Home / End / Enter / Esc)と roving tabindex をサポートします。

基本的な使い方​

ホバー / クリックトリガーと命令的使い方
import { LhButton, LhDropdown, LhDropdownItem } from '@lh-ui/react'

export default function Demo() {
return (
<LhDropdown
onCommand={(command) => console.log(command)}
dropdown={
<>
<LhDropdownItem command="new">新規作成</LhDropdownItem>
<LhDropdownItem command="delete" disabled>
削除
</LhDropdownItem>
</>
}
>
<LhButton>展開</LhButton>
</LhDropdown>
)
}
プロパティ説明型使用可能な値デフォルト値
childrenトリガーノードReactNode——
dropdownメニュー内容(LhDropdownItem のリスト。plus の #dropdown スロットに対応)ReactNode——
triggerトリガー方式'hover' | 'click' | 'contextmenu'—'hover'
placement表示位置LhDropdownPlacementtop / bottom(-start / -end を含む)など'bottom-start'
disabled無効boolean—false
visible制御された表示状態boolean——
defaultVisible非制御のデフォルト表示boolean—false
hideOnClickメニュー項目クリック後に自動的に閉じるかどうかboolean—true
maxHeightメニューの最大高さ(超えるとスクロール)string | number——
popperClassメニューのカスタムクラス名string——
themeVarsコンポーネントレベルのテーマ変数Record<string, string>——
sxクイックレイアウトプロパティ(トリガーに作用)SxProps——
イベント説明コールバックシグネチャVue 対応
onCommandメニュー項目がクリックされ、その項目の command を送出(command: string | number) => voidcommand
onVisibleChange表示状態の変化(visible: boolean) => voidupdate:visible
onClickOutsideメニューの外側をクリック(内部では同時に閉じる)() => voidclick-outside
プロパティ説明型使用可能な値デフォルト値
childrenメニュー項目の内容ReactNode——
commandコマンド識別子。onCommand と一緒に送出string | number——
disabled無効にするかどうか(クリックに応答せず、キーボードナビゲーションにも参加しない)boolean—false
divided区切り線を表示するかどうかboolean—false
イベント説明コールバックシグネチャVue 対応
onClickメニュー項目のクリック(onCommand と共存可能)() => void—

ref​

forwardRef<LhDropdownInstance>。LhDropdownInstance は show() / hide() / toggle() / isVisible を公開します。

キーボードナビゲーション(APG menu pattern)

メニューを開くとフォーカスは最初の有効項目に置かれます。ArrowUp / ArrowDown で循環移動し無効項目をスキップ、 Home / End で先頭 / 末尾にジャンプ、Enter / Space で現在項目をアクティブ化、Esc で閉じてフォーカスをトリガーに返します。 アンカー項目のみ tabIndex={0}、それ以外は -1 です(roving tabindex)。

スロット → prop

plus は #dropdown スロットでメニューを担いますが、React 側では同名の dropdown prop に変更しました。 contextmenu トリガーはブラウザのデフォルト右クリックメニューを抑止します。

スタイル​

import '@lh-ui/react/style/dropdown'