@tanstack/table-core 9.0.0-alpha.47 → 9.0.0-alpha.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/README.md +10 -0
  2. package/dist/core/cells/coreCellsFeature.utils.cjs +11 -8
  3. package/dist/core/cells/coreCellsFeature.utils.cjs.map +1 -1
  4. package/dist/core/cells/coreCellsFeature.utils.d.cts +11 -8
  5. package/dist/core/cells/coreCellsFeature.utils.d.ts +11 -8
  6. package/dist/core/cells/coreCellsFeature.utils.js +11 -8
  7. package/dist/core/cells/coreCellsFeature.utils.js.map +1 -1
  8. package/dist/core/columns/coreColumnsFeature.types.d.cts +7 -6
  9. package/dist/core/columns/coreColumnsFeature.types.d.ts +7 -6
  10. package/dist/core/columns/coreColumnsFeature.utils.cjs +37 -27
  11. package/dist/core/columns/coreColumnsFeature.utils.cjs.map +1 -1
  12. package/dist/core/columns/coreColumnsFeature.utils.d.cts +37 -27
  13. package/dist/core/columns/coreColumnsFeature.utils.d.ts +37 -27
  14. package/dist/core/columns/coreColumnsFeature.utils.js +37 -27
  15. package/dist/core/columns/coreColumnsFeature.utils.js.map +1 -1
  16. package/dist/core/headers/coreHeadersFeature.types.d.cts +6 -4
  17. package/dist/core/headers/coreHeadersFeature.types.d.ts +6 -4
  18. package/dist/core/headers/coreHeadersFeature.utils.cjs +23 -18
  19. package/dist/core/headers/coreHeadersFeature.utils.cjs.map +1 -1
  20. package/dist/core/headers/coreHeadersFeature.utils.d.cts +23 -18
  21. package/dist/core/headers/coreHeadersFeature.utils.d.ts +23 -18
  22. package/dist/core/headers/coreHeadersFeature.utils.js +23 -18
  23. package/dist/core/headers/coreHeadersFeature.utils.js.map +1 -1
  24. package/dist/core/row-models/coreRowModelsFeature.utils.cjs +48 -36
  25. package/dist/core/row-models/coreRowModelsFeature.utils.cjs.map +1 -1
  26. package/dist/core/row-models/coreRowModelsFeature.utils.d.cts +48 -36
  27. package/dist/core/row-models/coreRowModelsFeature.utils.d.ts +48 -36
  28. package/dist/core/row-models/coreRowModelsFeature.utils.js +48 -36
  29. package/dist/core/row-models/coreRowModelsFeature.utils.js.map +1 -1
  30. package/dist/core/rows/coreRowsFeature.types.d.cts +4 -4
  31. package/dist/core/rows/coreRowsFeature.types.d.ts +4 -4
  32. package/dist/core/rows/coreRowsFeature.utils.cjs +34 -28
  33. package/dist/core/rows/coreRowsFeature.utils.cjs.map +1 -1
  34. package/dist/core/rows/coreRowsFeature.utils.d.cts +34 -28
  35. package/dist/core/rows/coreRowsFeature.utils.d.ts +34 -28
  36. package/dist/core/rows/coreRowsFeature.utils.js +34 -28
  37. package/dist/core/rows/coreRowsFeature.utils.js.map +1 -1
  38. package/dist/core/table/coreTablesFeature.types.d.cts +6 -2
  39. package/dist/core/table/coreTablesFeature.types.d.ts +6 -2
  40. package/dist/core/table/coreTablesFeature.utils.cjs +2 -2
  41. package/dist/core/table/coreTablesFeature.utils.cjs.map +1 -1
  42. package/dist/core/table/coreTablesFeature.utils.d.cts +2 -2
  43. package/dist/core/table/coreTablesFeature.utils.d.ts +2 -2
  44. package/dist/core/table/coreTablesFeature.utils.js +2 -2
  45. package/dist/core/table/coreTablesFeature.utils.js.map +1 -1
  46. package/dist/features/column-faceting/columnFacetingFeature.types.d.cts +16 -10
  47. package/dist/features/column-faceting/columnFacetingFeature.types.d.ts +16 -10
  48. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs +26 -18
  49. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs.map +1 -1
  50. package/dist/features/column-faceting/columnFacetingFeature.utils.d.cts +26 -18
  51. package/dist/features/column-faceting/columnFacetingFeature.utils.d.ts +26 -18
  52. package/dist/features/column-faceting/columnFacetingFeature.utils.js +26 -18
  53. package/dist/features/column-faceting/columnFacetingFeature.utils.js.map +1 -1
  54. package/dist/features/column-filtering/columnFilteringFeature.types.d.cts +21 -11
  55. package/dist/features/column-filtering/columnFilteringFeature.types.d.ts +21 -11
  56. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs +39 -28
  57. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs.map +1 -1
  58. package/dist/features/column-filtering/columnFilteringFeature.utils.d.cts +39 -28
  59. package/dist/features/column-filtering/columnFilteringFeature.utils.d.ts +39 -28
  60. package/dist/features/column-filtering/columnFilteringFeature.utils.js +39 -28
  61. package/dist/features/column-filtering/columnFilteringFeature.utils.js.map +1 -1
  62. package/dist/features/column-grouping/columnGroupingFeature.types.d.cts +18 -14
  63. package/dist/features/column-grouping/columnGroupingFeature.types.d.ts +18 -14
  64. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs +55 -43
  65. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs.map +1 -1
  66. package/dist/features/column-grouping/columnGroupingFeature.utils.d.cts +55 -43
  67. package/dist/features/column-grouping/columnGroupingFeature.utils.d.ts +55 -43
  68. package/dist/features/column-grouping/columnGroupingFeature.utils.js +55 -43
  69. package/dist/features/column-grouping/columnGroupingFeature.utils.js.map +1 -1
  70. package/dist/features/column-ordering/columnOrderingFeature.types.d.cts +14 -5
  71. package/dist/features/column-ordering/columnOrderingFeature.types.d.ts +14 -5
  72. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs +30 -23
  73. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs.map +1 -1
  74. package/dist/features/column-ordering/columnOrderingFeature.utils.d.cts +30 -23
  75. package/dist/features/column-ordering/columnOrderingFeature.utils.d.ts +30 -23
  76. package/dist/features/column-ordering/columnOrderingFeature.utils.js +30 -23
  77. package/dist/features/column-ordering/columnOrderingFeature.utils.js.map +1 -1
  78. package/dist/features/column-pinning/columnPinningFeature.types.d.cts +43 -31
  79. package/dist/features/column-pinning/columnPinningFeature.types.d.ts +43 -31
  80. package/dist/features/column-pinning/columnPinningFeature.utils.cjs +111 -91
  81. package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
  82. package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +111 -91
  83. package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +111 -91
  84. package/dist/features/column-pinning/columnPinningFeature.utils.js +111 -91
  85. package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
  86. package/dist/features/column-resizing/columnResizingFeature.types.d.cts +9 -9
  87. package/dist/features/column-resizing/columnResizingFeature.types.d.ts +9 -9
  88. package/dist/features/column-resizing/columnResizingFeature.utils.cjs +29 -20
  89. package/dist/features/column-resizing/columnResizingFeature.utils.cjs.map +1 -1
  90. package/dist/features/column-resizing/columnResizingFeature.utils.d.cts +28 -19
  91. package/dist/features/column-resizing/columnResizingFeature.utils.d.ts +28 -19
  92. package/dist/features/column-resizing/columnResizingFeature.utils.js +29 -20
  93. package/dist/features/column-resizing/columnResizingFeature.utils.js.map +1 -1
  94. package/dist/features/column-sizing/columnSizingFeature.types.d.cts +19 -12
  95. package/dist/features/column-sizing/columnSizingFeature.types.d.ts +19 -12
  96. package/dist/features/column-sizing/columnSizingFeature.utils.cjs +52 -41
  97. package/dist/features/column-sizing/columnSizingFeature.utils.cjs.map +1 -1
  98. package/dist/features/column-sizing/columnSizingFeature.utils.d.cts +52 -41
  99. package/dist/features/column-sizing/columnSizingFeature.utils.d.ts +52 -41
  100. package/dist/features/column-sizing/columnSizingFeature.utils.js +52 -41
  101. package/dist/features/column-sizing/columnSizingFeature.utils.js.map +1 -1
  102. package/dist/features/column-visibility/columnVisibilityFeature.types.d.cts +16 -13
  103. package/dist/features/column-visibility/columnVisibilityFeature.types.d.ts +16 -13
  104. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +54 -42
  105. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
  106. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.cts +54 -42
  107. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.ts +54 -42
  108. package/dist/features/column-visibility/columnVisibilityFeature.utils.js +54 -42
  109. package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
  110. package/dist/features/global-filtering/globalFilteringFeature.types.d.cts +10 -5
  111. package/dist/features/global-filtering/globalFilteringFeature.types.d.ts +10 -5
  112. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs +20 -14
  113. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs.map +1 -1
  114. package/dist/features/global-filtering/globalFilteringFeature.utils.d.cts +20 -14
  115. package/dist/features/global-filtering/globalFilteringFeature.utils.d.ts +20 -14
  116. package/dist/features/global-filtering/globalFilteringFeature.utils.js +20 -14
  117. package/dist/features/global-filtering/globalFilteringFeature.utils.js.map +1 -1
  118. package/dist/features/row-expanding/rowExpandingFeature.types.d.cts +16 -15
  119. package/dist/features/row-expanding/rowExpandingFeature.types.d.ts +16 -15
  120. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs +56 -41
  121. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs.map +1 -1
  122. package/dist/features/row-expanding/rowExpandingFeature.utils.d.cts +56 -41
  123. package/dist/features/row-expanding/rowExpandingFeature.utils.d.ts +56 -41
  124. package/dist/features/row-expanding/rowExpandingFeature.utils.js +56 -41
  125. package/dist/features/row-expanding/rowExpandingFeature.utils.js.map +1 -1
  126. package/dist/features/row-pagination/rowPaginationFeature.types.d.cts +19 -12
  127. package/dist/features/row-pagination/rowPaginationFeature.types.d.ts +19 -12
  128. package/dist/features/row-pagination/rowPaginationFeature.utils.cjs +49 -32
  129. package/dist/features/row-pagination/rowPaginationFeature.utils.cjs.map +1 -1
  130. package/dist/features/row-pagination/rowPaginationFeature.utils.d.cts +49 -32
  131. package/dist/features/row-pagination/rowPaginationFeature.utils.d.ts +49 -32
  132. package/dist/features/row-pagination/rowPaginationFeature.utils.js +49 -32
  133. package/dist/features/row-pagination/rowPaginationFeature.utils.js.map +1 -1
  134. package/dist/features/row-pinning/rowPinningFeature.types.d.cts +12 -8
  135. package/dist/features/row-pinning/rowPinningFeature.types.d.ts +12 -8
  136. package/dist/features/row-pinning/rowPinningFeature.utils.cjs +39 -29
  137. package/dist/features/row-pinning/rowPinningFeature.utils.cjs.map +1 -1
  138. package/dist/features/row-pinning/rowPinningFeature.utils.d.cts +39 -29
  139. package/dist/features/row-pinning/rowPinningFeature.utils.d.ts +39 -29
  140. package/dist/features/row-pinning/rowPinningFeature.utils.js +39 -29
  141. package/dist/features/row-pinning/rowPinningFeature.utils.js.map +1 -1
  142. package/dist/features/row-selection/rowSelectionFeature.types.d.cts +30 -24
  143. package/dist/features/row-selection/rowSelectionFeature.types.d.ts +30 -24
  144. package/dist/features/row-selection/rowSelectionFeature.utils.cjs +89 -69
  145. package/dist/features/row-selection/rowSelectionFeature.utils.cjs.map +1 -1
  146. package/dist/features/row-selection/rowSelectionFeature.utils.d.cts +89 -69
  147. package/dist/features/row-selection/rowSelectionFeature.utils.d.ts +89 -69
  148. package/dist/features/row-selection/rowSelectionFeature.utils.js +89 -69
  149. package/dist/features/row-selection/rowSelectionFeature.utils.js.map +1 -1
  150. package/dist/features/row-sorting/rowSortingFeature.types.d.cts +10 -8
  151. package/dist/features/row-sorting/rowSortingFeature.types.d.ts +10 -8
  152. package/dist/features/row-sorting/rowSortingFeature.utils.cjs +62 -45
  153. package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
  154. package/dist/features/row-sorting/rowSortingFeature.utils.d.cts +61 -44
  155. package/dist/features/row-sorting/rowSortingFeature.utils.d.ts +61 -44
  156. package/dist/features/row-sorting/rowSortingFeature.utils.js +62 -45
  157. package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
  158. package/dist/fns/aggregationFns.cjs +33 -9
  159. package/dist/fns/aggregationFns.cjs.map +1 -1
  160. package/dist/fns/aggregationFns.d.cts +33 -9
  161. package/dist/fns/aggregationFns.d.ts +33 -9
  162. package/dist/fns/aggregationFns.js +33 -9
  163. package/dist/fns/aggregationFns.js.map +1 -1
  164. package/dist/fns/filterFns.cjs +48 -17
  165. package/dist/fns/filterFns.cjs.map +1 -1
  166. package/dist/fns/filterFns.d.cts +42 -15
  167. package/dist/fns/filterFns.d.ts +42 -15
  168. package/dist/fns/filterFns.js +48 -17
  169. package/dist/fns/filterFns.js.map +1 -1
  170. package/dist/helpers/columnHelper.cjs +9 -4
  171. package/dist/helpers/columnHelper.cjs.map +1 -1
  172. package/dist/helpers/columnHelper.d.cts +9 -4
  173. package/dist/helpers/columnHelper.d.ts +9 -4
  174. package/dist/helpers/columnHelper.js +9 -4
  175. package/dist/helpers/columnHelper.js.map +1 -1
  176. package/dist/helpers/tableOptions.cjs.map +1 -1
  177. package/dist/helpers/tableOptions.d.cts +12 -9
  178. package/dist/helpers/tableOptions.d.ts +12 -9
  179. package/dist/helpers/tableOptions.js.map +1 -1
  180. package/dist/types/ColumnDef.d.cts +38 -0
  181. package/dist/types/ColumnDef.d.ts +38 -0
  182. package/dist/types/TableOptions.d.cts +15 -0
  183. package/dist/types/TableOptions.d.ts +15 -0
  184. package/dist/types/TableState.d.cts +12 -0
  185. package/dist/types/TableState.d.ts +12 -0
  186. package/package.json +5 -3
  187. package/skills/column-definitions/SKILL.md +333 -0
  188. package/skills/column-layout/SKILL.md +328 -0
  189. package/skills/column-layout/references/subsystems.md +220 -0
  190. package/skills/customizing-feature-behavior/SKILL.md +416 -0
  191. package/skills/filtering/SKILL.md +357 -0
  192. package/skills/filtering/references/faceting-and-fuzzy.md +191 -0
  193. package/skills/grouping/SKILL.md +448 -0
  194. package/skills/migrate-v8-to-v9/SKILL.md +495 -0
  195. package/skills/pagination/SKILL.md +385 -0
  196. package/skills/row-expanding/SKILL.md +348 -0
  197. package/skills/row-pinning/SKILL.md +269 -0
  198. package/skills/row-selection/SKILL.md +391 -0
  199. package/skills/setup/SKILL.md +400 -0
  200. package/skills/sorting/SKILL.md +344 -0
  201. package/skills/state-management/SKILL.md +388 -0
  202. package/src/core/cells/coreCellsFeature.utils.ts +11 -8
  203. package/src/core/columns/coreColumnsFeature.types.ts +7 -6
  204. package/src/core/columns/coreColumnsFeature.utils.ts +37 -27
  205. package/src/core/headers/coreHeadersFeature.types.ts +6 -4
  206. package/src/core/headers/coreHeadersFeature.utils.ts +23 -18
  207. package/src/core/row-models/coreRowModelsFeature.utils.ts +48 -36
  208. package/src/core/rows/coreRowsFeature.types.ts +4 -4
  209. package/src/core/rows/coreRowsFeature.utils.ts +34 -28
  210. package/src/core/table/coreTablesFeature.types.ts +6 -2
  211. package/src/core/table/coreTablesFeature.utils.ts +2 -2
  212. package/src/features/column-faceting/columnFacetingFeature.types.ts +16 -10
  213. package/src/features/column-faceting/columnFacetingFeature.utils.ts +26 -18
  214. package/src/features/column-filtering/columnFilteringFeature.types.ts +21 -11
  215. package/src/features/column-filtering/columnFilteringFeature.utils.ts +39 -28
  216. package/src/features/column-grouping/columnGroupingFeature.types.ts +18 -14
  217. package/src/features/column-grouping/columnGroupingFeature.utils.ts +55 -43
  218. package/src/features/column-ordering/columnOrderingFeature.types.ts +14 -5
  219. package/src/features/column-ordering/columnOrderingFeature.utils.ts +30 -23
  220. package/src/features/column-pinning/columnPinningFeature.types.ts +43 -31
  221. package/src/features/column-pinning/columnPinningFeature.utils.ts +111 -91
  222. package/src/features/column-resizing/columnResizingFeature.types.ts +9 -9
  223. package/src/features/column-resizing/columnResizingFeature.utils.ts +29 -21
  224. package/src/features/column-sizing/columnSizingFeature.types.ts +19 -12
  225. package/src/features/column-sizing/columnSizingFeature.utils.ts +52 -41
  226. package/src/features/column-visibility/columnVisibilityFeature.types.ts +16 -13
  227. package/src/features/column-visibility/columnVisibilityFeature.utils.ts +54 -42
  228. package/src/features/global-filtering/globalFilteringFeature.types.ts +10 -5
  229. package/src/features/global-filtering/globalFilteringFeature.utils.ts +20 -14
  230. package/src/features/row-expanding/rowExpandingFeature.types.ts +16 -15
  231. package/src/features/row-expanding/rowExpandingFeature.utils.ts +56 -41
  232. package/src/features/row-pagination/rowPaginationFeature.types.ts +19 -12
  233. package/src/features/row-pagination/rowPaginationFeature.utils.ts +49 -32
  234. package/src/features/row-pinning/rowPinningFeature.types.ts +12 -8
  235. package/src/features/row-pinning/rowPinningFeature.utils.ts +39 -29
  236. package/src/features/row-selection/rowSelectionFeature.types.ts +30 -24
  237. package/src/features/row-selection/rowSelectionFeature.utils.ts +89 -69
  238. package/src/features/row-sorting/rowSortingFeature.types.ts +10 -8
  239. package/src/features/row-sorting/rowSortingFeature.utils.ts +62 -45
  240. package/src/fns/aggregationFns.ts +33 -9
  241. package/src/fns/filterFns.ts +48 -17
  242. package/src/helpers/columnHelper.ts +9 -4
  243. package/src/helpers/tableOptions.ts +12 -9
  244. package/src/types/ColumnDef.ts +38 -0
  245. package/src/types/TableOptions.ts +15 -0
  246. package/src/types/TableState.ts +12 -0
