Loading tables keep their columns

PR #15379. While a list loads, its placeholder table now uses the column widths the real table had last time, so the columns no longer jump sideways when the rows arrive.

What was measured

Branch dev server reading the stage data, 1440 wide. Each list was opened twice by clicking into it, with the server held for 6 seconds so the loading table could be measured. Visit 1 starts with nothing remembered, which is exactly what main does today. Visit 2 starts after a full page load, so the widths came back from the tab's own storage. Header widths in pixels:

ListVisitLoading tableLoaded table
Prospects1: nothing remembered (= main)144, 144, 144, 144, 144, 144, 144, 111163, 220, 114, 132, 140, 114, 114, 123shifts
Prospects2: second visit163, 220, 114, 132, 140, 114, 114, 123163, 220, 114, 132, 140, 114, 114, 123matches
Tenants1: nothing remembered (= main)175, 175, 175, 175, 175, 175, 69171, 171, 171, 171, 171, 171, 90shifts
Tenants2: second visit171, 171, 171, 171, 171, 171, 90171, 171, 171, 171, 171, 171, 90matches
Screenshots, design critique and what is not covered

Prospects — second visit

Loading: the bars sit in the loaded columns
Loading: the bars sit in the loaded columns
Loaded: same column edges
Loaded: same column edges

Prospects — first visit (today's behavior)

Loading: columns spread evenly
Loading: columns spread evenly
Loaded: columns resize to content
Loaded: columns resize to content

Tenants — second visit

Loading
Loading
Loaded
Loaded

Design critique (two rounds)

Round 1, Prospects. On the second visit the placeholder bars line up under the same column edges as the loaded rows. The Company column keeps the narrow width its compact icon header uses, and the word "Company" in the placeholder header still fits without being cut off. No other part of the page moves.

Round 2, Tenants. The loading and loaded tables are identical, and nothing else on the page changes. Stage's tenant columns come out nearly even once loaded, so the change here is small (the last column moves from 69 to 90).

Not covered

The very first visit in a new tab still spreads the columns evenly. A full reload of a list page still draws its first frame evenly before the remembered widths apply. The placeholder header says "Company" where the loaded table shows a building icon.

PropFlow Docs