import React from 'react'; import { X, ChevronLeft, ChevronRight, Download } from 'lucide-react'; /** * ImageViewerModalProps - Propriétés du composant ImageViewerModal * * @interface ImageViewerModalProps */ interface ImageViewerModalProps { /** * URL de l'image à afficher */ src: string; /** * Texte alternatif de l'image */ alt?: string; /** * Fonction appelée pour fermer le visualiseur */ onClose: () => void; /** * Fonction appelée pour passer à l'image suivante */ onNext?: () => void; /** * Fonction appelée pour passer à l'image précédente */ onPrev?: () => void; /** * Si `true`, affiche le bouton suivant */ hasNext?: boolean; /** * Si `true`, affiche le bouton précédent */ hasPrev?: boolean; } /** * ImageViewerModal - Composant de visualisation d'image en plein écran * * Composant modal pour afficher une image en plein écran avec : * - Navigation entre images (précédent/suivant) * - Téléchargement de l'image * - Fermeture avec bouton ou Escape * - Fond sombre avec backdrop blur * * @example * ```tsx * // Visualiseur simple * setShowViewer(false)} * /> * ``` * * @example * ```tsx * // Avec navigation * setShowViewer(false)} * onNext={() => setCurrentIndex(i => i + 1)} * onPrev={() => setCurrentIndex(i => i - 1)} * hasNext={currentIndex < images.length - 1} * hasPrev={currentIndex > 0} * /> * ``` * * @component * @param {ImageViewerModalProps} props - Propriétés du composant * @returns {JSX.Element} Modal plein écran avec image et contrôles */ export const ImageViewerModal: React.FC = ({ src, alt, onClose, onNext, onPrev, hasNext, hasPrev, }) => { return (
{/* Toolbar */}
{alt || 'Image Preview'}
{/* Navigation */} {hasPrev && ( )} {hasNext && ( )} {/* Image */}
{alt}
); };