@tanstack/table-core 8.0.0-alpha.9 → 8.0.0-beta.0

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 (186) hide show
  1. package/build/cjs/aggregationFns.js +120 -0
  2. package/build/cjs/aggregationFns.js.map +1 -0
  3. package/build/cjs/core/cell.js +40 -0
  4. package/build/cjs/core/cell.js.map +1 -0
  5. package/build/cjs/core/column.js +88 -0
  6. package/build/cjs/core/column.js.map +1 -0
  7. package/build/cjs/core/headers.js +403 -0
  8. package/build/cjs/core/headers.js.map +1 -0
  9. package/build/cjs/core/instance.js +255 -0
  10. package/build/cjs/core/instance.js.map +1 -0
  11. package/build/cjs/core/row.js +77 -0
  12. package/build/cjs/core/row.js.map +1 -0
  13. package/build/cjs/createTable.js +36 -29
  14. package/build/cjs/createTable.js.map +1 -1
  15. package/build/cjs/features/ColumnSizing.js +157 -189
  16. package/build/cjs/features/ColumnSizing.js.map +1 -1
  17. package/build/cjs/features/Expanding.js +103 -155
  18. package/build/cjs/features/Expanding.js.map +1 -1
  19. package/build/cjs/features/Filters.js +155 -304
  20. package/build/cjs/features/Filters.js.map +1 -1
  21. package/build/cjs/features/Grouping.js +97 -157
  22. package/build/cjs/features/Grouping.js.map +1 -1
  23. package/build/cjs/features/Ordering.js +30 -41
  24. package/build/cjs/features/Ordering.js.map +1 -1
  25. package/build/cjs/features/Pagination.js +102 -105
  26. package/build/cjs/features/Pagination.js.map +1 -1
  27. package/build/cjs/features/Pinning.js +131 -89
  28. package/build/cjs/features/Pinning.js.map +1 -1
  29. package/build/cjs/features/RowSelection.js +138 -267
  30. package/build/cjs/features/RowSelection.js.map +1 -1
  31. package/build/cjs/features/Sorting.js +82 -167
  32. package/build/cjs/features/Sorting.js.map +1 -1
  33. package/build/cjs/features/Visibility.js +69 -115
  34. package/build/cjs/features/Visibility.js.map +1 -1
  35. package/build/cjs/filterFns.js +107 -0
  36. package/build/cjs/filterFns.js.map +1 -0
  37. package/build/cjs/index.js +36 -23
  38. package/build/cjs/index.js.map +1 -1
  39. package/build/cjs/sortingFns.js +124 -0
  40. package/build/cjs/sortingFns.js.map +1 -0
  41. package/build/cjs/utils/filterRowsUtils.js +117 -0
  42. package/build/cjs/utils/filterRowsUtils.js.map +1 -0
  43. package/build/cjs/utils/getCoreRowModel.js +79 -0
  44. package/build/cjs/utils/getCoreRowModel.js.map +1 -0
  45. package/build/cjs/utils/getExpandedRowModel.js +57 -0
  46. package/build/cjs/utils/getExpandedRowModel.js.map +1 -0
  47. package/build/cjs/utils/getFacetedMinMaxValues.js +54 -0
  48. package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -0
  49. package/build/cjs/utils/getFacetedRowModel.js +50 -0
  50. package/build/cjs/utils/getFacetedRowModel.js.map +1 -0
  51. package/build/cjs/utils/getFacetedUniqueValues.js +48 -0
  52. package/build/cjs/utils/getFacetedUniqueValues.js.map +1 -0
  53. package/build/cjs/utils/getFilteredRowModel.js +139 -0
  54. package/build/cjs/utils/getFilteredRowModel.js.map +1 -0
  55. package/build/cjs/utils/getGroupedRowModel.js +161 -0
  56. package/build/cjs/utils/getGroupedRowModel.js.map +1 -0
  57. package/build/cjs/utils/getPaginationRowModel.js +61 -0
  58. package/build/cjs/utils/getPaginationRowModel.js.map +1 -0
  59. package/build/cjs/utils/getSortedRowModel.js +110 -0
  60. package/build/cjs/utils/getSortedRowModel.js.map +1 -0
  61. package/build/cjs/utils.js +38 -107
  62. package/build/cjs/utils.js.map +1 -1
  63. package/build/esm/index.js +2976 -3853
  64. package/build/esm/index.js.map +1 -1
  65. package/build/stats-html.html +1 -1
  66. package/build/stats-react.json +586 -408
  67. package/build/types/aggregationFns.d.ts +13 -0
  68. package/build/types/core/cell.d.ts +9 -0
  69. package/build/types/core/column.d.ts +40 -0
  70. package/build/types/core/headers.d.ts +46 -0
  71. package/build/types/core/instance.d.ts +57 -0
  72. package/build/types/core/row.d.ts +15 -0
  73. package/build/types/createTable.d.ts +47 -26
  74. package/build/types/features/ColumnSizing.d.ts +32 -44
  75. package/build/types/features/Expanding.d.ts +15 -26
  76. package/build/types/features/Filters.d.ts +64 -63
  77. package/build/types/features/Grouping.d.ts +32 -46
  78. package/build/types/features/Ordering.d.ts +7 -10
  79. package/build/types/features/Pagination.d.ts +16 -15
  80. package/build/types/features/Pinning.d.ts +16 -17
  81. package/build/types/features/RowSelection.d.ts +13 -33
  82. package/build/types/features/Sorting.d.ts +25 -44
  83. package/build/types/features/Visibility.d.ts +16 -25
  84. package/build/types/filterFns.d.ts +13 -0
  85. package/build/types/index.d.ts +16 -10
  86. package/build/types/sortingFns.d.ts +11 -0
  87. package/build/types/types.d.ts +37 -122
  88. package/build/types/utils/filterRowsUtils.d.ts +4 -0
  89. package/build/types/utils/getCoreRowModel.d.ts +2 -0
  90. package/build/types/utils/getExpandedRowModel.d.ts +7 -0
  91. package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
  92. package/build/types/utils/getFacetedRowModel.d.ts +2 -0
  93. package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
  94. package/build/types/utils/getFilteredRowModel.d.ts +2 -0
  95. package/build/types/utils/getGroupedRowModel.d.ts +2 -0
  96. package/build/types/utils/getPaginationRowModel.d.ts +4 -0
  97. package/build/types/utils/getSortedRowModel.d.ts +2 -0
  98. package/build/types/utils.d.ts +7 -11
  99. package/build/umd/index.development.js +3024 -3893
  100. package/build/umd/index.development.js.map +1 -1
  101. package/build/umd/index.production.js +1 -1
  102. package/build/umd/index.production.js.map +1 -1
  103. package/package.json +9 -10
  104. package/src/.DS_Store +0 -0
  105. package/src/aggregationFns.ts +123 -0
  106. package/src/core/cell.ts +48 -0
  107. package/src/core/column.ts +147 -0
  108. package/src/core/headers.ts +575 -0
  109. package/src/core/instance.ts +361 -0
  110. package/src/core/row.ts +85 -0
  111. package/src/createTable.ts +188 -0
  112. package/src/features/ColumnSizing.ts +170 -185
  113. package/src/features/Expanding.ts +122 -194
  114. package/src/features/Filters.ts +301 -381
  115. package/src/features/Grouping.ts +160 -220
  116. package/src/features/Ordering.ts +24 -25
  117. package/src/features/Pagination.ts +90 -73
  118. package/src/features/Pinning.ts +186 -63
  119. package/src/features/RowSelection.ts +107 -245
  120. package/src/features/Sorting.ts +127 -225
  121. package/src/features/Visibility.ts +116 -132
  122. package/src/filterFns.ts +135 -0
  123. package/src/index.ts +29 -0
  124. package/src/{sortTypes.ts → sortingFns.ts} +63 -85
  125. package/src/types.ts +62 -168
  126. package/src/utils/filterRowsUtils.ts +112 -0
  127. package/src/utils/getCoreRowModel.ts +84 -0
  128. package/src/utils/getExpandedRowModel.ts +54 -0
  129. package/src/utils/getFacetedMinMaxValues.ts +40 -0
  130. package/src/utils/getFacetedRowModel.ts +50 -0
  131. package/src/utils/getFacetedUniqueValues.ts +37 -0
  132. package/src/utils/getFilteredRowModel.ts +159 -0
  133. package/src/utils/getGroupedRowModel.ts +175 -0
  134. package/src/utils/getPaginationRowModel.ts +48 -0
  135. package/src/utils/getSortedRowModel.ts +116 -0
  136. package/src/utils.ts +126 -0
  137. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  138. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  139. package/build/cjs/aggregationTypes.js +0 -130
  140. package/build/cjs/aggregationTypes.js.map +0 -1
  141. package/build/cjs/core.js +0 -545
  142. package/build/cjs/core.js.map +0 -1
  143. package/build/cjs/features/Headers.js +0 -630
  144. package/build/cjs/features/Headers.js.map +0 -1
  145. package/build/cjs/filterTypes.js +0 -172
  146. package/build/cjs/filterTypes.js.map +0 -1
  147. package/build/cjs/sortTypes.js +0 -122
  148. package/build/cjs/sortTypes.js.map +0 -1
  149. package/build/cjs/types.js +0 -22
  150. package/build/cjs/types.js.map +0 -1
  151. package/build/cjs/utils/columnFilterRowsFn.js +0 -131
  152. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  153. package/build/cjs/utils/expandRowsFn.js +0 -38
  154. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  155. package/build/cjs/utils/globalFilterRowsFn.js +0 -101
  156. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  157. package/build/cjs/utils/groupRowsFn.js +0 -155
  158. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  159. package/build/cjs/utils/paginateRowsFn.js +0 -44
  160. package/build/cjs/utils/paginateRowsFn.js.map +0 -1
  161. package/build/cjs/utils/sortRowsFn.js +0 -94
  162. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  163. package/build/types/aggregationTypes.d.ts +0 -22
  164. package/build/types/core.d.ts +0 -105
  165. package/build/types/features/Headers.d.ts +0 -43
  166. package/build/types/filterTypes.d.ts +0 -50
  167. package/build/types/sortTypes.d.ts +0 -18
  168. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  169. package/build/types/utils/expandRowsFn.d.ts +0 -2
  170. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  171. package/build/types/utils/groupRowsFn.d.ts +0 -2
  172. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  173. package/build/types/utils/sortRowsFn.d.ts +0 -2
  174. package/src/aggregationTypes.ts +0 -115
  175. package/src/core.tsx +0 -763
  176. package/src/createTable.tsx +0 -137
  177. package/src/features/Headers.ts +0 -747
  178. package/src/filterTypes.ts +0 -188
  179. package/src/index.tsx +0 -23
  180. package/src/utils/columnFilterRowsFn.ts +0 -113
  181. package/src/utils/expandRowsFn.ts +0 -30
  182. package/src/utils/globalFilterRowsFn.ts +0 -89
  183. package/src/utils/groupRowsFn.ts +0 -170
  184. package/src/utils/paginateRowsFn.ts +0 -28
  185. package/src/utils/sortRowsFn.ts +0 -95
  186. package/src/utils.tsx +0 -221
