Shimmering placeholder for content that is still loading — a block (Skeleton) and a labelled card-shaped region (SectionSkeleton).
Anatomy
┌ SectionSkeleton (rounded-card) ─┐ │ LABEL (uppercase, fg-muted) │ │ ▬▬▬▬▬▬▬▬▬▬▬ ← Skeleton rows │ │ ▬▬▬▬▬▬▬ │ │ ▬▬▬▬▬▬▬▬▬ │ └─────────────────────────────────┘
Props
| Prop | Type | Default | Notes |
|---|---|---|---|
className | string | — | cn-merged; shape the block with w-*/h-*. |
style | CSSProperties | — | Escape hatch for computed dimensions. |
height | number | — | SectionSkeleton only — minHeight in px, matches the loaded card to prevent layout shift. |
label | string | — | SectionSkeleton only — section name; becomes the aria-label. |
Motion
- ·
animate-pulseopacity shimmer only; collapses under
prefers-reduced-motion via the global reset (no per-component code).
A11y
- ·
Skeletonisaria-hidden— screen readers skip decorative shimmer. - ·
SectionSkeletoncarriesaria-busy+ anaria-label("<label> loading")
so the loading region is announced once, not per row.