build69
build69  /  Components  /  SkeletonChat /  Source

SkeletonChat

A placeholder for a message thread: alternating incoming and outgoing bubbles with avatars, at deterministically varied widths so the transcript looks natural. Outgoing rows flip direction and corner rounding just like real bubbles. Use it while chat history loads.

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";

// SkeletonChat — A placeholder for a message thread: alternating incoming and outgoing bubbles with avata
export interface SkeletonChatProps extends React.ComponentProps<"div"> {
  /** Semantic role: which accent the component uses. */
  tone?: Tone;
  /** Visual loudness: how prominent it reads. */
  emphasis?: Emphasis;
}

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