Kbd
ショートカット用のキーキャップです。プラットフォームごとに正しい記号を表示し、正しく読み上げ、実際のキーと同じように押し込まれます。
Press Command K to search, or hold Shift and watch the keys.
pnpm dlx shadcn@latest add https://hextaui.com/r/kbd.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add @base-ui/react class-variance-authority cn次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/kbd.tsx lib/hotkey.ts インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
ショートカットは keys で一度書けば、Mac では ⌘K、Windows と Linux では Ctrl K と表示されます。完全に制御したい場合は、子要素として任意のコンテンツを渡せます。
バリアント
keycap は細い縁と1pxの立体感があり、物理キーのように見えます。flat はメニューのような密な場所向けの控えめな塗りです。
サイズ
sm は小さなテキスト内、default は本文の隣、lg は見出しや単独で使います。
ショートカット
<KbdGroup /> はキーの組み合わせをキーごとのキャップに分割します。スペースでシーケンスが始まり、separator でつながれます。keys を指定した <Kbd /> は、組み合わせ全体を1つのキャップに収めます。
ライブキー
listen を指定すると、実際のキーが押されている間キャップが押し込まれます。監視するだけなので、入力をブロックしたり、遅らせたり、変更したりすることはありません。文字は物理キーで照合されるため、Option や Shift と混同されません。
ボタン内
ボタンの中では、キャップはボタンのテキストから色を取るため、どのバリアントにもなじみます。
アイコンとアクション
キー名のないアクションには、キャップにアイコンを入れ、視覚的に非表示のラベルを付けます。
右から左
ショートカットは、キーボードに印字されているのと同じように、右から左に書くテキストの中でも左から右の順序を保ちます。
- ⌘ や ⇧ などの記号はスクリーンリーダーから隠され、名前に置き換えられるため、
keys="mod+shift+p"は「Command Shift P」と読み上げられます。 - キャップは
<kbd>として描画され、グループはそれらを別の<kbd>でネストします。これは HTML でキーの組み合わせを表す方法です。 - ショートカットを表示しても、割り当てられるわけではありません。キーハンドラーは自分で登録してください。
- 押下エフェクトは装飾で、視差効果の軽減が有効な場合は動きの代わりに色の変化になります。ハイドレーション前は、どのプラットフォームでも Apple の記号が表示されます。
どちらのパーツも <kbd> を描画し、render とその属性を受け付けます。
| プロパティ | 型 | デフォルト |
|---|---|---|
keys"mod+shift+p" のように + でつないだキー。mod は Apple デバイスでは ⌘、それ以外では Ctrl です。alt、enter、escape、up、space などの名前は記号や短い語になり、スクリーンリーダー向けの読み上げ名も付きます。 | string | – |
variant未設定の場合は KbdGroup から継承されます。 | "keycap" | "flat" | "keycap" |
size未設定の場合は KbdGroup から継承されます。 | "sm" | "default" | "lg" | "default" |
listen実際のキーが押されている間、キャップを押し込みます。keys でも、子要素としての単純なキー名でも動作します。 | boolean | false |
render | ReactElement | (props, state) => ReactElement | <kbd> |
| 属性 | 説明 |
|---|---|
data-slot="kbd" | CSS でキャップを指定します。 |
data-variant | 現在のバリアント。 |
data-size | 現在のサイズ。 |
data-pressed | 実際のキーが押されている間付きます。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
keys"mod+shift+p" のように + でつないだキー。mod は Apple デバイスでは ⌘、それ以外では Ctrl です。alt、enter、escape、up、space などの名前は記号や短い語になり、スクリーンリーダー向けの読み上げ名も付きます。スペースはシーケンスの各ステップを区切ります。 | string | – |
separatorシーケンスのステップの間に表示されます。 | ReactNode | "then" |
variant内側のすべてのキャップに渡されます。 | "keycap" | "flat" | – |
size内側のすべてのキャップに渡されます。 | "sm" | "default" | "lg" | – |
listen内側のすべてのキャップに渡されます。 | boolean | – |
render | ReactElement | (props, state) => ReactElement | <kbd> |
| 属性 | 説明 |
|---|---|
data-slot="kbd-group" | CSSでグループを指定します。 |
data-slot="kbd-separator" | シーケンスのステップ間のテキスト。 |
- Hotkeyキーボードショートカットの解析、ラベル付け、読み上げ、一致判定を行います。Appleプラットフォームでは⌘、それ以外ではCtrlを使います。
- useHeldKeys今まさに押されているキー。1組の window リスナーを通じて、すべての購読者で共有されます。
- Avatarイニシャルのフォールバック、ステータスバッジ、件数にまとめられる積み重ねグループを備えたユーザー写真です。
- Badge色付きのドットを持つステータスラベル、スライドして閉じる削除可能なタグ、新しい値へ回転するカウントです。
- Cardコンテンツをまとめるサーフェスです。3つのバリアント、端まで広がるメディア、同心円状の角丸、カード全体のリンクに対応します。
- Chartテーマ対応の色を持つRechartsのチャートです。1つの設定からラベルを読み取るツールチップと凡例、見えるフォーカスリングつきのキーボード操作に対応します。
使用しているブロック
Kbd の上に構築されるブロック。
- Prompt Input最初は静かな1行で、入力に合わせてカードへ広がり、会話が始まると下へ移動するチャット入力欄です。Enterで送信でき、日本語や中国語の入力でも安全です。ファイルは貼り付け、ドロップ、選択でき、プレビュー、進捗、再試行に対応します。@でファイルを追加し、/でコマンドをカーソル位置のメニューから実行できます。数字キーで選べるモデルピッカー、Maxで動き出す推論量スライダー、コンテキストリング、リアルタイム波形つきの音声入力、ツールチップ、返信のストリーミング中に入力したメッセージのキュー、再読み込みしても残る下書きを備えています。
- Agent Todosエージェントの作業中のプランを表示します。すべてのステップはバックログからToDo、進行中、完了へと移り、リアルタイムの所要時間、失敗、その裏にあるツール呼び出しも確認できます。コンポーザーの上に置くステータスピル、目に見えるプランの変更、実行前にプランを編集できるレビューステップを備えています。
- Artifactモデルが作成したものを表示する、AIチャットの横のパネルです。Webページ、SVG、ドキュメント、コードがリアルタイムでストリーミングされ、その後サンドボックス化されたプレビューに切り替わります。比較して復元できるバージョン、サイズを変更できる分割、スマートフォンでのボトムシートを備えています。
- Chat Sidebarチャットアプリ向けのサイドバーです。上部にロゴ、検索、New chat、その下に独自のリンク、ピン留めされたチャット、チャットを表示するために展開するプロジェクト、日ごとにグループ化された最近のチャットを配置します。行にはホバーメニューと右クリックメニュー、インラインでの名前変更、取り消しできる削除、リアルタイムの返信状態があります。