0.5.1 • Published 3 years ago

@eardi/react-scroll-tab v0.5.1

Weekly downloads
9
License
MIT
Repository
github
Last release
3 years ago

react-scroll-tab

A simple React tab component with scrollable tab content

Made with create-react-library

NPM

Install

react-scroll-tab requires Node.js version 10 or greater and React 16.

# npm
npm install --save @eardi/react-scroll-tab

# yarn
yarn add @eardi/react-scroll-tab

Usage

Default usage

import React from 'react';
import { Tabs, Tab, TabPanel, TabScrollableContent } from '@eardi/react-scroll-tab';

const INITIAL_TAB_VALUE = 0;

function Page() {
  const [selectedTab, setSelectedTab] = useState(INITIAL_TAB_VALUE);

  return (
    <>
      <Tabs value={selectedTab} variant="fullWidth" onChange={(index) => setSelectedTab(index)}>
        <Tab>Tab 1</Tab>
        <Tab>Tab 2</Tab>
        <Tab>Tab 3</Tab>
      </Tabs>
      <TabScrollableContent>
        <TabPanel value={selectedTab}>
          <div>Tab 1 content</div>
        </TabPanel>
        <TabPanel value={selectedTab}>
          <div>Tab 2 content</div>
        </TabPanel>
        <TabPanel value={selectedTab}>
          <div>Tab 3 content</div>
        </TabPanel>
      </TabScrollableContent>
    </>
  );
}

Usage with Custom Theme

The component is themeable. Below are the defined theme variables:

NameDescriptionDefault
tabTextColorTab text color when not selected#333
tabSelectedTextColorSelected Tab text color#2980b9 (blue)tabSelectedBgColorSelected Tab background colorrgba(41, 128, 185, 0.06) (transparent blue)
tabIndicatorColorIndicator line background color#2980b9 (blue)
tabFocusHoverBgColorTab background color when hovered or focusedrgba(41, 128, 185, 0.06) (transparent blue)
tabFocusHoverColorTab text color when hovered or focused#2980b9 (blue)
tabBorderRadiusBorder radius of the tab background0
tabListBorderBottomColorColor of the Border line beneath the tabs listrgba(0, 0, 0, 0.05)
tabGapGap or margin between each tab item0

Below is an example (for more examples look at Storybook demos):

import React from 'react';
import { Tabs, Tab, TabPanel, TabScrollableContent } from '@eardi/react-scroll-tab';

const INITIAL_TAB_VALUE = 0;
const customTheme = {
  tabTextColor: 'black',
  tabSelectedTextColor: 'black',
  tabSelectedBgColor: 'white',
  tabIndicatorColor: 'black',
  tabFocusHoverBgColor: 'rgb(0 0 0 / 1%)'
};

function Page() {
  const [selectedTab, setSelectedTab] = useState(INITIAL_TAB_VALUE);

  return (
    <Tabs value={selectedTab} theme={customTheme} onChange={(index) => setSelectedTab(index)}>
      <Tab>Tab 1</Tab>
      <Tab>Tab 2</Tab>
      <Tab>Tab 3</Tab>
    </Tabs>
    ...
  );
}

Usage with Swipeable tabs

This should be mainly used for mobile views as swiping on mobile and touch devices is more friendly than scrolling. This wraps react-swipeable-views so you can use the documentation there.

import React from 'react';
import { Tabs, Tab, TabSwipeableContent } from '@eardi/react-scroll-tab';

const INITIAL_TAB_VALUE = 0;

function Page() {
  const [selectedTab, setSelectedTab] = useState(INITIAL_TAB_VALUE);

  return (
    <>
      <Tabs variant='fullWidth' value={selectedTab} onChange={setSelectedTab}>
        <Tab>Tab 1</Tab>
        <Tab>Tab 2</Tab>
        <Tab>Tab 3</Tab>
      </Tabs>
      <TabSwipeableContent index={selectedTab} onChangeIndex={setSelectedTab}>
        <div>
          <h2>Tab 1 content</h2>
          <h3>
            Non do sint occaecat aliqua culpa culpa laboris tempor amet veniam
            et duis.
          </h3>
          <p>
            Elit do qui excepteur reprehenderit ex irure officia pariatur. Nulla
            quis enim est deserunt irure esse veniam. Commodo enim tempor do in.
          </p>
        </div>
        <div>
          <h2>Tab 2 content</h2>
          <h3>
            Non do sint occaecat aliqua culpa culpa laboris tempor amet veniam
            et duis.
          </h3>
          <p>
            Elit do qui excepteur reprehenderit ex irure officia pariatur. Nulla
            quis enim est deserunt irure esse veniam. Commodo enim tempor do in.
          </p>
        </div>
        <div>
          <h2>Tab 3 content</h2>
          <h3>
            Non do sint occaecat aliqua culpa culpa laboris tempor amet veniam
            et duis.
          </h3>
          <p>
            Elit do qui excepteur reprehenderit ex irure officia pariatur. Nulla
            quis enim est deserunt irure esse veniam. Commodo enim tempor do in.
          </p>
        </div>
      </TabSwipeableContent>
    </>
  );
}

Demo

Storybook

License

MIT © ardeshireshghi

0.5.1

3 years ago

0.4.0

3 years ago

0.3.0

3 years ago

0.2.0

3 years ago

0.1.0

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago