1.0.3 • Published 8 months ago

react-screen-reader-support v1.0.3

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

Screen Reader Supporter

A React hook and component to improve accessibility for screen readers by announcing live region content dynamically.

Installation

To install the package in your project, run one of the following commands:

Using npm:

npm install screen-reader-supporter

Usage Examples

Example 1: Basic Button with Screen Reader Support

This example shows how to use the useScreenReaderSupporter hook to announce messages when the user interacts with a button (hover or focus).

import React from 'react';
import { useScreenReaderSupporter } from 'screen-reader-supporter';

const ButtonWithScreenReaderSupport = () => {
    const { handleFocusOrHover, handleBlurOrLeave } = useScreenReaderSupporter();
    
    return (
        <button
            onFocus={() => handleFocusOrHover('Button is focused')}
            onMouseEnter={() => handleFocusOrHover('Button is hovered')}
            onBlur={() => handleBlurOrLeave()}
            onMouseLeave={() => handleBlurOrLeave()}
        >
            Hover or Focus me
        </button>
    );
};

Example 2: "Click to Pay" Button with Dynamic Status Announcements

This example demonstrates how to use the useScreenReaderSupporter hook to announce dynamic payment status updates during a click-to-pay process. The user will hear updates when the button is clicked, when the payment is being processed, and when the payment is complete.

import React, { useState } from 'react';
import { useScreenReaderSupporter } from 'screen-reader-supporter';

const PaymentButton = () => {
    const [isProcessing, setIsProcessing] = useState(false);
    const [isSuccessful, setIsSuccessful] = useState(false);
    const { handleFocusOrHover, handleBlurOrLeave } = useScreenReaderSupporter();
    
    const handlePayment = () => {
        setIsProcessing(true);
        handleFocusOrHover('Payment processing started. Please wait.');
        
        // Simulate payment process with a timeout
        setTimeout(() => {
            setIsProcessing(false);
            const paymentSuccess = Math.random() > 0.5; // Random success or failure
            
            if (paymentSuccess) {
                setIsSuccessful(true);
                handleFocusOrHover('Payment successful. Thank you for your purchase!');
            } else {
                setIsSuccessful(false);
                handleFocusOrHover('Payment failed. Please try again.');
            }
        }, 3000);
    };
    
    return (
        <div>
            <button
                onFocus={() => handleFocusOrHover('Click to pay, proceed with checkout')}
                onMouseEnter={() => handleFocusOrHover('Click to pay, proceed with checkout')}
                onBlur={() => handleBlurOrLeave()}
                onMouseLeave={() => handleBlurOrLeave()}
                onClick={handlePayment}
                disabled={isProcessing}
            >
                {isProcessing ? 'Processing Payment...' : 'Click to Pay'}
            </button>
            
            {/* Display additional information for screen reader */}
            <p>
                {isProcessing ? 'Please wait while we process your payment.' : ''}
                {isSuccessful ? 'Thank you for your purchase!' : ''}
                {!isSuccessful && !isProcessing ? 'Payment failed, please try again.' : ''}
            </p>
        </div>
    );
};

export default PaymentButton;
1.0.3

8 months ago

1.0.2

8 months ago

1.0.1

8 months ago

1.0.0

8 months ago