Spinner
Ring, dots and bars loaders in any neon color.
- Building0:42
Building acme-web
Step 3 of 5 · compiling routes
- Ana is typing
Ana is typing
#launch-q4
- Recording0:07
Recording voice note
Built-in microphone
- Connecting
Connecting to fra1
Attempt 2 of 5
Installation
npx shadcn@latest add https://neonkit.heyaadi.com/r/spinner.jsonUsage
import { Spinner } from "@/components/ui/spinner"
<Spinner variant="orbit" label="Loading invoices" />Examples
Sizes
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.
API reference
Also accepts every native span attribute.
| Prop | Type | Default |
|---|---|---|
variant | "ring"Shape of the loader. | "ring" |
color | NeonColorPalette name or hex. Falls back to --neon-accent, then cyan. | inherited |
size | "sm"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.