3.0.0 • Published 3 years ago

@arterial/list v3.0.0

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

Arterial List

Another React Material List

Installation

npm install @arterial/list

Usage

Styles

Sass

@use "@material/list/index.scss" as list;
@include list.core-styles;

CSS

import '@material/list/dist/mdc.list.css';

JSX

import { List, ListItem, ListItemText, ... } from '@arterial/list';

Single-line List

Single-line list items contain a maximum of one line of text.

<List>
  <ListItem>
    <ListItemText>Single-line item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemText>Single-line item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemText>Single-line item</ListItemText>
  </ListItem>
</List>

Two-line List

Two-line list items contain a maximum of two lines of text.

<List twoLine>
  <ListItem>
    <ListItemText>
      <ListItemPrimaryText>Two-line item</ListItemPrimaryText>
      <ListItemSecondaryText>Secondary text</ListItemSecondaryText>
    </ListItemText>
  </ListItem>
  <ListItem>
    <ListItemText>
      <ListItemPrimaryText>Two-line item</ListItemPrimaryText>
      <ListItemSecondaryText>Secondary text</ListItemSecondaryText>
    </ListItemText>
  </ListItem>
  <ListItem>
    <ListItemText>
      <ListItemPrimaryText>Two-line item</ListItemPrimaryText>
      <ListItemSecondaryText>Secondary text</ListItemSecondaryText
    </ListItemText>
  </ListItem>
</List>

Other Variants

Dense

<List dense>
  <ListItem>
    <ListItemText>Dense item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemText>Dense item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemText>Dense item</ListItemText>
  </ListItem>
</List>

Non-interactive

<List nonInteractive>
  <ListItem>
    <ListItemText>Non-interactive item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemText>Non-interactive item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemText>Non-interactive item</ListItemText>
  </ListItem>
</List>

Icon

<List iconList>
  <ListItem>
    <ListItemGraphic graphic="wifi" />
    <ListItemText>Icon item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemGraphic graphic="wifi" />
    <ListItemText>Icon item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemGraphic graphic="wifi" />
    <ListItemText>Avatar item</ListItemText>
  </ListItem>
</List>

Avatar

import Avatar from 'avatar.png';

<List avatarList>
  <ListItem>
    <ListItemGraphic graphic={<img src={Avatar} alt="avatar" />} />
    <ListItemText>Avatar item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemGraphic graphic={<img src={Avatar} alt="avatar" />} />
    <ListItemText>Avatar item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemGraphic graphic={<img src={Avatar} alt="avatar" />} />
    <ListItemText>Avatar item</ListItemText>
  </ListItem>
</List>;

Thumbnail

import Thumb from 'thumb.png';

<List thumbnailList>
  <ListItem>
    <ListItemGraphic graphic={<img src={Thumb} alt="thumb" />} />
    <ListItemText>Thumbnail item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemGraphic graphic={<img src={Thumb} alt="thumb" />} />
    <ListItemText>Thumbnail item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemGraphic graphic={<img src={Thumb} alt="thumb" />} />
    <ListItemText>Thumbnail item</ListItemText>
  </ListItem>
</List>;

Image

import Image from 'image.png';

<List imageList>
  <ListItem>
    <ListItemGraphic graphic={<img src={Image} alt="image" />} />
    <ListItemText>Image item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemGraphic graphic={<img src={Image} alt="image" />} />
    <ListItemText>Image item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemGraphic graphic={<img src={Image} alt="image" />} />
    <ListItemText>Image item</ListItemText>
  </ListItem>
</List>;

Video

import Video from 'video.png';

<List videoList>
  <ListItem>
    <ListItemGraphic graphic={<img src={Video} alt="video" />} />
    <ListItemText>Video item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemGraphic graphic={<img src={Thumb} alt="video" />} />
    <ListItemText>Video item</ListItemText>
  </ListItem>
  <ListItem>
    <ListItemGraphic graphic={<img src={Thumb} alt="video" />} />
    <ListItemText>Video item</ListItemText>
  </ListItem>
</List>;

Activated

