GH GambleHub

Seleção de controladores: Checkbox, Switch, canal de rádio

1) Diferenças-chave (sentido, não «desenho»)

ControladorO que significaQuando aplicarAplicar efeito
CheckboxAtivar/excluir configuração ou opção. Pode ser uma escolha independente ou múltipla. Suporta tri-state. Listas de opções, filtros, consentimentos. Você pode selecionar algumas. Normalmente postergado («Salvar»), mas aceitável instantaneamente se o efeito for local e reversível.
Switch (interruptor)Mudar o estado atual do sistema/função que deve mudar imediatamente e ser visivelmente visível. A função, os estatais, as notificações, o modo ao vivo/desativado. Instantaneamente e aparentemente; sem «Salvar» adicional.
Transmissões de rádioOpções mutuamente excluídas do mesmo conjunto. Exatamente um é sempre selecionado (ou depois de selecionado). Modos, formatos, unidades, ordens. Normalmente aplicado de uma vez; para alterações complexas, por «Aplicar».
Regra:
  • Preciso de um N, pegue no rádio.
  • Precisamos de todas as bandeiras.
  • Preciso de um tumbler binário que mude o comportamento.

2) Árvore de soluções (curta)

1. Algumas eleições independentes?
2. É exatamente uma opção do conjunto? → de localização de rádio (ou segmento-controlador/marca).
3. Uma bandeira binária, efeito instantâneo e visível?
4. Preciso de um subconjunto «parcial»? → Checkbox com tri-state.
5. Risco/custo alto (pagamento, moderação)? → rádio/checkbox + confirmação (não swich).

3) Comportamento e expectativa do usuário

Switch = resultado instantâneo. Após alternar, o usuário espera um efeito imediato e reversível sem «Salvar» individualmente.
Checkbox = escolha de opções. Pode ser aplicado imediatamente ou por botão - é importante mostrar claramente o modelo (Configurações salvas/Clique em Salvar).
Rádio = escolha do modo. A transição pode remodelar a interface. Sinalize as alterações (microanimação/texto).

4) Estados e semântica visual

Normal / Hover / Focus / Active / Disabled / Error. Contraste entre texto e indicadores ≥ AA.
Tri-state (checkbox): vazio/parcial/selecionado. O estado parcial não é por si só - o clique é trocado por «escolhido» e não «vazio».
Switch: Tem uma clara distinção entre a cor e a posição da «jogadora». A cor não é o único hospedeiro de sentido (ícone/editora ao lado).

5) Copiar e assinar

Verbo + objeto ou afirmação que se torna verdadeiro quando selecionado.

«Receber notificações de e-mail».
Switch: «Notificações: Ativado/Desligado» (gravador à esquerda, estado à direita ou no pergaminho).
Rádio: «Formato de coeficientes: decimal/Fracionado/Americano».
Evite negar duplamente, «Não desligar...» é confuso.

Para ações de risco, adicione uma descrição secundária: apostas rápidas (sem confirmação) - pode ser cancelado em 5 segundos"

6) Disponibilidade (A11y) e teclado

Checkbox: 'role =' checkbox ',' aria-checked = 'true' falso 'mixed', 'Space' - Alternando.
Switch: nativo '<input tipo =' checkbox '>' com o visual do suingue ou 'role =' switch's 'aria-checked'. Comportamento como o Espaço.
Rádio: 'role =' radiogroup 'no contêiner,' role = 'radio' nos itens, seta ↑/↓ ou ←/→ - movendo a seleção, Space/Enter - confirmam.
Grupos: use 'fieldset '/' legend' para um contexto comum.
Deixe os anéis de foco visíveis; o tamanho da área do clique ≥ 44 x 44 px por caixa.

Snippets:
html
<! -- Radio Group -->
<fieldset role="radiogroup" aria-labelledby="odds-format">
<legend id = "odds-format "> Odds format </legend>
<label><input type="radio" name="odds" value="decimal" checked> Десятичный</label>
<label><input type="radio" name="odds" value="fractional"> Дробный</label>
<label> <input type = "radio" name = "odds" value = "american"> American </label>
</fieldset>

<! -- Checkbox (tri-state via aria) -->
<div role = "checkbox" aria-checked =" mixed" tabindex =" 0" id = "cb "> Notify about tournaments </div>

<! -- Switch (role = "switch") -->
<button role="switch" aria-checked="false" aria-labelledby="live-title" class="switch" id="live">
<span class="switch__knob"></span>
</button>
<span id = "live-title "> Live updates </span>

7) Alterações assincrônicas e erros

Switch + rede: Alterna → UI imediatamente otimista → confirmação do servidor → quando não estiver disponível, recuamos suavemente e mostramos o motivo.
Checkbox/rádio em «Salvar»: ainda não há confirmação - não mude o comportamento global.
Ações arriscadas: confirmação (modal) ou painel undo de 5 a 10 segundos (se o regulamento permitir).

js
//Optimistic for switch const sw = document. getElementById('live');
sw. addEventListener('click', async ()=>{
const prev = sw. getAttribute('aria-checked') === 'true';
sw. setAttribute ('aria-checked', String (! prev)) ;//instantly try {
const r = await fetch('/api/live', { method:'POST', body: JSON. stringify({ enabled:!prev })});
if(!r.ok) throw new Error();
} catch {
sw. setAttribute('aria-checked', String(prev));     // откат
//show the toast "Failed to enable live"
}
});

8) Pattern móveis

O switch é o controle binário principal nas configurações móveis.
O rádio pode ser substituído pelo controle segmentado para 2-4 opções (melhor parar com o dedo).
Os checkbox nas listas são uma grande área de clique e suportam uma seleção rápida.

