Skip to content

Components

Timeline and Stepper

A dated sequence and a progress stepper. Both are ordered lists, because a sequence has an order and a screen reader should be told so. Timeline owns the rail and the rhythm; you own the content.

Examples

import { Timeline } from "@luc/ui";

A pipeline run

Changelogs, activity feeds, job runs and agent traces share one shape: a marker, a title, a supporting line and a right-aligned time or duration. The rail stops at the last item instead of running past it.

  1. Ingest04:00

    1,284 bars written for BTCUSDT 1h

  2. Analytics04:12

    Seven domains validated

  3. Materialize12m 04s

    Serving generation 1284 built and published

  4. Research passqueued

    Waiting for the analytics window

  5. Notifyattempt 2 / 5

    Lark delivery failed — retrying

  1. Schema applied10:02
  2. Backfill queued10:04
  3. Rows written10:31
  4. Parity check clean10:36
  5. Serving switched10:41

Progress through a known sequence

Completed and current steps are buttons; a future step is static text, so nobody jumps into a step whose prerequisites are not met.

  1. ScheduleWhen it runs
  2. ReviewConfirm and publish
  1. Connect provider
  2. Map instruments
  3. Validate parity

Only steps at or before the current one are reachable.

step 2 / 4

API

Component props
PropTypeDefaultNotes
Timeline itemsTimelineItem[]—title, description, meta, detail, tone, icon, muted.
Timeline variant"rail" | "plain""rail"Draw the connector, or a bare sequence.
Timeline density"default" | "compact""default"Compact for a log surface.
Stepper stepsStepperStep[]—id, label, description, and an optional explicit complete.
Stepper currentnumber—Zero-based. Only steps at or before it are interactive.
Stepper orientation"horizontal" | "vertical""horizontal"A form header, or a sidebar checklist.

Usage

import { Timeline } from "@luc/ui/components/timeline";
<Timeline items={runs} />

Guidelines

Do

  • Reach for `Timeline` when the order carries meaning — runs, releases, incidents — and use `List` when it does not.
  • Keep `title` short and put the evidence in `description`; `meta` is the right place for a date or a duration.

Don't

  • Use it as a changelog of prose: a long description in every row turns the rail into a wall and hides the sequence.

Accessibility

The rail is an ordered list: each entry is announced with its position, and `meta` is read with the entry rather than as a separate column.

Luc UI v1.0Timelinedark theme