@tanstack/table-core 9.0.0-beta.45 → 9.0.0-beta.47

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 (116) hide show
  1. package/dist/features/column-filtering/columnFilteringFeature.types.d.cts +43 -3
  2. package/dist/features/column-filtering/columnFilteringFeature.types.d.ts +43 -3
  3. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs +18 -9
  4. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs.map +1 -1
  5. package/dist/features/column-filtering/columnFilteringFeature.utils.d.cts +6 -2
  6. package/dist/features/column-filtering/columnFilteringFeature.utils.d.ts +6 -2
  7. package/dist/features/column-filtering/columnFilteringFeature.utils.js +18 -9
  8. package/dist/features/column-filtering/columnFilteringFeature.utils.js.map +1 -1
  9. package/dist/features/column-filtering/createFilteredRowModel.cjs +7 -2
  10. package/dist/features/column-filtering/createFilteredRowModel.cjs.map +1 -1
  11. package/dist/features/column-filtering/createFilteredRowModel.d.cts +6 -2
  12. package/dist/features/column-filtering/createFilteredRowModel.d.ts +6 -2
  13. package/dist/features/column-filtering/createFilteredRowModel.js +7 -2
  14. package/dist/features/column-filtering/createFilteredRowModel.js.map +1 -1
  15. package/dist/features/column-grouping/columnGroupingFeature.types.d.cts +41 -3
  16. package/dist/features/column-grouping/columnGroupingFeature.types.d.ts +41 -3
  17. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs +17 -3
  18. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs.map +1 -1
  19. package/dist/features/column-grouping/columnGroupingFeature.utils.d.cts +5 -0
  20. package/dist/features/column-grouping/columnGroupingFeature.utils.d.ts +5 -0
  21. package/dist/features/column-grouping/columnGroupingFeature.utils.js +17 -3
  22. package/dist/features/column-grouping/columnGroupingFeature.utils.js.map +1 -1
  23. package/dist/features/column-grouping/createGroupedRowModel.cjs +6 -3
  24. package/dist/features/column-grouping/createGroupedRowModel.cjs.map +1 -1
  25. package/dist/features/column-grouping/createGroupedRowModel.d.cts +6 -3
  26. package/dist/features/column-grouping/createGroupedRowModel.d.ts +6 -3
  27. package/dist/features/column-grouping/createGroupedRowModel.js +6 -3
  28. package/dist/features/column-grouping/createGroupedRowModel.js.map +1 -1
  29. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs +3 -1
  30. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs.map +1 -1
  31. package/dist/features/global-filtering/globalFilteringFeature.utils.d.cts +2 -6
  32. package/dist/features/global-filtering/globalFilteringFeature.utils.d.ts +2 -6
  33. package/dist/features/global-filtering/globalFilteringFeature.utils.js +3 -1
  34. package/dist/features/global-filtering/globalFilteringFeature.utils.js.map +1 -1
  35. package/dist/features/row-sorting/createSortedRowModel.cjs +6 -2
  36. package/dist/features/row-sorting/createSortedRowModel.cjs.map +1 -1
  37. package/dist/features/row-sorting/createSortedRowModel.d.cts +6 -2
  38. package/dist/features/row-sorting/createSortedRowModel.d.ts +6 -2
  39. package/dist/features/row-sorting/createSortedRowModel.js +6 -2
  40. package/dist/features/row-sorting/createSortedRowModel.js.map +1 -1
  41. package/dist/features/row-sorting/rowSortingFeature.types.d.cts +31 -2
  42. package/dist/features/row-sorting/rowSortingFeature.types.d.ts +31 -2
  43. package/dist/features/row-sorting/rowSortingFeature.utils.cjs +19 -4
  44. package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
  45. package/dist/features/row-sorting/rowSortingFeature.utils.js +19 -4
  46. package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
  47. package/dist/fns/aggregationFns.cjs +128 -57
  48. package/dist/fns/aggregationFns.cjs.map +1 -1
  49. package/dist/fns/aggregationFns.d.cts +72 -18
  50. package/dist/fns/aggregationFns.d.ts +72 -18
  51. package/dist/fns/aggregationFns.js +126 -58
  52. package/dist/fns/aggregationFns.js.map +1 -1
  53. package/dist/fns/filterFns.cjs +254 -97
  54. package/dist/fns/filterFns.cjs.map +1 -1
  55. package/dist/fns/filterFns.d.cts +126 -94
  56. package/dist/fns/filterFns.d.ts +126 -94
  57. package/dist/fns/filterFns.js +247 -98
  58. package/dist/fns/filterFns.js.map +1 -1
  59. package/dist/fns/sortFns.cjs +68 -21
  60. package/dist/fns/sortFns.cjs.map +1 -1
  61. package/dist/fns/sortFns.d.cts +48 -15
  62. package/dist/fns/sortFns.d.ts +48 -15
  63. package/dist/fns/sortFns.js +68 -22
  64. package/dist/fns/sortFns.js.map +1 -1
  65. package/dist/helpers/tableFeatures.cjs +5 -4
  66. package/dist/helpers/tableFeatures.cjs.map +1 -1
  67. package/dist/helpers/tableFeatures.d.cts +5 -4
  68. package/dist/helpers/tableFeatures.d.ts +5 -4
  69. package/dist/helpers/tableFeatures.js +5 -4
  70. package/dist/helpers/tableFeatures.js.map +1 -1
  71. package/dist/index.cjs +12 -0
  72. package/dist/index.d.cts +8 -8
  73. package/dist/index.d.ts +8 -8
  74. package/dist/index.js +4 -4
  75. package/dist/types/TableFeatures.d.cts +15 -7
  76. package/dist/types/TableFeatures.d.ts +15 -7
  77. package/dist/types/type-utils.d.cts +8 -1
  78. package/dist/types/type-utils.d.ts +8 -1
  79. package/package.json +1 -1
  80. package/skills/api-not-found/SKILL.md +1 -1
  81. package/skills/client-vs-server/SKILL.md +1 -1
  82. package/skills/column-faceting/SKILL.md +11 -5
  83. package/skills/column-filtering/SKILL.md +8 -3
  84. package/skills/column-ordering/SKILL.md +1 -1
  85. package/skills/column-pinning/SKILL.md +1 -1
  86. package/skills/column-resizing/SKILL.md +1 -1
  87. package/skills/column-sizing/SKILL.md +1 -1
  88. package/skills/column-visibility/SKILL.md +1 -1
  89. package/skills/core/SKILL.md +1 -1
  90. package/skills/custom-features/SKILL.md +1 -1
  91. package/skills/expanding/SKILL.md +1 -1
  92. package/skills/global-filtering/SKILL.md +3 -3
  93. package/skills/grouping/SKILL.md +8 -3
  94. package/skills/migrate-v8-to-v9/SKILL.md +7 -7
  95. package/skills/pagination/SKILL.md +1 -1
  96. package/skills/row-pinning/SKILL.md +1 -1
  97. package/skills/row-selection/SKILL.md +1 -1
  98. package/skills/sorting/SKILL.md +9 -3
  99. package/skills/table-features/SKILL.md +16 -13
  100. package/skills/typescript/SKILL.md +1 -1
  101. package/src/features/column-filtering/columnFilteringFeature.types.ts +60 -0
  102. package/src/features/column-filtering/columnFilteringFeature.utils.ts +33 -19
  103. package/src/features/column-filtering/createFilteredRowModel.ts +13 -3
  104. package/src/features/column-grouping/columnGroupingFeature.types.ts +63 -8
  105. package/src/features/column-grouping/columnGroupingFeature.utils.ts +43 -9
  106. package/src/features/column-grouping/createGroupedRowModel.ts +6 -3
  107. package/src/features/global-filtering/globalFilteringFeature.utils.ts +8 -0
  108. package/src/features/row-sorting/createSortedRowModel.ts +6 -2
  109. package/src/features/row-sorting/rowSortingFeature.types.ts +53 -1
  110. package/src/features/row-sorting/rowSortingFeature.utils.ts +45 -13
  111. package/src/fns/aggregationFns.ts +204 -146
  112. package/src/fns/filterFns.ts +361 -280
  113. package/src/fns/sortFns.ts +95 -78
  114. package/src/helpers/tableFeatures.ts +5 -4
  115. package/src/types/TableFeatures.ts +15 -7
  116. package/src/types/type-utils.ts +8 -0
