Back to Dictionary
Waiting & Loading
●○○Ready to Use
Recommended default

Typing Dots (AI Reply)

Three animated dots that pulse sequentially, indicating that an AI or person is typing a response. Creates anticipation and confirms the system is processing.

Use

AI chat interfaces while the model generates a response

Avoid

Non-conversational contexts (use spinner or progress instead)

Safer Alternative

No safer default listed.

Risk Level

Low risk

Live Demo

What It Is

Three animated dots that pulse sequentially, indicating that an AI or person is typing a response. Creates anticipation and confirms the system is processing.

When to Use

  • AI chat interfaces while the model generates a response
  • Messaging apps to show someone is typing
  • Conversational UIs where response time is 2-10 seconds
  • After user submits a question and waits for an answer

When NOT to Use

  • Non-conversational contexts (use spinner or progress instead)
  • When response time is instant or under 1 second
  • Loading large data sets (use skeleton or progress bar)

You've Seen It In

ChatGPTClaudeiMessageSlackWhatsApp

AI Implementation Prompts

Move from a fast scaffold to production details, then tune timing and edge states.

Add a typing indicator with three dots that pulse in sequence. Show it when AI or user is typing a response.

Code Example (Tailwind CSS)

A focused implementation sketch you can adapt to your product state.

export function TypingDots() {
  return (
    <div className="flex items-center gap-1.5 px-4 py-3">
      <div className="h-2 w-2 animate-typing-dots rounded-full bg-zinc-400" style={{ animationDelay: '0s' }} />
      <div className="h-2 w-2 animate-typing-dots rounded-full bg-zinc-400" style={{ animationDelay: '0.2s' }} />
      <div className="h-2 w-2 animate-typing-dots rounded-full bg-zinc-400" style={{ animationDelay: '0.4s' }} />
    </div>
  );
}

"text-stone-400 italic">// Add to globals.css:
"text-stone-400 italic">// @keyframes typing-dots {
"text-stone-400 italic">//   0%, 60%, 100% { opacity: 0.3; }
"text-stone-400 italic">//   30% { opacity: 1; }
"text-stone-400 italic">// }