Radio group
一組の中から1つの選択肢を選びます。ドットは選択肢間で受け渡され、カードでは選択リングが新しい選択先へスライドします。
pnpm dlx shadcn@latest add https://hextaui.com/r/radio-group.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add @base-ui/react cn次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/radio-group.tsx lib/motion.ts インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
選択が変わると、古いドットが縮んで消え、新しいドットがバネのように現れるので、2つのものが同時に点滅するのではなく、視線が選択に沿って動きます。行全体をクリックできるよう、各項目を <label> で囲んでください。
カード
variant="card" では、説明が多い選択肢に RadioGroupCard を使います。カードの面がフェードインする間に、選択リングが新しいカードへスライドします。
水平
カードは横並びでも任意のグリッドでも置けます。リングはどこにあっても追従します。
Form
Field と FieldSet の内側では、グループに legend、必須バリデーション、エラーメッセージが付きます。
無効と読み取り専用
個別の選択肢を無効にするか、グループ全体を readOnly にして変更できない値を表示します。
制御
value と onValueChange を渡します。外部からの変更も、クリックと同じようにアニメーションします。
右から左
ラジオとカードは文字の読み方向に従います。
| キー | アクション |
|---|---|
| Tab | グループ内にフォーカスを移し、選択済みの選択肢、なければ最初の選択肢に当てます。 |
| ↑↓←→ | 前または次の選択肢に移動して選択します。端で循環します。 |
| Space | フォーカスされている選択肢を選びます。 |
aria-label、aria-labelledby、またはFieldLegendでグループに名前を付けます。- 各ラジオは36pxのヒット領域を持ち(タッチスクリーンでは44px)、画面上の表示は16pxのままです。
- 視差効果の軽減が有効な場合、ドットとカードのリングは動きません。
| プロパティ | 型 | デフォルト |
|---|---|---|
variantcard はスライドする選択リングを追加します。 | "default" | "card" | "default" |
value | Value | – |
defaultValue | Value | – |
onValueChange | (value, details) => void | – |
name | string | – |
required | boolean | false |
disabled | boolean | false |
readOnly | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| 属性 | 説明 |
|---|---|
data-slot="radio-group" | グループ。data-variant を持ちます。 |
data-slot="radio-group-highlight" | カード間をスライドするリング。 |
data-disabled | グループが無効です。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
value | Value | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <span> |
| 属性 | 説明 |
|---|---|
data-slot="radio-group-item" | ラジオ。 |
data-checked / data-unchecked | 選択されている選択肢かどうか。 |
data-disabled / data-readonly | 変更できないときに付きます。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
value | Value | – |
disabled | boolean | false |
radioClassNameカード内のラジオ用のクラス。 | string | – |
ラジオを内蔵した <label>。内側に RadioGroupCardTitle と RadioGroupCardDescription、またはその他の任意の要素を置きます。
- Motionすべてのコンポーネントがアニメーションに使うイージングカーブ、継続時間、モーション軽減のチェックと、サイズのモーフィングやスライドするハイライト用のフックです。
- Calendar単一、範囲、複数選択に対応する日付グリッドです。月のスライド、範囲のプレビュー、タッチしやすいサイズの日付セルを備えています。
- Checkboxチェックが描かれるように表示されるチェックボックスです。中間状態の親、グループ、ホバーを共有するラベルに対応します。
- Comboboxチップ、グループ、非同期の結果に対応した、絞り込み可能なセレクトです。入力に合わせてポップアップのサイズが変わります。
- Date picker押すとポップオーバーでカレンダーを開くボタンです。スマートフォンではボトムシートになり、単一の日付も範囲も選べます。
- Fieldコントロールに紐付いたラベル、説明、エラーです。バリデーション状態とフォーム向けのレイアウトを備えています。