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

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 (278) hide show
  1. package/dist/core/cells/coreCellsFeature.cjs +11 -20
  2. package/dist/core/cells/coreCellsFeature.cjs.map +1 -1
  3. package/dist/core/cells/coreCellsFeature.d.cts +4 -12
  4. package/dist/core/cells/coreCellsFeature.d.ts +4 -12
  5. package/dist/core/cells/coreCellsFeature.js +12 -20
  6. package/dist/core/cells/coreCellsFeature.js.map +1 -1
  7. package/dist/core/columns/coreColumnsFeature.cjs +59 -68
  8. package/dist/core/columns/coreColumnsFeature.cjs.map +1 -1
  9. package/dist/core/columns/coreColumnsFeature.d.cts +4 -12
  10. package/dist/core/columns/coreColumnsFeature.d.ts +4 -12
  11. package/dist/core/columns/coreColumnsFeature.js +60 -68
  12. package/dist/core/columns/coreColumnsFeature.js.map +1 -1
  13. package/dist/core/headers/buildHeaderGroups.cjs.map +1 -1
  14. package/dist/core/headers/buildHeaderGroups.js.map +1 -1
  15. package/dist/core/headers/coreHeadersFeature.cjs +44 -53
  16. package/dist/core/headers/coreHeadersFeature.cjs.map +1 -1
  17. package/dist/core/headers/coreHeadersFeature.d.cts +4 -12
  18. package/dist/core/headers/coreHeadersFeature.d.ts +4 -12
  19. package/dist/core/headers/coreHeadersFeature.js +45 -53
  20. package/dist/core/headers/coreHeadersFeature.js.map +1 -1
  21. package/dist/core/headers/coreHeadersFeature.utils.cjs.map +1 -1
  22. package/dist/core/headers/coreHeadersFeature.utils.js.map +1 -1
  23. package/dist/core/row-models/coreRowModelsFeature.cjs +17 -26
  24. package/dist/core/row-models/coreRowModelsFeature.cjs.map +1 -1
  25. package/dist/core/row-models/coreRowModelsFeature.d.cts +4 -12
  26. package/dist/core/row-models/coreRowModelsFeature.d.ts +4 -12
  27. package/dist/core/row-models/coreRowModelsFeature.js +18 -26
  28. package/dist/core/row-models/coreRowModelsFeature.js.map +1 -1
  29. package/dist/core/row-models/coreRowModelsFeature.types.d.cts +3 -5
  30. package/dist/core/row-models/coreRowModelsFeature.types.d.ts +3 -5
  31. package/dist/core/row-models/createCoreRowModel.cjs.map +1 -1
  32. package/dist/core/row-models/createCoreRowModel.js.map +1 -1
  33. package/dist/core/rows/coreRowsFeature.cjs +27 -36
  34. package/dist/core/rows/coreRowsFeature.cjs.map +1 -1
  35. package/dist/core/rows/coreRowsFeature.d.cts +4 -12
  36. package/dist/core/rows/coreRowsFeature.d.ts +4 -12
  37. package/dist/core/rows/coreRowsFeature.js +28 -36
  38. package/dist/core/rows/coreRowsFeature.js.map +1 -1
  39. package/dist/core/table/constructTable.cjs +2 -2
  40. package/dist/core/table/constructTable.cjs.map +1 -1
  41. package/dist/core/table/constructTable.js +2 -2
  42. package/dist/core/table/constructTable.js.map +1 -1
  43. package/dist/core/table/coreTablesFeature.cjs +7 -16
  44. package/dist/core/table/coreTablesFeature.cjs.map +1 -1
  45. package/dist/core/table/coreTablesFeature.d.cts +4 -12
  46. package/dist/core/table/coreTablesFeature.d.ts +4 -12
  47. package/dist/core/table/coreTablesFeature.js +8 -16
  48. package/dist/core/table/coreTablesFeature.js.map +1 -1
  49. package/dist/core/table/coreTablesFeature.utils.cjs.map +1 -1
  50. package/dist/core/table/coreTablesFeature.utils.js.map +1 -1
  51. package/dist/features/column-faceting/columnFacetingFeature.cjs +49 -61
  52. package/dist/features/column-faceting/columnFacetingFeature.cjs.map +1 -1
  53. package/dist/features/column-faceting/columnFacetingFeature.d.cts +4 -15
  54. package/dist/features/column-faceting/columnFacetingFeature.d.ts +4 -15
  55. package/dist/features/column-faceting/columnFacetingFeature.js +50 -61
  56. package/dist/features/column-faceting/columnFacetingFeature.js.map +1 -1
  57. package/dist/features/column-faceting/createFacetedMinMaxValues.cjs.map +1 -1
  58. package/dist/features/column-faceting/createFacetedMinMaxValues.js.map +1 -1
  59. package/dist/features/column-faceting/createFacetedRowModel.cjs.map +1 -1
  60. package/dist/features/column-faceting/createFacetedRowModel.js.map +1 -1
  61. package/dist/features/column-faceting/createFacetedUniqueValues.cjs.map +1 -1
  62. package/dist/features/column-faceting/createFacetedUniqueValues.js.map +1 -1
  63. package/dist/features/column-filtering/columnFilteringFeature.cjs +40 -53
  64. package/dist/features/column-filtering/columnFilteringFeature.cjs.map +1 -1
  65. package/dist/features/column-filtering/columnFilteringFeature.d.cts +4 -16
  66. package/dist/features/column-filtering/columnFilteringFeature.d.ts +4 -16
  67. package/dist/features/column-filtering/columnFilteringFeature.js +41 -53
  68. package/dist/features/column-filtering/columnFilteringFeature.js.map +1 -1
  69. package/dist/features/column-filtering/columnFilteringFeature.types.d.cts +3 -3
  70. package/dist/features/column-filtering/columnFilteringFeature.types.d.ts +3 -3
  71. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs.map +1 -1
  72. package/dist/features/column-filtering/columnFilteringFeature.utils.d.cts +1 -1
  73. package/dist/features/column-filtering/columnFilteringFeature.utils.d.ts +1 -1
  74. package/dist/features/column-filtering/columnFilteringFeature.utils.js.map +1 -1
  75. package/dist/features/column-filtering/createFilteredRowModel.cjs.map +1 -1
  76. package/dist/features/column-filtering/createFilteredRowModel.d.cts +1 -1
  77. package/dist/features/column-filtering/createFilteredRowModel.d.ts +1 -1
  78. package/dist/features/column-filtering/createFilteredRowModel.js.map +1 -1
  79. package/dist/features/column-grouping/columnGroupingFeature.cjs +57 -69
  80. package/dist/features/column-grouping/columnGroupingFeature.cjs.map +1 -1
  81. package/dist/features/column-grouping/columnGroupingFeature.d.cts +4 -15
  82. package/dist/features/column-grouping/columnGroupingFeature.d.ts +4 -15
  83. package/dist/features/column-grouping/columnGroupingFeature.js +58 -69
  84. package/dist/features/column-grouping/columnGroupingFeature.js.map +1 -1
  85. package/dist/features/column-grouping/createGroupedRowModel.cjs.map +1 -1
  86. package/dist/features/column-grouping/createGroupedRowModel.js.map +1 -1
  87. package/dist/features/column-ordering/columnOrderingFeature.cjs +47 -59
  88. package/dist/features/column-ordering/columnOrderingFeature.cjs.map +1 -1
  89. package/dist/features/column-ordering/columnOrderingFeature.d.cts +4 -15
  90. package/dist/features/column-ordering/columnOrderingFeature.d.ts +4 -15
  91. package/dist/features/column-ordering/columnOrderingFeature.js +48 -59
  92. package/dist/features/column-ordering/columnOrderingFeature.js.map +1 -1
  93. package/dist/features/column-pinning/columnPinningFeature.cjs +209 -221
  94. package/dist/features/column-pinning/columnPinningFeature.cjs.map +1 -1
  95. package/dist/features/column-pinning/columnPinningFeature.d.cts +4 -15
  96. package/dist/features/column-pinning/columnPinningFeature.d.ts +4 -15
  97. package/dist/features/column-pinning/columnPinningFeature.js +210 -221
  98. package/dist/features/column-pinning/columnPinningFeature.js.map +1 -1
  99. package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
  100. package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +12 -12
  101. package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +12 -12
  102. package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
  103. package/dist/features/column-resizing/columnResizingFeature.cjs +31 -43
  104. package/dist/features/column-resizing/columnResizingFeature.cjs.map +1 -1
  105. package/dist/features/column-resizing/columnResizingFeature.d.cts +4 -15
  106. package/dist/features/column-resizing/columnResizingFeature.d.ts +4 -15
  107. package/dist/features/column-resizing/columnResizingFeature.js +32 -43
  108. package/dist/features/column-resizing/columnResizingFeature.js.map +1 -1
  109. package/dist/features/column-sizing/columnSizingFeature.cjs +112 -125
  110. package/dist/features/column-sizing/columnSizingFeature.cjs.map +1 -1
  111. package/dist/features/column-sizing/columnSizingFeature.d.cts +4 -16
  112. package/dist/features/column-sizing/columnSizingFeature.d.ts +4 -16
  113. package/dist/features/column-sizing/columnSizingFeature.js +113 -125
  114. package/dist/features/column-sizing/columnSizingFeature.js.map +1 -1
  115. package/dist/features/column-sizing/columnSizingFeature.utils.d.cts +3 -3
  116. package/dist/features/column-sizing/columnSizingFeature.utils.d.ts +3 -3
  117. package/dist/features/column-visibility/columnVisibilityFeature.cjs +83 -95
  118. package/dist/features/column-visibility/columnVisibilityFeature.cjs.map +1 -1
  119. package/dist/features/column-visibility/columnVisibilityFeature.d.cts +4 -15
  120. package/dist/features/column-visibility/columnVisibilityFeature.d.ts +4 -15
  121. package/dist/features/column-visibility/columnVisibilityFeature.js +84 -95
  122. package/dist/features/column-visibility/columnVisibilityFeature.js.map +1 -1
  123. package/dist/features/global-filtering/globalFilteringFeature.cjs +31 -43
  124. package/dist/features/global-filtering/globalFilteringFeature.cjs.map +1 -1
  125. package/dist/features/global-filtering/globalFilteringFeature.d.cts +4 -15
  126. package/dist/features/global-filtering/globalFilteringFeature.d.ts +4 -15
  127. package/dist/features/global-filtering/globalFilteringFeature.js +32 -43
  128. package/dist/features/global-filtering/globalFilteringFeature.js.map +1 -1
  129. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs.map +1 -1
  130. package/dist/features/global-filtering/globalFilteringFeature.utils.d.cts +4 -2
  131. package/dist/features/global-filtering/globalFilteringFeature.utils.d.ts +4 -2
  132. package/dist/features/global-filtering/globalFilteringFeature.utils.js.map +1 -1
  133. package/dist/features/row-expanding/createExpandedRowModel.cjs.map +1 -1
  134. package/dist/features/row-expanding/createExpandedRowModel.js.map +1 -1
  135. package/dist/features/row-expanding/rowExpandingFeature.cjs +37 -49
  136. package/dist/features/row-expanding/rowExpandingFeature.cjs.map +1 -1
  137. package/dist/features/row-expanding/rowExpandingFeature.d.cts +4 -15
  138. package/dist/features/row-expanding/rowExpandingFeature.d.ts +4 -15
  139. package/dist/features/row-expanding/rowExpandingFeature.js +38 -49
  140. package/dist/features/row-expanding/rowExpandingFeature.js.map +1 -1
  141. package/dist/features/row-pagination/createPaginatedRowModel.cjs.map +1 -1
  142. package/dist/features/row-pagination/createPaginatedRowModel.js.map +1 -1
  143. package/dist/features/row-pagination/rowPaginationFeature.cjs +35 -47
  144. package/dist/features/row-pagination/rowPaginationFeature.cjs.map +1 -1
  145. package/dist/features/row-pagination/rowPaginationFeature.d.cts +4 -15
  146. package/dist/features/row-pagination/rowPaginationFeature.d.ts +4 -15
  147. package/dist/features/row-pagination/rowPaginationFeature.js +36 -47
  148. package/dist/features/row-pagination/rowPaginationFeature.js.map +1 -1
  149. package/dist/features/row-pinning/rowPinningFeature.cjs +55 -67
  150. package/dist/features/row-pinning/rowPinningFeature.cjs.map +1 -1
  151. package/dist/features/row-pinning/rowPinningFeature.d.cts +4 -15
  152. package/dist/features/row-pinning/rowPinningFeature.d.ts +4 -15
  153. package/dist/features/row-pinning/rowPinningFeature.js +56 -67
  154. package/dist/features/row-pinning/rowPinningFeature.js.map +1 -1
  155. package/dist/features/row-selection/rowSelectionFeature.cjs +65 -77
  156. package/dist/features/row-selection/rowSelectionFeature.cjs.map +1 -1
  157. package/dist/features/row-selection/rowSelectionFeature.d.cts +4 -15
  158. package/dist/features/row-selection/rowSelectionFeature.d.ts +4 -15
  159. package/dist/features/row-selection/rowSelectionFeature.js +66 -77
  160. package/dist/features/row-selection/rowSelectionFeature.js.map +1 -1
  161. package/dist/features/row-sorting/createSortedRowModel.cjs.map +1 -1
  162. package/dist/features/row-sorting/createSortedRowModel.js.map +1 -1
  163. package/dist/features/row-sorting/rowSortingFeature.cjs +45 -57
  164. package/dist/features/row-sorting/rowSortingFeature.cjs.map +1 -1
  165. package/dist/features/row-sorting/rowSortingFeature.d.cts +4 -15
  166. package/dist/features/row-sorting/rowSortingFeature.d.ts +4 -15
  167. package/dist/features/row-sorting/rowSortingFeature.js +46 -57
  168. package/dist/features/row-sorting/rowSortingFeature.js.map +1 -1
  169. package/dist/features/row-sorting/rowSortingFeature.utils.cjs +8 -5
  170. package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
  171. package/dist/features/row-sorting/rowSortingFeature.utils.js +8 -5
  172. package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
  173. package/dist/fns/aggregationFns.cjs +18 -18
  174. package/dist/fns/aggregationFns.cjs.map +1 -1
  175. package/dist/fns/aggregationFns.d.cts +21 -19
  176. package/dist/fns/aggregationFns.d.ts +21 -19
  177. package/dist/fns/aggregationFns.js +18 -18
  178. package/dist/fns/aggregationFns.js.map +1 -1
  179. package/dist/fns/filterFns.cjs +51 -65
  180. package/dist/fns/filterFns.cjs.map +1 -1
  181. package/dist/fns/filterFns.d.cts +82 -28
  182. package/dist/fns/filterFns.d.ts +82 -28
  183. package/dist/fns/filterFns.js +51 -65
  184. package/dist/fns/filterFns.js.map +1 -1
  185. package/dist/fns/sortFns.cjs +18 -6
  186. package/dist/fns/sortFns.cjs.map +1 -1
  187. package/dist/fns/sortFns.d.cts +15 -13
  188. package/dist/fns/sortFns.d.ts +15 -13
  189. package/dist/fns/sortFns.js +18 -6
  190. package/dist/fns/sortFns.js.map +1 -1
  191. package/dist/index.cjs +0 -20
  192. package/dist/index.d.cts +34 -34
  193. package/dist/index.d.ts +34 -34
  194. package/dist/index.js +21 -21
  195. package/dist/types/Cell.d.cts +3 -8
  196. package/dist/types/Cell.d.ts +3 -8
  197. package/dist/types/Column.d.cts +3 -8
  198. package/dist/types/Column.d.ts +3 -8
  199. package/dist/types/ColumnDef.d.cts +3 -8
  200. package/dist/types/ColumnDef.d.ts +3 -8
  201. package/dist/types/Header.d.cts +3 -8
  202. package/dist/types/Header.d.ts +3 -8
  203. package/dist/types/HeaderGroup.d.cts +3 -8
  204. package/dist/types/HeaderGroup.d.ts +3 -8
  205. package/dist/types/Row.d.cts +3 -8
  206. package/dist/types/Row.d.ts +3 -8
  207. package/dist/types/RowModel.d.cts +4 -10
  208. package/dist/types/RowModel.d.ts +4 -10
  209. package/dist/types/RowModelFns.d.cts +3 -8
  210. package/dist/types/RowModelFns.d.ts +3 -8
  211. package/dist/types/Table.d.cts +3 -8
  212. package/dist/types/Table.d.ts +3 -8
  213. package/dist/types/TableFeatures.d.cts +13 -39
  214. package/dist/types/TableFeatures.d.ts +13 -39
  215. package/dist/types/TableOptions.d.cts +3 -4
  216. package/dist/types/TableOptions.d.ts +3 -4
  217. package/dist/types/TableState.d.cts +5 -10
  218. package/dist/types/TableState.d.ts +5 -10
  219. package/dist/utils.cjs.map +1 -1
  220. package/dist/utils.d.cts +1 -1
  221. package/dist/utils.d.ts +1 -1
  222. package/dist/utils.js.map +1 -1
  223. package/package.json +1 -1
  224. package/src/core/cells/coreCellsFeature.ts +17 -39
  225. package/src/core/columns/coreColumnsFeature.ts +56 -83
  226. package/src/core/headers/buildHeaderGroups.ts +1 -1
  227. package/src/core/headers/coreHeadersFeature.ts +42 -64
  228. package/src/core/headers/coreHeadersFeature.utils.ts +1 -1
  229. package/src/core/row-models/coreRowModelsFeature.ts +43 -64
  230. package/src/core/row-models/coreRowModelsFeature.types.ts +2 -6
  231. package/src/core/row-models/createCoreRowModel.ts +1 -1
  232. package/src/core/rows/coreRowsFeature.ts +45 -72
  233. package/src/core/table/constructTable.ts +10 -7
  234. package/src/core/table/coreTablesFeature.ts +13 -35
  235. package/src/core/table/coreTablesFeature.utils.ts +1 -1
  236. package/src/features/column-faceting/columnFacetingFeature.ts +71 -102
  237. package/src/features/column-faceting/createFacetedMinMaxValues.ts +1 -1
  238. package/src/features/column-faceting/createFacetedRowModel.ts +1 -1
  239. package/src/features/column-faceting/createFacetedUniqueValues.ts +1 -1
  240. package/src/features/column-filtering/columnFilteringFeature.ts +60 -103
  241. package/src/features/column-filtering/columnFilteringFeature.types.ts +3 -3
  242. package/src/features/column-filtering/columnFilteringFeature.utils.ts +4 -4
  243. package/src/features/column-filtering/createFilteredRowModel.ts +2 -2
  244. package/src/features/column-grouping/columnGroupingFeature.ts +82 -126
  245. package/src/features/column-grouping/createGroupedRowModel.ts +1 -1
  246. package/src/features/column-ordering/columnOrderingFeature.ts +52 -84
  247. package/src/features/column-pinning/columnPinningFeature.ts +268 -304
  248. package/src/features/column-pinning/columnPinningFeature.utils.ts +5 -5
  249. package/src/features/column-resizing/columnResizingFeature.ts +44 -78
  250. package/src/features/column-sizing/columnSizingFeature.ts +115 -152
  251. package/src/features/column-visibility/columnVisibilityFeature.ts +92 -129
  252. package/src/features/global-filtering/globalFilteringFeature.ts +45 -79
  253. package/src/features/global-filtering/globalFilteringFeature.utils.ts +4 -2
  254. package/src/features/row-expanding/createExpandedRowModel.ts +1 -1
  255. package/src/features/row-expanding/rowExpandingFeature.ts +65 -101
  256. package/src/features/row-pagination/createPaginatedRowModel.ts +1 -1
  257. package/src/features/row-pagination/rowPaginationFeature.ts +69 -103
  258. package/src/features/row-pinning/rowPinningFeature.ts +72 -104
  259. package/src/features/row-selection/rowSelectionFeature.ts +103 -135
  260. package/src/features/row-sorting/createSortedRowModel.ts +1 -1
  261. package/src/features/row-sorting/rowSortingFeature.ts +73 -114
  262. package/src/features/row-sorting/rowSortingFeature.utils.ts +8 -6
  263. package/src/fns/aggregationFns.ts +26 -42
  264. package/src/fns/filterFns.ts +231 -264
  265. package/src/fns/sortFns.ts +51 -29
  266. package/src/types/Cell.ts +3 -19
  267. package/src/types/Column.ts +2 -18
  268. package/src/types/ColumnDef.ts +2 -18
  269. package/src/types/Header.ts +2 -18
  270. package/src/types/HeaderGroup.ts +2 -13
  271. package/src/types/Row.ts +2 -17
  272. package/src/types/RowModel.ts +3 -25
  273. package/src/types/RowModelFns.ts +2 -17
  274. package/src/types/Table.ts +2 -17
  275. package/src/types/TableFeatures.ts +51 -112
  276. package/src/types/TableOptions.ts +1 -12
  277. package/src/types/TableState.ts +4 -30
  278. package/src/utils.ts +5 -4