const ITEMS = ['inbox', 'star', 'send', 'drafts'];
function capitalize(value) {
  return value.charAt(0).toUpperCase() + value.substring(1);
}
function Activated() {
  const [activated, setActivated] = useState('star');
  return (
    <List>
      {ITEMS.map(item => (
        <ListItem
          activated={activated === item}
          id={item}
          key={item}
          onClick={() => setActivated(item)}
        >
          {capitalize(item)}
        </ListItem>
      ))}
    </List>
  );
}

Selected

const ITEMS = ['inbox', 'star', 'send', 'drafts'];
function capitalize(value) {
  return value.charAt(0).toUpperCase() + value.substring(1);
}
function Selected() {
  const [selected, setSelected] = useState('star');
  return (
    <List>
      {ITEMS.map(item => (
        <ListItem
          id={item}
          key={item}
          onClick={() => setSelected(item)}
          selected={selected === item}
        >
          {capitalize(item)}
        </ListItem>
      ))}
    </List>
  );
}

Graphic

import {Checkbox} from '@arterial/checkbox';
import {Radio} from '@arterial/radio';

<List tag="div">
  <ListItem tag="div">
    <ListItemGraphic graphic="wifi" />
    <ListItemText>Graphic as icon</ListItemText>
  </ListItem>
  <ListItem tag="label">
    <ListItemGraphic
      graphic={<Checkbox id="graphic-check" onChange={() => {}} />}
    />
    <ListItemText>Graphic with checkbox</ListItemText>
  </ListItem>
  <ListItem tag="label">
    <ListItemGraphic
      graphic={<Radio id="graphic-radio" onChange={() => {}} />}
    />
    <ListItemText>Graphic with radio</ListItemText>
  </ListItem>
</List>;

Metadata

import {Checkbox} from '@arterial/checkbox';
import {Radio} from '@arterial/radio';

<List tag="div">
  <ListItem tag="div">
    <ListItemText>Meta as text</ListItemText>
    <ListItemMeta meta="info" />
  </ListItem>
  <ListItem tag="div">
    <ListItemText>Meta with icon component</ListItemText>
    <ListItemMeta meta={<Icon icon="info" />} />
  </ListItem>
  <ListItem tag="div">
    <ListItemText>Meta with two icon components</ListItemText>
    <ListItemMeta
      meta={
        <>
          <Icon icon="info" />
          <Icon icon="info" />
        </>
      }
    />
  </ListItem>
  <ListItem tag="div">
    <ListItemText>Meta with icon button</ListItemText>
    <ListItemMeta
      meta={<IconButton icon="more_vert" style={{marginRight: '-12px'}} />}
    />
  </ListItem>
  <ListItem tag="label">
    <ListItemText>Meta with checkbox</ListItemText>
    <ListItemMeta
      meta={
        <Checkbox
          id="meta-checkbox"
          onChange={() => {}}
          style={{marginRight: '-8px'}}
        />
      }
    />
  </ListItem>
  <ListItem tag="label">
    <ListItemText>Meta with radio</ListItemText>
    <ListItemMeta
      meta={<Radio id="meta-radio" onChange={() => {}} />}
      style={{marginRight: '-8px'}}
    />
  </ListItem>
</List>;

Graphic and Metadata

<List twoLine>
  <ListItem>
    <ListItemGraphic graphic="folder" />
    <ListItemText>
      <ListItemPrimaryText>Two-line item</ListItemPrimaryText>
      <ListItemSecondaryText>Secondary text</ListItemSecondaryText>
    </ListItemText>
    <ListItemMeta meta="info" />
  </ListItem>
  <ListItem>
    <ListItemGraphic graphic="folder" />
    <ListItemText>
      <ListItemPrimaryText>Two-line item</ListItemPrimaryText>
      <ListItemSecondaryText>Secondary text</ListItemSecondaryText>
    </ListItemText>
    <ListItemMeta meta="info" />
  </ListItem>
  <ListDivider />
  <ListItem>
    <ListItemGraphic graphic="folder" />
    <ListItemText>
      <ListItemPrimaryText>Two-line item</ListItemPrimaryText>
      <ListItemSecondaryText>Secondary text</ListItemSecondaryText>
    </ListItemText>
    <ListItemMeta meta="info" />
  </ListItem>
