diff options
Diffstat (limited to 'src/components/ui/avatar.tsx')
| -rw-r--r-- | src/components/ui/avatar.tsx | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx new file mode 100644 index 0000000..dc92ac0 --- /dev/null +++ b/src/components/ui/avatar.tsx @@ -0,0 +1,74 @@ +import * as React from 'react' +import { Avatar as AvatarPrimitive } from 'radix-ui' + +import { cn } from '@/lib/utils' + +function Avatar({ + className, + ...props +}: React.ComponentProps<typeof AvatarPrimitive.Root>) { + return ( + <AvatarPrimitive.Root + data-slot="avatar" + className={cn( + 'relative flex size-8 shrink-0 overflow-hidden rounded-full', + className, + )} + {...props} + /> + ) +} + +function AvatarImage({ + className, + ...props +}: React.ComponentProps<typeof AvatarPrimitive.Image>) { + return ( + <AvatarPrimitive.Image + data-slot="avatar-image" + className={cn('aspect-square size-full', className)} + {...props} + /> + ) +} + +function AvatarFallback({ + className, + ...props +}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) { + return ( + <AvatarPrimitive.Fallback + data-slot="avatar-fallback" + className={cn( + 'bg-muted flex size-full items-center justify-center rounded-full', + className, + )} + {...props} + /> + ) +} + +const AvatarComponent: React.FC<AvatarComponentProps> = ({ + src, + alt, + fallback, + className, +}) => { + return ( + <Avatar className={className}> + <AvatarImage src={src} alt={alt} /> + <AvatarFallback>{fallback}</AvatarFallback> + </Avatar> + ) +} + +export default AvatarComponent + +interface AvatarComponentProps { + src?: string + alt?: string + fallback: string + className?: string +} + +export { Avatar, AvatarImage, AvatarFallback } |