@@ -1,7 +1,6 @@
1
1
  import type { RowData } from '../types/type-utils'
2
2
  import type { TableFeatures } from '../types/TableFeatures'
3
3
  import type { Row } from '../types/Row'
4
- import type { FilterFn } from '../features/column-filtering/columnFilteringFeature.types'
5
4
 
6
5
  // Basic filters
7
6
 
@@ -10,18 +9,16 @@ import type { FilterFn } from '../features/column-filtering/columnFilteringFeatu
10
9
  *
11
10
  * Uses JavaScript `===` comparison and auto-removes empty filter values.
12
11
  */
13
- export const filterFn_equals: FilterFn<any, any> = <
14
- TFeatures extends TableFeatures,
15
- TData extends RowData,
16
- >(
17
- row: Row<TFeatures, TData>,
18
- columnId: string,
19
- filterValue: unknown,
20
- ) => {
21
- return row.getValue(columnId) === filterValue
22
- }
23
-
24
- filterFn_equals.autoRemove = (val: any) => testFalsy(val)
12
+ export const filterFn_equals = Object.assign(
13
+ <TFeatures extends TableFeatures, TData extends RowData>(
14
+ row: Row<TFeatures, TData>,
15
+ columnId: string,
16
+ filterValue: unknown,
17
+ ) => {
18
+ return row.getValue(columnId) === filterValue
19
+ },
20
+ { autoRemove: (val: any) => testFalsy(val) },
21
+ )
25
22
 
