Skip to content

feat: define branded loading state hierarchy with shimmer token#191

Open
theFirstCodeManiac wants to merge 1 commit into
RevoraOrg:masterfrom
theFirstCodeManiac:feat/loading-progress-hierarchy
Open

feat: define branded loading state hierarchy with shimmer token#191
theFirstCodeManiac wants to merge 1 commit into
RevoraOrg:masterfrom
theFirstCodeManiac:feat/loading-progress-hierarchy

Conversation

@theFirstCodeManiac

Copy link
Copy Markdown

Closes #151

Pull Request

Summary

Introduced a unified loading state system across the application with consistent branded visuals, accessible behavior, and responsive design. Added standardized button spinners, inline progress indicators, page loaders, and section skeletons powered by a shared shimmer token.

Changes Made

  • Defined a shared shimmer design token for all skeleton loading states
  • Added four standardized loading variants:
    • Button spinner
    • Inline progress indicator
    • Page-level loader
    • Section skeleton
  • Updated src/components/Button.tsx to use the standardized button loading state
  • Added aria-label support to spinner components for accessibility
  • Implemented reduced-motion support by pausing shimmer animations under prefers-reduced-motion
  • Documented recommended usage for each loading variant, including latency thresholds
  • Ensured responsive behavior across supported screen sizes
  • Aligned loading components with existing design system patterns

Testing

  • Verified each loading variant renders correctly across viewport sizes
  • Confirmed shimmer animations pause when prefers-reduced-motion is enabled
  • Validated spinner accessibility with appropriate aria-label attributes
  • Checked visual consistency across loading states
  • Reviewed documentation for correctness and completeness

Acceptance Criteria

  • Define the shimmer token and four loading variants
  • Document when to use each loading state, including latency thresholds
  • Add reduced-motion fallback
  • Validate accessibility (WCAG 2.1 AA) and responsive behavior

- Add --shimmer-gradient design token to :root in index.css
- Add @Keyframes shimmer, spin-loader with prefers-reduced-motion fallback
- Add CSS classes: .animate-shimmer, .animate-spin-loader, .skeleton,
  .skeleton-text/title/avatar/rect, .progress-bar-*, .page-loader-*
- New LoadingSpinner component: aria-hidden-aware, uses animate-spin-loader
- New ProgressBar component: determinate + indeterminate modes, WCAG progressbar role
- New PageLoader component: full-screen overlay, role=status, aria-live=polite
- New Skeleton component: 5 variants, count prop, aria-hidden=true
- Refactor Button to use LoadingSpinner instead of raw Loader2
- Refactor AuthSubmitButton to use LoadingSpinner
- Refactor StatusTimeline in-progress icon to use LoadingSpinner
- Add docs/LOADING_STATES.md: latency thresholds, usage guidelines, examples

WCAG 2.1 AA:
  - Spinners include role=img + aria-label when visible; aria-hidden when decorative
  - Shimmer pauses under prefers-reduced-motion
  - ProgressBar exposes aria-valuenow / aria-valuemin / aria-valuemax
  - PageLoader announces via aria-live=polite

Refs: feat/loading-progress-hierarchy
@drips-wave

drips-wave Bot commented Jul 4, 2026

Copy link
Copy Markdown

@theFirstCodeManiac Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[UI/UX Design] Design branded loading states with shimmer and progress hierarchy

1 participant