1import { Avatar, AvatarFallback, AvatarImage } from "~/components/ui/avatar";2
3export default function AvatarDemo() {4 return (5 <div class="flex flex-row flex-wrap items-center gap-12">6 <Avatar>7 <AvatarImage src="https://github.com/shadcn.png" alt="@shadcn" />8 <AvatarFallback>CN</AvatarFallback>9 </Avatar>10 <Avatar class="rounded-lg">11 <AvatarImage12 src="https://github.com/evilrabbit.png"13 alt="@evilrabbit"14 />15 <AvatarFallback>ER</AvatarFallback>16 </Avatar>17 <div class="flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background *:data-[slot=avatar]:grayscale">18 <Avatar>19 <AvatarImage src="https://github.com/shadcn.png" alt="@shadcn" />20 <AvatarFallback>CN</AvatarFallback>21 </Avatar>22 <Avatar>23 <AvatarImage src="https://github.com/leerob.png" alt="@leerob" />24 <AvatarFallback>LR</AvatarFallback>25 </Avatar>26 <Avatar>27 <AvatarImage28 src="https://github.com/evilrabbit.png"29 alt="@evilrabbit"30 />31 <AvatarFallback>ER</AvatarFallback>32 </Avatar>33 </div>34 </div>35 );36}
npx shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/avatar.json
yarn shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/avatar.json
pnpm dlx shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/avatar.json
bunx --bun shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/avatar.json
Install the following dependencies
npm install @kobalte/core
yarn add @kobalte/core
pnpm add @kobalte/core
bun add @kobalte/core
Copy and paste the following code into your project
1import type { PolymorphicProps } from "@kobalte/core/polymorphic";2import type { ValidComponent } from "solid-js";3
4import { splitProps } from "solid-js";5import * as ImagePrimitive from "@kobalte/core/image";6
7import { cn } from "~/lib/utils";8
9type AvatarRootProps<T extends ValidComponent = "span"> =10 ImagePrimitive.ImageRootProps<T> & {11 class?: string | undefined;12 };13
14const Avatar = <T extends ValidComponent = "span">(15 props: PolymorphicProps<T, AvatarRootProps<T>>,16) => {17 const [local, others] = splitProps(props as AvatarRootProps, ["class"]);18 return (19 <ImagePrimitive.Root20 data-slot="avatar"21 class={cn(22 "relative flex size-10 shrink-0 overflow-hidden rounded-full outline-2 outline-border",23 local.class,24 )}25 {...others}26 />27 );28};29
30type AvatarImageProps<T extends ValidComponent = "img"> =31 ImagePrimitive.ImageImgProps<T> & {32 class?: string | undefined;33 };34
35const AvatarImage = <T extends ValidComponent = "img">(36 props: PolymorphicProps<T, AvatarImageProps<T>>,37) => {38 const [local, others] = splitProps(props as AvatarImageProps, ["class"]);39 return (40 <ImagePrimitive.Img41 data-slot="avatar-image"42 class={cn("aspect-square size-full", local.class)}43 {...others}44 />45 );46};47
48type AvatarFallbackProps<T extends ValidComponent = "span"> =49 ImagePrimitive.ImageFallbackProps<T> & { class?: string | undefined };50
51const AvatarFallback = <T extends ValidComponent = "span">(52 props: PolymorphicProps<T, AvatarFallbackProps<T>>,53) => {54 const [local, others] = splitProps(props as AvatarFallbackProps, ["class"]);55 return (56 <ImagePrimitive.Fallback57 data-slot="avatar-fallback"58 class={cn(59 "flex size-full items-center justify-center rounded-full bg-secondary-background font-base text-foreground",60 local.class,61 )}62 {...others}63 />64 );65};66
67export { Avatar, AvatarImage, AvatarFallback };
Update the import paths to match your project setup.
1import { Avatar, AvatarFallback, AvatarImage } from "~/components/ui/avatar";
1<Avatar>2 <AvatarImage src="https://github.com/shadcn.png" alt="@shadcn" />3 <AvatarFallback>CN</AvatarFallback>4</Avatar>