SolidOS / SolidOS/solid-ui

ACCESSIBILITY-CHECKLIST.md

オープン
#660 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
TypeScript
スター
153
フォーク
46
平均マージ
1日 8時間
マージ済み PR(30日)
7

説明

Accessibility Checklist for Solid-UI Theme System

Date: January 15, 2026
Scope: WCAG 2.1 Level AA Compliance
Related: Theme System Analysis


Overview

This checklist ensures the theme system implementation meets WCAG 2.1 Level AA accessibility standards, making Solid applications usable by people with disabilities including visual, auditory, motor, and cognitive impairments.


Phase 1: Foundation (Weeks 1-2)

✅ Color & Contrast
  • Color Contrast Ratios (WCAG 2.1 - 1.4.3)

    • Normal text: Minimum 4.5:1 contrast ratio
    • Large text (18pt+): Minimum 3:1 contrast ratio
    • UI components: Minimum 3:1 contrast ratio
    • Test all theme color combinations
    • Document contrast ratios for each theme
  • Color Independence (WCAG 2.1 - 1.4.1)

    • Information not conveyed by color alone
    • Use icons + text labels together
    • Error states use icons, not just red color
    • Success states use icons, not just green color
  • High Contrast Mode (WCAG 2.1 - 1.4.6)

    • Implement @media (prefers-contrast: high) support
    • Test with Windows High Contrast Mode
    • Borders visible in high contrast
    • Focus indicators work in high contrast
✅ Typography & Readability
  • Text Resize (WCAG 2.1 - 1.4.4)

    • Text resizable up to 200% without loss of functionality
    • Use relative units (em, rem) instead of px
    • Test at 200% zoom in browser
    • No horizontal scrolling at 200% zoom
  • Font Choices

    • Use readable sans-serif fonts (Inter, Roboto)
    • Minimum 16px base font size
    • Line height at least 1.5x font size
    • Paragraph spacing at least 1.5x line height
  • Reduced Motion (WCAG 2.1 - 2.3.3)

    • Implement @media (prefers-reduced-motion: reduce)
    • Disable animations when user prefers reduced motion
    • Provide instant theme switching option
    • Test with motion preference enabled
✅ Focus Management
  • Visible Focus Indicators (WCAG 2.1 - 2.4.7)

    • Focus outline visible on all interactive elements
    • Focus outline minimum 2px width
    • High contrast between focus and background
    • Focus outline not obscured by content
    • Custom focus styles meet 3:1 contrast ratio
  • Focus Order (WCAG 2.1 - 2.4.3)

    • Logical tab order (left to right, top to bottom)
    • Theme switcher in logical position
    • Skip to main content link provided
    • No keyboard traps
  • Focus Visible (CSS)

    /* Example implementation */
    :focus-visible {
      outline: 2px solid var(--sui-focus-color);
      outline-offset: 2px;
    }
    
    /* Don't hide focus for keyboard users */
    :focus:not(:focus-visible) {
      outline: none;
    }
    
✅ CSS Variables for Accessibility
/* src/themes/foundation/accessibility.css */
:root {
  /* Focus indicators */
  --sui-focus-color: #667eea;
  --sui-focus-width: 2px;
  --sui-focus-offset: 2px;
  
  /* Minimum touch targets */
  --sui-touch-target-min: 44px;
  
  /* Readable text */
  --sui-line-height: 1.5;
  --sui-paragraph-spacing: 1.5em;
}

