PulsatingDots uses soft scale and opacity changes to show ongoing work
without implying a direction. It is a good fit for queues, imports, background
processing, and compact UI surfaces where the state should feel alive but not
urgent.
Installation
Usage
import { PulsatingDots } from "@/components/loading-ui/pulsating-dots";<PulsatingDots className="w-16" />Customization
PulsatingDots is a flex row where each marker grows evenly inside the
available width. Color flows through currentColor, while dots and
duration let you tune the rhythm without changing the surrounding layout.
Size
Control the row width; the dots divide that space evenly and keep their square shape.
Color
Use inherited foreground in product surfaces, or apply text color utilities when the loader needs a stronger status tone.
Duration
duration is passed to Motion as seconds. Short cycles feel lively; longer
cycles feel calmer.
Dot Count
Three dots are the default, but wider queues can use four or five markers for a denser pulse.
Examples
These examples use the loader for soft background work: staging files, warming caches, queueing records, and small async hints.
Button
The row is narrow enough for button labels while still showing the full pulse.
Badge
Badges work well for queue and retry states where the label still carries the meaning.
Input Group
Input groups keep the feedback local to the control that is still resolving.
Sheet
Bottom sheets give the pulse enough breathing room for import or batch progress without turning it into a full-page loading state.
Popover
Popovers are useful for tiny background tasks where a concise hint is enough.