@tanstack/react-table 8.0.0-alpha.9 → 8.0.0-beta.2

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 (115) hide show
  1. package/build/cjs/react-table/src/index.js +139 -0
  2. package/build/cjs/react-table/src/index.js.map +1 -0
  3. package/build/cjs/table-core/build/esm/index.js +3867 -0
  4. package/build/cjs/table-core/build/esm/index.js.map +1 -0
  5. package/build/esm/index.js +3196 -4117
  6. package/build/esm/index.js.map +1 -1
  7. package/build/stats-html.html +1 -1
  8. package/build/stats-react.json +24 -813
  9. package/build/types/index.d.ts +16 -9
  10. package/build/umd/index.development.js +3234 -4125
  11. package/build/umd/index.development.js.map +1 -1
  12. package/build/umd/index.production.js +11 -1
  13. package/build/umd/index.production.js.map +1 -1
  14. package/package.json +10 -6
  15. package/src/index.tsx +111 -9
  16. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  17. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  18. package/build/cjs/aggregationTypes.js +0 -130
  19. package/build/cjs/aggregationTypes.js.map +0 -1
  20. package/build/cjs/core.js +0 -545
  21. package/build/cjs/core.js.map +0 -1
  22. package/build/cjs/createTable.js +0 -122
  23. package/build/cjs/createTable.js.map +0 -1
  24. package/build/cjs/features/ColumnSizing.js +0 -318
  25. package/build/cjs/features/ColumnSizing.js.map +0 -1
  26. package/build/cjs/features/Expanding.js +0 -239
  27. package/build/cjs/features/Expanding.js.map +0 -1
  28. package/build/cjs/features/Filters.js +0 -414
  29. package/build/cjs/features/Filters.js.map +0 -1
  30. package/build/cjs/features/Grouping.js +0 -232
  31. package/build/cjs/features/Grouping.js.map +0 -1
  32. package/build/cjs/features/Headers.js +0 -629
  33. package/build/cjs/features/Headers.js.map +0 -1
  34. package/build/cjs/features/Ordering.js +0 -86
  35. package/build/cjs/features/Ordering.js.map +0 -1
  36. package/build/cjs/features/Pagination.js +0 -193
  37. package/build/cjs/features/Pagination.js.map +0 -1
  38. package/build/cjs/features/Pinning.js +0 -149
  39. package/build/cjs/features/Pinning.js.map +0 -1
  40. package/build/cjs/features/RowSelection.js +0 -526
  41. package/build/cjs/features/RowSelection.js.map +0 -1
  42. package/build/cjs/features/Sorting.js +0 -315
  43. package/build/cjs/features/Sorting.js.map +0 -1
  44. package/build/cjs/features/Visibility.js +0 -174
  45. package/build/cjs/features/Visibility.js.map +0 -1
  46. package/build/cjs/filterTypes.js +0 -172
  47. package/build/cjs/filterTypes.js.map +0 -1
  48. package/build/cjs/index.js +0 -44
  49. package/build/cjs/index.js.map +0 -1
  50. package/build/cjs/sortTypes.js +0 -122
  51. package/build/cjs/sortTypes.js.map +0 -1
  52. package/build/cjs/types.js +0 -22
  53. package/build/cjs/types.js.map +0 -1
  54. package/build/cjs/utils/columnFilterRowsFn.js +0 -131
  55. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  56. package/build/cjs/utils/expandRowsFn.js +0 -38
  57. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  58. package/build/cjs/utils/globalFilterRowsFn.js +0 -101
  59. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  60. package/build/cjs/utils/groupRowsFn.js +0 -155
  61. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  62. package/build/cjs/utils/paginateRowsFn.js +0 -44
  63. package/build/cjs/utils/paginateRowsFn.js.map +0 -1
  64. package/build/cjs/utils/sortRowsFn.js +0 -94
  65. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  66. package/build/cjs/utils.js +0 -167
  67. package/build/cjs/utils.js.map +0 -1
  68. package/build/types/aggregationTypes.d.ts +0 -22
  69. package/build/types/core.d.ts +0 -105
  70. package/build/types/createTable.d.ts +0 -42
  71. package/build/types/features/ColumnSizing.d.ts +0 -73
  72. package/build/types/features/Expanding.d.ts +0 -48
  73. package/build/types/features/Filters.d.ts +0 -90
  74. package/build/types/features/Grouping.d.ts +0 -83
  75. package/build/types/features/Headers.d.ts +0 -41
  76. package/build/types/features/Ordering.d.ts +0 -19
  77. package/build/types/features/Pagination.d.ts +0 -39
  78. package/build/types/features/Pinning.d.ts +0 -39
  79. package/build/types/features/RowSelection.d.ts +0 -58
  80. package/build/types/features/Sorting.d.ts +0 -79
  81. package/build/types/features/Visibility.d.ts +0 -47
  82. package/build/types/filterTypes.d.ts +0 -50
  83. package/build/types/sortTypes.d.ts +0 -18
  84. package/build/types/types.d.ts +0 -138
  85. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  86. package/build/types/utils/expandRowsFn.d.ts +0 -2
  87. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  88. package/build/types/utils/groupRowsFn.d.ts +0 -2
  89. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  90. package/build/types/utils/sortRowsFn.d.ts +0 -2
  91. package/build/types/utils.d.ts +0 -23
  92. package/src/aggregationTypes.ts +0 -115
  93. package/src/core.tsx +0 -763
  94. package/src/createTable.tsx +0 -186
  95. package/src/features/ColumnSizing.ts +0 -424
  96. package/src/features/Expanding.ts +0 -318
  97. package/src/features/Filters.ts +0 -560
  98. package/src/features/Grouping.ts +0 -361
  99. package/src/features/Headers.ts +0 -729
  100. package/src/features/Ordering.ts +0 -110
  101. package/src/features/Pagination.ts +0 -250
  102. package/src/features/Pinning.ts +0 -174
  103. package/src/features/RowSelection.ts +0 -651
  104. package/src/features/Sorting.ts +0 -453
  105. package/src/features/Visibility.ts +0 -238
  106. package/src/filterTypes.ts +0 -188
  107. package/src/sortTypes.ts +0 -147
  108. package/src/types.ts +0 -311
  109. package/src/utils/columnFilterRowsFn.ts +0 -113
  110. package/src/utils/expandRowsFn.ts +0 -30
  111. package/src/utils/globalFilterRowsFn.ts +0 -89
  112. package/src/utils/groupRowsFn.ts +0 -170
  113. package/src/utils/paginateRowsFn.ts +0 -28
  114. package/src/utils/sortRowsFn.ts +0 -95
  115. package/src/utils.tsx +0 -221
