Skip to content

Dropdown

概要

ドロップダウンメニューコンポーネント。
ItemCheckboxItemRadioItemGroup / RadioItem を組み合わせて、柔軟なメニュー構成が可能。

デモ

Context Menu(右クリックメニュー)

Dropdown.ContextTrigger でラップした領域を右クリックすると、カーソル位置にメニューが表示されます。
ブラウザのデフォルトコンテキストメニューは抑制されます。

positioning="right" を指定した内側の Dropdown.Root をメニューアイテムとして配置することで、サブメニューを実現できます。

Mixed Layout(複合レイアウト)

ItemGroupCheckboxItemRadioItemGroupSeparator を組み合わせた複合レイアウトのデモです。

サブコンポーネント

パーツ説明
Dropdown.Rootルート。開閉状態・サイズ・positioning を管理
Dropdown.Trigger開閉トリガー(ボタン)
Dropdown.Positionerフローティング配置コンテナ
Dropdown.Contentメニュー本体
Dropdown.Arrowポップオーバー矢印
Dropdown.Item通常アイテム
Dropdown.ItemGroupアイテムグループ(ラベル付き)
Dropdown.Separator区切り線
Dropdown.CheckboxItemチェックボックス付きアイテム
Dropdown.RadioItemGroupラジオグループ
Dropdown.RadioItemラジオアイテム
Propデフォルト説明
openboolean制御開閉
defaultOpenbooleanfalseデフォルト開閉
onOpenChange(details) => void開閉コールバック
onSelect(details) => voidアイテム選択コールバック
size"sm" | "md" | "lg""md"サイズ
positioning"start" | "end""start"配置方向
classstring追加クラス
Prop説明
valuestringアイテム値(onSelect で受け取る)
disabledboolean無効化
destructiveboolean危険操作スタイル
closeOnSelectboolean選択後に閉じるか
Prop説明
valuestringアイテム値
checkedbooleanチェック状態
onCheckedChange(checked: boolean) => void変更コールバック
disabledboolean無効化

RadioItemGroup:

Prop説明
valuestring現在の選択値
onValueChange(value: string) => void変更コールバック

RadioItem:

Prop説明
valuestringアイテム値
disabledboolean無効化

使用例

基本

tsx
import { Dropdown } from "mithril-ui-kit";

<Dropdown.Root onSelect={(d) => console.log(d.value)}>
  <Dropdown.Trigger>Actions ▾</Dropdown.Trigger>
  <Dropdown.Positioner>
    <Dropdown.Content>
      <Dropdown.Item value="edit">Edit</Dropdown.Item>
      <Dropdown.Item value="duplicate">Duplicate</Dropdown.Item>
      <Dropdown.Separator />
      <Dropdown.Item value="delete" destructive>Delete</Dropdown.Item>
    </Dropdown.Content>
  </Dropdown.Positioner>
</Dropdown.Root>

ItemGroup

tsx
<Dropdown.Root>
  <Dropdown.Trigger>Menu ▾</Dropdown.Trigger>
  <Dropdown.Positioner>
    <Dropdown.Content>
      <Dropdown.ItemGroup label="File">
        <Dropdown.Item value="new">New</Dropdown.Item>
        <Dropdown.Item value="open">Open</Dropdown.Item>
      </Dropdown.ItemGroup>
      <Dropdown.Separator />
      <Dropdown.ItemGroup label="Edit">
        <Dropdown.Item value="undo">Undo</Dropdown.Item>
        <Dropdown.Item value="redo">Redo</Dropdown.Item>
      </Dropdown.ItemGroup>
    </Dropdown.Content>
  </Dropdown.Positioner>
</Dropdown.Root>

CheckboxItem

tsx
<Dropdown.Root>
  <Dropdown.Trigger>Format ▾</Dropdown.Trigger>
  <Dropdown.Positioner>
    <Dropdown.Content>
      <Dropdown.CheckboxItem value="bold" checked={boldChecked}
        onCheckedChange={(c) => { boldChecked = c; }}>
        Bold
      </Dropdown.CheckboxItem>
    </Dropdown.Content>
  </Dropdown.Positioner>
</Dropdown.Root>

RadioItem

tsx
<Dropdown.Root>
  <Dropdown.Trigger>Font Size ▾</Dropdown.Trigger>
  <Dropdown.Positioner>
    <Dropdown.Content>
      <Dropdown.RadioItemGroup value={fontSize}
        onValueChange={(v) => { fontSize = v; }}>
        <Dropdown.RadioItem value="small">Small</Dropdown.RadioItem>
        <Dropdown.RadioItem value="medium">Medium</Dropdown.RadioItem>
        <Dropdown.RadioItem value="large">Large</Dropdown.RadioItem>
      </Dropdown.RadioItemGroup>
    </Dropdown.Content>
  </Dropdown.Positioner>
</Dropdown.Root>

Mithril UI Kit Documentation