Skip to content

Spinner

Spinner

A loading spinner component for indicating loading states.

Import

import { Spinner } from '@primitivekit/react';

Basic Usage

<Spinner />

Sizes

<Spinner size="small" />
<Spinner size="medium" />
<Spinner size="large" />
<Spinner size="xl" />

Color Schemes

<Spinner colorScheme="primary" />
<Spinner colorScheme="secondary" />
<Spinner colorScheme="success" />
<Spinner colorScheme="danger" />

With Label

<Spinner label="Loading..." />

Thickness

<Spinner thickness="thin" />
<Spinner thickness="medium" />
<Spinner thickness="thick" />

Speed

<Spinner speed="slow" />
<Spinner speed="normal" />
<Spinner speed="fast" />

Props

PropTypeDefaultDescription
size'small' | 'medium' | 'large' | 'xl''medium'Spinner size
colorScheme'primary' | 'secondary' | 'success' | 'danger''primary'Color scheme
thickness'thin' | 'medium' | 'thick''medium'Border thickness
speed'slow' | 'normal' | 'fast''normal'Animation speed
labelstring-Loading label
classNamestring-Additional CSS classes
styleSpinnerCSSVariables-CSS variable overrides

Customization

<Spinner
  style={{
    '--spinner-size': '60px',
    '--spinner-color': 'rgba(255, 0, 0, 1)',
    '--spinner-width': '4px',
    '--spinner-duration': '1s',
  }}
/>

Examples

Loading Button

<Button disabled>
  <Spinner size="small" />
  Loading...
</Button>

Page Loading

function PageLoader() {
  return (
    <div style={{ 
      display: 'flex', 
      justifyContent: 'center', 
      alignItems: 'center', 
      height: '100vh' 
    }}>
      <Spinner size="xl" label="Loading page..." />
    </div>
  );
}

Inline Loading

<div>
  <p>Fetching data <Spinner size="small" /></p>
</div>

Accessibility

  • ✅ ARIA role=“status”
  • ✅ Screen reader announcements
  • ✅ Proper labeling

Related Components