MenuChevron Down
RadioCardGroup Grupo de Tarjetas de Radio - Docs - Artefact

RadioCardGroup Grupo de Tarjetas de Radio

Forms
Detección automática inteligente

Introducción

Un grupo de radio botones presentado como un conjunto de tarjetas seleccionables, para elecciones exclusivas que necesitan más peso visual que los simples radio botones — niveles de precios, velocidades de envío y similares.

Hidratación

Nivel 2 — detección automática inteligente. Un RadioCardGroup se renderiza como HTML estático y no envía JS del cliente a menos que esté presente una señal de comportamiento. Pasa interactive={true} para forzar la hidratación, o interactive={false} para forzar un renderizado estático.

Se hidrata como isla cuando está presente cualquiera de las siguientes señales (o se establece interactive={true}):

  • value (selección controlada)
  • defaultValue (selección inicial no controlada)
  • onValueChange
interactive propResult
omitido, sin señalEstático — sin JS del cliente
omitido, señal presenteSe hidrata como isla
trueSe hidrata como isla
falseEstático — sin JS del cliente

Uso

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" },
      ]}
    />
  );
}

Composición personalizada

Pasa children para tener control total sobre el contenido de cada tarjeta en lugar del arreglo 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>
  );
}

Constructor de páginas del CMS

Este componente está disponible como un bloque radioCardGroup en el Constructor de páginas (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 }
  ]
}

Siempre se renderiza interactive en el Constructor de páginas.

Propiedades

Root

PropTypeDescription
valuestringEl valor actualmente seleccionado (controlado).
defaultValuestringEl valor seleccionado inicialmente (no controlado).
onValueChange(details: { value: string }) => voidSe llama cuando cambia la selección.
idstringEl id del elemento raíz.
namestringNombre de los inputs de radio subyacentes, para el envío de formularios nativo.
disabledbooleanDeshabilita todos los elementos.
readOnlybooleanEvita cambios de selección mientras sigue permitiendo el enfoque.
variant"subtle" | "outline" | "surface" | "solid"Estilo visual. Por defecto "outline".
size"md"Tamaño visual.
colorPalette"blue" | "green" | "red" | "purple" | "orange" | "amber" | "cyan" | "slate" | "gray"El tema de color.
interactivebooleanSobrescribe la decisión de hidratación (ver arriba).
classstringClases CSS personalizadas para el elemento raíz.

Composición por defecto

PropTypeDescription
items(string | RadioCardGroupItem)[]Tarjetas a renderizar. Una cadena simple es un atajo para { value, label: value }.
labelstring | JSX.ElementEtiqueta renderizada sobre las tarjetas.

RadioCardGroupItem

PropTypeDescription
valuestringEl valor único del elemento.
labelstring | JSX.ElementEl contenido visible de la tarjeta.
disabledbooleanDeshabilita esta tarjeta.
invalidbooleanMarca esta tarjeta como inválida.

Subcomponentes

PartDescription
RadioCardGroup.LabelLa etiqueta del grupo (<span>).
RadioCardGroup.ItemUna tarjeta seleccionable. role="radio", requiere una prop value.
RadioCardGroup.ItemTextEl texto/contenido visible de la tarjeta.
RadioCardGroup.ItemControlEl envoltorio del indicador visual de radio de la tarjeta.
RadioCardGroup.ItemHiddenInputEl <input type="radio"> nativo, visualmente oculto, que conserva la selección para el envío de formularios.
RadioCardGroup.IndicatorUn elemento indicador deslizante compartido para el estado marcado.

Accesibilidad

  • La raíz tiene role="radiogroup"; cada elemento tiene role="radio" con aria-checked reflejando la selección.
  • Los elementos usan tabIndex itinerante — solo el elemento marcado (o el primero habilitado) está en la secuencia de tabulación, igualando el comportamiento nativo de teclado de un grupo de radio botones.
  • data-state (checked/unchecked) y data-disabled se reflejan en los elementos y sus partes de texto/control, para efectos de estilo.