Table
The one data table. Every column resizes and sorts, the user can show and hide columns, figures right-align in tabular Geist, and totals live in a real footer. The default look is the reporting grid: hairlines between rows and columns inside a titled card. Variants strip the lines; density tightens the rows.
Default
Inside a TableCard: title, one-line description and the columns menu. Column meta drives everything a figure needs — `format` renders the value through formatMetricValue and right-aligns it; `footer` on a column puts its total in the pinned footer row. Drag a header edge to resize; click a header to sort (figures sort high-to-low first, text A-to-Z).
Breakdown
7 campaigns · as reported by each platform
Testing_CompleteRegistration_CBO_CA/UK/US/AUS_1/03/2026 | Meta | 14 | $1,290.00 | $126.86 | 0.73× |
Test_Search_BP | Google Search | 31 | $4,120.50 | $42.10 | 3.16× |
Test_Search_Mixed | Google Search | 9 | $980.00 | $88.40 | 1.23× |
Retargeting_CompleteRegistration_CBO_CA/UK/US/AUS_2/04/2026 | Meta | 52 | $6,275.40 | $19.90 | 6.06× |
Test_DG | Google Demand Gen | 4 | $410.00 | $205.20 | 0.50× |
Omnipresent_Reach_ABO_CA/UK/US/AUS_21/08/2026 | Meta | 0 | $0.00 | $0.00 | 0.00× |
Test_Display_RTG | Google Display | 2 | $120.00 | $61.00 | 0.98× |
Total | 2 channels | 112 | $13,195.90 | $52.27 | 2.25× |
Variants
`grid` (default) draws rows and columns; `lines` draws rows only — the editorial list inside a card (DashboardTable is this variant); `plain` keeps only the header rule, for a few rows inside a sheet or a modal.
Testing_CompleteRegistration_CBO_CA/UK/US/AUS_1/03/2026 | Meta | 14 | $1,290.00 | $126.86 | 0.73× |
Test_Search_BP | Google Search | 31 | $4,120.50 | $42.10 | 3.16× |
Test_Search_Mixed | Google Search | 9 | $980.00 | $88.40 | 1.23× |
Retargeting_CompleteRegistration_CBO_CA/UK/US/AUS_2/04/2026 | Meta | 52 | $6,275.40 | $19.90 | 6.06× |
Testing_CompleteRegistration_CBO_CA/UK/US/AUS_1/03/2026 | Meta | 14 | $1,290.00 | $126.86 | 0.73× |
Test_Search_BP | Google Search | 31 | $4,120.50 | $42.10 | 3.16× |
Test_Search_Mixed | Google Search | 9 | $980.00 | $88.40 | 1.23× |
Retargeting_CompleteRegistration_CBO_CA/UK/US/AUS_2/04/2026 | Meta | 52 | $6,275.40 | $19.90 | 6.06× |
Compact density
36px rows instead of 44px. For a long admin list or a breakdown inside a detail view.
Testing_CompleteRegistration_CBO_CA/UK/US/AUS_1/03/2026 | Meta | 14 | $1,290.00 | $126.86 | 0.73× |
Test_Search_BP | Google Search | 31 | $4,120.50 | $42.10 | 3.16× |
Test_Search_Mixed | Google Search | 9 | $980.00 | $88.40 | 1.23× |
Retargeting_CompleteRegistration_CBO_CA/UK/US/AUS_2/04/2026 | Meta | 52 | $6,275.40 | $19.90 | 6.06× |
Dense, inside a card
`variant=plain` draws no border of its own and `density=dense` is 28px rows in 12px type — the breakdown under a chart, where the card already draws the surface and every pixel of height counts.
By channel
Spend share, last 4 weeks
Segment | Spend | CPM | % |
|---|---|---|---|
Meta | $1,290.00 | $126.86 | 10.2% |
Google Search | $4,120.50 | $42.10 | 32.5% |
Google Search | $980.00 | $88.40 | 7.7% |
Meta | $6,275.40 | $19.90 | 49.5% |
Wrapping cells
A cell truncates to one line by default. `meta: { wrap: true }` lets a column wrap — ad copy, a reason, a description — and the row grows to fit. Give one wrapping column the surplus width so it takes the room.
Original name | Proposed name | Reason |
|---|---|---|
IMG_4021 final FINAL v3.png | summer-sale-static-1x1-v3.png | Names the campaign, the format and the ratio; drops the version noise that made the old name unsearchable. |
hero.mp4 | brand-awareness-q2-hero-9x16.mp4 | Adds the campaign and the aspect ratio the file was cut for. |
Bounded height
`maxHeight` scrolls the body and pins the header and the footer, so column labels and totals never leave the screen.
Testing_CompleteRegistration_CBO_CA/UK/US/AUS_1/03/2026 | Meta | 14 | $1,290.00 | $126.86 | 0.73× |
Test_Search_BP | Google Search | 31 | $4,120.50 | $42.10 | 3.16× |
Test_Search_Mixed | Google Search | 9 | $980.00 | $88.40 | 1.23× |
Retargeting_CompleteRegistration_CBO_CA/UK/US/AUS_2/04/2026 | Meta | 52 | $6,275.40 | $19.90 | 6.06× |
Test_DG | Google Demand Gen | 4 | $410.00 | $205.20 | 0.50× |
Omnipresent_Reach_ABO_CA/UK/US/AUS_21/08/2026 | Meta | 0 | $0.00 | $0.00 | 0.00× |
Test_Display_RTG | Google Display | 2 | $120.00 | $61.00 | 0.98× |
Testing_CompleteRegistration_CBO_CA/UK/US/AUS_1/03/2026 | Meta | 14 | $1,290.00 | $126.86 | 0.73× |
Test_Search_BP | Google Search | 31 | $4,120.50 | $42.10 | 3.16× |
Test_Search_Mixed | Google Search | 9 | $980.00 | $88.40 | 1.23× |
Retargeting_CompleteRegistration_CBO_CA/UK/US/AUS_2/04/2026 | Meta | 52 | $6,275.40 | $19.90 | 6.06× |
Test_DG | Google Demand Gen | 4 | $410.00 | $205.20 | 0.50× |
Omnipresent_Reach_ABO_CA/UK/US/AUS_21/08/2026 | Meta | 0 | $0.00 | $0.00 | 0.00× |
Test_Display_RTG | Google Display | 2 | $120.00 | $61.00 | 0.98× |
Testing_CompleteRegistration_CBO_CA/UK/US/AUS_1/03/2026 | Meta | 14 | $1,290.00 | $126.86 | 0.73× |
Test_Search_BP | Google Search | 31 | $4,120.50 | $42.10 | 3.16× |
Test_Search_Mixed | Google Search | 9 | $980.00 | $88.40 | 1.23× |
Retargeting_CompleteRegistration_CBO_CA/UK/US/AUS_2/04/2026 | Meta | 52 | $6,275.40 | $19.90 | 6.06× |
Test_DG | Google Demand Gen | 4 | $410.00 | $205.20 | 0.50× |
Omnipresent_Reach_ABO_CA/UK/US/AUS_21/08/2026 | Meta | 0 | $0.00 | $0.00 | 0.00× |
Test_Display_RTG | Google Display | 2 | $120.00 | $61.00 | 0.98× |
Testing_CompleteRegistration_CBO_CA/UK/US/AUS_1/03/2026 | Meta | 14 | $1,290.00 | $126.86 | 0.73× |
Test_Search_BP | Google Search | 31 | $4,120.50 | $42.10 | 3.16× |
Test_Search_Mixed | Google Search | 9 | $980.00 | $88.40 | 1.23× |
Retargeting_CompleteRegistration_CBO_CA/UK/US/AUS_2/04/2026 | Meta | 52 | $6,275.40 | $19.90 | 6.06× |
Test_DG | Google Demand Gen | 4 | $410.00 | $205.20 | 0.50× |
Omnipresent_Reach_ABO_CA/UK/US/AUS_21/08/2026 | Meta | 0 | $0.00 | $0.00 | 0.00× |
Test_Display_RTG | Google Display | 2 | $120.00 | $61.00 | 0.98× |
Testing_CompleteRegistration_CBO_CA/UK/US/AUS_1/03/2026 | Meta | 14 | $1,290.00 | $126.86 | 0.73× |
Test_Search_BP | Google Search | 31 | $4,120.50 | $42.10 | 3.16× |
Test_Search_Mixed | Google Search | 9 | $980.00 | $88.40 | 1.23× |
Retargeting_CompleteRegistration_CBO_CA/UK/US/AUS_2/04/2026 | Meta | 52 | $6,275.40 | $19.90 | 6.06× |
Test_DG | Google Demand Gen | 4 | $410.00 | $205.20 | 0.50× |
Omnipresent_Reach_ABO_CA/UK/US/AUS_21/08/2026 | Meta | 0 | $0.00 | $0.00 | 0.00× |
Test_Display_RTG | Google Display | 2 | $120.00 | $61.00 | 0.98× |
Total | 2 channels | 112 | $13,195.90 | $52.27 | 2.25× |
Controlled sort
Pass `sortBy`, `sortOrder` and `onSortChange` to own the order yourself — in URL state, a saved report, or on the server. The table then only reports the click and shows the indicator.
Retargeting_CompleteRegistration_CBO_CA/UK/US/AUS_2/04/2026 | Meta | 52 | $6,275.40 | $19.90 | 6.06× |
Test_Search_BP | Google Search | 31 | $4,120.50 | $42.10 | 3.16× |
Testing_CompleteRegistration_CBO_CA/UK/US/AUS_1/03/2026 | Meta | 14 | $1,290.00 | $126.86 | 0.73× |
Test_Search_Mixed | Google Search | 9 | $980.00 | $88.40 | 1.23× |
Test_DG | Google Demand Gen | 4 | $410.00 | $205.20 | 0.50× |
Test_Display_RTG | Google Display | 2 | $120.00 | $61.00 | 0.98× |
Omnipresent_Reach_ABO_CA/UK/US/AUS_21/08/2026 | Meta | 0 | $0.00 | $0.00 | 0.00× |