Components · Data table
The grid the volunteer roster runs on — a typed DataGrid assembled from @phauna/ds/grid primitives. A sticky <thead> caps rule-divided rows, and each column owns its own cell renderer: an avatar + name identity, a Team dot, a monospace State tag, a DS status Badge, a relative "last active" date, and a trailing per-row actions menu.
| Volunteer | Team | State | Status | Last active | |
|---|---|---|---|---|---|
|
MR
Marisol Reyes
Transport lead
|
Transport | CA | Active | 2h ago | |
|
DW
Darnell Washington
Foster applicant
|
Foster network | GA | Onboarding | 5h ago | |
|
PV
Priya Venkatesan
Intake volunteer
|
Intake & triage | TX | Active | Yesterday | |
|
TO
Tomás Okafor
Vet tech
|
Medical | NY | Paused | 3d ago | |
|
HB
Hannah Bergström
Canvass captain
|
Community outreach | WA | Active | 1h ago | |
|
WC
Wei Chen
Driver
|
Transport | IL | Active | 6h ago | |
|
AR
Aaliyah Robinson
Foster applicant
|
Foster network | OH | Onboarding | Jun 28 | |
|
DF
Diego Fuentes
Vet tech
|
Medical | AZ | Active | 4h ago |
Row 1 is pinned :hover (row tint + its name link in accent) and its actions button is pinned :hover; hover the others live. Surfaces layer bg < surface < surface-2; rows divide on --rule hairlines with no vertical borders — the DataGrid look.
{ key, header, sortable?, align?, render?(row) }. render owns the cell JSX — the identity cell, the Team lookup, the State tag and the Status Badge are all custom renderers over the same typed row.Badge tones — good (Active), warn (Onboarding), neutral (Paused) — a dot + label pill, never a raw string.Source · RescuersTable.tsx (TanStack columns: avatar name link, state, status dot, relative updatedAt, row menu) · @phauna/ds/grid DataGrid + Column<T> render · design-system/data-table.