Skip to content
Protocore Design Systemv1.6.9

/// Data Display

ListingRow

A scannable list row — mono title, mono meta columns, and a trailing outbound arrow; hover dims to 0.6.

import { ListingRow } from "@protocore/pds";
View as Markdown

Basics

A title and an array of meta cells lay out on a grid: the title takes 1.6fr, each meta cell 1fr. The first meta cell reads secondary, the rest muted.

Protocol EngineerVancouver, BCFull-time
Site Reliability EngineerRemoteFull-time
Smart Contract AuditorNew York, NYFull-time

Without the arrow

Set arrow={false} when the row doesn't navigate anywhere — a changelog line, a static release list. The trailing ↗︎ column collapses out of the grid.

Configurable rate limitingv2.4.0Jun 2026
Compliance reporting exportv2.3.1May 2026
Nexus asset orchestrationv2.3.0Apr 2026

Linked rows

Give a row an href to render a real anchor (it also supports mailto:). The whole row dims to 0.6 on hover rather than highlighting — a CSS-only affordance.

When to use it

ListingRow is for flat, scannable lists where each row is one record and columns align down the set — careers, changelogs, endpoint directories, search results. The mono cells and trailing ↗︎ signal "this is a list you skim and click into."

If the ordinal matters (numbered clauses, ranked items), use NumberedRow instead. When you need sorting, selection, pagination, or a header row, graduate to DataTable — ListingRow is deliberately header-less and unsortable. For a bare key/value block, use DefinitionList.

Usage

Do

  • Keep the same number of `meta` cells across a set so columns align.
  • Lead with the most identifying meta cell — it reads secondary, the rest muted.
  • Use `href` for rows that navigate; the whole row becomes the target.
  • Drop the arrow (`arrow={false}`) for static, non-navigating lists.

Don't

  • Don't use it when you need sorting, selection, or pagination — reach for DataTable.
  • Don't pack more than ~3 meta cells; it stops being scannable.
  • Don't nest buttons or links inside a row that already has an `href`.
  • Don't rely on the `↗︎` alone to signal a link on a non-`href` row.

Accessibility

KeysAction
TabMoves focus to the row when it has an href.
EnterFollows the row link (native anchor behavior).
  • The `↗︎` glyph is `aria-hidden`; it never contributes to the accessible name.
  • A non-`href` row is a plain container with no imposed role — add your own `role`/handlers if it must be operable.
  • Hover dimming is decorative; keyboard focus still shows the base focus-visible ring.

ListingRow props

PropTypeDefaultDescription
arrowbooleantrueShow the trailing outbound `↗` glyph.
classNamestring
hrefstringWhen set, the row renders as an anchor.
metaReactNode[][]Trailing meta cells (location, type, date…); the first reads secondary, the rest muted.
styleCSSProperties
title *ReactNodePrimary cell (e.g. a job title or entry name), rendered in ink.

Related

  • NumberedRowAn enumerated [ NN ] row with a title, optional body, and a right-aligned meta slot.
  • DataTableThe server-driven console workhorse — TanStack v8 in manual mode with sorting, pagination, selection, and five body states.
  • TableThe styled table primitive — thin compound wrappers over the native table elements that carry the console look.
  • CodeRefAn inline mono id/hash chip with middle-truncation — copy-on-click, or a link when href is set.