skrewww

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 dashboard
Loading 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

PropTypeDefaultDescription
size"sm" | "md" | "lg""md"Spinner dimensions.
labelstringAccessible name for standalone usage.
decorativebooleanfalseHides spinner from assistive technology.

React example

Copy React example
import { Spinner } from "@/components/ui/Spinner";

export function Example() {
  return <Spinner label="Loading results" />;
}