@tanstack/table-core 9.0.0-beta.2 → 9.0.0-beta.20

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 (524) hide show
  1. package/dist/core/cells/constructCell.d.cts +3 -3
  2. package/dist/core/cells/constructCell.d.ts +3 -3
  3. package/dist/core/cells/coreCellsFeature.cjs +11 -20
  4. package/dist/core/cells/coreCellsFeature.cjs.map +1 -1
  5. package/dist/core/cells/coreCellsFeature.d.cts +4 -12
  6. package/dist/core/cells/coreCellsFeature.d.ts +4 -12
  7. package/dist/core/cells/coreCellsFeature.js +12 -20
  8. package/dist/core/cells/coreCellsFeature.js.map +1 -1
  9. package/dist/core/cells/coreCellsFeature.types.d.cts +6 -6
  10. package/dist/core/cells/coreCellsFeature.types.d.ts +6 -6
  11. package/dist/core/cells/coreCellsFeature.utils.d.cts +3 -3
  12. package/dist/core/cells/coreCellsFeature.utils.d.ts +3 -3
  13. package/dist/core/columns/constructColumn.cjs +5 -0
  14. package/dist/core/columns/constructColumn.cjs.map +1 -1
  15. package/dist/core/columns/constructColumn.d.cts +3 -3
  16. package/dist/core/columns/constructColumn.d.ts +3 -3
  17. package/dist/core/columns/constructColumn.js +5 -0
  18. package/dist/core/columns/constructColumn.js.map +1 -1
  19. package/dist/core/columns/coreColumnsFeature.cjs +59 -68
  20. package/dist/core/columns/coreColumnsFeature.cjs.map +1 -1
  21. package/dist/core/columns/coreColumnsFeature.d.cts +4 -12
  22. package/dist/core/columns/coreColumnsFeature.d.ts +4 -12
  23. package/dist/core/columns/coreColumnsFeature.js +60 -68
  24. package/dist/core/columns/coreColumnsFeature.js.map +1 -1
  25. package/dist/core/columns/coreColumnsFeature.types.d.cts +7 -7
  26. package/dist/core/columns/coreColumnsFeature.types.d.ts +7 -7
  27. package/dist/core/columns/coreColumnsFeature.utils.cjs +2 -2
  28. package/dist/core/columns/coreColumnsFeature.utils.cjs.map +1 -1
  29. package/dist/core/columns/coreColumnsFeature.utils.d.cts +9 -9
  30. package/dist/core/columns/coreColumnsFeature.utils.d.ts +9 -9
  31. package/dist/core/columns/coreColumnsFeature.utils.js +3 -3
  32. package/dist/core/columns/coreColumnsFeature.utils.js.map +1 -1
  33. package/dist/core/coreFeatures.cjs.map +1 -1
  34. package/dist/core/coreFeatures.d.cts +1 -1
  35. package/dist/core/coreFeatures.d.ts +1 -1
  36. package/dist/core/coreFeatures.js.map +1 -1
  37. package/dist/core/headers/buildHeaderGroups.cjs.map +1 -1
  38. package/dist/core/headers/buildHeaderGroups.d.cts +2 -2
  39. package/dist/core/headers/buildHeaderGroups.d.ts +2 -2
  40. package/dist/core/headers/buildHeaderGroups.js.map +1 -1
  41. package/dist/core/headers/constructHeader.d.cts +2 -2
  42. package/dist/core/headers/constructHeader.d.ts +2 -2
  43. package/dist/core/headers/coreHeadersFeature.cjs +44 -53
  44. package/dist/core/headers/coreHeadersFeature.cjs.map +1 -1
  45. package/dist/core/headers/coreHeadersFeature.d.cts +4 -12
  46. package/dist/core/headers/coreHeadersFeature.d.ts +4 -12
  47. package/dist/core/headers/coreHeadersFeature.js +45 -53
  48. package/dist/core/headers/coreHeadersFeature.js.map +1 -1
  49. package/dist/core/headers/coreHeadersFeature.types.d.cts +6 -6
  50. package/dist/core/headers/coreHeadersFeature.types.d.ts +6 -6
  51. package/dist/core/headers/coreHeadersFeature.utils.cjs.map +1 -1
  52. package/dist/core/headers/coreHeadersFeature.utils.d.cts +6 -6
  53. package/dist/core/headers/coreHeadersFeature.utils.d.ts +6 -6
  54. package/dist/core/headers/coreHeadersFeature.utils.js.map +1 -1
  55. package/dist/core/row-models/coreRowModelsFeature.cjs +17 -26
  56. package/dist/core/row-models/coreRowModelsFeature.cjs.map +1 -1
  57. package/dist/core/row-models/coreRowModelsFeature.d.cts +4 -12
  58. package/dist/core/row-models/coreRowModelsFeature.d.ts +4 -12
  59. package/dist/core/row-models/coreRowModelsFeature.js +18 -26
  60. package/dist/core/row-models/coreRowModelsFeature.js.map +1 -1
  61. package/dist/core/row-models/coreRowModelsFeature.types.d.cts +6 -16
  62. package/dist/core/row-models/coreRowModelsFeature.types.d.ts +6 -16
  63. package/dist/core/row-models/coreRowModelsFeature.utils.cjs +13 -13
  64. package/dist/core/row-models/coreRowModelsFeature.utils.cjs.map +1 -1
  65. package/dist/core/row-models/coreRowModelsFeature.utils.d.cts +14 -14
  66. package/dist/core/row-models/coreRowModelsFeature.utils.d.ts +14 -14
  67. package/dist/core/row-models/coreRowModelsFeature.utils.js +13 -13
  68. package/dist/core/row-models/coreRowModelsFeature.utils.js.map +1 -1
  69. package/dist/core/row-models/createCoreRowModel.cjs +2 -3
  70. package/dist/core/row-models/createCoreRowModel.cjs.map +1 -1
  71. package/dist/core/row-models/createCoreRowModel.d.cts +1 -1
  72. package/dist/core/row-models/createCoreRowModel.d.ts +1 -1
  73. package/dist/core/row-models/createCoreRowModel.js +3 -4
  74. package/dist/core/row-models/createCoreRowModel.js.map +1 -1
  75. package/dist/core/rows/constructRow.cjs +3 -2
  76. package/dist/core/rows/constructRow.cjs.map +1 -1
  77. package/dist/core/rows/constructRow.d.cts +2 -2
  78. package/dist/core/rows/constructRow.d.ts +2 -2
  79. package/dist/core/rows/constructRow.js +4 -2
  80. package/dist/core/rows/constructRow.js.map +1 -1
  81. package/dist/core/rows/coreRowsFeature.cjs +27 -36
  82. package/dist/core/rows/coreRowsFeature.cjs.map +1 -1
  83. package/dist/core/rows/coreRowsFeature.d.cts +4 -12
  84. package/dist/core/rows/coreRowsFeature.d.ts +4 -12
  85. package/dist/core/rows/coreRowsFeature.js +28 -36
  86. package/dist/core/rows/coreRowsFeature.js.map +1 -1
  87. package/dist/core/rows/coreRowsFeature.types.d.cts +6 -6
  88. package/dist/core/rows/coreRowsFeature.types.d.ts +6 -6
  89. package/dist/core/rows/coreRowsFeature.utils.cjs +3 -3
  90. package/dist/core/rows/coreRowsFeature.utils.cjs.map +1 -1
  91. package/dist/core/rows/coreRowsFeature.utils.d.cts +3 -3
  92. package/dist/core/rows/coreRowsFeature.utils.d.ts +3 -3
  93. package/dist/core/rows/coreRowsFeature.utils.js +4 -4
  94. package/dist/core/rows/coreRowsFeature.utils.js.map +1 -1
  95. package/dist/core/table/constructTable.cjs +21 -6
  96. package/dist/core/table/constructTable.cjs.map +1 -1
  97. package/dist/core/table/constructTable.d.cts +1 -1
  98. package/dist/core/table/constructTable.d.ts +1 -1
  99. package/dist/core/table/constructTable.js +21 -6
  100. package/dist/core/table/constructTable.js.map +1 -1
  101. package/dist/core/table/coreTablesFeature.cjs +7 -16
  102. package/dist/core/table/coreTablesFeature.cjs.map +1 -1
  103. package/dist/core/table/coreTablesFeature.d.cts +4 -12
  104. package/dist/core/table/coreTablesFeature.d.ts +4 -12
  105. package/dist/core/table/coreTablesFeature.js +8 -16
  106. package/dist/core/table/coreTablesFeature.js.map +1 -1
  107. package/dist/core/table/coreTablesFeature.types.d.cts +28 -16
  108. package/dist/core/table/coreTablesFeature.types.d.ts +28 -16
  109. package/dist/core/table/coreTablesFeature.utils.cjs +33 -12
  110. package/dist/core/table/coreTablesFeature.utils.cjs.map +1 -1
  111. package/dist/core/table/coreTablesFeature.utils.d.cts +8 -6
  112. package/dist/core/table/coreTablesFeature.utils.d.ts +8 -6
  113. package/dist/core/table/coreTablesFeature.utils.js +33 -12
  114. package/dist/core/table/coreTablesFeature.utils.js.map +1 -1
  115. package/dist/features/column-faceting/columnFacetingFeature.cjs +49 -61
  116. package/dist/features/column-faceting/columnFacetingFeature.cjs.map +1 -1
  117. package/dist/features/column-faceting/columnFacetingFeature.d.cts +4 -15
  118. package/dist/features/column-faceting/columnFacetingFeature.d.ts +4 -15
  119. package/dist/features/column-faceting/columnFacetingFeature.js +50 -61
  120. package/dist/features/column-faceting/columnFacetingFeature.js.map +1 -1
  121. package/dist/features/column-faceting/columnFacetingFeature.types.d.cts +8 -29
  122. package/dist/features/column-faceting/columnFacetingFeature.types.d.ts +8 -29
  123. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs +12 -12
  124. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs.map +1 -1
  125. package/dist/features/column-faceting/columnFacetingFeature.utils.d.cts +8 -8
  126. package/dist/features/column-faceting/columnFacetingFeature.utils.d.ts +8 -8
  127. package/dist/features/column-faceting/columnFacetingFeature.utils.js +12 -12
  128. package/dist/features/column-faceting/columnFacetingFeature.utils.js.map +1 -1
  129. package/dist/features/column-faceting/createFacetedMinMaxValues.cjs.map +1 -1
  130. package/dist/features/column-faceting/createFacetedMinMaxValues.d.cts +1 -1
  131. package/dist/features/column-faceting/createFacetedMinMaxValues.d.ts +1 -1
  132. package/dist/features/column-faceting/createFacetedMinMaxValues.js.map +1 -1
  133. package/dist/features/column-faceting/createFacetedRowModel.cjs.map +1 -1
  134. package/dist/features/column-faceting/createFacetedRowModel.d.cts +1 -1
  135. package/dist/features/column-faceting/createFacetedRowModel.d.ts +1 -1
  136. package/dist/features/column-faceting/createFacetedRowModel.js.map +1 -1
  137. package/dist/features/column-faceting/createFacetedUniqueValues.cjs.map +1 -1
  138. package/dist/features/column-faceting/createFacetedUniqueValues.d.cts +1 -1
  139. package/dist/features/column-faceting/createFacetedUniqueValues.d.ts +1 -1
  140. package/dist/features/column-faceting/createFacetedUniqueValues.js.map +1 -1
  141. package/dist/features/column-filtering/columnFilteringFeature.cjs +40 -53
  142. package/dist/features/column-filtering/columnFilteringFeature.cjs.map +1 -1
  143. package/dist/features/column-filtering/columnFilteringFeature.d.cts +4 -16
  144. package/dist/features/column-filtering/columnFilteringFeature.d.ts +4 -16
  145. package/dist/features/column-filtering/columnFilteringFeature.js +42 -54
  146. package/dist/features/column-filtering/columnFilteringFeature.js.map +1 -1
  147. package/dist/features/column-filtering/columnFilteringFeature.types.d.cts +40 -26
  148. package/dist/features/column-filtering/columnFilteringFeature.types.d.ts +40 -26
  149. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs +1 -1
  150. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs.map +1 -1
  151. package/dist/features/column-filtering/columnFilteringFeature.utils.d.cts +12 -12
  152. package/dist/features/column-filtering/columnFilteringFeature.utils.d.ts +12 -12
  153. package/dist/features/column-filtering/columnFilteringFeature.utils.js +1 -1
  154. package/dist/features/column-filtering/columnFilteringFeature.utils.js.map +1 -1
  155. package/dist/features/column-filtering/createFilteredRowModel.cjs +12 -7
  156. package/dist/features/column-filtering/createFilteredRowModel.cjs.map +1 -1
  157. package/dist/features/column-filtering/createFilteredRowModel.d.cts +5 -3
  158. package/dist/features/column-filtering/createFilteredRowModel.d.ts +5 -3
  159. package/dist/features/column-filtering/createFilteredRowModel.js +13 -8
  160. package/dist/features/column-filtering/createFilteredRowModel.js.map +1 -1
  161. package/dist/features/column-filtering/filterRowsUtils.cjs +3 -2
  162. package/dist/features/column-filtering/filterRowsUtils.cjs.map +1 -1
  163. package/dist/features/column-filtering/filterRowsUtils.js +3 -2
  164. package/dist/features/column-filtering/filterRowsUtils.js.map +1 -1
  165. package/dist/features/column-grouping/columnGroupingFeature.cjs +57 -69
  166. package/dist/features/column-grouping/columnGroupingFeature.cjs.map +1 -1
  167. package/dist/features/column-grouping/columnGroupingFeature.d.cts +4 -15
  168. package/dist/features/column-grouping/columnGroupingFeature.d.ts +4 -15
  169. package/dist/features/column-grouping/columnGroupingFeature.js +59 -70
  170. package/dist/features/column-grouping/columnGroupingFeature.js.map +1 -1
  171. package/dist/features/column-grouping/columnGroupingFeature.types.d.cts +23 -19
  172. package/dist/features/column-grouping/columnGroupingFeature.types.d.ts +23 -19
  173. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs +3 -3
  174. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs.map +1 -1
  175. package/dist/features/column-grouping/columnGroupingFeature.utils.d.cts +11 -11
  176. package/dist/features/column-grouping/columnGroupingFeature.utils.d.ts +11 -11
  177. package/dist/features/column-grouping/columnGroupingFeature.utils.js +4 -4
  178. package/dist/features/column-grouping/columnGroupingFeature.utils.js.map +1 -1
  179. package/dist/features/column-grouping/createGroupedRowModel.cjs +9 -7
  180. package/dist/features/column-grouping/createGroupedRowModel.cjs.map +1 -1
  181. package/dist/features/column-grouping/createGroupedRowModel.d.cts +6 -3
  182. package/dist/features/column-grouping/createGroupedRowModel.d.ts +6 -3
  183. package/dist/features/column-grouping/createGroupedRowModel.js +10 -8
  184. package/dist/features/column-grouping/createGroupedRowModel.js.map +1 -1
  185. package/dist/features/column-ordering/columnOrderingFeature.cjs +47 -59
  186. package/dist/features/column-ordering/columnOrderingFeature.cjs.map +1 -1
  187. package/dist/features/column-ordering/columnOrderingFeature.d.cts +4 -15
  188. package/dist/features/column-ordering/columnOrderingFeature.d.ts +4 -15
  189. package/dist/features/column-ordering/columnOrderingFeature.js +48 -59
  190. package/dist/features/column-ordering/columnOrderingFeature.js.map +1 -1
  191. package/dist/features/column-ordering/columnOrderingFeature.types.d.cts +1 -1
  192. package/dist/features/column-ordering/columnOrderingFeature.types.d.ts +1 -1
  193. package/dist/features/column-ordering/columnOrderingFeature.utils.d.cts +9 -9
  194. package/dist/features/column-ordering/columnOrderingFeature.utils.d.ts +9 -9
  195. package/dist/features/column-pinning/columnPinningFeature.cjs +209 -221
  196. package/dist/features/column-pinning/columnPinningFeature.cjs.map +1 -1
  197. package/dist/features/column-pinning/columnPinningFeature.d.cts +4 -15
  198. package/dist/features/column-pinning/columnPinningFeature.d.ts +4 -15
  199. package/dist/features/column-pinning/columnPinningFeature.js +210 -221
  200. package/dist/features/column-pinning/columnPinningFeature.js.map +1 -1
  201. package/dist/features/column-pinning/columnPinningFeature.types.d.cts +2 -2
  202. package/dist/features/column-pinning/columnPinningFeature.types.d.ts +2 -2
  203. package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
  204. package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +31 -30
  205. package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +31 -30
  206. package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
  207. package/dist/features/column-resizing/columnResizingFeature.cjs +31 -43
  208. package/dist/features/column-resizing/columnResizingFeature.cjs.map +1 -1
  209. package/dist/features/column-resizing/columnResizingFeature.d.cts +4 -15
  210. package/dist/features/column-resizing/columnResizingFeature.d.ts +4 -15
  211. package/dist/features/column-resizing/columnResizingFeature.js +32 -43
  212. package/dist/features/column-resizing/columnResizingFeature.js.map +1 -1
  213. package/dist/features/column-resizing/columnResizingFeature.types.d.cts +1 -4
  214. package/dist/features/column-resizing/columnResizingFeature.types.d.ts +1 -4
  215. package/dist/features/column-resizing/columnResizingFeature.utils.cjs +2 -5
  216. package/dist/features/column-resizing/columnResizingFeature.utils.cjs.map +1 -1
  217. package/dist/features/column-resizing/columnResizingFeature.utils.d.cts +6 -6
  218. package/dist/features/column-resizing/columnResizingFeature.utils.d.ts +6 -6
  219. package/dist/features/column-resizing/columnResizingFeature.utils.js +3 -6
  220. package/dist/features/column-resizing/columnResizingFeature.utils.js.map +1 -1
  221. package/dist/features/column-sizing/columnSizingFeature.cjs +112 -125
  222. package/dist/features/column-sizing/columnSizingFeature.cjs.map +1 -1
  223. package/dist/features/column-sizing/columnSizingFeature.d.cts +4 -16
  224. package/dist/features/column-sizing/columnSizingFeature.d.ts +4 -16
  225. package/dist/features/column-sizing/columnSizingFeature.js +113 -125
  226. package/dist/features/column-sizing/columnSizingFeature.js.map +1 -1
  227. package/dist/features/column-sizing/columnSizingFeature.utils.cjs +11 -4
  228. package/dist/features/column-sizing/columnSizingFeature.utils.cjs.map +1 -1
  229. package/dist/features/column-sizing/columnSizingFeature.utils.d.cts +12 -12
  230. package/dist/features/column-sizing/columnSizingFeature.utils.d.ts +12 -12
  231. package/dist/features/column-sizing/columnSizingFeature.utils.js +12 -5
  232. package/dist/features/column-sizing/columnSizingFeature.utils.js.map +1 -1
  233. package/dist/features/column-visibility/columnVisibilityFeature.cjs +83 -95
  234. package/dist/features/column-visibility/columnVisibilityFeature.cjs.map +1 -1
  235. package/dist/features/column-visibility/columnVisibilityFeature.d.cts +4 -15
  236. package/dist/features/column-visibility/columnVisibilityFeature.d.ts +4 -15
  237. package/dist/features/column-visibility/columnVisibilityFeature.js +84 -95
  238. package/dist/features/column-visibility/columnVisibilityFeature.js.map +1 -1
  239. package/dist/features/column-visibility/columnVisibilityFeature.types.d.cts +2 -2
  240. package/dist/features/column-visibility/columnVisibilityFeature.types.d.ts +2 -2
  241. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +12 -9
  242. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
  243. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.cts +14 -14
  244. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.ts +14 -14
  245. package/dist/features/column-visibility/columnVisibilityFeature.utils.js +13 -10
  246. package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
  247. package/dist/features/global-filtering/globalFilteringFeature.cjs +31 -43
  248. package/dist/features/global-filtering/globalFilteringFeature.cjs.map +1 -1
  249. package/dist/features/global-filtering/globalFilteringFeature.d.cts +4 -15
  250. package/dist/features/global-filtering/globalFilteringFeature.d.ts +4 -15
  251. package/dist/features/global-filtering/globalFilteringFeature.js +32 -43
  252. package/dist/features/global-filtering/globalFilteringFeature.js.map +1 -1
  253. package/dist/features/global-filtering/globalFilteringFeature.types.d.cts +2 -2
  254. package/dist/features/global-filtering/globalFilteringFeature.types.d.ts +2 -2
  255. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs.map +1 -1
  256. package/dist/features/global-filtering/globalFilteringFeature.utils.d.cts +10 -8
  257. package/dist/features/global-filtering/globalFilteringFeature.utils.d.ts +10 -8
  258. package/dist/features/global-filtering/globalFilteringFeature.utils.js.map +1 -1
  259. package/dist/features/row-expanding/createExpandedRowModel.cjs.map +1 -1
  260. package/dist/features/row-expanding/createExpandedRowModel.d.cts +1 -1
  261. package/dist/features/row-expanding/createExpandedRowModel.d.ts +1 -1
  262. package/dist/features/row-expanding/createExpandedRowModel.js.map +1 -1
  263. package/dist/features/row-expanding/rowExpandingFeature.cjs +37 -49
  264. package/dist/features/row-expanding/rowExpandingFeature.cjs.map +1 -1
  265. package/dist/features/row-expanding/rowExpandingFeature.d.cts +4 -15
  266. package/dist/features/row-expanding/rowExpandingFeature.d.ts +4 -15
  267. package/dist/features/row-expanding/rowExpandingFeature.js +38 -49
  268. package/dist/features/row-expanding/rowExpandingFeature.js.map +1 -1
  269. package/dist/features/row-expanding/rowExpandingFeature.types.d.cts +5 -14
  270. package/dist/features/row-expanding/rowExpandingFeature.types.d.ts +5 -14
  271. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs +21 -12
  272. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs.map +1 -1
  273. package/dist/features/row-expanding/rowExpandingFeature.utils.d.cts +10 -10
  274. package/dist/features/row-expanding/rowExpandingFeature.utils.d.ts +10 -10
  275. package/dist/features/row-expanding/rowExpandingFeature.utils.js +22 -13
  276. package/dist/features/row-expanding/rowExpandingFeature.utils.js.map +1 -1
  277. package/dist/features/row-pagination/createPaginatedRowModel.cjs +1 -1
  278. package/dist/features/row-pagination/createPaginatedRowModel.cjs.map +1 -1
  279. package/dist/features/row-pagination/createPaginatedRowModel.d.cts +1 -1
  280. package/dist/features/row-pagination/createPaginatedRowModel.d.ts +1 -1
  281. package/dist/features/row-pagination/createPaginatedRowModel.js +1 -1
  282. package/dist/features/row-pagination/createPaginatedRowModel.js.map +1 -1
  283. package/dist/features/row-pagination/rowPaginationFeature.cjs +35 -47
  284. package/dist/features/row-pagination/rowPaginationFeature.cjs.map +1 -1
  285. package/dist/features/row-pagination/rowPaginationFeature.d.cts +4 -15
  286. package/dist/features/row-pagination/rowPaginationFeature.d.ts +4 -15
  287. package/dist/features/row-pagination/rowPaginationFeature.js +36 -47
  288. package/dist/features/row-pagination/rowPaginationFeature.js.map +1 -1
  289. package/dist/features/row-pagination/rowPaginationFeature.types.d.cts +4 -13
  290. package/dist/features/row-pagination/rowPaginationFeature.types.d.ts +4 -13
  291. package/dist/features/row-pagination/rowPaginationFeature.utils.d.cts +17 -17
  292. package/dist/features/row-pagination/rowPaginationFeature.utils.d.ts +17 -17
  293. package/dist/features/row-pinning/rowPinningFeature.cjs +55 -67
  294. package/dist/features/row-pinning/rowPinningFeature.cjs.map +1 -1
  295. package/dist/features/row-pinning/rowPinningFeature.d.cts +4 -15
  296. package/dist/features/row-pinning/rowPinningFeature.d.ts +4 -15
  297. package/dist/features/row-pinning/rowPinningFeature.js +56 -67
  298. package/dist/features/row-pinning/rowPinningFeature.js.map +1 -1
  299. package/dist/features/row-pinning/rowPinningFeature.types.d.cts +2 -2
  300. package/dist/features/row-pinning/rowPinningFeature.types.d.ts +2 -2
  301. package/dist/features/row-pinning/rowPinningFeature.utils.cjs +2 -2
  302. package/dist/features/row-pinning/rowPinningFeature.utils.cjs.map +1 -1
  303. package/dist/features/row-pinning/rowPinningFeature.utils.d.cts +7 -7
  304. package/dist/features/row-pinning/rowPinningFeature.utils.d.ts +7 -7
  305. package/dist/features/row-pinning/rowPinningFeature.utils.js +2 -2
  306. package/dist/features/row-pinning/rowPinningFeature.utils.js.map +1 -1
  307. package/dist/features/row-selection/rowSelectionFeature.cjs +108 -77
  308. package/dist/features/row-selection/rowSelectionFeature.cjs.map +1 -1
  309. package/dist/features/row-selection/rowSelectionFeature.d.cts +4 -15
  310. package/dist/features/row-selection/rowSelectionFeature.d.ts +4 -15
  311. package/dist/features/row-selection/rowSelectionFeature.js +110 -78
  312. package/dist/features/row-selection/rowSelectionFeature.js.map +1 -1
  313. package/dist/features/row-selection/rowSelectionFeature.types.d.cts +13 -5
  314. package/dist/features/row-selection/rowSelectionFeature.types.d.ts +13 -5
  315. package/dist/features/row-selection/rowSelectionFeature.utils.cjs +76 -60
  316. package/dist/features/row-selection/rowSelectionFeature.utils.cjs.map +1 -1
  317. package/dist/features/row-selection/rowSelectionFeature.utils.d.cts +48 -23
  318. package/dist/features/row-selection/rowSelectionFeature.utils.d.ts +48 -23
  319. package/dist/features/row-selection/rowSelectionFeature.utils.js +77 -62
  320. package/dist/features/row-selection/rowSelectionFeature.utils.js.map +1 -1
  321. package/dist/features/row-sorting/createSortedRowModel.cjs +5 -3
  322. package/dist/features/row-sorting/createSortedRowModel.cjs.map +1 -1
  323. package/dist/features/row-sorting/createSortedRowModel.d.cts +5 -3
  324. package/dist/features/row-sorting/createSortedRowModel.d.ts +5 -3
  325. package/dist/features/row-sorting/createSortedRowModel.js +6 -4
  326. package/dist/features/row-sorting/createSortedRowModel.js.map +1 -1
  327. package/dist/features/row-sorting/rowSortingFeature.cjs +45 -57
  328. package/dist/features/row-sorting/rowSortingFeature.cjs.map +1 -1
  329. package/dist/features/row-sorting/rowSortingFeature.d.cts +4 -15
  330. package/dist/features/row-sorting/rowSortingFeature.d.ts +4 -15
  331. package/dist/features/row-sorting/rowSortingFeature.js +46 -57
  332. package/dist/features/row-sorting/rowSortingFeature.js.map +1 -1
  333. package/dist/features/row-sorting/rowSortingFeature.types.d.cts +24 -21
  334. package/dist/features/row-sorting/rowSortingFeature.types.d.ts +24 -21
  335. package/dist/features/row-sorting/rowSortingFeature.utils.cjs +8 -5
  336. package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
  337. package/dist/features/row-sorting/rowSortingFeature.utils.d.cts +16 -16
  338. package/dist/features/row-sorting/rowSortingFeature.utils.d.ts +16 -16
  339. package/dist/features/row-sorting/rowSortingFeature.utils.js +8 -5
  340. package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
  341. package/dist/fns/aggregationFns.cjs +18 -18
  342. package/dist/fns/aggregationFns.cjs.map +1 -1
  343. package/dist/fns/aggregationFns.d.cts +21 -19
  344. package/dist/fns/aggregationFns.d.ts +21 -19
  345. package/dist/fns/aggregationFns.js +18 -18
  346. package/dist/fns/aggregationFns.js.map +1 -1
  347. package/dist/fns/filterFns.cjs +51 -65
  348. package/dist/fns/filterFns.cjs.map +1 -1
  349. package/dist/fns/filterFns.d.cts +82 -28
  350. package/dist/fns/filterFns.d.ts +82 -28
  351. package/dist/fns/filterFns.js +51 -65
  352. package/dist/fns/filterFns.js.map +1 -1
  353. package/dist/fns/sortFns.cjs +18 -6
  354. package/dist/fns/sortFns.cjs.map +1 -1
  355. package/dist/fns/sortFns.d.cts +15 -13
  356. package/dist/fns/sortFns.d.ts +15 -13
  357. package/dist/fns/sortFns.js +18 -6
  358. package/dist/fns/sortFns.js.map +1 -1
  359. package/dist/helpers/columnHelper.cjs.map +1 -1
  360. package/dist/helpers/columnHelper.d.cts +2 -2
  361. package/dist/helpers/columnHelper.d.ts +2 -2
  362. package/dist/helpers/columnHelper.js.map +1 -1
  363. package/dist/helpers/metaHelper.cjs +30 -0
  364. package/dist/helpers/metaHelper.cjs.map +1 -0
  365. package/dist/helpers/metaHelper.d.cts +26 -0
  366. package/dist/helpers/metaHelper.d.ts +26 -0
  367. package/dist/helpers/metaHelper.js +29 -0
  368. package/dist/helpers/metaHelper.js.map +1 -0
  369. package/dist/helpers/tableFeatures.cjs +31 -3
  370. package/dist/helpers/tableFeatures.cjs.map +1 -1
  371. package/dist/helpers/tableFeatures.d.cts +33 -5
  372. package/dist/helpers/tableFeatures.d.ts +33 -5
  373. package/dist/helpers/tableFeatures.js +31 -3
  374. package/dist/helpers/tableFeatures.js.map +1 -1
  375. package/dist/index.cjs +4 -20
  376. package/dist/index.d.cts +50 -49
  377. package/dist/index.d.ts +50 -49
  378. package/dist/index.js +23 -22
  379. package/dist/static-functions.cjs +1 -0
  380. package/dist/static-functions.d.cts +2 -2
  381. package/dist/static-functions.d.ts +2 -2
  382. package/dist/static-functions.js +2 -2
  383. package/dist/store-reactivity-bindings.cjs +1 -1
  384. package/dist/store-reactivity-bindings.cjs.map +1 -1
  385. package/dist/store-reactivity-bindings.d.cts +1 -1
  386. package/dist/store-reactivity-bindings.d.ts +1 -1
  387. package/dist/store-reactivity-bindings.js +1 -1
  388. package/dist/store-reactivity-bindings.js.map +1 -1
  389. package/dist/types/Cell.d.cts +4 -9
  390. package/dist/types/Cell.d.ts +4 -9
  391. package/dist/types/Column.d.cts +11 -18
  392. package/dist/types/Column.d.ts +11 -18
  393. package/dist/types/ColumnDef.d.cts +23 -14
  394. package/dist/types/ColumnDef.d.ts +23 -14
  395. package/dist/types/Header.d.cts +5 -10
  396. package/dist/types/Header.d.ts +5 -10
  397. package/dist/types/HeaderGroup.d.cts +4 -9
  398. package/dist/types/HeaderGroup.d.ts +4 -9
  399. package/dist/types/Row.d.cts +7 -12
  400. package/dist/types/Row.d.ts +7 -12
  401. package/dist/types/RowModel.d.cts +12 -28
  402. package/dist/types/RowModel.d.ts +12 -28
  403. package/dist/types/RowModelFns.d.cts +6 -11
  404. package/dist/types/RowModelFns.d.ts +6 -11
  405. package/dist/types/Table.d.cts +26 -36
  406. package/dist/types/Table.d.ts +26 -36
  407. package/dist/types/TableFeatures.d.cts +328 -54
  408. package/dist/types/TableFeatures.d.ts +328 -54
  409. package/dist/types/TableOptions.d.cts +22 -17
  410. package/dist/types/TableOptions.d.ts +22 -17
  411. package/dist/types/TableState.d.cts +11 -16
  412. package/dist/types/TableState.d.ts +11 -16
  413. package/dist/utils.cjs +24 -2
  414. package/dist/utils.cjs.map +1 -1
  415. package/dist/utils.d.cts +23 -7
  416. package/dist/utils.d.ts +23 -7
  417. package/dist/utils.js +23 -3
  418. package/dist/utils.js.map +1 -1
  419. package/package.json +2 -2
  420. package/skills/column-definitions/SKILL.md +3 -6
  421. package/skills/column-layout/SKILL.md +0 -2
  422. package/skills/customizing-feature-behavior/SKILL.md +63 -56
  423. package/skills/filtering/SKILL.md +60 -42
  424. package/skills/filtering/references/faceting-and-fuzzy.md +59 -32
  425. package/skills/grouping/SKILL.md +49 -54
  426. package/skills/migrate-v8-to-v9/SKILL.md +30 -33
  427. package/skills/pagination/SKILL.md +22 -20
  428. package/skills/row-expanding/SKILL.md +33 -25
  429. package/skills/row-pinning/SKILL.md +11 -7
  430. package/skills/row-selection/SKILL.md +0 -3
  431. package/skills/setup/SKILL.md +55 -65
  432. package/skills/sorting/SKILL.md +21 -21
  433. package/skills/state-management/SKILL.md +40 -25
  434. package/src/core/cells/coreCellsFeature.ts +17 -39
  435. package/src/core/cells/coreCellsFeature.types.ts +6 -6
  436. package/src/core/columns/constructColumn.ts +6 -0
  437. package/src/core/columns/coreColumnsFeature.ts +56 -83
  438. package/src/core/columns/coreColumnsFeature.types.ts +8 -8
  439. package/src/core/columns/coreColumnsFeature.utils.ts +4 -4
  440. package/src/core/coreFeatures.ts +1 -1
  441. package/src/core/headers/buildHeaderGroups.ts +4 -2
  442. package/src/core/headers/coreHeadersFeature.ts +42 -64
  443. package/src/core/headers/coreHeadersFeature.types.ts +12 -12
  444. package/src/core/headers/coreHeadersFeature.utils.ts +1 -1
  445. package/src/core/row-models/coreRowModelsFeature.ts +43 -64
  446. package/src/core/row-models/coreRowModelsFeature.types.ts +7 -24
  447. package/src/core/row-models/coreRowModelsFeature.utils.ts +7 -7
  448. package/src/core/row-models/createCoreRowModel.ts +7 -6
  449. package/src/core/rows/constructRow.ts +3 -2
  450. package/src/core/rows/coreRowsFeature.ts +45 -72
  451. package/src/core/rows/coreRowsFeature.types.ts +8 -8
  452. package/src/core/rows/coreRowsFeature.utils.ts +4 -4
  453. package/src/core/table/constructTable.ts +50 -13
  454. package/src/core/table/coreTablesFeature.ts +13 -35
  455. package/src/core/table/coreTablesFeature.types.ts +40 -17
  456. package/src/core/table/coreTablesFeature.utils.ts +52 -18
  457. package/src/features/column-faceting/columnFacetingFeature.ts +71 -102
  458. package/src/features/column-faceting/columnFacetingFeature.types.ts +11 -44
  459. package/src/features/column-faceting/columnFacetingFeature.utils.ts +6 -6
  460. package/src/features/column-faceting/createFacetedMinMaxValues.ts +1 -1
  461. package/src/features/column-faceting/createFacetedRowModel.ts +1 -1
  462. package/src/features/column-faceting/createFacetedUniqueValues.ts +1 -1
  463. package/src/features/column-filtering/columnFilteringFeature.ts +61 -103
  464. package/src/features/column-filtering/columnFilteringFeature.types.ts +55 -39
  465. package/src/features/column-filtering/columnFilteringFeature.utils.ts +2 -2
  466. package/src/features/column-filtering/createFilteredRowModel.ts +18 -17
  467. package/src/features/column-filtering/filterRowsUtils.ts +3 -2
  468. package/src/features/column-grouping/columnGroupingFeature.ts +83 -126
  469. package/src/features/column-grouping/columnGroupingFeature.types.ts +32 -31
  470. package/src/features/column-grouping/columnGroupingFeature.utils.ts +2 -2
  471. package/src/features/column-grouping/createGroupedRowModel.ts +17 -16
  472. package/src/features/column-ordering/columnOrderingFeature.ts +52 -84
  473. package/src/features/column-ordering/columnOrderingFeature.types.ts +2 -2
  474. package/src/features/column-pinning/columnPinningFeature.ts +268 -304
  475. package/src/features/column-pinning/columnPinningFeature.types.ts +4 -4
  476. package/src/features/column-pinning/columnPinningFeature.utils.ts +11 -19
  477. package/src/features/column-resizing/columnResizingFeature.ts +44 -78
  478. package/src/features/column-resizing/columnResizingFeature.types.ts +1 -4
  479. package/src/features/column-resizing/columnResizingFeature.utils.ts +5 -6
  480. package/src/features/column-sizing/columnSizingFeature.ts +115 -152
  481. package/src/features/column-sizing/columnSizingFeature.utils.ts +27 -5
  482. package/src/features/column-visibility/columnVisibilityFeature.ts +92 -129
  483. package/src/features/column-visibility/columnVisibilityFeature.types.ts +4 -4
  484. package/src/features/column-visibility/columnVisibilityFeature.utils.ts +31 -15
  485. package/src/features/global-filtering/globalFilteringFeature.ts +45 -79
  486. package/src/features/global-filtering/globalFilteringFeature.types.ts +4 -4
  487. package/src/features/global-filtering/globalFilteringFeature.utils.ts +5 -3
  488. package/src/features/row-expanding/createExpandedRowModel.ts +1 -1
  489. package/src/features/row-expanding/rowExpandingFeature.ts +65 -101
  490. package/src/features/row-expanding/rowExpandingFeature.types.ts +8 -22
  491. package/src/features/row-expanding/rowExpandingFeature.utils.ts +38 -13
  492. package/src/features/row-pagination/createPaginatedRowModel.ts +2 -2
  493. package/src/features/row-pagination/rowPaginationFeature.ts +69 -103
  494. package/src/features/row-pagination/rowPaginationFeature.types.ts +6 -20
  495. package/src/features/row-pinning/rowPinningFeature.ts +72 -104
  496. package/src/features/row-pinning/rowPinningFeature.types.ts +4 -4
  497. package/src/features/row-selection/rowSelectionFeature.ts +125 -135
  498. package/src/features/row-selection/rowSelectionFeature.types.ts +17 -7
  499. package/src/features/row-selection/rowSelectionFeature.utils.ts +144 -66
  500. package/src/features/row-sorting/createSortedRowModel.ts +12 -15
  501. package/src/features/row-sorting/rowSortingFeature.ts +73 -114
  502. package/src/features/row-sorting/rowSortingFeature.types.ts +33 -32
  503. package/src/features/row-sorting/rowSortingFeature.utils.ts +8 -6
  504. package/src/fns/aggregationFns.ts +26 -42
  505. package/src/fns/filterFns.ts +237 -264
  506. package/src/fns/sortFns.ts +51 -29
  507. package/src/helpers/columnHelper.ts +4 -4
  508. package/src/helpers/metaHelper.ts +24 -0
  509. package/src/helpers/tableFeatures.ts +36 -5
  510. package/src/index.ts +1 -0
  511. package/src/store-reactivity-bindings.ts +1 -1
  512. package/src/types/Cell.ts +5 -21
  513. package/src/types/Column.ts +12 -26
  514. package/src/types/ColumnDef.ts +28 -18
  515. package/src/types/Header.ts +4 -20
  516. package/src/types/HeaderGroup.ts +7 -18
  517. package/src/types/Row.ts +6 -21
  518. package/src/types/RowModel.ts +15 -88
  519. package/src/types/RowModelFns.ts +9 -24
  520. package/src/types/Table.ts +54 -44
  521. package/src/types/TableFeatures.ts +402 -123
  522. package/src/types/TableOptions.ts +59 -21
  523. package/src/types/TableState.ts +5 -17
  524. package/src/utils.ts +40 -8
