Skip to content

Spinner

A compact loading indicator for pending or indeterminate work. Spinner renders with `role="status"` and an accessible name so assistive technologies can announce loading state without exposing the decorative visual.

<Spinner />
Loading...
<Spinner label="Loading..." />
Uploading filesThis may take a few moments
<Spinner label="Uploading files" description="This may take a few moments" />
Uploading filesThis may take a few moments
<Spinner
size={36}
label="Uploading files"
description="This may take a few moments"
/>
<div style={{display: 'flex', alignItems: 'center', gap: '1rem'}}>
<Spinner size="sm" />
<Spinner size="md" />
<Spinner size="lg" />
<Spinner size={28} />
<Spinner size={32} />
<Spinner size={36} />
</div>
SmallMediumLarge28px32px36px
<div style={{display: 'flex', alignItems: 'flex-start', gap: '1rem'}}>
<Spinner label="Small" size="sm" />
<Spinner label="Medium" size="md" />
<Spinner label="Large" size="lg" />
<Spinner label="28px" size={28} />
<Spinner label="32px" size={32} />
<Spinner label="36px" size={36} />
</div>
<div style={{display: 'inline-flex', padding: '1rem', background: '#111'}}>
<Spinner variant="onMedia" />
</div>
Loading media
<div style={{display: 'inline-flex', padding: '1rem', background: '#111'}}>
<Spinner label="Loading media" variant="onMedia" />
</div>
Loading mediaStreaming from the server
<div style={{display: 'inline-flex', padding: '1rem', background: '#111'}}>
<Spinner
description="Streaming from the server"
label="Loading media"
variant="onMedia"
/>
</div>

A compact loading indicator for pending or indeterminate work. Spinner renders with `role="status"` and an accessible name so assistive technologies can announce loading state without exposing the decorative visual.

PropTypeDefaultDescription
aria-labelstringAccessible label for the loading status. Defaults to a string label when provided, otherwise "Loading".
classNamestringOptionally adjust rendering by setting the className.
data-testidstringTest id applied to the root element.
descriptionstringOptional secondary text shown below the label to give more context about the pending work.
labelstringOptional visible label shown below the spinner.
refRef<HTMLSpanElement>Ref forwarded to the root span element.
size"sm" | "md" | "lg" | 32 | 36 | 28Visual size of the spinner. sm/md/lg use design-system icon size tokens; the numeric sizes (28/32/36) are bespoke pixel values for larger standalone loading states. Default is md.
styleCSSPropertiesInline styles applied to the root element.
variant"default" | "onMedia"Visual style variant for the spinner. Default is default.