26
23
  /**
27
24
  * Keeps rows whose column value is loosely equal to the filter value.
@@ -29,18 +26,16 @@ filterFn_equals.autoRemove = (val: any) => testFalsy(val)
29
26
  * Uses JavaScript `==` comparison and auto-removes empty filter values. This is
30
27
  * useful for matching string input against numeric row values.
31
28
  */
32
- export const filterFn_weakEquals: FilterFn<any, any> = <
33
- TFeatures extends TableFeatures,
34
- TData extends RowData,
35
- >(
36
- row: Row<TFeatures, TData>,
37
- columnId: string,
38
- filterValue: unknown,
39
- ) => {
40
- return row.getValue(columnId) == filterValue
41
- }
42
-
43
- filterFn_weakEquals.autoRemove = (val: any) => testFalsy(val)
29
+ export const filterFn_weakEquals = Object.assign(
30
+ <TFeatures extends TableFeatures, TData extends RowData>(
31
+ row: Row<TFeatures, TData>,
32
+ columnId: string,
33
+ filterValue: unknown,
34
+ ) => {
35
+ return row.getValue(columnId) == filterValue
36
+ },
37
+ { autoRemove: (val: any) => testFalsy(val) },
38
+ )
44
39
 
45
40
  // String filters
46
41
 
