BackgroundIcon
Un conteneur décoratif qui affiche une icône sur un fond coloré (cercle ou squircle), avec une opacité de 20 % appliquée à la couleur de fond.
Import
import { BackgroundIcon } from "@/components/BackgroundIcon";
Utilisation basique
<BackgroundIcon Icon={<InfoIcon />} color="#2468C1" />
Forme
Le prop squircle bascule entre un fond circulaire (borderRadius: 50, comportement par défaut) et un fond "squircle".
<BackgroundIcon
Icon={<CheckCircleIcon />}
color="#33B3A0"
/>
<BackgroundIcon
Icon={<CheckCircleIcon />}
color="#33B3A0"
squircle
/>
borderRadius: 50 avec cornerShape: squircle
Lorsque squircle est activé, borderRadius reste fixé à 50 (valeur pensée pour un cercle) pendant que cornerShape passe à 'squircle'. Le rendu final dépend donc du support de corner-shape par le navigateur — voir la note ci-dessous.
Couleur
Le prop color définit la couleur de fond de l'icône. En interne, la couleur est utilisée telle quelle pour l'icône passée en enfant (Icon), et avec un suffixe d'opacité 33 (~20 %) pour le fond.
<BackgroundIcon
Icon={<ErrorIcon sx={{ color: "#EA605D" }} />}
color="#EA605D"
/>
Cohérence avec la couleur de l'icône
BackgroundIcon ne colore pas automatiquement l'icône passée en Icon — seul le fond est teinté. Pense à styliser l'icône elle-même avec la même couleur pour un rendu cohérent, comme dans l'exemple ci-dessus.
Format de couleur requis
Le calcul d'opacité repose sur la concaténation ${color}33 : color doit impérativement être une valeur hexadécimale (#RRGGBB), sous peine de générer une couleur de fond invalide.
API
Props
| Prop | Type | Défaut | Description |
|---|---|---|---|
Icon |
ReactNode |
— | Requis. Icône affichée au centre du fond coloré. |
color |
string |
— | Requis. Couleur hexadécimale utilisée pour le fond (à 20 % d'opacité). |
squircle |
boolean |
false |
Active un fond "squircle" au lieu d'un fond circulaire. |
Pas de prop sx
BackgroundIcon n'expose pas de prop sx ni de props Box supplémentaires : le style est entièrement géré en interne via la fonction Styles.
Détails d'implémentation
- Le fond est un
Boxendisplay: flexavec unpaddingdetheme.spacing(1), permettant à l'icône enfant d'être naturellement centrée si elle-même n'a pas de dimensions fixes en conflit. - Les styles sont calculés par une fonction
Styles(theme, color, squircle)externe au composant, plutôt qu'unuseMemointerne, il n'y a donc pas de mémoïsation basée sur les dépendances : les styles sont recalculés à chaque rendu. cornerShape: 'unset'est utilisé comme valeur par défaut plutôt que d'omettre la propriété, pour explicitement réinitialiser un éventuelcornerShapehérité du thème.
Support navigateur de cornerShape
La propriété CSS corner-shape fait partie d'une spécification CSS récente et n'est pas supportée par tous les navigateurs. Prévoir un fallback visuel acceptable (le cercle via borderRadius: 50 reste appliqué en toutes circonstances) si squircle est utilisé sur un navigateur non compatible.
Accessibilité
BackgroundIcon étant un conteneur purement visuel, l'icône passée via Icon doit porter elle-même les attributs d'accessibilité nécessaires (aria-hidden="true" si décorative, ou aria-label si elle véhicule une information non redondante avec du texte adjacent).