آواتار
تصویر کاربری با امکان استفاده از حروف اول نام بهعنوان جایگزین برای منوهای پروفایل، رشتههای نظرات و فهرستهای تیم — با جلوهی neobrutalist و حاشیهی ضخیم.
import {
Avatar,
AvatarBadge,آواتار تصویر کاربر را نشان میدهد و هنگام بارگذاری یا شکست تصویر، AvatarFallback — حروف اول یا آیکون — را جایگزین میکند، بدون جابهجایی layout. بر پایهٔ Base UI Avatar ساخته شده و با دستور پخت نئوبروتالیستی استایل شده: حاشیهٔ ضخیم 2px و حروف اول با تایپ heading پررنگ.
برای این موارد از آن استفاده کنید:
- منوهای پروفایل — آواتار سربرگ که اقدامات حساب را باز میکند؛ نمونهٔ Dropdown را ببینید.
- رشتههای نظر و فید فعالیت — یک چهره کنار هر خط نویسنده، با حروف اول برای عکسهای خراب یا گمشده.
- فهرست تیم و اعضا — همکاران را با
AvatarGroupهمپوشان کنید و سرریز را باAvatarGroupCountمحدود کنید.
نصب#
pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/avatar.jsonnpx shadcn@latest add https://neobrutalism.com/r/base/avatar.jsonyarn dlx shadcn@latest add https://neobrutalism.com/r/base/avatar.jsonbunx --bun shadcn@latest add https://neobrutalism.com/r/base/avatar.json
وابستگیهای زیر را نصب کنید:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
کد زیر را کپی کنید و در پروژهٔ خود بچسبانید.
"use client"
import * as React from "react"
import { Avatar as AvatarPrimitive } from "radix-ui"
import { cn } from "@/lib/utils"
function Avatar({
className,
size = "default",
...props
}: React.ComponentProps<typeof AvatarPrimitive.Root> & {
size?: "default" | "sm" | "lg"
}) {
return (
<AvatarPrimitive.Root
data-slot="avatar"
data-size={size}
className={cn(
"group/avatar relative flex size-8 shrink-0 rounded-full border-2 select-none data-[size=lg]:size-10 data-[size=sm]:size-6",
className
)}
{...props}
/>
)
}
function AvatarImage({
className,
...props
}: React.ComponentProps<typeof AvatarPrimitive.Image>) {
return (
<AvatarPrimitive.Image
data-slot="avatar-image"
className={cn(
"aspect-square size-full rounded-full object-cover",
className
)}
{...props}
/>
)
}
function AvatarFallback({
className,
...props
}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {
return (
<AvatarPrimitive.Fallback
data-slot="avatar-fallback"
className={cn(
"flex size-full items-center justify-center rounded-full bg-muted font-head text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs",
className
)}
{...props}
/>
)
}
function AvatarBadge({ className, ...props }: React.ComponentProps<"span">) {
return (
<span
data-slot="avatar-badge"
className={cn(
"absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none",
"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden",
"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2",
"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2",
className
)}
{...props}
/>
)
}
function AvatarGroup({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="avatar-group"
className={cn(
"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background",
className
)}
{...props}
/>
)
}
function AvatarGroupCount({
className,
...props
}: React.ComponentProps<"div">) {
return (
<div
data-slot="avatar-group-count"
className={cn(
"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3",
className
)}
{...props}
/>
)
}
export {
Avatar,
AvatarImage,
AvatarFallback,
AvatarGroup,
AvatarGroupCount,
AvatarBadge,
}
مسیرهای import را متناسب با ساختار پروژهٔ خود بهروزرسانی کنید.
استفاده#
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"<Avatar>
<AvatarImage src="https://github.com/shadcn.png" />
<AvatarFallback>CN</AvatarFallback>
</Avatar>ترکیب#
برای ساخت Avatar از ترکیب زیر استفاده کنید:
Avatar
├── AvatarImage
├── AvatarFallback
└── AvatarBadgeبرای ساخت AvatarGroup از ترکیب زیر استفاده کنید:
AvatarGroup
├── Avatar
│ ├── AvatarImage
│ ├── AvatarFallback
│ └── AvatarBadge
├── Avatar
│ ├── AvatarImage
│ ├── AvatarFallback
│ └── AvatarBadge
└── AvatarGroupCountنمونهها#
پایه#
یک کامپوننت آواتار پایه با یک تصویر و یک جایگزین.
import {
Avatar,
AvatarFallback,Badge#
از کامپوننت AvatarBadge برای افزودن یک badge به آواتار استفاده کنید. badge در گوشهٔ پایین-راست آواتار قرار میگیرد.
import {
Avatar,
AvatarBadge,از پراپ className برای افزودن استایلهای سفارشی به badge مانند رنگها، اندازهها و غیره استفاده کنید.
<Avatar>
<AvatarImage src="https://github.com/shadcn.png" alt="@shadcn" />
<AvatarFallback>CN</AvatarFallback>
<AvatarBadge className="bg-green-600 dark:bg-green-800" />
</Avatar>Badge با آیکون#
همچنین میتوانید از یک آیکون داخل <AvatarBadge> استفاده کنید.
import { PlusIcon } from "lucide-react"
import {گروه آواتار#
از کامپوننت AvatarGroup برای افزودن یک گروه از آواتارها استفاده کنید.
import {
Avatar,
AvatarFallback,شمارندهٔ گروه آواتار#
از <AvatarGroupCount> برای افزودن یک شمارنده به گروه استفاده کنید.
import {
Avatar,
AvatarFallback,گروه آواتار با آیکون#
همچنین میتوانید از یک آیکون داخل <AvatarGroupCount> استفاده کنید.
import { PlusIcon } from "lucide-react"
import {اندازهها#
از پراپ size برای تغییر اندازهٔ آواتار استفاده کنید.
import {
Avatar,
AvatarFallback,دراپداون#
میتوانید از کامپوننت Avatar بهعنوان تریگر یک منوی دراپداون استفاده کنید.
"use client"
import {RTL#
برای فعالسازی پشتیبانی RTL در Neobrutalism، راهنمای پیکربندی RTL را ببینید.
"use client"
import * as React from "react"دسترسیپذیری#
آواتار یک تصویر است؛ پس قواعد تصویر اعمال میشود: وقتی آواتار تنها شناسهٔ شخص است به AvatarImage یک alt با نام بدهید، و وقتی نام قابلمشاهده کنارش است alt="" — وگرنه صفحهخوان نام را دو بار اعلام میکند. حروف AvatarFallback متن سادهاند و خوانده میشوند؛ پس معنادار نگهشان دارید. وقتی آواتار منو باز میکند (ببینید Dropdown)، نام دسترسپذیر را روی دکمهٔ تریگر بگذارید نه روی تصویر.
مرجع API#
Avatar#
کامپوننت Avatar کامپوننت ریشهای است که تصویر آواتار و جایگزین را در بر میگیرد.
| Prop | Type | Default |
|---|---|---|
size | "default" | "sm" | "lg" | "default" |
className | string | - |
AvatarImage#
کامپوننت AvatarImage تصویر آواتار را نمایش میدهد. همهٔ پراپهای Base UI Avatar Image را میپذیرد.
| Prop | Type | Default |
|---|---|---|
src | string | - |
alt | string | - |
className | string | - |
AvatarFallback#
کامپوننت AvatarFallback هنگام ناموفق بودن بارگذاری تصویر یک جایگزین نمایش میدهد. همهٔ پراپهای Base UI Avatar Fallback را میپذیرد.
| Prop | Type | Default |
|---|---|---|
className | string | - |
AvatarBadge#
کامپوننت AvatarBadge یک نشانگر badge روی آواتار نمایش میدهد که معمولاً در پایین-راست قرار میگیرد.
| Prop | Type | Default |
|---|---|---|
className | string | - |
AvatarGroup#
کامپوننت AvatarGroup یک گروه از آواتارها را با استایل همپوشان نمایش میدهد.
| Prop | Type | Default |
|---|---|---|
className | string | - |
AvatarGroupCount#
کامپوننت AvatarGroupCount یک نشانگر شمارنده در یک گروه آواتار نمایش میدهد که معمولاً تعداد آواتارهای اضافی را نشان میدهد.
| Prop | Type | Default |
|---|---|---|
className | string | - |
برای اطلاعات بیشتر دربارهٔ پراپهای Base UI Avatar، مستندات Base UI را ببینید.