build69
build69  /  Components  /  SkeletonAvatar /  Source

SkeletonAvatar

A circular placeholder standing in for a profile picture while user data loads. Ships six preset sizes from xs (20px) to 2xl (72px) so it lines up with whatever avatar it replaces. Pick the size that matches the real avatar and the row will not reflow when data arrives.

3 files2 dependenciestokens resolved ✓
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
"use client";

import * as React from "react";
import { cn } from "@/lib/utils";
import { surface, type Tone, type Emphasis } from "@/lib/recipes";

// SkeletonAvatar — A circular placeholder standing in for a profile picture while user data loads. Ships si
export interface SkeletonAvatarProps extends React.ComponentProps<"div"> {
  /** Semantic role: which accent the component uses. */
  tone?: Tone;
  /** Visual loudness: how prominent it reads. */
  emphasis?: Emphasis;
}

export function SkeletonAvatar({
  className,
  tone = "primary",
  emphasis = "solid",
  ...props
}: SkeletonAvatarProps) {
  return (
    <div
      data-slot="skeleton-avatar"
      data-tone={tone}
      data-emphasis={emphasis}
      className={cn(
        "inline-flex items-center gap-2 rounded-lg transition-colors",
        surface(tone, emphasis),
        className,
      )}
      {...props}
    />
  );
}