MenuChevron Down
RadioCardGroup Grupo de Cartões de Rádio - Docs - Artefact

RadioCardGroup Grupo de Cartões de Rádio

Forms
Detecção automática inteligente

Introdução

Um grupo de botões de rádio apresentado como um conjunto de cartões selecionáveis, para escolhas exclusivas que precisam de mais peso visual do que os simples botões de rádio — níveis de preços, velocidades de envio e similares.

Hidratação

Nível 2 — detecção automática inteligente. Um RadioCardGroup é renderizado como HTML estático e não envia JS do cliente a menos que um sinal de comportamento esteja presente. Passe interactive={true} para forçar a hidratação, ou interactive={false} para forçar uma renderização estática.

Ele se hidrata como ilha quando qualquer um dos seguintes sinais está presente (ou interactive={true} é definido):

  • value (seleção controlada)
  • defaultValue (seleção inicial não controlada)
  • onValueChange
interactive propResult
omitido, sem sinalEstático — sem JS do cliente
omitido, sinal presenteSe hidrata como ilha
trueSe hidrata como ilha
falseEstático — sem JS do 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" },
      ]}
    />
  );
}

Composição personalizada

Passe children para ter controle total sobre o conteúdo de cada cartão em vez do array 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>
  );
}

Construtor de páginas do CMS

Este componente está disponível como um bloco radioCardGroup no Construtor 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 }
  ]
}

Ele sempre é renderizado interactive no Construtor de Páginas.

Propriedades

Root

PropTypeDescription
valuestringO valor atualmente selecionado (controlado).
defaultValuestringO valor selecionado inicialmente (não controlado).
onValueChange(details: { value: string }) => voidChamado quando a seleção muda.
idstringO id do elemento raiz.
namestringNome dos inputs de rádio subjacentes, para envio de formulário nativo.
disabledbooleanDesabilita todos os itens.
readOnlybooleanEvita mudanças de seleção enquanto ainda permite o foco.
variant"subtle" | "outline" | "surface" | "solid"Estilo visual. Padrão "outline".
size"md"Tamanho visual.
colorPalette"blue" | "green" | "red" | "purple" | "orange" | "amber" | "cyan" | "slate" | "gray"O tema de cor.
interactivebooleanSobrescreve a decisão de hidratação (ver acima).
classstringClasses CSS personalizadas para o elemento raiz.

Composição padrão

PropTypeDescription
items(string | RadioCardGroupItem)[]Cartões a renderizar. Uma string simples é um atalho para { value, label: value }.
labelstring | JSX.ElementRótulo renderizado acima dos cartões.

RadioCardGroupItem

PropTypeDescription
valuestringO valor único do item.
labelstring | JSX.ElementO conteúdo exibido do cartão.
disabledbooleanDesabilita este cartão.
invalidbooleanMarca este cartão como inválido.

Subcomponentes

PartDescription
RadioCardGroup.LabelO rótulo do grupo (<span>).
RadioCardGroup.ItemUm cartão selecionável. role="radio", requer uma prop value.
RadioCardGroup.ItemTextO texto/conteúdo exibido do cartão.
RadioCardGroup.ItemControlO invólucro do indicador visual de rádio do cartão.
RadioCardGroup.ItemHiddenInputO <input type="radio"> nativo, visualmente oculto, que mantém a seleção para o envio de formulário.
RadioCardGroup.IndicatorUm elemento indicador deslizante compartilhado para o estado marcado.

Acessibilidade

  • A raiz tem role="radiogroup"; cada item tem role="radio" com aria-checked refletindo a seleção.
  • Os itens usam tabIndex itinerante — apenas o item marcado (ou o primeiro habilitado) está na sequência de tabulação, igualando o comportamento nativo de teclado de um grupo de rádio.
  • data-state (checked/unchecked) e data-disabled são refletidos nos itens e em suas partes de texto/controle, para fins de estilo.