Stage Card
A column-header / stage primitive for kanban boards, sales pipelines, roadmap quarters, and workflow milestones. Renders an intent-tinted border, a faintly intent-tinted body, an optional item-count pill, and an optional completion bar — the pattern dashboards previously hand-rolled per column.
Basic Usage
Intents
The border and body tint pull from the matching design token. neutral is the default:
Count Pill
Pass count to show an item count in the header. The pill announces as "N items" to screen readers:
Progress
Pass progress (0–100) to render a thin completion bar colored to match the stage intent:
Pipeline Composition
Combine count, progress, and slotted items for a full pipeline stage:
Props
| Prop | Type | Default | Description |
|---|---|---|---|
label |
string|null |
null |
Stage title rendered in the header. Also the aria-label of the group. |
intent |
string |
'neutral' |
Border + tint color: primary / success / warning / danger / info / neutral. |
count |
int|string|null |
null |
Item count rendered as a header pill (announced as "N items"). |
progress |
int|null |
null |
Completion percentage 0..100; renders a thin intent-colored bar. |
scope |
string|null |
null |
Personalization scope key. |
Slots
| Slot | Description |
|---|---|
| default | The stage's items (cards, rows, anything). Stacked vertically with a small gap. |
Accessibility
- When
labelis set, the card is arole="group"witharia-label="{label}", so the stage title is announced as the purpose of its grouped items. - The count pill carries
aria-label="{count} items"— the number is announced with its unit, not as a bare integer. - The border color is decorative; the
labeltext is the accessible name, so the stage is distinguishable without color perception.
Keyboard Interaction
Stage Card is a presentational container — it has no interactive behavior of its own. Any interactive children (cards, buttons, links inside the default slot) own their own keyboard model.
Pitfalls
- Don't rely on the border color alone to convey the stage. Always pass a
label— color is a redundant cue, not the primary signal. progressis a display value, not a control. It mirrors a server-computed percentage; it isn't a slider. Pass an integer0..100.
Design Tokens
| Token | Usage |
|---|---|
--color-wk-bg-elevated |
Body background (mixed with 6% of the intent color). |
--color-wk-border |
Card border. |
--radius-wk-lg |
Card corner radius. |
--color-wk-success / --color-wk-warning / --color-wk-danger / --color-wk-accent / --color-wk-text-muted |
Intent border + tint source. |
Usage & Conventions
Prop conventions — this component uses the shared semantic prop name
intent. See Prop naming conventions for the canonical vocabulary, alias matrix, and decision tree.