@@ -1,178 +1,210 @@
1
1
  import { RowData } from "../types/type-utils.cjs";
2
- import { Row } from "../types/Row.cjs";
2
+ import { CreatedFilterFn, FilterFnDef } from "../features/column-filtering/columnFilteringFeature.types.cjs";
3
3
  import { TableFeatures } from "../types/TableFeatures.cjs";
4
4
 
5
5
  //#region src/fns/filterFns.d.ts
6
+ /**
7
+ * Builds a `FilterFn` from a value-level comparator plus optional resolvers.
8
+ *
9
+ * The `filter` comparator receives the row's data value (already passed
10
+ * through `resolveDataValue` when one is defined) and the filter value
11
+ * (already passed through `resolveFilterValue` by the table). Keeping
12
+ * normalization in the resolvers means a variant of an existing filter
13
+ * function only has to swap the resolvers, not re-implement the comparison.
14
+ *
15
+ * The definition is attached to the returned function, so a variant can be
16
+ * created by spreading a built-in filter function and overriding what differs:
17
+ *
18
+ * ```ts
19
+ * const normalize = (value: unknown) =>
20
+ * String(value ?? '')
21
+ * .toLowerCase()
22
+ * .normalize('NFD')
23
+ * .replace(/\p{Diacritic}/gu, '')
24
+ *
25
+ * const includesStringIgnoreDiacritics = constructFilterFn({
26
+ * ...filterFn_includesString,
27
+ * resolveFilterValue: normalize,
28
+ * resolveDataValue: normalize,
29
+ * })
30
+ * ```
31
+ *
32
+ * Note: the table applies `resolveFilterValue` once per filter before any rows
33
+ * are tested. When calling a filter function directly (outside of a table),
34
+ * apply it yourself: `fn(row, columnId, fn.resolveFilterValue?.(value) ?? value)`.
35
+ */
36
+ declare function constructFilterFn<TFeatures extends TableFeatures = any, TData extends RowData = any>(def: FilterFnDef<TFeatures, TData>): CreatedFilterFn<TFeatures, TData>;
6
37
  /**
7
38
  * Keeps rows whose column value is strictly equal to the filter value.
8
39
  *
9
40
  * Uses JavaScript `===` comparison and auto-removes empty filter values.
10
41
  */