@@ -49,20 +44,18 @@ filterFn_weakEquals.autoRemove = (val: any) => testFalsy(val)
49
44
  *
50
45
  * Matching is case-sensitive and empty filter values are auto-removed.
51
46
  */
52
- export const filterFn_includesStringSensitive: FilterFn<any, any> = <
53
- TFeatures extends TableFeatures,
54
- TData extends RowData,
55
- >(
56
- row: Row<TFeatures, TData>,
57
- columnId: string,
58
- filterValue: string,
59
- ) => {
60
- return Boolean(
61
- row.getValue(columnId)?.toString().includes(filterValue.toString()),
62
- )
63
- }
64
-
65
- filterFn_includesStringSensitive.autoRemove = (val: any) => testFalsy(val)
47
+ export const filterFn_includesStringSensitive = Object.assign(
48
+ <TFeatures extends TableFeatures, TData extends RowData>(
49
+ row: Row<TFeatures, TData>,
50
+ columnId: string,
51
+ filterValue: unknown,
52
+ ) => {
53
+ return Boolean(
54
+ row.getValue(columnId)?.toString().includes(String(filterValue)),
55
+ )
56
+ },
57
+ { autoRemove: (val: any) => testFalsy(val) },
58
+ )
66
59
 
67
60
  /**
68
61
  * Keeps rows whose stringified column value includes the filter text.
@@ -70,24 +63,22 @@ filterFn_includesStringSensitive.autoRemove = (val: any) => testFalsy(val)
70
63
  * Both values are lowercased before comparison, and empty filter values are
71
64
  * auto-removed.
72
65
  */
