@invisionag/iris-react-a11y

3.4.2 • Public • Published
import {withFocus, withKeyboardHandlers} from '@invisionag/iris-react-a11y';

A collection of higher-order-components aiming to improve usability and accessability of our components.

withFocus

the withFocus hoc takes care of setting a prop hasFocus on the component passed to it. This prop will be true if the element is currently focused, and false if its not. You can use it to set the appropriate styling.

There are multiple benefits to using this hoc instead of :focus selectors:

  • It is testable
  • You dont have to rely on implementations that differ beween browsers
  • You can pass the prop to children as you like, whereas css rules would have to reach accross component scopes (i.e. .my-component:focus .my-child {}
  • In addition to styling, you can react with component logic on focus
  • The withFocus hoc removes focus styling when an element was clicked with the mouse

Example:

import {withFocus} from '@invisionag/iris-react-a11y';

const Component = ({ hasFocus, ...props }) => <div style={{ color: hasFocus ? 'red' : 'blue'}} {...props}>Lorem</div>

const FocusableComponent = withFocus(Component);

class App extends React.Component{
  render() {
    return <FocusableComponent />
  }
}

withKeyboardHandlers

The withKeyboardHandlers hoc listens to keydown / keyup events on the component and triggers mousedown / mouseup & click events on the passed component respectively. This makes it easier to implement keyboard navigation of interactable ui elements.

Example:

import {withKeyboardHandlers} from '@invisionag/iris-react-a11y';

const Component = props => <div {...props}>Lorem</div>

const KeyboardInteractableComponent = withKeyboardHandlers(Component);

class App extends React.Component{
  render() {
    // enter and space keyup while focused will trigger onClick handler
    return <KeyboardInteractableComponent onClick={console.log}/>
  }
}

Readme

Keywords

none

Package Sidebar

Install

npm i @invisionag/iris-react-a11y

Weekly Downloads

203

Version

3.4.2

License

MIT

Unpacked Size

33.4 kB

Total Files

9

Last publish

Collaborators

  • jj-ivx
  • ivx-github
  • jana_hehr
  • roberter26
  • birgithorn
  • alexj-ivx
  • amft
  • aitortomas
  • yashabfaryal0322
  • nleinich
  • johannesluedke
  • pgotthardt-ivx
  • hrabe
  • plore_ivx
  • patricialieske
  • plaudel
  • mblumtritt
  • sruehlemann
  • brerx
  • mohamedmmahfouz
  • mbrendler
  • jens.zobel
  • cwaider
  • kattelans
  • ftrautmann
  • lutz.peukert
  • fruetel
  • schmitze333
  • csprle
  • beckerei
  • stefan.schiffer
  • ahx
  • cloudwaechter
  • tobias
  • alexmarold
  • t_klepzig
  • susahope
  • mwannewitz
  • ivx-circle-ci
  • yichang
  • ivx-jenkins