/// UnionFlow Secondary Button - Bouton secondaire /// /// Bouton secondaire avec la couleur Indigo (#6366F1) /// Utilisé pour les actions secondaires (annuler, retour, etc.) library uf_secondary_button; import 'package:flutter/material.dart'; import '../../unionflow_design_system.dart'; /// Bouton secondaire UnionFlow class UFSecondaryButton extends StatelessWidget { final String label; final VoidCallback? onPressed; final bool isLoading; final IconData? icon; final bool isFullWidth; final double? height; const UFSecondaryButton({ super.key, required this.label, this.onPressed, this.isLoading = false, this.icon, this.isFullWidth = false, this.height, }); @override Widget build(BuildContext context) { return SizedBox( width: isFullWidth ? double.infinity : null, height: height ?? SpacingTokens.buttonHeightLarge, child: ElevatedButton( onPressed: isLoading ? null : onPressed, style: ElevatedButton.styleFrom( backgroundColor: AppColors.brandGreen, foregroundColor: Colors.white, disabledBackgroundColor: AppColors.brandGreen.withOpacity(0.5), disabledForegroundColor: Colors.white.withOpacity(0.7), elevation: SpacingTokens.elevationSm, shadowColor: AppColors.darkBorder.withOpacity(0.1), padding: const EdgeInsets.symmetric( horizontal: SpacingTokens.buttonPaddingHorizontal, vertical: SpacingTokens.buttonPaddingVertical, ), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(SpacingTokens.radiusLg), ), ), child: isLoading ? const SizedBox( height: 20, width: 20, child: CircularProgressIndicator( strokeWidth: 2, valueColor: AlwaysStoppedAnimation( Colors.white, ), ), ) : Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ if (icon != null) ...[ Icon(icon, size: 20), const SizedBox(width: SpacingTokens.md), ], Text( label, style: AppTypography.actionText, ), ], ), ), ); } }