Spinner
ImplementedLoading indicator — teal ring with rotating segment. Sizes: sm (16), md (24), lg (40). aria-label or aria-labelledby required when no visible label.
patterns/atoms/spinner.htmlAnimated loading indicator for indeterminate waits. FR-CA: Indicateur de chargement animé.
Spinner
Display atom (Family 2 — Tier 1)
Pair with role="status" + aria-live="polite".
This component supports light and dark mode.
Usage
import { Spinner } from '@epasslive/design-system'
<div role="status" aria-live="polite">
<Spinner size="md" label="Chargement des billets" />
</div>When to use
- Page-level loading (route transition, full refresh).
- Unknown load time — pair with a Skeleton for shape + Spinner for motion.
- Inline processing (form submit, search refresh).
Accessibility
- Always pass a French
labeldescribing what is loading. - Wrap in
role="status"+aria-live="polite"for politeness.
Props
size'sm' | 'md' | 'lg'mdPixel size — 16, 24, 40 respectively.
labelstringFrench description announced via aria-label.
classNamestringAdditional classes.
Props
Spinner
ariaLabelstring—Required — Spinner conveys no information visually without context
size"sm" | "md" | "lg"'md'Visual size preset.
decorativebooleanfalseRender as pure decoration — no role, no live region, aria-hidden. For when the surrounding component already announces the wait (LoadingOverlay). Prevents nesting two live regions, which is otherwise only avoidable by hand-copying the SVG.
labelstring—Visible label for the control.
<Spinner />Accessibility
Type
1 ruleARIA
1 ruleUsage
Import
import { Spinner } from "@epasslive/design-system"Example 1
<Spinner />Example 2
<Spinner variant="default" />Anti-patterns
— Do not compose atoms directly — use molecules instead
— Avoid inline styles on atoms