@tanstack/table-core 9.0.0-beta.26 → 9.0.0-beta.27

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 (52) hide show
  1. package/dist/features/column-ordering/columnOrderingFeature.cjs +2 -1
  2. package/dist/features/column-ordering/columnOrderingFeature.cjs.map +1 -1
  3. package/dist/features/column-ordering/columnOrderingFeature.js +2 -1
  4. package/dist/features/column-ordering/columnOrderingFeature.js.map +1 -1
  5. package/dist/features/column-pinning/columnPinningFeature.cjs +24 -12
  6. package/dist/features/column-pinning/columnPinningFeature.cjs.map +1 -1
  7. package/dist/features/column-pinning/columnPinningFeature.js +24 -12
  8. package/dist/features/column-pinning/columnPinningFeature.js.map +1 -1
  9. package/dist/features/column-resizing/columnResizingFeature.utils.cjs +62 -24
  10. package/dist/features/column-resizing/columnResizingFeature.utils.cjs.map +1 -1
  11. package/dist/features/column-resizing/columnResizingFeature.utils.js +62 -24
  12. package/dist/features/column-resizing/columnResizingFeature.utils.js.map +1 -1
  13. package/dist/features/column-sizing/columnSizingFeature.cjs +35 -45
  14. package/dist/features/column-sizing/columnSizingFeature.cjs.map +1 -1
  15. package/dist/features/column-sizing/columnSizingFeature.js +36 -46
  16. package/dist/features/column-sizing/columnSizingFeature.js.map +1 -1
  17. package/dist/features/column-sizing/columnSizingFeature.types.d.cts +38 -1
  18. package/dist/features/column-sizing/columnSizingFeature.types.d.ts +38 -1
  19. package/dist/features/column-sizing/columnSizingFeature.utils.cjs +49 -10
  20. package/dist/features/column-sizing/columnSizingFeature.utils.cjs.map +1 -1
  21. package/dist/features/column-sizing/columnSizingFeature.utils.d.cts +18 -4
  22. package/dist/features/column-sizing/columnSizingFeature.utils.d.ts +18 -4
  23. package/dist/features/column-sizing/columnSizingFeature.utils.js +49 -11
  24. package/dist/features/column-sizing/columnSizingFeature.utils.js.map +1 -1
  25. package/dist/features/column-visibility/columnVisibilityFeature.cjs +8 -4
  26. package/dist/features/column-visibility/columnVisibilityFeature.cjs.map +1 -1
  27. package/dist/features/column-visibility/columnVisibilityFeature.js +8 -4
  28. package/dist/features/column-visibility/columnVisibilityFeature.js.map +1 -1
  29. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +3 -2
  30. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
  31. package/dist/features/column-visibility/columnVisibilityFeature.utils.js +3 -2
  32. package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
  33. package/dist/features/row-selection/rowSelectionFeature.utils.cjs +1 -1
  34. package/dist/features/row-selection/rowSelectionFeature.utils.cjs.map +1 -1
  35. package/dist/features/row-selection/rowSelectionFeature.utils.js +1 -1
  36. package/dist/features/row-selection/rowSelectionFeature.utils.js.map +1 -1
  37. package/dist/index.d.cts +2 -2
  38. package/dist/index.d.ts +2 -2
  39. package/dist/static-functions.cjs +1 -0
  40. package/dist/static-functions.d.cts +2 -2
  41. package/dist/static-functions.d.ts +2 -2
  42. package/dist/static-functions.js +2 -2
  43. package/package.json +1 -1
  44. package/src/features/column-ordering/columnOrderingFeature.ts +1 -0
  45. package/src/features/column-pinning/columnPinningFeature.ts +12 -0
  46. package/src/features/column-resizing/columnResizingFeature.utils.ts +96 -44
  47. package/src/features/column-sizing/columnSizingFeature.ts +18 -18
  48. package/src/features/column-sizing/columnSizingFeature.types.ts +39 -0
  49. package/src/features/column-sizing/columnSizingFeature.utils.ts +94 -39
  50. package/src/features/column-visibility/columnVisibilityFeature.ts +4 -0
  51. package/src/features/column-visibility/columnVisibilityFeature.utils.ts +4 -2
  52. package/src/features/row-selection/rowSelectionFeature.utils.ts +5 -1
@@ -4,7 +4,6 @@ import {
4
4
  table_getPinnedVisibleLeafColumns,
5
5
  table_getRightHeaderGroups,
6
6
  } from '../column-pinning/columnPinningFeature.utils'
