# Guide du Design System UnionFlow ## 📋 Table des matières 1. [Introduction](#introduction) 2. [Tokens](#tokens) 3. [Composants](#composants) 4. [Bonnes pratiques](#bonnes-pratiques) --- ## Introduction Le Design System UnionFlow garantit la cohérence visuelle et l'expérience utilisateur dans toute l'application. **Palette de couleurs** : Bleu Roi (#4169E1) + Bleu Pétrole (#2C5F6F) **Basé sur** : Material Design 3 et tendances UI/UX 2024-2025 ### Import ```dart import 'package:unionflow_mobile_apps/shared/design_system/unionflow_design_system.dart'; ``` --- ## Tokens ### 🎨 Couleurs (ColorTokens) ```dart // Primaire ColorTokens.primary // Bleu Roi #4169E1 ColorTokens.onPrimary // Blanc #FFFFFF ColorTokens.primaryContainer // Container bleu roi // Sémantiques ColorTokens.success // Vert #10B981 ColorTokens.error // Rouge #DC2626 ColorTokens.warning // Orange #F59E0B ColorTokens.info // Bleu #0EA5E9 // Surfaces ColorTokens.surface // Blanc #FFFFFF ColorTokens.background // Gris clair #F8F9FA ColorTokens.onSurface // Texte principal #1F2937 ColorTokens.onSurfaceVariant // Texte secondaire #6B7280 // Gradients ColorTokens.primaryGradient // [Bleu Roi, Bleu Roi clair] ``` ### 📏 Espacements (SpacingTokens) ```dart SpacingTokens.xs // 2px SpacingTokens.sm // 4px SpacingTokens.md // 8px SpacingTokens.lg // 12px SpacingTokens.xl // 16px SpacingTokens.xxl // 20px SpacingTokens.xxxl // 24px SpacingTokens.huge // 32px SpacingTokens.giant // 48px ``` ### 🔘 Rayons (SpacingTokens) ```dart SpacingTokens.radiusXs // 2px SpacingTokens.radiusSm // 4px SpacingTokens.radiusMd // 8px SpacingTokens.radiusLg // 12px - Standard pour cards SpacingTokens.radiusXl // 16px SpacingTokens.radiusXxl // 20px SpacingTokens.radiusCircular // 999px - Boutons ronds ``` ### 🌑 Ombres (ShadowTokens) ```dart ShadowTokens.xs // Ombre minimale ShadowTokens.sm // Ombre petite (cards, boutons) ShadowTokens.md // Ombre moyenne (cards importantes) ShadowTokens.lg // Ombre large (modals, dialogs) ShadowTokens.xl // Ombre très large (éléments flottants) // Ombres colorées ShadowTokens.primary // Ombre avec couleur primaire ShadowTokens.success // Ombre verte ShadowTokens.error // Ombre rouge ``` ### ✍️ Typographie (TypographyTokens) ```dart TypographyTokens.displayLarge // 57px - Titres héroïques TypographyTokens.headlineLarge // 32px - Titres de page TypographyTokens.headlineMedium // 28px - Sous-titres TypographyTokens.titleLarge // 22px - Titres de section TypographyTokens.titleMedium // 16px - Titres de card TypographyTokens.bodyLarge // 16px - Corps de texte TypographyTokens.bodyMedium // 14px - Corps standard TypographyTokens.labelLarge // 14px - Labels TypographyTokens.labelSmall // 11px - Petits labels ``` --- ## Composants ### 📦 UFCard - Card standardisé ```dart // Card avec ombre (par défaut) UFCard( child: Text('Contenu'), ) // Card avec bordure UFCard.outlined( borderColor: ColorTokens.primary, child: Text('Contenu'), ) // Card avec fond coloré UFCard.filled( color: ColorTokens.primaryContainer, child: Text('Contenu'), ) // Card cliquable UFCard( onTap: () => print('Cliqué'), child: Text('Contenu'), ) ``` ### 📦 UFContainer - Container standardisé ```dart // Container standard UFContainer( child: Text('Contenu'), ) // Container arrondi UFContainer.rounded( color: ColorTokens.primary, padding: EdgeInsets.all(SpacingTokens.lg), child: Text('Contenu'), ) // Container avec ombre UFContainer.elevated( child: Text('Contenu'), ) // Container circulaire UFContainer.circular( width: 48, height: 48, color: ColorTokens.primary, child: Icon(Icons.person), ) ``` ### 📊 UFStatCard - Card de statistiques ```dart UFStatCard( title: 'Membres', value: '142', icon: Icons.people, iconColor: ColorTokens.primary, subtitle: '+5 ce mois', onTap: () => navigateToMembers(), ) ``` ### ℹ️ UFInfoCard - Card d'information ```dart UFInfoCard( title: 'État du système', icon: Icons.health_and_safety, iconColor: ColorTokens.success, trailing: Badge(label: Text('OK')), child: Column( children: [ Text('Tous les systèmes fonctionnent normalement'), ], ), ) ``` ### 🎯 UFHeader - Header de page ```dart UFHeader( title: 'Tableau de bord', subtitle: 'Vue d\'ensemble de votre activité', icon: Icons.dashboard, onNotificationTap: () => showNotifications(), onSettingsTap: () => showSettings(), ) ``` ### 📱 UFAppBar - AppBar standardisé ```dart UFAppBar( title: 'Détails du membre', actions: [ IconButton( icon: Icon(Icons.edit), onPressed: () => edit(), ), ], ) ``` ### 🔘 Boutons ```dart // Bouton primaire UFPrimaryButton( text: 'Enregistrer', onPressed: () => save(), icon: Icons.save, ) // Bouton secondaire UFSecondaryButton( text: 'Annuler', onPressed: () => cancel(), ) ``` --- ## Bonnes pratiques ### ✅ À FAIRE ```dart // ✅ Utiliser les tokens Container( padding: EdgeInsets.all(SpacingTokens.xl), decoration: BoxDecoration( color: ColorTokens.surface, borderRadius: BorderRadius.circular(SpacingTokens.radiusLg), boxShadow: ShadowTokens.sm, ), ) // ✅ Utiliser les composants UFCard( child: Text('Contenu'), ) ``` ### ❌ À ÉVITER ```dart // ❌ Valeurs hardcodées Container( padding: EdgeInsets.all(16), decoration: BoxDecoration( color: Color(0xFFFFFFFF), borderRadius: BorderRadius.circular(12), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.05), blurRadius: 10, offset: Offset(0, 2), ), ], ), ) // ❌ Card Flutter standard Card( elevation: 2, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), child: Text('Contenu'), ) ``` ### 📐 Hiérarchie des espacements - **xs/sm** : Éléments très proches (icône + texte) - **md/lg** : Espacement interne standard - **xl/xxl** : Espacement entre sections - **xxxl+** : Grandes séparations ### 🎨 Hiérarchie des couleurs 1. **primary** : Actions principales, navigation active 2. **secondary** : Actions secondaires 3. **success/error/warning** : États et feedbacks 4. **surface/background** : Fonds et containers ### 🌑 Hiérarchie des ombres - **xs/sm** : Cards et boutons standards - **md** : Cards importantes - **lg/xl** : Modals, dialogs, éléments flottants - **Colorées** : Éléments avec accent visuel --- ## 🔄 Migration Pour migrer du code existant : 1. Remplacer `Card` par `UFCard` 2. Remplacer `Container` personnalisés par `UFContainer` 3. Remplacer couleurs hardcodées par `ColorTokens` 4. Remplacer espacements hardcodés par `SpacingTokens` 5. Remplacer ombres personnalisées par `ShadowTokens` **Exemple** : ```dart // Avant Card( elevation: 2, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), child: Padding( padding: EdgeInsets.all(16), child: Text('Contenu'), ), ) // Après UFCard( child: Text('Contenu'), ) ``` --- **Version** : 1.0.0 **Dernière mise à jour** : 2025-10-05