Accessibility
A11y is built in, not bolted on. Every <AutoSkeleton>does the right thing for screen readers, keyboard users, and people with reduced-motion preferences.
What we set automatically
aria-busy="true"on the wrapper while loadingaria-live="polite"announces "loading content"- Skeleton layer is
aria-hidden="true"— readers skip it - Real (invisible) content is hidden from a11y tree while loading
- Keyboard focus is trapped away from the invisible real content
- RN:
accessibilityState={{ busy: true }}
Reduced motion
When prefers-reduced-motion: reduce is set, shimmer and wave are downgraded to a slower pulse. Toggle "Reduce Motion" in your OS settings to see this work live.
prefers-reduced-motion: no-preference (shimmer)
Loading content
Disable behavior
<SkeletonProvider respectReducedMotion={false}>
{/* shimmer always on, even with reduce-motion enabled */}
</SkeletonProvider>Custom announcement
<AutoSkeleton loading aria-label="Loading user profile">
<UserCard />
</AutoSkeleton>