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 a dashboard would otherwise hand-roll 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. Screen readers hear it with its unit, "3 items":
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 / accent / success / warning / danger / info / neutral. primary and accent resolve to --color-wk-accent and info to --color-wk-info-tone, which is the accent until you give info a color of its own. |
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 shows the number and reads it with its unit from hidden text, "1 item" or "3 items", in the language of the page. The number itself is hidden from screen readers, so it is not read twice.
- 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.