@@ -3,8 +3,7 @@ name: customizing-feature-behavior
3
3
  description: >
4
4
  Override per-column `sortFn`, `filterFn`, `aggregationFn` and table-level
5
5
  `globalFilterFn` in TanStack Table v9. Covers built-in `filterFns` / `sortFns` /
6
- `aggregationFns` registries (passed to `createFilteredRowModel(filterFns)` /
7
- `createSortedRowModel(sortFns)` / `createGroupedRowModel(aggregationFns)`),
6
+ `aggregationFns` registries (registered as slots on `tableFeatures({...})`),
8
7
  authoring custom functions with the `FilterFn` / `SortFn` / `AggregationFn`
9
8
  signatures, chaining filter→sort via the `addMeta` callback +
10
9
  `row.columnFiltersMeta`, `resolveFilterValue`, `autoRemove`, `invertSorting`,
@@ -31,7 +30,7 @@ This skill builds on `tanstack-table/state-management`. Read it first for how fe
31
30
 
32
31
  v9 customization happens in three places:
33
32
 
34
- 1. **Built-in function registries** — `filterFns`, `sortFns`, `aggregationFns` — passed as arguments to row-model factories so unused fns tree-shake away.
33
+ 1. **Built-in function registries** — `filterFns`, `sortFns`, `aggregationFns` — registered as named slots on `tableFeatures({...})` so unused fns tree-shake away.
35
34
  2. **Per-column overrides** — `columnDef.filterFn`, `columnDef.sortFn`, `columnDef.aggregationFn` (string name OR inline function).