11
- declare const filterFn_equals: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
12
- autoRemove: (val: any) => boolean;
13
- };
42
+ declare const filterFn_equals: CreatedFilterFn<any, any>;
14
43
  /**
15
44
  * Keeps rows whose column value is loosely equal to the filter value.
16
45
  *
17
46
  * Uses JavaScript `==` comparison and auto-removes empty filter values. This is
18
47
  * useful for matching string input against numeric row values.
19
48
  */
20
- declare const filterFn_weakEquals: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
21
- autoRemove: (val: any) => boolean;
22
- };
49
+ declare const filterFn_weakEquals: CreatedFilterFn<any, any>;
23
50
  /**
24
51
  * Keeps rows whose stringified column value includes the filter text.
25
52
  *
26
53
  * Matching is case-sensitive and empty filter values are auto-removed.
27
54
  */
28
- declare const filterFn_includesStringSensitive: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
29
- autoRemove: (val: any) => boolean;
30
- resolveFilterValue: (val: any) => string;
31
- };
55
+ declare const filterFn_includesStringSensitive: CreatedFilterFn<any, any>;
32
56
  /**
33
57
  * Keeps rows whose stringified column value includes the filter text.
34
58
  *
35
59
  * Both values are lowercased before comparison, and empty filter values are
36
60
  * auto-removed.
37
61
  */
38
- declare const filterFn_includesString: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
39
- autoRemove: (val: any) => boolean;
40
- resolveFilterValue: (val: any) => string;
41
- };
62
+ declare const filterFn_includesString: CreatedFilterFn<any, any>;
42
63
  /**
43
64
  * Keeps rows whose stringified column value equals the filter text.
44
65
  *
45
66
  * Both values are lowercased before comparison, and empty filter values are
46
67
  * auto-removed.
47
68
  */
48
- declare const filterFn_equalsString: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
49
- autoRemove: (val: any) => boolean;
50
- resolveFilterValue: (val: any) => string;
51
- };
69
+ declare const filterFn_equalsString: CreatedFilterFn<any, any>;
52
70
  /**
53
71
  * Keeps rows whose stringified column value exactly equals the filter text.
54
72
  *
55
73
  * Matching is case-sensitive and empty filter values are auto-removed.
56
74
  */
57
- declare const filterFn_equalsStringSensitive: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
58
- autoRemove: (val: any) => boolean;
59
- resolveFilterValue: (val: any) => string;
60
- };
75
+ declare const filterFn_equalsStringSensitive: CreatedFilterFn<any, any>;
76
+ /**
77
+ * Keeps rows whose stringified column value starts with the filter text.
78
+ *
79
+ * Both values are lowercased before comparison, and empty filter values are
80
+ * auto-removed.
81
+ */
82
+ declare const filterFn_startsWith: CreatedFilterFn<any, any>;
83
+ /**
84
+ * Keeps rows whose stringified column value ends with the filter text.
85
+ *
86
+ * Both values are lowercased before comparison, and empty filter values are
87
+ * auto-removed.
88
+ */
89
+ declare const filterFn_endsWith: CreatedFilterFn<any, any>;
90
+ /**
91
+ * Keeps rows whose column value is empty.
92
+ *
93
+ * A value is empty when it is nullish or stringifies to whitespace only. The
94
+ * filter value acts as an on/off flag: `false` and blank values are
95
+ * auto-removed.
96
+ */
97
+ declare const filterFn_empty: CreatedFilterFn<any, any>;
98
+ /**
99
+ * Keeps rows whose column value is not empty.
100
+ *
101
+ * A value is empty when it is nullish or stringifies to whitespace only. The
102
+ * filter value acts as an on/off flag: `false` and blank values are
103
+ * auto-removed.
104
+ */
105
+ declare const filterFn_notEmpty: CreatedFilterFn<any, any>;
61
106
  /**
62
107
  * Keeps rows whose value is greater than the filter value.
63
108
  *
64
109
  * Numeric values are compared numerically when both sides can be coerced to
65
110
  * numbers; otherwise normalized strings are compared.
66
111
  */
