React + MotionLoaders
Bouncing dots
Three dots hopping one after another, with the familiar rhythm of “someone is typing”.
Settings
14px
0.9s
Code
import { motion } from "framer-motion";
interface BouncingDotsProps {
color?: string;
size?: number;
/** Duración de un rebote en segundos. */
speed?: number;
}
export default function BouncingDots({
color = "#0071e3",
size = 14,
speed = 0.9,
}: BouncingDotsProps) {
return (
<div role="status" aria-label="Loading" className="flex items-center gap-2">
{[0, 1, 2].map((i) => (
<motion.div
key={i}
className="rounded-full"
style={{ width: size, height: size, backgroundColor: color }}
animate={{ y: [0, -size, 0] }}
transition={{
duration: speed,
repeat: Infinity,
delay: i * (speed / 6),
ease: "easeInOut",
}}
/>
))}
</div>
);
}
Prompt for AI
Paste it into ChatGPT, Claude or Cursor and it will adapt the block to your project with these settings, even if you don’t use React.
More in Loaders
Where to use it
Three bouncing dots are the universal sign that someone is typing. Drop them into the chat bubble of a support widget, the reply area of an AI assistant or a messaging app while the other person writes. As a typing indicator it feels warmer than a spinner, because it hints at a person on the other side.
Keep the dots small, around the size of your body text, and use the same color as the text in the chat bubble. Slowing the speed a little makes it feel calmer; too fast and it looks like the app is panicking.