CleenUI · Feedback · StackedProgressTracker

StackedProgressTracker

One panel for everything happening in the background — stacked rows, live progress per row, a segmented status filter, and a +N more truncation the user controls.

Compact examples

AI agent progress

Compact Examples / AI Agent Progress

Four coding agents working in parallel, in a dark surface with an orange accent. Nothing here is a component variant: the panel background, border, title colour, bar track and bar fill are all reached through the classNames and styles subparts — a completely different visual language without a fork.

New Year countdowns

Compact Examples / New Year Countdowns

Five cities counting down to their own midnight on January 1st, each row ticking once a second. The bar shows how much of the local year has already elapsed, and the trailing 0d 00:00:00 value proves name takes a ReactNode, not just a string — so a row can carry its own two-column layout.

Deployment pipeline

Compact Examples / Deployment Pipeline

Every status the tracker can render, in one static panel: two finished stages, a canary in flight, a queued migration waiting behind it, and a failed smoke test. This is the row vocabulary an operator has to be able to read at a glance.

Connector sync

Compact Examples / Connector Sync

A data ingestion tray docked to the lower right of the app shell. Four connectors stream in at once, each row advancing on its own; as a connector reaches 100% its bar and percentage give way to a success check. Icon-free, 11px labels and 3px bars — the density an operator watching a long-running import actually wants.

Export queue

Compact Examples / Export Queue

Seven queued exports with maxVisibleItems set to three, so the truncation control carries the rest. A long queue never grows the panel past the height its host allotted it.

Status filter examples

Incident queue

Status Filter Examples / Incident Queue

The same panel with showStatusFilter turned on. The inline segmented bar buckets the rows into Not Started, In Progress, Completed and All, opening on In Progress, and showStatusFilterCounts puts the size of every bucket right on its option. A new incident pages in four seconds after the panel mounts — watch the counts move while the selected bucket stays put.

Build matrix

Status Filter Examples / Build Matrix

A CI matrix pinned to the top right of a terminal-flavoured shell, opening on All rather than In Progress. The buckets are relabelled Queued / Running / Finished through labels.statusFilterOptions — copy the dashboard's users recognise, without changing what each bucket actually matches. A retry job is scheduled three seconds in.

Onboarding checklist

Status Filter Examples / Onboarding Checklist

The tracker does not have to float. Here it sits inline in a settings column as a getting-started checklist, opening on Not Started so the list reads as "what is left". A newly unlocked step appears after five seconds, and filtering to Completed shows off the custom empty copy.

Controlled moderation queue

Status Filter Examples / Controlled Moderation Queue

The controlled mode: the page owns the selection through statusFilter and onStatusFilterChange, so the summary button above the panel can jump straight to the failed batch. Clicking the segmented bar still works — it just reports upward instead of keeping its own state.

About StackedProgressTracker

StackedProgressTracker groups the progress of many tracked items into one panel: name, live progress bar, status per row. Rows can be anything with a name, a progress value and a status — file uploads, connector syncs, background jobs, incident triage, AI agents working in parallel. Nothing here is coupled to a specific domain; the file-upload tray (FileStackedProgressTracker) is just a thin wrapper that maps its own file shape down to TrackerItem.

Behaviour follows what an operator watching background work actually wants. Finished rows swap the bar for a success check; failed rows show an alert; queued rows show a bouncing pending dot. The header title auto-writes to "Processing N items" / "Processing complete" when you don't provide one. The chevron contracts the panel to just its header, and past maxVisibleItems (5 by default) the list truncates behind a +N more control. Turn on showStatusFilter and the same panel gains an inline segmented bar that buckets rows into Not Started, In Progress, Completed and All, with optional per-bucket counts. Every subpart is themable via classNames / styles so a completely different visual language (dark, orange accent, teal-terminal, whatever) is a re-skin rather than a fork.

When to use it

  • Sync tray for background data ingestion — Salesforce, HubSpot, NetSuite streaming in at once.
  • Incident queue with a status filter so on-call can flip between In Progress and Completed without leaving the page.
  • Multi-agent AI task panel — one row per agent, each advancing on its own timeline.
  • File-upload progress in bulk-upload flows (via the FileStackedProgressTracker wrapper).
  • Long-running exports / rendering jobs the user should be able to dismiss but return to.

Common props

Prop
Type
Description
items
TrackerItem[]
Items to track, one row each. Empty renders nothing (no empty shell).
title
ReactNode
Header content. Defaults to "Processing N items" / "Processing complete".
maxVisibleItems
number
Rows rendered before the list truncates behind +N more. Default 5.
showStatusFilter
boolean
Renders the inline segmented status bar (Not Started / In Progress / Completed / All).
showStatusFilterCounts
boolean
Appends the number of matching rows to each filter option.
onDismiss
() => void
Renders the dismiss ✕ control in the header when provided.
labels
Labels
Copy overrides for every label the panel renders.
classNames / styles
Subparts
Per-subpart class + style overrides — card, header, title, filter, row, progress bar, status icon, empty, expand button.
⚡ Already in an AI editor?

Set up CleenUI in your tool.

Skip the manual import — ask your AI agent to build with this component. The Builder skill knows its props, variants, and idioms.