Datatable

Simple in-memory table

Virtual scrolling — lazy windowed fetch

Set one fetch callback and the web component owns the whole loop: it loads page 1, derives the total from the response, and fetches each window only as its rows scroll into view. This list is the 1000 seeded orders from apps/api; scroll it and watch the fetch log — it never drains every page. No totalRecords prop, no event bridge.

Pages fetched: (0 so far)

Tree mode — expandable rows

The same single fetch callback, branching on req.parentId for roots vs. children. The WC paginates roots lazily and loads children on expand; selected row objects arrive on @selectionChange as detail.selectedRows.