7
- import { column_getIndex } from '../column-ordering/columnOrderingFeature.utils'
8
7
  import {
9
8
  callMemoOrStaticFn,
10
9
  cloneState,
@@ -17,7 +16,11 @@ import type { TableFeatures } from '../../types/TableFeatures'
17
16
  import type { Table_Internal } from '../../types/Table'
18
17
  import type { Header } from '../../types/Header'
19
18
  import type { Column_Internal } from '../../types/Column'
20
- import type { ColumnSizingState } from './columnSizingFeature.types'
19
+ import type {
20
+ ColumnOffsets,
21
+ ColumnOffsetsByPosition,
22
+ ColumnSizingState,
23
+ } from './columnSizingFeature.types'
21
24
 
22
25
  /**
23
26
  * Creates the default committed column sizing state.
@@ -86,6 +89,85 @@ export function column_getSize<
86
89
  )
87
90
  }
88
91
 
92
+ function buildColumnOffsets<
93
+ TFeatures extends TableFeatures,
94
+ TData extends RowData,
95
+ >(columns: Array<Column_Internal<TFeatures, TData, unknown>>): ColumnOffsets {
96
+ const starts = makeObjectMap<number>()
97
+ const afters = makeObjectMap<number>()
98
+ const sizes = new Array<number>(columns.length)
99
+
100
+ let start = 0
101
+ for (let i = 0; i < columns.length; i++) {
102
+ const column = columns[i]!
103
+ const size = callMemoOrStaticFn(column, 'getSize', column_getSize)
104
+ sizes[i] = size
105
+ starts[column.id] = start
106
+ start += size
107
+ }
108
+
109
+ let after = 0
110
+ for (let i = columns.length - 1; i >= 0; i--) {
111
+ afters[columns[i]!.id] = after
112
+ after += sizes[i]!
113
+ }
114
+
115
+ return { starts, afters }
116
+ }
117
+
118
+ /**
119
+ * Builds start and after offset maps for every visible leaf column, computed
120
+ * once per pinning region plus the full visible list.
121
+ *
122
+ * A single table-level memo of this result backs all `column.getStart()` and
123
+ * `column.getAfter()` calls with O(1) lookups.
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * const offsets = table_getColumnOffsets(table)
128
+ * const leftOffset = offsets.left.starts[column.id]
129
+ * ```
130
+ */
131
+ export function table_getColumnOffsets<
132
+ TFeatures extends TableFeatures,
133
+ TData extends RowData,
134
+ >(table: Table_Internal<TFeatures, TData>): ColumnOffsetsByPosition {
135
+ return {
136
+ all: buildColumnOffsets(
137
+ table_getPinnedVisibleLeafColumns(table) as Array<
138
+ Column_Internal<TFeatures, TData, unknown>
139
+ >,
140
+ ),
141
+ center: buildColumnOffsets(
142
+ table_getPinnedVisibleLeafColumns(table, 'center') as Array<
143
+ Column_Internal<TFeatures, TData, unknown>
144
+ >,
145
+ ),
146
+ left: buildColumnOffsets(
147
+ table_getPinnedVisibleLeafColumns(table, 'left') as Array<
148
+ Column_Internal<TFeatures, TData, unknown>
149
+ >,
150
+ ),
151
+ right: buildColumnOffsets(
152
+ table_getPinnedVisibleLeafColumns(table, 'right') as Array<
153
+ Column_Internal<TFeatures, TData, unknown>
154
+ >,
155
+ ),
156
+ }
157
+ }
158
+
159
+ function toOffsetsKey(
160
+ position: ColumnPinningPosition | 'center' | undefined,
161
+ ): keyof ColumnOffsetsByPosition {
162
+ return position === 'left'
163
+ ? 'left'
164
+ : position === 'right'
165
+ ? 'right'
166
+ : position === 'center'
167
+ ? 'center'
168
+ : 'all' // undefined | false use the full visible list
169
+ }
170
+
89
171
  /**
90
172
  * Computes the offset from the start edge of a pinning region to this column.
91
173
  *
@@ -103,28 +185,14 @@ export function column_getStart<
103
185
  TValue extends CellData = CellData,
104
186
  >(
105
187
  column: Column_Internal<TFeatures, TData, TValue>,
106
- position: ColumnPinningPosition | 'center',
188
+ position?: ColumnPinningPosition | 'center',
107
189
  ): number {
108
- const index = callMemoOrStaticFn(
109
- column,
110
- 'getIndex',
111
- column_getIndex,
112
- position,
113
- )
114
- if (index <= 0) return 0
115
-
116
- const visibleLeafColumns = callMemoOrStaticFn(
190
+ const offsets = callMemoOrStaticFn(
117
191
  column.table,
118
- 'getPinnedVisibleLeafColumns',
119
- table_getPinnedVisibleLeafColumns,
120
- position,
121
- )
122
-
123
- const prevColumn = visibleLeafColumns[index - 1]!
124
- return (
125
- callMemoOrStaticFn(prevColumn, 'getStart', column_getStart, position) +
126
- callMemoOrStaticFn(prevColumn, 'getSize', column_getSize)
192
+ 'getColumnOffsets',
193
+ table_getColumnOffsets,
127
194
  )
195
+ return offsets[toOffsetsKey(position)].starts[column.id] ?? 0
128
196
  }
129
197
 
130
198
  /**
@@ -144,27 +212,14 @@ export function column_getAfter<
144
212
  TValue extends CellData = CellData,
145
213
  >(
146
214
  column: Column_Internal<TFeatures, TData, TValue>,
147
- position: ColumnPinningPosition | 'center',
215
+ position?: ColumnPinningPosition | 'center',
148
216
  ): number {
149
- const visibleLeafColumns = callMemoOrStaticFn(
217
+ const offsets = callMemoOrStaticFn(
150
218
  column.table,
151
- 'getPinnedVisibleLeafColumns',
152
- table_getPinnedVisibleLeafColumns,
153
- position,
154
- )
155
- const index = callMemoOrStaticFn(
156
- column,
157
- 'getIndex',
158
- column_getIndex,
159
- position,
160
- )
161
- if (index < 0 || index >= visibleLeafColumns.length - 1) return 0
162
-
163
- const nextColumn = visibleLeafColumns[index + 1]!
164
- return (
165
- callMemoOrStaticFn(nextColumn, 'getSize', column_getSize) +
166
- callMemoOrStaticFn(nextColumn, 'getAfter', column_getAfter, position)
219
+ 'getColumnOffsets',
220
+ table_getColumnOffsets,
167
221
  )
222
+ return offsets[toOffsetsKey(position)].afters[column.id] ?? 0
168
223
  }
169
224
 
170
225
  /**
@@ -88,7 +88,9 @@ export const columnVisibilityFeature: TableFeature = {
88
88
  memoDeps: () => [
89
89
  table.atoms.columnVisibility?.get(),
90
90
  table.atoms.columnOrder?.get(),
91
+ table.atoms.grouping?.get(),
91
92
  table.options.columns,
93
+ table.options.groupedColumnMode,
92
94
  ],
93
95
  },
94
96
  table_getVisibleLeafColumns: {
@@ -96,7 +98,9 @@ export const columnVisibilityFeature: TableFeature = {
96
98
  memoDeps: () => [
97
99
  table.atoms.columnVisibility?.get(),
98
100
  table.atoms.columnOrder?.get(),
101
+ table.atoms.grouping?.get(),
99
102
  table.options.columns,
103
+ table.options.groupedColumnMode,
100
104
  ],
101
105
  },
102
106
  table_setColumnVisibility: {
@@ -72,6 +72,9 @@ export function column_getIsVisible<
72
72
  TData extends RowData,
73
73
  TValue extends CellData = CellData,
74
74
  >(column: Column_Internal<TFeatures, TData, TValue>): boolean {
75
+ const columnVisibility = column.table.atoms.columnVisibility?.get()
76
+ if (!columnVisibility) return true
77
+
75
78
  const childColumns = column.columns
76
79
  if (childColumns.length) {
77
80
  return childColumns.some((childColumn) =>
@@ -79,9 +82,8 @@ export function column_getIsVisible<
79
82
  )
80
83
  }
81
84
 
82
- const columnVisibility = column.table.atoms.columnVisibility?.get()
83
85
  return (
84
- (columnVisibility && hasOwn(columnVisibility, column.id)
86
+ (hasOwn(columnVisibility, column.id)
85
87
  ? columnVisibility[column.id]
86
88
  : undefined) ?? true
87
89
  )
@@ -416,7 +416,11 @@ export function table_getIsSomePageRowsSelected<
416
416
  return table
417
417
  .getPaginatedRowModel()
418
418
  .flatRows.filter((row) => row_getCanSelect(row))
419
- .some((row) => row_getIsSelected(row) || row_getIsSomeSelected(row))
419
+ .some(
420
+ (row) =>
421
+ row_getIsSelected(row) ||
422
+ callMemoOrStaticFn(row, 'getIsSomeSelected', row_getIsSomeSelected),
423
+ )
420
424
  }
421
425
 
422
426
  /**