JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1880
  • Score
    100M100P100Q126540F
  • License MIT

An accessible button component for React that provides interop between real `<button>` elements and fake ones, e.g. `<div role='button'>`

Package Exports

  • @accessible/button

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@accessible/button) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme


<Button>

Bundlephobia Types Code coverage Build status NPM Version MIT License

npm i @accessible/button

An accessible button component for React that provides interop between real <button> elements and fake ones, e.g. <div role='button'>. To do so, this component attaches the onClick handler from its child component to the keyboard events for space and enter. It also adds role='button' and tabIndex={0} properties, though this behavior can be overridden by providing those props to the child component e.g. <Button><div tabIndex={-1}></Button>.

Why does this exist?

In designing accessible libraries, we just don't know if our users are going to do the right thing i.e. using a <button> for buttons, rather than a <div>, <span>, or <a>. This component provides interoperability between <button> elements and those faux button elements.

Quick Start

Check out the example on CodeSandbox

import Button from '@accessible/button'

const ComponentA = () => (
  // Adds `space` and `enter` keydown handlers to the div,
  // also adds role='button' and tabIndex='0', both
  // of which can be overridden by providing those
  // props on your <div>
  <Button>
    <div onClick={console.log} />
  </Button>
  // <div role='button' tabindex='0'/>
)

const ComponentB = () => (
  // Won't break real buttons
  <Button>
    <button onClick={console.log} />
  </Button>
)

const MyButton = styled.button``

const ComponentC = () => (
  // Won't break real buttons, period.
  <Button>
    <MyButton onClick={console.log} />
  </Button>
)

API

Props

Prop Type Default Required? Description
children React.ReactElement undefined Yes The component you want to turn into a button that handles focus and space, enter keydown events.

LICENSE

MIT