Story 2199 - pramaan-admin

EntityRow now owns the avatar card-list row shape

This story extracts one shared EntityRow primitive and migrates the firm/staff support grant, support roster, grant history, and activity card-lists onto the table-family chrome from Story-2198. The lists remain cards, not columnar tables.

What Changed

Surface Change
src/components/shared/entity-row/ Added the shared presentational primitive: initials avatar, title, optional subtitle/reason, optional metadata, and trailing action slot. Its stories cover default, action, firm-target, and long content states.
src/components/support-access/grant-entity-row-list.tsx Added one presentational row-list adapter so firm and staff active grant/history panels share the same row implementation while keeping per-surface labels, links, ids, and action slots as config.
Firm panels firm-active-grants-panel, firm-grant-history-panel, firm-csm-roster-panel, and firm-activity-panel now use EntityRow with table-family border, header, divider, hover, and radius tokens.
Staff panels active-grants-panel and recent-grant-history-panel now share the same support grant row renderer used by the firm panels.

Guardrails

No backend, generated contract, OpenAPI, codegen, Project #2 board, or server-confirmed write behavior changed.

Firm grant revoke still uses the existing generated mutation, invalidate/refetch path, typed server field errors, persistent revoke dialog result contract, and success toast. Staff revoke remains the same disabled pending-endpoint button with tooltip. Roster remove still waits for the provided callback and leaves the dialog open on failure.

Visual Evidence

Before screenshots were captured from detached base commit 8804806. After screenshots were captured from this branch in Storybook on http://127.0.0.1:6006.

Firm active grants

Before

Firm active grants before EntityRow

After

Firm active grants after EntityRow

Staff active grants

Before

Staff active grants before EntityRow

After

Staff active grants after EntityRow

Firm grant history

Before

Firm grant history before EntityRow

After

Firm grant history after EntityRow

Staff recent grant history

Before

Staff recent grant history before EntityRow

After

Staff recent grant history after EntityRow

Firm support roster

Before

Firm support roster before EntityRow

After

Firm support roster after EntityRow

Firm activity

Before

Firm activity before EntityRow

After

Firm activity after EntityRow

Verification

Check Result
pnpm exec tsc --noEmit Passed
pnpm run lint Passed with three existing TanStack Table React Compiler warnings.
pnpm run test Passed: 93 files, 590 tests.
pnpm run test:storybook Passed: 108 files, 384 tests.