@tanstack/table-core 9.0.0-alpha.46 → 9.0.0-alpha.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 (163) hide show
  1. package/dist/core/cells/constructCell.cjs +4 -3
  2. package/dist/core/cells/constructCell.cjs.map +1 -1
  3. package/dist/core/cells/constructCell.js +4 -3
  4. package/dist/core/cells/constructCell.js.map +1 -1
  5. package/dist/core/columns/constructColumn.cjs +6 -4
  6. package/dist/core/columns/constructColumn.cjs.map +1 -1
  7. package/dist/core/columns/constructColumn.js +6 -4
  8. package/dist/core/columns/constructColumn.js.map +1 -1
  9. package/dist/core/columns/coreColumnsFeature.utils.cjs +10 -2
  10. package/dist/core/columns/coreColumnsFeature.utils.cjs.map +1 -1
  11. package/dist/core/columns/coreColumnsFeature.utils.js +10 -2
  12. package/dist/core/columns/coreColumnsFeature.utils.js.map +1 -1
  13. package/dist/core/headers/buildHeaderGroups.cjs +27 -19
  14. package/dist/core/headers/buildHeaderGroups.cjs.map +1 -1
  15. package/dist/core/headers/buildHeaderGroups.js +27 -19
  16. package/dist/core/headers/buildHeaderGroups.js.map +1 -1
  17. package/dist/core/headers/constructHeader.cjs +4 -3
  18. package/dist/core/headers/constructHeader.cjs.map +1 -1
  19. package/dist/core/headers/constructHeader.js +4 -3
  20. package/dist/core/headers/constructHeader.js.map +1 -1
  21. package/dist/core/headers/coreHeadersFeature.cjs +1 -6
  22. package/dist/core/headers/coreHeadersFeature.cjs.map +1 -1
  23. package/dist/core/headers/coreHeadersFeature.js +2 -7
  24. package/dist/core/headers/coreHeadersFeature.js.map +1 -1
  25. package/dist/core/headers/coreHeadersFeature.utils.cjs +20 -18
  26. package/dist/core/headers/coreHeadersFeature.utils.cjs.map +1 -1
  27. package/dist/core/headers/coreHeadersFeature.utils.d.cts +1 -1
  28. package/dist/core/headers/coreHeadersFeature.utils.d.ts +1 -1
  29. package/dist/core/headers/coreHeadersFeature.utils.js +21 -19
  30. package/dist/core/headers/coreHeadersFeature.utils.js.map +1 -1
  31. package/dist/core/reactivity/coreReactivityFeature.types.d.cts +4 -0
  32. package/dist/core/reactivity/coreReactivityFeature.types.d.ts +4 -0
  33. package/dist/core/rows/constructRow.cjs +8 -6
  34. package/dist/core/rows/constructRow.cjs.map +1 -1
  35. package/dist/core/rows/constructRow.js +8 -6
  36. package/dist/core/rows/constructRow.js.map +1 -1
  37. package/dist/core/rows/coreRowsFeature.utils.cjs +9 -4
  38. package/dist/core/rows/coreRowsFeature.utils.cjs.map +1 -1
  39. package/dist/core/rows/coreRowsFeature.utils.js +9 -4
  40. package/dist/core/rows/coreRowsFeature.utils.js.map +1 -1
  41. package/dist/core/table/constructTable.cjs +9 -5
  42. package/dist/core/table/constructTable.cjs.map +1 -1
  43. package/dist/core/table/constructTable.js +9 -5
  44. package/dist/core/table/constructTable.js.map +1 -1
  45. package/dist/core/table/coreTablesFeature.utils.cjs +5 -1
  46. package/dist/core/table/coreTablesFeature.utils.cjs.map +1 -1
  47. package/dist/core/table/coreTablesFeature.utils.js +5 -1
  48. package/dist/core/table/coreTablesFeature.utils.js.map +1 -1
  49. package/dist/features/column-faceting/createFacetedMinMaxValues.cjs +8 -5
  50. package/dist/features/column-faceting/createFacetedMinMaxValues.cjs.map +1 -1
  51. package/dist/features/column-faceting/createFacetedMinMaxValues.js +8 -5
  52. package/dist/features/column-faceting/createFacetedMinMaxValues.js.map +1 -1
  53. package/dist/features/column-faceting/createFacetedRowModel.cjs +8 -3
  54. package/dist/features/column-faceting/createFacetedRowModel.cjs.map +1 -1
  55. package/dist/features/column-faceting/createFacetedRowModel.js +8 -3
  56. package/dist/features/column-faceting/createFacetedRowModel.js.map +1 -1
  57. package/dist/features/column-faceting/createFacetedUniqueValues.cjs +7 -4
  58. package/dist/features/column-faceting/createFacetedUniqueValues.cjs.map +1 -1
  59. package/dist/features/column-faceting/createFacetedUniqueValues.js +7 -4
  60. package/dist/features/column-faceting/createFacetedUniqueValues.js.map +1 -1
  61. package/dist/features/column-filtering/createFilteredRowModel.cjs +11 -5
  62. package/dist/features/column-filtering/createFilteredRowModel.cjs.map +1 -1
  63. package/dist/features/column-filtering/createFilteredRowModel.js +11 -5
  64. package/dist/features/column-filtering/createFilteredRowModel.js.map +1 -1
  65. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs +16 -6
  66. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs.map +1 -1
  67. package/dist/features/column-ordering/columnOrderingFeature.utils.js +16 -6
  68. package/dist/features/column-ordering/columnOrderingFeature.utils.js.map +1 -1
  69. package/dist/features/column-pinning/columnPinningFeature.utils.cjs +41 -24
  70. package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
  71. package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +5 -4
  72. package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +5 -4
  73. package/dist/features/column-pinning/columnPinningFeature.utils.js +42 -25
  74. package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
  75. package/dist/features/column-sizing/columnSizingFeature.cjs +28 -4
  76. package/dist/features/column-sizing/columnSizingFeature.cjs.map +1 -1
  77. package/dist/features/column-sizing/columnSizingFeature.js +28 -4
  78. package/dist/features/column-sizing/columnSizingFeature.js.map +1 -1
  79. package/dist/features/column-visibility/columnVisibilityFeature.cjs +23 -14
  80. package/dist/features/column-visibility/columnVisibilityFeature.cjs.map +1 -1
  81. package/dist/features/column-visibility/columnVisibilityFeature.js +24 -15
  82. package/dist/features/column-visibility/columnVisibilityFeature.js.map +1 -1
  83. package/dist/features/column-visibility/columnVisibilityFeature.types.d.cts +4 -0
  84. package/dist/features/column-visibility/columnVisibilityFeature.types.d.ts +4 -0
  85. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +40 -13
  86. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
  87. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.cts +12 -1
  88. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.ts +12 -1
  89. package/dist/features/column-visibility/columnVisibilityFeature.utils.js +40 -14
  90. package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
  91. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs +2 -2
  92. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs.map +1 -1
  93. package/dist/features/row-expanding/rowExpandingFeature.utils.js +2 -2
  94. package/dist/features/row-expanding/rowExpandingFeature.utils.js.map +1 -1
  95. package/dist/features/row-pinning/rowPinningFeature.utils.cjs +13 -7
  96. package/dist/features/row-pinning/rowPinningFeature.utils.cjs.map +1 -1
  97. package/dist/features/row-pinning/rowPinningFeature.utils.js +13 -7
  98. package/dist/features/row-pinning/rowPinningFeature.utils.js.map +1 -1
  99. package/dist/features/row-selection/rowSelectionFeature.utils.cjs +6 -3
  100. package/dist/features/row-selection/rowSelectionFeature.utils.cjs.map +1 -1
  101. package/dist/features/row-selection/rowSelectionFeature.utils.js +6 -3
  102. package/dist/features/row-selection/rowSelectionFeature.utils.js.map +1 -1
  103. package/dist/features/row-sorting/createSortedRowModel.cjs +13 -8
  104. package/dist/features/row-sorting/createSortedRowModel.cjs.map +1 -1
  105. package/dist/features/row-sorting/createSortedRowModel.js +13 -8
  106. package/dist/features/row-sorting/createSortedRowModel.js.map +1 -1
  107. package/dist/features/row-sorting/rowSortingFeature.utils.cjs +2 -2
  108. package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
  109. package/dist/features/row-sorting/rowSortingFeature.utils.js +2 -2
  110. package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
  111. package/dist/fns/aggregationFns.cjs +14 -7
  112. package/dist/fns/aggregationFns.cjs.map +1 -1
  113. package/dist/fns/aggregationFns.js +14 -8
  114. package/dist/fns/aggregationFns.js.map +1 -1
  115. package/dist/index.cjs +0 -4
  116. package/dist/index.d.cts +2 -2
  117. package/dist/index.d.ts +2 -2
  118. package/dist/index.js +2 -2
  119. package/dist/static-functions.cjs +1 -0
  120. package/dist/static-functions.d.cts +2 -2
  121. package/dist/static-functions.d.ts +2 -2
  122. package/dist/static-functions.js +2 -2
  123. package/dist/store-reactivity-bindings.cjs +1 -0
  124. package/dist/store-reactivity-bindings.cjs.map +1 -1
  125. package/dist/store-reactivity-bindings.js +1 -0
  126. package/dist/store-reactivity-bindings.js.map +1 -1
  127. package/dist/utils.cjs +18 -39
  128. package/dist/utils.cjs.map +1 -1
  129. package/dist/utils.d.cts +1 -23
  130. package/dist/utils.d.ts +1 -23
  131. package/dist/utils.js +19 -36
  132. package/dist/utils.js.map +1 -1
  133. package/package.json +1 -1
  134. package/src/core/cells/constructCell.ts +3 -2
  135. package/src/core/columns/constructColumn.ts +5 -3
  136. package/src/core/columns/coreColumnsFeature.utils.ts +6 -2
  137. package/src/core/headers/buildHeaderGroups.ts +29 -30
  138. package/src/core/headers/constructHeader.ts +3 -2
  139. package/src/core/headers/coreHeadersFeature.ts +2 -27
  140. package/src/core/headers/coreHeadersFeature.utils.ts +29 -43
  141. package/src/core/reactivity/coreReactivityFeature.types.ts +4 -0
  142. package/src/core/rows/constructRow.ts +6 -4
  143. package/src/core/rows/coreRowsFeature.utils.ts +11 -4
  144. package/src/core/table/constructTable.ts +6 -4
  145. package/src/core/table/coreTablesFeature.utils.ts +3 -1
  146. package/src/features/column-faceting/createFacetedMinMaxValues.ts +8 -10
  147. package/src/features/column-faceting/createFacetedRowModel.ts +10 -6
  148. package/src/features/column-faceting/createFacetedUniqueValues.ts +4 -3
  149. package/src/features/column-filtering/createFilteredRowModel.ts +14 -8
  150. package/src/features/column-ordering/columnOrderingFeature.utils.ts +14 -6
  151. package/src/features/column-pinning/columnPinningFeature.utils.ts +53 -37
  152. package/src/features/column-sizing/columnSizingFeature.ts +16 -0
  153. package/src/features/column-visibility/columnVisibilityFeature.ts +8 -0
  154. package/src/features/column-visibility/columnVisibilityFeature.types.ts +7 -0
  155. package/src/features/column-visibility/columnVisibilityFeature.utils.ts +50 -17
  156. package/src/features/row-expanding/rowExpandingFeature.utils.ts +2 -2
  157. package/src/features/row-pinning/rowPinningFeature.utils.ts +20 -18
  158. package/src/features/row-selection/rowSelectionFeature.utils.ts +20 -19
  159. package/src/features/row-sorting/createSortedRowModel.ts +16 -13
  160. package/src/features/row-sorting/rowSortingFeature.utils.ts +2 -2
  161. package/src/fns/aggregationFns.ts +20 -8
  162. package/src/store-reactivity-bindings.ts +1 -0
  163. package/src/utils.ts +19 -46
