Blocks are defined as a collection of inputs, but the render info determines how these inputs get broken up into rows and spacer rows.
For example, when a block is set to inline inputs, the block is made of fewer rows than when it is set to external inputs. It has the same number of inputs but a different number of rows!
Row
A Row
is a horizontal collection of non-overlapping elements
and element spacers.
The bounds of a row are determined by the bounds of the elements and spacers that belong to that row, so that all of the elements are contained.
Row spacer
A RowSpacer
is an empty vertical space that goes between two
rows.
The bounds of the row spacers are determined by the render info itself. After measuring all of the rows of the block, the render info inserts spaces of its chosen size between rows.