File size: 1,019 Bytes
88c4c60 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | "use client";
import { useState } from "react";
import PropTypes from "prop-types";
export default function ProviderIcon({
src,
alt,
size = 32,
className = "",
fallbackText = "?",
fallbackColor,
}) {
const [errored, setErrored] = useState(false);
if (!src || errored) {
return (
<span
className={`inline-flex items-center justify-center font-bold rounded-lg ${className}`.trim()}
style={{
width: size,
height: size,
color: fallbackColor,
fontSize: Math.max(10, Math.floor(size * 0.38)),
}}
>
{fallbackText}
</span>
);
}
return (
<img
src={src}
alt={alt}
width={size}
height={size}
className={className}
onError={() => setErrored(true)}
/>
);
}
ProviderIcon.propTypes = {
src: PropTypes.string,
alt: PropTypes.string,
size: PropTypes.number,
className: PropTypes.string,
fallbackText: PropTypes.string,
fallbackColor: PropTypes.string,
};
|