Skip to content

Job notification row

In review
Live · web

Inbox list: select an unread row to mark it read

Job card: the same row as a standalone dashboard VIEW

Opened 0 notifications · 3 unread. The island is live.

One background job or inbox notification as a row (WS4, agent-console epic), a thin shell over the ListItem grammar that invents no new row anatomy:

  • Leading = the job state. success / warning / error ride the ListItem’s canonical B20 status mark (shape + color dual-coding); running is a live Spinner; queued is a muted clock: waiting is not a status, so it takes no warm color and no cyan.
  • Trailing = the time. The relative label uses the Timeline time idiom (display label + machine dateTime surfaced on the row). An unread group count rides an accent Badge.
  • Read vs unread lives in the INK. Unread rows keep the ListItem’s full voice; read rows dim to muted ink at regular weight. Never a left-rail, never a wash; law §6 keeps status in the leading mark, and the selection wash stays reserved for selection.
import { NockerlJobRow } from '@dizyx/nockerl-react';
// an inbox list: rows stacked on one card surface
<NockerlJobRow
title="CI failed on nockerl-dashboard"
detail="typecheck · 2 errors in inbox-panel.tsx"
state="error" // queued | running | success | warning | error
time="2m ago" // the Timeline relative-time idiom
dateTime="2026-07-05T02:08:00Z"
unread // full ink; omit → dimmed read row
count={2} // grouped notifications → trailing accent badge
onSelect={openNotification}
/>
PropTypeDefaultDescription
title *stringThe job / notification title (the row's accessible name).
detailstringSupporting detail line ("finished in 4m 12s · 3,412 documents").
state *NockerlJobStateJob state → the leading mark: B20 status icon, a live spinner, or a muted clock.
timestringRelative timestamp display label ("2m ago"), the Timeline time idiom.
dateTimestringMachine-readable instant for the timestamp (ISO). Surfaces as the row's title attr.
unreadbooleanfalseUnread: full-strength ink. Read rows dim. Defaults to read.
countnumberGrouped-notification count → a trailing accent NockerlBadge (unread only).
trailingReactNodeExtra trailing node (a NockerlChip, an action) rendered after the badge.
onSelect(() => void) | undefined
disabledbooleanfalse
classNamestring