@tanstack/table-core 9.0.0-alpha.46 → 9.0.0-alpha.48

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 (339) hide show
  1. package/README.md +10 -0
  2. package/dist/core/cells/constructCell.cjs +4 -3
  3. package/dist/core/cells/constructCell.cjs.map +1 -1
  4. package/dist/core/cells/constructCell.js +4 -3
  5. package/dist/core/cells/constructCell.js.map +1 -1
  6. package/dist/core/cells/coreCellsFeature.utils.cjs +11 -8
  7. package/dist/core/cells/coreCellsFeature.utils.cjs.map +1 -1
  8. package/dist/core/cells/coreCellsFeature.utils.d.cts +11 -8
  9. package/dist/core/cells/coreCellsFeature.utils.d.ts +11 -8
  10. package/dist/core/cells/coreCellsFeature.utils.js +11 -8
  11. package/dist/core/cells/coreCellsFeature.utils.js.map +1 -1
  12. package/dist/core/columns/constructColumn.cjs +6 -4
  13. package/dist/core/columns/constructColumn.cjs.map +1 -1
  14. package/dist/core/columns/constructColumn.js +6 -4
  15. package/dist/core/columns/constructColumn.js.map +1 -1
  16. package/dist/core/columns/coreColumnsFeature.types.d.cts +7 -6
  17. package/dist/core/columns/coreColumnsFeature.types.d.ts +7 -6
  18. package/dist/core/columns/coreColumnsFeature.utils.cjs +47 -29
  19. package/dist/core/columns/coreColumnsFeature.utils.cjs.map +1 -1
  20. package/dist/core/columns/coreColumnsFeature.utils.d.cts +37 -27
  21. package/dist/core/columns/coreColumnsFeature.utils.d.ts +37 -27
  22. package/dist/core/columns/coreColumnsFeature.utils.js +47 -29
  23. package/dist/core/columns/coreColumnsFeature.utils.js.map +1 -1
  24. package/dist/core/headers/buildHeaderGroups.cjs +27 -19
  25. package/dist/core/headers/buildHeaderGroups.cjs.map +1 -1
  26. package/dist/core/headers/buildHeaderGroups.js +27 -19
  27. package/dist/core/headers/buildHeaderGroups.js.map +1 -1
  28. package/dist/core/headers/constructHeader.cjs +4 -3
  29. package/dist/core/headers/constructHeader.cjs.map +1 -1
  30. package/dist/core/headers/constructHeader.js +4 -3
  31. package/dist/core/headers/constructHeader.js.map +1 -1
  32. package/dist/core/headers/coreHeadersFeature.cjs +1 -6
  33. package/dist/core/headers/coreHeadersFeature.cjs.map +1 -1
  34. package/dist/core/headers/coreHeadersFeature.js +2 -7
  35. package/dist/core/headers/coreHeadersFeature.js.map +1 -1
  36. package/dist/core/headers/coreHeadersFeature.types.d.cts +6 -4
  37. package/dist/core/headers/coreHeadersFeature.types.d.ts +6 -4
  38. package/dist/core/headers/coreHeadersFeature.utils.cjs +43 -36
  39. package/dist/core/headers/coreHeadersFeature.utils.cjs.map +1 -1
  40. package/dist/core/headers/coreHeadersFeature.utils.d.cts +24 -19
  41. package/dist/core/headers/coreHeadersFeature.utils.d.ts +24 -19
  42. package/dist/core/headers/coreHeadersFeature.utils.js +44 -37
  43. package/dist/core/headers/coreHeadersFeature.utils.js.map +1 -1
  44. package/dist/core/reactivity/coreReactivityFeature.types.d.cts +4 -0
  45. package/dist/core/reactivity/coreReactivityFeature.types.d.ts +4 -0
  46. package/dist/core/row-models/coreRowModelsFeature.utils.cjs +48 -36
  47. package/dist/core/row-models/coreRowModelsFeature.utils.cjs.map +1 -1
  48. package/dist/core/row-models/coreRowModelsFeature.utils.d.cts +48 -36
  49. package/dist/core/row-models/coreRowModelsFeature.utils.d.ts +48 -36
  50. package/dist/core/row-models/coreRowModelsFeature.utils.js +48 -36
  51. package/dist/core/row-models/coreRowModelsFeature.utils.js.map +1 -1
  52. package/dist/core/rows/constructRow.cjs +8 -6
  53. package/dist/core/rows/constructRow.cjs.map +1 -1
  54. package/dist/core/rows/constructRow.js +8 -6
  55. package/dist/core/rows/constructRow.js.map +1 -1
  56. package/dist/core/rows/coreRowsFeature.types.d.cts +4 -4
  57. package/dist/core/rows/coreRowsFeature.types.d.ts +4 -4
  58. package/dist/core/rows/coreRowsFeature.utils.cjs +43 -32
  59. package/dist/core/rows/coreRowsFeature.utils.cjs.map +1 -1
  60. package/dist/core/rows/coreRowsFeature.utils.d.cts +34 -28
  61. package/dist/core/rows/coreRowsFeature.utils.d.ts +34 -28
  62. package/dist/core/rows/coreRowsFeature.utils.js +43 -32
  63. package/dist/core/rows/coreRowsFeature.utils.js.map +1 -1
  64. package/dist/core/table/constructTable.cjs +9 -5
  65. package/dist/core/table/constructTable.cjs.map +1 -1
  66. package/dist/core/table/constructTable.js +9 -5
  67. package/dist/core/table/constructTable.js.map +1 -1
  68. package/dist/core/table/coreTablesFeature.types.d.cts +6 -2
  69. package/dist/core/table/coreTablesFeature.types.d.ts +6 -2
  70. package/dist/core/table/coreTablesFeature.utils.cjs +7 -3
  71. package/dist/core/table/coreTablesFeature.utils.cjs.map +1 -1
  72. package/dist/core/table/coreTablesFeature.utils.d.cts +2 -2
  73. package/dist/core/table/coreTablesFeature.utils.d.ts +2 -2
  74. package/dist/core/table/coreTablesFeature.utils.js +7 -3
  75. package/dist/core/table/coreTablesFeature.utils.js.map +1 -1
  76. package/dist/features/column-faceting/columnFacetingFeature.types.d.cts +16 -10
  77. package/dist/features/column-faceting/columnFacetingFeature.types.d.ts +16 -10
  78. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs +26 -18
  79. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs.map +1 -1
  80. package/dist/features/column-faceting/columnFacetingFeature.utils.d.cts +26 -18
  81. package/dist/features/column-faceting/columnFacetingFeature.utils.d.ts +26 -18
  82. package/dist/features/column-faceting/columnFacetingFeature.utils.js +26 -18
  83. package/dist/features/column-faceting/columnFacetingFeature.utils.js.map +1 -1
  84. package/dist/features/column-faceting/createFacetedMinMaxValues.cjs +8 -5
  85. package/dist/features/column-faceting/createFacetedMinMaxValues.cjs.map +1 -1
  86. package/dist/features/column-faceting/createFacetedMinMaxValues.js +8 -5
  87. package/dist/features/column-faceting/createFacetedMinMaxValues.js.map +1 -1
  88. package/dist/features/column-faceting/createFacetedRowModel.cjs +8 -3
  89. package/dist/features/column-faceting/createFacetedRowModel.cjs.map +1 -1
  90. package/dist/features/column-faceting/createFacetedRowModel.js +8 -3
  91. package/dist/features/column-faceting/createFacetedRowModel.js.map +1 -1
  92. package/dist/features/column-faceting/createFacetedUniqueValues.cjs +7 -4
  93. package/dist/features/column-faceting/createFacetedUniqueValues.cjs.map +1 -1
  94. package/dist/features/column-faceting/createFacetedUniqueValues.js +7 -4
  95. package/dist/features/column-faceting/createFacetedUniqueValues.js.map +1 -1
  96. package/dist/features/column-filtering/columnFilteringFeature.types.d.cts +21 -11
  97. package/dist/features/column-filtering/columnFilteringFeature.types.d.ts +21 -11
  98. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs +39 -28
  99. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs.map +1 -1
  100. package/dist/features/column-filtering/columnFilteringFeature.utils.d.cts +39 -28
  101. package/dist/features/column-filtering/columnFilteringFeature.utils.d.ts +39 -28
  102. package/dist/features/column-filtering/columnFilteringFeature.utils.js +39 -28
  103. package/dist/features/column-filtering/columnFilteringFeature.utils.js.map +1 -1
  104. package/dist/features/column-filtering/createFilteredRowModel.cjs +11 -5
  105. package/dist/features/column-filtering/createFilteredRowModel.cjs.map +1 -1
  106. package/dist/features/column-filtering/createFilteredRowModel.js +11 -5
  107. package/dist/features/column-filtering/createFilteredRowModel.js.map +1 -1
  108. package/dist/features/column-grouping/columnGroupingFeature.types.d.cts +18 -14
  109. package/dist/features/column-grouping/columnGroupingFeature.types.d.ts +18 -14
  110. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs +55 -43
  111. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs.map +1 -1
  112. package/dist/features/column-grouping/columnGroupingFeature.utils.d.cts +55 -43
  113. package/dist/features/column-grouping/columnGroupingFeature.utils.d.ts +55 -43
  114. package/dist/features/column-grouping/columnGroupingFeature.utils.js +55 -43
  115. package/dist/features/column-grouping/columnGroupingFeature.utils.js.map +1 -1
  116. package/dist/features/column-ordering/columnOrderingFeature.types.d.cts +14 -5
  117. package/dist/features/column-ordering/columnOrderingFeature.types.d.ts +14 -5
  118. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs +46 -29
  119. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs.map +1 -1
  120. package/dist/features/column-ordering/columnOrderingFeature.utils.d.cts +30 -23
  121. package/dist/features/column-ordering/columnOrderingFeature.utils.d.ts +30 -23
  122. package/dist/features/column-ordering/columnOrderingFeature.utils.js +46 -29
  123. package/dist/features/column-ordering/columnOrderingFeature.utils.js.map +1 -1
  124. package/dist/features/column-pinning/columnPinningFeature.types.d.cts +43 -31
  125. package/dist/features/column-pinning/columnPinningFeature.types.d.ts +43 -31
  126. package/dist/features/column-pinning/columnPinningFeature.utils.cjs +152 -115
  127. package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
  128. package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +116 -95
  129. package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +116 -95
  130. package/dist/features/column-pinning/columnPinningFeature.utils.js +153 -116
  131. package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
  132. package/dist/features/column-resizing/columnResizingFeature.types.d.cts +9 -9
  133. package/dist/features/column-resizing/columnResizingFeature.types.d.ts +9 -9
  134. package/dist/features/column-resizing/columnResizingFeature.utils.cjs +28 -19
  135. package/dist/features/column-resizing/columnResizingFeature.utils.cjs.map +1 -1
  136. package/dist/features/column-resizing/columnResizingFeature.utils.d.cts +28 -19
  137. package/dist/features/column-resizing/columnResizingFeature.utils.d.ts +28 -19
  138. package/dist/features/column-resizing/columnResizingFeature.utils.js +28 -19
  139. package/dist/features/column-resizing/columnResizingFeature.utils.js.map +1 -1
  140. package/dist/features/column-sizing/columnSizingFeature.cjs +28 -4
  141. package/dist/features/column-sizing/columnSizingFeature.cjs.map +1 -1
  142. package/dist/features/column-sizing/columnSizingFeature.js +28 -4
  143. package/dist/features/column-sizing/columnSizingFeature.js.map +1 -1
  144. package/dist/features/column-sizing/columnSizingFeature.types.d.cts +19 -12
  145. package/dist/features/column-sizing/columnSizingFeature.types.d.ts +19 -12
  146. package/dist/features/column-sizing/columnSizingFeature.utils.cjs +52 -41
  147. package/dist/features/column-sizing/columnSizingFeature.utils.cjs.map +1 -1
  148. package/dist/features/column-sizing/columnSizingFeature.utils.d.cts +52 -41
  149. package/dist/features/column-sizing/columnSizingFeature.utils.d.ts +52 -41
  150. package/dist/features/column-sizing/columnSizingFeature.utils.js +52 -41
  151. package/dist/features/column-sizing/columnSizingFeature.utils.js.map +1 -1
  152. package/dist/features/column-visibility/columnVisibilityFeature.cjs +23 -14
  153. package/dist/features/column-visibility/columnVisibilityFeature.cjs.map +1 -1
  154. package/dist/features/column-visibility/columnVisibilityFeature.js +24 -15
  155. package/dist/features/column-visibility/columnVisibilityFeature.js.map +1 -1
  156. package/dist/features/column-visibility/columnVisibilityFeature.types.d.cts +19 -12
  157. package/dist/features/column-visibility/columnVisibilityFeature.types.d.ts +19 -12
  158. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +91 -52
  159. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
  160. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.cts +63 -40
  161. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.ts +63 -40
  162. package/dist/features/column-visibility/columnVisibilityFeature.utils.js +91 -53
  163. package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
  164. package/dist/features/global-filtering/globalFilteringFeature.types.d.cts +10 -5
  165. package/dist/features/global-filtering/globalFilteringFeature.types.d.ts +10 -5
  166. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs +20 -14
  167. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs.map +1 -1
  168. package/dist/features/global-filtering/globalFilteringFeature.utils.d.cts +20 -14
  169. package/dist/features/global-filtering/globalFilteringFeature.utils.d.ts +20 -14
  170. package/dist/features/global-filtering/globalFilteringFeature.utils.js +20 -14
  171. package/dist/features/global-filtering/globalFilteringFeature.utils.js.map +1 -1
  172. package/dist/features/row-expanding/rowExpandingFeature.types.d.cts +16 -15
  173. package/dist/features/row-expanding/rowExpandingFeature.types.d.ts +16 -15
  174. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs +58 -43
  175. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs.map +1 -1
  176. package/dist/features/row-expanding/rowExpandingFeature.utils.d.cts +56 -41
  177. package/dist/features/row-expanding/rowExpandingFeature.utils.d.ts +56 -41
  178. package/dist/features/row-expanding/rowExpandingFeature.utils.js +58 -43
  179. package/dist/features/row-expanding/rowExpandingFeature.utils.js.map +1 -1
  180. package/dist/features/row-pagination/rowPaginationFeature.types.d.cts +19 -12
  181. package/dist/features/row-pagination/rowPaginationFeature.types.d.ts +19 -12
  182. package/dist/features/row-pagination/rowPaginationFeature.utils.cjs +49 -32
  183. package/dist/features/row-pagination/rowPaginationFeature.utils.cjs.map +1 -1
  184. package/dist/features/row-pagination/rowPaginationFeature.utils.d.cts +49 -32
  185. package/dist/features/row-pagination/rowPaginationFeature.utils.d.ts +49 -32
  186. package/dist/features/row-pagination/rowPaginationFeature.utils.js +49 -32
  187. package/dist/features/row-pagination/rowPaginationFeature.utils.js.map +1 -1
  188. package/dist/features/row-pinning/rowPinningFeature.types.d.cts +12 -8
  189. package/dist/features/row-pinning/rowPinningFeature.types.d.ts +12 -8
  190. package/dist/features/row-pinning/rowPinningFeature.utils.cjs +52 -36
  191. package/dist/features/row-pinning/rowPinningFeature.utils.cjs.map +1 -1
  192. package/dist/features/row-pinning/rowPinningFeature.utils.d.cts +39 -29
  193. package/dist/features/row-pinning/rowPinningFeature.utils.d.ts +39 -29
  194. package/dist/features/row-pinning/rowPinningFeature.utils.js +52 -36
  195. package/dist/features/row-pinning/rowPinningFeature.utils.js.map +1 -1
  196. package/dist/features/row-selection/rowSelectionFeature.types.d.cts +30 -24
  197. package/dist/features/row-selection/rowSelectionFeature.types.d.ts +30 -24
  198. package/dist/features/row-selection/rowSelectionFeature.utils.cjs +95 -72
  199. package/dist/features/row-selection/rowSelectionFeature.utils.cjs.map +1 -1
  200. package/dist/features/row-selection/rowSelectionFeature.utils.d.cts +89 -69
  201. package/dist/features/row-selection/rowSelectionFeature.utils.d.ts +89 -69
  202. package/dist/features/row-selection/rowSelectionFeature.utils.js +95 -72
  203. package/dist/features/row-selection/rowSelectionFeature.utils.js.map +1 -1
  204. package/dist/features/row-sorting/createSortedRowModel.cjs +13 -8
  205. package/dist/features/row-sorting/createSortedRowModel.cjs.map +1 -1
  206. package/dist/features/row-sorting/createSortedRowModel.js +13 -8
  207. package/dist/features/row-sorting/createSortedRowModel.js.map +1 -1
  208. package/dist/features/row-sorting/rowSortingFeature.types.d.cts +10 -8
  209. package/dist/features/row-sorting/rowSortingFeature.types.d.ts +10 -8
  210. package/dist/features/row-sorting/rowSortingFeature.utils.cjs +63 -46
  211. package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
  212. package/dist/features/row-sorting/rowSortingFeature.utils.d.cts +61 -44
  213. package/dist/features/row-sorting/rowSortingFeature.utils.d.ts +61 -44
  214. package/dist/features/row-sorting/rowSortingFeature.utils.js +63 -46
  215. package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
  216. package/dist/fns/aggregationFns.cjs +47 -16
  217. package/dist/fns/aggregationFns.cjs.map +1 -1
  218. package/dist/fns/aggregationFns.d.cts +33 -9
  219. package/dist/fns/aggregationFns.d.ts +33 -9
  220. package/dist/fns/aggregationFns.js +47 -17
  221. package/dist/fns/aggregationFns.js.map +1 -1
  222. package/dist/fns/filterFns.cjs +48 -17
  223. package/dist/fns/filterFns.cjs.map +1 -1
  224. package/dist/fns/filterFns.d.cts +42 -15
  225. package/dist/fns/filterFns.d.ts +42 -15
  226. package/dist/fns/filterFns.js +48 -17
  227. package/dist/fns/filterFns.js.map +1 -1
  228. package/dist/helpers/columnHelper.cjs +9 -4
  229. package/dist/helpers/columnHelper.cjs.map +1 -1
  230. package/dist/helpers/columnHelper.d.cts +9 -4
  231. package/dist/helpers/columnHelper.d.ts +9 -4
  232. package/dist/helpers/columnHelper.js +9 -4
  233. package/dist/helpers/columnHelper.js.map +1 -1
  234. package/dist/helpers/tableOptions.cjs.map +1 -1
  235. package/dist/helpers/tableOptions.d.cts +12 -9
  236. package/dist/helpers/tableOptions.d.ts +12 -9
  237. package/dist/helpers/tableOptions.js.map +1 -1
  238. package/dist/index.cjs +0 -4
  239. package/dist/index.d.cts +2 -2
  240. package/dist/index.d.ts +2 -2
  241. package/dist/index.js +2 -2
  242. package/dist/static-functions.cjs +1 -0
  243. package/dist/static-functions.d.cts +2 -2
  244. package/dist/static-functions.d.ts +2 -2
  245. package/dist/static-functions.js +2 -2
  246. package/dist/store-reactivity-bindings.cjs +1 -0
  247. package/dist/store-reactivity-bindings.cjs.map +1 -1
  248. package/dist/store-reactivity-bindings.js +1 -0
  249. package/dist/store-reactivity-bindings.js.map +1 -1
  250. package/dist/types/ColumnDef.d.cts +38 -0
  251. package/dist/types/ColumnDef.d.ts +38 -0
  252. package/dist/types/TableOptions.d.cts +15 -0
  253. package/dist/types/TableOptions.d.ts +15 -0
  254. package/dist/types/TableState.d.cts +12 -0
  255. package/dist/types/TableState.d.ts +12 -0
  256. package/dist/utils.cjs +18 -39
  257. package/dist/utils.cjs.map +1 -1
  258. package/dist/utils.d.cts +1 -23
  259. package/dist/utils.d.ts +1 -23
  260. package/dist/utils.js +19 -36
  261. package/dist/utils.js.map +1 -1
  262. package/package.json +5 -3
  263. package/skills/column-definitions/SKILL.md +333 -0
  264. package/skills/column-layout/SKILL.md +328 -0
  265. package/skills/column-layout/references/subsystems.md +220 -0
  266. package/skills/customizing-feature-behavior/SKILL.md +416 -0
  267. package/skills/filtering/SKILL.md +357 -0
  268. package/skills/filtering/references/faceting-and-fuzzy.md +191 -0
  269. package/skills/grouping/SKILL.md +448 -0
  270. package/skills/migrate-v8-to-v9/SKILL.md +495 -0
  271. package/skills/pagination/SKILL.md +385 -0
  272. package/skills/row-expanding/SKILL.md +348 -0
  273. package/skills/row-pinning/SKILL.md +269 -0
  274. package/skills/row-selection/SKILL.md +391 -0
  275. package/skills/setup/SKILL.md +400 -0
  276. package/skills/sorting/SKILL.md +344 -0
  277. package/skills/state-management/SKILL.md +388 -0
  278. package/src/core/cells/constructCell.ts +3 -2
  279. package/src/core/cells/coreCellsFeature.utils.ts +11 -8
  280. package/src/core/columns/constructColumn.ts +5 -3
  281. package/src/core/columns/coreColumnsFeature.types.ts +7 -6
  282. package/src/core/columns/coreColumnsFeature.utils.ts +43 -29
  283. package/src/core/headers/buildHeaderGroups.ts +29 -30
  284. package/src/core/headers/constructHeader.ts +3 -2
  285. package/src/core/headers/coreHeadersFeature.ts +2 -27
  286. package/src/core/headers/coreHeadersFeature.types.ts +6 -4
  287. package/src/core/headers/coreHeadersFeature.utils.ts +52 -61
  288. package/src/core/reactivity/coreReactivityFeature.types.ts +4 -0
  289. package/src/core/row-models/coreRowModelsFeature.utils.ts +48 -36
  290. package/src/core/rows/constructRow.ts +6 -4
  291. package/src/core/rows/coreRowsFeature.types.ts +4 -4
  292. package/src/core/rows/coreRowsFeature.utils.ts +45 -32
  293. package/src/core/table/constructTable.ts +6 -4
  294. package/src/core/table/coreTablesFeature.types.ts +6 -2
  295. package/src/core/table/coreTablesFeature.utils.ts +5 -3
  296. package/src/features/column-faceting/columnFacetingFeature.types.ts +16 -10
  297. package/src/features/column-faceting/columnFacetingFeature.utils.ts +26 -18
  298. package/src/features/column-faceting/createFacetedMinMaxValues.ts +8 -10
  299. package/src/features/column-faceting/createFacetedRowModel.ts +10 -6
  300. package/src/features/column-faceting/createFacetedUniqueValues.ts +4 -3
  301. package/src/features/column-filtering/columnFilteringFeature.types.ts +21 -11
  302. package/src/features/column-filtering/columnFilteringFeature.utils.ts +39 -28
  303. package/src/features/column-filtering/createFilteredRowModel.ts +14 -8
  304. package/src/features/column-grouping/columnGroupingFeature.types.ts +18 -14
  305. package/src/features/column-grouping/columnGroupingFeature.utils.ts +55 -43
  306. package/src/features/column-ordering/columnOrderingFeature.types.ts +14 -5
  307. package/src/features/column-ordering/columnOrderingFeature.utils.ts +44 -29
  308. package/src/features/column-pinning/columnPinningFeature.types.ts +43 -31
  309. package/src/features/column-pinning/columnPinningFeature.utils.ts +164 -128
  310. package/src/features/column-resizing/columnResizingFeature.types.ts +9 -9
  311. package/src/features/column-resizing/columnResizingFeature.utils.ts +28 -19
  312. package/src/features/column-sizing/columnSizingFeature.ts +16 -0
  313. package/src/features/column-sizing/columnSizingFeature.types.ts +19 -12
  314. package/src/features/column-sizing/columnSizingFeature.utils.ts +52 -41
  315. package/src/features/column-visibility/columnVisibilityFeature.ts +8 -0
  316. package/src/features/column-visibility/columnVisibilityFeature.types.ts +22 -12
  317. package/src/features/column-visibility/columnVisibilityFeature.utils.ts +101 -56
  318. package/src/features/global-filtering/globalFilteringFeature.types.ts +10 -5
  319. package/src/features/global-filtering/globalFilteringFeature.utils.ts +20 -14
  320. package/src/features/row-expanding/rowExpandingFeature.types.ts +16 -15
  321. package/src/features/row-expanding/rowExpandingFeature.utils.ts +58 -43
  322. package/src/features/row-pagination/rowPaginationFeature.types.ts +19 -12
  323. package/src/features/row-pagination/rowPaginationFeature.utils.ts +49 -32
  324. package/src/features/row-pinning/rowPinningFeature.types.ts +12 -8
  325. package/src/features/row-pinning/rowPinningFeature.utils.ts +59 -47
  326. package/src/features/row-selection/rowSelectionFeature.types.ts +30 -24
  327. package/src/features/row-selection/rowSelectionFeature.utils.ts +109 -88
  328. package/src/features/row-sorting/createSortedRowModel.ts +16 -13
  329. package/src/features/row-sorting/rowSortingFeature.types.ts +10 -8
  330. package/src/features/row-sorting/rowSortingFeature.utils.ts +63 -46
  331. package/src/fns/aggregationFns.ts +53 -17
  332. package/src/fns/filterFns.ts +48 -17
  333. package/src/helpers/columnHelper.ts +9 -4
  334. package/src/helpers/tableOptions.ts +12 -9
  335. package/src/store-reactivity-bindings.ts +1 -0
  336. package/src/types/ColumnDef.ts +38 -0
  337. package/src/types/TableOptions.ts +15 -0
  338. package/src/types/TableState.ts +12 -0
  339. package/src/utils.ts +19 -46
@@ -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.47'
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