theme provider
Configure temas predefinidos ou personalizados e mantenha a compatibilidade com styled-components quando necessário.
uso
O ThemeProviderV2 recebe um objeto de tema e permite utilizar os tokens
predefinidos ou personalizados da aplicação.
Na v3, os componentes são estilizados com CSS variables. Importe o CSS dos tokens e dos componentes uma vez na entrada da aplicação:
import '@olist/design-system-tokens/css/index.css';
import '@olist/design-system/styles.css';Se sua aplicação também utiliza o pacote @olist/templates, importe o CSS dele
na entrada da aplicação:
import '@olist/templates/dist/styles.css';quando o provider é opcional
O index.css aplica o tema padrão olist/base em :root. Por isso, aplicações
que usam somente esse tema não precisam envolver a árvore com um provider:
import '@olist/design-system-tokens/css/index.css';
import '@olist/design-system/styles.css';
const App = () => <main>...</main>;Utilize um provider quando precisar selecionar outro tema, aplicar temas em escopos diferentes, fornecer um objeto de tokens personalizado ou fazer os hooks do design system refletirem um tema diferente do padrão.
ThemeProviderV2
Utilize a propriedade theme para fornecer o objeto de tokens. Ao selecionar um
tema diferente do padrão, importe também seu arquivo CSS:
import { ThemeProviderV2 } from '@olist/design-system';
import { themes } from '@olist/design-system-tokens';
import '@olist/design-system-tokens/css/index.css';
import '@olist/design-system-tokens/css/themes/erp/base.css';
import '@olist/design-system/styles.css';
const App = () => (
<ThemeProviderV2 theme={themes.erp.base} themeName="erp" variation="base">
...
</ThemeProviderV2>
);Os valores recebidos são disponibilizados como CSS variables no escopo do
provider. As propriedades opcionais themeName e variation identificam esse
escopo no atributo data-ds-theme.
Temas disponíveis: olist, erp e erp-dark.
aplicações com styled-components
O design system não depende mais de styled-components. Os imports do pacote
principal não adicionam o tema ao contexto do styled-components da aplicação.
Se a aplicação possui componentes próprios que acessam tokens por
theme.olist.*, importe o provider pelo subpath opcional
@olist/design-system/styled-components:
import { ThemeProviderV2 } from '@olist/design-system/styled-components';
import { themes } from '@olist/design-system-tokens';
const App = () => (
<ThemeProviderV2 theme={themes.olist.base} themeName="olist">
...
</ThemeProviderV2>
);Essa integração injeta { olist: tokens } no contexto do styled-components e
adiciona a tipagem de theme.olist ao DefaultTheme. A dependência
styled-components é opcional e só é necessária em projetos com componentes
próprios que utilizam esse pacote e acessam theme.olist.*.
O subpath não substitui os imports de CSS apresentados no início desta página.
Utilize o mesmo import no wrapper dos testes para que esses componentes também recebam o tema.
acessando o tema em JavaScript
O hook useTheme retorna o tema no formato { olist: tokens }. Use o objeto
apenas quando precisar ler tokens em JavaScript; para estilos, prefira as CSS
variables.
import { useTheme } from '@olist/design-system';
const App = () => {
const theme = useTheme();
return (
<button
style={{
backgroundColor: theme.olist.color.primary.base,
}}
>
Primary
</button>
);
};
export default App;Você pode encontrar todas as propriedades disponíveis no objeto theme em sua
respectiva página dentro da seção "fundamentos".