An open API service indexing awesome lists of open source software.

https://github.com/accessible-ui/toggle-button

🅰 An accessible two-state button that can be either off (not pressed) or on (pressed)
https://github.com/accessible-ui/toggle-button

a11y a11y-button a11y-toggle accessibility accessible accessible-react accessible-toggle aria aria-button aria-toggle react

Last synced: 2 months ago
JSON representation

🅰 An accessible two-state button that can be either off (not pressed) or on (pressed)

Awesome Lists containing this project

README

        





<ToggleButton>




Bundlephobia


Types


Code coverage


Build status


NPM Version


MIT License

npm i @accessible/toggle-button


An accessible two-state button that can be either off (not pressed) or on (pressed). Common use cases
are toolbar buttons like Bold, Italic, and Underline. In addition to following the
[accessibility guidelines here](https://www.w3.org/TR/wai-aria-practices/#button), this component
provides interop between real `` elements and faux `

`, ``, ``, et. al. buttons.

## Quick Start

[Check out the example on **CodeSandbox**](https://codesandbox.io/s/accessibletoggle-button-example-s1cuy)

```jsx harmony
import * as React from 'react'
import {ToggleButton, useA11yToggleButton} from '@accessible/toggle-button'

const Component = () => {
const [muted, setMuted] = React.useState(false)
return (

{muted ? 'Unmute' : 'Mute'}

)
}

const ComponentWithHook = () => {
const ref = React.useRef(null)
const [muted, setMuted] = React.useState(false)
const a11yProps = useA11yToggleButton(ref, {
active: muted,
onChange: setMuted,
})

return (

{muted ? 'Unmute' : 'Mute'}

)
}
```

## API

### useA11yToggleButton(target, options?)

A React hook for creating a headless a11y toggle button to the
[W3C accessibility standard](https://www.w3.org/TR/wai-aria-practices/#button). In addition
to providing accessibility props to your component, this hook will add events for interoperability
between actual `` elements and fake ones e.g. `
` and `

` to the `target` element.

#### Arguments

| Argument | Type | Required? | Description |
| -------- | ----------------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------- |
| target | React.RefObject<T> | T | null | Yes | A React ref or HTML element | |
| options | [`UseA11yToggleButtonOptions`](#usea11ytogglebuttonoptions) | Yes | The component you want to turn into a button that handles focus and `space`, `enter` keydown events. |

#### UseA11yToggleButtonOptions

```ts
export interface UseA11yToggleButtonOptions {
/**
* Creates a controlled hook where the active value always matches this one.
*/
active?: boolean
/**
* Sets the default active state of the button for uncontrolled hooks.
* @default false
*/
defaultActive?: boolean
/**
* This callback is invoked any time the active state of the
* toggle button changes
*/
onChange?: (active: boolean) => void
/**
* Adds a click event to your button
*/
onClick?: (event: MouseEvent) => any
}
```

#### Returns

```ts
interface ReturnValue {
readonly 'aria-pressed': boolean
readonly role: 'button'
readonly tabIndex: 0
}
```

### <ToggleButton>

This component clones its child component and adds accessibility roles for pressed/unpressed
state buttons. It also creates context so its active state is accessible from its children.

#### Props

| Prop | Type | Default | Required? | Description |
| ------------- | --------------------------- | ------- | --------- | -------------------------------------------------------------------------------------- |
| active | `string` | | No | Creates a controlled component where the active value always matches this one. |
| defaultActive | `string` | `false` | No | Sets the default active state of the button. |
| activeClass | `string` | | No | Adds this class name to its child component when the button is in a active state. |
| inactiveClass | `string` | | No | Adds this class name to its child component when the button is in an inactive state. |
| activeStyle | `React.CSSProperties` | | No | Adds this style object to its child component when the button is in a active state. |
| inactiveStyle | `React.CSSProperties` | | No | Adds this style object to its child component when the button is in an inactive state. |
| onChange | `(active: boolean) => void` | | No | This callback is invoked any time the active state changes. |
| children | `React.ReactElement` | | Yes | This is the element you want to turn into a ToggleButton. |

## LICENSE

MIT