f6a0673082
CI Pipeline / test (20) (pull_request) Failing after 1m17s
CI Pipeline / test (18) (pull_request) Failing after 1m28s
CI Pipeline / e2e (chromium) (pull_request) Failing after 1m33s
CI Pipeline / e2e (firefox) (pull_request) Failing after 1m27s
CI Pipeline / e2e (webkit) (pull_request) Failing after 1m34s
CI Pipeline / visual-regression (pull_request) Failing after 2m9s
CI Pipeline / storybook (pull_request) Failing after 1m5s
CI Pipeline / performance (pull_request) Failing after 1m42s
CI Pipeline / lint (pull_request) Failing after 49s
CI Pipeline / build (pull_request) Failing after 1m29s
28 lines
885 B
TypeScript
28 lines
885 B
TypeScript
import React, { memo } from "react";
|
|
|
|
interface AvatarProps extends React.ImgHTMLAttributes<HTMLImageElement> {
|
|
src: string;
|
|
alt: string;
|
|
size?: "small" | "medium" | "large" | "xlarge";
|
|
className?: string;
|
|
}
|
|
|
|
const Avatar = memo<AvatarProps>(
|
|
({ src, alt, size = "small", className = "", ...props }) => {
|
|
const sizeStyles: Record<string, string> = {
|
|
small: "w-[var(--spacing-scale-016)] h-[var(--spacing-scale-016)]",
|
|
medium: "w-[18px] h-[18px]",
|
|
large: "w-[var(--spacing-scale-024)] h-[var(--spacing-scale-024)]",
|
|
xlarge: "w-[var(--spacing-scale-032)] h-[var(--spacing-scale-032)]",
|
|
};
|
|
|
|
const baseStyles = `rounded-[var(--radius-measures-radius-full)] object-cover ${sizeStyles[size]} ${className}`;
|
|
|
|
return <img src={src} alt={alt} className={baseStyles} {...props} />;
|
|
}
|
|
);
|
|
|
|
Avatar.displayName = "Avatar";
|
|
|
|
export default Avatar;
|