67
- declare const filterFn_greaterThan: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
68
- autoRemove: (val: any) => boolean;
69
- };
112
+ declare const filterFn_greaterThan: CreatedFilterFn<any, any>;
70
113
  /**
71
114
  * Keeps rows whose value is greater than or equal to the filter value.
72
115
  *
73
- * Delegates to the built-in greater-than and equality comparisons.
116
+ * Delegates to the built-in greater-than and strict-equality comparisons.
74
117
  */
75
- declare const filterFn_greaterThanOrEqualTo: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
76
- autoRemove: (val: any) => boolean;
77
- };
118
+ declare const filterFn_greaterThanOrEqualTo: CreatedFilterFn<any, any>;
78
119
  /**
79
120
  * Keeps rows whose value is less than the filter value.
80
121
  *
81
122
  * This is implemented as the inverse of greater-than-or-equal comparison.
82
123
  */
83
- declare const filterFn_lessThan: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
84
- autoRemove: (val: any) => boolean;
85
- };
124
+ declare const filterFn_lessThan: CreatedFilterFn<any, any>;
86
125
  /**
87
126
  * Keeps rows whose value is less than or equal to the filter value.
88
127
  *
89
128
  * This is implemented as the inverse of greater-than comparison.
90
129
  */
91
- declare const filterFn_lessThanOrEqualTo: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
92
- autoRemove: (val: any) => boolean;
93
- };
130
+ declare const filterFn_lessThanOrEqualTo: CreatedFilterFn<any, any>;
131
+ /**
132
+ * Keeps rows whose value falls between an exclusive min/max pair.
133
+ *
134
+ * Blank range endpoints are treated as open-ended.
135
+ */
136
+ declare const filterFn_between: CreatedFilterFn<any, any>;
137
+ /**
138
+ * Keeps rows whose value falls between an inclusive min/max pair.
139
+ *
140
+ * Blank range endpoints are treated as open-ended.
141
+ */
142
+ declare const filterFn_betweenInclusive: CreatedFilterFn<any, any>;
94
143
  /**
95
144
  * Keeps rows whose numeric value is inside an inclusive `[min, max]` range.
96
145
  *
97
146
  * Filter values are normalized so blank endpoints become open-ended and
98
147
  * reversed endpoints are swapped.
99
148
  */
100
- declare const filterFn_inNumberRange: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: [number, number]) => boolean) & {
101
- resolveFilterValue: (val: [any, any]) => readonly [number, number];
102
- autoRemove: (val: any) => boolean;
103
- };
149
+ declare const filterFn_inNumberRange: CreatedFilterFn<any, any>;
150
+ /**
151
+ * Keeps rows whose date value is inside an inclusive `[min, max]` date range.
152
+ *
153
+ * Row values and range endpoints may be `Date` objects, timestamps, or
154
+ * parseable date strings. Blank or invalid endpoints become open-ended and
155
+ * reversed endpoints are swapped. Rows without a valid date never match.
156
+ */
157
+ declare const filterFn_inDateRange: CreatedFilterFn<any, any>;
104
158
  /**
105
159
  * Keeps rows whose scalar column value equals at least one filter value.
106
160
  */
107
- declare const filterFn_arrHas: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
108
- autoRemove: (val: any) => boolean;
109
- };
161
+ declare const filterFn_arrHas: CreatedFilterFn<any, any>;
110
162
  /**
111
163
  * Keeps rows whose array or string column value includes at least one filter value.
112
164
  */
113
- declare const filterFn_arrIncludes: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
114
- autoRemove: (val: any) => boolean;
115
- };
165
+ declare const filterFn_arrIncludes: CreatedFilterFn<any, any>;
116
166
  /**
117
167
  * Keeps rows whose array column value includes every filter value.
118
168
  */
119
- declare const filterFn_arrIncludesAll: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
120
- autoRemove: (val: any) => boolean;
121
- };
169
+ declare const filterFn_arrIncludesAll: CreatedFilterFn<any, any>;
122
170
  /**
123
171
  * Keeps rows whose array column value includes at least one filter value.
124
172
  */
125
- declare const filterFn_arrIncludesSome: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
126
- autoRemove: (val: any) => boolean;
127
- };
173
+ declare const filterFn_arrIncludesSome: CreatedFilterFn<any, any>;
128
174
  /**
129
175
  * The built-in filter function registry.
130
176
  *
131
- * Pass this object to filtered row model creation or extend it with custom filter functions.
177
+ * Registering this full object opts out of tree-shaking: every built-in
178
+ * filter function ends up in your bundle. Prefer importing the `filterFn_*`
179
+ * functions you actually use and registering just those in the `filterFns`
180
+ * slot, or passing them directly to the `filterFn` column option.
181
+ *
182
+ * @deprecated Import individual `filterFn_*` functions instead for a smaller
183
+ * bundle. This export still works and is not going away in v9, but built-in
184
+ * name resolution (including `filterFn: 'auto'`) only finds functions you
185
+ * register yourself.
132
186
  */
