Ir para o conteúdo principal
WBC - GovBR-DS
Copiar página como Markdown para IA

Radio Group

Componente estável e recomendada para novos projetos.
Anatomia, uso, comportamento visual e recomendações conceituais são mantidos pelo Padrão Digital de Governo. Esta página documenta a implementação Web Components e sua API executável.

Visão Geral​

O componente br-radio-group é o contêiner semântico e orquestrador de opções br-radio no GovBR-DS, responsável por garantir a exclusividade mútua de seleção, a navegação contínua por teclado e a validação integrada do grupo.

Para que serve​

  • Coordenação de seleção mútua: Garante que apenas um botão de rádio permaneça selecionado por vez entre todos os rádios filhos.
  • Navegação acessível por teclado WAI-ARIA: Implementa o padrão de navegação com setas direcionais (cima/baixo/esquerda/direita) com foco cíclico dentro do grupo.
  • Agrupamento semântico: Estrutura o grupo com a semântica de radiogroup, fornecendo rótulo acessível para tecnologias assistivas.
  • Associação com formulários: Atua como controle integrado (formAssociated), emitindo o valor consolidado selecionado para o formulário pai.

Quando utilizar​

  • Utilize quando:
    • Apresentar um conjunto de 2 a 5 alternativas mutuamente exclusivas onde todas as opções devam ser comparadas lado a lado ou em lista vertical.
  • Evite e prefira outro componente quando:
    • Houver muitas alternativas (mais de 5 a 7 opções): prefira br-select.
    • A seleção permitir múltiplas alternativas independentes: prefira br-checkbox-group.

Estrutura e Slots​

O br-radio-group é um orquestrador de seleção:

  • default: Slot onde devem ser declarados os componentes filhos br-radio.
  • label: Slot para personalização do rótulo ou enunciado da pergunta do grupo.

Para a documentação completa de design, incluindo diretrizes de acessibilidade e especificações visuais, consulte o Design System do GovBR.

Exemplo(s)​

Desktop (100%)
Tablet - 768px
iPhone (iOS) - 390x844
Android - 360x800
SelecionadoOrientação horizontalDesabilitado
Compartilhar URL
Ativar movimento reduzido
Mudar fundo
Abrir no StackBlitz
Mais opções
Tela cheia
Carregando preview…
HTML
Controles do componente
Console: logs, eventos e erros
Angular (Somente leitura)
React (Somente leitura)
Vue (Somente leitura)
Acessibilidade
Recolher controles e código
Desfazer alteração
Refazer alteração
Comparar alterações
Formatar código
Resetar código para o estado inicial
Escolher formato para copiar

Propriedades​

ariaLabel​

Atributoaria-label
DescriçãoNome acessível usado quando não há uma legenda visível.
Tipostring
Valor padrãonull

customId​

Atributocustom-id
DescriçãoIdentificador usado nas relações acessíveis internas.
Tipostring
Valor padrãogenerateUniqueId()

defaultValue​

Atributodefault-value
DescriçãoValor restaurado por form.reset() e usado como seleção inicial.
Tipostring
Valor padrão---

disabled​

Atributodisabled
DescriçãoDesabilita o grupo e seus radios.
Tipoboolean
Valor padrãofalse

feedbackState​

Atributofeedback-state
DescriçãoEstado visual opcional do feedback. Valores inválidos não aplicam estado. A validade real vem de ElementInternals.
Tipo"invalid" | "valid"
Valor padrão---

label​

Atributolabel
DescriçãoTexto visível usado como legenda do grupo.
Tipostring
Valor padrão---

name​

Atributoname
DescriçãoNome do campo enviado pelo formulário. (obrigatório)
Tipostring
Valor padrão---

orientation​

Atributoorientation
DescriçãoOrientação visual das opções. Valores inválidos usam vertical.
Tipo"horizontal" | "vertical"
Valor padrão'vertical'

required​

Atributorequired
DescriçãoExige uma opção habilitada selecionada.
Tipoboolean
Valor padrãofalse

validator Componente/funcionalidade ainda em testes. Use com cuidado, pois podemos fazer alterações.​

Atributo---
DescriçãoRegra síncrona ou assíncrona aplicada ao valor do grupo.
Recebe a string selecionada ou null quando nenhuma opção está marcada.
Exemplo de uso
const group = document.querySelector('br-radio-group');
group.validator = (value) => value ? null : 'Escolha uma alternativa';
Tipo(value: string) => string | Promise<string>
Valor padrão---

value​

Atributovalue
DescriçãoValor atualmente selecionado; null representa nenhuma seleção.
Tipostring
Valor padrãonull

Slots​

NomeDescrição
"default"Radios pertencentes ao grupo.
"description"Texto auxiliar do grupo.
"feedback"Mensagem de validação do grupo.
"label"Legenda do grupo, como alternativa à propriedade label.
"validation-loading" Componente/funcionalidade ainda em testes. Use com cuidado, pois podemos fazer alterações.Indicador exibido durante validação assíncrona.

Eventos​

EventoDescriçãoDepreciaçãoPropagação
brRadioGroupValidationChange Componente/funcionalidade ainda em testes. Use com cuidado, pois podemos fazer alterações.Emitido ao iniciar e concluir uma validação customizada.---true

Métodos​

checkValidity​

