mad-radio-field
Grupo de radio buttons com options manuais.
Grupo de radio buttons (escolher 1 entre N) com options fixas/manuais. Integra com MadForm (auto mad:model), MadFormRegistry e MadRenderContext (preenchimento automático via form->fill() / form->set()).
CRÍTICO: o tema aplica appearance:none em todos input[type=radio]. NUNCA criar radio buttons nativos via @foreach — sempre usar este componente.
Para options vindas do banco, use <mad-dbradio-field> (mesma renderização, auto-load via Eloquent).
Props
| Prop | Tipo | Default | Descrição |
|---|---|---|---|
| name | string | '' | Nome do campo (obrigatório) |
| label | string | '' | Label do grupo |
| options | array | [] | ['val' => 'Label'] ou [['value','label','disabled','description']] |
| selected | string | auto | Valor selecionado (auto via MadRenderContext quando omitido) |
| inline | bool | false | Layout horizontal (default: vertical) |
| break-items | int | 0 | Quebra linha a cada N items (só com inline, não se aplica em as=button) |
| as | string | '' | '' (radio circular padrão) ou button (segmented btn-group) |
| boolean | bool | false | Atalho Sim/Não — gera options 1=Sim, 2=Nao, ativa as=button + inline |
| size | string | '' | '' (normal), sm, lg |
| width / max-width | string | '' | Largura / largura máxima do wrapper (CSS: px, %, calc()) |
| hint | string | '' | Texto de ajuda |
| error | string | '' | Mensagem de erro |
| required | bool | false | Campo obrigatório |
| disabled | bool | false | Desabilita todos os radios do grupo |
| attrs | string | '' | Atributos HTML extras (mad:change="...", etc) — aplicados em cada <input> |
| style | string | '' | Estilo inline no wrapper |
Estado vem automaticamente do MadRenderContext (form->fill($record) pré-seleciona).
Uso básico
@php $tipos = ['F' => 'Pessoa Fisica', 'J' => 'Pessoa Juridica']; @endphp
<mad-radio-field name="tipo" label="Tipo" :options="$tipos" inline required />
Variante button (segmented btn-group)
Visual mais compacto, ideal para toggles de status/modo:
<mad-radio-field name="periodo" label="Periodo" as="button"
:options="['dia' => 'Dia', 'sem' => 'Semana', 'mes' => 'Mes', 'ano' => 'Ano']" />
Modo boolean (atalho Sim/Não)
<mad-radio-field name="ativo" label="Ativo" boolean />
{{-- Equivale a: as=button, inline=true, options=['1' => 'Sim', '2' => 'Nao'] --}}
Tamanhos
<mad-radio-field name="x" :options="$opts" size="sm" />
<mad-radio-field name="x" :options="$opts" size="lg" as="button" />
Quebra a cada N items (inline)
<mad-radio-field name="cor" :options="$cores" inline :break-items="4" />
{{-- 4 items por linha --}}
Com descrição por opção
@php
$planos = [
['value' => 'basic', 'label' => 'Basico', 'description' => 'Ate 5 usuarios'],
['value' => 'pro', 'label' => 'Pro', 'description' => 'Usuarios ilimitados'],
['value' => 'ent', 'label' => 'Enterprise', 'description' => 'SLA dedicado', 'disabled' => true],
];
@endphp
<mad-radio-field name="plano" label="Plano" :options="$planos" />
Com mad:change (ação no servidor)
<mad-radio-field name="tipo" :options="$tipos" inline
attrs='mad:change="onTipoChange"' />
Reload remoto via PHP
$this->form->setItems('tipo', ['F' => 'Fisica', 'J' => 'Juridica'], 'F');
// Gera op reload_radio — preserva variant button automaticamente
Dentro de formulário
<mad-form submit="onSave">
<mad-form-grid :cols="2">
<mad-input-field name="nome" label="Nome" required />
<mad-radio-field name="tipo" label="Tipo" :options="$tipos" inline required />
</mad-form-grid>
<mad-btn type="submit" variant="primary" icon="save">Salvar</mad-btn>
</mad-form>
Quando usar radio-field vs alternativas
| Preciso... | Usar |
|---|---|
| Escolher 1 entre N, options fixas/manuais | <mad-radio-field> |
| Escolher 1 entre N, options vindas do banco | <mad-dbradio-field> |
| Escolher 1 entre N com busca/dropdown (lista grande) | <mad-dbcombo-field> |
| Sim/Não compacto | <mad-radio-field boolean> ou <mad-switch-field> |
| Booleano simples num form denso | <mad-checkbox-field> |
| Escolher N entre N (múltipla seleção) | <mad-checkbox-group-field> |
NUNCA fazer
{{-- ERRADO: gerar radio buttons com @foreach manual --}}
@foreach($tipos as $v => $l)
<label><input type="radio" name="tipo" value="{{ $v }}"> {{ $l }}</label>
@endforeach
{{-- CERTO --}}
<mad-radio-field name="tipo" :options="$tipos" />
{{-- ERRADO: carregar options do banco no controller pra passar pro radio-field --}}
@php $tipos = TipoProduto::pluck('descricao', 'id')->all(); @endphp
<mad-radio-field name="tipo_id" :options="$tipos" />
{{-- CERTO: dbradio-field carrega sozinho --}}
<mad-dbradio-field name="tipo_id" model="TipoProduto" display="descricao" />
{{-- ERRADO: usar radio-field pra lista grande/dinamica (sem busca, sem paginacao) --}}
<mad-radio-field name="cliente_id" :options="$milhoesDeClientes" />
{{-- CERTO: lista grande pede busca AJAX --}}
<mad-dbunique-search-field name="cliente_id" model="Pessoa" display="nome" />
{{-- ERRADO: passar break-items sem inline (nao faz nada) --}}
<mad-radio-field name="cor" :options="$cores" :break-items="4" />
{{-- CERTO: break-items so funciona com inline --}}
<mad-radio-field name="cor" :options="$cores" inline :break-items="4" />