Toggle group
単一または複数の選択に使うトグルの列です。選ばれた項目へ塗りがスライドし、項目は連結も間隔を空けた配置もでき、矢印キーでフォーカスを移動できます。
pnpm dlx shadcn@latest add https://hextaui.com/r/toggle-group.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add @base-ui/react class-variance-authority cn次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/toggle-group.tsx components/ui/toggle.tsx lib/motion.ts インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
同時にオンにできる項目が1つのときは、1つの塗りが選択された項目へスライドしてその形になるため、グループは1つのコントロールとして見えます。multiple では各項目が個別に塗られます。塗りは最初の描画前に配置されるので、読み込み時にスライドして現れることはありません。
アウトライン
variant="outline" は、項目を1つの境界線付きコントロールにつなげます。
複数
multiple は、テキストの書式設定のように、任意の数の項目をオンにできるようにします。
サイズ
グループの size はすべての項目に適用されます。sm、default、lg。
間隔
spacing は、スペーシングスケールで項目間に gap を設けます。gap のある outline の項目は、それぞれ独自の境界線と塗りを保ちます。
アイコンとラベル
ラベルの前にアイコンを置きます。アイコンのみの項目には aria-label が必要です。
垂直
orientation="vertical" は項目を縦に積み、↑ と ↓ でフォーカスを移動します。
無効
1つの項目、またはグループ全体を disabled で無効にします。無効な項目はキーボードでスキップされます。
制御
value と onValueChange を渡します。空の値を無視すると1つの項目がオンのままになるため、選択済みの項目をもう一度押しても何も起きません。
右から左
項目の順序、つながった角、スライドする塗り、矢印キーは文字の読み方向に従います。
| キー | アクション |
|---|---|
| Tab | グループ内の最後にフォーカスした項目に移動し、次にグループの外へ移動します。 |
| ←→ | 項目間を移動します。端で循環します。縦向きでは ↑ と ↓。 |
| HomeEnd | 最初または最後の項目に移動します。 |
| EnterSpace | フォーカスされている項目をオンまたはオフにします。 |
- グループは
grouprole を持つため、aria-labelを付けてください。各項目はaria-pressedを持つボタンです。 - タブ順に入る項目は1つだけなので、グループは1つのタブストップとなり、矢印キーでその中を移動します。
multipleがない場合、選択済みの項目を押すとオフになります。1つの項目をオンのままにするには、値を制御してください。- 視差効果の軽減が有効な場合、塗りはスライドせずにフェードします。
| プロパティ | 型 | デフォルト |
|---|---|---|
value | string[] | – |
defaultValue | string[] | – |
onValueChange | (value: string[], details) => void | – |
multiple | boolean | false |
variantすべての項目のバリアントを設定します。 | "default" | "outline" | "default" |
sizeすべての項目のサイズを設定します。 | "default" | "sm" | "lg" | "default" |
spacingスペーシングスケールでの項目間の間隔。0にすると outline の項目がつながります。 | 0 | 0.5 | 1 | 1.5 | 2 | 2.5 | 3 | 4 | 5 | 6 | 8 | 0 |
orientation | "horizontal" | "vertical" | "horizontal" |
loopFocus | boolean | true |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| 属性 | 説明 |
|---|---|
data-slot="toggle-group" | ルート。 |
data-slot="toggle-group-indicator" | スライドする塗り。multiple がない場合に描画されます。項目がオンのとき data-visible が付きます。 |
data-variant / data-size / data-spacing | グループのバリアント、サイズ、間隔。 |
data-orientation | "horizontal" または "vertical"。 |
data-multiple | 複数の項目をオンにできるときに付きます。 |
data-disabled | グループが無効なときに付与されます。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
valueグループの value の中でその項目を識別します。 | string | – |
disabled | boolean | false |
variantグループが何も設定していない場合に使われます。 | "default" | "outline" | – |
sizeグループが何も設定していない場合に使われます。 | "default" | "sm" | "lg" | – |
nativeButton | boolean | true |
render | ReactElement | (props, state) => ReactElement | <button> |
| 属性 | 説明 |
|---|---|
data-slot="toggle-group-item" | 各項目。 |
data-pressed | その項目はオンです。 |
data-disabled | その項目は無効です。 |
data-variant / data-size | 項目の解決済みのバリアントとサイズ。 |
使用しているブロック
Toggle group の上に構築されるブロック。
- Prompt Input最初は静かな1行で、入力に合わせてカードへ広がり、会話が始まると下へ移動するチャット入力欄です。Enterで送信でき、日本語や中国語の入力でも安全です。ファイルは貼り付け、ドロップ、選択でき、プレビュー、進捗、再試行に対応します。@でファイルを追加し、/でコマンドをカーソル位置のメニューから実行できます。数字キーで選べるモデルピッカー、Maxで動き出す推論量スライダー、コンテキストリング、リアルタイム波形つきの音声入力、ツールチップ、返信のストリーミング中に入力したメッセージのキュー、再読み込みしても残る下書きを備えています。
- API keysOpenAIやAnthropicのコンソールのような、AIプロダクトのAPIキーのページです。スコープ付きの権限と有効期限を持つキーを作成し、シークレットは一度だけ表示され、コピーで確認でき、取り消しは元に戻せ、その場で名前を変更でき、猶予期間つきでローテーションでき、キーごとの使用量を確認できます。
- Diff Reviewエージェントによる編集を、反映される前にファイルをまたいで確認します。件数つきのファイルツリー、変更ごと、ファイルごと、またはすべてに対する承認と却下、任意の行や範囲に付けてエージェントへ返せるコメント、ユニファイドビューとスプリットビュー、単語単位のハイライト、取り消し、ストリーミングされる編集、チャット向けの「Edited 4 files」サマリーを備えています。
- MarkdownAIの回答向けに作られたMarkdownです。滑らかにストリーミングされ、入力途中の構文を表示しません。リンクできる見出し、MarkdownやCSVとしてコピーできるテーブル、GitHubのコールアウト、タスクリスト、脚注、画像、インラインの引用、完全なコードブロックに対応します。