73
- export const filterFn_includesString: FilterFn<any, any> = <
74
- TFeatures extends TableFeatures,
75
- TData extends RowData,
76
- >(
77
- row: Row<TFeatures, TData>,
78
- columnId: string,
79
- filterValue: string,
80
- ) => {
81
- return Boolean(
82
- row
83
- .getValue(columnId)
84
- ?.toString()
85
- .toLowerCase()
86
- .includes(filterValue.toString().toLowerCase()),
87
- )
88
- }
89
-
90
- filterFn_includesString.autoRemove = (val: any) => testFalsy(val)
66
+ export const filterFn_includesString = Object.assign(
67
+ <TFeatures extends TableFeatures, TData extends RowData>(
68
+ row: Row<TFeatures, TData>,
69
+ columnId: string,
70
+ filterValue: unknown,
71
+ ) => {
72
+ return Boolean(
73
+ row
74
+ .getValue(columnId)
75
+ ?.toString()
76
+ .toLowerCase()
77
+ .includes(String(filterValue).toLowerCase()),
78
+ )
79
+ },
80
+ { autoRemove: (val: any) => testFalsy(val) },
81
+ )
91
82
 
92
83
  /**
93
84
  * Keeps rows whose stringified column value equals the filter text.
@@ -95,39 +86,35 @@ filterFn_includesString.autoRemove = (val: any) => testFalsy(val)
95
86
  * Both values are lowercased before comparison, and empty filter values are
96
87
  * auto-removed.
97
88
  */
98
- export const filterFn_equalsString: FilterFn<any, any> = <
99
- TFeatures extends TableFeatures,
100
- TData extends RowData,
101
- >(
102
- row: Row<TFeatures, TData>,
103
- columnId: string,
104
- filterValue: string,
105
- ) => {
106
- return (
107
- row.getValue(columnId)?.toString().toLowerCase() ===
108
- filterValue.toLowerCase()
109
- )
110
- }
111
-
112
- filterFn_equalsString.autoRemove = (val: any) => testFalsy(val)
89
+ export const filterFn_equalsString = Object.assign(
90
+ <TFeatures extends TableFeatures, TData extends RowData>(
91
+ row: Row<TFeatures, TData>,
92
+ columnId: string,
93
+ filterValue: unknown,
94
+ ) => {
95
+ return (
96
+ row.getValue(columnId)?.toString().toLowerCase() ===
97
+ String(filterValue).toLowerCase()
98
+ )
99
+ },
100
+ { autoRemove: (val: any) => testFalsy(val) },
101
+ )
113
102
 
114
103
  /**
115
104
  * Keeps rows whose stringified column value exactly equals the filter text.
116
105
  *
117
106
  * Matching is case-sensitive and empty filter values are auto-removed.
118
107
  */
119
- export const filterFn_equalsStringSensitive: FilterFn<any, any> = <
120
- TFeatures extends TableFeatures,
121
- TData extends RowData,
122
- >(
123
- row: Row<TFeatures, TData>,
124
- columnId: string,
125
- filterValue: string,
126
- ) => {
127
- return row.getValue(columnId)?.toString() === filterValue
128
- }
129
-
130
- filterFn_equalsStringSensitive.autoRemove = (val: any) => testFalsy(val)
108
+ export const filterFn_equalsStringSensitive = Object.assign(
109
+ <TFeatures extends TableFeatures, TData extends RowData>(
110
+ row: Row<TFeatures, TData>,
111
+ columnId: string,
112
+ filterValue: unknown,
113
+ ) => {
114
+ return row.getValue(columnId)?.toString() === String(filterValue)
115
+ },
116
+ { autoRemove: (val: any) => testFalsy(val) },
117
+ )
131
118
 
