Skip to content

Spinner ​

A flexible loading indicator component with multiple colors, sizes, thicknesses, and label options. Includes helpers for overlays, cards, buttons, and full-page loading states. Useful for indicating loading or processing in any part of your UI.


Import ​

tsx
import { Spinner, SpinnerOverlay, SpinnerCard, ButtonSpinner, FullPageSpinner } from '@odyssee/components';

Examples ​

Basic Spinner ​

Code Éditable
Résultat

Colors ​

Code Éditable
Résultat

Sizes ​

Code Éditable
Résultat

With Label ​

Code Éditable
Résultat

Centered Spinner ​

Code Éditable
Résultat

Different Thickness ​

Code Éditable
Résultat

Spinner in a Card ​

Code Éditable
Résultat

Spinner Overlay ​

Code Éditable
Résultat

Button Spinner ​

Code Éditable
Résultat

Full Page Spinner ​

Code Éditable
Résultat

Props Table ​

Spinner ​

PropTypeDefaultDescription
size"xs" | "sm" | "md" | "lg" | "xl""md"Size of the spinner.
color"primary" | "secondary" | "success" | "danger" | "warning" | "info" | "gray" | "white" | "indigo" | "purple" | "pink" | "orange""primary"Spinner color.
thickness2 | 3 | 43Border thickness (in px).
labelstring"Loading..."Accessible label for screen readers and optional visible label.
showLabelbooleanfalseShow label next to spinner.
centeredbooleanfalseCenter the spinner in a flex container.
classNamestring—Additional CSS classes.
idstringauto-genHTML id attribute.
stylestring—Inline styles.

SpinnerOverlay ​

All Spinner props, plus:

  • Renders spinner with a semi-transparent overlay and centers it in the parent.

SpinnerCard ​

All Spinner props, plus:

  • Renders spinner inside a card container with padding and min height.

ButtonSpinner ​

All Spinner props except size (always "xs"), defaults to color="white".

FullPageSpinner ​

All Spinner props, plus:

  • Renders spinner centered on a full-page overlay with backdrop.

Implementation Notes ​

  • Sizes:
    • "xs": 1rem, "sm": 1.25rem, "md": 1.5rem, "lg": 2rem, "xl": 2.5rem.
  • Colors:
    • Uses Tailwind color classes for border color.
  • Thickness:
    • Controls the border width of the spinner.
  • Label:
    • Always included as a visually hidden <span> for accessibility; can be shown next to spinner with showLabel.
  • Helpers:
    • Use SpinnerOverlay, SpinnerCard, ButtonSpinner, and FullPageSpinner for common loading UI patterns.
  • Composition:
    • Combine with cards, overlays, or buttons for richer loading states.

Accessibility ​

  • Spinner uses role="status" and an accessible label for screen readers.
  • The label is always present as a visually hidden element, even if not shown.
  • Use showLabel for visible loading text.
  • Overlay and full-page spinners block interaction and provide clear feedback.
  • Ensure color contrast is sufficient for all spinner colors.

Best Practices ​

  • Use spinners to indicate loading or processing in forms, cards, overlays, or full pages.
  • Prefer visible labels for longer loading states or when context is unclear.
  • Use overlays or full-page spinners to block interaction during critical operations.
  • Use ButtonSpinner inside buttons for inline loading feedback.
  • Match spinner color and size to the surrounding UI for consistency.


Released under the MIT License.