rn-media-info-card
v1.0.0
Published
`MediaInfoCard` est un composant React Native réutilisable, conçu pour afficher un média (image, vidéo, etc.) avec un titre, un corps de texte, et des interactions configurables. Il est hautement personnalisable et réactif aux états comme le `focus` ou `h
Readme
📦 MediaInfoCard
MediaInfoCard est un composant React Native réutilisable, conçu pour afficher un média (image, vidéo, etc.) avec un titre, un corps de texte, et des interactions configurables. Il est hautement personnalisable et réactif aux états comme le focus ou hover.
✨ Fonctionnalités
- Affichage flexible d’un média avec overlay
- Support du mode focus avec des attributs spécifiques
- Personnalisation poussée (alignement, taille, poids des textes, radius, etc.)
- Comportements interactifs via
useInfoCard - Rendu optimisé avec
@legendapp/state/reactet<Computed>
📦 Installation
npm install react-native
npm install @legendapp/state🚀 Utilisation
import MediaInfoCard from './MediaInfoCard';
<MediaInfoCard
title="Titre principal"
body="Description brève"
media={<Image source={require('./img.png')} style={{ width: '100%', height: '100%' }} />}
mediaWidth={120}
mediaHeight={120}
mediaRadius={10}
mainColor="#222"
vertical
spacing={16}
/>🧩 Props
| Nom | Type | Description |
|--------------------|--------------------------|-------------|
| title | string \| ReactNode | Titre affiché |
| body | string \| ReactNode | Corps du texte |
| media | ReactNode | Élément média affiché |
| mediaWidth | number | Largeur du média |
| mediaHeight | number | Hauteur du média |
| mediaRadius | number | Rayon des coins du média |
| mediaBorder | number | Bordure autour du média |
| mediaGap | number | Espace entre le média et les textes |
| mediaOverlay | ReactNode | Élément superposé au média |
| mediaSquare | boolean (default: true) | Forcer un format carré |
| mainColor | string | Couleur principale utilisée |
| titleSize | number | Taille du titre |
| titleWeight | string \| number | Poids du titre |
| titleLines | number | Limite de lignes pour le titre |
| bodySize | number | Taille du corps |
| bodyWeight | string \| number | Poids du corps |
| bodyLines | number | Limite de lignes pour le corps |
| vertical | boolean | Affichage vertical des éléments |
| spacing | number (default: 12) | Espacement entre les sections |
| align | "left" \| "center" \| "right" | Alignement du contenu |
| justify | "flex-start" \| "center" \| "flex-end" | Justification du contenu |
| fullWidth | boolean | Utiliser toute la largeur disponible |
| focus | boolean | État focus (surbrillance) |
| hoverable | boolean | Applique un effet de hover |
| lighterHighlight | boolean | Applique un surlignage clair |
| radius | number (default: 5) | Rayon des coins de la carte |
| adaptWidthToMedia| boolean | Adapter la largeur du container au média |
| attrsOnFocus | Partial<MediaInfoCardProps> | Props à appliquer en mode focus |
⚙️ Interactions dynamiques comme
resolvePress,resolveMediaPress, etc. sont gérées viauseInfoCard.
🧠 Architecture
components/: composants atomiques réutilisableshooks/useInfoCard.ts: logique métier et gestion des press handlersMediaInfoCard.tsx: wrapper principaltypes/MediaInfoCardProps.ts: typage des props
📄 Licence
MIT
