@arterial/tabs

Another React Material Tabs

Usage no npm install needed!

<script type="module">
  import arterialTabs from 'https://cdn.skypack.dev/@arterial/tabs';
</script>

README

Arterial Tabs

Another React Material Tab

Installation

npm install @arterial/tabs

Usage

Styles

Sass

@use "@material/tab-bar/index.scss" as tab-bar;
@use "@material/tab-indicator/index.scss" as tab-indicator;
@use "@material/tab-scroller/index.scss" as tab-scroller;
@use "@material/tab/index.scss" as tab;
@include tab-bar.core-styles;
@include tab-indicator.core-styles;
@include tab-scroller.core-styles;
@include tab.core-styles;

CSS

import '@material/tab-bar/dist/mdc.tab-bar.css';
import '@material/tab-indicator/dist/mdc.tab-indicator.css';
import '@material/tab-scroller/dist/mdc.tab-scroller.css';
import '@material/tab/dist/mdc.tab.css';

JSX

import {Tab, TabBar} from '@arterial/tabs';

Regular Tabs

function Regular() {
  const [activeIndex, setActiveIndex] = useState(0);
  return (
    <TabBar
      activeIndex={activeIndex}
      handleActiveIndexUpdate={index => setActiveIndex(index)}
    >
      <Tab id="home" label="Home" />
      <Tab id="merchandise" label="Merchandise" />
      <Tab id="about-us" label="About Us" />
    </TabBar>
  );
}

Other Variants

Min Width

function MinWidth() {
  const [activeIndex, setActiveIndex] = useState(0);
  return (
    <TabBar
      activeIndex={activeIndex}
      handleActiveIndexUpdate={index => setActiveIndex(index)}
    >
      <Tab id="home" label="Home" minWidth />
      <Tab id="merchandise" label="Merchandise" minWidth />
      <Tab id="about-us" label="About Us" minWidth />
    </TabBar>
  );
}

Icon

function Icon() {
  const [activeIndex, setActiveIndex] = useState(0);
  return (
    <TabBar
      activeIndex={activeIndex}
      handleActiveIndexUpdate={index => setActiveIndex(index)}
    >
      <Tab id="recents" label="Recents" icon="watch_later" />
      <Tab id="nearby" label="Nearby" icon="near_me" />
      <Tab id="favorites" label="Favorites" icon="favorite" />
    </TabBar>
  );
}

Stacked

function Stacked() {
  const [activeIndex, setActiveIndex] = useState(0);
  return (
    <TabBar
      activeIndex={activeIndex}
      handleActiveIndexUpdate={index => setActiveIndex(index)}
    >
      <Tab id="recents" label="Recents" icon="watch_later" stacked />
      <Tab id="nearby" label="Nearby" icon="near_me" stacked />
      <Tab id="favorites" label="Favorites" icon="favorite" stacked />
    </TabBar>
  );
}

Stacked and Restricted

function StackedRestricted() {
  const [activeIndex, setActiveIndex] = useState(0);
  return (
    <TabBar
      activeIndex={activeIndex}
      handleActiveIndexUpdate={index => setActiveIndex(index)}
    >
      <Tab id="recents" label="Recents" icon="watch_later" restricted stacked />
      <Tab id="nearby" label="Nearby" icon="near_me" restricted stacked />
      <Tab
        id="favorites"
        label="Favorites"
        icon="favorite"
        restricted
        stacked
      />
    </TabBar>
  );
}

Stacked and Restricted

function StackedRestricted() {
  const [activeIndex, setActiveIndex] = useState(0);
  return (
    <TabBar
      activeIndex={activeIndex}
      handleActiveIndexUpdate={index => setActiveIndex(index)}
    >
      <Tab id="recents" label="Recents" icon="watch_later" restricted stacked />
      <Tab id="nearby" label="Nearby" icon="near_me" restricted stacked />
      <Tab
        id="favorites"
        label="Favorites"
        icon="favorite"
        restricted
        stacked
      />
    </TabBar>
  );
}

Indicator Fade

function IndicatorFade() {
  const [activeIndex, setActiveIndex] = useState(0);
  return (
    <TabBar
      activeIndex={activeIndex}
      handleActiveIndexUpdate={index => setActiveIndex(index)}
    >
      <Tab id="recents" label="Recents" indicatorFade />
      <Tab id="nearby" label="Nearby" indicatorFade />
      <Tab id="favorites" label="Favorites" indicatorFade />
    </TabBar>
  );
}

Indicator Icon

function IndicatorIcon() {
  const [activeIndex, setActiveIndex] = useState(0);
  return (
    <TabBar
      activeIndex={activeIndex}
      handleActiveIndexUpdate={index => setActiveIndex(index)}
    >
      <Tab id="recents" label="Recents" indicatorIcon="star" />
      <Tab id="nearby" label="Nearby" indicatorIcon="star" />
      <Tab id="favorites" label="Favorites" indicatorIcon="star" />
    </TabBar>
  );
}

Scrolling

function getTabs() {
  const tabs = [];
  for (let i = 0; i < 36; i++) {
    tabs.push(`Tab ${i + 1}`);
  }
  return tabs;
}
function Scrolling() {
  const [activeIndex, setActiveIndex] = useState(0);
  return (
    <TabBar
      activeIndex={activeIndex}
      handleActiveIndexUpdate={index => setActiveIndex(index)}
      scroll
    >
      {getTabs().map(label => (
        <Tab id={label} key={label} label={label} />
      ))}
    </TabBar>
  );
}

Props

Tab

Name Type Description
active boolean Indicates whether the element is active.
children node Elements to be displayed within root element.
className string Classes to be applied to the root element.
focused boolean Indicates whether the element is focused.
id string Id of the element.
indicatorFade boolean Enables indicator element fade animation.
indicatorIcon boolean Icon to render within as indicator element.
indicatorId boolean ID of indicator element.
label string Text to be displayed within the root element.
minWidth boolean Enables a min width variant.
previousIndicatorClientRect object Conains previous indicator element's client rect.
restricted boolean Enables a restricted variant.
ripple boolean Enables ripple within root element. Defaults to true.
stacked boolean Enables a stacked variant.
tag string | object HTML tag to be applied to the root element. Defaults to button.

TabBar

Name Type Description
activeIndex boolean Indicates the tab at that index is active.
children node Elements to be displayed within root element.
className string Classes to be applied to the root element.
dir ltr | rtl Indicates the directionality of the element's text. Defaults to auto.
handleActiveIndexUpdate function Active index update event handler.
onKeyDown function Keydown event handler.
tag string | object HTML tag to be applied to the root element. Defaults to div.