133
187
  declare const filterFns: {
134
- arrIncludes: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
135
- autoRemove: (val: any) => boolean;
136
- };
137
- arrIncludesAll: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
138
- autoRemove: (val: any) => boolean;
139
- };
140
- arrHas: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
141
- autoRemove: (val: any) => boolean;
142
- };
143
- arrIncludesSome: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
144
- autoRemove: (val: any) => boolean;
145
- };
146
- between: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValues: [unknown, unknown]) => boolean) & {
147
- autoRemove: (val: any) => boolean;
148
- };
149
- betweenInclusive: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValues: [unknown, unknown]) => boolean) & {
150
- autoRemove: (val: any) => boolean;
151
- };
152
- equals: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
153
- autoRemove: (val: any) => boolean;
154
- };
155
- equalsString: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
156
- autoRemove: (val: any) => boolean;
157
- resolveFilterValue: (val: any) => string;
158
- };
159
- inNumberRange: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: [number, number]) => boolean) & {
160
- resolveFilterValue: (val: [any, any]) => readonly [number, number];
161
- autoRemove: (val: any) => boolean;
162
- };
163
- includesString: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
164
- autoRemove: (val: any) => boolean;
165
- resolveFilterValue: (val: any) => string;
166
- };
167
- includesStringSensitive: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
168
- autoRemove: (val: any) => boolean;
169
- resolveFilterValue: (val: any) => string;
170
- };
171
- weakEquals: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
172
- autoRemove: (val: any) => boolean;
173
- };
188
+ arrIncludes: CreatedFilterFn<any, any>;
189
+ arrIncludesAll: CreatedFilterFn<any, any>;
190
+ arrHas: CreatedFilterFn<any, any>;
191
+ arrIncludesSome: CreatedFilterFn<any, any>;
192
+ between: CreatedFilterFn<any, any>;
193
+ betweenInclusive: CreatedFilterFn<any, any>;
194
+ empty: CreatedFilterFn<any, any>;
195
+ endsWith: CreatedFilterFn<any, any>;
196
+ equals: CreatedFilterFn<any, any>;
197
+ equalsString: CreatedFilterFn<any, any>;
198
+ equalsStringSensitive: CreatedFilterFn<any, any>;
199
+ inDateRange: CreatedFilterFn<any, any>;
200
+ inNumberRange: CreatedFilterFn<any, any>;
201
+ includesString: CreatedFilterFn<any, any>;
202
+ includesStringSensitive: CreatedFilterFn<any, any>;
203
+ notEmpty: CreatedFilterFn<any, any>;
204
+ startsWith: CreatedFilterFn<any, any>;
205
+ weakEquals: CreatedFilterFn<any, any>;
174
206
  };
175
207
  type BuiltInFilterFn = keyof typeof filterFns;
176
208
  //#endregion
177
- export { BuiltInFilterFn, filterFn_arrHas, filterFn_arrIncludes, filterFn_arrIncludesAll, filterFn_arrIncludesSome, filterFn_equals, filterFn_equalsString, filterFn_equalsStringSensitive, filterFn_greaterThan, filterFn_greaterThanOrEqualTo, filterFn_inNumberRange, filterFn_includesString, filterFn_includesStringSensitive, filterFn_lessThan, filterFn_lessThanOrEqualTo, filterFn_weakEquals, filterFns };
209
+ export { BuiltInFilterFn, constructFilterFn, filterFn_arrHas, filterFn_arrIncludes, filterFn_arrIncludesAll, filterFn_arrIncludesSome, filterFn_between, filterFn_betweenInclusive, filterFn_empty, filterFn_endsWith, filterFn_equals, filterFn_equalsString, filterFn_equalsStringSensitive, filterFn_greaterThan, filterFn_greaterThanOrEqualTo, filterFn_inDateRange, filterFn_inNumberRange, filterFn_includesString, filterFn_includesStringSensitive, filterFn_lessThan, filterFn_lessThanOrEqualTo, filterFn_notEmpty, filterFn_startsWith, filterFn_weakEquals, filterFns };
178
210
  //# sourceMappingURL=filterFns.d.cts.map
@@ -1,178 +1,210 @@
1
1
  import { RowData } from "../types/type-utils.js";
2
- import { Row } from "../types/Row.js";
2
+ import { CreatedFilterFn, FilterFnDef } from "../features/column-filtering/columnFilteringFeature.types.js";
3
3
  import { TableFeatures } from "../types/TableFeatures.js";
4
4
 
5
5
  //#region src/fns/filterFns.d.ts
