Todos o houston foi pensando para trabalhar junto com o AntD.
Não é necessário importar o css e o ConfigProvider do AntD
Utilizamos o emotion como engine de styled component.
No arquivo raiz de seu projeto, defina sua paleta de cores e adicione o provedor da seguinte maneira:
Configure o ThemeProvider no componente raiz.
Pronto.
1import ThemeProvider, { createTheme } from '@eduzz/houston-ui/ThemeProvider';23const theme = createTheme('eduzz'); // ou um hex: '#0D47A1'45<ThemeProvider theme={theme}>...</ThemeProvider>;
Ainda em BETA.
Basta configurar no ThemeProvider a prop mode
.
1<ThemeProvider theme={theme} mode='dark'>2...3</ThemeProvider>
Caso seja necessário você pode adicionar variáveis extras no theme, que ficarão acessiveis pelo theme.variables.
1import ThemeProvider, { createTheme } from '@eduzz/houston-ui/ThemeProvider';23// declara a definição dessa variáveis para poder tipar pelo typescript4declare module '@eduzz/houston-ui/ThemeProvider' {5interface HoustonThemeCustomVariables {6customVar: string;7customObject: { prop: number; };8}9}1011const theme = createTheme('eduzz', {12customVar: 'custom value',13customObject: { prop: 1 };14});1516<ThemeProvider theme={theme}>...</ThemeProvider>;
Se estiver usando o VsCode instale a extensão vscode-styled-components
1import styled from '@emotion/styled';23const Component: React.FC<{ className?: string }> = ({ className }) => {4return <div className={className} />;5};67export default styled(Component)`8background-color: red;9`;
Se criar um component que será muito utilizado (ex. button, typography) não acesse as props dentro do styled, se não cada instância do componente terá sua própria classe invês de compartilhar a mesma.
Veja o exemplo a seguir:
1import styled from '@emotion/styled';23const Component: React.FC<{ active: boolean; className?: string }> = ({ className }) => {4return <div className={className} />;5};67export default styled(Component)`8background-color: ${({ theme, active }) => (active ? theme.primaryColor : 'grey')};9`;
Prefira criar uma classe a auxiliar e adicionar essa classe dependendo da prop:
1import styled from '@emotion/styled';2import { cx } from '@emotion/css';34const Component: React.FC<{ active: boolean; className?: string }> = ({ className }) => {5return <div className={cx(className, { 'is-active': active })} />;6};78export default styled(Component)`9background-color: grey;1011&.is-active {12/* O theme pode ser acessado sem problemas */13background-color: ${({ theme }) => theme.primaryColor};14}15`;
Caso queria apenas utlizar as variáveis sem criar um estilo é possível utilizar esse hook.
1import { useTheme } from '@emotion/react';23const ComponentsDev = memo<IProps>(props => {4const theme = useTheme();5return <div>Color: {theme.primaryColor}</div>;6});