Toggle
Botão de dois estados para alternar uma opção binária
Toggle é um botão pressionável que mantém estado "ligado" ou "desligado" — clássico de barras de formatação (negrito, itálico) e filtros rápidos. Para grupos mutuamente exclusivos ou múltiplos toggles coordenados, use ToggleGroup.
'use client';
import { Toggle } from '@uranus-workspace/design-system';
import { Bold } from 'lucide-react';
export default function ToggleDefault() {
return (
<Toggle aria-label="Alternar negrito">
<Bold />
</Toggle>
);
}
Variantes
O Toggle tem duas variantes visuais:
default— fundo transparente, ganhabg-accentquando pressionado. Ideal para toolbars densas.outline— borda visível em todos os estados. Ideal quando o toggle aparece isolado ou sobre fundos coloridos.
'use client';
import { Toggle } from '@uranus-workspace/design-system';
import { Italic } from 'lucide-react';
export default function ToggleOutline() {
return (
<Toggle variant="outline" aria-label="Alternar itálico">
<Italic />
Itálico
</Toggle>
);
}
Tamanhos
size="sm" | "default" | "lg" — segue as mesmas proporções do Button.
Uso
import { Toggle } from '@uranus-workspace/design-system';
import { Bold } from 'lucide-react';
<Toggle aria-label="Alternar negrito">
<Bold />
</Toggle>Controle o estado com pressed e onPressedChange quando precisar sincronizar com estado externo:
const [isBold, setIsBold] = useState(false);
<Toggle pressed={isBold} onPressedChange={setIsBold} aria-label="Alternar negrito">
<Bold />
</Toggle>Faça
- Dê um
aria-labelclaro em toggles apenas de ícone — o leitor de tela precisa saber o que está sendo alternado. - Use
variant="default"em toolbars evariant="outline"em formulários isolados. - Mantenha o ícone estável entre os dois estados — a mudança de cor já comunica o estado.
Não faça
- Não use
Togglepara ações que disparam algo imediatamente sem guardar estado — useButton. - Não troque o ícone entre estados pressionado/não pressionado. Isso confunde.
- Não remova o
aria-labelem toggles apenas de ícone.
Acessibilidade
- Construído sobre Radix Toggle — emite
aria-pressed="true" | "false"automaticamente. - Teclado:
EspaçoeEnteralternam o estado. Foco visível viaring. - Toggles apenas de ícone precisam de
aria-label.