/* High contrast mode */
@media (prefers-contrast: high) {
  :root {
    --sui-border: #000;
    --sui-text: #000;
    --sui-bg: #fff;
    --sui-focus-color: #000;
  }
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

Phase 2: Components (Weeks 3-4)

✅ Theme Switcher Widget
  • Keyboard Accessible (WCAG 2.1 - 2.1.1)

    • Operable with keyboard only
    • Space/Enter to activate
    • Arrow keys to navigate options
    • Escape to close if dropdown
  • ARIA Attributes

    <select 
      id="theme-switcher"
      aria-label="Choose color theme"
      aria-describedby="theme-help">
      <option value="classic">Classic</option>
      <option value="solid">Solid</option>
      <option value="wave">Wave</option>
      <option value="telegram">Telegram</option>
    </select>
    <span id="theme-help" class="sr-only">
      Changes the color scheme of the application
    </span>
    
  • Change Announcements

    • Announce theme change to screen readers
    • Use ARIA live region
    • Polite announcement (not assertive)
✅ Buttons & Interactive Elements
  • Button Accessibility (WCAG 2.1 - 4.1.2)

    • Use semantic <button> elements
    • Descriptive accessible names
    • Disabled state communicated to screen readers
    • Loading state announced
  • Touch Target Size (WCAG 2.1 - 2.5.5)

    • Minimum 44x44px touch targets
    • Adequate spacing between targets
    • Test on mobile devices
  • ARIA for Buttons

    <!-- Standard button -->
    <button type="button" aria-label="Save changes">
      💾
    </button>
    
    <!-- Toggle button -->
    <button 
      type="button" 
      role="switch"
      aria-checked="false"
      aria-label="Dark mode">
      Toggle
    </button>
    
    <!-- Button with loading state -->
    <button 
      type="button"
      aria-busy="true"
      aria-label="Saving...">
      Saving...
    </button>
    
✅ Form Controls
  • Labels (WCAG 2.1 - 1.3.1, 3.3.2)

    • All inputs have associated labels
    • Label text describes purpose
    • Use <label for="id"> or aria-label
    • Required fields marked
  • Error Messages (WCAG 2.1 - 3.3.1, 3.3.3)

    • Errors clearly identified
    • Error descriptions provided
    • Errors associated with fields (aria-describedby)
    • Error summary at top of form
  • Input Validation

    <div class="form-field">
      <label for="username">Username *</label>
      <input 
        id="username"
        type="text"
        aria-required="true"
        aria-invalid="false"
        aria-describedby="username-error username-hint">
      <span id="username-hint" class="hint">
        Must be 3-20 characters
      </span>
      <span id="username-error" role="alert" class="error" hidden>
        Username is required
      </span>
    </div>
    
✅ Chat Components
  • Message List (WCAG 2.1 - 1.3.1)

    • Semantic list markup (<ul>, <li>)
    • Messages have role="article" or similar
    • Timestamps readable by screen readers
    • Author names clearly associated
  • Live Regions (WCAG 2.1 - 4.1.3)

    • New messages announced
    • Use aria-live="polite" for chat
    • Use aria-live="assertive" for alerts
    • Limit announcement frequency
  • Chat Accessibility

    <div class="chat-container" role="log" aria-label="Chat messages">
      <ul class="messages" aria-live="polite" aria-atomic="false">
        <li class="message" role="article">
          <img src="avatar.jpg" alt="John Doe" class="avatar">
          <div class="message-content">
            <span class="author">John Doe</span>
            <time datetime="2026-01-15T10:30:00">10:30 AM</time>
            <p>Hello world!</p>
          </div>
        </li>
      </ul>
    </div>
    
    <!-- Announcement for screen readers only -->
    <div role="status" aria-live="polite" class="sr-only">
      New message from John Doe: Hello world!
    </div>
    
✅ Dialogs & Modals
  • Dialog Accessibility (WCAG 2.1 - 2.4.3)

    • Use role="dialog" or role="alertdialog"
    • aria-labelledby for title
    • aria-describedby for description
    • Focus trapped inside dialog
    • Escape key closes dialog
    • Focus returns to trigger on close
  • Modal Implementation

    <div 
      role="dialog"
      aria-modal="true"
      aria-labelledby="dialog-title"
      aria-describedby="dialog-desc">
      <h2 id="dialog-title">Confirm Action</h2>
      <p id="dialog-desc">Are you sure you want to proceed?</p>
      <button type="button">Cancel</button>
      <button type="button">Confirm</button>
    </div>
    

Phase 3: Advanced Patterns (Weeks 5-6)

✅ Complex Widgets
  • Tabs (WCAG 2.1 - 4.1.2)

    • role="tablist" on container
    • role="tab" on tab buttons
    • role="tabpanel" on panels
    • aria-selected on active tab
    • Arrow key navigation
  • Accordions

    • Semantic heading structure
    • Button triggers with aria-expanded
    • aria-controls linking
    • Keyboard navigation
  • Menus

    • role="menu" and role="menuitem"
    • Arrow key navigation
    • Home/End key support
    • Escape to close
✅ Dynamic Content
  • Loading States (WCAG 2.1 - 4.1.3)

    • aria-busy="true" during loading
    • Loading message announced
    • Skeleton screens have aria-label
    • Spinners have accessible names
  • Infinite Scroll

    • Announce loading more items
    • "Load More" button alternative
    • Total count provided
    • Progress indicated
✅ Landmark Regions
  • Page Structure (WCAG 2.1 - 2.4.1)

    • <header> or role="banner"
    • <nav> or role="navigation"
    • <main> or role="main"
    • <aside> or role="complementary"
    • <footer> or role="contentinfo"
  • Skip Links

    <a href="#main-content" class="skip-link">
      Skip to main content
    </a>
    <a href="#navigation" class="skip-link">
      Skip to navigation
    </a>
    
    <style>
    .skip-link {
      position: absolute;
      top: -40px;
      left: 0;
      background: var(--sui-primary);
      color: white;
      padding: 8px;
      z-index: 100;
    }
    
    .skip-link:focus {
      top: 0;
    }
    </style>
    

Phase 4: Testing & Validation (Week 7)

✅ Automated Testing
  • axe DevTools

    • Run on all pages
    • Fix all critical issues
    • Document known issues
    • Regular CI/CD checks
  • WAVE

    • Check each theme
    • Verify contrast ratios
    • Check structure
    • Validate ARIA
  • Lighthouse

    • Accessibility score > 95
    • All categories checked
    • Performance impact minimal
✅ Manual Testing
  • Keyboard Navigation

    • Tab through all interactive elements
    • No keyboard traps
    • Visible focus at all times
    • Logical tab order
    • All actions keyboard accessible
  • Screen Reader Testing

    • NVDA (Windows - free)
    • JAWS (Windows - commercial)
    • VoiceOver (Mac - built-in)
    • TalkBack (Android)
    • VoiceOver (iOS)
  • Screen Reader Checklist

    • All content readable
    • Headings properly nested
    • Links descriptive
    • Forms properly labeled
    • Dynamic updates announced
    • Images have alt text
  • Browser Testing

    • Chrome + ChromeVox
    • Firefox
    • Safari
    • Edge
    • Mobile browsers
✅ Visual Testing
  • Zoom Testing

    • 200% zoom without horizontal scroll
    • 400% zoom still usable
    • Text doesn't overlap
    • All content accessible
  • Color Blindness

    • Test with color blindness simulators
    • Deuteranopia (red-green)
    • Protanopia (red-green)
    • Tritanopia (blue-yellow)
    • Information not color-dependent
✅ User Testing
  • Real Users with Disabilities

    • Screen reader users
    • Keyboard-only users
    • Low vision users
    • Cognitive disability users
    • Motor disability users
  • Feedback Collection

    • Document issues found
    • Prioritize fixes
    • Iterate and retest
    • Continuous improvement

Testing Tools & Resources

Browser Extensions
Screen Readers
Testing Services
  • axe Monitor - Automated accessibility monitoring
  • UsableNet - Accessibility testing platform
  • Tenon.io - API-based accessibility testing
Documentation

Screen Reader Only (SR-Only) Utility

/* Visually hidden but accessible to screen readers */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

/* Focusable when navigated to via keyboard */
.sr-only-focusable:focus {
  position: static;
  width: auto;
  height: auto;
  padding: inherit;
  margin: inherit;
  overflow: visible;
  clip: auto;
  white-space: normal;
}

Success Criteria

Phase 1 (Foundation)
  • ✅ All color contrasts meet WCAG AA (4.5:1 minimum)
  • ✅ Focus indicators visible on all interactive elements
  • ✅ Reduced motion preference respected
  • ✅ High contrast mode supported
Phase 2 (Components)
  • ✅ All form fields properly labeled
  • ✅ Theme switcher fully keyboard accessible
  • ✅ ARIA attributes correct and validated
  • ✅ Touch targets minimum 44x44px
Phase 3 (Advanced)
  • ✅ Complex widgets follow ARIA patterns
  • ✅ Dynamic content updates announced
  • ✅ Landmark regions properly defined
  • ✅ Skip links functional
Phase 4 (Testing)
  • ✅ axe DevTools: 0 critical issues
  • ✅ Lighthouse accessibility: >95 score
  • ✅ Manual keyboard testing: 100% pass
  • ✅ Screen reader testing: 100% pass
  • ✅ User testing: Positive feedback

Ongoing Maintenance

  • Regular Audits

    • Quarterly accessibility reviews
    • Update with new WCAG guidelines
    • Monitor user feedback
    • Fix issues promptly
  • Documentation

    • Maintain accessibility guide
    • Document known limitations
    • Provide VPAT (Voluntary Product Accessibility Template)
    • Update as features change
  • Training

    • Developer accessibility training
    • QA accessibility testing training
    • Design accessibility guidelines
    • Continuous education

Status: Draft for Implementation
Last Updated: January 15, 2026
Next Review: After Phase 1 completion

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず ACCESSIBILITY-CHECKLIST.md と関連する ANALYSIS-solid-chat-styles-for-solid-ecosystem.md を確認し、次に参照されている src/themes/foundation/accessibility.css パスを調べてください。チェックリストはテーマスタイル、ウィジェット、フォーム、チャット、ダイアログ、テスト、ユーザーによる検証に及びます。この issue では、より狭い成果物や完了範囲は定義されていません。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
css, html
領域
accessibility, documentation, frontend
issue の種類
ドキュメント
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
25/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。