List

Styled unordered, ordered, unstyled, and description lists with spacing and divider options.

import { ... } from '@corndev/ui'
  • First item
  • Second item
  • Third item
  • Divided item A
  • Divided item B
  • Divided item C
Plan
Pro
Status
Active
Renewal
1st of each month

HTML

No JavaScript required — these classes are the whole component.

<ul class="corn-list" data-variant="unordered" data-spacing="md">
  <li class="corn-list-item">First</li>
</ul>

Classes

ClassDescription
.corn-listBase list element (required on every variant)
.corn-list-itemList item (<li>)
.corn-list-termTerm cell in a description list (<dt>)
.corn-list-detailDetail cell in a description list (<dd>)

Attributes

AttributeValues
data-variantunordered|ordered|unstyled|description
data-spacingsm|md|lg
data-dividedpresent or absent

Vanilla JS

Optional. createList only adds and removes the classes and attributes above, so the HTML is equivalent. Reach for it when you need to change options at runtime.

import { createList } from '@corndev/ui';
import '@corndev/ui/theme';

const el = document.querySelector('#target');
const instance = createList(el, { /* options */ });

Options

OptionTypeDefaultDescription
variant'unordered'|'ordered'|'unstyled'|'description''unordered'Marker style. description lays terms and details out as a two-column grid and expects <dt>/<dd> children carrying .corn-list-term and .corn-list-detail.
spacing'sm'|'md'|'lg'|null'md'Vertical gap between items. Applied between items, never above the first.
dividedbooleanfalseRule between items. Combines with any variant.

React

List, ListItem, ListTerm, ListDetail — from @corndev/ui-react.

Props

PropTypeDefaultDescription
variant'unordered'|'ordered'|'unstyled'|'description''unordered'Marker style. description lays terms and details out as a two-column grid and expects <ListTerm>/<ListDetail> children.
spacing'sm'|'md'|'lg'|null'md'Vertical gap between items. Applied between items, never above the first.
dividedbooleanfalseRule between items. Combines with any variant.
asstringundefinedOverride the element. Defaults to the one the variant belongs on — ul, ol or dl.
childrenReact.ReactNodeundefined
classNamestringundefined

<ListItem> props

a list item, carrying the class the spacing and divider rules select on

PropTypeDefault
childrenReact.ReactNodeundefined
classNamestringundefined

<ListTerm> props

the term half of a description list

PropTypeDefault
childrenReact.ReactNodeundefined
classNamestringundefined

<ListDetail> props

the detail half of a description list

PropTypeDefault
childrenReact.ReactNodeundefined
classNamestringundefined

Unordered

import '@corndev/ui/theme';

<ul class="corn-list" data-variant="unordered">
  <li class="corn-list-item">First item</li>
  <li class="corn-list-item">Second item</li>
  <li class="corn-list-item">Third item</li>
</ul>

Ordered

<ol class="corn-list" data-variant="ordered">
  <li class="corn-list-item">Step one</li>
  <li class="corn-list-item">Step two</li>
  <li class="corn-list-item">Step three</li>
</ol>

Unstyled

Removes bullets and left padding — useful as a base for custom list UIs.

<ul class="corn-list" data-variant="unstyled">
  <li class="corn-list-item">Item A</li>
  <li class="corn-list-item">Item B</li>
  <li class="corn-list-item">Item C</li>
</ul>

Description list

Renders a two-column term/detail grid.

<dl class="corn-list" data-variant="description">
  <dt class="corn-list-term">Plan</dt>
  <dd class="corn-list-detail">Pro</dd>

  <dt class="corn-list-term">Renewal</dt>
  <dd class="corn-list-detail">1st of each month</dd>

  <dt class="corn-list-term">Status</dt>
  <dd class="corn-list-detail">Active</dd>
</dl>

Divided

Add data-divided to any variant to draw a separator between items.

<ul class="corn-list" data-variant="unstyled" data-divided>
  <li class="corn-list-item">Item A</li>
  <li class="corn-list-item">Item B</li>
  <li class="corn-list-item">Item C</li>
</ul>

Spacing

Control vertical spacing between items.

<ul class="corn-list" data-variant="unordered" data-spacing="sm">...</ul>
<ul class="corn-list" data-variant="unordered" data-spacing="md">...</ul>
<ul class="corn-list" data-variant="unordered" data-spacing="lg">...</ul>