132
119
  // Number filters
133
120
 
@@ -137,86 +124,78 @@ filterFn_equalsStringSensitive.autoRemove = (val: any) => testFalsy(val)
137
124
  * Numeric values are compared numerically when both sides can be coerced to
138
125
  * numbers; otherwise normalized strings are compared.
139
126
  */
140
- export const filterFn_greaterThan: FilterFn<any, any> = <
141
- TFeatures extends TableFeatures,
142
- TData extends RowData,
143
- >(
144
- row: Row<TFeatures, TData>,
145
- columnId: string,
146
- filterValue: Date | number | string,
147
- ) => {
148
- const rowValue = row.getValue(columnId)
149
- const numericRowValue =
150
- rowValue === null || rowValue === undefined ? 0 : +rowValue
151
- const numericFilterValue = +filterValue
152
-
153
- if (!isNaN(numericFilterValue) && !isNaN(numericRowValue)) {
154
- return numericRowValue > numericFilterValue
155
- }
156
-
157
- const stringValue = (rowValue ?? '').toString().toLowerCase().trim()
158
- const stringFilterValue = filterValue.toString().toLowerCase().trim()
159
- return stringValue > stringFilterValue
160
- }
161
-
162
- filterFn_greaterThan.resolveFilterValue = (val: any) => testFalsy(val)
127
+ export const filterFn_greaterThan = Object.assign(
128
+ <TFeatures extends TableFeatures, TData extends RowData>(
129
+ row: Row<TFeatures, TData>,
130
+ columnId: string,
131
+ filterValue: unknown,
132
+ ) => {
133
+ const rowValue = row.getValue(columnId)
134
+ const numericRowValue =
135
+ rowValue === null || rowValue === undefined ? 0 : +rowValue
136
+ const numericFilterValue = Number(filterValue)
137
+
138
+ if (!isNaN(numericFilterValue) && !isNaN(numericRowValue)) {
139
+ return numericRowValue > numericFilterValue
140
+ }
141
+
142
+ const stringValue = (rowValue ?? '').toString().toLowerCase().trim()
143
+ const stringFilterValue = String(filterValue).toLowerCase().trim()
144
+ return stringValue > stringFilterValue
145
+ },
146
+ { resolveFilterValue: (val: any) => testFalsy(val) },
147
+ )
163
148
 
164
149
  /**
165
150
  * Keeps rows whose value is greater than or equal to the filter value.
166
151
  *
167
152
  * Delegates to the built-in greater-than and equality comparisons.
168
153
  */
169
- export const filterFn_greaterThanOrEqualTo: FilterFn<any, any> = <
170
- TFeatures extends TableFeatures,
171
- TData extends RowData,
172
- >(
173
- row: Row<TFeatures, TData>,
174
- columnId: string,
175
- filterValue: Date | number | string,
176
- ) => {
177
- return (
178
- filterFn_greaterThan(row as any, columnId, filterValue) ||
179
- filterFn_equals(row as any, columnId, filterValue)
180
- )
181
- }
182
-
183
- filterFn_greaterThanOrEqualTo.resolveFilterValue = (val: any) => testFalsy(val)
154
+ export const filterFn_greaterThanOrEqualTo = Object.assign(
155
+ <TFeatures extends TableFeatures, TData extends RowData>(
156
+ row: Row<TFeatures, TData>,
157
+ columnId: string,
158
+ filterValue: unknown,
159
+ ) => {
160
+ return (
161
+ filterFn_greaterThan(row, columnId, filterValue) ||
162
+ filterFn_equals(row, columnId, filterValue)
163
+ )
164
+ },
165
+ { resolveFilterValue: (val: any) => testFalsy(val) },
166
+ )
184
167
 
185
168
  /**
186
169
  * Keeps rows whose value is less than the filter value.
187
170
  *
188
171
  * This is implemented as the inverse of greater-than-or-equal comparison.
189
172
  */
190
- export const filterFn_lessThan: FilterFn<any, any> = <
191
- TFeatures extends TableFeatures,
192
- TData extends RowData,
193
- >(
194
- row: Row<TFeatures, TData>,
195
- columnId: string,
196
- filterValue: Date | number | string,
197
- ) => {
198
- return !filterFn_greaterThanOrEqualTo(row as any, columnId, filterValue)
199
- }
200
-
201
- filterFn_lessThan.resolveFilterValue = (val: any) => testFalsy(val)
173
+ export const filterFn_lessThan = Object.assign(
174
+ <TFeatures extends TableFeatures, TData extends RowData>(
175
+ row: Row<TFeatures, TData>,
176
+ columnId: string,
177
+ filterValue: unknown,
178
+ ) => {
179
+ return !filterFn_greaterThanOrEqualTo(row, columnId, filterValue)
180
+ },
181
+ { resolveFilterValue: (val: any) => testFalsy(val) },
182
+ )
202
183
 
203
184
  /**
204
185
  * Keeps rows whose value is less than or equal to the filter value.
205
186
  *
206
187
  * This is implemented as the inverse of greater-than comparison.
207
188
  */
