Feedback
Spinner
Spinner is an indeterminate loading indicator for operations without a meaningful completion percentage.
Size (Small/Medium/Large) — 3 variants
betaReact AvailableFigma AvailableDocs Partial
- React last updated
- 2026-07-11
- Documentation last updated
- 2026-06-01
- Accessibility target
- WCAG 2.2 AA (target)
- Version
- 0.3.0-beta
Known open questions
- Reduced-motion fallback uses stepped opacity pulse rather than rotation.
Live preview
Decorative / Standalone / Sizes
Loading results…
Loading dashboardLoading smallLoading mediumLoading large
Purpose
Indicating an indeterminate, in-progress loading state with no known completion percentage.
Anatomy
Spinner = rotating arc indicator with optional visible or screen-reader-only label.
Variants and states
decorative · labeled
When to use
Any load time where percentage-complete truly isn't knowable.
When not to use
When percentage IS knowable — use Progress Bar.
Accessibility
role="status" and an aria-label like "Loading" — the spinning animation itself conveys nothing to non-visual users.
Keyboard behavior
Not interactive.
Common mistakes
Providing a purely decorative spinner with no accessible label.
Properties
Size as variants. Built using a real partial-arc ellipse (Figma's arcData), not a fake icon.
When should Spinner be hidden from screen readers?
Hide the spinner when visible loading text already communicates status. Provide a label when the spinner is the only loading indicator.
Tokens used
semantic/border/defaultsemantic/action/primary
Component API
| Prop | Type | Default | Description |
|---|---|---|---|
| size | "sm" | "md" | "lg" | "md" | Spinner dimensions. |
| label | string | — | Accessible name for standalone usage. |
| decorative | boolean | false | Hides spinner from assistive technology. |
React example
Copy React example
import { Spinner } from "@/components/ui/Spinner";
export function Example() {
return <Spinner label="Loading results" />;
}