Skip to main content
ListCell
@coinbase/cds-web@8.34.1
A versatile cell component used for displaying content in a list format, supporting various layouts and interactions.
Import
import { ListCell } from '@coinbase/cds-web/cells/ListCell'
SourceView source codeStorybookView StorybookFigmaView Figma (internal only)
Related components
View as Markdown

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. The compact 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.

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│ │ VStack │ │intermediary│ │ end │ │accessory│ │││
│││ │ │ │ ┌──────────┐ │ │ │ │ (detail │ │ │ │││
│││ │ │ │ │ title │ │ │ │ │ or │ │ │ │││
│││ │ │ │ └──────────┘ │ │ │ │ action) │ │ │ │││
│││ │ │ │ ┌────────────┐ │ │ │ │ │ │ │ │││
│││ │ │ │ │ description│ │ │ │ │ │ │ │ │││
│││ │ │ │ └────────────┘ │ │ │ │ │ │ │ │││
│││ └─────┘ └────────────────┘ └────────────┘ └────────────┘ └─────────┘ │││
││└───────────────────────────────────────────────────────────────────────┘││
│└─────────────────────────────────────────────────────────────────────────┘│
└───────────────────────────────────────────────────────────────────────────┘

With helper text (top + bottom layout):

┌─────────────────────────────────────────────────────────────────────────────┐
│ root (Box) │
│┌───────────────────────────────────────────────────────────────────────────┐│
││ pressable ││
││┌─────────────────────────────────────────────────────────────────────────┐││
│││ contentContainer (VStack) │││
│││┌───────────────────────────────────────────────────────────────────────┐│││
││││ mainContent (HStack) ││││
││││ ┌─────┐ ┌────────────────┐ ┌────────────┐ ┌────────────┐ ┌─────────┐ ││││
││││ │media│ │ VStack │ │intermediary│ │ end │ │accessory│ ││││
││││ │ │ │ ┌──────────┐ │ │ │ │ (detail │ │ │ ││││
││││ │ │ │ │ title │ │ │ │ │ or │ │ │ ││││
││││ │ │ │ └──────────┘ │ │ │ │ action) │ │ │ ││││
││││ │ │ │ ┌────────────┐ │ │ │ │ │ │ │ ││││
││││ │ │ │ │ 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
  • title/description: stacked text column within topContent
  • 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.