Team
MembersTable, PendingInvitesTable and InviteMemberDialog from packages/ui, against a 30-person roster with real paging, permission-shaped rows, and switchable failure.
Roster
An Admin actor: two Owners above their reach, one disabled member, mixed 2FA, their own row unmanageable. 30 rows at 25 per page, so page 2 is a real 5-row remainder.
| Member | Actions |
|---|---|
Ada Hopper (you)ada.hopper@acme.coAdmin | |
Grace Dijkstragrace.dijkstra@acme.coOwner | |
Alan Liskovalan.liskov@acme.coOwner | |
Katherine Lovelacekatherine.lovelace@acme.coMember | |
Edsger Johnsonedsger.johnson@acme.coAdmin | |
Margaret Shannonmargaret.shannon@acme.coMember · Disabled | |
Claude Perlmanclaude.perlman@acme.coMember | |
Barbara Turingbarbara.turing@acme.coMember | |
Donald Hamiltondonald.hamilton@acme.coAdmin | |
Radia Knuthradia.knuth@acme.coMember | |
Ada Hopperada.hopper@acme.coMember | |
Grace Dijkstragrace.dijkstra@acme.coMember | |
Alan Liskovalan.liskov@acme.coAdmin | |
Katherine Lovelacekatherine.lovelace@acme.coMember | |
Edsger Johnsonedsger.johnson@acme.coMember | |
Margaret Shannonmargaret.shannon@acme.coMember | |
Claude Perlmanclaude.perlman@acme.coAdmin | |
Barbara Turingbarbara.turing@acme.coMember | |
Donald Hamiltondonald.hamilton@acme.coMember | |
Radia Knuthradia.knuth@acme.coMember | |
Ada Hopperada.hopper@acme.coAdmin | |
Grace Dijkstragrace.dijkstra@acme.coMember | |
Alan Liskovalan.liskov@acme.coMember | |
Katherine Lovelacekatherine.lovelace@acme.coMember | |
Edsger Johnsonedsger.johnson@acme.coAdmin |
Permission shapes
The actions column is driven entirely by each row's own assignableRoles / canRemove — a viewer without team/role:w or team/remove:w never receives a row that allows either.
| Member | Actions |
|---|---|
Ada Hopper (you)ada.hopper@acme.coAdmin | |
Grace Dijkstragrace.dijkstra@acme.coOwner | |
Alan Liskovalan.liskov@acme.coOwner | |
Katherine Lovelacekatherine.lovelace@acme.coMember | |
Edsger Johnsonedsger.johnson@acme.coAdmin | |
Margaret Shannonmargaret.shannon@acme.coMember · Disabled | |
Claude Perlmanclaude.perlman@acme.coMember | |
Barbara Turingbarbara.turing@acme.coMember |
team:r only — no row has an assignable role or canRemove, so no row renders a menu.
| Member | Actions |
|---|---|
Ada Hopper (you)ada.hopper@acme.coAdmin |
You can't reassign or remove yourself, so the actions column is empty even though you're an Admin.
Pending invites
PendingInvitesTable renders null — no heading, no empty-state row.
| Actions | |
|---|---|
sam.rivera@acme.coMember · Expired | |
priya.desai@acme.coAdmin · | |
morgan.lee@acme.coOwner · |
The invite to Owner is above the Admin actor's reach, so it has no Revoke action.
Invite a member
Try "taken@acme.co" — the fixture rejects it with "That user is already a member."
Failure state
| Member | Actions |
|---|---|
Ada Hopper (you)ada.hopper@acme.coAdmin | |
Claude Perlmanclaude.perlman@acme.coMember |
Row menu → Change role → Change role — every attempt fails with "Something went wrong — try again."
320px width
| Member | Actions |
|---|---|
Ada Hopper (you)ada.hopper@acme.coAdmin | |
Grace Dijkstragrace.dijkstra@acme.coOwner | |
Alan Liskovalan.liskov@acme.coOwner | |
Katherine Lovelacekatherine.lovelace@acme.coMember | |
Edsger Johnsonedsger.johnson@acme.coAdmin |
Last active drops first, then 2FA; role and status fold into the member's line last. The actions menu never scrolls off.