Switch
Controle de alternância booleana (ligado/desligado) com suporte completo a form association e semântica de acessibilidade `role="switch"`.
O mk-switch representa um controle de alternância binária — ligado ou desligado. É semanticamente diferente de um checkbox: use-o quando a ação tem efeito imediato (ex.: ativar notificações) em vez de acumular seleções para submissão posterior.
Quando usar
Use o mk-switch quando:
- A ação é imediata — ligar notificações, ativar modo escuro, habilitar permissão.
- O resultado é binário: ligado ou desligado.
- O usuário não precisa confirmar antes da mudança ter efeito.
Prefira outra alternativa quando:
- A mudança só terá efeito após envio de formulário — use
mk-checkbox. - Há mais de duas opções — use
mk-radiooumk-select. - A ação é destrutiva ou irreversível — prefira botão com confirmação explícita, pois o switch não tem passo de confirmação.
Anatomia
| # | Parte | Obrigatório? | Função |
|---|---|---|---|
| 1 | Trilha (track) | Sim | Fundo do controle — muda de cor para indicar ligado ou desligado. |
| 2 | Indicador (thumb) | Sim | Círculo deslizante: esquerda = desligado, direita = ligado. |
| 3 | Rótulo | Sim | Descreve o que está sendo controlado. Deve nomear a funcionalidade, não o estado. |
| 4 | Helper | Não | Informação complementar sobre o impacto da configuração. |
| 5 | Link | Não | Ação ou recurso relacionado (ex.: "Saiba mais sobre esta configuração"). |
Variantes
- Posição do rótulo à direita (padrão): rótulo à direita do controle. Padrão para listas de configurações.
- Posição do rótulo à esquerda: rótulo à esquerda do controle. Para formulários com labels à esquerda ou tabelas de permissões.
Comportamento
O Switch muda de estado imediatamente ao clicar — sem etapa de confirmação. Ao ativar, a trilha muda para verde (success-900) e o thumb desliza para a direita. Ao desativar, a trilha volta ao neutro.
O rótulo é clicável: clicar sobre o texto tem o mesmo efeito que clicar no controle, ampliando a área de interação.
O rótulo deve descrever o que está sendo controlado, não o estado atual. Evite "Ativado" ou "Desligado" — prefira "Receber notificações" ou "Modo escuro".
Estados
| Estado | Quando aparece | O que muda visualmente |
|---|---|---|
| Ligado (checked) | Funcionalidade ativa | Trilha verde (success-900); thumb à direita; rótulo neutral-900. |
| Desligado | Funcionalidade inativa | Trilha cinza (neutral-500); thumb à esquerda; rótulo neutral-900. |
| Desligado + Desabilitado | Controle indisponível, funcionalidade inativa | Trilha cinza claro (neutral-400); rótulo neutral-600; cursor bloqueado. |
| Ligado + Desabilitado | Controle indisponível, funcionalidade ativa | Trilha mantém success-900; rótulo neutral-600; cursor bloqueado. |
Composição
O mk-switch aparece com mais frequência em páginas de configurações, painéis de preferências e listas de permissões — sempre um item por linha, com rótulo claro. Quando vários switches aparecem agrupados, mantenha alinhamento e espaçamento consistentes.
Para seleções que terão efeito após envio de formulário, use mk-checkbox. Para escolhas entre mais de duas opções, use mk-radio.
Padrão
import { MkSwitch } from '@db1/makuco-ui-react';
<MkSwitch label="Notificações" />
<MkSwitch label="Notificações" checked /><mk-switch label="Notificações"></mk-switch>
<mk-switch label="Notificações" checked></mk-switch>Posição do rótulo
Use labelPosition="start" para posicionar o rótulo antes do toggle.
<MkSwitch label="Rótulo no início" labelPosition="start" />
<MkSwitch label="Rótulo no fim" labelPosition="end" /><mk-switch label="Rótulo no início" label-position="start"></mk-switch>
<mk-switch label="Rótulo no fim" label-position="end"></mk-switch>Obrigatório
Quando required, o formulário não pode ser submetido sem que o switch esteja ligado.
<MkSwitch label="Aceito os termos de uso" required /><mk-switch label="Aceito os termos de uso" required></mk-switch>Desabilitado
<MkSwitch label="Desligado" disabled />
<MkSwitch label="Ligado" disabled checked /><mk-switch label="Desligado" [disabled]="true"></mk-switch>
<mk-switch label="Ligado" [disabled]="true" checked></mk-switch>Formulários
O mk-switch é form-associated: quando ligado, envia o value com o name ao submeter o formulário. Quando desligado, nenhum valor é enviado.
<form onSubmit={handleSubmit}>
<MkSwitch label="Receber e-mails de marketing" name="marketing" value="yes" />
<MkButton type="submit">Salvar preferências</MkButton>
</form><form (ngSubmit)="handleSubmit()">
<mk-switch label="Receber e-mails de marketing" name="marketing" value="yes"></mk-switch>
<mk-button type="submit">Salvar preferências</mk-button>
</form>Props
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
label | string | "" | Texto exibido ao lado do switch. |
checked | boolean | false | Define se o switch está ligado. Mutável e refletido no atributo HTML. |
disabled | boolean | false | Desabilita o switch, impedindo a interação. |
required | boolean | false | Marca o switch como obrigatório para validação de formulário. |
name | string | — | Atributo name usado no envio do formulário. |
value | string | "on" | Valor enviado com o formulário quando o switch está ligado. |
labelPosition | "start" | "end" | "end" | Posição do rótulo em relação ao toggle. |
Eventos
| Evento | Payload | Descrição |
|---|---|---|
mkChange | { checked: boolean } | Emitido quando o usuário alterna o switch. Suprimido quando disabled. |
Acessibilidade
- Usa
<input type="checkbox" role="switch">— suporte a teclado (Tab para focar, Space para alternar) incluso. aria-checked="true"ou"false"reflete o estado do switch para leitores de tela.aria-required="true"aplicado quandorequired.- Label associado via
htmlFor— leitores de tela anunciam o nome acessível corretamente. - Form-associated via ElementInternals: o
name/valueparticipam da submissão nativa de formulários. role="switch"garante que leitores de tela anunciem o componente como um controle de alternância, e não como um checkbox.
Rótulos e identificação: o rótulo deve descrever a funcionalidade controlada, não o estado atual. "Notificações por e-mail" é um bom rótulo — "Ativado" não é. O elemento possui role="switch" e o estado (aria-checked) é anunciado automaticamente ao mudar.
Indicador de foco: outline ao redor do controle inteiro (trilha + thumb). Nunca remover o foco visual. O switch deve ser acionado com Space quando focado.
Estado desabilitado: quando desabilitado por razão específica (ex.: requer permissão de conta), comunique o motivo por outro meio — tooltip ou nota abaixo do componente.
Rating
Componentes de avaliação por estrelas. Use `mk-rating` para capturar ou exibir avaliações e `mk-rating-tag` para exibir um score compacto em formato de chip.
Color Picker
Campo de seleção interativa de cores com painel flutuante, área 2D de saturação/brilho e slider de matiz. Usa a tag `mk-color-picker`.