208
- export const filterFn_lessThanOrEqualTo: FilterFn<any, any> = <
209
- TFeatures extends TableFeatures,
210
- TData extends RowData,
211
- >(
212
- row: Row<TFeatures, TData>,
213
- columnId: string,
214
- filterValue: Date | number | string,
215
- ) => {
216
- return !filterFn_greaterThan(row as any, columnId, filterValue)
217
- }
218
-
219
- filterFn_lessThanOrEqualTo.resolveFilterValue = (val: any) => testFalsy(val)
189
+ export const filterFn_lessThanOrEqualTo = Object.assign(
190
+ <TFeatures extends TableFeatures, TData extends RowData>(
191
+ row: Row<TFeatures, TData>,
192
+ columnId: string,
193
+ filterValue: unknown,
194
+ ) => {
195
+ return !filterFn_greaterThan(row, columnId, filterValue)
196
+ },
197
+ { resolveFilterValue: (val: any) => testFalsy(val) },
198
+ )
220
199
 
221
200
  // Range filters
222
201
 
@@ -225,46 +204,42 @@ filterFn_lessThanOrEqualTo.resolveFilterValue = (val: any) => testFalsy(val)
225
204
  *
226
205
  * Blank range endpoints are treated as open-ended.
227
206
  */
228
- const filterFn_between: FilterFn<any, any> = <
229
- TFeatures extends TableFeatures,
230
- TData extends RowData,
231
- >(
232
- row: Row<TFeatures, TData>,
233
- columnId: string,
234
- filterValues: [number | string, number | string],
235
- ): boolean =>
236
- ((['', undefined] as Array<any>).includes(filterValues[0]) ||
237
- filterFn_greaterThan(row as any, columnId, filterValues[0])) &&
238
- ((!isNaN(+filterValues[0]) &&
239
- !isNaN(+filterValues[1]) &&
240
- +filterValues[0] > +filterValues[1]) ||
241
- (['', undefined] as Array<any>).includes(filterValues[1]) ||
242
- filterFn_lessThan(row as any, columnId, filterValues[1]))
243
-
244
- filterFn_between.autoRemove = (val: any) => !val
207
+ const filterFn_between = Object.assign(
208
+ <TFeatures extends TableFeatures, TData extends RowData>(
209
+ row: Row<TFeatures, TData>,
210
+ columnId: string,
211
+ filterValues: [unknown, unknown],
212
+ ): boolean =>
213
+ ((['', undefined] as Array<any>).includes(filterValues[0]) ||
214
+ filterFn_greaterThan(row, columnId, filterValues[0])) &&
215
+ ((!isNaN(Number(filterValues[0])) &&
216
+ !isNaN(Number(filterValues[1])) &&
217
+ Number(filterValues[0]) > Number(filterValues[1])) ||
218
+ (['', undefined] as Array<any>).includes(filterValues[1]) ||
219
+ filterFn_lessThan(row, columnId, filterValues[1])),
220
+ { autoRemove: (val: any) => !val },
221
+ )
245
222
 
246
223
  /**
247
224
  * Keeps rows whose value falls between an inclusive min/max pair.
248
225
  *
249
226
  * Blank range endpoints are treated as open-ended.
250
227
  */
251
- const filterFn_betweenInclusive: FilterFn<any, any> = <
252
- TFeatures extends TableFeatures,
253
- TData extends RowData,
254
- >(
255
- row: Row<TFeatures, TData>,
256
- columnId: string,
257
- filterValues: [number | string, number | string],
258
- ): boolean =>
259
- ((['', undefined] as Array<any>).includes(filterValues[0]) ||
260
- filterFn_greaterThanOrEqualTo(row as any, columnId, filterValues[0])) &&
261
- ((!isNaN(+filterValues[0]) &&
262
- !isNaN(+filterValues[1]) &&
263
- +filterValues[0] > +filterValues[1]) ||
264
- (['', undefined] as Array<any>).includes(filterValues[1]) ||
265
- filterFn_lessThanOrEqualTo(row as any, columnId, filterValues[1]))
266
-
267
- filterFn_betweenInclusive.autoRemove = (val: any) => !val
228
+ const filterFn_betweenInclusive = Object.assign(
229
+ <TFeatures extends TableFeatures, TData extends RowData>(
230
+ row: Row<TFeatures, TData>,
231
+ columnId: string,
232
+ filterValues: [unknown, unknown],
233
+ ): boolean =>
234
+ ((['', undefined] as Array<any>).includes(filterValues[0]) ||
235
+ filterFn_greaterThanOrEqualTo(row, columnId, filterValues[0])) &&
236
+ ((!isNaN(Number(filterValues[0])) &&
237
+ !isNaN(Number(filterValues[1])) &&
238
+ Number(filterValues[0]) > Number(filterValues[1])) ||
239
+ (['', undefined] as Array<any>).includes(filterValues[1]) ||
240
+ filterFn_lessThanOrEqualTo(row, columnId, filterValues[1])),
241
+ { autoRemove: (val: any) => !val },
242
+ )
268
243
 
269
244
  /**
270
245
  * Keeps rows whose numeric value is inside an inclusive `[min, max]` range.
@@ -272,50 +247,50 @@ filterFn_betweenInclusive.autoRemove = (val: any) => !val
272
247
  * Filter values are normalized so blank endpoints become open-ended and
273
248
  * reversed endpoints are swapped.
274
249
  */
