import { Button, ButtonProps } from './button'; import { Loader2 } from 'lucide-react'; import { cn } from '@/lib/utils'; // FE-COMP-001: Add loading states to all async operations /** * ButtonLoadingProps - Propriétés du composant ButtonLoading * * @interface ButtonLoadingProps * @extends ButtonProps */ interface ButtonLoadingProps extends ButtonProps { /** * Si `true`, affiche un spinner et désactive le bouton * * @default false * * @example * ```tsx * * Envoyer * * ``` */ isLoading?: boolean; /** * Texte à afficher pendant le chargement (remplace le contenu du bouton) * Si non fourni, le contenu original est conservé avec le spinner * * @example * ```tsx * * Envoyer * * ``` */ loadingText?: string; } /** * ButtonLoading - Composant de bouton avec état de chargement intégré * * Extension du composant Button avec support pour l'état de chargement. * Affiche automatiquement un spinner et désactive le bouton pendant le chargement. * * FE-COMP-001: Add loading states to all async operations * * @example * ```tsx * // Bouton avec état de chargement * * Envoyer * * ``` * * @example * ```tsx * // Avec texte de chargement personnalisé * * Traiter * * ``` * * @component * @param {ButtonLoadingProps} props - Propriétés du composant (hérite de ButtonProps) * @returns {JSX.Element} Bouton avec spinner et état disabled pendant le chargement */ export function ButtonLoading({ isLoading = false, loadingText, children, disabled, className, ...props }: ButtonLoadingProps) { return ( ); }