Components/Feedback
Ring, dots and bars loaders in any neon color.
Loadingring
Loadingdots
Loadingbars
Loadingorbit
Installation#
npx shadcn@latest add https://get-neonkit.vercel.app/r/spinner.jsonUsage#
import { Spinner } from "@/components/ui/spinner"
<Spinner variant="orbit" label="Loading invoices" />Examples#
Sizes
smmdlg
ring
Loading
Loading
Loading
dots
Loading
Loading
Loading
bars
Loading
Loading
Loading
orbit
Loading
Loading
Loading
In a button
The spinner picks up the button's color. Hide it from assistive tech and set aria-busy on the button.
Inline status
Next to visible text, the wrapper carries role="status" and the spinner is aria-hidden.
Q4 launch plan
Edited by Maya Chen
Syncing…
API reference#
Spinner
Also accepts every native span attribute.
| Prop | Type | Default |
|---|---|---|
variant | "ring" | "dots" | "bars" | "orbit"Shape of the loader. | "ring" |
color | NeonColorPalette name or hex. Falls back to --neon-accent, then cyan. | inherited |
size | "sm" | "md" | "lg"16, 24 or 36px square. | "md" |
label | stringVisually hidden text announced to screen readers. | "Loading" |
Accessibility#
- Spinner renders role="status" with a visually hidden label, so screen readers announce it once when it appears.
- When the spinner sits beside text that already says what is happening, pass aria-hidden so the message isn't read twice.
- With reduced motion, every variant runs three times slower instead of stopping, so it still reads as busy.