Docs›Componentes (Admin)›mad-switch-field
Componentes (Admin)

mad-switch-field

Toggle iOS-style on/off.

Toggle on/off com visual estilo iOS. Integra com MadForm (auto mad:model), MadFormRegistry e MadRenderContext (preenchimento automatico via form->fill() / form->set()).

CRITICO: o tema aplica appearance:none no checkbox interno. NUNCA criar um toggle nativo com <input type="checkbox"> + CSS customizado — sempre usar este componente.

Props

Prop Tipo Default Descricao
name string '' Nome do campo (obrigatorio)
label string '' Label principal
description string '' Texto secundario (vira card quando presente)
value-on string '1' Valor enviado quando ligado
value-off string '0' Valor enviado quando desligado
variant string '' Cor do track ligado: primary, success (default), warning, danger, info
size string '' Tamanho: sm, '' (normal), lg
hint string '' Texto de ajuda
error string '' Mensagem de erro
required bool false
disabled bool false Desabilita o input (NAO posta valor)
readonly bool false Bloqueia interacao mas mantem postagem (pointer-events:none)
attrs string '' Atributos HTML extras (ex: mad:change="onChange")
value string '' Valor default do dev (perde para o registro do contexto)
checked bool false Liga por default pela tag (equivale a value = value-on)
width string '' Largura do .mad-field (numero puro = px)
max-width string '' Largura maxima do .mad-field
style string '' Estilo inline no .mad-field

Estado vem automaticamente do MadRenderContext — comparacao e feita contra value-on (suporta dual-value como 'A'/'I').

Regra de precedencia (Mad\Support\MadFieldValue): registro > checked > value. Sem coluna no contexto, checked e o unico jeito de nascer ligado.

O MadRenderContext tambem controla visibilidade e bloqueio por campo: isHidden($name) adiciona mad-hidden no field e isReadonly($name) liga o readonly mesmo sem a prop.

Uso simples (boolean 1/0)

<mad-switch-field name="ativo" label="Ativo" />

<mad-switch-field name="notif_email" label="Receber notificacoes por email"
    description="Voce sera avisado sobre novidades e promocoes." />

Dual-value

Quando o banco grava algo diferente de '1'/'0' (ex: 'A'/'I', 'S'/'N'):

<mad-switch-field name="status" label="Status"
    value-on="A" value-off="I" />

<mad-switch-field name="autoriza" label="Autorizado"
    value-on="S" value-off="N" />

form->save($record) persiste exatamente o valor declarado em value-on ou value-off — sem coercao para '1'/'0'.

Variant de cor

<mad-switch-field name="ativo" label="Ativo" variant="primary" />
<mad-switch-field name="alerta" label="Alerta" variant="warning" />
<mad-switch-field name="bloqueado" label="Bloqueado" variant="danger" />

Default e success (verde).

Tamanhos

<mad-switch-field name="x" label="Pequeno" size="sm" />
<mad-switch-field name="y" label="Normal" />
<mad-switch-field name="z" label="Grande" size="lg" />

Readonly vs Disabled

Prop Posta valor? Visual
disabled NAO opacity .5, cursor not-allowed
readonly SIM opacity .75, pointer-events:none
{{-- Visual normal mas bloqueado para o usuario; valor ainda e persistido --}}
<mad-switch-field name="status" label="Status" readonly />

Acao no servidor (mad:change)

<mad-switch-field name="ativo" label="Ativo"
    attrs='mad:change="onAtivoChange"' />
public function onAtivoChange(string $value): void
{
    // $value = valueOn ou valueOff conforme registrado
}

Dentro de formulario

<mad-form submit="onSave">
    <mad-form-grid :cols="2">
        <mad-input-field name="nome" label="Nome" required />
        <mad-switch-field name="ativo" label="Ativo" variant="success" />
    </mad-form-grid>
    <mad-switch-field name="notif_email" label="Receber notificacoes por email"
        description="Voce sera avisado sobre novidades e promocoes." />
    <mad-btn type="submit" variant="primary" icon="save">Salvar</mad-btn>
</mad-form>

Quando usar switch vs checkbox

Preciso... Usar
Booleano simples num form denso (sim/nao, marcado) <mad-checkbox-field>
Toggle on/off com visual destacado, preferencia com label longa <mad-switch-field>

NUNCA fazer

{{-- ERRADO: input nativo — fica invisivel pelo CSS do tema --}}
<input type="checkbox" name="ativo" value="1">

{{-- CERTO --}}
<mad-switch-field name="ativo" label="Ativo" />

{{-- ERRADO: usar checkbox para preferencia on/off com label longa --}}
<mad-checkbox-field name="notif" label="Receber notificacoes por email" />

{{-- CERTO: switch tem visual proprio pra isso --}}
<mad-switch-field name="notif" label="Receber notificacoes por email" />

{{-- ERRADO: montar toggle manualmente com CSS/JS (slider, knob, etc) --}}
<label class="my-toggle">
    <input type="checkbox" name="ativo" class="toggle-input">
    <span class="toggle-slider"></span>
</label>

{{-- CERTO --}}
<mad-switch-field name="ativo" label="Ativo" />