packageDisplaysForRows(rows: ReadonlyArray<{ attendee: { package_group_id: number; }; }>): Promise<Map<number, PackageDisplay>>
The package displays behind a set of booked rows — each row's attendee names
its persisted package_group_id (0 on a plain row, matching no package).
Shared by the ticket view, the wallet lookup, and the email renderer, which
all carry { attendee, listing } row shapes.
Promise<Map<number, PackageDisplay>>