Distance from the cross edge (right for vertical, bottom for horizontal) to the grip center (px).
Content-box height in px (the portal target's size). The horizontal grip's cross edge sits at this minus crossInset, and it is the origin for viewportHeight.
Positioned element the grips portal into — the grid viewport box (excludes the scrollbar
gutters). Must be position: relative so the grips position in its content-relative coords.
Reserve at the right for the horizontal grip (px) so its right-most position clears the vertical
grip's virtual corner. 0 when there is no vertical grip to avoid.
Reserve at the bottom for the vertical grip (px) so its lowest position clears the horizontal
grip's virtual corner. 0 when there is no horizontal grip to avoid.
The scrollable viewport (cell-area) height in px — <= height. The vertical grip travels
across this, offset from the top by height - viewportHeight (the column-header gutter).
The scrollable viewport (cell-area) width in px — <= width. The horizontal grip travels
across this, offset from the left by width - viewportWidth (the row-header gutter), so it rides
inside the visible cell area rather than the full grid box.
Content-box width in px (the portal target's size). The vertical grip's cross edge sits at this minus crossInset, and it is the origin for viewportWidth.
Geometry the TouchThumbHandle grips are drawn into. Published by the ScrollPane (the only component that knows the full viewport + both gutters) and consumed by the grips deep inside the scrollbar render chain.
Remarks
The grip's position along its axis still comes from its scrollbar's thumb (a virtual scrollbar maps scroll → thumb non-linearly, so only the scrollbar knows where the thumb sits). This frame supplies only the coordinate box: which element to draw into, the viewport size, the reserved corner, and the inset from the edge.