@@ -79,16 +79,11 @@ function _createSortedRowModel<
79
79
  })
80
80
 
81
81
  const sortData = (rows: Array<Row<TFeatures, TData>>) => {
82
- // This will also perform a stable sorting using the row index
83
- // if needed.
84
- // Preserve prototype chain so methods like getValue() remain accessible
85
- const sortedData = rows.map((row) => {
86
- const cloned = Object.create(Object.getPrototypeOf(row))
87
- return Object.assign(cloned, row)
88
- })
82
+ const sortedData = rows.slice()
89
83
 
90
84
  sortedData.sort((rowA, rowB) => {
91
- for (const sortEntry of availableSorting) {
85
+ for (let i = 0; i < availableSorting.length; i++) {
86
+ const sortEntry = availableSorting[i]!
92
87
  const columnInfo = columnInfoById[sortEntry.id]!
93
88
  const sortUndefined = columnInfo.sortUndefined
94
89
  const isDesc = sortEntry.desc
@@ -135,13 +130,21 @@ function _createSortedRowModel<
135
130
  return rowA.index - rowB.index
136
131
  })
137
132
 
138
- // If there are sub-rows, sort them
139
- sortedData.forEach((row) => {
140
- sortedFlatRows.push(row)
133
+ // If there are sub-rows, sort them. Clone only rows that need mutation
134
+ // (i.e. have subRows) so we don't corrupt the source row model.
135
+ for (let i = 0; i < sortedData.length; i++) {
136
+ const row = sortedData[i]!
141
137
  if (row.subRows.length) {
142
- row.subRows = sortData(row.subRows)
138
+ // Preserve prototype chain so methods like getValue() remain accessible
139
+ const cloned = Object.create(Object.getPrototypeOf(row))
140
+ Object.assign(cloned, row)
141
+ cloned.subRows = sortData(row.subRows)
142
+ sortedData[i] = cloned
143
+ sortedFlatRows.push(cloned)
144
+ } else {
145
+ sortedFlatRows.push(row)
143
146
  }
144
- })
147
+ }
145
148
 
146
149
  return sortedData
147
150
  }
@@ -90,8 +90,8 @@ export function column_getAutoSortFn<
90
90
 
91
91
  let isString = false
92
92
 
93
- for (const row of firstRows) {
94
- const value = row.getValue(column.id)
93
+ for (let i = 0; i < firstRows.length; i++) {
94
+ const value = firstRows[i]!.getValue(column.id)
95
95
 
96
96
  if (Object.prototype.toString.call(value) === '[object Date]') {
97
97
  sortFn = sortFns?.datetime
@@ -1,4 +1,3 @@
1
- import { isNumberArray } from '../utils'
2
1
  import type { RowData } from '../types/type-utils'
3
2
  import type { TableFeatures } from '../types/TableFeatures'
4
3
  import type { Row } from '../types/Row'
@@ -153,17 +152,22 @@ export const aggregationFn_median: AggregationFn<any, any> = <
153
152
  return
154
153
  }
155
154
 
156
- const values = leafRows.map((row) => row.getValue(columnId))
157
- if (!isNumberArray(values)) {
158
- return
155
+ const values: Array<number> = new Array(leafRows.length)
156
+ for (let i = 0; i < leafRows.length; i++) {
157
+ const v = leafRows[i]!.getValue(columnId)
158
+ if (typeof v !== 'number') return
159
+ values[i] = v
159
160
  }
161
+
160
162
  if (values.length === 1) {
161
163
  return values[0]
162
164
  }
163
165
 
164
166
  const mid = Math.floor(values.length / 2)
165
- const nums = values.sort((a, b) => a - b)
166
- return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1]! + nums[mid]!) / 2
167
+ values.sort((a, b) => a - b)
168
+ return values.length % 2 !== 0
169
+ ? values[mid]
170
+ : (values[mid - 1]! + values[mid]!) / 2
167
171
  }
168
172
 
169
173
  /**
@@ -176,7 +180,11 @@ export const aggregationFn_unique: AggregationFn<any, any> = <
176
180
  columnId: string,
177
181
  leafRows: Array<Row<any, any>>,
178
182
  ) => {
179
- return Array.from(new Set(leafRows.map((d) => d.getValue(columnId))).values())
183
+ const set = new Set<unknown>()
184
+ for (let i = 0; i < leafRows.length; i++) {
185
+ set.add(leafRows[i]!.getValue(columnId))
186
+ }
187
+ return Array.from(set.values())
180
188
  }
181
189
 
182
190
  /**
@@ -189,7 +197,11 @@ export const aggregationFn_uniqueCount: AggregationFn<any, any> = <
189
197
  columnId: string,
190
198
  leafRows: Array<Row<any, any>>,
191
199
  ) => {
192
- return new Set(leafRows.map((d) => d.getValue(columnId))).size
200
+ const set = new Set<unknown>()
201
+ for (let i = 0; i < leafRows.length; i++) {
202
+ set.add(leafRows[i]!.getValue(columnId))
203
+ }
204
+ return set.size
193
205
  }
194
206
 
195
207
  /**
@@ -20,6 +20,7 @@ export function storeReactivityBindings(): TableReactivityBindings {
20
20
  return {
21
21
  createOptionsStore: true,
22
22
  batch,
23
+ schedule: (fn) => queueMicrotask(fn),
23
24
  untrack: (fn) => fn(),
24
25
  createReadonlyAtom: (fn, options) => {
25
26
  return createAtom(() => fn(), {
package/src/utils.ts CHANGED
@@ -32,8 +32,10 @@ export function cloneState<T>(value: T): T {
32
32
  }
33
33
 
34
34
  const copy: Record<string, unknown> = {}
35
+ const keys = Object.keys(value)
35
36
 
36
- for (const key of Object.keys(value)) {
37
+ for (let i = 0; i < keys.length; i++) {
38
+ const key = keys[i]!
37
39
  copy[key] = cloneState((value as Record<string, unknown>)[key])
38
40
  }
39
41
 
@@ -43,11 +45,6 @@ export function cloneState<T>(value: T): T {
43
45
  return value
44
46
  }
45
47
 
46
- /**
47
- * A no-operation function used as a safe default callback.
48
- */
49
- export function noop() {}
50
-
51
48
  /**
52
49
  * Creates a table state updater for a single state slice.
53
50
  *
@@ -73,13 +70,6 @@ export function isFunction<T extends AnyFunction>(d: any): d is T {
73
70
  return d instanceof Function
74
71
  }
75
72
 
76
- /**
77
- * Returns whether a value is an array containing only numbers.
78
- */
79
- export function isNumberArray(d: any): d is Array<number> {
80
- return Array.isArray(d) && d.every((val) => typeof val === 'number')
81
- }
82
-
83
73
  /**
84
74
  * Flattens a tree of nodes by recursively reading child nodes.
85
75
  *
@@ -106,29 +96,6 @@ export function flattenBy<TNode>(
106
96
  return flat
107
97
  }
108
98
 
109
- /**
110
- * Symbol used to attach internal memo metadata to wrapped functions.
111
- *
112
- * This is exported so diagnostics can recognize memoized functions without
113
- * depending on a string property name.
114
- */
115
- export const $internalMemoFnMeta = Symbol('memoFnMeta')
116
- export type MemoFnMeta = { originalArgsLength?: number }
117
-
118
- /**
119
- * @internal
120
- */
121
- function setMemoFnMeta(fn: Function, meta: MemoFnMeta) {
122
- Object.defineProperty(fn, $internalMemoFnMeta, { value: meta })
123
- }
124
-
125
- /**
126
- * @internal
127
- */
128
- export function getMemoFnMeta(fn: any): MemoFnMeta | null {
129
- return (typeof fn === 'function' && fn[$internalMemoFnMeta]) ?? null
130
- }
131
-
132
99
  interface MemoOptions<TDeps extends ReadonlyArray<any>, TDepArgs, TResult> {
133
100
  fn: (...args: NoInfer<TDeps>) => TResult
134
101
  memoDeps?: (depArgs?: TDepArgs) => [...TDeps] | undefined
@@ -159,10 +126,15 @@ export const memo = <TDeps extends ReadonlyArray<any>, TDepArgs, TResult>({
159
126
  const memoizedFn = (depArgs?: TDepArgs): TResult => {
160
127
  onBeforeCompare?.()
161
128
  const newDeps = memoDeps?.(depArgs)
162
- const depsChanged =
163
- !newDeps ||
164
- newDeps.length !== deps?.length ||
165
- newDeps.some((dep: any, index: number) => deps?.[index] !== dep)
129
+ let depsChanged = !newDeps || newDeps.length !== deps?.length
130
+ if (!depsChanged && newDeps) {
131
+ for (let i = 0; i < newDeps.length; i++) {
132
+ if (newDeps[i] !== deps![i]) {
133
+ depsChanged = true
134
+ break
135
+ }
136
+ }
137
+ }
166
138
  onAfterCompare?.(depsChanged)
167
139
 
168
140
  if (!depsChanged) {
@@ -178,8 +150,6 @@ export const memo = <TDeps extends ReadonlyArray<any>, TDepArgs, TResult>({
178
150
  return result
179
151
  }
180
152
 
181
- setMemoFnMeta(memoizedFn, { originalArgsLength: fn.length })
182
-
183
153
  return memoizedFn
184
154
  }
185
155
 
@@ -283,6 +253,11 @@ export function tableMemo<
283
253
  console.groupEnd()
284
254
  }
285
255
 
256
+ const onAfterUpdateHandler = () => {
257
+ const { schedule, untrack } = table._reactivity
258
+ schedule(() => untrack(() => onAfterUpdate?.()))
259
+ }
260
+
286
261
  const debugOptions =
287
262
  process.env.NODE_ENV === 'development'
288
263
  ? {
@@ -313,12 +288,12 @@ export function tableMemo<
313
288
  Math.round((endCalcTime - startCalcTime) * 100) / 100
314
289
  logTime(executionTime, true)
315
290
  }
316
- queueMicrotask(() => onAfterUpdate?.())
291
+ onAfterUpdateHandler()
317
292
  },
318
293
  }
319
294
  : {
320
295
  onAfterUpdate: () => {
321
- queueMicrotask(() => onAfterUpdate?.())
296
+ onAfterUpdateHandler()
322
297
  },
323
298
  }
324
299
 
@@ -440,8 +415,6 @@ export function assignPrototypeAPIs<
440
415
  return fn(this, ...args)
441
416
  }
442
417
  }
443
-
444
- setMemoFnMeta(prototype[fnKey], { originalArgsLength: fn.length })
445
418
  }
446
419
  }
447
420