275
- export const filterFn_inNumberRange: FilterFn<any, any> = <
276
- TFeatures extends TableFeatures,
277
- TData extends RowData,
278
- >(
279
- row: Row<TFeatures, TData>,
280
- columnId: string,
281
- filterValue: [number, number],
282
- ) => {
283
- const [min, max] = filterValue
284
-
285
- const rowValue: number = row.getValue(columnId)
286
- return rowValue >= min && rowValue <= max
287
- }
288
-
289
- filterFn_inNumberRange.resolveFilterValue = (val: [any, any]) => {
290
- const [unsafeMin, unsafeMax] = val
291
-
292
- const parsedMin =
293
- typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin
294
- const parsedMax =
295
- typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax
296
-
297
- let min =
298
- unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin
299
- let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax
300
-
301
- if (min > max) {
302
- const temp = min
303
- min = max
304
- max = temp
305
- }
306
-
307
- return [min, max] as const
308
- }
309
-
310
- filterFn_inNumberRange.autoRemove = (val: any) =>
311
- testFalsy(val) || (testFalsy(val[0]) && testFalsy(val[1]))
250
+ export const filterFn_inNumberRange = Object.assign(
251
+ <TFeatures extends TableFeatures, TData extends RowData>(
252
+ row: Row<TFeatures, TData>,
253
+ columnId: string,
254
+ filterValue: [number, number],
255
+ ) => {
256
+ const [min, max] = filterValue
257
+
258
+ const rowValue: number = row.getValue(columnId)
259
+ return rowValue >= min && rowValue <= max
260
+ },
261
+ {
262
+ resolveFilterValue: (val: [any, any]) => {
263
+ const [unsafeMin, unsafeMax] = val
264
+
265
+ const parsedMin =
266
+ typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin
267
+ const parsedMax =
268
+ typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax
269
+
270
+ let min =
271
+ unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin
272
+ let max =
273
+ unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax
274
+
275
+ if (min > max) {
276
+ const temp = min
277
+ min = max
278
+ max = temp
279
+ }
280
+
281
+ return [min, max] as const
282
+ },
283
+ autoRemove: (val: any) =>
284
+ testFalsy(val) || (testFalsy(val[0]) && testFalsy(val[1])),
285
+ },
286
+ )
312
287
 
313
288
  // Array filters
314
289
 
315
290
  /**
316
291
  * Keeps rows whose scalar column value equals at least one filter value.
317
292
  */
318
- export const filterFn_arrHas: FilterFn<any, any> = <
293
+ export const filterFn_arrHas = <
319
294
  TFeatures extends TableFeatures,
320
295
  TData extends RowData,
321
296
  >(
@@ -329,60 +304,52 @@ export const filterFn_arrHas: FilterFn<any, any> = <
329
304
  /**
330
305
  * Keeps rows whose array or string column value includes at least one filter value.
331
306
  */
332
- export const filterFn_arrIncludes: FilterFn<any, any> = <
333
- TFeatures extends TableFeatures,
334
- TData extends RowData,
335
- >(
336
- row: Row<TFeatures, TData>,
337
- columnId: string,
338
- filterValue: Array<unknown>,
339
- ) => {
340
- return filterValue.some((val) =>
341
- (row.getValue<unknown>(columnId) as Array<unknown> | string).includes(
342
- val as any,
343
- ),
344
- )
345
- }
346
-
347
- filterFn_arrIncludes.autoRemove = (val: any) => testFalsy(val) || !val?.length
307
+ export const filterFn_arrIncludes = Object.assign(
308
+ <TFeatures extends TableFeatures, TData extends RowData>(
309
+ row: Row<TFeatures, TData>,
310
+ columnId: string,
311
+ filterValue: Array<unknown>,
312
+ ) => {
313
+ return filterValue.some((val) =>
314
+ (row.getValue<unknown>(columnId) as Array<unknown> | string).includes(
315
+ val as any,
316
+ ),
317
+ )
318
+ },
319
+ { autoRemove: (val: any) => testFalsy(val) || !val?.length },
320
+ )
348
321
 
349
322
  /**
350
323
  * Keeps rows whose array column value includes every filter value.
351
324
  */
352
- export const filterFn_arrIncludesAll: FilterFn<any, any> = <
353
- TFeatures extends TableFeatures,
354
- TData extends RowData,
355
- >(
356
- row: Row<TFeatures, TData>,
357
- columnId: string,
358
- filterValue: Array<unknown>,
359
- ) => {
360
- const value = row.getValue<Array<unknown>>(columnId)
361
- if (!Array.isArray(value)) return false
362
- return !filterValue.some((val) => !value.includes(val))
363
- }
364
-
365
- filterFn_arrIncludesAll.autoRemove = (val: any) =>
366
- testFalsy(val) || !val?.length
325
+ export const filterFn_arrIncludesAll = Object.assign(
326
+ <TFeatures extends TableFeatures, TData extends RowData>(
327
+ row: Row<TFeatures, TData>,
328
+ columnId: string,
329
+ filterValue: Array<unknown>,
330
+ ) => {
331
+ const value = row.getValue<Array<unknown>>(columnId)
332
+ if (!Array.isArray(value)) return false
333
+ return !filterValue.some((val) => !value.includes(val))
334
+ },
335
+ { autoRemove: (val: any) => testFalsy(val) || !val?.length },
336
+ )
367
337
 
368
338
  /**
369
339
  * Keeps rows whose array column value includes at least one filter value.
370
340
  */
371
- export const filterFn_arrIncludesSome: FilterFn<any, any> = <
372
- TFeatures extends TableFeatures,
373
- TData extends RowData,
374
- >(
375
- row: Row<TFeatures, TData>,
376
- columnId: string,
377
- filterValue: Array<unknown>,
378
- ) => {
379
- const value = row.getValue<Array<unknown>>(columnId)
380
- if (!Array.isArray(value)) return false
381
- return filterValue.some((val) => value.includes(val))
382
- }
383
-
384
- filterFn_arrIncludesSome.autoRemove = (val: any) =>
385
- testFalsy(val) || !val?.length
341
+ export const filterFn_arrIncludesSome = Object.assign(
342
+ <TFeatures extends TableFeatures, TData extends RowData>(
343
+ row: Row<TFeatures, TData>,
344
+ columnId: string,
345
+ filterValue: Array<unknown>,
346
+ ) => {
347
+ const value = row.getValue<Array<unknown>>(columnId)
348
+ if (!Array.isArray(value)) return false
349
+ return filterValue.some((val) => value.includes(val))
350
+ },
351
+ { autoRemove: (val: any) => testFalsy(val) || !val?.length },
352
+ )
386
353
 
387
354
  // Export
388
355