The current page plus loading state and imperative helpers.
Remarks
Every request carries an AbortController and a sequence number, so a slow
response for an old sort or filter can never overwrite a newer one. The cache
is dropped wholesale when the query changes, so stale blocks are never mixed
with fresh ones.
Server-side paging with a small block cache.
DataGrid uses this internally; call it directly only when building a custom surface on top of the same data contract.