Extends TableData, but only contains data in the current viewport. The only API change from TableData is that
ViewportData also contains the offset to this data, so that the actual row number may be determined.
For viewport subscriptions, it is not necessary to read with the key, only with the position.
Do not assume that the first row in `rows` is the first visible row, because extra rows may be provided for easier
scrolling without going to the server.
Extends TableData, but only contains data in the current viewport. The only API change from TableData is that ViewportData also contains the offset to this data, so that the actual row number may be determined.
For viewport subscriptions, it is not necessary to read with the key, only with the position.
Do not assume that the first row in `rows` is the first visible row, because extra rows may be provided for easier scrolling without going to the server.