6
+ /**
7
+ * Builds a `FilterFn` from a value-level comparator plus optional resolvers.
8
+ *
9
+ * The `filter` comparator receives the row's data value (already passed
10
+ * through `resolveDataValue` when one is defined) and the filter value
11
+ * (already passed through `resolveFilterValue` by the table). Keeping
12
+ * normalization in the resolvers means a variant of an existing filter
13
+ * function only has to swap the resolvers, not re-implement the comparison.
14
+ *
15
+ * The definition is attached to the returned function, so a variant can be
16
+ * created by spreading a built-in filter function and overriding what differs:
17
+ *
18
+ * ```ts
19
+ * const normalize = (value: unknown) =>
20
+ * String(value ?? '')
21
+ * .toLowerCase()
22
+ * .normalize('NFD')
23
+ * .replace(/\p{Diacritic}/gu, '')
24
+ *
25
+ * const includesStringIgnoreDiacritics = constructFilterFn({
26
+ * ...filterFn_includesString,
27
+ * resolveFilterValue: normalize,
28
+ * resolveDataValue: normalize,
29
+ * })
30
+ * ```
31
+ *
32
+ * Note: the table applies `resolveFilterValue` once per filter before any rows
33
+ * are tested. When calling a filter function directly (outside of a table),
34
+ * apply it yourself: `fn(row, columnId, fn.resolveFilterValue?.(value) ?? value)`.
35
+ */
36
+ declare function constructFilterFn<TFeatures extends TableFeatures = any, TData extends RowData = any>(def: FilterFnDef<TFeatures, TData>): CreatedFilterFn<TFeatures, TData>;
6
37
  /**
7
38
  * Keeps rows whose column value is strictly equal to the filter value.
8
39
  *
9
40
  * Uses JavaScript `===` comparison and auto-removes empty filter values.
10
41
  */
11
- declare const filterFn_equals: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
12
- autoRemove: (val: any) => boolean;
13
- };
42
+ declare const filterFn_equals: CreatedFilterFn<any, any>;
14
43
  /**
15
44
  * Keeps rows whose column value is loosely equal to the filter value.
16
45
  *
17
46
  * Uses JavaScript `==` comparison and auto-removes empty filter values. This is
18
47
  * useful for matching string input against numeric row values.
19
48
  */
20
- declare const filterFn_weakEquals: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
21
- autoRemove: (val: any) => boolean;
22
- };
49
+ declare const filterFn_weakEquals: CreatedFilterFn<any, any>;
23
50
  /**
24
51
  * Keeps rows whose stringified column value includes the filter text.
25
52
  *
26
53
  * Matching is case-sensitive and empty filter values are auto-removed.
27
54
  */
28
- declare const filterFn_includesStringSensitive: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
29
- autoRemove: (val: any) => boolean;
30
- resolveFilterValue: (val: any) => string;
31
- };
55
+ declare const filterFn_includesStringSensitive: CreatedFilterFn<any, any>;
32
56
  /**
33
57
  * Keeps rows whose stringified column value includes the filter text.
34
58
  *
35
59
  * Both values are lowercased before comparison, and empty filter values are
36
60
  * auto-removed.
37
61
  */
38
- declare const filterFn_includesString: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
39
- autoRemove: (val: any) => boolean;
40
- resolveFilterValue: (val: any) => string;
41
- };
62
+ declare const filterFn_includesString: CreatedFilterFn<any, any>;
42
63
  /**
43
64
  * Keeps rows whose stringified column value equals the filter text.
44
65
  *
45
66
  * Both values are lowercased before comparison, and empty filter values are
46
67
  * auto-removed.
47
68
  */
48
- declare const filterFn_equalsString: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
49
- autoRemove: (val: any) => boolean;
50
- resolveFilterValue: (val: any) => string;
51
- };
69
+ declare const filterFn_equalsString: CreatedFilterFn<any, any>;
52
70
  /**
53
71
  * Keeps rows whose stringified column value exactly equals the filter text.
54
72
  *
55
73
  * Matching is case-sensitive and empty filter values are auto-removed.
56
74
  */
57
- declare const filterFn_equalsStringSensitive: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
58
- autoRemove: (val: any) => boolean;
59
- resolveFilterValue: (val: any) => string;
60
- };
75
+ declare const filterFn_equalsStringSensitive: CreatedFilterFn<any, any>;
76
+ /**
77
+ * Keeps rows whose stringified column value starts with the filter text.
78
+ *
79
+ * Both values are lowercased before comparison, and empty filter values are
80
+ * auto-removed.
81
+ */
82
+ declare const filterFn_startsWith: CreatedFilterFn<any, any>;
83
+ /**
84
+ * Keeps rows whose stringified column value ends with the filter text.
85
+ *
86
+ * Both values are lowercased before comparison, and empty filter values are
87
+ * auto-removed.
88
+ */
89
+ declare const filterFn_endsWith: CreatedFilterFn<any, any>;
90
+ /**
91
+ * Keeps rows whose column value is empty.
92
+ *
93
+ * A value is empty when it is nullish or stringifies to whitespace only. The
94
+ * filter value acts as an on/off flag: `false` and blank values are
95
+ * auto-removed.
96
+ */
97
+ declare const filterFn_empty: CreatedFilterFn<any, any>;
98
+ /**
99
+ * Keeps rows whose column value is not empty.
100
+ *
101
+ * A value is empty when it is nullish or stringifies to whitespace only. The
102
+ * filter value acts as an on/off flag: `false` and blank values are
103
+ * auto-removed.
104
+ */
105
+ declare const filterFn_notEmpty: CreatedFilterFn<any, any>;
61
106
  /**
62
107
  * Keeps rows whose value is greater than the filter value.
63
108
  *
64
109
  * Numeric values are compared numerically when both sides can be coerced to
65
110
  * numbers; otherwise normalized strings are compared.
66
111
  */
