Feedback

Skeleton

World-class loading placeholders that show animated wireframes while content loads. Essential for healthcare applications where data loading states must be clearly communicated without causing user anxiety.

Animations are paused for easier browsing

Animation Styles

Wave animation is perceived as faster than pulse. Use wave for most cases, pulse for subtle background loading.

Wave (default, faster perceived loading)

Loading content

Pulse (classic, subtle)

Loading content

None (static placeholder)

Loading content

Basic Variants

Use the appropriate variant to match the content being loaded.

Loading content

Avatar

Loading content

Circle

Loading content

Button

Text (3 lines)

Loading content

Image

Loading content

Composite Skeletons

Pre-built composite skeletons for common healthcare UI patterns. These match actual content layouts for better perceived performance.

Patient Card

Loading patient summary

Stat Card

Loading statistics

Table Rows

Use table-row variant with count prop to show loading data tables.

Lab Results

Loading lab results

List Items

Use list-item variant for loading patient lists, appointment lists, etc.

Recent Patients

Loading patient list

Sizes

Size presets ensure consistency across your application.

Avatar Sizes

Loading content

xs

Loading content

sm

Loading content

md

Loading content

lg

Loading content

xl

Button Sizes

Loading content

xs

Loading content

sm

Loading content

md

Loading content

lg

Loading content

xl

Text Sizes

xs
Loading content
sm
Loading content
md
Loading content
lg
Loading content
xl
Loading content

Loading vs Loaded State

Toggle between skeleton and loaded content to see the transition.

Loading patient 1
Loading patient 2

Props

PropTypeDefaultDescription
variant 'rectangle' | 'circle' | 'text' | 'avatar' | 'button' | 'card' | 'image' | 'table-row' | 'patient-card' | 'stat-card' | 'list-item''rectangle'Visual variant of the skeleton
size 'xs' | 'sm' | 'md' | 'lg' | 'xl''md'Size preset (for avatar, button, text variants)
width stringCustom width (CSS value)
height stringCustom height (CSS value)
lines number1Number of lines (for text variant)
count number1Number of items (for table-row, list-item variants)
animation 'wave' | 'pulse' | 'none''wave'Animation style - wave is perceived as faster
rounded 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full' | string'md'Border radius
label string'Loading content'Accessible label for screen readers

Healthcare Best Practices

  • Match Layout: Use skeleton shapes that match actual content (patient-card for patients, table-row for tables) for better perceived performance.
  • Wave Animation: Research shows wave/shimmer animation is perceived as faster than pulse - use it for primary loading states.
  • Meaningful Labels: Provide specific label props for screen readers (e.g., "Loading patient records" not just "Loading").
  • Replace Promptly: Replace skeletons with actual content immediately when data arrives - never leave skeletons visible indefinitely.
  • Error Handling: If loading fails, replace skeleton with an EmptyState error variant, not a stuck skeleton.

Accessibility Notes

  • ARIA Status: Uses role="status" with aria-busy="true" to indicate loading.
  • Screen Reader Text: Hidden text provides context without over-announcing.
  • Reduced Motion: Animation is disabled for users with prefers-reduced-motion preference.
  • Visual Only: Decorative skeleton elements use aria-hidden="true".