@@ -0,0 +1,385 @@
1
+ ---
2
+ name: pagination
3
+ description: >
4
+ Paginate rows in TanStack Table v9 with the `paginatedRowModel` stage. Covers
5
+ `rowPaginationFeature` + `createPaginatedRowModel()`, `state.pagination`
6
+ ({ pageIndex, pageSize }), `onPaginationChange`, `manualPagination`,
7
+ `rowCount` and `pageCount` for server-side, `autoResetPageIndex`,
8
+ `paginateExpandedRows`, navigation APIs (`nextPage`/`previousPage`/`firstPage`/
9
+ `lastPage`/`setPageIndex`/`setPageSize`), `getCanNextPage` / `getCanPreviousPage`,
10
+ `getPageCount` / `getRowCount` / `getPageOptions`, and `getPrePaginatedRowModel`
11
+ for "total filtered" counts.
12
+ type: core
13
+ library: tanstack-table
14
+ library_version: '9.0.0-alpha.48'
15
+ requires:
16
+ - state-management
17
+ sources:
18
+ - TanStack/table:docs/guide/pagination.md
19
+ - TanStack/table:packages/table-core/src/features/row-pagination/rowPaginationFeature.utils.ts
20
+ - TanStack/table:packages/table-core/src/features/row-pagination/createPaginatedRowModel.ts
21
+ - TanStack/table:examples/react/pagination/src/main.tsx
22
+ ---
23
+
24
+ This skill builds on `tanstack-table/state-management`. Read it first for the atom model and `manual*` mode.
25
+
26
+ ## Setup
27
+
28
+ ```ts
29
+ import {
30
+ tableFeatures,
31
+ rowPaginationFeature,
32
+ createPaginatedRowModel,
33
+ constructTable,
34
+ } from '@tanstack/table-core'
35
+ import type { PaginationState } from '@tanstack/table-core'
36
+
37
+ const _features = tableFeatures({ rowPaginationFeature })
38
+
39
+ const table = constructTable({
40
+ _features,
41
+ _rowModels: {
42
+ paginatedRowModel: createPaginatedRowModel(),
43
+ },
44
+ columns,
45
+ data,
46
+ initialState: {
47
+ pagination: { pageIndex: 0, pageSize: 10 } satisfies PaginationState,
48
+ },
49
+ })
50
+
51
+ table.nextPage()
52
+ table.setPageIndex(5)
53
+ table.setPageSize(25)
54
+ table.getCanNextPage()
55
+ table.getPageCount()
56
+ table.getRowCount()
57
+ ```
58
+
59
+ ## Core Patterns
60
+
61
+ ### Pagination toolbar
62
+
63
+ ```tsx
64
+ // From examples/react/pagination/src/main.tsx
65
+ <div>
66
+ <button
67
+ onClick={() => table.firstPage()}
68
+ disabled={!table.getCanPreviousPage()}
69
+ >
70
+ {'<<'}
71
+ </button>
72
+ <button
73
+ onClick={() => table.previousPage()}
74
+ disabled={!table.getCanPreviousPage()}
75
+ >
76
+ {'<'}
77
+ </button>
78
+ <button onClick={() => table.nextPage()} disabled={!table.getCanNextPage()}>
79
+ {'>'}
80
+ </button>
81
+ <button onClick={() => table.lastPage()} disabled={!table.getCanNextPage()}>
82
+ {'>>'}
83
+ </button>
84
+
85
+ <span>
86
+ Page {table.store.state.pagination.pageIndex + 1} of{' '}
87
+ {table.getPageCount().toLocaleString()}
88
+ </span>
89
+
90
+ <span>
91
+ | Go to page:
92
+ <input
93
+ type="number"
94
+ defaultValue={table.store.state.pagination.pageIndex + 1}
95
+ onChange={(e) => {
96
+ const page = e.target.value ? Number(e.target.value) - 1 : 0
97
+ table.setPageIndex(page)
98
+ }}
99
+ />
100
+ </span>
101
+
102
+ <select
103
+ value={table.store.state.pagination.pageSize}
104
+ onChange={(e) => table.setPageSize(Number(e.target.value))}
105
+ >
106
+ {[10, 20, 30, 40, 50].map((size) => (
107
+ <option key={size} value={size}>
108
+ Show {size}
109
+ </option>
110
+ ))}
111
+ </select>
112
+ </div>
113
+ ```
114
+
115
+ ### Server-side pagination
116
+
117
+ ```tsx
118
+ const [pagination, setPagination] = useState<PaginationState>({
119
+ pageIndex: 0,
120
+ pageSize: 10,
121
+ })
122
+ const { data: dataQuery } = useQuery({
123
+ queryKey: ['rows', pagination],
124
+ queryFn: () => fetchPage(pagination.pageIndex, pagination.pageSize),
125
+ })
126
+
127
+ const table = useTable({
128
+ _features: tableFeatures({ rowPaginationFeature }),
129
+ _rowModels: {}, // no paginatedRowModel — server paginates
130
+ data: dataQuery?.rows ?? EMPTY,
131
+ columns,
132
+ manualPagination: true,
133
+ rowCount: dataQuery?.rowCount, // server-provided total
134
+ // OR: pageCount: dataQuery.pageCount
135
+ // OR: pageCount: -1 if unknown (next button stays enabled)
136
+ state: { pagination },
137
+ onPaginationChange: setPagination,
138
+ })
139
+ ```
140
+
141
+ ### Disable auto page reset when filters change
142
+
143
+ ```ts
144
+ const table = constructTable({
145
+ _features: tableFeatures({ rowPaginationFeature, columnFilteringFeature }),
146
+ _rowModels: {
147
+ paginatedRowModel: createPaginatedRowModel(),
148
+ filteredRowModel: createFilteredRowModel(filterFns),
149
+ },
150
+ columns,
151
+ data,
152
+ autoResetPageIndex: false, // keep current page while user types in a filter
153
+ })
154
+ ```
155
+
156
+ `autoResetPageIndex` defaults to `!manualPagination` — true client-side, false manual.
157
+
158
+ ### "Total filtered rows" display while paginated
159
+
160
+ ```ts
161
+ const totalFiltered = table.getPrePaginatedRowModel().rows.length
162
+ const onCurrentPage = table.getRowModel().rows.length
163
+ ```
164
+
165
+ `getPrePaginatedRowModel` is the row model AFTER filtering/sorting/grouping/expansion but BEFORE the page slice.
166
+
167
+ ## Common Mistakes
168
+
169
+ ### [HIGH] Setting `manualPagination: true` without supplying `rowCount` or `pageCount`
170
+
171
+ Wrong:
172
+
173
+ ```tsx
174
+ // getPageCount() returns 1, next/prev buttons are disabled
175
+ const table = useTable({
176
+ _features: tableFeatures({ rowPaginationFeature }),
177
+ _rowModels: {},
178
+ data, // only 10 rows for the current page
179
+ columns,
180
+ manualPagination: true,
181
+ state: { pagination },
182
+ onPaginationChange: setPagination,
183
+ // missing: rowCount or pageCount
184
+ })
185
+ ```
186
+
187
+ Correct:
188
+
189
+ ```tsx
190
+ const table = useTable({
191
+ _features: tableFeatures({ rowPaginationFeature }),
192
+ _rowModels: {},
193
+ data: dataQuery.rows,
194
+ columns,
195
+ manualPagination: true,
196
+ rowCount: dataQuery.rowCount, // server tells the table the total
197
+ // OR: pageCount: dataQuery.pageCount
198
+ // OR: pageCount: -1 if unknown
199
+ state: { pagination },
200
+ onPaginationChange: setPagination,
201
+ })
202
+ ```
203
+
204
+ `getRowCount()` defaults to `getPrePaginatedRowModel().rows.length` — which in manual mode is only the current page. Without `rowCount`/`pageCount`, the table thinks there's one page total.
205
+
206
+ Source: packages/table-core/src/features/row-pagination/rowPaginationFeature.utils.ts
207
+
208
+ ### [MEDIUM] Putting `pagination` in BOTH `state` and `initialState`
209
+
210
+ Wrong:
211
+
212
+ ```tsx
213
+ const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 })
214
+ const table = useTable({
215
+ initialState: { pagination: { pageSize: 25 } }, // IGNORED
216
+ state: { pagination }, // wins (pageSize 10)
217
+ onPaginationChange: setPagination,
218
+ })
219
+ ```
220
+
221
+ Correct:
222
+
223
+ ```tsx
224
+ const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 25 })
225
+ const table = useTable({
226
+ _features: tableFeatures({ rowPaginationFeature }),
227
+ _rowModels: { paginatedRowModel: createPaginatedRowModel() },
228
+ columns,
229
+ data,
230
+ state: { pagination },
231
+ onPaginationChange: setPagination,
232
+ })
233
+ ```
234
+
235
+ `state` always overrides `initialState`. Seed the controlled state in `useState` or use `initialState` alone — never both.
236
+
237
+ Source: docs/guide/pagination.md
238
+
239
+ ### [MEDIUM] `autoResetPageIndex: false` without manual clamping leaves empty pages
240
+
241
+ Wrong:
242
+
243
+ ```ts
244
+ const table = useTable({
245
+ _features,
246
+ _rowModels: {
247
+ paginatedRowModel: createPaginatedRowModel(),
248
+ filteredRowModel: createFilteredRowModel(filterFns),
249
+ },
250
+ columns,
251
+ data,
252
+ autoResetPageIndex: false, // user on page 5, then filters down to 2 pages
253
+ // → page 5 is empty. No automatic clamp.
254
+ })
255
+ ```
256
+
257
+ Correct:
258
+
259
+ ```ts
260
+ // Either leave autoResetPageIndex default (true) for client-side,
261
+ // or clamp manually after a data-altering effect:
262
+ useEffect(() => {
263
+ const lastPage = Math.max(0, table.getPageCount() - 1)
264
+ if (table.atoms.pagination.get().pageIndex > lastPage) {
265
+ table.setPageIndex(lastPage)
266
+ }
267
+ }, [data, columnFilters])
268
+ ```
269
+
270
+ `setPageIndex` only clamps against `options.pageCount` (max safe int when unset). It doesn't clamp against the current row model.
271
+
272
+ Source: packages/table-core/src/features/row-pagination/rowPaginationFeature.utils.ts
273
+
274
+ ### [LOW] Expecting `getRowCount()` to equal `data.length` under filtering/grouping/expansion
275
+
276
+ Wrong:
277
+
278
+ ```ts
279
+ console.log(table.getRowCount()) // count after all transforms
280
+ console.log(data.length) // raw input count
281
+ // These diverge under filtering, grouping, or tree vs flat input.
282
+ ```
283
+
284
+ Correct:
285
+
286
+ ```ts
287
+ table.getCoreRowModel().rows.length // raw row count (flat)
288
+ table.getPreFilteredRowModel().rows.length // before filtering
289
+ table.getFilteredRowModel().rows.length // after filtering
290
+ table.getRowCount() // pre-paginated count (or `rowCount` option in manual mode)
291
+ table.getRowModel().rows.length // current page only
292
+ ```
293
+
294
+ `getRowCount` returns `options.rowCount ?? getPrePaginatedRowModel().rows.length`. Pick the model that matches the question.
295
+
296
+ Source: docs/guide/row-models.md
297
+
298
+ ### [HIGH] `getToggleAllRowsSelectedHandler` only selects current page under server pagination
299
+
300
+ Wrong:
301
+
302
+ ```tsx
303
+ // Header checkbox only affects current page in manualPagination mode
304
+ <input
305
+ checked={table.getIsAllRowsSelected()}
306
+ onChange={table.getToggleAllRowsSelectedHandler()}
307
+ />
308
+ ```
309
+
310
+ Correct:
311
+
312
+ ```tsx
313
+ // Use page-aware APIs with server pagination
314
+ <input
315
+ checked={table.getIsAllPageRowsSelected()}
316
+ onChange={table.getToggleAllPageRowsSelectedHandler()}
317
+ />
318
+ // For "select all server-side rows", track a separate "all rows mode"
319
+ // boolean alongside the row map.
320
+ ```
321
+
322
+ The table only knows about the current page's rows under `manualPagination`. "Select all" can never mean "every row on the server" without an explicit out-of-band selection mode.
323
+
324
+ Source: https://github.com/TanStack/table/issues/4781
325
+
326
+ ### [MEDIUM] `autoResetPageIndex` resets to `initialState.pageIndex` (not 0)
327
+
328
+ Wrong:
329
+
330
+ ```ts
331
+ // Filtering data resets to the deep-linked pageIndex, not 0
332
+ const table = useTable({
333
+ data,
334
+ columns,
335
+ initialState: { pagination: { pageIndex: 5, pageSize: 10 } },
336
+ autoResetPageIndex: true,
337
+ })
338
+ ```
339
+
340
+ Correct:
341
+
342
+ ```ts
343
+ useEffect(() => {
344
+ table.setPageIndex(0)
345
+ }, [columnFilters, globalFilter])
346
+ // Or: don't rely on autoResetPageIndex when deep-linking pageIndex
347
+ ```
348
+
349
+ `_autoResetPageIndex` calls `resetPageIndex()` without `true`, which restores to `initialState.pagination.pageIndex` — typically a URL deep-link page that's now invalid.
350
+
351
+ Source: https://github.com/TanStack/table/issues/6207
352
+
353
+ ### [CRITICAL] Reimplementing pagination math manually
354
+
355
+ Wrong:
356
+
357
+ ```ts
358
+ // Hand-rolled page slicing instead of using the API
359
+ const paginatedRows = useMemo(
360
+ () => allRows.slice(pageIndex * pageSize, (pageIndex + 1) * pageSize),
361
+ [allRows, pageIndex, pageSize],
362
+ )
363
+ ```
364
+
365
+ Correct:
366
+
367
+ ```ts
368
+ const table = useTable({
369
+ _features: tableFeatures({ rowPaginationFeature }),
370
+ _rowModels: { paginatedRowModel: createPaginatedRowModel() },
371
+ columns,
372
+ data,
373
+ })
374
+ // table.nextPage(), table.setPageIndex(...), table.getRowModel().rows
375
+ ```
376
+
377
+ The built-in APIs honor `autoResetPageIndex`, `paginateExpandedRows`, and reset interactions across other features.
378
+
379
+ Source: maintainer interview (Phase 4, 2026-05-17)
380
+
381
+ ## See also
382
+
383
+ - `tanstack-table/state-management` — `manualPagination` + `autoResetAll`
384
+ - `tanstack-table/row-expanding` — `paginateExpandedRows` interaction
385
+ - `tanstack-table/row-selection` — "select all" pitfalls under server pagination