# Accessibility Widgets [](https://www.npmjs.com/package/accessibility-widgets) [](https://opensource.org/licenses/GPL-3.0) [](https://unpkg.com/accessibility-widgets) A comprehensive, zero-dependency accessibility widget that enhances web accessibility for all users. This lightweight, single-file JavaScript solution provides 14+ accessibility features to make your website instantly more inclusive and compliant with WCAG 2.1 AA, Section 508, and EN 301 549 standards.  ## β‘ Quick Start ```html ``` Or install via NPM: ```bash npm install accessibility-widgets ``` ```javascript // Import in your project import 'accessibility-widgets'; // or require('accessibility-widgets'); ``` ## β¨ Key Features ### π¨ Visual Enhancements - **High Contrast Mode** - 3 levels (Medium 1.3x, High 1.5x, Ultra 2.0x) for improved visibility - **Text Size Control** - 4 size options (Default, Medium 20px, Large 24px, X-Large 28px) - **Line Height Adjustment** - 3 spacing levels (2em, 3em, 4em) for better readability - **Text Spacing** - Enhanced letter (0.2em) and word spacing (0.3em) - **Text Alignment** - Left, Center, or Right alignment options - **Bigger Cursor** - High-contrast 48x72px cursor with SVG rendering - **Hide Images** - Text-only mode for focused reading or bandwidth saving ### π§ Cognitive Support - **Dyslexia-Friendly Font** - Comic Sans MS and other dyslexia-optimized fonts - **Font Selection** - Choose between Arial, Times New Roman, or Verdana - **Animation Control** - Pause all animations and transitions - **Reduced Motion** - Motion sensitivity support for vestibular disorders ### βΏ Assistive Technology - **Screen Reader** - Built-in text-to-speech using Web Speech API - **Voice Control** - Hands-free navigation with 15+ voice commands - **Color Blindness Filters** - Protanopia, Deuteranopia, Tritanopia, and Grayscale modes - **Keyboard Navigation** - Full Tab/Arrow key support with proper focus indicators ## π Compliance & Standards ### WCAG 2.1 AA Coverage | Feature | WCAG Criteria | EU EN 301 549 | US Section 508 | |---------|---------------|---------------|----------------| | High Contrast Mode | β 1.4.3, 1.4.6 | β | β | | Text Size Adjustment | β 1.4.4 | β | β | | Text Spacing | β 1.4.12 | β | β | | Line Height Adjustment | β 1.4.12 | β | β | | Text Alignment | β 1.4.8 | β | β | | Cursor Enhancement | β 2.5.5 | β | β | | Pause Animations | β 2.2.2, 2.3.3 | β | β | | Reduced Motion | β 2.3.3 | β | β | | Hide Images | β 1.1.1 | β | β | | Dyslexia-Friendly Font | β 1.4.8 | β | β | | Screen Reader | β 4.1.3 | β | β | | Voice Control | β οΈ Browser API | β οΈ | β οΈ | | Color Filters | β 1.4.1 | β | β | > **Note**: This widget helps meet accessibility criteria but does not guarantee full compliance. Complete WCAG/Section 508 compliance requires proper HTML semantics, ARIA attributes, manual testing, and user validation. ## π― Installation Methods ### CDN (Fastest) ```html ``` ### NPM ```bash npm install accessibility-widgets ``` ```javascript // ES6 Import import 'accessibility-widgets/widget.js'; // CommonJS require('accessibility-widgets/widget.js'); ``` ### Direct Download 1. Download [widget.js](https://github.com/sinanisler/accessibility-widgets/raw/main/widget.js) 2. Include in your HTML: ```html ``` ## βοΈ Configuration ### Basic Setup (No Configuration Needed) The widget works out of the box with zero configuration: ```html ``` ### Custom Configuration Customize the widget by defining `window.ACCESSIBILITY_WIDGET_CONFIG` before loading the script: ```html ``` ### Full Configuration Options ```javascript window.ACCESSIBILITY_WIDGET_CONFIG = { // ===== Feature Toggles ===== enableHighContrast: true, enableBiggerText: true, enableTextSpacing: true, enablePauseAnimations: true, enableHideImages: true, enableDyslexiaFont: true, enableBiggerCursor: true, enableLineHeight: true, enableTextAlign: true, enableScreenReader: true, enableVoiceControl: true, enableFontSelection: true, enableColorFilter: true, // ===== Widget Layout ===== widgetWidth: '440px', widgetColumns: 2, // Grid columns (1-4) // ===== Position ===== widgetPosition: { side: 'right', // 'left' or 'right' right: '20px', left: '20px', bottom: '20px' }, // ===== Colors ===== colors: { primary: '#1663d7', secondary: '#ffffff', optionBg: '#ffffff', optionText: '#333333', optionIcon: '#000000' }, // ===== Button Styling ===== button: { size: '55px', borderRadius: '100px', iconSize: '40px', shadow: '0 4px 8px rgba(0, 0, 0, 0.2)' }, // ===== Typography ===== typography: { fontFamily: 'Arial, sans-serif', fontSize: '17px', titleFontSize: '22px', titleFontWeight: '700' }, // ===== Internationalization (i18n) ===== lang: { accessibilityMenu: 'Accessibility Menu', accessibilityTools: 'Accessibility Tools', resetAllSettings: 'Reset All Settings', screenReader: 'Screen Reader', voiceCommand: 'Voice Command', textSpacing: 'Text Spacing', pauseAnimations: 'Pause Animations', hideImages: 'Hide Images', dyslexiaFriendly: 'Dyslexia Friendly', biggerCursor: 'Bigger Cursor', lineHeight: 'Line Height', fontSelection: 'Font Selection', colorFilter: 'Color Filter', textAlign: 'Text Align', textSize: 'Text Size', highContrast: 'High Contrast' }, // ===== Voice Commands ===== voiceCommands: { showMenu: ['show menu', 'open menu'], highContrast: ['high contrast'], biggerText: ['bigger text', 'large text'], textSpacing: ['text spacing'], pauseAnimations: ['pause animations'], hideImages: ['hide images'], dyslexiaFont: ['dyslexia font'], biggerCursor: ['bigger cursor'], screenReader: ['screen reader'], resetAll: ['reset all', 'reset everything'] } }; ``` ## π Internationalization (i18n) Full multilingual support - customize all text and voice commands: ### Spanish Example ```html ``` ## π€ Voice Commands When voice control is enabled (Chrome/Edge only), use these commands: | Command | Action | |---------|--------| | "show menu" / "open menu" | Opens accessibility menu | | "high contrast" | Toggles contrast mode | | "bigger text" / "large text" | Increases text size | | "text spacing" | Toggles text spacing | | "pause animations" | Stops all animations | | "hide images" | Removes images | | "dyslexia font" | Activates dyslexia-friendly font | | "bigger cursor" | Enlarges cursor | | "line height" | Adjusts line spacing | | "screen reader" | Activates text-to-speech | | "reset all" | Resets all settings | *All commands are fully customizable via `voiceCommands` configuration*## π Feature Details ### High Contrast Mode Three contrast enhancement levels: - **Medium**: 1.3x boost for subtle improvement - **High**: Black background + white text + 1.5x contrast - **Ultra**: Black background + yellow text + 2.0x contrast ### Text Size Control Four size options (Default, Medium 20px, Large 24px, X-Large 28px) with smart widget exclusion to maintain UI consistency. ### Text Spacing Enhanced letter spacing (0.2em) and word spacing (0.3em) for improved readability, especially helpful for dyslexia. ### Line Height Adjustment Three spacing levels (2em, 3em, 4em) to reduce visual crowding and improve reading flow. ### Animation Control Completely disables CSS animations and transitions - critical for users with vestibular disorders or ADHD. ### Image Hiding Text-only mode with smart caching (5-second intervals) to catch dynamically loaded images. ### Dyslexia-Friendly Font Uses Comic Sans MS and fallback fonts optimized for dyslexia (Chalkboard SE, Bradley Hand, Brush Script MT). ### Cursor Enhancement Custom 48x72px SVG cursor with high-contrast black fill and white stroke for better visibility. ### Screen Reader (Text-to-Speech) Built-in TTS using Web Speech API - reads focused element text, alt attributes, and titles. ### Voice Control Hands-free operation with Web Speech Recognition API. Supports 15+ customizable commands. ### Color Blindness Filters SVG-based filters for Protanopia (red-blind), Deuteranopia (green-blind), Tritanopia (blue-blind), and Grayscale modes. ### Font Selection Cycle through Arial (modern sans-serif), Times New Roman (traditional serif), and Verdana (screen-optimized). ## π Technical Features - β **Zero Dependencies** - Pure vanilla JavaScript, no frameworks required - β **Lightweight** - Single file, ~1900 lines minified - β **Persistent Settings** - localStorage saves user preferences across sessions - β **Keyboard Accessible** - Full Tab/Arrow key navigation with proper focus management - β **ARIA Compliant** - Complete ARIA labels and roles for assistive technologies - β **Performance Optimized** - DOM caching, efficient event delegation, debounced updates - β **Error Handling** - Graceful degradation for unsupported browser APIs - β **Responsive Design** - Works seamlessly on desktop, tablet, and mobile - β **Flexible Positioning** - Left or right side placement with custom offsets - β **Full i18n Support** - Complete text customization for any language - β **Dynamic Theming** - Customizable colors with SVG icon color synchronization - β **Auto-initialization** - Automatically loads when DOM is ready ## π Browser Compatibility | Browser | Core Features | Screen Reader | Voice Control | |---------|---------------|---------------|---------------| | Chrome 90+ | β | β | β | | Edge 90+ | β | β | β | | Firefox 88+ | β | β | β | | Safari 14+ | β | β | β | | Opera 76+ | β | β | β | **Note**: Voice Control requires Web Speech Recognition API (Chromium-based browsers only). Screen Reader requires Web Speech Synthesis API. ## π‘ Usage Examples ### Minimal Implementation ```html
This site is fully accessible.
``` ### With Custom Configuration ```html