DescriçãoVerifica a validade do grupo.
AssinaturacheckValidity() => Promise<boolean>
Parâmetros---

getValidationState​

DescriçãoRetorna o snapshot de validade do grupo.
AssinaturagetValidationState() => Promise<FormValidationState>
Parâmetros---

reportValidity​

DescriçãoVerifica a validade e apresenta a mensagem do grupo.
AssinaturareportValidity() => Promise<boolean>
Parâmetros---

setCustomValidity​

DescriçãoDefine a mensagem de validade customizada do grupo.
AssinaturasetCustomValidity(message: string) => Promise<void>
Parâmetrosmessage:

setFocus​

DescriçãoMove o foco para o radio marcado ou para o primeiro radio habilitado.
AssinaturasetFocus() => Promise<void>
Parâmetros---

validate Componente/funcionalidade ainda em testes. Use com cuidado, pois podemos fazer alterações.​

DescriçãoExecuta o validator do grupo.
Assinaturavalidate() => Promise<boolean>
Parâmetros---

CSS Shadow Parts​

NomeDescrição
"description"Área de texto auxiliar.
"feedback"Área de mensagem de validação.
"group"Fieldset semântico do grupo.
"legend"Legenda e nome acessível do grupo.
"options"Contêiner das opções.
"validation-loading" Componente/funcionalidade ainda em testes. Use com cuidado, pois podemos fazer alterações.Área do indicador de validação assíncrona.

Validação​

br-radio-group é o único campo associado ao formulário quando organiza radios. required, setCustomValidity(), checkValidity(), reportValidity() e getValidationState() operam sobre o valor único do grupo; os radios filhos deixam de contribuir individualmente para FormData e para a validade do formulário.

<br-radio-group name="contato" label="Forma de contato" required>
<br-radio name="contato" value="email" label="E-mail"></br-radio>
<br-radio name="contato" value="telefone" label="Telefone"></br-radio>
</br-radio-group>

Sem o slot feedback, a mensagem de required, do validator ou de setCustomValidity() é renderizada automaticamente. Use o slot para controlar a apresentação. Regras síncronas ou assíncronas podem ser atribuídas pela propriedade validator; elas recebem string | null, são executadas em alterações do usuário ou por validate() e emitem brRadioGroupValidationChange.

O estado inicial vem de defaultValue, depois de value ou do último filho inicialmente marcado. form.reset() restaura esse valor sem emitir input ou change. Alterações programáticas também são silenciosas.

Angular e Vue tratam o grupo como um controle de valor único. Em Angular, a diretiva de validade traduz a Constraint Validation API para webComponentValidity; os accessors finais são atualizados pela geração normal dos wrappers.

O grupo normaliza o name dos radios em runtime. Os exemplos também o declaram nos filhos para preservar a tipagem pública obrigatória e retrocompatível de br-radio nos wrappers.

Acessibilidade​

O componente usa fieldset e legend, portanto não precisa adicionar role="radiogroup". Informe label, preencha o slot label ou, quando uma legenda visível não for apropriada, use aria-label. Não deixe o grupo sem nome acessível.

Somente o radio marcado participa da ordem de Tab. Sem seleção, o primeiro radio habilitado recebe Tab. Setas movem foco e seleção com retorno circular; Home seleciona o primeiro e End o último. Radios desabilitados são ignorados. O grupo anuncia o valor por meio do estado checked do input nativo de cada br-radio.

O slot description é ligado por aria-describedby; erros são ligados por aria-errormessage e aria-invalid. Mensagens devem continuar visíveis em texto, sem depender apenas de cor ou ícone. Ao falhar em reportValidity(), o foco é enviado para a opção marcada ou para a primeira habilitada.

Apenas filhos br-radio diretos são gerenciados. Essa restrição mantém ordem visual, ordem de teclado e reconciliação dinâmica iguais. Radios adicionados ou removidos são reavaliados automaticamente.

Eventos nativos​

Eventos do valor​

O grupo intercepta os eventos dos radios e reemite um único input seguido de change no host. Ambos usam bubbles: true e composed: true; leia o valor atual em event.target.value. A opção individual continua expondo checked, mas seu evento não atravessa o grupo como um segundo evento observável.

Setas, Home e End que alteram a seleção produzem a mesma sequência. Escritas em value ou checked, restauração de estado, inclusão/remoção de filhos e form.reset() são programáticos e não emitem esses eventos.

brRadioGroupValidationChange é um evento customizado separado, emitido no início e no fim de uma validação por validator, com { validating, valid, message }.

Atributos nativos​

O host é um Form-Associated Custom Element. name, value, required, disabled e a associação nativa por form pertencem ao grupo. Quando habilitado e selecionado, new FormData(form) contém no máximo uma entrada com o name e o value do grupo.

O grupo normaliza o name dos filhos enquanto eles estiverem gerenciados e restaura o valor anterior quando forem removidos. disabled no grupo impede interação, validação e envio; disabled em uma opção apenas a exclui da seleção e da navegação.

default-value define o valor de reset. orientation="horizontal|vertical" muda a disposição visual; não altera a semântica de escolha única.

Dependências​

Depende de​

Gráfico​

Comece aquiComponentesQuickstartsSobre o projetoRepositório GitLabVersõesDiscordGovBR-DSFAQWikiRedefinir cookies