User Avatar
better-auth-ui/user-avatarFreeComponent
Renders the current user's avatar using session data. Shows a skeleton while loading and falls back to initials when no image is available.
Live preview
live · rendered by the registry
Rendered by better-auth-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://better-auth-ui.com/r/user-avatar.jsonSource
1"use client"23import {4 type UsernameAuthClient,5 useAuth,6 useSession7} from "@better-auth-ui/react"8import type { User } from "better-auth"9import { User2 } from "lucide-react"10import type { ReactNode } from "react"1112import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"13import { Skeleton } from "@/components/ui/skeleton"14import { cn } from "@/lib/utils"1516export type UserAvatarProps = {17 className?: string18 fallback?: ReactNode19 isPending?: boolean20 /** @remarks `User` */21 user?: User & { username?: string | null; displayUsername?: string | null }22}2324/**25 * Display a user's avatar using session information or an explicit user prop.26 *27 * Renders a circular avatar that shows the user's image when available, a fallback node if provided, or the user's first two initials; while the session is loading (or when `isPending` is true) and no `user` prop is supplied, renders a skeleton placeholder.28 *29 * @param className - Additional CSS classes applied to the avatar container30 * @param user - Optional user object to display instead of the session user31 * @param isPending - When true, treat the component as loading and show the skeleton if no `user` is provided32 * @param fallback - Node to render inside the avatar fallback area before initials or the default icon33 * @returns The avatar element to render (JSX)34 */35export function UserAvatar({36 className,37 user,38 isPending,39 fallback40}: UserAvatarProps) {41 const { authClient } = useAuth()42 const { data: session, isPending: sessionPending } = useSession(43 authClient as UsernameAuthClient,44 { enabled: !user && !isPending }45 )4647 if ((isPending || sessionPending) && !user) {48 return <Skeleton className={cn("size-8 rounded-full", className)} />49 }5051 const resolvedUser = user ?? session?.user5253 const initials = (54 resolvedUser?.username ||55 resolvedUser?.name ||56 resolvedUser?.email57 )58 ?.slice(0, 2)59 .toUpperCase()6061 return (62 <Avatar63 className={cn(64 "size-8 bg-muted text-foreground text-sm rounded-full",65 className66 )}67 >68 <AvatarImage69 src={resolvedUser?.image ?? undefined}70 alt={71 resolvedUser?.displayUsername ||72 resolvedUser?.name ||73 resolvedUser?.email74 }75 />7677 <AvatarFallback className="text-muted-foreground!">78 {fallback || initials || <User2 className="size-4" />}79 </AvatarFallback>80 </Avatar>81 )82}
What it pulls in
npm packages
Other registry items
Files it writes
More from better-auth-ui
All 49 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Account Settingsaccount-settings | better-auth-ui | Components | Free | 2 deps | |
| Active Sessionsactive-sessions | better-auth-ui | Components | Free | 5 deps · 2 files | |
| Additional Fieldadditional-field | better-auth-ui | Components | Free | 5 deps | |
| Adminadmin | better-auth-ui | Components | Free | 4 deps · 3 files | |
| Anonymousanonymous | better-auth-ui | Components | Free | 4 deps · 3 files | |
| API Keyapi-key | better-auth-ui | Components | Free | 4 deps · 10 files | |
| Authauth | better-auth-ui | Components | Free | 2 deps | |
| Auth Providerauth-provider | better-auth-ui | Components | Free | 4 deps · 2 files |
