Skip to main content
ListCell
@coinbase/cds-web@9.28.0
A versatile cell component used for displaying content in a list format, supporting various layouts and interactions.
import { ListCell } from '@coinbase/cds-web/cells/ListCell'
Related components

Overview​

A ListCell row is divided into the following 5 columns:

  • Media
  • Title & description
  • Intermediary
  • End (detail & subdetail or action)
  • Accessory

Basic Usage​

Loading...
Tip

Prefer spacingVariant="condensed" for the new ListCell design. Both normal and compact are deprecated and may be removed in a future major release.

Spacing Variant​

Loading...

Media​

Note

We have deprecated CellMedia; pass media directly as shown below.

Leading Icon​

Loading...

Leading Avatar​

Loading...

Title & Description​

Title Line Limits​

  • In condensed spacing (spacingVariant="condensed"), the title shows up to two lines by default, regardless of whether a description is present.
  • In normal and compact spacing, the title shows up to two lines when there is no description; if a description is present, the title is limited to one line.
  • Use disableMultilineTitle to force the title to one line in all cases.
  • When provided, the subtitle renders between the title and description and always truncates to a single line. Use subtitleNode if you need custom layout or multi-line behavior.
Warning

The title and description props are rendered inside a CDS Text with default fonts and truncation. To render arbitrary React nodes without being wrapped by a <Text>, use titleNode and descriptionNode. When using the Node props, you are responsible for styling, layout, and truncation behavior.

Custom Title/Description via Node Props​

Loading...

Subtitle​

Use subtitle to add one line of supplementary context between the title and description. The subtitle always truncates to a single line; provide a subtitleNode when you need your own truncation or layout logic.

Loading...

Multiline Description​

Loading...

Intermediary​

Loading...

End​

Detail and Subdetail​

Loading...
Warning

Like title and description, detail and subdetail props are also rendered inside a CDS Text with default fonts. To render arbitrary React nodes without being wrapped by a <Text>, use detailNode and subdetailNode.

Custom Detail/Subdetail via Node Props​

Loading...

End Action​

When you pass the end prop, it overrides the detail/subdetail/detailNode/subdetailNode.

Loading...

Accessory​

Interactive Cell with Accessory​

Loading...

Preserve Layout During Selection​

Use the unselected accessory to reserve space for the selection checkmark when toggling the selected state.

Loading...

Custom Accessory via Node Prop​

Loading...

Accessibility Label​

The accessibility props are only applied when the <ListCell> has a value for the onClick prop. Otherwise, content passed into the <ListCell> must use accessibility props and attributes as needed.

Loading...

Helper text​

Loading...

ContentCell​

Loading...

Loading States​

The ListCellFallback component provides loading state representations of ListCell. It uses placeholder rectangles to indicate where content will appear, creating a smooth loading experience. The web version uses percentage-based widths and custom layouts to match the ListCell's four-column structure.

Warning

ListCellFallback uses TextFallback for text placeholders, which requires theme fontSize and lineHeight tokens to be length values (such as rem or px); unitless or percentage values will not size accurately.

Loading...

Priority​

The priority prop controls which parts of the cell are protected from shrinking and truncation when horizontal space is limited. It accepts start, middle, and end as a string or an array of strings.

Loading...

Anatomy​

Without helper text (top-only layout):

┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ root (Box) │
│┌───────────────────────────────────────────────────────────────────────────────────────┐│
││ pressable ││
││┌─────────────────────────────────────────────────────────────────────────────────────┐││
│││ contentContainer & mainContent (HStack) │││
│││ ┌─────┐ ┌──────────────────────────────┐ ┌────────────┐ ┌────────────┐ ┌─────────┐ │││
│││ │media│ │ titleStackContainer (Box) │ │intermediary│ │ end │ │accessory│ │││
│││ │ │ │ ┌──────────────────────────┐ │ │ │ │ (detail │ │ │ │││
│││ │ │ │ │ titleStack (VStack) │ │ │ │ │ or │ │ │ │││
│││ │ │ │ │ ┌──────────┐ │ │ │ │ │ action) │ │ │ │││
│││ │ │ │ │ │ title │ │ │ │ │ │ │ │ │ │││
│││ │ │ │ │ └──────────┘ │ │ │ │ │ │ │ │ │││
│││ │ │ │ │ ┌──────────┐ │ │ │ │ │ │ │ │ │││
│││ │ │ │ │ │ subtitle │ │ │ │ │ │ │ │ │ │││
│││ │ │ │ │ └──────────┘ │ │ │ │ │ │ │ │ │││
│││ │ │ │ │ ┌────────────┐ │ │ │ │ │ │ │ │ │││
│││ │ │ │ │ │ description│ │ │ │ │ │ │ │ │ │││
│││ │ │ │ │ └────────────┘ │ │ │ │ │ │ │ │ │││
│││ │ │ │ └──────────────────────────┘ │ │ │ │ │ │ │ │││
│││ └─────┘ └──────────────────────────────┘ └────────────┘ └────────────┘ └─────────┘ │││
││└─────────────────────────────────────────────────────────────────────────────────────┘││
│└───────────────────────────────────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────────────────────────────────┘

With helper text (top + bottom layout):

┌───────────────────────────────────────────────────────────────────────────────────────────┐
│ root (Box) │
│┌─────────────────────────────────────────────────────────────────────────────────────────┐│
││ pressable ││
││┌───────────────────────────────────────────────────────────────────────────────────────┐││
│││ contentContainer (VStack) │││
│││┌─────────────────────────────────────────────────────────────────────────────────────┐│││
││││ mainContent (HStack) ││││
││││ ┌─────┐ ┌──────────────────────────────┐ ┌────────────┐ ┌────────────┐ ┌─────────┐ ││││
││││ │media│ │ titleStackContainer (Box) │ │intermediary│ │ end │ │accessory│ ││││
││││ │ │ │ ┌──────────────────────────┐ │ │ │ │ (detail │ │ │ ││││
││││ │ │ │ │ titleStack (VStack) │ │ │ │ │ or │ │ │ ││││
││││ │ │ │ │ ┌──────────┐ │ │ │ │ │ action) │ │ │ ││││
││││ │ │ │ │ │ title │ │ │ │ │ │ │ │ │ ││││
││││ │ │ │ │ └──────────┘ │ │ │ │ │ │ │ │ ││││
││││ │ │ │ │ ┌──────────┐ │ │ │ │ │ │ │ │ ││││
││││ │ │ │ │ │ subtitle │ │ │ │ │ │ │ │ │ ││││
││││ │ │ │ │ └──────────┘ │ │ │ │ │ │ │ │ ││││
││││ │ │ │ │ ┌────────────┐ │ │ │ │ │ │ │ │ ││││
││││ │ │ │ │ │ description│ │ │ │ │ │ │ │ │ ││││
││││ │ │ │ │ └────────────┘ │ │ │ │ │ │ │ │ ││││
││││ │ │ │ └──────────────────────────┘ │ │ │ │ │ │ │ ││││
││││ └─────┘ └──────────────────────────────┘ └────────────┘ └────────────┘ └─────────┘ ││││
│││└─────────────────────────────────────────────────────────────────────────────────────┘│││
│││┌─────────────────────────────────────────────────────────────────────────────────────┐│││
││││ helperText ││││
│││└─────────────────────────────────────────────────────────────────────────────────────┘│││
││└───────────────────────────────────────────────────────────────────────────────────────┘││
│└─────────────────────────────────────────────────────────────────────────────────────────┘│
└───────────────────────────────────────────────────────────────────────────────────────────┘

Mapping to styles / classNames keys:

  • root: outer Box wrapping the entire cell
  • pressable: interactive overlay when href / onClick keyboard handlers are present
  • contentContainer: container around top and optional bottom content
  • mainContent: inner horizontal layout that holds the main pieces
  • titleStackContainer: wrapper around the title stack (controls flex behavior)
  • titleStack: stacked text column (title/subtitle/description)
  • title/subtitle/description: individual text nodes within titleStack
  • media: leading media container
  • intermediary: middle container between main and end
  • end: container for detail / subdetail or end prop you pass in
  • accessory: trailing accessory container
  • helperText: container below main content to display helper text

Is this page useful?

Coinbase Design is an open-source, adaptable system of guidelines, components, and tools that aid the best practices of user interface design for crypto products.