Home/Rows/Auto Row Height
Rows

Auto Row Height

Let rows grow to fit their content — wrapped text, tag stacks, or tall cell templates. Set autoRowHeight: true and each row sizes itself. Toggle it off to compare against the uniform fixed height.

Toggle to compare fixed vs. content-driven rows · 400 rows, virtual-scrolled
Ticket
Description
Tags
Priority
#1 · Login fails on Safari
A longer write-up: the regression appeared after the virtual-scroll refactor. When the dataset exceeds a few hundred rows and the user flings the scroll thumb to the bottom, the cumulative offset math drifts by a handful of pixels per measured row, which compounds into a visible jump. Steps to reproduce, expected vs actual, and a screen recording are attached in the linked thread.
p1exportcustomerrtl
high
#2 · Export to Excel truncates wide columns
Minor cosmetic glitch; low priority but easy to fix. The focus ring uses the wrong custom property so it falls back to the browser default blue instead of the theme accent.
groupingp2
high
#3 · Virtual scroll jumps on fast fling
Minor cosmetic glitch; low priority but easy to fix. The focus ring uses the wrong custom property so it falls back to the browser default blue instead of the theme accent.
rtlneeds-reprop2a11ybug
high
#4 · Dark theme contrast on pinned cells
Short note.
regressiontemporalp2
high
#5 · Tree node lazy-load spinner stuck
Minor cosmetic glitch; low priority but easy to fix. The focus ring uses the wrong custom property so it falls back to the browser default blue instead of the theme accent.
p2a11yexportcustomerperfkanban
high
#6 · Kanban card drop lands in wrong lane
Minor cosmetic glitch; low priority but easy to fix. The focus ring uses the wrong custom property so it falls back to the browser default blue instead of the theme accent.
treep1kanbantheming
low
#7 · Filter popup clipped inside dialog
Short note.
export
critical
#8 · Row drag ghost offset on zoom
Short note.
a11yvirtual-scrolltemporalperfregression
high
#9 · Temporal diff misses nested edits
A longer write-up: the regression appeared after the virtual-scroll refactor. When the dataset exceeds a few hundred rows and the user flings the scroll thumb to the bottom, the cumulative offset math drifts by a handful of pixels per measured row, which compounds into a visible jump. Steps to reproduce, expected vs actual, and a screen recording are attached in the linked thread.
needs-reprokanbanvirtual-scroll
critical
#10 · CSV import mangles unicode
A longer write-up: the regression appeared after the virtual-scroll refactor. When the dataset exceeds a few hundred rows and the user flings the scroll thumb to the bottom, the cumulative offset math drifts by a handful of pixels per measured row, which compounds into a visible jump. Steps to reproduce, expected vs actual, and a screen recording are attached in the linked thread.
temporalthemingkanbanp1needs-reproexport
high
#11 · Login fails on Safari
Reproducible on the latest build; happens roughly one time in three and only after a hard refresh.
virtual-scrollp1treebug
low
#12 · Export to Excel truncates wide columns
Reproducible on the latest build; happens roughly one time in three and only after a hard refresh.
perf
high
#13 · Virtual scroll jumps on fast fling
A longer write-up: the regression appeared after the virtual-scroll refactor. When the dataset exceeds a few hundred rows and the user flings the scroll thumb to the bottom, the cumulative offset math drifts by a handful of pixels per measured row, which compounds into a visible jump. Steps to reproduce, expected vs actual, and a screen recording are attached in the linked thread.
bugkanbangroupingtreetheming
high
#14 · Dark theme contrast on pinned cells
Affects only RTL locales. The pinned-right column overlaps the scrollbar gutter by exactly the scrollbar width, suggesting the offset compensation runs before layout settles.
p1regression
critical
#15 · Tree node lazy-load spinner stuck
Affects only RTL locales. The pinned-right column overlaps the scrollbar gutter by exactly the scrollbar width, suggesting the offset compensation runs before layout settles.
groupingvirtual-scrolla11yp2kanbanbug
low
#16 · Kanban card drop lands in wrong lane
Reproducible on the latest build; happens roughly one time in three and only after a hard refresh.
themingcustomervirtual-scrollexport
medium
#17 · Filter popup clipped inside dialog
A longer write-up: the regression appeared after the virtual-scroll refactor. When the dataset exceeds a few hundred rows and the user flings the scroll thumb to the bottom, the cumulative offset math drifts by a handful of pixels per measured row, which compounds into a visible jump. Steps to reproduce, expected vs actual, and a screen recording are attached in the linked thread.
regression
medium
#18 · Row drag ghost offset on zoom
A longer write-up: the regression appeared after the virtual-scroll refactor. When the dataset exceeds a few hundred rows and the user flings the scroll thumb to the bottom, the cumulative offset math drifts by a handful of pixels per measured row, which compounds into a visible jump. Steps to reproduce, expected vs actual, and a screen recording are attached in the linked thread.
p2themingcustomergroupingbug
high
#19 · Temporal diff misses nested edits
A longer write-up: the regression appeared after the virtual-scroll refactor. When the dataset exceeds a few hundred rows and the user flings the scroll thumb to the bottom, the cumulative offset math drifts by a handful of pixels per measured row, which compounds into a visible jump. Steps to reproduce, expected vs actual, and a screen recording are attached in the linked thread.
kanbanrtl
low
#20 · CSV import mangles unicode
Customer-reported. They have a 50k-row grid with grouping enabled and report that expanding a deep group near the top of the list causes the viewport to scroll unexpectedly — likely an anchoring issue when the expand panel measures taller than its estimate.
exporttemporalrtlgroupingp1p2
medium
#21 · Login fails on Safari
Short note.
a11yrtlp1
medium
#22 · Export to Excel truncates wide columns
Affects only RTL locales. The pinned-right column overlaps the scrollbar gutter by exactly the scrollbar width, suggesting the offset compensation runs before layout settles.
customer
low
#23 · Virtual scroll jumps on fast fling
Customer-reported. They have a 50k-row grid with grouping enabled and report that expanding a deep group near the top of the list causes the viewport to scroll unexpectedly — likely an anchoring issue when the expand panel measures taller than its estimate.
temporalbugperfthemingcustomer
high
#24 · Dark theme contrast on pinned cells
Affects only RTL locales. The pinned-right column overlaps the scrollbar gutter by exactly the scrollbar width, suggesting the offset compensation runs before layout settles.
virtual-scrolla11y
medium
#25 · Tree node lazy-load spinner stuck
Reproducible on the latest build; happens roughly one time in three and only after a hard refresh.
rtlneeds-reproregressiontemporalbugexport
medium
All records loaded
400 / 400 records

