Status Tiles
The <x-wirekit::status-tiles> component renders a list of entities as colored
status tiles — a fleet light you read at a glance. Each tile is tinted by its
intent, but status never rides on color alone: every tile also carries a distinct
icon shape and a screen-reader status word, so the grid stays legible for
colorblind users and assistive technology (WCAG 1.4.1).
Reach for it when you have N of the same kind of thing and want to see all their states in one screen: thirty apps on one dashboard, a rack of services, a batch of jobs. For a two-dimensional cross of rows × columns, use Status Matrix instead.
Usage
Pass items — a list of ['key', 'label', 'intent'] maps. Add href to make a
tile a link, and meta for a small caption under the label.
Legend
Set :legend="true" to show a count-per-intent legend above the grid. Only the
intents actually present are listed, each with its shaped icon, word, and count —
so the summary is readable without color too.
Clickable tiles
Give an item an href and its tile becomes a keyboard-operable link with a focus
ring — click through to the entity's detail view. Tiles without href stay static.
Density
The tiles fill a responsive grid. Pass columns (the same syntax as
Grid) to control how many sit per row — tighten it for a dense
fleet wall, loosen it for a handful of services.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
items |
array |
[] |
The fleet — each entry a map: key, label, intent, optional href, optional meta. |
legend |
bool |
false |
Show a count-per-intent legend above the grid (only present intents listed). |
columns |
string |
'2 sm:3 md:4 lg:6' |
Responsive grid column spec, forwarded to Grid. |
gap |
string |
'sm' |
Grid gap token. |
scope |
string|null |
null |
Scoped personalization key. |
Each items entry accepts:
| Key | Type | Description |
|---|---|---|
key |
string |
Stable identifier, emitted as data-key (optional but recommended). |
label |
string |
The visible entity name. |
intent |
string |
success, warning, danger, info, or neutral. Anything else falls back to neutral. |
href |
string |
Makes the tile a link to the entity's detail view. |
meta |
string |
Optional small caption under the label (a count, a note). |
Accessibility
- The grid is an ARIA
list; each tile is alistitem. Always pass anaria-labelnaming the fleet (aria-label="Fleet status"). - Status is never color-only (WCAG 1.4.1): each tile carries a distinct icon
shape and a visually-hidden status word (
Status: Critical), so colorblind and screen-reader users get the state without relying on the tint. - Linked tiles are real
<a>elements — tab-reachable, with a visible focus ring. - The legend repeats the same shaped-icon + word + count triad, readable in grayscale.
Keyboard Interaction
Status tiles carry no interaction model of their own — a tile is keyboard-operable
only when it is a link (has an href). Static tiles are read-only status displays
and are intentionally not focusable.
| Key | Action |
|---|---|
Tab |
Move focus to the next linked tile (skips static tiles) |
Enter |
Activate the focused linked tile (follow its href) |
Design Tokens
Tiles reuse the intent grammar of Badge — a soft color-mix
tinted surface with a matching 25%-tinted border and the -text intent color for
the icon. No new tokens are introduced.
| Token | Used for |
|---|---|
--color-wk-success / --color-wk-warning / --color-wk-danger / --color-wk-accent |
Tile tint + border per intent |
--color-wk-success-text / --color-wk-warning-text / --color-wk-danger-text / --color-wk-info-text |
Status icon color per intent |
--color-wk-bg-muted / --color-wk-border-subtle |
Neutral tile surface |
--radius-wk-md |
Tile corner radius |
--color-wk-ring |
Focus ring on linked tiles |
Further Reading
- Status Matrix — for a 2D rows × columns cross
- Badge — the intent grammar these tiles share
- WCAG 1.4.1 Use of Color