Avatar

Imagen de persona con iniciales de reserva, sobre Base UI.

Display@base-ui/react

Installation

npx shadcn@latest add @saastro/avatar

Preview

Avatar preview

Source Code

"use client"

import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar"

import { cn } from "@/lib/utils"

function Avatar({ className, ...props }: AvatarPrimitive.Root.Props) {
  return (
    <AvatarPrimitive.Root
      data-slot="avatar"
      className={cn(
        "relative flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-full bg-muted align-middle select-none",
        className
      )}
      {...props}
    />
  )
}

function AvatarImage({ className, ...props }: AvatarPrimitive.Image.Props) {
  return (
    <AvatarPrimitive.Image
      data-slot="avatar-image"
      className={cn("aspect-square size-full object-cover", className)}
      {...props}
    />
  )
}

/**
 * El fallback aparece cuando la imagen no carga —o no la hay—. `delay` evita
 * el parpadeo de iniciales en el instante en que la imagen sí va a cargar:
 * sin él, una lista de avatares destella entera en cada render.
 */
function AvatarFallback({
  className,
  delay = 300,
  ...props
}: AvatarPrimitive.Fallback.Props) {
  return (
    <AvatarPrimitive.Fallback
      data-slot="avatar-fallback"
      delay={delay}
      className={cn(
        "flex size-full items-center justify-center rounded-full text-xs font-medium text-muted-foreground",
        className
      )}
      {...props}
    />
  )
}

export { Avatar, AvatarFallback, AvatarImage }

Registry Setup

Add the Saastro registry to your components.json:

{
  "registries": {
    "@saastro": "https://ui.saastro.io/r/{name}.json"
  }
}