Content-driven row height

By default every row is exactly rowHeight tall — uniform rows keep virtual scrolling cheap. Set autoRowHeight: true and each data row instead grows to fit its tallest cell: wrapped long text, a stack of tags, or any custom cellTemplate. rowHeight becomes the minimum and the estimate used for off-screen rows that haven't been measured yet.

How it works

Rows start at rowHeight and expand to their natural content height once they've been rendered. Off-screen rows keep using the estimate until they scroll into view. As measurements land, the grid keeps the top-visible row anchored so the content under your cursor stays put — the scrollbar thumb may shift slightly, but the viewport doesn't jump.

Making content wrap

Auto height only does something when a cell is taller than rowHeight. The default cell renders on a single line (white-space: nowrap), so supply a cellTemplate with wrapping CSS — e.g. white-space: normal for text, or a flex-wrap container for tag stacks.

Notes & limits

Setting trackBy is strongly recommended: without a stable row identity, rows that scroll off-screen and back may briefly show the wrong height. Group and tree rows always stay at rowHeight. Not supported with scrollMode: 'virtual-paging' — the page-fetch math assumes uniform rows (the grid logs a warning if you combine the two). Distinct from height: 'auto', which grows the whole grid container with no inner scroll.

autoRowHeight cannot be combined with scrollMode: 'virtual-paging' — page-boundary math assumes uniform rows (the grid logs a warning). Group and tree rows always stay at rowHeight.

Auto row height options

PropertyTypeDefaultDescription
config.autoRowHeightbooleanfalseEach data row grows to fit its tallest cell once rendered; the top-visible row stays anchored while measurements land.
config.rowHeightnumber48With auto height on, becomes the minimum and the estimate for unmeasured off-screen rows.
config.trackBystring | (row) => unknown—Strongly recommended — stable identity prevents wrong cached heights when rows scroll back into view.
column.cellTemplateTemplateRef<CellContext<T>>—Required for wrapping content — the default cell is single-line (white-space: nowrap).