Inspired by react-tabs
npm install kevlar-tabs** This package is only built as a module. **
import Tabs from 'kevlar-tabs';
export const MyTabs = () => {
const [activeTab, setActiveTab] = useState(0);
return (
<Tabs selected={activeTab} onSelect={setActiveTab}>
<TabList>
<Tab>Tab 1</Tab>
<Tab>Tab 2</Tab>
<Tab>Tab 3</Tab>
</TabList>
<TabPanel>Tab 1 content</TabPanel>
<TabPanel>Tab 2 content</TabPanel>
<TabPanel>Tab 3 content</TabPanel>
</Tabs>
)
}You can also use named tabs and use the onNameSelected callback.
<Tab name="tab1">Tab 1</Tab>Some panels could not be defined for some reason. You can manually specify the index of the panel:
<TabPanel>Tab 1 content</TabPanel>
<TabPanel index={2}>Tab 3 content</TabPanel>| Property | Type | Description |
|---|---|---|
autoActivate |
boolean |
(default: true) If true, it prevents auto activation of tabs on focus. |
focusOnInit |
boolean |
(default: false) If true, the default selection tab takes the focus on init. |
selected |
number | string |
The index or the name of the selected tab. |
onSelect |
function |
Callback function that is called when a tab is selected. Gives the index as a parameter. |
onNameSelect |
function |
Callback function that is called when a tab is selected. Gives the name as a parameter. |
children |
ReactNode |
TabList and TabPanel components. |
You can use CSS classes that are set on the components:
Tabshave no class (but you can create your own container).TabListhas the classtablist.Tabhas the classtabin addition totab--activewhen selected andtab--disabledwhen disabled.TabPanelhas the classtabpanelin addition totabpanel--activewhen selected.
You use custom classes for the different states of the elements.
To do it, use the classNames property of Tabs and pass an object of this shape:
export type TabsClassNames = Partial<{
tabList: string
tab: string
tabActive: string
tabDisabled: string
tabPanel: string
tabPanelActive: string
tabPanelDisabled: string
}>You can also pass this configuration to sub-elements: className, classNameActive and classNameDisabled so that different tabs can have different styling since specific configuration takes precedence over the global one.
Using styled-components, one important thing to know is that you have defined the displayName of the component you want to wrap.
For instance:
import { Tab } from 'kevlar-tabs'
import styled from 'styled-components'
const CustomTab = styled(Tab)`
color: white;
background-color: purple;
&[aria-active='true'] {
font-weight: bold;
}
&[aria-disabled='true'] {
color: #ccc;
background-color: #544454;
}
`
// THIS IS IMPORTANT
CustomTab.displayName = 'Tab'displayName has to be set for Tab, TabList and TabPanel, and it takes the name of the component itself.
- Disabled tabs
- Customizable classes
- Styled-Components compliance
- Lazy loading
- Keyboard navigation
- Auto activation
- Documentation site
- Contribution guide