Indicateurs graphiques (stat)¶
Pour l’affichage d’indicateurs (statistiques, KPIs, dashboard), on privilégie un display inspiré du composant stat de FlyonUI :
Exemple :
<div class="stats">
<div class="stat">
<div class="stat-figure text-base-content size-8">
<span class="icon-[tabler--world] size-8"></span>
</div>
<div class="stat-title">Website Traffic</div>
<div class="stat-value">32K</div>
<div class="stat-desc">5% ↗︎ than last week</div>
</div>
<div class="stat">
<div class="stat-figure text-base-content size-8">
<span class="icon-[tabler--users-group] size-8"></span>
</div>
<div class="stat-title">New Signups</div>
<div class="stat-value">1.2K</div>
<div class="stat-desc">12% increase this month</div>
</div>
<div class="stat">
<div class="stat-figure size-12">
<div class="avatar">
<div class="size-12 rounded-full">
<img
src="https://cdn.flyonui.com/fy-assets/avatar/avatar-2.png"
alt="User Avatar"
/>
</div>
</div>
</div>
<div class="stat-value text-success">95%</div>
<div class="stat-title">Customer Retention</div>
<div class="stat-desc">Steady over last quarter</div>
</div>
</div>
Référence : FlyonUI Stat Component
Ce style est recommandé pour les dashboards et les pages d’indicateurs clés.
Composants & UI¶
Organisation¶
- Par feature :
/src/components/{feature}/ - UI générique :
/src/components/ui/
shadcn/ui¶
- Utilisation de composants shadcn pour rapidité et cohérence
- Customisation via Tailwind
Exemples¶
BikeCard: Affichage d’un véloStravaConnectButton: Connexion à StravaDashboardSidebar: Navigation dashboard
Bonnes pratiques¶
- Props typées
- Composants réutilisables et testables
- Préférer la composition à l’héritage
Icônes (Design System)¶
- Librairie unique : Lucide (
lucide-react) - Règle : Utiliser exclusivement Lucide pour toutes les icônes UI (navigation, boutons, cards, feedback, etc.)
- Style : Taille par défaut 24px,
stroke-width2, couleurcurrentColor(hérite du texte) - Astuces :
- Pour les icônes custom, privilégier un équivalent Lucide ou soumettre une PR à Lucide
- Pas de mélange avec Heroicons, Material, FontAwesome, etc.
- Exceptions : Quelques SVG inline subsistent (ex : super-admin-user-accounts). À migrer vers Lucide si possible.
Mapping Lucide par concept¶
| Concept | Icône Lucide principale | Alternatives Lucide |
|---|---|---|
| Notification | Bell | BellRing |
| Support / Ticket | LifeBuoy, HelpCircle, Ticket | MessagesSquare |
| Utilisateur / Compte | User, UserCircle, Users | Avatar |
| Édition | Edit | |
| Déverrouillage | Unlock | |
| Maintenance | Wrench, Tools | AlertTriangle, CheckCircle2 |
| Message / Discussion | MessagesSquare, Mail | ChatBubble, Comment |
| Paramètres / Admin | Settings, Gear | SlidersHorizontal |
| Dashboard | LayoutDashboard | |
| Sidebar / Menu | Menu, Sidebar | |
| Vélo | Bike, Activity | |
| Santé / Diagnostic | HeartPulse, Stethoscope | ShieldCheck |
| Push / Système | BellRing | |
| Carte / Stack | Layers, Cards | |
| Onglet / Navigation | Tab, ArrowRightLeft | |
| Intégration / Connexion | Link2, Plug, LogIn, LogOut |
Règles complémentaires¶
- Choisir l’icône la plus explicite pour chaque concept métier.
- Documenter chaque mapping ici pour garantir la cohérence visuelle.
- Toute exception (SVG custom) doit être justifiée et documentée.
Exemple d’import :
import { Bike, Wrench, LogOut } from "lucide-react";
Exemple d’utilisation :
<Bike className="w-6 h-6 text-blue-500" />