67
- declare const filterFn_greaterThan: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
68
- autoRemove: (val: any) => boolean;
69
- };
112
+ declare const filterFn_greaterThan: CreatedFilterFn<any, any>;
70
113
  /**
71
114
  * Keeps rows whose value is greater than or equal to the filter value.
72
115
  *
73
- * Delegates to the built-in greater-than and equality comparisons.
116
+ * Delegates to the built-in greater-than and strict-equality comparisons.
74
117
  */
75
- declare const filterFn_greaterThanOrEqualTo: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
76
- autoRemove: (val: any) => boolean;
77
- };
118
+ declare const filterFn_greaterThanOrEqualTo: CreatedFilterFn<any, any>;
78
119
  /**
79
120
  * Keeps rows whose value is less than the filter value.
80
121
  *
81
122
  * This is implemented as the inverse of greater-than-or-equal comparison.
82
123
  */
83
- declare const filterFn_lessThan: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
84
- autoRemove: (val: any) => boolean;
85
- };
124
+ declare const filterFn_lessThan: CreatedFilterFn<any, any>;
86
125
  /**
87
126
  * Keeps rows whose value is less than or equal to the filter value.
88
127
  *
89
128
  * This is implemented as the inverse of greater-than comparison.
90
129
  */
91
- declare const filterFn_lessThanOrEqualTo: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
92
- autoRemove: (val: any) => boolean;
93
- };
130
+ declare const filterFn_lessThanOrEqualTo: CreatedFilterFn<any, any>;
131
+ /**
132
+ * Keeps rows whose value falls between an exclusive min/max pair.
133
+ *
134
+ * Blank range endpoints are treated as open-ended.
135
+ */
136
+ declare const filterFn_between: CreatedFilterFn<any, any>;
137
+ /**
138
+ * Keeps rows whose value falls between an inclusive min/max pair.
139
+ *
140
+ * Blank range endpoints are treated as open-ended.
141
+ */
142
+ declare const filterFn_betweenInclusive: CreatedFilterFn<any, any>;
94
143
  /**
95
144
  * Keeps rows whose numeric value is inside an inclusive `[min, max]` range.
96
145
  *
97
146
  * Filter values are normalized so blank endpoints become open-ended and
98
147
  * reversed endpoints are swapped.
99
148
  */
100
- declare const filterFn_inNumberRange: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: [number, number]) => boolean) & {
101
- resolveFilterValue: (val: [any, any]) => readonly [number, number];
102
- autoRemove: (val: any) => boolean;
103
- };
149
+ declare const filterFn_inNumberRange: CreatedFilterFn<any, any>;
150
+ /**
151
+ * Keeps rows whose date value is inside an inclusive `[min, max]` date range.
152
+ *
153
+ * Row values and range endpoints may be `Date` objects, timestamps, or
154
+ * parseable date strings. Blank or invalid endpoints become open-ended and
155
+ * reversed endpoints are swapped. Rows without a valid date never match.
156
+ */
157
+ declare const filterFn_inDateRange: CreatedFilterFn<any, any>;
104
158
  /**
105
159
  * Keeps rows whose scalar column value equals at least one filter value.
106
160
  */
107
- declare const filterFn_arrHas: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
108
- autoRemove: (val: any) => boolean;
109
- };
161
+ declare const filterFn_arrHas: CreatedFilterFn<any, any>;
110
162
  /**
111
163
  * Keeps rows whose array or string column value includes at least one filter value.
112
164
  */
113
- declare const filterFn_arrIncludes: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
114
- autoRemove: (val: any) => boolean;
115
- };
165
+ declare const filterFn_arrIncludes: CreatedFilterFn<any, any>;
116
166
  /**
117
167
  * Keeps rows whose array column value includes every filter value.
118
168
  */
119
- declare const filterFn_arrIncludesAll: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
120
- autoRemove: (val: any) => boolean;
121
- };
169
+ declare const filterFn_arrIncludesAll: CreatedFilterFn<any, any>;
122
170
  /**
123
171
  * Keeps rows whose array column value includes at least one filter value.
124
172
  */
