@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,388 @@
1
+ ---
2
+ name: state-management
3
+ description: >
4
+ Coordinate TanStack Table v9 state across `initialState`, controlled
5
+ `state`+`on*Change`, and external `atoms`. Covers the atom model
6
+ (`table.atoms.<slice>`, `table.baseAtoms.<slice>`, `table.store`, `table.state`),
7
+ per-slice precedence (atoms beat state beat initialState beat baseAtoms),
8
+ `manualSorting` / `manualFiltering` / `manualPagination` / `manualGrouping` /
9
+ `manualExpanding` for server-side data, `autoResetPageIndex` / `autoResetAll`,
10
+ reset APIs (`resetSorting`, `resetPagination`, `reset()`), and the
11
+ `SortingState` / `PaginationState` / `RowSelectionState` / `ColumnFiltersState` /
12
+ `GroupingState` shapes. Foundational for every other skill.
13
+ type: core
14
+ library: tanstack-table
15
+ library_version: '9.0.0-alpha.47'
16
+ sources:
17
+ - TanStack/table:docs/framework/vanilla/guide/table-state.md
18
+ - TanStack/table:docs/framework/react/guide/table-state.md
19
+ - TanStack/table:packages/table-core/src/store-reactivity-bindings.ts
20
+ - TanStack/table:packages/table-core/src/reactivity.ts
21
+ - TanStack/table:packages/table-core/src/core/table/constructTable.ts
22
+ ---
23
+
24
+ ## Setup
25
+
26
+ TanStack Table v9 is built on TanStack Store. Each state slice (sorting, pagination, columnFilters, rowSelection, columnVisibility, …) is a separate atom. There are four ownership patterns, and the table reads from them in a fixed precedence.
27
+
28
+ ```ts
29
+ import {
30
+ constructTable,
31
+ tableFeatures,
32
+ rowSortingFeature,
33
+ rowPaginationFeature,
34
+ createSortedRowModel,
35
+ createPaginatedRowModel,
36
+ sortFns,
37
+ } from '@tanstack/table-core'
38
+
39
+ const _features = tableFeatures({ rowSortingFeature, rowPaginationFeature })
40
+
41
+ const table = constructTable({
42
+ _features,
43
+ _rowModels: {
44
+ sortedRowModel: createSortedRowModel(sortFns),
45
+ paginatedRowModel: createPaginatedRowModel(),
46
+ },
47
+ columns,
48
+ data,
49
+ // 1. initialState — set starting values; read once at construction
50
+ initialState: {
51
+ sorting: [{ id: 'lastName', desc: false }],
52
+ pagination: { pageIndex: 0, pageSize: 10 },
53
+ },
54
+ })
55
+
56
+ // Read APIs:
57
+ table.store.state // flat snapshot of every slice (no subscription)
58
+ table.atoms.sorting.get() // single-slice atom read (no subscription)
59
+ table.state // typed output of the `useTable` selector (framework adapters)
60
+
61
+ // Write APIs use the feature setters — they're atom-aware:
62
+ table.setSorting([{ id: 'firstName', desc: true }])
63
+ table.setPageIndex(2)
64
+ ```
65
+
66
+ The four ownership patterns per slice:
67
+
68
+ | Pattern | When to use | Wins over |
69
+ | ----------------------------------- | ---------------------------------------------------- | ------------------------------- |
70
+ | internal (default) | Most slices in a simple table | nothing — baseline |
71
+ | `initialState.<slice>` | Set starting value only | internal default |
72
+ | `state.<slice>` + `on<Slice>Change` | v8-style controlled state | `initialState` |
73
+ | `atoms.<slice>` | v9 preferred — share with other components / queries | `state`+`on*Change` (silently!) |
74
+
75
+ ## Core Patterns
76
+
77
+ ### Internal state with `initialState`
78
+
79
+ ```ts
80
+ const table = constructTable({
81
+ _features,
82
+ _rowModels: { sortedRowModel: createSortedRowModel(sortFns) },
83
+ columns,
84
+ data,
85
+ initialState: { sorting: [{ id: 'age', desc: false }] },
86
+ })
87
+ // State lives entirely inside the table.
88
+ table.setSorting([{ id: 'firstName', desc: true }])
89
+ ```
90
+
91
+ ### Controlled state with `state` + `on*Change` (v8-style)
92
+
93
+ ```tsx
94
+ const [sorting, setSorting] = React.useState<SortingState>([])
95
+
96
+ const table = useTable({
97
+ _features,
98
+ _rowModels: { sortedRowModel: createSortedRowModel(sortFns) },
99
+ columns,
100
+ data,
101
+ state: { sorting },
102
+ onSortingChange: setSorting,
103
+ })
104
+ ```
105
+
106
+ `state` and `on*Change` must be paired. Without the callback the table cannot update React state, so toggling sort appears to do nothing.
107
+
108
+ ### External atom (v9 preferred for shared slices)
109
+
110
+ ```tsx
111
+ import { useCreateAtom } from '@tanstack/react-store'
112
+
113
+ function MyTable() {
114
+ // Hoist or pass via context to share with queries / other components.
115
+ const paginationAtom = useCreateAtom<PaginationState>({
116
+ pageIndex: 0,
117
+ pageSize: 10,
118
+ })
119
+
120
+ const table = useTable({
121
+ _features,
122
+ _rowModels: { paginatedRowModel: createPaginatedRowModel() },
123
+ columns,
124
+ data,
125
+ atoms: { pagination: paginationAtom },
126
+ // no state.pagination, no onPaginationChange needed
127
+ })
128
+
129
+ return <Pager paginationAtom={paginationAtom} />
130
+ }
131
+ ```
132
+
133
+ The atom IS the source of truth; `table.atoms.pagination` derives from it.
134
+
135
+ ### Server-side / manual mode
136
+
137
+ ```tsx
138
+ const [pagination, setPagination] = React.useState({
139
+ pageIndex: 0,
140
+ pageSize: 10,
141
+ })
142
+ const dataQuery = useQuery({
143
+ queryKey: ['rows', pagination],
144
+ queryFn: () => fetchPage(pagination),
145
+ })
146
+
147
+ const table = useTable({
148
+ _features: tableFeatures({ rowPaginationFeature }),
149
+ _rowModels: {}, // can drop paginatedRowModel — server paginates
150
+ columns,
151
+ data: dataQuery.data?.rows ?? EMPTY,
152
+ rowCount: dataQuery.data?.rowCount, // server tells the table the total
153
+ state: { pagination },
154
+ onPaginationChange: setPagination,
155
+ manualPagination: true, // ← tell the table to NOT re-paginate
156
+ })
157
+ ```
158
+
159
+ The same shape applies to `manualSorting`, `manualFiltering`, `manualGrouping`, `manualExpanding`. Without the flag, the table re-applies its client-side pipeline on top of already-prepared server data.
160
+
161
+ ## Common Mistakes
162
+
163
+ ### [CRITICAL] Passing both `state.<slice>` and `atoms.<slice>`
164
+
165
+ Wrong:
166
+
167
+ ```tsx
168
+ // both ownership paths for the same slice
169
+ const paginationAtom = useCreateAtom<PaginationState>({ pageIndex: 0, pageSize: 10 })
170
+ const [pagination, setPagination] = React.useState(...)
171
+
172
+ const table = useTable({
173
+ _features, _rowModels: {...}, columns, data,
174
+ state: { pagination }, // ignored
175
+ onPaginationChange: setPagination,
176
+ atoms: { pagination: paginationAtom }, // wins
177
+ })
178
+ ```
179
+
180
+ Correct:
181
+
182
+ ```tsx
183
+ // pick one ownership path per slice — here, external atoms
184
+ const paginationAtom = useCreateAtom<PaginationState>({ pageIndex: 0, pageSize: 10 })
185
+
186
+ const table = useTable({
187
+ _features, _rowModels: {...}, columns, data,
188
+ atoms: { pagination: paginationAtom },
189
+ })
190
+ ```
191
+
192
+ When both are supplied, the external atom wins silently. `state.pagination` becomes dead config and `setPagination` writes never reach the table.
193
+
194
+ Source: docs/framework/react/guide/table-state.md; packages/table-core/src/core/table/constructTable.ts
195
+
196
+ ### [CRITICAL] Using external `state` without the matching `on*Change` callback
197
+
198
+ Wrong:
199
+
200
+ ```tsx
201
+ const [sorting, setSorting] = React.useState<SortingState>([])
202
+ const table = useTable({
203
+ _features,
204
+ _rowModels: { sortedRowModel: createSortedRowModel(sortFns) },
205
+ columns,
206
+ data,
207
+ state: { sorting }, // no onSortingChange
208
+ })
209
+ ```
210
+
211
+ Correct:
212
+
213
+ ```tsx
214
+ const [sorting, setSorting] = React.useState<SortingState>([])
215
+ const table = useTable({
216
+ _features,
217
+ _rowModels: { sortedRowModel: createSortedRowModel(sortFns) },
218
+ columns,
219
+ data,
220
+ state: { sorting },
221
+ onSortingChange: setSorting,
222
+ })
223
+ ```
224
+
225
+ The table keeps reading from `state.sorting`, so the UI looks stuck — sort toggles never make it back into React state.
226
+
227
+ Source: docs/framework/react/guide/table-state.md; examples/react/basic-external-state/src/main.tsx
228
+
229
+ ### [HIGH] Using `initialState` to control or update state
230
+
231
+ Wrong:
232
+
233
+ ```tsx
234
+ // updates to initialState are ignored after first render
235
+ function MyTable({ defaultSort }: { defaultSort: SortingState }) {
236
+ const table = useTable({
237
+ _features,
238
+ _rowModels: { sortedRowModel: createSortedRowModel(sortFns) },
239
+ columns,
240
+ data,
241
+ initialState: { sorting: defaultSort }, // later changes never sync
242
+ })
243
+ }
244
+ ```
245
+
246
+ Correct:
247
+
248
+ ```tsx
249
+ function MyTable({ defaultSort }: { defaultSort: SortingState }) {
250
+ const [sorting, setSorting] = React.useState(defaultSort)
251
+ const table = useTable({
252
+ _features,
253
+ _rowModels: { sortedRowModel: createSortedRowModel(sortFns) },
254
+ columns,
255
+ data,
256
+ state: { sorting },
257
+ onSortingChange: setSorting,
258
+ })
259
+ }
260
+ ```
261
+
262
+ `initialState` is read once at construction to seed `baseAtoms`. Mutating it later does nothing.
263
+
264
+ Source: docs/framework/vanilla/guide/table-state.md; docs/framework/react/guide/table-state.md
265
+
266
+ ### [HIGH] Writing to `table.baseAtoms.<slice>` while `atoms.<slice>` owns the slice
267
+
268
+ Wrong:
269
+
270
+ ```ts
271
+ const paginationAtom = useCreateAtom<PaginationState>({ pageIndex: 0, pageSize: 10 })
272
+ const table = useTable({ _features, _rowModels: {...}, columns, data, atoms: { pagination: paginationAtom } })
273
+
274
+ table.baseAtoms.pagination.set((old) => ({ ...old, pageIndex: 0 }))
275
+ // baseAtom updated, but table.atoms.pagination still reads from paginationAtom
276
+ ```
277
+
278
+ Correct:
279
+
280
+ ```ts
281
+ // Write to the external atom directly, OR use the feature's setter API
282
+ paginationAtom.set((old) => ({ ...old, pageIndex: 0 }))
283
+ // or
284
+ table.setPageIndex(0) // setter writes through the slice's updater (atom-aware)
285
+ ```
286
+
287
+ When an external atom owns a slice, `table.atoms.<slice>` derives from it — not from `baseAtoms`. Direct base-atom writes drift and never surface in the UI.
288
+
289
+ Source: docs/framework/vanilla/guide/table-state.md; packages/table-core/src/core/table/constructTable.ts
290
+
291
+ ### [CRITICAL] Forgetting `manualSorting` / `manualFiltering` / `manualPagination` for server-side data
292
+
293
+ Wrong:
294
+
295
+ ```tsx
296
+ // data is already paginated server-side, but table still slices it
297
+ const dataQuery = useQuery({
298
+ queryKey: ['data', pagination],
299
+ queryFn: fetchPage,
300
+ })
301
+ const table = useTable({
302
+ _features,
303
+ _rowModels: { paginatedRowModel: createPaginatedRowModel() },
304
+ columns,
305
+ data: dataQuery.data?.rows ?? [],
306
+ rowCount: dataQuery.data?.rowCount,
307
+ atoms: { pagination: paginationAtom },
308
+ // ❌ missing manualPagination: true
309
+ })
310
+ ```
311
+
312
+ Correct:
313
+
314
+ ```tsx
315
+ const table = useTable({
316
+ _features,
317
+ _rowModels: {}, // drop paginatedRowModel if fully server-side
318
+ columns,
319
+ data: dataQuery.data?.rows ?? [],
320
+ rowCount: dataQuery.data?.rowCount,
321
+ atoms: { pagination: paginationAtom },
322
+ manualPagination: true,
323
+ })
324
+ ```
325
+
326
+ Without the manual flag, the table re-applies its client-side row models on top of already-prepared server data — wrong rows, broken page math, blank pages.
327
+
328
+ Source: docs/framework/react/guide/table-state.md; packages/table-core/src/features/row-pagination/rowPaginationFeature.types.ts
329
+
330
+ ### [HIGH] Using `table.reset()` to clear externally owned state
331
+
332
+ Wrong:
333
+
334
+ ```ts
335
+ // external atom keeps its current value; only baseAtoms reset
336
+ const sortingAtom = useCreateAtom<SortingState>([])
337
+ const table = useTable({
338
+ _features, _rowModels: {...}, columns, data,
339
+ atoms: { sorting: sortingAtom },
340
+ })
341
+ table.reset() // sortingAtom is NOT cleared
342
+ ```
343
+
344
+ Correct:
345
+
346
+ ```ts
347
+ // Use feature-specific reset — atom-aware
348
+ table.resetSorting()
349
+ // or, to clear the external atom specifically:
350
+ sortingAtom.set([])
351
+ ```
352
+
353
+ `table.reset()` only resets `baseAtoms` to `initialState`; slices owned by external atoms or external `state` are untouched. The atom split makes `reset()` less safe than v8.
354
+
355
+ Source: docs/framework/vanilla/guide/table-state.md; packages/table-core/src/core/table/coreTablesFeature.utils.ts
356
+
357
+ ### [CRITICAL] Reimplementing what built-in setters provide
358
+
359
+ Wrong:
360
+
361
+ ```ts
362
+ // Reimplements sorting state manually instead of using the API
363
+ const [sorting, setSorting] = useState([])
364
+ const sortedData = useMemo(() => [...data].sort(/* ... */), [data, sorting])
365
+ // then uses sortedData directly, bypassing the table
366
+ ```
367
+
368
+ Correct:
369
+
370
+ ```ts
371
+ const table = useTable({
372
+ _features: tableFeatures({ rowSortingFeature }),
373
+ _rowModels: { sortedRowModel: createSortedRowModel(sortFns) },
374
+ columns,
375
+ data,
376
+ })
377
+ // table.setSorting(...), column.toggleSorting(), header.getToggleSortingHandler()
378
+ ```
379
+
380
+ The setters honor reset behavior, multi-sort, internal invariants. Hand-rolled state loops skip all of that.
381
+
382
+ Source: maintainer interview (Phase 4, 2026-05-17)
383
+
384
+ ## See also
385
+
386
+ - `tanstack-table/setup` — how `_features` and `_rowModels` are wired
387
+ - `tanstack-table/pagination`, `tanstack-table/sorting`, `tanstack-table/filtering` — feature-specific `manual*` and reset semantics
388
+ - `tanstack-table/migrate-v8-to-v9` — `table.getState()` → `table.store.state` / `table.atoms.<slice>.get()`
@@ -16,8 +16,9 @@ function getCellPrototype<
16
16
  >(table: Table_Internal<TFeatures, TData>): object {
17
17
  if (!table._cellPrototype) {
18
18
  table._cellPrototype = { table }
19
- for (const feature of Object.values(table._features)) {
20
- feature.assignCellPrototype?.(table._cellPrototype, table)
19
+ const features = Object.values(table._features)
20
+ for (let i = 0; i < features.length; i++) {
21
+ features[i]!.assignCellPrototype?.(table._cellPrototype, table)
21
22
  }
22
23
  }
23
24
  return table._cellPrototype
@@ -3,9 +3,10 @@ import type { TableFeatures } from '../../types/TableFeatures'
3
3
  import type { Cell } from '../../types/Cell'
4
4
 
5
5
  /**
6
- * Returns value for a cell.
6
+ * Reads this cell's accessor value from its owning row and column.
7
7
  *
8
- * This is the static implementation behind the matching cell instance API and uses the owning row and column context.
8
+ * This is the standalone implementation behind `cell.getValue()`, useful when
9
+ * importing static APIs instead of calling methods from the cell prototype.
9
10
  *
10
11
  * @example
11
12
  * ```ts
@@ -21,13 +22,14 @@ export function cell_getValue<
21
22
  }
22
23
 
23
24
  /**
24
- * Returns value for a cell.
25
+ * Reads the value that should be rendered for this cell.
25
26
  *
26
- * This is the static implementation behind the matching cell instance API and uses the owning row and column context.
27
+ * Nullish accessor values are replaced with `table.options.renderFallbackValue`,
28
+ * matching the behavior of `cell.renderValue()`.
27
29
  *
28
30
  * @example
29
31
  * ```ts
30
- * const value = cell_renderValue(cell)
32
+ * const rendered = cell_renderValue(cell)
31
33
  * ```
32
34
  */
33
35
  export function cell_renderValue<
@@ -39,13 +41,14 @@ export function cell_renderValue<
39
41
  }
40
42
 
41
43
  /**
42
- * Returns context for a cell.
44
+ * Builds the render context passed to a column's `cell` template.
43
45
  *
44
- * This is the static implementation behind the matching cell instance API and uses the owning row and column context.
46
+ * The returned object includes stable references to the table, row, column, and
47
+ * cell, plus bound `getValue` and `renderValue` helpers for render functions.
45
48
  *
46
49
  * @example
47
50
  * ```ts
48
- * const value = cell_getContext(cell)
51
+ * const context = cell_getContext(cell)
49
52
  * ```
50
53
  */
51
54
  export function cell_getContext<
@@ -20,8 +20,9 @@ function getColumnPrototype<
20
20
  >(table: Table_Internal<TFeatures, TData>): object {
21
21
  if (!table._columnPrototype) {
22
22
  table._columnPrototype = { table }
23
- for (const feature of Object.values(table._features)) {
24
- feature.assignColumnPrototype?.(table._columnPrototype, table)
23
+ const features = Object.values(table._features)
24
+ for (let i = 0; i < features.length; i++) {
25
+ features[i]!.assignColumnPrototype?.(table._columnPrototype, table)
25
26
  }
26
27
  }
27
28
  return table._columnPrototype
@@ -69,7 +70,8 @@ export function constructColumn<
69
70
  accessorFn = (originalRow: TData) => {
70
71
  let result = originalRow as Record<string, any> | undefined
71
72
 
72
- for (const key of keys) {
73
+ for (let i = 0; i < keys.length; i++) {
74
+ const key = keys[i]!
73
75
  result = result?.[key]
74
76
  if (process.env.NODE_ENV === 'development' && result === undefined) {
75
77
  console.warn(
@@ -48,11 +48,12 @@ export interface Column_Column<
48
48
  TValue extends CellData = CellData,
49
49
  > extends Column_CoreProperties<TFeatures, TData, TValue> {
50
50
  /**
51
- * Returns the flattened array of this column and all child/grand-child columns for this column.
51
+ * Flattens this column and every descendant column into a single array.
52
52
  */
53
53
  getFlatColumns: () => Array<Column<TFeatures, TData, TValue>>
54
54
  /**
55
- * Returns an array of all leaf-node columns for this column. If a column has no children, it is considered the only leaf-node column.
55
+ * Collects the terminal leaf columns below this column, or the column itself
56
+ * when it has no children.
56
57
  */
57
58
  getLeafColumns: () => Array<Column<TFeatures, TData, TValue>>
58
59
  }
@@ -81,19 +82,19 @@ export interface Table_Columns<
81
82
  */
82
83
  getAllFlatColumnsById: () => Record<string, Column<TFeatures, TData, unknown>>
83
84
  /**
84
- * Returns the default column options to use for all column defs supplied to the table.
85
+ * Resolves built-in, feature-level, and user-defined default column options.
85
86
  */
86
87
  getDefaultColumnDef: () => Partial<ColumnDef<TFeatures, TData, unknown>>
87
88
  /**
88
- * Returns all columns in the table in their normalized and nested hierarchy.
89
+ * Normalizes `options.columns` into the table's nested column hierarchy.
89
90
  */
90
91
  getAllColumns: () => Array<Column<TFeatures, TData, unknown>>
91
92
  /**
92
- * Returns all columns in the table flattened to a single level.
93
+ * Flattens the nested column hierarchy, including parent/group columns.
93
94
  */
94
95
  getAllFlatColumns: () => Array<Column<TFeatures, TData, unknown>>
95
96
  /**
96
- * Returns all leaf-node columns in the table flattened to a single level. This does not include parent columns.
97
+ * Collects all terminal leaf columns, excluding parent/group columns.
97
98
  */
98
99
  getAllLeafColumns: () => Array<Column<TFeatures, TData, unknown>>
99
100
  /**