Repository navigation
themes
No app-community, cor hardcoded é qualquer cor ou transparência definida diretamente no código, em vez de vir do tema oficial.
Isso inclui:
-
#HEX,rgb(...),rgba(...) -
'white','black','transparent' - opacidades e transparências visuais fixas no componente
- qualquer variação visual decidida localmente no arquivo
A regra correta é:
- As cores devem vir somente do tema atrelado ao
DOMAIN - A fonte oficial desse tema é o fluxo do
DOMAIN -> PeopleDomain -> Theme -> theme.colors -> /themes-colors.css - No frontend, a referência correta é o tema carregado desse domínio e colocado no store
theme.colors - A base persistida desse tema para este trabalho deve ser registrada no arquivo
themes-actual.md
E a restrição mais importante:
- Não usar
defaultCompany.theme - Não usar
currentCompany.theme - Não usar
colors.jscomo atalho de tema, inclusive aliases comocolors.white,colors.blackou semelhantes - Se a cor vier de um arquivo local de cores e não do tema do
DOMAIN, ela continua sendo hardcoded para este fluxo - Mesmo que existam no código hoje, eles não devem ser tratados como fonte correta de cor
- Excecao unica permitida:
app-community/modules/controleonline/ui-manager/src/react/pages/ThemeManagerPage.js - Nessa tela, cores hardcoded sao obrigatorias e permitidas
- Motivo: ela existe para manipular e visualizar cores manualmente sem depender do proprio tema em edicao, evitando perder visibilidade das cores durante o ajuste
- Nunca mexer no layout
- Nunca mexer no backend
- Quando existir estrutura de arquivo pai/filho para cores locais do módulo, não resolver isso agora no fluxo normal
- Esses casos devem ser registrados separadamente como
PAI/FILHO, para tratamento posterior - O objetivo futuro nesses casos é fazer com que os arquivos filhos deixem de depender de cores registradas nos arquivos pais, de modo que essas referências locais possam ser descartadas ao final
Definição importante para este trabalho:
- variável é o nome que usamos para nos referir a uma cor
- conteúdo é a cor que está dentro da variável
Exemplo:
-
background=whitesignifica que a variável se chamabackgrounde que o conteúdo dela éwhite
Então, resumindo em uma frase:
- Valor visual de cor ou transparência só é válido se vier do tema do
DOMAIN; se estiver literal no arquivo ou vier dedefaultCompany/currentCompany, está errado.
#1. Primeiro vamos ler exclusivamente o tema do DOMAIN e registrar no arquivo themes-actual.md:
#- nome da variável
#- valor atual
-
Depois vamos varrer
app-communitymódulo por módulo e arquivo por arquivo. -
Para cada cor/transparência fora da regra do
themes.md, vamos gravar no arquivo themes-todo.md
- no levantamento do
themes-todo.md, bastam duas informacoes:moduloearquivo - nao precisa registrar linha no
themes-todo.md
- Sempre que encontrarmos arquivo de imagem, logo, ícone ou outro asset visual, em qualquer formato, usado de forma hardcoded no módulo:
- registrar no arquivo
images-todo.md - anotar o caminho do arquivo
- anotar onde ele está sendo usado
- anotar se parece ser asset de marca, asset funcional ou asset decorativo
- se houver dúvida sobre tratamento, deixar isso explícito no registro
-
Depois que terminar, revise novamente para ver se não ficou nada para trás.
-
Sempre que registrar conteudo em
themes-actual.mdouthemes-todo.md:
- manter a mesma tabulacao visual para facilitar comparacao
- em
themes-actual.md, alinhar nome da variavel e conteudo na mesma linha
-
Para cada registro no themes-todo.md em MÓDULOS / ARQUIVOS HARDCODED:
-
Se existir no
themes-actual.mda variável com o mesmo nome:
- a comparação deve ser feita pelo nome da variável, e não pelo conteúdo
- removemos do arquivo o conteúdo hardcoded
- substituímos a origem do valor pela variável oficial do tema do
DOMAIN - não trocar por alias local de cores como
colors.white - no código, o objeto de acesso deve ser
theme, e o uso deve seguirtheme.<token> - o objetivo é manter o mesmo papel visual, mas trocar a fonte do valor para o tema carregado do
DOMAIN
exemplo: em themes-actual.md: pageBackground=white no arquivo: background=white
substituir no código para algo equivalente a:
background = theme.colors.pageBackground
- Se no arquivo existir uma variável local com nome ruim, mas que claramente representa um token do tema:
- além de trocar o valor, vamos renomear a variável para o nome canônico do tema exemplo: em themes-actual.md: pageBackground=white no arquivo: xpto=white substituir no código para algo equivalente a: pageBackground = theme.colors.pageBackground
- Se houver um valor hardcoded mas o contexto não for claro o suficiente para mapear com segurança:
- não corrigimos no escuro
- registramos em um bloco de
pendente
- Se existir uma necessidade visual real no código e não houver variável correspondente no tema do banco:
- criamos uma nova variável de tema num arquivo "themes-new.md" (que deve ter o theme local + os novos, para ficar fácil de acompanharmos as mudanças)
- não registramos essa nova variável no
themes-actual.mdantes de ela existir no tema oficial - essa nova variável precisa ser um token semântico do tema, não um apelido técnico de arquivo local
- e depois usamos essa variável no código
- O
themes-todo.mdvira o rastreador operacional:
- o que está hardcoded
- o que foi corrigido
- o que ficou pendente
- e o que precisou nascer como novo token de tema
- no bloco de levantamento do
themes-todo.md, registrar somentemoduloearquivo
- Quando uma correção for feita e registrada no bloco de corrigidos:
- ser bem objetivo
- informar o nome do arquivo
- informar a linha
- mostrar o antes
- mostrar o depois
- Para deixar muito claro o que foi feito, também registrar cada correção em
depara.md:
- módulo / arquivo / linha
- antigo: variável, conteúdo, cor
- novo: variável, conteúdo, cor
- A rotina de trabalho deve manter
depara.mdatualizado a cada troca:
- sempre que um hardcoded for substituído, registrar a troca no momento da correção
- não deixar para preencher depois
- o arquivo
depara.mddeve acompanhar o ritmo dothemes-todo.mde do bloco de corrigidos
exemplo: arquivo: src/react/pages/exemplo/index.js linha: 120 antes: backgroundColor: '#fff' depois: backgroundColor: theme.colors.pageBackground
Quando um estilo precisar usar a cor de fundo principal da tela, a implementação correta deve apontar para o tema carregado no store, e não para um valor literal.
Exemplo de referência:
import {StyleSheet} from 'react-native';
import {useStore} from '@store';
const themeStore = useStore('theme');
const {colors} = themeStore.getters;
const styles = StyleSheet.create({
container: {
backgroundColor: colors.pageBackground,
},
});Padronização de nomes:
-
themeStoredeve ser a referência ao store de tema -
themeColorsdeve ser o objeto bruto vindo dethemeStore.getters.colors -
palettedeve ser o mapa local usado pelo componente para acessar as cores - as chaves da
palettedevem repetir os nomes canônicos do tema, por exemplopageBackground,cardBackground,textPrimary - o uso no style deve seguir
palette.<token>oucolors.<token>quando o arquivo trabalhar direto com o store - esse padrão deve ser seguido em todos os arquivos novos ou ajustados, tomando
Profile.jscomo referência de estrutura
Interpretação técnica:
-
backgroundColornão deve receber#HEX,white,rgba(...)ou qualquer outro valor hardcoded - o valor deve vir de
themeStore.getters.colors.<tokenCanonico> - para isso, o arquivo precisa importar
useStoree declarar o acesso aothemeStoreantes de montar o style - o token deve ser usado de forma direta, sem fallback, sem alias alternativo e sem tentativa de "adivinhar" outra cor
- não usar
tokens basegenéricos - usar sempre os nomes canônicos definidos em
themes-map.md, conforme o objeto visual real - exemplo correto:
backgroundColor: colors.pageBackground - exemplo incorreto:
backgroundColor: colors.pageBackground || colors.primary || '#FFFFFF' - a mesma regra vale para qualquer outro papel visual, por exemplo:
buttonBackground -> themeStore.getters.colors.buttonBackgroundcardBackground -> themeStore.getters.colors.cardBackgroundinputBackground -> themeStore.getters.colors.inputBackgroundtextSecondary -> themeStore.getters.colors.textSecondary - isso cria uma dependência direta entre o componente e o tema ativo
- com isso, o fundo da tela passa a responder ao tema carregado para o
DOMAIN, sem precisar alterar o código da tela - esse é o comportamento esperado para qualquer token semântico equivalente, não apenas
background