@@ -1,186 +0,0 @@
1
- import * as React from 'react'
2
- import { createTableInstance } from './core'
3
- import { CustomFilterTypes } from './features/Filters'
4
- import { CustomAggregationTypes } from './features/Grouping'
5
- import { CustomSortingTypes } from './features/Sorting'
6
- import {
7
- TableInstance,
8
- ColumnDef,
9
- AccessorFn,
10
- Options,
11
- DefaultGenerics,
12
- PartialGenerics,
13
- _NonGenerated,
14
- } from './types'
15
- import { Overwrite, PartialKeys } from './utils'
16
-
17
- export type CreatTableFactory<TGenerics extends Partial<DefaultGenerics>> = <
18
- TRow
19
- >() => CreateTable<Overwrite<TGenerics, { Row: TRow }>>
20
-
21
- export type CreateTableOptions<
22
- TFilterFns extends CustomFilterTypes<any>,
23
- TSortingFns extends CustomSortingTypes<any>,
24
- TAggregationFns extends CustomAggregationTypes<any>
25
- > = {
26
- filterFns?: TFilterFns
27
- sortingFns?: TSortingFns
28
- aggregationFns?: TAggregationFns
29
- }
30
-
31
- export function createTableFactory<
32
- TFilterFns extends CustomFilterTypes<any>,
33
- TSortingFns extends CustomSortingTypes<any>,
34
- TAggregationFns extends CustomAggregationTypes<any>
35
- >(
36
- opts: CreateTableOptions<TFilterFns, TSortingFns, TAggregationFns>
37
- ): CreatTableFactory<
38
- Overwrite<
39
- PartialGenerics,
40
- {
41
- FilterFns: TFilterFns
42
- SortingFns: TSortingFns
43
- AggregationFns: TAggregationFns
44
- }
45
- >
46
- > {
47
- return () => _createTable(undefined, undefined, opts)
48
- }
49
-
50
- export type CreateTable<TGenerics extends Partial<DefaultGenerics>> = {
51
- createColumns: (columns: ColumnDef<TGenerics>[]) => ColumnDef<TGenerics>[]
52
- createGroup: (
53
- column: Overwrite<
54
- | Overwrite<
55
- _NonGenerated<ColumnDef<TGenerics>>,
56
- {
57
- header: string
58
- id?: string
59
- }
60
- >
61
- | Overwrite<
62
- _NonGenerated<ColumnDef<TGenerics>>,
63
- {
64
- id: string
65
- header?: string | ColumnDef<TGenerics>['header']
66
- }
67
- >,
68
- { accessorFn?: never; accessorKey?: never }
69
- >
70
- ) => ColumnDef<TGenerics>
71
- createDisplayColumn: (
72
- column: PartialKeys<
73
- _NonGenerated<ColumnDef<TGenerics>>,
74
- 'accessorFn' | 'accessorKey'
75
- >
76
- ) => ColumnDef<TGenerics>
77
- createDataColumn: <
78
- TAccessor extends AccessorFn<TGenerics['Row']> | keyof TGenerics['Row']
79
- >(
80
- accessor: TAccessor,
81
- column: Overwrite<
82
- TAccessor extends (...args: any[]) => any
83
- ? // Accessor Fn
84
- _NonGenerated<ColumnDef<TGenerics>>
85
- : TAccessor extends keyof TGenerics['Row']
86
- ? // Accessor Key
87
- Overwrite<
88
- _NonGenerated<ColumnDef<TGenerics>>,
89
- {
90
- id?: string
91
- }
92
- >
93
- : never,
94
- {
95
- accessorFn?: never
96
- accessorKey?: never
97
- }
98
- >
99
- ) => ColumnDef<TGenerics>
100
- useTable: (
101
- options: PartialKeys<
102
- Omit<Options<TGenerics>, keyof CreateTableOptions<any, any, any>>,
103
- 'state' | 'onStateChange'
104
- >
105
- ) => TableInstance<TGenerics>
106
- }
107
-
108
- export function createTable<TRow>() {
109
- return _createTable<Overwrite<PartialGenerics, { Row: TRow }>>()
110
- }
111
-
112
- function _createTable<TGenerics extends PartialGenerics>(
113
- _?: undefined,
114
- __?: undefined,
115
- opts?: CreateTableOptions<any, any, any>
116
- ): CreateTable<TGenerics> {
117
- return {
118
- createColumns: columns => columns,
119
- createDisplayColumn: column => column as any,
120
- createGroup: column => column as any,
121
- createDataColumn: (accessor, column): any => {
122
- column = {
123
- ...column,
124
- id: column.id,
125
- }
126
-
127
- if (typeof accessor === 'string') {
128
- return {
129
- ...column,
130
- id: column.id ?? accessor,
131
- accessorKey: accessor,
132
- }
133
- }
134
-
135
- if (typeof accessor === 'function') {
136
- return {
137
- ...column,
138
- accessorFn: accessor,
139
- }
140
- }
141
-
142
- throw new Error('Invalid accessor')
143
- },
144
- useTable: (
145
- options: PartialKeys<
146
- Omit<Options<TGenerics>, keyof CreateTableOptions<any, any, any>>,
147
- 'state' | 'onStateChange'
148
- >
149
- ): TableInstance<TGenerics> => {
150
- // Compose in the generic options to the user options
151
- const resolvedOptions = {
152
- ...(opts ?? {}),
153
- state: {}, // Dummy state
154
- onStateChange: () => {}, // noop
155
- ...options,
156
- }
157
-
158
- // Create a new table instance and store it in state
159
- const [instance] = React.useState(() =>
160
- createTableInstance<TGenerics>(resolvedOptions)
161
- )
162
-
163
- // By default, manage table state here using the instance's initial state
164
- const [state, setState] = React.useState(() => instance.initialState)
165
-
166
- // Compose the default state above with any user state. This will allow the user
167
- // to only control a subset of the state if desired.
168
- instance.setOptions(prev => ({
169
- ...prev,
170
- ...options,
171
- state: {
172
- ...state,
173
- ...options.state,
174
- },
175
- // Similarly, we'll maintain both our internal state and any user-provided
176
- // state.
177
- onStateChange: updater => {
178
- setState(updater)
179
- options.onStateChange?.(updater)
180
- },
181
- }))
182
-
183
- return instance
184
- },
185
- }
186
- }
@@ -1,424 +0,0 @@
1
- import {
2
- MouseEvent as ReactMouseEvent,
3
- TouchEvent as ReactTouchEvent,
4
- } from 'react'
5
- import {
6
- Column,
7
- Getter,
8
- Header,
9
- OnChangeFn,
10
- PartialGenerics,
11
- PropGetterValue,
12
- TableInstance,
13
- Updater,
14
- } from '../types'
15
- import { functionalUpdate, makeStateUpdater, memo, propGetter } from '../utils'
16
-
17
- //
18
-
19
- export type ColumnSizing = Record<string, number>
20
-
21
- export type ColumnSizingInfoState = {
22
- startOffset: null | number
23
- startSize: null | number
24
- deltaOffset: null | number
25
- deltaPercentage: null | number
26
- isResizingColumn: false | string
27
- columnSizingStart: [string, number][]
28
- }
29
-
30
- export type ColumnSizingTableState = {
31
- columnSizing: ColumnSizing
32
- columnSizingInfo: ColumnSizingInfoState
33
- }
34
-
35
- export type ColumnResizeMode = 'onChange' | 'onEnd'
36
-
37
- export type ColumnSizingOptions = {
38
- enableColumnResizing?: boolean
39
- columnResizeMode?: ColumnResizeMode
40
- onColumnSizingChange?: OnChangeFn<ColumnSizing>
41
- onColumnSizingInfoChange?: OnChangeFn<ColumnSizingInfoState>
42
- }
43
-
44
- export type ColumnSizingDefaultOptions = {
45
- columnResizeMode: ColumnResizeMode
46
- onColumnSizingChange: OnChangeFn<ColumnSizing>
47
- onColumnSizingInfoChange: OnChangeFn<ColumnSizingInfoState>
48
- }
49
-
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
60
- 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
73
- }
74
-
75
- export type ColumnSizingColumnDef = {
76
- enableResizing?: boolean
77
- defaultCanResize?: boolean
78
- }
79
-
80
- export type ColumnSizingColumn<TGenerics extends PartialGenerics> = {
81
- getCanResize: () => boolean
82
- getIsResizing: () => boolean
83
- resetSize: () => void
84
- }
85
-
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
93
- }
94
-
95
- //
96
-
97
- export const defaultColumnSizing = {
98
- width: 150,
99
- minWidth: 20,
100
- maxWidth: Number.MAX_SAFE_INTEGER,
101
- }
102
-
103
- export function getInitialState(): ColumnSizingTableState {
104
- return {
105
- columnSizing: {},
106
- columnSizingInfo: {
107
- startOffset: null,
108
- startSize: null,
109
- deltaOffset: null,
110
- deltaPercentage: null,
111
- isResizingColumn: false,
112
- columnSizingStart: [],
113
- },
114
- }
115
- }
116
-
117
- export function getDefaultOptions<TGenerics extends PartialGenerics>(
118
- instance: TableInstance<TGenerics>
119
- ): ColumnSizingDefaultOptions {
120
- return {
121
- columnResizeMode: 'onEnd',
122
- onColumnSizingChange: makeStateUpdater('columnSizing', instance),
123
- onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', instance),
124
- }
125
- }
126
-
127
- export function getInstance<TGenerics extends PartialGenerics>(
128
- instance: TableInstance<TGenerics>
129
- ): ColumnSizingInstance<TGenerics> {
130
- return {
131
- setColumnSizing: updater =>
132
- instance.options.onColumnSizingChange?.(
133
- updater,
134
- functionalUpdate(updater, instance.getState().columnSizing)
135
- ),
136
- setColumnSizingInfo: updater =>
137
- instance.options.onColumnSizingInfoChange?.(
138
- updater,
139
- functionalUpdate(updater, instance.getState().columnSizingInfo)
140
- ),
141
- resetColumnSizing: () => {
142
- instance.setColumnSizing(instance.initialState.columnSizing ?? {})
143
- },
144
- resetHeaderSizeInfo: () => {
145
- instance.setColumnSizingInfo(instance.initialState.columnSizingInfo ?? {})
146
- },
147
- resetColumnSize: columnId => {
148
- instance.setColumnSizing(({ [columnId]: _, ...rest }) => {
149
- return rest
150
- })
151
- },
152
- resetHeaderSize: headerId => {
153
- const header = instance.getHeader(headerId)
154
-
155
- return instance.resetColumnSize(header.column.id)
156
- },
157
- getHeaderCanResize: headerId => {
158
- const header = instance.getHeader(headerId)
159
-
160
- if (!header) {
161
- throw new Error()
162
- }
163
-
164
- return instance.getColumnCanResize(header.column.id)
165
- },
166
- getColumnCanResize: columnId => {
167
- const column = instance.getColumn(columnId)
168
-
169
- if (!column) {
170
- throw new Error()
171
- }
172
-
173
- return (
174
- column.enableResizing ??
175
- instance.options.enableColumnResizing ??
176
- column.defaultCanResize ??
177
- true
178
- )
179
- },
180
- getColumnIsResizing: columnId => {
181
- const column = instance.getColumn(columnId)
182
-
183
- if (!column) {
184
- throw new Error()
185
- }
186
-
187
- return instance.getState().columnSizingInfo.isResizingColumn === columnId
188
- },
189
- getHeaderIsResizing: headerId => {
190
- const header = instance.getHeader(headerId)
191
-
192
- if (!header) {
193
- throw new Error()
194
- }
195
-
196
- return instance.getColumnIsResizing(header.column.id)
197
- },
198
-
199
- getHeaderResizerProps: (headerId, userProps) => {
200
- const header = instance.getHeader(headerId)
201
- const column = instance.getColumn(header.column.id)
202
-
203
- const canResize = column.getCanResize()
204
-
205
- const onResizeStart = (e: ReactMouseEvent | ReactTouchEvent) => {
206
- if (isTouchStartEvent(e)) {
207
- // lets not respond to multiple touches (e.g. 2 or 3 fingers)
208
- if (e.touches && e.touches.length > 1) {
209
- return
210
- }
211
- }
212
-
213
- const header = headerId ? instance.getHeader(headerId) : undefined
214
-
215
- const startSize = header ? header.getWidth() : column.getWidth()
216
-
217
- const columnSizingStart: [string, number][] = header
218
- ? header.getLeafHeaders().map(d => [d.column.id, d.getWidth()])
219
- : [[column.id, column.getWidth()]]
220
-
221
- const clientX = isTouchStartEvent(e)
222
- ? Math.round(e.touches[0].clientX)
223
- : e.clientX
224
-
225
- const updateOffset = (
226
- eventType: 'move' | 'end',
227
- clientXPos?: number
228
- ) => {
229
- if (typeof clientXPos !== 'number') {
230
- return
231
- }
232
-
233
- let newColumnSizing: ColumnSizing = {}
234
-
235
- instance.setColumnSizingInfo(old => {
236
- const deltaOffset = clientXPos - (old?.startOffset ?? 0)
237
- const deltaPercentage = Math.max(
238
- deltaOffset / (old?.startSize ?? 0),
239
- -0.999999
240
- )
241
-
242
- old.columnSizingStart.forEach(([columnId, headerWidth]) => {
243
- newColumnSizing[columnId] =
244
- Math.round(
245
- Math.max(headerWidth + headerWidth * deltaPercentage, 0) * 100
246
- ) / 100
247
- })
248
-
249
- return {
250
- ...old,
251
- deltaOffset,
252
- deltaPercentage,
253
- }
254
- })
255
-
256
- if (
257
- instance.options.columnResizeMode === 'onChange' ||
258
- eventType === 'end'
259
- ) {
260
- instance.setColumnSizing(old => ({
261
- ...old,
262
- ...newColumnSizing,
263
- }))
264
- }
265
- }
266
-
267
- const onMove = (clientXPos?: number) => updateOffset('move', clientXPos)
268
-
269
- const onEnd = (clientXPos?: number) => {
270
- updateOffset('end', clientXPos)
271
-
272
- instance.setColumnSizingInfo(old => ({
273
- ...old,
274
- isResizingColumn: false,
275
- startOffset: null,
276
- startSize: null,
277
- deltaOffset: null,
278
- deltaPercentage: null,
279
- columnSizingStart: [],
280
- }))
281
- }
282
-
283
- const mouseEvents = {
284
- moveHandler: (e: MouseEvent) => onMove(e.clientX),
285
- upHandler: (e: MouseEvent) => {
286
- document.removeEventListener('mousemove', mouseEvents.moveHandler)
287
- document.removeEventListener('mouseup', mouseEvents.upHandler)
288
- onEnd(e.clientX)
289
- },
290
- }
291
-
292
- const touchEvents = {
293
- moveHandler: (e: TouchEvent) => {
294
- if (e.cancelable) {
295
- e.preventDefault()
296
- e.stopPropagation()
297
- }
298
- onMove(e.touches[0].clientX)
299
- return false
300
- },
301
- upHandler: (e: TouchEvent) => {
302
- document.removeEventListener('touchmove', touchEvents.moveHandler)
303
- document.removeEventListener('touchend', touchEvents.upHandler)
304
- if (e.cancelable) {
305
- e.preventDefault()
306
- e.stopPropagation()
307
- }
308
- onEnd(e.touches[0].clientX)
309
- },
310
- }
311
-
312
- const passiveIfSupported = passiveEventSupported()
313
- ? { passive: false }
314
- : false
315
-
316
- if (isTouchStartEvent(e)) {
317
- document.addEventListener(
318
- 'touchmove',
319
- touchEvents.moveHandler,
320
- passiveIfSupported
321
- )
322
- document.addEventListener(
323
- 'touchend',
324
- touchEvents.upHandler,
325
- passiveIfSupported
326
- )
327
- } else {
328
- document.addEventListener(
329
- 'mousemove',
330
- mouseEvents.moveHandler,
331
- passiveIfSupported
332
- )
333
- document.addEventListener(
334
- 'mouseup',
335
- mouseEvents.upHandler,
336
- passiveIfSupported
337
- )
338
- }
339
-
340
- instance.setColumnSizingInfo(old => ({
341
- ...old,
342
- startOffset: clientX,
343
- startSize,
344
- deltaOffset: 0,
345
- deltaPercentage: 0,
346
- columnSizingStart,
347
- isResizingColumn: column.id,
348
- }))
349
- }
350
-
351
- const initialProps: ColumnResizerProps = canResize
352
- ? {
353
- title: 'Toggle Grouping',
354
- draggable: false,
355
- role: 'separator',
356
- onMouseDown: (e: ReactMouseEvent) => {
357
- e.persist()
358
- onResizeStart(e)
359
- },
360
- onTouchStart: (e: ReactTouchEvent) => {
361
- e.persist()
362
- onResizeStart(e)
363
- },
364
- }
365
- : {}
366
-
367
- return propGetter(initialProps, userProps)
368
- },
369
- }
370
- }
371
-
372
- export function createColumn<TGenerics extends PartialGenerics>(
373
- column: Column<TGenerics>,
374
- instance: TableInstance<TGenerics>
375
- ): ColumnSizingColumn<TGenerics> {
376
- return {
377
- getIsResizing: () => instance.getColumnIsResizing(column.id),
378
- getCanResize: () => instance.getColumnCanResize(column.id),
379
- resetSize: () => instance.resetColumnSize(column.id),
380
- }
381
- }
382
-
383
- export function createHeader<TGenerics extends PartialGenerics>(
384
- header: Header<TGenerics>,
385
- instance: TableInstance<TGenerics>
386
- ): ColumnSizingHeader<TGenerics> {
387
- return {
388
- getIsResizing: () => instance.getColumnIsResizing(header.column.id),
389
- getCanResize: () => instance.getColumnCanResize(header.column.id),
390
- resetSize: () => instance.resetColumnSize(header.column.id),
391
- getResizerProps: userProps =>
392
- instance.getHeaderResizerProps(header.id, userProps),
393
- }
394
- }
395
-
396
- let passiveSupported: boolean | null = null
397
- export function passiveEventSupported() {
398
- if (typeof passiveSupported === 'boolean') return passiveSupported
399
-
400
- let supported = false
401
- try {
402
- const options = {
403
- get passive() {
404
- supported = true
405
- return false
406
- },
407
- }
408
-
409
- const noop = () => {}
410
-
411
- window.addEventListener('test', noop, options)
412
- window.removeEventListener('test', noop)
413
- } catch (err) {
414
- supported = false
415
- }
416
- passiveSupported = supported
417
- return passiveSupported
418
- }
419
-
420
- function isTouchStartEvent(
421
- e: ReactTouchEvent | ReactMouseEvent
422
- ): e is ReactTouchEvent {
423
- return e.type === 'touchstart'
424
- }