ActivityFeed
Data Display

ActivityFeed

Audit log or activity feed built on Timeline, with actor/action/target rows, relative timestamps, and optional day grouping.

Component behavior

ActivityFeed composes Timeline rows in actor/action/target format. It renders timestamps with RelativeTime and can group entries by Today, Yesterday, or date in the reader’s timezone.

ActivityFeed inherits Timeline markers, connectors, row states, and layout. Timeline props such as variant, density, timePlacement, and --m-timeline-* custom properties also apply.

Use cases
  • Activity records with an actor, action, and target.
  • Activity timestamps displayed relative to the current time.
  • Long activity histories grouped by day.
Alternatives

Timeline: entries are general events, release stages, or status changes.

CommentThread: entries form a conversation with replies.

LogViewer: the content is a high-volume stream of log lines.

Props

ActivityFeedProps props
PropTypeDefaultDescription
itemsActivityItem[]—Items to display, newest first.
groupByDayboolean—Adds Today, Yesterday, and date headings using the client timezone after hydration.
connectorbooleantrueDraw the vertical connector down the rail.
density"compact" | "normal" | "comfortable""normal"Row density. Timeline's, passed through.
variant"rail" | "cards" | "minimal""rail"Timeline variant applied to feed rows.
timePlacement"inline" | "leading" | "none""inline"Timestamp placement. Leading uses a separate column.
emptyStateReactNode"No activity yet."Shown when items is empty.
onItemClick(item: ActivityItem) => void—Renders rows as buttons. Do not include links or other interactive children in button rows.

ActivityItem

ActivityItem props
PropTypeDefaultDescription
idstring—Stable key.
actorReactNode—The actor, such as a user, service, or bot. Renders with the strongest text emphasis.
actionReactNode—The phrase that follows the actor: "deployed", "closed as duplicate".
targetReactNode—Target text rendered in monospace with the bright tone.
timeDate—Rendered through RelativeTime, and what groupByDay buckets on.
mediaReactNode—Avatar or icon on the rail, in place of the tone dot.
toneToneProp—Marker color. Accepts tone names and aliases.
detailReactNode—Content in a framed block below the event.
metaReactNode—Dim line under the sentence.
activeboolean—Applies active styling with a tinted background and emphasized marker.
ImportTSX
import { ActivityFeed } from "@solarius/onset";
import type { ActivityItem } from "@solarius/onset";

Examples

Activity feed

Avatars on the rail

media replaces the tone dot with a supplied node, such as an Avatar, logo, or StatusDot. It maps to Timeline’s marker slot and retains rail alignment.

With avatars

Days, density and frames

groupByDay inserts Today / Yesterday / date headings and starts a new block at each heading. density and variant pass straight through to the timeline: compact for a side panel, cards for a feed whose rows carry real bodies.

groupByDay
Density and variants

Selecting a row

onItemClick makes each row a real <button>, and active marks the focused row; use both when the feed sits beside a detail pane. Do not use onItemClick on rows that contain their own links.

Clickable
No activity yet.
Empty