SWDay Framework
Toggle de tema escuro/claro com persistência em localStorage, sincronização entre abas, detecção de preferência do sistema e atalho de teclado - zero configuração.
1. Demo
O botão no header desta página já está ativo. Clique e veja toda a documentação mudar de tema.
Botões de toggle - adicione sw-day em qualquer elemento
2. Como funciona
SWDay adiciona sw-theme="dark|light" no elemento
<html> e sobrescreve as variáveis CSS semânticas do SW.
Tema escuro (padrão SW)
Tema claro
/* Variáveis semânticas gerenciadas automaticamente pelo SWDay */
html[sw-theme="light"] {
--sw-bg-bas: var(--sw-neu-1);
--sw-bg-sur: var(--sw-neu-2);
--sw-bg-sec: var(--sw-neu-3);
--sw-txt-bas: var(--sw-neu-12);
--sw-txt-mut: var(--sw-neu-8);
--sw-bor: var(--sw-neu-4);
}
3. Sincronização de Mídia
Alterne imagens e fundos automaticamente sem escrever uma linha de CSS extra.
Troca de Imagem (src)
Background Image
4. Sincronização de Fontes
Alterne a tipografia conforme o ambiente para máxima legibilidade.
Esta fonte muda conforme o tema!
No tema claro usamos Sans-Serif (Outfit), no escuro usamos Mono (JetBrains).
5. Persistência + Sistema
O tema — salvo automaticamente e sincronizado entre abas.
Fluxo de decisão
sw-theme salvo?
prefers-color-scheme
dark
Recursos automáticos
6. API JavaScript
Controle programático completo.
// Setar tema
SWDay.set('dark');
SWDay.set('light');
// Toggle (dark → light → dark)
SWDay.toggle();
// Ler tema atual
console.log(SWDay.theme); // 'dark' | 'light'
// Escutar mudança de tema
document.documentElement.addEventListener('sw:theme:change', (e) => {
console.log('Tema:', e.detail.theme);
// atualizar gráficos, ícones, etc.
});
// Exemplo real: sincronizar Chart.js com o tema
document.documentElement.addEventListener('sw:theme:change', ({ detail }) => {
const isDark = detail.theme === 'dark';
myChart.options.scales.x.grid.color = isDark ? '#333' : '#ddd';
myChart.options.scales.y.grid.color = isDark ? '#333' : '#ddd';
myChart.update();
});
7. Quick Reference
| Atributo / API | Ação |
|---|---|
sw-day |
Transforma elemento em botão de toggle |
sw-day-demo |
Marca um sw-day como exemplo — não impede o FAB padrão de aparecer |
<html sw-day-no-fab> |
Desativa o FAB padrão nesta página (mesmo sem nenhum botão próprio) |
<html sw-day-lock="dark|light"> |
Trava o tema — desativa toggle, atalho, storage e some com qualquer botão |
sw-day-img-[theme] |
Troca o src da imagem ao mudar de tema |
sw-day-bg-[theme] |
Troca o background-image ou cor ao mudar de tema |
sw-day-font-[theme] |
Troca a família de fonte ao mudar de tema |
SWDay.set(theme) |
Altera o tema via JS - 'light' | 'dark' |
SWDay.toggle() |
Inverte o tema atual |
SWDay.theme |
Retorna o tema ativo atualmente |
sw:theme:change |
Evento disparado no <html> ao trocar de tema |