Tabs
Accessible tabbed panelled content areas
Usage
Create a tablist in HTML
<div class="tabs js-tabs">
<div class="tabs__tabslist" role="tablist">
<a id="tab-1" class="tabs__tab js-tabs__link" href="#panel-1" role="tab">Tab 1</a>
<a id="tab-2" class="tabs__tab js-tabs__link" href="#panel-2" role="tab">Tab 2</a>
<a id="tab-3" class="tabs__tab js-tabs__link" href="#panel-3" role="tab">Tab 3</a>
</div>
<div id="panel-1" class="tabs__tabpanel" role="tabpanel">Panel 1</div>
<div id="panel-2" class="tabs__tabpanel" role="tabpanel" hidden>Panel 2</div>
<div id="panel-3" class="tabs__tabpanel" role="tabpanel" hidden>Panel 3</div>
</div>
Install the package
npm i -S @stormid/tabs
Import the module
import tabs from '@stormid/tabs';
Initialise the module via selector string
const [ instance ] = tabs('.js-tabs');
Initialise with a DOM element
const element = document.querySelector('.js-tabs');
const [ instance ] = tabs(element);
Initialise with a Node list
const elements = document.querySelectorAll('.js-tabs');
const [ instance ] = tabs(elements);
Initialise with an Array of elements
const elements = [].slice.call(document.querySelectorAll('.js-tabs'));
const [ instance ] = tabs(elements);
Options
{
tabSelector: '[role=tab]', // selector for a tab link
activeClass: 'is--active', //className added to active tab
updateURL: true, //push tab fragment identifier to window location hash
activeIndex: 0 //index of initially active tab
focusOnLoad: true //a boolean to set whether the page should focus on the first tab after loading
}
API
tabs() returns an array of instances. Each instance exposes the interface
{
getState, a Function that returns the current state Object
}
Tests
npm t
License
MIT