9) Grupos de pattern e layout

Rádio: lista vertical (melhor digitalizado) e segmentos em uma linha para 2-3 opções.
Checkbox: alinhamento por coluna; para listas longas - «Selecionar tudo» + tri-state no grupo.
Switch: editora à esquerda, controlador à direita na mesma linha; mostre o status atual com texto, se necessário (Ativado/Desinstalado).

10) Antipattern

Um switch que não aplica as alterações imediatamente (exige «Salvar»).
Um canal de rádio onde pode haver múltiplas escolhas.
Checkbox para opções de exclusão mútua («Masculino/Feminino» como dois checkbox).
Um suingue binário para uma ação irreversível perigosa (remover dados).
Duplas negações no texto.
Altera o layout quando o foco é perdido.

11) Especificidades de iGaming (exemplos)

Formato de coeficientes: radiogrupo «Decimais/Frações/Americanos» - aplicado imediatamente e salvo para o perfil.
Aposta rápida: «Apostas rápidas (sem confirmação)», com descrição explícita e undo de 5 a 10 segundos após cada operação.
Assinaturas/notificações: checkbox por tipo de evento (ganhos, torneios, depósitos). «Selecione tudo» - tri-state.
Atualizações de coeficientes ao vivo: Modo ao vivo com otimismo e retração com erro na rede.
Limites do jogo responsável: canal de rádio para períodos (dia/semana/mês) + campo de valor; confirmação do limite alterado com entrada «a partir de amanhã».

12) Sistema de design de tokens (exemplo)

json
{
"checkbox": { "size": 20, "radius": 4, "gap": 8 },
"radio": { "size": 20, "dot": 10, "gap": 8 },
"switch": { "width": 44, "height": 24, "knob": 20, "padding": 2 },
"focusRing": { "width": 2, "offset": 2 },
"motion": { "toggleMs": 140, "ease": "cubic-bezier(0. 2,0,0. 2,1)" },
"a11y": { "contrastAA": true }
}
Presetos CSS (conceito):
css
.control { display:flex; align-items:center; gap:8px; min-height:36px; }
.switch { width:44px; height:24px; padding:2px; border-radius:999px; background:var(--bg-muted); position:relative; }
.switch[aria-checked="true"]{ background:var(--accent); }
.switch__knob{ position:absolute; width:20px; height:20px; border-radius:50%; left:2px; top:2px; transition: transform. 14s cubic-bezier(.2,0,.2,1); background:#fff; }
.switch[aria-checked="true"].switch__knob{ transform: translateX(20px); }
.control:focus-visible{ outline:2px solid var(--focus); outline-offset:2px; }

13) Snippets UX-lógica

Tri-state «Selecionar tudo»:
js function updateMaster(master, items){
const total = items. length, checked = items. filter(i=>i. checked). length;
master. indeterminate = checked>0 && checked<total;
master. checked = checked===total;
}
Grupo de rádio com teclado (seta):
js const radios = [...document. querySelectorAll('[role="radio"]')];
let i = radios. findIndex(r => r. getAttribute('aria-checked')==='true');
document. addEventListener('keydown', e => {
if(!['ArrowRight','ArrowDown','ArrowLeft','ArrowUp'].includes(e. key)) return;
e. preventDefault();
const dir = (e. key==='ArrowRight'          e. key==='ArrowDown')? 1: -1;
i = (i + dir + radios. length) % radios. length;
radios. forEach(r => r. setAttribute('aria-checked','false'));
radios[i].setAttribute('aria-checked','true');
radios[i].focus();
});

14) Métricas e experiências

Misclick rate e frequência undo por pergaminho.
Tempo até a seleção e erro de validação por grupo de rádio.
Proporção «Escolher tudo» e comparação com a escolha manual (velocidade, precisão).
A/B: Copiar editoras, ordem de opções, segmented vs radio, aplicar imediatamente «vs» no botão.

15) QA-folha de cheque

Sentido e escolha

  • O controlador corresponde a uma tarefa (múltipla → de checkbox; um do rádio N; binário instantâneo → swich).
  • Há confirmação/undo para ações de risco.

Disponibilidade

  • Papéis corretos ('checkbox '/' switch '/' radiogroup '/' radio'), 'aria-checked '/' indeterminate'.
  • Os anéis de foco são visíveis, as setas funcionam em um grupo de rádio, o Space alterna checkbox/switch.

Comportamento

  • O switch aplica as alterações imediatamente; erro: retrocesso e mensagem.
  • O tri-state de «Selecionar tudo» é válido; os cliques da editora funcionam.

Visual

  • Contraste ≥ AA; o estado não é transmitido apenas pela cor.
  • Zonas de clique ≥ 44 x 44 px; a ordem e o alinhamento são estáveis.

Celular

  • O controlador Segmented para 2-4 variantes de rádio foi testado para o tanque.
  • Não há conflito entre o dedo e a rolagem.

16) Documentação em design

Componentes: 'Checkbox', 'Switch', 'RadioGroup '/' SegmentedControl'.
Tocos de tamanho/animação/foco, exemplos de copiação.
Pattern: «Selecionar tudo» (tri-state), «Aplicação instantânea», «Undo após risco».
Do/Don 't Galeria: switch com preservação adiada (don' t), rádio em vez de checkbox (don 't), segmentos para conjuntos curtos (do).

Resumo curto

A escolha do controlador é sobre o sentido e a expectativa: checkbox - bandeiras e grupos independentes, switch - ativação instantânea/desligamento da função, rádio - exatamente uma opção do conjunto. Suporte a disponibilidade, pense em estados assincrônicos e copiações - e os usuários mudam as configurações com segurança sem erros ou surpresas.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.