Aller au contenu principal

Theme

Theme par défaut de Reactic.

info

Cette partie dépend de la librairie styled-components.

Références

Le thème de base de Reactic est composé de plusieurs éléments :

  • size : définition des tailles de base des fonts.
  • zIndex : définition des z-index de base.
  • weights : définition des poids de base des fonts.

Tailles de fonts

Le nommage des tailles est basé sur l'univers du Seigneur des Anneaux. Voir ici

const size = {
silmaril: '0.625rem', // 10px
ring: '0.75rem', // 12px
palantir: '0.875rem', // 14px
gollum: '1rem', // 16px
hobbit: '1.125rem', // 18px
anduril: '1.25rem', // 20px
gimli: '1.375rem', // 22px
gandalf: '1.5rem', // 24px
nazgul: '1.625rem', // 26px
legolas: '1.75rem', // 28px
aragorn: '1.875rem', // 30px
sauron: '2rem', // 32px
shelob: '2.125rem', // 34px
treebeard: '2.25rem', // 36px,
troll: '2.375rem', // 38px,
fellbeast: '2.5rem', // 40px
balrog: '2.625rem', // 42px
mumakil: '2.75rem', // 44px
grond: '2.875rem', //46px
};

Z-index

const zIndex = {
loader: 1000,
notification: 600,
modal: 400,
fullscreenModal: 350,
search: 300,
sidebar: 200,
};

Poids de fonts

const weight = {
thin: 100,
light: 300,
regular: 400,
medium: 500,
bold: 700,
black: 900,
};

Utilisation

Lors de l'initialisation d'une application, afin d'utiliser le thème par défaut de Reactic, il faut utiliser la composant ThemeProvider de styled-components :

import { theme } from '@creatic/reactic-styles';
import { ThemeProvider } from 'styled-components';

const App = () => (
<ThemeProvider theme={theme}>
<div>...</div>
</ThemeProvider>
);

Extension du thème

Il est possible d'étendre le thème de base de Reactic en utilisant la fonction merge :

import { theme } from '@creatic/reactic-styles';
import { merge } from '@creatic/reactic-utils';

const newTheme = {
color: {
red50: '#ff0000',
},
};

const myTheme = merge(theme, newTheme);

const App = () => (
<ThemeProvider theme={myTheme}>
<div>...</div>
</ThemeProvider>
);

Typescript

Afin de définir implicitement le type du thème, il est possible de créer un fichier de déclaration de module styled.d.ts :

import 'styled-components';

import theme from './theme';

type TThemeType = typeof theme;

declare module 'styled-components' {
// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface DefaultTheme extends TThemeType {}
}