import React, { CSSProperties, useRef, useState } from 'react'; type NiceImgProps = React.HTMLAttributes & // Allow div props React.ImgHTMLAttributes & { fallbackSrc?: string; shape?: 'circle' | 'square'; // Shape of the avatar size?: 'small' | 'default' | 'large' | number; // Size of the avatar className?: string; }; const getSize = (size: 'small' | 'default' | 'large' | number) => { switch (size) { case 'small': return 24; case 'large': return 64; case 'default': default: return 30; } }; const NiceImg: React.FC = ({ src, alt, fallbackSrc, shape = 'square', size = 'default', style, className, ...props }) => { const [isError, setIsError] = useState(false); const imgRef = useRef(null); const dimension = typeof size === 'number' ? size : getSize(size); const combinedStyle: CSSProperties = { width: dimension, height: dimension, borderRadius: shape === 'circle' ? '50%' : '4px', objectFit: 'cover', ...style, }; const handleError = () => { setIsError(true); }; return ( <> {isError || !src ? (
{fallbackSrc && fallback}
) : ( {alt} )} ); }; export default NiceImg;