‹ components

ActivityRow

draftv0.9.0·open in canvas

Tx / activity history row — icon · title · time · status · amount.

Installnpx shadcn add @cids/activity-row
Live demo
US
Swapped SOL → USDC2m agoconfirmed+12.40 USDC
SO
Pending sendjust nowpending−0.50 SOL

Motion · tap to replay

honors reduced-motion

Interactive only: `duration-150` background + press scale. Status and amount updates swap text in place — data surfaces never bounce.

Brand chip remounts on tap · highlighted tokens are named in this component's doc · spring is budgeted to human feedback only.

import { ActivityRow } from "@/design-system";

<ActivityRow
  title="Swapped SOL → USDC"
  time="2m ago"
  status="confirmed"
  amount="+12.40 USDC"
  tokenSymbol="USDC"
/>
<ActivityRow
  title="Send failed"
  time="1h ago"
  status="failed"
  amount="−0.50 SOL"
  tokenSymbol="SOL"
  onClick={() => openDetail()}
/>

Tokens · live

Resolves in the active theme — flip the toggle above to verify.

States · from doc

Parsed from the doc. Interact with the live demo for hover/active.

**static** — `<div>` when no `onClick`..

Tx / activity history row — icon · title · time · status · amount.

Anatomy

┌──────────────────────────────────────────────┐
│ [◎]  Swapped SOL → USDC          +12.40 USDC │
│      2m ago  CONFIRMED                       │
│ icon  title · time · status word      amount │
└──────────────────────────────────────────────┘

Props

PropTypeDefaultNotes
titlestring—What happened.
timestring—Preformatted ("2m ago").
status"pending" "confirmed" \"failed"`—Word + tint.
amountstring—Preformatted with sign + unit.
tokenSymbolstring—Drives TokenIcon; omit → diamond placeholder.
tokenIconSrcstring—TokenIcon image.
onClick() => void—When set, row renders as a <button>.
classNamestring—cn-merged.

Server-safe (no "use client") unless the caller needs handlers — the

component itself has no client-only APIs.

Motion

Interactive only: duration-150 background + press scale. Status and

amount updates swap text in place — data surfaces never bounce.

A11y

Status is a visible word, not color alone. Interactive rows are real

<button>s with focus ring. Title truncates visually but remains in

the accessible name. Prefer pairing pending rows with a live-region

parent (or TxStatus) when the list itself streams.

Self-contained: copy the folder into any Tailwind+React app, or use the install command above. Docs and this page render the same file on disk — they cannot drift.