@vrbo/a11y-tools

Helper library with focus accessibility tools: TrackFocus and TrapFocus

Usage no npm install needed!

<script type="module">
  import vrboA11yTools from 'https://cdn.skypack.dev/@vrbo/a11y-tools';
</script>

README

a11y-tools

Introduction

Helper library with focus accessibility tools:

TrackFocus, which tracks focus events caused by the keyboard and highlights them, but DOES NOT show focus state for mouse and touch events. More Information

TrapFocus, which restricts keyboard tabbing to only focusable elements within a container. More Information

Maintainers

Usage

Application developers that want to consume this component should install the package using npm:

npm install @vrbo/a11y-tools

TrackFocus

Example Usage:

// ES6 module syntax:
import {TrackFocus} from '@vrbo/a11y-tools';

const trackFocus = new TrackFocus();

trackFocus.bindEvents();

TrapFocus

Example Usage:

import {TrapFocus} from '@vrbo/a11y-tools';
import React, {Component} from 'react';

class Example extends Component {
    constructor(props) {
        super(props);
        this.trapFocus = new TrapFocus();
        this.containerRef = React.createRef();
    }

    componentDidMount() {
        const node = this.containerRef.current;
        this.trapFocus.determineFocusable(node);
    }

    handleKeydown = (e) => {
        if (e.keyCode === 9) { // Tab key
            this.trapFocus.handleTabbing(e);
        }
    }

    render() {
        return (
            <div ref={this.containerRef} onKeydown={this.handleKeydown}>
                ...
            </div>
        )
    }
}

Development

Script Description
npm install Install the project dependencies; once installed npm run build is also executed
npm start Run the webpack dev server and open the test harness in a browser
npm run start:silent Runs the webpack dev server but does not open a browser window
npm run start:docs Run the dev server and open the component documentation in a browser window
npm run build Compile Less (CSS) and Javascript assets
npm run test Run unit tests, stylelint, eslint and provide code coverage metrics
npm run test:unit Run unit tests only. To debug within the test suite pass the --inspect flag to mocha like so: npm run test:unit -- --inspect and add debugger; //eslint-disable-line to the line in the test file you would like to break on. If you need to break immediately, use --inspect --inspect-brk.
npm run test:style Run linters to verify code meets the configured eslint settings
npm run test:coverage Run npm run test:unit and provide metrics about coverage

Notes

  • Any time the scripts related to start are executed the documentation or project demo is available in your browser at localhost:8000 or 0.0.0.0:8000.
  • To see a complete list of npm scripts, use: npm run

Component Documentation

The npm run start:docs command will build, run and launch the documentation that has been configured for the project. Documentation is configured through the discovery.json file in the root of the project. To add new documentation, add an entry to discovery.json and configure the options to point to the new markdown based documentation. Additionally, the npm run build:docs command is configured to build the documentation and publish it as the Github Pages content for the associated repository.

Further Reading