Skip to content

Repository files navigation


<ToggleButton>

BundlephobiaTypesCode coverageBuild statusNPM VersionMIT 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, this component provides interop between real <button> elements and faux <div>, <a>, <span>, et. al. buttons.

Quick Start

Check out the example on CodeSandbox

import*asReactfrom'react'import{ToggleButton,useA11yToggleButton}from'@accessible/toggle-button'constComponent=()=>{const[muted,setMuted]=React.useState(false)return(<ToggleButtonactive={muted}onChange={setMuted}><span>{muted ? 'Unmute' : 'Mute'}</span></ToggleButton>)}constComponentWithHook=()=>{constref=React.useRef(null)const[muted,setMuted]=React.useState(false)consta11yProps=useA11yToggleButton(ref,{active: muted,onChange: setMuted,})return(<buttonref={ref}{...a11yProps}><span>{muted ? 'Unmute' : 'Mute'}</span></button>)}

API

useA11yToggleButton(target, options?)

A React hook for creating a headless a11y toggle button to the W3C accessibility standard. In addition to providing accessibility props to your component, this hook will add events for interoperability between actual <button> elements and fake ones e.g. <a> and <div> to the target element.

Arguments

ArgumentTypeRequired?Description
targetReact.RefObject<T> | T | nullYesA React ref or HTML element
optionsUseA11yToggleButtonOptionsYesThe component you want to turn into a button that handles focus and space, enter keydown events.

UseA11yToggleButtonOptions

exportinterfaceUseA11yToggleButtonOptions{/** * 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

interfaceReturnValue{readonly'aria-pressed': booleanreadonlyrole: 'button'readonlytabIndex: 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

PropTypeDefaultRequired?Description
activestringNoCreates a controlled component where the active value always matches this one.
defaultActivestringfalseNoSets the default active state of the button.
activeClassstringNoAdds this class name to its child component when the button is in a active state.
inactiveClassstringNoAdds this class name to its child component when the button is in an inactive state.
activeStyleReact.CSSPropertiesNoAdds this style object to its child component when the button is in a active state.
inactiveStyleReact.CSSPropertiesNoAdds this style object to its child component when the button is in an inactive state.
onChange(active: boolean) => voidNoThis callback is invoked any time the active state changes.
childrenReact.ReactElementYesThis is the element you want to turn into a ToggleButton.

LICENSE

MIT

Releases

Packages

Used by

Contributors

Languages