सामग्री पर जाएँ

अवतार

प्रोफ़ाइल मेनू, टिप्पणी थ्रेड्स और टीम सूचियों के लिए आरंभिक अक्षरों वाले बैकअप के साथ एक उपयोगकर्ता चित्र — निओब्रुटलिस्ट मोटी-सीमा वाली शैली में।

import {
  Avatar,
  AvatarBadge,

अवतार उपयोगकर्ता की इमेज दिखाता है और लोड होते समय या फ़ेल होने पर AvatarFallback — इनिशियल या आइकन — लगा देता है, बिना लेआउट शिफ्ट के। यह Base UI Avatar कंपोनेंट पर बना है और नियोब्रूटलिस्ट रेसिपी के अनुसार स्टाइल किया गया है: मोटा 2px बॉर्डर और बोल्ड हेडिंग-टाइप इनिशियल।

इसे इन स्थितियों में चुनें:

  • प्रोफ़ाइल मेनू — हेडर अवतार जो अकाउंट एक्शन खोलता है; Dropdown उदाहरण देखें।
  • कमेंट थ्रेड और एक्टिविटी फ़ीड — हर लेखक पंक्ति के पास चेहरा; टूटी या गायब फ़ोटो पर इनिशियल।
  • टीम और मेंबर सूचीAvatarGroup से सहयोगियों को ओवरलैप करें और ओवरफ़्लो AvatarGroupCount से सीमित करें।

इंस्टॉलेशन

pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/avatar.json
npx shadcn@latest add https://neobrutalism.com/r/base/avatar.json
yarn dlx shadcn@latest add https://neobrutalism.com/r/base/avatar.json
bunx --bun shadcn@latest add https://neobrutalism.com/r/base/avatar.json

निम्नलिखित डिपेंडेंसी इंस्टॉल करें:

pnpm add @base-ui/react
npm install @base-ui/react
yarn add @base-ui/react
bun add @base-ui/react

निम्नलिखित कोड को कॉपी करके अपने प्रोजेक्ट में पेस्ट करें।

components/ui/avatar.tsx
"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

उदाहरण

बेसिक

एक इमेज और फ़ॉलबैक के साथ एक बेसिक avatar कंपोनेंट।

NB
import {
  Avatar,
  AvatarFallback,

Badge

avatar में badge जोड़ने के लिए AvatarBadge कंपोनेंट का उपयोग करें। badge, avatar के नीचे दाईं ओर पोज़िशन किया जाता है।

import {
  Avatar,
  AvatarBadge,

badge में कस्टम रंग, साइज़ आदि जैसी कस्टम स्टाइल जोड़ने के लिए className prop का उपयोग करें।

<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 {

Avatar ग्रुप

avatar का एक ग्रुप जोड़ने के लिए AvatarGroup कंपोनेंट का उपयोग करें।

import {
  Avatar,
  AvatarFallback,

Avatar ग्रुप काउंट

ग्रुप में एक काउंट जोड़ने के लिए <AvatarGroupCount> का उपयोग करें।

import {
  Avatar,
  AvatarFallback,

आइकन के साथ Avatar ग्रुप

आप <AvatarGroupCount> के अंदर एक आइकन भी इस्तेमाल कर सकते हैं।

import { PlusIcon } from "lucide-react"

import {

साइज़

avatar का साइज़ बदलने के लिए size prop का उपयोग करें।

import {
  Avatar,
  AvatarFallback,

ड्रॉपडाउन

आप Avatar कंपोनेंट को dropdown मेन्यू के ट्रिगर के रूप में इस्तेमाल कर सकते हैं।

"use client"

import {

RTL

Neobrutalism में RTL सपोर्ट सक्षम करने के लिए, RTL कॉन्फ़िगरेशन गाइड देखें।

"use client"

import * as React from "react"

एक्सेसिबिलिटी

अवतार एक इमेज है, इसलिए इमेज नियम लागू होते हैं: जब अवतार ही व्यक्ति की पहचान हो तो AvatarImage को व्यक्ति का नाम वाला alt दें, और जब पास में नाम दिख रहा हो तो alt="" — वरना स्क्रीन रीडर नाम दो बार पढ़ेंगे। AvatarFallback के इनिशियल सादा टेक्स्ट हैं और जोर से पढ़े जाते हैं, इसलिए उन्हें सार्थक रखें। जब अवतार मेनू खोले (देखें Dropdown), सुलभ नाम ट्रिगर बटन पर रखें, इमेज पर नहीं।

API रेफ़रेंस

Avatar

Avatar कंपोनेंट रूट कंपोनेंट है, जो avatar इमेज और फ़ॉलबैक को रैप करता है।

PropTypeDefault
size"default" | "sm" | "lg""default"
classNamestring-

AvatarImage

AvatarImage कंपोनेंट avatar इमेज दिखाता है। यह सभी Base UI Avatar Image props स्वीकार करता है।

PropTypeDefault
srcstring-
altstring-
classNamestring-

AvatarFallback

AvatarFallback कंपोनेंट तब एक फ़ॉलबैक दिखाता है जब इमेज लोड होने में विफल रहती है। यह सभी Base UI Avatar Fallback props स्वीकार करता है।

PropTypeDefault
classNamestring-

AvatarBadge

AvatarBadge कंपोनेंट avatar पर एक badge इंडिकेटर दिखाता है, जो आम तौर पर नीचे दाईं ओर पोज़िशन किया जाता है।

PropTypeDefault
classNamestring-

AvatarGroup

AvatarGroup कंपोनेंट ओवरलैपिंग स्टाइल के साथ avatars का एक ग्रुप दिखाता है।

PropTypeDefault
classNamestring-

AvatarGroupCount

AvatarGroupCount कंपोनेंट avatar ग्रुप में एक काउंट इंडिकेटर दिखाता है, जो आम तौर पर अतिरिक्त avatars की संख्या दर्शाता है।

PropTypeDefault
classNamestring-

Base UI Avatar props के बारे में अधिक जानकारी के लिए, Base UI डॉक्यूमेंटेशन देखें।