Data table

Sticky header

On long tables (the audit log) the header row sticks under the top bar while the body scrolls, and the toolbar sticks above it. Needs the kit v2 `overflow:clip` shell so sticky works on a real page.

Live specimen

Lifted from the approved family page at build time; interact with it.

Sticky header, on the audit log

Scroll inside the table: the header stays. Rows open to show before and after.

ExpandTimestampWhoActionEntityRequest
2026-10-11 14:20:07staff: Meiupdatemaster_product / 3f2c9a1e…req_01JA7Q3K8MZC4W

Before

{ "handle": "navy-birdseye-two-piece", "status": "draft", "version": 3, "recommended_price": { "GBP": 1150, "EUR": 1320, "USD": 1450 } }

After

{ "handle": "navy-birdseye-two-piece", "status": "available", "version": 4, "recommended_price": { "GBP": 1150, "EUR": 1320, "USD": 1450 } }
2026-10-11 14:02:51staff: Meipublishwebsite_release / v3req_01JA7P2D9TQ6XR
2026-10-11 13:47:10api_key: mcp-doorsupdateoffer_price / 8d41c0b2…req_01JA7N8V1HJ3KD
2026-10-11 12:31:44system: cloth-mirrorsynccloth / HS 81045req_01JA7J5R4WB2NE
2026-10-11 11:15:02staff: Tomcreatemaster_product / c97e2f10…req_01JA7E9K2PM7SV
2026-10-11 10:58:39staff: Tomupdatemaster_product / c97e2f10…req_01JA7D7Y6CG1QT
2026-10-10 17:40:12staff: Priyaupdatebrand_settings / rj-clothingreq_01JA5B3N8ZF4LA
2026-10-10 16:05:55staff: Tomcreatemaster_product / 41b8e6d3…req_01JA58Q2XKV9HM
2026-10-10 15:22:30api_key: studio-syncrevokeapi_key / key_live_…7c2areq_01JA56M4TRS8PB
2026-10-10 11:09:48staff: Meiupdatemaster_product / e2a07d94…req_01JA4R7H5NW3YC
2026-10-09 18:31:16system: cloth-mirrorsynccloth / VBC 218.1003req_01JA2F1Q9DL6ZU
2026-10-09 09:12:03staff: Priyapublishwebsite_release / v2req_01JA0X4B7GE2MJ
Newest 200 rowsfiltered by entity_type = master_productsince 7 days
Usesshadcn TableCollapsibleTanStack getExpandedRowModelth position:sticky.dt-scroll.y.dt-json--font-code

from families/data-table/#sticky-header

Sticky-safe shell

The frame, main column and phone frame clip instead of hiding overflow, so a sticky top bar, toolbar or save bar sticks on a real page.

Nothing to see changes: overflow:clip clips exactly like hidden but is not a scroll container, so position:sticky children stick to the page scroll.

Uses.frame{overflow:clip}.main{overflow:clip}.phone{overflow:clip}

from families/page-primitives/#shell