Avatar
Represents a person or organization with an image and resilient fallback.
Preview
Example code
SF
Steven Frady
Product designer
Playground
sizeSets the avatar's diameter.
Usage
tsx
import { Avatar, AvatarFallback, AvatarImage } from "earthling-ui/avatar";
export function Example() {
return (
<>
<Avatar size="md">
<AvatarImage src="/avatar.jpg" alt="Portrait of Alex Morgan" />
<AvatarFallback>AM</AvatarFallback>
</Avatar>
</>
);
}
- Describe the person in the image alt text; use an empty alt only when nearby text already identifies them.
- Always provide AvatarFallback so slow or failed images retain a recognizable label.
- The inset image outline preserves the circular edge against both light and dark surfaces.
Installation
Start with the project setup for React and Tailwind CSS 4. Both paths use the same component and theme.
Import package
Own the source
bash
npm install earthling-uiUse the component import shown above. Package updates keep the implementation current.
API reference
Declarations from the current library build, including inherited primitive props. Playground controls above show selected options; they are not the complete API.
tsx
// Generated by dts-bundle-generator v9.5.1
import * as AvatarPrimitive from '@radix-ui/react-avatar';
import { VariantProps } from 'class-variance-authority';
import { ComponentPropsWithoutRef } from 'react';
export declare const avatarVariants: (props?: ({
size?: "sm" | "md" | "lg" | "xl" | null | undefined;
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
export interface AvatarProps extends ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>, VariantProps<typeof avatarVariants> {
}
export declare const Avatar: import("react").ForwardRefExoticComponent<AvatarProps & import("react").RefAttributes<HTMLSpanElement>>;
export declare const AvatarImage: import("react").ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarImageProps & import("react").RefAttributes<HTMLImageElement>, "ref"> & import("react").RefAttributes<HTMLImageElement>>;
export declare const AvatarFallback: import("react").ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarFallbackProps & import("react").RefAttributes<HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
export {};Runtime dependencies: @radix-ui/react-avatar, class-variance-authority, cnfast.
Source
Use the eject command to copy this implementation with its required helpers and project-specific imports.
View Avatar implementation
tsx
"use client";
import {
type ComponentPropsWithoutRef,
type ComponentRef,
forwardRef,
} from "react";
import * as AvatarPrimitive from "@radix-ui/react-avatar";
import { cn } from "@/utils/cn";
import { cva, type VariantProps } from "class-variance-authority";
const avatarVariants = cva(
"relative flex shrink-0 overflow-hidden rounded-full bg-muted",
{
variants: {
size: {
sm: "h-8 w-8",
md: "h-10 w-10",
lg: "h-14 w-14",
xl: "h-20 w-20",
},
},
defaultVariants: { size: "md" },
},
);
export interface AvatarProps
extends
ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>,
VariantProps<typeof avatarVariants> {}
const Avatar = forwardRef<
ComponentRef<typeof AvatarPrimitive.Root>,
AvatarProps
>(({ className, size, ...props }, ref) => (
<AvatarPrimitive.Root
ref={ref}
className={cn(avatarVariants({ size }), className)}
{...props}
/>
));
Avatar.displayName = AvatarPrimitive.Root.displayName;
const AvatarImage = forwardRef<
ComponentRef<typeof AvatarPrimitive.Image>,
ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>
>(({ className, ...props }, ref) => (
<AvatarPrimitive.Image
ref={ref}
className={cn(
"aspect-square h-full w-full object-cover outline outline-1 -outline-offset-1 outline-(--color-image-outline)",
className,
)}
{...props}
/>
));
AvatarImage.displayName = AvatarPrimitive.Image.displayName;
const AvatarFallback = forwardRef<
ComponentRef<typeof AvatarPrimitive.Fallback>,
ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>
>(({ className, ...props }, ref) => (
<AvatarPrimitive.Fallback
ref={ref}
className={cn(
"flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground font-medium",
className,
)}
{...props}
/>
));
AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
export { Avatar, AvatarImage, AvatarFallback, avatarVariants };