@@ -1,22 +1,23 @@
1
- import {
2
- MouseEvent as ReactMouseEvent,
3
- TouchEvent as ReactTouchEvent,
4
- } from 'react'
1
+ import { TableFeature } from '../core/instance'
5
2
  import {
6
3
  Column,
7
- Getter,
8
4
  Header,
9
5
  OnChangeFn,
10
- PartialGenerics,
11
- PropGetterValue,
6
+ TableGenerics,
12
7
  TableInstance,
13
8
  Updater,
14
9
  } from '../types'
15
- import { functionalUpdate, makeStateUpdater, memo, propGetter } from '../utils'
10
+ import { makeStateUpdater } from '../utils'
11
+ import { ColumnPinningPosition } from './Pinning'
16
12
 
17
13
  //
18
14
 
19
- export type ColumnSizing = Record<string, number>
15
+ export type ColumnSizingTableState = {
16
+ columnSizing: ColumnSizingState
17
+ columnSizingInfo: ColumnSizingInfoState
18
+ }
19
+
20
+ export type ColumnSizingState = Record<string, number>
20
21
 
21
22
  export type ColumnSizingInfoState = {
22
23
  startOffset: null | number
@@ -27,95 +28,83 @@ export type ColumnSizingInfoState = {
27
28
  columnSizingStart: [string, number][]
28
29
  }
29
30
 
30
- export type ColumnSizingTableState = {
31
- columnSizing: ColumnSizing
32
- columnSizingInfo: ColumnSizingInfoState
33
- }
34
-
35
31
  export type ColumnResizeMode = 'onChange' | 'onEnd'
36
32
 
37
33
  export type ColumnSizingOptions = {
38
34
  enableColumnResizing?: boolean
39
35
  columnResizeMode?: ColumnResizeMode
40
- onColumnSizingChange?: OnChangeFn<ColumnSizing>
36
+ onColumnSizingChange?: OnChangeFn<ColumnSizingState>
41
37
  onColumnSizingInfoChange?: OnChangeFn<ColumnSizingInfoState>
42
38
  }
43
39
 
44
40
  export type ColumnSizingDefaultOptions = {
45
41
  columnResizeMode: ColumnResizeMode
46
- onColumnSizingChange: OnChangeFn<ColumnSizing>
42
+ onColumnSizingChange: OnChangeFn<ColumnSizingState>
47
43
  onColumnSizingInfoChange: OnChangeFn<ColumnSizingInfoState>
48
44
  }
49
45
 
50
- export type ColumnResizerProps = {
51
- title?: string
52
- onMouseDown?: (e: ReactMouseEvent) => void
53
- onTouchStart?: (e: ReactTouchEvent) => void
54
- draggable?: boolean
55
- role?: string
56
- }
57
-
58
- export type ColumnSizingInstance<TGenerics extends PartialGenerics> = {
59
- setColumnSizing: (updater: Updater<ColumnSizing>) => void
46
+ export type ColumnSizingInstance<TGenerics extends TableGenerics> = {
47
+ setColumnSizing: (updater: Updater<ColumnSizingState>) => void
60
48
  setColumnSizingInfo: (updater: Updater<ColumnSizingInfoState>) => void
61
- resetColumnSizing: () => void
62
- resetColumnSize: (columnId: string) => void
63
- resetHeaderSize: (headerId: string) => void
64
- resetHeaderSizeInfo: () => void
65
- getColumnCanResize: (columnId: string) => boolean
66
- getHeaderCanResize: (headerId: string) => boolean
67
- getHeaderResizerProps: <TGetter extends Getter<ColumnResizerProps>>(
68
- headerId: string,
69
- userProps?: TGetter
70
- ) => undefined | PropGetterValue<ColumnResizerProps, TGetter>
71
- getColumnIsResizing: (columnId: string) => boolean
72
- getHeaderIsResizing: (headerId: string) => boolean
49
+ resetColumnSizing: (defaultState?: boolean) => void
50
+ resetHeaderSizeInfo: (defaultState?: boolean) => void
51
+ getTotalSize: () => number
52
+ getLeftTotalSize: () => number
53
+ getCenterTotalSize: () => number
54
+ getRightTotalSize: () => number
73
55
  }
74
56
 
75
57
  export type ColumnSizingColumnDef = {
76
58
  enableResizing?: boolean
77
- defaultCanResize?: boolean
59
+ size?: number
60
+ minSize?: number
61
+ maxSize?: number
78
62
  }
79
63
 
80
- export type ColumnSizingColumn<TGenerics extends PartialGenerics> = {
64
+ export type ColumnSizingColumn<TGenerics extends TableGenerics> = {
65
+ getSize: () => number
66
+ getStart: (position?: ColumnPinningPosition) => number
81
67
  getCanResize: () => boolean
82
68
  getIsResizing: () => boolean
83
69
  resetSize: () => void
84
70
  }
85
71
 
86
- export type ColumnSizingHeader<TGenerics extends PartialGenerics> = {
87
- getCanResize: () => boolean
88
- getIsResizing: () => boolean
89
- getResizerProps: <TGetter extends Getter<ColumnResizerProps>>(
90
- userProps?: TGetter
91
- ) => undefined | PropGetterValue<ColumnResizerProps, TGetter>
92
- resetSize: () => void
72
+ export type ColumnSizingHeader<TGenerics extends TableGenerics> = {
73
+ getSize: () => number
74
+ getStart: (position?: ColumnPinningPosition) => number
75
+ getResizeHandler: () => (event: unknown) => void
93
76
  }
94
77
 
95
78
  //
96
79
 
97
80
  export const defaultColumnSizing = {
98
- width: 150,
99
- minWidth: 20,
100
- maxWidth: Number.MAX_SAFE_INTEGER,
81
+ size: 150,
82
+ minSize: 20,
83
+ maxSize: Number.MAX_SAFE_INTEGER,
101
84
  }
102
85
 
103
- export const ColumnSizing = {
104
- getInitialState: (): ColumnSizingTableState => {
86
+ const getDefaultColumnSizingInfoState = (): ColumnSizingInfoState => ({
87
+ startOffset: null,
88
+ startSize: null,
89
+ deltaOffset: null,
90
+ deltaPercentage: null,
91
+ isResizingColumn: false,
92
+ columnSizingStart: [],
93
+ })
94
+
95
+ export const ColumnSizing: TableFeature = {
96
+ getDefaultColumnDef: (): ColumnSizingColumnDef => {
97
+ return defaultColumnSizing
98
+ },
99
+ getInitialState: (state): ColumnSizingTableState => {
105
100
  return {
106
101
  columnSizing: {},
107
- columnSizingInfo: {
108
- startOffset: null,
109
- startSize: null,
110
- deltaOffset: null,
111
- deltaPercentage: null,
112
- isResizingColumn: false,
113
- columnSizingStart: [],
114
- },
102
+ columnSizingInfo: getDefaultColumnSizingInfoState(),
103
+ ...state,
115
104
  }
116
105
  },
117
106
 
118
- getDefaultOptions: <TGenerics extends PartialGenerics>(
107
+ getDefaultOptions: <TGenerics extends TableGenerics>(
119
108
  instance: TableInstance<TGenerics>
120
109
  ): ColumnSizingDefaultOptions => {
121
110
  return {
@@ -125,89 +114,100 @@ export const ColumnSizing = {
125
114
  }
126
115
  },
127
116
 
128
- getInstance: <TGenerics extends PartialGenerics>(
117
+ createColumn: <TGenerics extends TableGenerics>(
118
+ column: Column<TGenerics>,
129
119
  instance: TableInstance<TGenerics>
130
- ): ColumnSizingInstance<TGenerics> => {
120
+ ): ColumnSizingColumn<TGenerics> => {
131
121
  return {
132
- setColumnSizing: updater =>
133
- instance.options.onColumnSizingChange?.(
134
- updater,
135
- functionalUpdate(updater, instance.getState().columnSizing)
136
- ),
137
- setColumnSizingInfo: updater =>
138
- instance.options.onColumnSizingInfoChange?.(
139
- updater,
140
- functionalUpdate(updater, instance.getState().columnSizingInfo)
141
- ),
142
- resetColumnSizing: () => {
143
- instance.setColumnSizing(instance.initialState.columnSizing ?? {})
144
- },
145
- resetHeaderSizeInfo: () => {
146
- instance.setColumnSizingInfo(
147
- instance.initialState.columnSizingInfo ?? {}
122
+ getSize: () => {
123
+ const columnSize = instance.getState().columnSizing[column.id]
124
+
125
+ return Math.min(
126
+ Math.max(
127
+ column.columnDef.minSize ?? defaultColumnSizing.minSize,
128
+ columnSize ?? column.columnDef.size ?? defaultColumnSizing.size
129
+ ),
130
+ column.columnDef.maxSize ?? defaultColumnSizing.maxSize
148
131
  )
149
132
  },
150
- resetColumnSize: columnId => {
151
- instance.setColumnSizing(({ [columnId]: _, ...rest }) => {
152
- return rest
153
- })
154
- },
155
- resetHeaderSize: headerId => {
156
- const header = instance.getHeader(headerId)
133
+ getStart: position => {
134
+ const columns = !position
135
+ ? instance.getVisibleLeafColumns()
136
+ : position === 'left'
137
+ ? instance.getLeftVisibleLeafColumns()
138
+ : instance.getRightVisibleLeafColumns()
157
139
 
158
- return instance.resetColumnSize(header.column.id)
159
- },
160
- getHeaderCanResize: headerId => {
161
- const header = instance.getHeader(headerId)
140
+ const index = columns.findIndex(d => d.id === column.id)
162
141
 
163
- if (!header) {
164
- throw new Error()
165
- }
166
-
167
- return instance.getColumnCanResize(header.column.id)
168
- },
169
- getColumnCanResize: columnId => {
170
- const column = instance.getColumn(columnId)
142
+ if (index > 0) {
143
+ const prevSiblingColumn = columns[index - 1]!
171
144
 
172
- if (!column) {
173
- throw new Error()
145
+ return (
146
+ prevSiblingColumn.getStart(position) + prevSiblingColumn.getSize()
147
+ )
174
148
  }
175
149
 
150
+ return 0
151
+ },
152
+ resetSize: () => {
153
+ instance.setColumnSizing(({ [column.id]: _, ...rest }) => {
154
+ return rest
155
+ })
156
+ },
157
+ getCanResize: () => {
176
158
  return (
177
- column.enableResizing ??
178
- instance.options.enableColumnResizing ??
179
- column.defaultCanResize ??
180
- true
159
+ (column.columnDef.enableResizing ?? true) &&
160
+ (instance.options.enableColumnResizing ?? true)
181
161
  )
182
162
  },
183
- getColumnIsResizing: columnId => {
184
- const column = instance.getColumn(columnId)
185
-
186
- if (!column) {
187
- throw new Error()
188
- }
189
-
163
+ getIsResizing: () => {
190
164
  return (
191
- instance.getState().columnSizingInfo.isResizingColumn === columnId
165
+ instance.getState().columnSizingInfo.isResizingColumn === column.id
192
166
  )
193
167
  },
194
- getHeaderIsResizing: headerId => {
195
- const header = instance.getHeader(headerId)
168
+ }
169
+ },
170
+
171
+ createHeader: <TGenerics extends TableGenerics>(
172
+ header: Header<TGenerics>,
173
+ instance: TableInstance<TGenerics>
174
+ ): ColumnSizingHeader<TGenerics> => {
175
+ return {
176
+ getSize: () => {
177
+ let sum = 0
196
178
 
197
- if (!header) {
198
- throw new Error()
179
+ const recurse = (header: Header<TGenerics>) => {
180
+ if (header.subHeaders.length) {
181
+ header.subHeaders.forEach(recurse)
182
+ } else {
183
+ sum += header.column.getSize() ?? 0
184
+ }
199
185
  }
200
186
 
201
- return instance.getColumnIsResizing(header.column.id)
187
+ recurse(header)
188
+
189
+ return sum
202
190
  },
191
+ getStart: () => {
192
+ if (header.index > 0) {
193
+ const prevSiblingHeader =
194
+ header.headerGroup.headers[header.index - 1]!
195
+ return prevSiblingHeader.getStart() + prevSiblingHeader.getSize()
196
+ }
203
197
 
204
- getHeaderResizerProps: (headerId, userProps) => {
205
- const header = instance.getHeader(headerId)
198
+ return 0
199
+ },
200
+ getResizeHandler: () => {
206
201
  const column = instance.getColumn(header.column.id)
207
-
208
202
  const canResize = column.getCanResize()
209
203
 
210
- const onResizeStart = (e: ReactMouseEvent | ReactTouchEvent) => {
204
+ return (e: unknown) => {
205
+ if (!canResize) {
206
+ return
207
+ }
208
+
209
+ ;(e as any).persist?.()
210
+
211
211
  if (isTouchStartEvent(e)) {
212
212
  // lets not respond to multiple touches (e.g. 2 or 3 fingers)
213
213
  if (e.touches && e.touches.length > 1) {
@@ -215,17 +215,17 @@ export const ColumnSizing = {
215
215
  }
216
216
  }
217
217
 
218
- const header = headerId ? instance.getHeader(headerId) : undefined
219
-
220
- const startSize = header ? header.getWidth() : column.getWidth()
218
+ const startSize = header.getSize()
221
219
 
222
220
  const columnSizingStart: [string, number][] = header
223
- ? header.getLeafHeaders().map(d => [d.column.id, d.getWidth()])
224
- : [[column.id, column.getWidth()]]
221
+ ? header
222
+ .getLeafHeaders()
223
+ .map(d => [d.column.id, d.column.getSize()])
224
+ : [[column.id, column.getSize()]]
225
225
 
226
226
  const clientX = isTouchStartEvent(e)
227
- ? Math.round(e.touches[0].clientX)
228
- : e.clientX
227
+ ? Math.round(e.touches[0]!.clientX)
228
+ : (e as MouseEvent).clientX
229
229
 
230
230
  const updateOffset = (
231
231
  eventType: 'move' | 'end',
@@ -235,7 +235,7 @@ export const ColumnSizing = {
235
235
  return
236
236
  }
237
237
 
238
- let newColumnSizing: ColumnSizing = {}
238
+ let newColumnSizing: ColumnSizingState = {}
239
239
 
240
240
  instance.setColumnSizingInfo(old => {
241
241
  const deltaOffset = clientXPos - (old?.startOffset ?? 0)
@@ -244,11 +244,10 @@ export const ColumnSizing = {
244
244
  -0.999999
245
245
  )
246
246
 
247
- old.columnSizingStart.forEach(([columnId, headerWidth]) => {
247
+ old.columnSizingStart.forEach(([columnId, headerSize]) => {
248
248
  newColumnSizing[columnId] =
249
249
  Math.round(
250
- Math.max(headerWidth + headerWidth * deltaPercentage, 0) *
251
- 100
250
+ Math.max(headerSize + headerSize * deltaPercentage, 0) * 100
252
251
  ) / 100
253
252
  })
254
253
 
@@ -302,7 +301,7 @@ export const ColumnSizing = {
302
301
  e.preventDefault()
303
302
  e.stopPropagation()
304
303
  }
305
- onMove(e.touches[0].clientX)
304
+ onMove(e.touches[0]!.clientX)
306
305
  return false
307
306
  },
308
307
  upHandler: (e: TouchEvent) => {
@@ -312,7 +311,7 @@ export const ColumnSizing = {
312
311
  e.preventDefault()
313
312
  e.stopPropagation()
314
313
  }
315
- onEnd(e.touches[0].clientX)
314
+ onEnd(e.touches[0]!.clientX)
316
315
  },
317
316
  }
318
317
 
@@ -321,16 +320,6 @@ export const ColumnSizing = {
321
320
  : false
322
321
 
323
322
  if (isTouchStartEvent(e)) {
324
- document.addEventListener(
325
- 'touchmove',
326
- touchEvents.moveHandler,
327
- passiveIfSupported
328
- )
329
- document.addEventListener(
330
- 'touchend',
331
- touchEvents.upHandler,
332
- passiveIfSupported
333
- )
334
323
  } else {
335
324
  document.addEventListener(
336
325
  'mousemove',
@@ -354,49 +343,47 @@ export const ColumnSizing = {
354
343
  isResizingColumn: column.id,
355
344
  }))
356
345
  }
357
-
358
- const initialProps: ColumnResizerProps = canResize
359
- ? {
360
- title: 'Toggle Grouping',
361
- draggable: false,
362
- role: 'separator',
363
- onMouseDown: (e: ReactMouseEvent) => {
364
- e.persist()
365
- onResizeStart(e)
366
- },
367
- onTouchStart: (e: ReactTouchEvent) => {
368
- e.persist()
369
- onResizeStart(e)
370
- },
371
- }
372
- : {}
373
-
374
- return propGetter(initialProps, userProps)
375
346
  },
376
347
  }
377
348
  },
378
349
 
379
- createColumn: <TGenerics extends PartialGenerics>(
380
- column: Column<TGenerics>,
381
- instance: TableInstance<TGenerics>
382
- ): ColumnSizingColumn<TGenerics> => {
383
- return {
384
- getIsResizing: () => instance.getColumnIsResizing(column.id),
385
- getCanResize: () => instance.getColumnCanResize(column.id),
386
- resetSize: () => instance.resetColumnSize(column.id),
387
- }
388
- },
389
-
390
- createHeader: <TGenerics extends PartialGenerics>(
391
- header: Header<TGenerics>,
350
+ createInstance: <TGenerics extends TableGenerics>(
392
351
  instance: TableInstance<TGenerics>
393
- ): ColumnSizingHeader<TGenerics> => {
352
+ ): ColumnSizingInstance<TGenerics> => {
394
353
  return {
395
- getIsResizing: () => instance.getColumnIsResizing(header.column.id),
396
- getCanResize: () => instance.getColumnCanResize(header.column.id),
397
- resetSize: () => instance.resetColumnSize(header.column.id),
398
- getResizerProps: userProps =>
399
- instance.getHeaderResizerProps(header.id, userProps),
354
+ setColumnSizing: updater =>
355
+ instance.options.onColumnSizingChange?.(updater),
356
+ setColumnSizingInfo: updater =>
357
+ instance.options.onColumnSizingInfoChange?.(updater),
358
+ resetColumnSizing: defaultState => {
359
+ instance.setColumnSizing(
360
+ defaultState ? {} : instance.initialState.columnSizing ?? {}
361
+ )
362
+ },
363
+ resetHeaderSizeInfo: defaultState => {
364
+ instance.setColumnSizingInfo(
365
+ defaultState
366
+ ? getDefaultColumnSizingInfoState()
367
+ : instance.initialState.columnSizingInfo ??
368
+ getDefaultColumnSizingInfoState()
369
+ )
370
+ },
371
+ getTotalSize: () =>
372
+ instance.getHeaderGroups()[0]?.headers.reduce((sum, header) => {
373
+ return sum + header.getSize()
374
+ }, 0) ?? 0,
375
+ getLeftTotalSize: () =>
376
+ instance.getLeftHeaderGroups()[0]?.headers.reduce((sum, header) => {
377
+ return sum + header.getSize()
378
+ }, 0) ?? 0,
379
+ getCenterTotalSize: () =>
380
+ instance.getCenterHeaderGroups()[0]?.headers.reduce((sum, header) => {
381
+ return sum + header.getSize()
382
+ }, 0) ?? 0,
383
+ getRightTotalSize: () =>
384
+ instance.getRightHeaderGroups()[0]?.headers.reduce((sum, header) => {
385
+ return sum + header.getSize()
386
+ }, 0) ?? 0,
400
387
  }
401
388
  },
402
389
  }
@@ -425,8 +412,6 @@ export function passiveEventSupported() {
425
412
  return passiveSupported
426
413
  }
427
414
 
428
- function isTouchStartEvent(
429
- e: ReactTouchEvent | ReactMouseEvent
430
- ): e is ReactTouchEvent {
431
- return e.type === 'touchstart'
415
+ function isTouchStartEvent(e: unknown): e is TouchEvent {
416
+ return (e as TouchEvent).type === 'touchstart'
432
417
  }