コマンドCommandExperimental
検索入力、候補リスト、ショートカットを組み合わせて、コマンド選択 UI を構成します。
プレビュー
状態とバリエーション
グループとショートカット
候補を用途ごとに分け、頻繁に使う操作にはショートカットを併記します。
一致する結果がありません。
カレンダー
絵文字を検索
計算機
プロフィール⌘P
請求⌘B
環境設定⌘S
検索結果なし
一致する候補がない場合は CommandEmpty で明確に伝えます。
一致する結果がありません。
カレンダー
絵文字を検索
計算機
無効な候補
選べない候補は無効表示にし、必要な権限や条件を近くに示します。
ワークスペースを検索⌘F
管理設定権限が必要
プロパティ
Command
表は横にスクロールできます
| プロパティ | 型 | 初期値 | 説明 |
|---|---|---|---|
| filter | (value: string, search: string) => number | - | 検索結果の一致判定や並びを制御する関数。 |
| value | string | - | 選択中アイテムの制御値。 |
| onValueChange | (value: string) => void | - | 選択値が変わった時に呼ばれるハンドラ。 |
| loop | boolean | - | 末尾と先頭でキーボード選択を循環させるか。 |
CommandInput
表は横にスクロールできます
| プロパティ | 型 | 初期値 | 説明 |
|---|---|---|---|
| placeholder | string | - | 検索入力のプレースホルダー。 |
| value | string | - | 検索入力の制御値。 |
| onValueChange | (value: string) => void | - | 検索入力が変わった時に呼ばれるハンドラ。 |
| clearable | boolean | false | 入力値がある時にクリアボタンを表示するか。 |
| clearLabel | string | "Clear search" | クリアボタンの aria-label とツールチップ文言。 |
CommandItem
表は横にスクロールできます
| プロパティ | 型 | 初期値 | 説明 |
|---|---|---|---|
| value | string | - | 候補の一意な値。未指定時はテキストから推測されます。 |
| onSelect | (value: string) => void | - | 候補を選択した時に呼ばれるハンドラ。 |
| keywords | string[] | - | 表示名とは別に検索へ含めるキーワード。 |
| disabled | boolean | - | 候補を選択不可にするか。 |
| disabledReason | ReactNode | - | 無効な候補に表示する理由。ホバーやフォーカスでツールチップに表示します。 |
| disabledReasonLabel | string | - | 無効理由ツールチップのフォーカス対象に付ける aria-label。 |
使い方
import {
Command,
CommandEmpty,
CommandGroup,
CommandInput,
CommandItem,
CommandList,
CommandSeparator,
CommandShortcut,
} from "@gunjo/ui"
import { IconCalculator as Calculator, IconCalendar as Calendar, IconCreditCard as CreditCard, IconMoodSmile as Smile, IconSettings as Settings, IconUserCircle as UserRound } from "@tabler/icons-react"
export function CommandExample() {
return (
<Command className="w-full max-w-[720px] rounded-lg border shadow-md">
<CommandInput
placeholder="コマンドまたは検索語を入力..."
clearable
clearLabel="検索をクリア"
/>
<CommandList>
<CommandEmpty>一致する結果がありません。</CommandEmpty>
<CommandGroup heading="候補">
<CommandItem value="calendar" keywords={["カレンダー", "予定"]}>
<Calendar className="mr-2 h-4 w-4" />
<span>カレンダー</span>
</CommandItem>
<CommandItem value="emoji" keywords={["絵文字", "顔文字"]}>
<Smile className="mr-2 h-4 w-4" />
<span>絵文字を検索</span>
</CommandItem>
<CommandItem value="calculator" keywords={["計算機", "電卓"]}>
<Calculator className="mr-2 h-4 w-4" />
<span>計算機</span>
</CommandItem>
</CommandGroup>
<CommandSeparator />
<CommandGroup heading="設定">
<CommandItem value="profile" keywords={["プロフィール", "アカウント"]}>
<UserRound className="mr-2 h-4 w-4" />
<span>プロフィール</span>
<CommandShortcut>⌘P</CommandShortcut>
</CommandItem>
<CommandItem value="billing" keywords={["請求", "支払い"]}>
<CreditCard className="mr-2 h-4 w-4" />
<span>請求</span>
<CommandShortcut>⌘B</CommandShortcut>
</CommandItem>
<CommandItem value="settings" keywords={["環境設定", "設定"]}>
<Settings className="mr-2 h-4 w-4" />
<span>環境設定</span>
<CommandShortcut>⌘S</CommandShortcut>
</CommandItem>
</CommandGroup>
</CommandList>
</Command>
)
}