</List>

Grouped

<ListGroup>
  <ListGroupSubheader>List 1</ListGroupSubheader>
  <List>
    <ListItem>
      <ListItemText>Line item</ListItemText>
    </ListItem>
    <ListItem>
      <ListItemText>Line item</ListItemText>
    </ListItem>
    <ListItem>
      <ListItemText>Line item</ListItemText>
    </ListItem>
  </List>
  <ListGroupSubheader>List 2</ListGroupSubheader>
  <List>
    <ListItem>
      <ListItemText>Line item</ListItemText>
    </ListItem>
    <ListItem>
      <ListItemText>Line item</ListItemText>
    </ListItem>
    <ListItem>
      <ListItemText>Line item</ListItemText>
    </ListItem>
  </List>
</ListGroup>

Props

List

NameTypeDescription
avatarListbooleanEnables an avatar list variant.
childrennodeElements to be displayed within root element.
classNamestringClasses to be applied to the root element.
densebooleanEnables a dense variant.
iconListbooleanEnables an icon list variant.
imageListbooleanEnables an image list variant.
nonInteractivebooleanEnables a non-interactive variant.
textualListbooleanEnables an textual list variant.
thumbnailListbooleanEnables an thumbnail list variant.
twoLinebooleanEnables a two-line variant.
videoListbooleanEnables an video list variant.
tagstring | objectHTML tag to be applied to the root element. Defaults to ul.

ListItem

NameTypeDescription
activatedbooleanIndicates whether the element is activated.
childrennodeElements to be displayed within root element.
classNamestringClasses to be applied to the root element.
disabledbooleanIndicates whether the element is disabled.
selectedbooleanIndicates whether the element is selected.
tagstring | objectHTML tag to be applied to the root element. Defaults to li.

ListItemText

NameTypeDescription
childrennodeElements to be displayed within root element.
classNamestringClasses to be applied to the root element.
tagstring | objectHTML tag to be applied to the root element. Defaults to span.

ListItemPrimaryText

NameTypeDescription
childrennodeElements to be displayed within root element.
classNamestringClasses to be applied to the root element.
tagstring | objectHTML tag to be applied to the root element. Defaults to span.

ListItemSecondaryText

NameTypeDescription
childrennodeElements to be displayed within root element.
classNamestringClasses to be applied to the root element.
tagstring | objectHTML tag to be applied to the root element. Defaults to span.

ListItemGraphic

NameTypeDescription
classNamestringClasses to be applied to the root element.
graphicnodeElements to be displayed within root element.
styleobjectStyles to be applied to the root element.
tagstring | objectHTML tag to be applied to the root element. Defaults to span.

ListItemMeta

NameTypeDescription
classNamestringClasses to be applied to the root element.
metanodeElements to be displayed within root element.
styleobjectStyles to be applied to the root element.
tagstring | objectHTML tag to be applied to the root element. Defaults to span.

ListGroup

NameTypeDescription
classNamestringClasses to be applied to the root element.
childrennodeElements to be displayed within root element.
tagstring | objectHTML tag to be applied to the root element. Defaults to div.

ListGroupSubheader

NameTypeDescription
classNamestringClasses to be applied to the root element.
childrennodeElements to be displayed within root element.
tagstring | objectHTML tag to be applied to the root element. Defaults to h3.

ListDivider

NameTypeDescription
classNamestringClasses to be applied to the root element.
childrennodeElements to be displayed within root element.
tagstring | objectHTML tag to be applied to the root element. Defaults to li.
3.0.0

3 years ago

2.0.3

4 years ago

2.0.2

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.2.0

4 years ago

1.1.0

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago

1.0.0-alpha.6

4 years ago

1.0.0-alpha.5

4 years ago

1.0.0-alpha.4

4 years ago

1.0.0-alpha.3

4 years ago

1.0.0-alpha.1

4 years ago

1.0.0-alpha.0

4 years ago