36
35
  3. **Table-level overrides** — `tableOptions.globalFilterFn`.
37
36
 
@@ -50,9 +49,15 @@ import {
50
49
  filterFns,
51
50
  sortFns,
52
51
  aggregationFns,
52
+ metaHelper,
53
53
  createColumnHelper,
54
54
  } from '@tanstack/table-core'
55
- import type { FilterFn, SortFn, AggregationFn } from '@tanstack/table-core'
55
+ import type {
56
+ FilterFn,
57
+ SortFn,
58
+ AggregationFn,
59
+ TableFeatures,
60
+ } from '@tanstack/table-core'
56
61
  import {
57
62
  rankItem,
58
63
  compareItems,
@@ -67,25 +72,15 @@ type Person = {
67
72
  status: 'single' | 'complicated' | 'relationship'
68
73
  }
69
74
 
70
- const features = tableFeatures({
71
- rowSortingFeature,
72
- columnFilteringFeature,
73
- globalFilteringFeature,
74
- columnGroupingFeature,
75
- rowExpandingFeature,
76
- })
77
-
78
- // Module augmentation registers custom fn names so columnDef.filterFn typechecks.
79
- declare module '@tanstack/table-core' {
80
- interface FilterFns {
81
- fuzzy: FilterFn<typeof features, Person>
82
- }
83
- interface FilterMeta {
84
- itemRank?: RankingInfo
85
- }
75
+ // 1. Describe meta shape for the fuzzy filter.
76
+ interface FuzzyFilterMeta {
77
+ itemRank?: RankingInfo
86
78
  }
87
79
 
88
- const fuzzyFilter: FilterFn<typeof features, Person> = (
80
+ // 2. Extend TableFeatures so FilterFn / SortFn can reference filterMeta types.
81
+ type FuzzyFeatures = TableFeatures & { filterMeta: FuzzyFilterMeta }
82
+
83
+ const fuzzyFilter: FilterFn<FuzzyFeatures, Person> = (
89
84
  row,
90
85
  columnId,
91
86
  value,
@@ -96,11 +91,28 @@ const fuzzyFilter: FilterFn<typeof features, Person> = (
96
91
  return itemRank.passed
97
92
  }
98
93
 
94
+ // 3. Register everything on features — fn registries are named slots.
95
+ const features = tableFeatures({
96
+ rowSortingFeature,
97
+ columnFilteringFeature,
98
+ globalFilteringFeature,
99
+ columnGroupingFeature,
100
+ rowExpandingFeature,
101
+ filteredRowModel: createFilteredRowModel(),
102
+ sortedRowModel: createSortedRowModel(),
103
+ groupedRowModel: createGroupedRowModel(),
104
+ expandedRowModel: createExpandedRowModel(),
105
+ filterFns: { ...filterFns, fuzzy: fuzzyFilter }, // keep built-ins + add custom
106
+ sortFns,
107
+ aggregationFns,
108
+ filterMeta: metaHelper<FuzzyFilterMeta>(),
109
+ })
110
+
99
111
  const columnHelper = createColumnHelper<typeof features, Person>()
100
112
 
101
113
  const columns = columnHelper.columns([
102
114
  columnHelper.accessor('firstName', {
103
- filterFn: 'fuzzy', // ← refers to registered name
115
+ filterFn: 'fuzzy', // ← string ref typechecks because 'fuzzy' is in features.filterFns
104
116
  sortFn: 'alphanumeric',
105
117
  }),
106
118
  columnHelper.accessor('revenue', {
@@ -111,15 +123,6 @@ const columns = columnHelper.columns([
111
123
 
112
124
  const table = constructTable({
113
125
  features,
114
- rowModels: {
115
- filteredRowModel: createFilteredRowModel({
116
- ...filterFns, // keep built-ins
117
- fuzzy: fuzzyFilter, // add custom
118
- }),
119
- sortedRowModel: createSortedRowModel(sortFns),
120
- groupedRowModel: createGroupedRowModel(aggregationFns),
121
- expandedRowModel: createExpandedRowModel(),
122
- },
123
126
  columns,
124
127
  data,
125
128
  globalFilterFn: 'fuzzy',
@@ -198,12 +201,16 @@ const weightedMean: AggregationFn<typeof features, Person> = (
198
201
  return totalWeight === 0 ? 0 : weightedSum / totalWeight
199
202
  }
200
203
 
204
+ const customFeatures = tableFeatures({
205
+ columnGroupingFeature,
206
+ rowExpandingFeature,
207
+ groupedRowModel: createGroupedRowModel(),
208
+ expandedRowModel: createExpandedRowModel(),
209
+ aggregationFns: { ...aggregationFns, weightedMean },
210
+ })
211
+
201
212
  const table = constructTable({
202
- features,
203
- rowModels: {
204
- groupedRowModel: createGroupedRowModel({ ...aggregationFns, weightedMean }),
205
- expandedRowModel: createExpandedRowModel(),
206
- },
213
+ features: customFeatures,
207
214
  columns: columnHelper.columns([
208
215
  columnHelper.accessor('revenue', {
209
216
  aggregationFn: 'weightedMean',
@@ -221,13 +228,15 @@ const table = constructTable({
221
228
  Wrong:
222
229
 
223
230
  ```ts
224
- // "fuzzy" string never registered
231
+ // "fuzzy" string never registered in features.filterFns
232
+ const features = tableFeatures({
233
+ columnFilteringFeature,
234
+ filteredRowModel: createFilteredRowModel(),
235
+ filterFns, // ❌ built-ins only — no fuzzy
236
+ })
225
237
  const table = useTable({
226
238
  features,
227
239
  columns: [columnHelper.accessor('fullName', { filterFn: 'fuzzy' })],
228
- rowModels: {
229
- filteredRowModel: createFilteredRowModel(filterFns), // ❌ no fuzzy
230
- },
231
240
  data,
232
241
  })
233
242
  ```
@@ -235,13 +244,7 @@ const table = useTable({
235
244
  Correct:
236
245
 
237
246
  ```ts
238
- declare module '@tanstack/react-table' {
239
- interface FilterFns {
240
- fuzzy: FilterFn<typeof features, Person>
241
- }
242
- }
243
-
244
- const fuzzyFilter: FilterFn<typeof features, Person> = (
247
+ const fuzzyFilter: FilterFn<FuzzyFeatures, Person> = (
245
248
  row,
246
249
  columnId,
247
250
  value,
@@ -252,20 +255,21 @@ const fuzzyFilter: FilterFn<typeof features, Person> = (
252
255
  return itemRank.passed
253
256
  }
254
257
 
258
+ const features = tableFeatures({
259
+ columnFilteringFeature,
260
+ filteredRowModel: createFilteredRowModel(),
261
+ filterFns: { ...filterFns, fuzzy: fuzzyFilter }, // ✅ registered
262
+ filterMeta: metaHelper<FuzzyFilterMeta>(),
263
+ })
264
+
255
265
  const table = useTable({
256
266
  features,
257
267
  columns: [columnHelper.accessor('fullName', { filterFn: 'fuzzy' })],
258
- rowModels: {
259
- filteredRowModel: createFilteredRowModel({
260
- ...filterFns,
261
- fuzzy: fuzzyFilter,
262
- }),
263
- },
264
268
  data,
265
269
  })
266
270
  ```
267
271
 
268
- String values are looked up in `table._rowModelFns.filterFns`. Unregistered names log `Could not find a valid 'column.filterFn' …` in dev and silently no-op in prod.
272
+ String values are looked up in `features.filterFns`. Unregistered names log `Could not find a valid 'column.filterFn' …` in dev and silently no-op in prod.
269
273
 
270
274
  Source: examples/react/filters-fuzzy/src/main.tsx; packages/table-core/src/features/column-filtering/columnFilteringFeature.utils.ts
271
275
 
@@ -399,8 +403,11 @@ Correct:
399
403
 
400
404
  ```ts
401
405
  const table = useTable({
402
- features: tableFeatures({ rowSortingFeature }),
403
- rowModels: { sortedRowModel: createSortedRowModel(sortFns) },
406
+ features: tableFeatures({
407
+ rowSortingFeature,
408
+ sortedRowModel: createSortedRowModel(),
409
+ sortFns,
410
+ }),
404
411
  columns,
405
412
  data,
406
413
  })
@@ -3,7 +3,7 @@ name: filtering
3
3
  description: >
4
4
  Filter rows in TanStack Table v9 with the `filteredRowModel` pipeline stage.
5
5
  Covers `columnFilteringFeature` + `globalFilteringFeature` + `columnFacetingFeature`,
6
- `createFilteredRowModel(filterFns)`, `createFacetedRowModel()` /
6
+ `createFilteredRowModel()` (registered on `features` with `filterFns` slot), `createFacetedRowModel()` /
7
7
  `createFacetedUniqueValues()` / `createFacetedMinMaxValues()`, fuzzy filtering
8
8
  with `@tanstack/match-sorter-utils`, the built-in `filterFns` registry, custom
9
9
  `filterFn` + module augmentation, `state.columnFilters` (Array<{ id, value }>),
@@ -36,13 +36,13 @@ This skill builds on `tanstack-table/state-management` and `tanstack-table/custo
36
36
 
37
37
  Filtering has five subsystems in v9 — register only the features you need:
38
38
 
39
- | Subsystem | Feature | Row-model |
40
- | ---------------- | ------------------------ | ----------------------------------- |
41
- | column-filtering | `columnFilteringFeature` | `createFilteredRowModel(filterFns)` |
42
- | global-filtering | `globalFilteringFeature` | (same `filteredRowModel`) |
43
- | column-faceting | `columnFacetingFeature` | `createFacetedRowModel()` + helpers |
44
- | global-faceting | `globalFacetingFeature` | global versions of the helpers |
45
- | fuzzy-filtering | (custom filterFn) | `@tanstack/match-sorter-utils` |
39
+ | Subsystem | Feature | Row-model |
40
+ | ---------------- | ------------------------ | --------------------------------------------- |
41
+ | column-filtering | `columnFilteringFeature` | `createFilteredRowModel()` + `filterFns` slot |
42
+ | global-filtering | `globalFilteringFeature` | (same `filteredRowModel`) |
43
+ | column-faceting | `columnFacetingFeature` | `createFacetedRowModel()` + helpers |
44
+ | global-faceting | `globalFacetingFeature` | global versions of the helpers |
45
+ | fuzzy-filtering | (custom filterFn) | `@tanstack/match-sorter-utils` |
46
46
 
47
47
  ```ts
48
48
  import {
@@ -60,14 +60,13 @@ const features = tableFeatures({
60
60
  columnFilteringFeature,
61
61
  globalFilteringFeature,
62
62
  rowPaginationFeature,
63
+ filteredRowModel: createFilteredRowModel(),
64
+ paginatedRowModel: createPaginatedRowModel(),
65
+ filterFns,
63
66
  })
64
67
 
65
68
  const table = constructTable({
66
69
  features,
67
- rowModels: {
68
- filteredRowModel: createFilteredRowModel(filterFns),
69
- paginatedRowModel: createPaginatedRowModel(),
70
- },
71
70
  columns,
72
71
  data,
73
72
  initialState: {
@@ -130,7 +129,7 @@ function Filter({ column }) {
130
129
 
131
130
  ### Faceted filter UIs and fuzzy global search
132
131
 
133
- Faceting requires `createFacetedRowModel()` as the base plus `createFacetedUniqueValues()` / `createFacetedMinMaxValues()`; fuzzy filtering wires a custom `FilterFn` backed by `@tanstack/match-sorter-utils` (`rankItem` / `compareItems`) with module augmentation for `FilterFns` + `FilterMeta`. Full examples in [faceting-and-fuzzy.md](references/faceting-and-fuzzy.md).
132
+ Faceting requires `createFacetedRowModel()` as the base plus `createFacetedUniqueValues()` / `createFacetedMinMaxValues()` — all registered on the `features` object; fuzzy filtering wires a custom `FilterFn` backed by `@tanstack/match-sorter-utils` (`rankItem` / `compareItems`) with the `filterFns` registry slot and `filterMeta` slot for type-safe meta. Full examples in [faceting-and-fuzzy.md](references/faceting-and-fuzzy.md).
134
133
 
135
134
  ### Server-side filtering
136
135
 
@@ -143,7 +142,7 @@ const { data } = useQuery({
143
142
  })
144
143
  const table = useTable({
145
144
  features: tableFeatures({ columnFilteringFeature }),
146
- rowModels: {}, // no filteredRowModel needed for manual filtering
145
+ // no filteredRowModel registered server filters
147
146
  data,
148
147
  columns,
149
148
  manualFiltering: true,
@@ -155,12 +154,15 @@ const table = useTable({
155
154
  ### Filter tree data and keep matching descendants visible
156
155
 
157
156
  ```ts
157
+ const features = tableFeatures({
158
+ columnFilteringFeature,
159
+ rowExpandingFeature,
160
+ filteredRowModel: createFilteredRowModel(),
161
+ expandedRowModel: createExpandedRowModel(),
162
+ filterFns,
163
+ })
158
164
  const table = constructTable({
159
- features: tableFeatures({ columnFilteringFeature, rowExpandingFeature }),
160
- rowModels: {
161
- filteredRowModel: createFilteredRowModel(filterFns),
162
- expandedRowModel: createExpandedRowModel(),
163
- },
165
+ features,
164
166
  columns,
165
167
  data,
166
168
  getSubRows: (r) => r.subRows,
@@ -176,13 +178,15 @@ Wrong:
176
178
 
177
179
  ```tsx
178
180
  const table = useTable({
179
- features: tableFeatures({ columnFacetingFeature, columnFilteringFeature }),
180
- rowModels: {
181
- filteredRowModel: createFilteredRowModel(filterFns),
181
+ features: tableFeatures({
182
+ columnFacetingFeature,
183
+ columnFilteringFeature,
184
+ filteredRowModel: createFilteredRowModel(),
182
185
  // BUG: missing facetedRowModel
183
186
  facetedUniqueValues: createFacetedUniqueValues(),
184
187
  facetedMinMaxValues: createFacetedMinMaxValues(),
185
- },
188
+ filterFns,
189
+ }),
186
190
  columns,
187
191
  data,
188
192
  })
@@ -196,14 +200,13 @@ const table = useTable({
196
200
  columnFacetingFeature,
197
201
  columnFilteringFeature,
198
202
  rowPaginationFeature,
199
- }),
200
- rowModels: {
201
- filteredRowModel: createFilteredRowModel(filterFns),
203
+ filteredRowModel: createFilteredRowModel(),
202
204
  paginatedRowModel: createPaginatedRowModel(),
203
205
  facetedRowModel: createFacetedRowModel(), // REQUIRED base
204
206
  facetedMinMaxValues: createFacetedMinMaxValues(),
205
207
  facetedUniqueValues: createFacetedUniqueValues(),
206
- },
208
+ filterFns,
209
+ }),
207
210
  columns,
208
211
  data,
209
212
  })
@@ -220,8 +223,11 @@ Wrong:
220
223
  ```tsx
221
224
  // manualFiltering bypasses the filteredRowModel — filter UI changes do nothing
222
225
  const table = useTable({
223
- features: tableFeatures({ columnFilteringFeature }),
224
- rowModels: { filteredRowModel: createFilteredRowModel(filterFns) },
226
+ features: tableFeatures({
227
+ columnFilteringFeature,
228
+ filteredRowModel: createFilteredRowModel(),
229
+ filterFns,
230
+ }),
225
231
  data,
226
232
  columns,
227
233
  manualFiltering: true,
@@ -241,7 +247,7 @@ const { data } = useQuery({
241
247
 
242
248
  const table = useTable({
243
249
  features: tableFeatures({ columnFilteringFeature }),
244
- rowModels: {}, // no filteredRowModel needed
250
+ // no filteredRowModel registered for manual mode
245
251
  data,
246
252
  columns,
247
253
  manualFiltering: true,
@@ -260,9 +266,11 @@ Wrong:
260
266
 
261
267
  ```tsx
262
268
  // drops the built-in registry
263
- filteredRowModel: createFilteredRowModel({
264
- fuzzy: fuzzyFilter,
265
- }),
269
+ const features = tableFeatures({
270
+ columnFilteringFeature,
271
+ filteredRowModel: createFilteredRowModel(),
272
+ filterFns: { fuzzy: fuzzyFilter }, // BUG: drops built-ins
273
+ })
266
274
  // Column with filterFn: 'includesString' now warns and never filters
267
275
  ```
268
276
 
@@ -271,13 +279,17 @@ Correct:
271
279
  ```tsx
272
280
  import { filterFns } from '@tanstack/react-table'
273
281
 
274
- filteredRowModel: createFilteredRowModel({
275
- ...filterFns, // KEEP built-ins
276
- fuzzy: fuzzyFilter, // ADD custom
277
- }),
282
+ const features = tableFeatures({
283
+ columnFilteringFeature,
284
+ filteredRowModel: createFilteredRowModel(),
285
+ filterFns: {
286
+ ...filterFns, // KEEP built-ins
287
+ fuzzy: fuzzyFilter, // ADD custom
288
+ },
289
+ })
278
290
  ```
279
291
 
280
- `createFilteredRowModel` replaces the registry with whatever you pass. Any column using a built-in name like `'includesString'` becomes a no-op.
292
+ The `filterFns` slot replaces the registry with whatever you provide. Any column using a built-in name like `'includesString'` becomes a no-op if the built-ins are dropped.
281
293
 
282
294
  Source: examples/react/filters-fuzzy/src/main.tsx
283
295
 
@@ -298,8 +310,11 @@ Correct:
298
310
 
299
311
  ```tsx
300
312
  const table = useTable({
301
- features: tableFeatures({ globalFilteringFeature }),
302
- rowModels: { filteredRowModel: createFilteredRowModel(filterFns) },
313
+ features: tableFeatures({
314
+ globalFilteringFeature,
315
+ filteredRowModel: createFilteredRowModel(),
316
+ filterFns,
317
+ }),
303
318
  columns,
304
319
  data,
305
320
  globalFilterFn: 'includesString',
@@ -333,8 +348,11 @@ Correct:
333
348
 
334
349
  ```ts
335
350
  const table = useTable({
336
- features: tableFeatures({ columnFilteringFeature }),
337
- rowModels: { filteredRowModel: createFilteredRowModel(filterFns) },
351
+ features: tableFeatures({
352
+ columnFilteringFeature,
353
+ filteredRowModel: createFilteredRowModel(),
354
+ filterFns,
355
+ }),
338
356
  columns,
339
357
  data,
340
358
  })
@@ -16,17 +16,16 @@ const features = tableFeatures({
16
16
  columnFacetingFeature,
17
17
  columnFilteringFeature,
18
18
  rowPaginationFeature,
19
+ filteredRowModel: createFilteredRowModel(),
20
+ paginatedRowModel: createPaginatedRowModel(),
21
+ facetedRowModel: createFacetedRowModel(), // REQUIRED base
22
+ facetedMinMaxValues: createFacetedMinMaxValues(),
23
+ facetedUniqueValues: createFacetedUniqueValues(),
24
+ filterFns,
19
25
  })
20
26
 
21
27
  const table = constructTable({
22
28
  features,
23
- rowModels: {
24
- filteredRowModel: createFilteredRowModel(filterFns),
25
- paginatedRowModel: createPaginatedRowModel(),
26
- facetedRowModel: createFacetedRowModel(), // REQUIRED base
27
- facetedMinMaxValues: createFacetedMinMaxValues(),
28
- facetedUniqueValues: createFacetedUniqueValues(),
29
- },
30
29
  columns,
31
30
  data,
32
31
  })
@@ -44,18 +43,28 @@ import {
44
43
  compareItems,
45
44
  type RankingInfo,
46
45
  } from '@tanstack/match-sorter-utils'
47
- import type { FilterFn, SortFn } from '@tanstack/table-core'
46
+ import {
47
+ tableFeatures,
48
+ columnFilteringFeature,
49
+ globalFilteringFeature,
50
+ rowSortingFeature,
51
+ createFilteredRowModel,
52
+ createSortedRowModel,
53
+ filterFns,
54
+ sortFns,
55
+ metaHelper,
56
+ } from '@tanstack/table-core'
57
+ import type { FilterFn, SortFn, TableFeatures } from '@tanstack/table-core'
48
58
 
49
- declare module '@tanstack/react-table' {
50
- interface FilterFns {
51
- fuzzy: FilterFn<typeof features, Person>
52
- }
53
- interface FilterMeta {
54
- itemRank?: RankingInfo
55
- }
59
+ // 1. Describe the filterMeta shape for this feature set.
60
+ interface FuzzyFilterMeta {
61
+ itemRank?: RankingInfo
56
62
  }
57
63
 
58
- const fuzzyFilter: FilterFn<typeof features, Person> = (
64
+ // 2. Extend TableFeatures so FilterFn / SortFn can read filterMeta types.
65
+ type FuzzyFeatures = TableFeatures & { filterMeta: FuzzyFilterMeta }
66
+
67
+ const fuzzyFilter: FilterFn<FuzzyFeatures, Person> = (
59
68
  row,
60
69
  columnId,
61
70
  value,
@@ -66,7 +75,7 @@ const fuzzyFilter: FilterFn<typeof features, Person> = (
66
75
  return itemRank.passed
67
76
  }
68
77
 
69
- const fuzzySort: SortFn<typeof features, Person> = (rowA, rowB, columnId) => {
78
+ const fuzzySort: SortFn<FuzzyFeatures, Person> = (rowA, rowB, columnId) => {
70
79
  let dir = 0
71
80
  if (rowA.columnFiltersMeta[columnId]) {
72
81
  dir = compareItems(
@@ -77,21 +86,35 @@ const fuzzySort: SortFn<typeof features, Person> = (rowA, rowB, columnId) => {
77
86
  return dir === 0 ? sortFns.alphanumeric(rowA, rowB, columnId) : dir
78
87
  }
79
88
 
89
+ // 3. Register everything on features — no rowModels option needed.
90
+ const features = tableFeatures({
91
+ columnFilteringFeature,
92
+ globalFilteringFeature,
93
+ rowSortingFeature,
94
+ filteredRowModel: createFilteredRowModel(),
95
+ sortedRowModel: createSortedRowModel(),
96
+ filterFns: { ...filterFns, fuzzy: fuzzyFilter },
97
+ sortFns: { ...sortFns, fuzzy: fuzzySort },
98
+ filterMeta: metaHelper<FuzzyFilterMeta>(),
99
+ })
100
+
80
101
  const table = constructTable({
81
102
  features,
82
- rowModels: {
83
- filteredRowModel: createFilteredRowModel({
84
- ...filterFns,
85
- fuzzy: fuzzyFilter,
86
- }),
87
- sortedRowModel: createSortedRowModel(sortFns),
88
- },
89
103
  columns,
90
104
  data,
91
105
  globalFilterFn: 'fuzzy',
92
106
  })
93
107
  ```
94
108
 
109
+ Use string refs in column defs when the fn is registered:
110
+
111
+ ```ts
112
+ columnHelper.accessor('fullName', {
113
+ filterFn: 'fuzzy', // string ref — typechecks because 'fuzzy' is in features.filterFns
114
+ sortFn: 'fuzzy',
115
+ })
116
+ ```
117
+
95
118
  ## Additional MEDIUM-priority failure modes
96
119
 
97
120
  ### Using `state.columnFilters` AND `initialState.columnFilters` simultaneously
@@ -131,11 +154,13 @@ Wrong:
131
154
  ```tsx
132
155
  // filterFromLeafRows hides children that don't match individually
133
156
  const table = useTable({
134
- features: tableFeatures({ columnFilteringFeature, rowExpandingFeature }),
135
- rowModels: {
136
- filteredRowModel: createFilteredRowModel(filterFns),
157
+ features: tableFeatures({
158
+ columnFilteringFeature,
159
+ rowExpandingFeature,
160
+ filteredRowModel: createFilteredRowModel(),
137
161
  expandedRowModel: createExpandedRowModel(),
138
- },
162
+ filterFns,
163
+ }),
139
164
  columns,
140
165
  data,
141
166
  getSubRows: (r) => r.subRows,
@@ -150,11 +175,13 @@ Correct:
150
175
  ```tsx
151
176
  // Filter root-only to preserve all sub-rows under a matching parent
152
177
  const table = useTable({
153
- features: tableFeatures({ columnFilteringFeature, rowExpandingFeature }),
154
- rowModels: {
155
- filteredRowModel: createFilteredRowModel(filterFns),
178
+ features: tableFeatures({
179
+ columnFilteringFeature,
180
+ rowExpandingFeature,
181
+ filteredRowModel: createFilteredRowModel(),
156
182
  expandedRowModel: createExpandedRowModel(),
157
- },
183
+ filterFns,
184
+ }),
158
185
  columns,
159
186
  data,
160
187
  getSubRows: (r) => r.subRows,