Theming
Os componentes tiram suas cores de variáveis CSS. Para mudar o tema, você edita essas variáveis e não precisa mexer nos componentes.
Onde ficam os tokens
Em vendor/shadwire/shadwire.css. O shadwire init
instala esse arquivo e o importa no entrypoint do Tailwind do app, cujo caminho aparece em
tailwind.css no bin/shadwire status --json.
O arquivo tem três camadas:
O @theme inline transforma --primary nos
utilitários bg-primary e text-primary. As cores
estão em OKLCH.
Edite :root e .dark, nunca o @theme inline
@theme inline só liga cada variável a um utilitário do Tailwind. As
cores em si ficam nos blocos :root (claro) e .dark (escuro).
Os tokens
Cada token de fundo tem um token -foreground para o texto que vai por
cima. Use os dois juntos, como em bg-muted text-muted-foreground, em
vez de bg-muted com a cor de texto padrão.
| Token | Controla | Usado por |
|---|---|---|
background / foreground |
Fundo da aplicação e texto padrão | Estrutura da página, seções, texto padrão |
card / card-foreground |
Superfícies elevadas | Card, painéis de dashboard e de configurações |
popover / popover-foreground |
Superfícies flutuantes | Popover, DropdownMenu, ContextMenu, overlays |
primary / primary-foreground |
Ações de alta ênfase, marca | Button padrão, estados selecionados, badges |
secondary / secondary-foreground |
Ações preenchidas de menor ênfase | Botões e badges secundários |
muted / muted-foreground |
Superfícies sutis, conteúdo secundário | Descrições, placeholders, estados vazios, textos de apoio |
accent / accent-foreground |
Superfícies de hover, foco e ativo | Botões ghost, destaque de menu, linhas sob o cursor |
destructive / destructive-foreground |
Ações destrutivas, erros | Botões destrutivos, estados inválidos |
border |
Bordas e separadores | Cards, menus, tabelas, divisores |
input |
Bordas de controles de formulário | Input, Textarea, Select, controles outline |
ring |
Anéis de foco | Botões, inputs, checkboxes, menus |
chart-1 … chart-5 |
Paleta de gráficos | Charts e blocks orientados a gráfico |
sidebar / sidebar-foreground |
Superfície e texto da sidebar | O contêiner da Sidebar |
sidebar-primary / -foreground |
Ações de alta ênfase na sidebar | Itens ativos, blocos com ícone, CTAs |
sidebar-accent / -foreground |
Hover e seleção na sidebar | Hover de menu, itens abertos |
sidebar-border |
Bordas da sidebar | Cabeçalhos, grupos e divisores da sidebar |
sidebar-ring |
Anéis de foco da sidebar | Controles com foco na sidebar |
radius |
Raio de canto base | Cards, inputs, botões, popovers |
Trocando a cor da marca
Defina --primary e --primary-foreground nos dois
blocos, e todo componente que usa bg-primary passa a usar a nova cor.
Escolha um foreground com contraste suficiente sobre a nova cor primária e confira nos modos claro e escuro.
Adicionando um token
Declare a variável nos dois blocos e mapeie no @theme inline para o
Tailwind gerar os utilitários:
A partir daí bg-success e
text-success-foreground funcionam como qualquer outro token.
Raio de canto
radius-sm, radius-md e
radius-lg são calculados a partir de --radius,
então mudar esse valor muda os cantos de cards, inputs, botões e popovers de uma vez.
Adicionando uma variante
As variantes são hashes Ruby congelados dentro da classe do componente. Como o arquivo é seu, criar uma variante é só acrescentar uma chave:
Isso conta como edição local: o bin/shadwire diff vai marcar o
arquivo como modified, e o bin/shadwire update
sobrescreveria a mudança.
Mantendo suas edições
bin/shadwire diff <nome>: veja o que você mudou.-
bin/shadwire update <nome>sem--yes: ele pergunta arquivo por arquivo e mostra o diff de cada um. - Refaça suas edições em cima da versão nova.
Sempre que der, acrescente (uma variante nova, um token novo) em vez de reescrever classes que já existem. Acréscimos são bem mais fáceis de manter quando você atualiza.