Skip to content
Protocore Design Systemv1.6.9

/// Cards

ProductCard

An illustrated product card — art panel, eyebrow, title, one-line body, a mono tag row, and an outbound footer link, with a [ 0N ] index.

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

Basics

A [ 0N ] index pins top-right, an art panel sits above the eyebrow + title + one-line body, a tags array renders a mono metadata row, and href turns the footer into an outbound link (linkLabel defaults to "View").

01
API
Value Transfer

Move value across networks with guaranteed finality and no wrapped tokens.

RESTgRPCv2
View reference

Product grid

The intended layout: a responsive n-up grid of enumerated products, each with its own line-art field.

01
API
Value Transfer

Move value with guaranteed finality.

View
02
API
Swaps

Atomic cross-network swaps over unified liquidity.

View
03
API
Messaging

Send arbitrary data between connected networks.

View

When to use it

Use ProductCard for a catalogue of products, APIs, or features where each entry wants an enumerator, an illustration, a metadata tag row, and a *link out* to a detail page. It's the fully-loaded member of the tile family. If you don't need the index / tags / link — just art + text — drop to the generic Tile. For a numbered *principle* (no media, no link), use PrincipleTile. For a non-media grouping, use Card. Note the title prop is required on ProductCard (a product must be named), unlike Tile where it's optional.

Usage

Do

  • Give each card a distinct `LineArt` variant so a grid reads as a set of different products.
  • Keep the body to a single line — ProductCard is a scannable index entry, not a spec sheet.
  • Use the `tags` row for stable metadata (protocol, version, transport), rendered as-typed mono.
  • Set `href` (and `target`/`linkLabel`) so every card has one clear way through to detail.

Don't

  • Don't overflow the `tags` row with more than a few chips; it's metadata, not navigation.
  • Don't omit `title` — it's required and names the product.
  • Don't use ProductCard for content with no destination; if there's nowhere to go, Tile is the honest choice.
  • Don't put multiple links in the body; the footer link is the card's single outbound action.

Accessibility

  • The footer link is a real `<a>` — it's keyboard-focusable and reads its `linkLabel`. The `↗︎` arrow is `aria-hidden`; keep the label meaningful ("View reference"), not just "View", when several cards share a page.
  • The `[ 0N ]` index is decorative enumeration; don't encode essential meaning in the number alone.
  • Wrap a product grid in a list so screen readers announce how many products there are.

ProductCard props

PropTypeDefaultDescription
artReactNodeThe illustration panel — usually a `<LineArt>`.
artHeightnumber200Illustration panel height in px. Default `200`.
childrenReactNodeOne-line description body.
classNamestring
eyebrowReactNodeMono uppercase eyebrow above the title.
hrefstringFooter link destination — renders the outbound link when set.
indexnumberEnumerator pinned top-right, rendered as `[ 0N ]`.
linkLabelReactNodeViewFooter link label. Default `"View"`.
styleCSSProperties
tagsReactNode[]Mono metadata tags rendered in a row beneath the body.
targetstringAnchor target for the footer link.
title *ReactNodeProduct title.

Related

  • TileThe generic media tile — a bordered surface with an art slot above an eyebrow, title, body, and action.
  • PrincipleTileA numbered principle tile — a [ 0N ] bracket index over a title and a short supporting body, laid into principle grids.
  • CardA surface block with a hairline border and sharp corners — flat title/subtitle/action props or compound Card.Header/Body/Footer.
  • TagA static, as-typed metadata label in muted mono — optionally bordered or copy-on-click.