React Product Family Matrix
Engineers pick a part by scanning one column until the number is big enough, then reading across that row. That only works if both headers stay put — so the part column pins left, the header row pins top, and the corner cell pins to both.
KLV family — 8 variants. Scroll horizontally; both headers stay pinned.
| Compute | Crypto | I/O | Environment | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Part | ||||||||||||
| KLV-7000NewFlagship | 4 | 1,600 | 8 | Yes | Yes | Yes | Yes | Gen4 ×8 | 2 | 85 | 42 | FBGA-484 |
| KLV-7000AAutomotive | 4 | 1,200 | 8 | Yes | Yes | Yes | Yes | Gen4 ×8 | 2 | 125 | 38 | FBGA-484 |
| KLV-7000TExtended temp | 4 | 1,400 | 8 | Yes | Yes | Yes | Yes | Gen4 ×8 | 2 | 105 | 40 | FBGA-484 |
| KLV-5000Mainstream | 2 | 1,000 | 4 | Yes | Yes | No | Yes | Gen3 ×4 | 1 | 85 | 19 | FBGA-256 |
| KLV-5000DHardened | 2 | 900 | 4 | Yes | Yes | Yes | Yes | Gen3 ×4 | 1 | 85 | 22 | FBGA-256 |
| KLV-3000Entry | 1 | 600 | 1 | Yes | No | No | Yes | — | 0 | 85 | 7 | QFN-64 |
| KLV-3000IIndustrial | 1 | 600 | 1 | Yes | No | No | Yes | — | 0 | 105 | 7 | QFN-64 |
| KLV-2000Legacy | 1 | 400 | 0.5 | Yes | No | No | No | — | 0 | 70 | 4 | QFN-48 |
Installation
Props
| Prop | Type | Description |
|---|---|---|
| columns | MatrixColumn[] | { key, label, unit?, numeric?, group? } |
| rows | MatrixRow[] | { id, name, meta?, badge?, href?, values } |
| caption | string | Line above the table |
| defaultSort | string | Column key to sort by on mount |
Give consecutive columns the same group string and they merge into a spanning heading — Compute, Crypto, I/O in the demo. Set numeric for right-aligned tabular figures and numeric (rather than lexical) sorting; booleans render as check/dash with screen-reader text, and undefined renders as an em dash meaning not available on this variant.
Two headers, three z-indices
Pinning both axes is where these tables usually break. The part column and the header row each need position: sticky, but the cell where they intersect is sticky on both — and it must paint above both, or the header row slides underneath it. That is why the corner cell sits at z-30, the two header bands at z-20, and the row headers at z-10.
border-separate matters too: with collapsed borders, browsers drop the borders on sticky cells as they scroll, so the header ends up floating with no bottom edge.
For a handful of parts side by side with a differences-only toggle, use Comparison Table instead — this component is for the whole family at once. To let visitors assemble their own subset, use the Spec Selector.
New components every week
Get the week's new Kelvin UI components and templates in one short email. No spam, unsubscribe anytime.