Skip to content
Client side A11y tools for trapping and tracking user focus.
JavaScript HTML CSS
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



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



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

npm install @vrbo/a11y-tools


Example Usage:

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

const trackFocus = new TrackFocus();



Example Usage:

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

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

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

    handleKeydown = (e) => {
        if (e.keyCode === 9) { // Tab key

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


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


  • Any time the scripts related to start are executed the documentation or project demo is available in your browser at localhost:8000 or
  • 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

You can’t perform that action at this time.