125
- declare const filterFn_arrIncludesSome: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
126
- autoRemove: (val: any) => boolean;
127
- };
173
+ declare const filterFn_arrIncludesSome: CreatedFilterFn<any, any>;
128
174
  /**
129
175
  * The built-in filter function registry.
130
176
  *
131
- * Pass this object to filtered row model creation or extend it with custom filter functions.
177
+ * Registering this full object opts out of tree-shaking: every built-in
178
+ * filter function ends up in your bundle. Prefer importing the `filterFn_*`
179
+ * functions you actually use and registering just those in the `filterFns`
180
+ * slot, or passing them directly to the `filterFn` column option.
181
+ *
182
+ * @deprecated Import individual `filterFn_*` functions instead for a smaller
183
+ * bundle. This export still works and is not going away in v9, but built-in
184
+ * name resolution (including `filterFn: 'auto'`) only finds functions you
185
+ * register yourself.
132
186
  */
133
187
  declare const filterFns: {
134
- arrIncludes: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
135
- autoRemove: (val: any) => boolean;
136
- };
137
- arrIncludesAll: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
138
- autoRemove: (val: any) => boolean;
139
- };
140
- arrHas: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
141
- autoRemove: (val: any) => boolean;
142
- };
143
- arrIncludesSome: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: Array<unknown>) => boolean) & {
144
- autoRemove: (val: any) => boolean;
145
- };
146
- between: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValues: [unknown, unknown]) => boolean) & {
147
- autoRemove: (val: any) => boolean;
148
- };
149
- betweenInclusive: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValues: [unknown, unknown]) => boolean) & {
150
- autoRemove: (val: any) => boolean;
151
- };
152
- equals: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
153
- autoRemove: (val: any) => boolean;
154
- };
155
- equalsString: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
156
- autoRemove: (val: any) => boolean;
157
- resolveFilterValue: (val: any) => string;
158
- };
159
- inNumberRange: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: [number, number]) => boolean) & {
160
- resolveFilterValue: (val: [any, any]) => readonly [number, number];
161
- autoRemove: (val: any) => boolean;
162
- };
163
- includesString: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
164
- autoRemove: (val: any) => boolean;
165
- resolveFilterValue: (val: any) => string;
166
- };
167
- includesStringSensitive: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
168
- autoRemove: (val: any) => boolean;
169
- resolveFilterValue: (val: any) => string;
170
- };
171
- weakEquals: (<TFeatures extends TableFeatures, TData extends RowData>(row: Row<TFeatures, TData>, columnId: string, filterValue: unknown) => boolean) & {
172
- autoRemove: (val: any) => boolean;
173
- };
188
+ arrIncludes: CreatedFilterFn<any, any>;
189
+ arrIncludesAll: CreatedFilterFn<any, any>;
190
+ arrHas: CreatedFilterFn<any, any>;
191
+ arrIncludesSome: CreatedFilterFn<any, any>;
192
+ between: CreatedFilterFn<any, any>;
193
+ betweenInclusive: CreatedFilterFn<any, any>;
194
+ empty: CreatedFilterFn<any, any>;
195
+ endsWith: CreatedFilterFn<any, any>;
196
+ equals: CreatedFilterFn<any, any>;
197
+ equalsString: CreatedFilterFn<any, any>;
198
+ equalsStringSensitive: CreatedFilterFn<any, any>;
199
+ inDateRange: CreatedFilterFn<any, any>;
200
+ inNumberRange: CreatedFilterFn<any, any>;
201
+ includesString: CreatedFilterFn<any, any>;
202
+ includesStringSensitive: CreatedFilterFn<any, any>;
203
+ notEmpty: CreatedFilterFn<any, any>;
204
+ startsWith: CreatedFilterFn<any, any>;
205
+ weakEquals: CreatedFilterFn<any, any>;
174
206
  };
175
207
  type BuiltInFilterFn = keyof typeof filterFns;
176
208
  //#endregion
177
- export { BuiltInFilterFn, filterFn_arrHas, filterFn_arrIncludes, filterFn_arrIncludesAll, filterFn_arrIncludesSome, filterFn_equals, filterFn_equalsString, filterFn_equalsStringSensitive, filterFn_greaterThan, filterFn_greaterThanOrEqualTo, filterFn_inNumberRange, filterFn_includesString, filterFn_includesStringSensitive, filterFn_lessThan, filterFn_lessThanOrEqualTo, filterFn_weakEquals, filterFns };
209
+ export { BuiltInFilterFn, constructFilterFn, filterFn_arrHas, filterFn_arrIncludes, filterFn_arrIncludesAll, filterFn_arrIncludesSome, filterFn_between, filterFn_betweenInclusive, filterFn_empty, filterFn_endsWith, filterFn_equals, filterFn_equalsString, filterFn_equalsStringSensitive, filterFn_greaterThan, filterFn_greaterThanOrEqualTo, filterFn_inDateRange, filterFn_inNumberRange, filterFn_includesString, filterFn_includesStringSensitive, filterFn_lessThan, filterFn_lessThanOrEqualTo, filterFn_notEmpty, filterFn_startsWith, filterFn_weakEquals, filterFns };
178
210
  //# sourceMappingURL=filterFns.d.ts.map