Skip to content

Spinner

Spinner

<Spinner />
<Spinner size="lg" tone="brand" />
<Button><Spinner size="sm" /> Loading…</Button>

Install: @helixui/core

import { Spinner } from '@helixui/core'

status: stable · since: 0.1.0

Tags: loading, spinner, indicator

Anatomy

◐ ← rotating ring

Layout

  • displayinline-block
  • widthcontent
  • heightcontent
  • intrinsicSize16/20/24/32px (sm/md/lg/xl)
  • stackabletrue
  • fullBleedfalse

Visual

A circular progress ring with a rotating gap. Color follows currentColor. Animation respects prefers-reduced-motion.

Props

NameTypeDefaultDescription
size'sm' | 'md' | 'lg'mdVisual size.
tone'current' | 'brand' | 'neutral'currentColor. current inherits from CSS color.
labelstringLoadingAccessible name announced by screen readers.

Tokens used

color.text.action.brand, color.text.muted

Accessibility

Role: status

Notes

  • For determinate progress, use a different component (helixui does not yet ship one — use the native <progress> for now).
  • Animation duration extends under prefers-reduced-motion rather than stopping outright; a frozen spinner suggests “stuck”.

Composes with

ComponentRelationNote
ButtonchildInside a Button when the action is in flight.
ProgressBaralternativeProgressBar when there is a known value or this takes long.
Skeletonsibling

Prompt examples

These are the AI prompt → JSX mappings used by the helixui prompt DSL and integrations like Cursor / Claude Code.

loading indicator

“small inline spinner”

<Spinner size="sm" />