MenuChevron Down
RadioCardGroup Groupe de Cartes Radio - Docs - Artefact

RadioCardGroup Groupe de Cartes Radio

Forms
Tier 2

Introduction

Un groupe radio présenté sous forme d'un jeu de cartes sélectionnables, en exclusivité choix qui nécessitent plus de poids visuel que de simples boutons radio – tarification niveaux, vitesses d’expédition et similaires.

Hydratation

Niveau 2 — détection automatique intelligente. Un « RadioCardGroup » s'affiche au format HTML statique et n'expédie aucun client JS à moins qu'un signal comportemental ne soit présent. Passer interactive={true} pour forcer l'hydratation, ou interactive={false} pour forcer un rendu statique.

Il s'hydrate comme une île lorsque l'un des signaux suivants est présent (ou interactive={true} est défini) :

  • valeur (sélection contrôlée)- defaultValue (sélection initiale non contrôlée)- onValueChange | interactive prop | Résultat | | --- | --- | | omitted, no signal | Static — no client JS | | omitted, a signal present | Hydrates as an island | | true | Hydrates as an island | | false | Static — no client JS |

Utilisation

Plan
Billing
import { RadioCardGroup } from "../components/ui";

export default function MyPage() {
  return (
    <RadioCardGroup
      label="Plan"
      defaultValue="pro"
      items={[
        { label: "Hobby", value: "hobby" },
        { label: "Pro", value: "pro" },
        { label: "Enterprise", value: "enterprise" },
      ]}
    />
  );
}

Composition personnalisée

Passez « enfants » pour un contrôle total sur le contenu de chaque carte au lieu du Tableau items :

import { RadioCardGroup } from "../components/ui";

export default function MyPage() {
  return (
    <RadioCardGroup label="Plan" defaultValue="pro">
      <RadioCardGroup.Item value="hobby">
        <RadioCardGroup.ItemText>Hobby — $0/mo</RadioCardGroup.ItemText>
        <RadioCardGroup.ItemControl />
        <RadioCardGroup.ItemHiddenInput />
      </RadioCardGroup.Item>
      <RadioCardGroup.Item value="pro">
        <RadioCardGroup.ItemText>Pro — $20/mo</RadioCardGroup.ItemText>
        <RadioCardGroup.ItemControl />
        <RadioCardGroup.ItemHiddenInput />
      </RadioCardGroup.Item>
      <RadioCardGroup.Indicator />
    </RadioCardGroup>
  );
}

Constructeur de pages CMS

Ce composant est disponible sous forme de bloc radioCardGroup dans le Page Builder (content/pages/*.json) :

{
  "type": "radioCardGroup",
  "label": "Plan",
  "defaultValue": "pro",
  "variant": "outline",
  "items": [
    { "label": "Hobby", "value": "hobby" },
    { "label": "Pro", "value": "pro" },
    { "label": "Enterprise", "value": "enterprise", "disabled": true }
  ]
}

Il rend toujours « interactif » dans Page Builder.

Propriétés

Racine

PropriétéTypeDescription
valuestringLa valeur actuellement sélectionnée (contrôlée).
defaultValuestringLa valeur initialement sélectionnée (non contrôlée).
onValueChange(details: { value: string }) => voidAppelé lorsque la sélection change.
idstringL'identifiant de l'élément racine.
namestringNom des entrées radio sous-jacentes, pour la soumission de formulaire natif.
disabledbooleanDésactive chaque élément.
readOnlybooleanEmpêche les modifications de sélection tout en permettant la mise au point.
variant"subtle" | "contour" | "surface" | "solid"Visual style. Default "outline".
size"md"Taille visuelle.
colorPalette"blue" | "vert" | "red" | "purple" | "orange" | "amber" | "cyan" | "slate" | "gray"The color theme.
interactivebooleanAnnule la décision d’hydratation (voir ci-dessus).
classstringClasses CSS personnalisées pour l'élément racine.

Composition par défaut

PropriétéTypeDescription
items(string | RadioCardGroupItem)[]Cards to render. A plain string is shorthand for { value, label: value }.
labelstring | JSX.ÉlémentLabel rendered above the cards.

RadioCardGroupItem

PropriétéTypeDescription
valuestringLa valeur unique de l'objet.
labelstring | JSX.ÉlémentThe card's display content.
disabledbooleanDésactive cette carte.
invalidbooleanMarque cette carte comme invalide.

Sous-composants

PartieDescription
RadioCardGroup.LabelLe label du groupe (<span>).
RadioCardGroup.ItemUne carte sélectionnable. role="radio", nécessite un accessoire value.
RadioCardGroup.ItemTextLe texte/contenu affiché de la carte.
RadioCardGroup.ItemControlL'emballage de l'indicateur radio visuel de la carte.
RadioCardGroup.ItemHiddenInputLe <input type="radio"> natif visuellement caché qui contient la sélection pour la soumission du formulaire.
RadioCardGroup.IndicatorUn élément indicateur coulissant partagé pour l’état coché.

Accessibilité

  • La racine a role="radiogroup" ; chaque élément a role="radio" avec aria-checked reflétant la sélection.
  • Les éléments utilisent tabIndex itinérant — seul l'élément coché (ou premier activé) est dans la séquence de tabulations, correspondant au comportement natif du clavier du groupe radio.
  • data-state (checked/unchecked) et data-disabled sont mis en miroir sur les éléments et leurs parties de texte/contrôle pour le style.