@tanstack/table-core 8.0.0-alpha.10

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 (112) hide show
  1. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +112 -0
  2. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  3. package/build/cjs/aggregationTypes.js +130 -0
  4. package/build/cjs/aggregationTypes.js.map +1 -0
  5. package/build/cjs/core.js +545 -0
  6. package/build/cjs/core.js.map +1 -0
  7. package/build/cjs/createTable.js +65 -0
  8. package/build/cjs/createTable.js.map +1 -0
  9. package/build/cjs/features/ColumnSizing.js +316 -0
  10. package/build/cjs/features/ColumnSizing.js.map +1 -0
  11. package/build/cjs/features/Expanding.js +238 -0
  12. package/build/cjs/features/Expanding.js.map +1 -0
  13. package/build/cjs/features/Filters.js +413 -0
  14. package/build/cjs/features/Filters.js.map +1 -0
  15. package/build/cjs/features/Grouping.js +227 -0
  16. package/build/cjs/features/Grouping.js.map +1 -0
  17. package/build/cjs/features/Headers.js +630 -0
  18. package/build/cjs/features/Headers.js.map +1 -0
  19. package/build/cjs/features/Ordering.js +86 -0
  20. package/build/cjs/features/Ordering.js.map +1 -0
  21. package/build/cjs/features/Pagination.js +193 -0
  22. package/build/cjs/features/Pagination.js.map +1 -0
  23. package/build/cjs/features/Pinning.js +148 -0
  24. package/build/cjs/features/Pinning.js.map +1 -0
  25. package/build/cjs/features/RowSelection.js +525 -0
  26. package/build/cjs/features/RowSelection.js.map +1 -0
  27. package/build/cjs/features/Sorting.js +313 -0
  28. package/build/cjs/features/Sorting.js.map +1 -0
  29. package/build/cjs/features/Visibility.js +172 -0
  30. package/build/cjs/features/Visibility.js.map +1 -0
  31. package/build/cjs/filterTypes.js +172 -0
  32. package/build/cjs/filterTypes.js.map +1 -0
  33. package/build/cjs/index.js +75 -0
  34. package/build/cjs/index.js.map +1 -0
  35. package/build/cjs/sortTypes.js +122 -0
  36. package/build/cjs/sortTypes.js.map +1 -0
  37. package/build/cjs/types.js +22 -0
  38. package/build/cjs/types.js.map +1 -0
  39. package/build/cjs/utils/columnFilterRowsFn.js +131 -0
  40. package/build/cjs/utils/columnFilterRowsFn.js.map +1 -0
  41. package/build/cjs/utils/expandRowsFn.js +38 -0
  42. package/build/cjs/utils/expandRowsFn.js.map +1 -0
  43. package/build/cjs/utils/globalFilterRowsFn.js +101 -0
  44. package/build/cjs/utils/globalFilterRowsFn.js.map +1 -0
  45. package/build/cjs/utils/groupRowsFn.js +155 -0
  46. package/build/cjs/utils/groupRowsFn.js.map +1 -0
  47. package/build/cjs/utils/paginateRowsFn.js +44 -0
  48. package/build/cjs/utils/paginateRowsFn.js.map +1 -0
  49. package/build/cjs/utils/sortRowsFn.js +94 -0
  50. package/build/cjs/utils/sortRowsFn.js.map +1 -0
  51. package/build/cjs/utils.js +167 -0
  52. package/build/cjs/utils.js.map +1 -0
  53. package/build/esm/index.js +4689 -0
  54. package/build/esm/index.js.map +1 -0
  55. package/build/stats-html.html +2689 -0
  56. package/build/stats-react.json +939 -0
  57. package/build/types/aggregationTypes.d.ts +22 -0
  58. package/build/types/core.d.ts +105 -0
  59. package/build/types/createTable.d.ts +42 -0
  60. package/build/types/features/ColumnSizing.d.ts +75 -0
  61. package/build/types/features/Expanding.d.ts +50 -0
  62. package/build/types/features/Filters.d.ts +92 -0
  63. package/build/types/features/Grouping.d.ts +85 -0
  64. package/build/types/features/Headers.d.ts +43 -0
  65. package/build/types/features/Ordering.d.ts +21 -0
  66. package/build/types/features/Pagination.d.ts +41 -0
  67. package/build/types/features/Pinning.d.ts +41 -0
  68. package/build/types/features/RowSelection.d.ts +60 -0
  69. package/build/types/features/Sorting.d.ts +81 -0
  70. package/build/types/features/Visibility.d.ts +49 -0
  71. package/build/types/filterTypes.d.ts +50 -0
  72. package/build/types/index.d.ts +23 -0
  73. package/build/types/sortTypes.d.ts +18 -0
  74. package/build/types/types.d.ts +138 -0
  75. package/build/types/utils/columnFilterRowsFn.d.ts +2 -0
  76. package/build/types/utils/expandRowsFn.d.ts +2 -0
  77. package/build/types/utils/globalFilterRowsFn.d.ts +2 -0
  78. package/build/types/utils/groupRowsFn.d.ts +2 -0
  79. package/build/types/utils/paginateRowsFn.d.ts +2 -0
  80. package/build/types/utils/sortRowsFn.d.ts +2 -0
  81. package/build/types/utils.d.ts +23 -0
  82. package/build/umd/index.development.js +4728 -0
  83. package/build/umd/index.development.js.map +1 -0
  84. package/build/umd/index.production.js +12 -0
  85. package/build/umd/index.production.js.map +1 -0
  86. package/package.json +40 -0
  87. package/src/.DS_Store +0 -0
  88. package/src/aggregationTypes.ts +115 -0
  89. package/src/core.tsx +763 -0
  90. package/src/createTable.tsx +137 -0
  91. package/src/features/ColumnSizing.ts +432 -0
  92. package/src/features/Expanding.ts +320 -0
  93. package/src/features/Filters.ts +567 -0
  94. package/src/features/Grouping.ts +363 -0
  95. package/src/features/Headers.ts +747 -0
  96. package/src/features/Ordering.ts +112 -0
  97. package/src/features/Pagination.ts +252 -0
  98. package/src/features/Pinning.ts +177 -0
  99. package/src/features/RowSelection.ts +655 -0
  100. package/src/features/Sorting.ts +460 -0
  101. package/src/features/Visibility.ts +242 -0
  102. package/src/filterTypes.ts +188 -0
  103. package/src/index.tsx +23 -0
  104. package/src/sortTypes.ts +147 -0
  105. package/src/types.ts +311 -0
  106. package/src/utils/columnFilterRowsFn.ts +113 -0
  107. package/src/utils/expandRowsFn.ts +30 -0
  108. package/src/utils/globalFilterRowsFn.ts +89 -0
  109. package/src/utils/groupRowsFn.ts +170 -0
  110. package/src/utils/paginateRowsFn.ts +28 -0
  111. package/src/utils/sortRowsFn.ts +95 -0
  112. package/src/utils.tsx +221 -0
@@ -0,0 +1,137 @@
1
+ import { CustomFilterTypes } from './features/Filters'
2
+ import { CustomAggregationTypes } from './features/Grouping'
3
+ import { CustomSortingTypes } from './features/Sorting'
4
+ import {
5
+ ColumnDef,
6
+ AccessorFn,
7
+ DefaultGenerics,
8
+ PartialGenerics,
9
+ _NonGenerated,
10
+ } from './types'
11
+ import { Overwrite, PartialKeys } from './utils'
12
+
13
+ export type CreatTableFactory<TGenerics extends Partial<DefaultGenerics>> = <
14
+ TRow
15
+ >() => TableFactory<Overwrite<TGenerics, { Row: TRow }>>
16
+
17
+ export type CreateTableFactoryOptions<
18
+ TFilterFns extends CustomFilterTypes<any>,
19
+ TSortingFns extends CustomSortingTypes<any>,
20
+ TAggregationFns extends CustomAggregationTypes<any>
21
+ > = {
22
+ filterFns?: TFilterFns
23
+ sortingFns?: TSortingFns
24
+ aggregationFns?: TAggregationFns
25
+ }
26
+
27
+ export function createTableFactory<
28
+ TFilterFns extends CustomFilterTypes<any>,
29
+ TSortingFns extends CustomSortingTypes<any>,
30
+ TAggregationFns extends CustomAggregationTypes<any>
31
+ >(
32
+ opts: CreateTableFactoryOptions<TFilterFns, TSortingFns, TAggregationFns>
33
+ ): CreatTableFactory<
34
+ Overwrite<
35
+ PartialGenerics,
36
+ {
37
+ FilterFns: TFilterFns
38
+ SortingFns: TSortingFns
39
+ AggregationFns: TAggregationFns
40
+ }
41
+ >
42
+ > {
43
+ return () => _createTable(undefined, undefined, opts)
44
+ }
45
+
46
+ export type TableFactory<TGenerics extends Partial<DefaultGenerics>> = {
47
+ __options: CreateTableFactoryOptions<any, any, any>
48
+ createColumns: (columns: ColumnDef<TGenerics>[]) => ColumnDef<TGenerics>[]
49
+ createGroup: (
50
+ column: Overwrite<
51
+ | Overwrite<
52
+ _NonGenerated<ColumnDef<TGenerics>>,
53
+ {
54
+ header: string
55
+ id?: string
56
+ }
57
+ >
58
+ | Overwrite<
59
+ _NonGenerated<ColumnDef<TGenerics>>,
60
+ {
61
+ id: string
62
+ header?: string | ColumnDef<TGenerics>['header']
63
+ }
64
+ >,
65
+ { accessorFn?: never; accessorKey?: never }
66
+ >
67
+ ) => ColumnDef<TGenerics>
68
+ createDisplayColumn: (
69
+ column: PartialKeys<
70
+ _NonGenerated<ColumnDef<TGenerics>>,
71
+ 'accessorFn' | 'accessorKey'
72
+ >
73
+ ) => ColumnDef<TGenerics>
74
+ createDataColumn: <
75
+ TAccessor extends AccessorFn<TGenerics['Row']> | keyof TGenerics['Row']
76
+ >(
77
+ accessor: TAccessor,
78
+ column: Overwrite<
79
+ TAccessor extends (...args: any[]) => any
80
+ ? // Accessor Fn
81
+ _NonGenerated<ColumnDef<TGenerics>>
82
+ : TAccessor extends keyof TGenerics['Row']
83
+ ? // Accessor Key
84
+ Overwrite<
85
+ _NonGenerated<ColumnDef<TGenerics>>,
86
+ {
87
+ id?: string
88
+ }
89
+ >
90
+ : never,
91
+ {
92
+ accessorFn?: never
93
+ accessorKey?: never
94
+ }
95
+ >
96
+ ) => ColumnDef<TGenerics>
97
+ }
98
+
99
+ export function createTable<TRow>() {
100
+ return _createTable<Overwrite<PartialGenerics, { Row: TRow }>>()
101
+ }
102
+
103
+ function _createTable<TGenerics extends PartialGenerics>(
104
+ _?: undefined,
105
+ __?: undefined,
106
+ __options?: CreateTableFactoryOptions<any, any, any>
107
+ ): TableFactory<TGenerics> {
108
+ return {
109
+ __options: __options || {},
110
+ createColumns: columns => columns,
111
+ createDisplayColumn: column => column as any,
112
+ createGroup: column => column as any,
113
+ createDataColumn: (accessor, column): any => {
114
+ column = {
115
+ ...column,
116
+ id: column.id,
117
+ }
118
+
119
+ if (typeof accessor === 'string') {
120
+ return {
121
+ ...column,
122
+ id: column.id ?? accessor,
123
+ accessorKey: accessor,
124
+ }
125
+ }
126
+
127
+ if (typeof accessor === 'function') {
128
+ return {
129
+ ...column,
130
+ accessorFn: accessor,
131
+ }
132
+ }
133
+
134
+ throw new Error('Invalid accessor')
135
+ },
136
+ }
137
+ }
@@ -0,0 +1,432 @@
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 const ColumnSizing = {
104
+ getInitialState: (): ColumnSizingTableState => {
105
+ return {
106
+ columnSizing: {},
107
+ columnSizingInfo: {
108
+ startOffset: null,
109
+ startSize: null,
110
+ deltaOffset: null,
111
+ deltaPercentage: null,
112
+ isResizingColumn: false,
113
+ columnSizingStart: [],
114
+ },
115
+ }
116
+ },
117
+
118
+ getDefaultOptions: <TGenerics extends PartialGenerics>(
119
+ instance: TableInstance<TGenerics>
120
+ ): ColumnSizingDefaultOptions => {
121
+ return {
122
+ columnResizeMode: 'onEnd',
123
+ onColumnSizingChange: makeStateUpdater('columnSizing', instance),
124
+ onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', instance),
125
+ }
126
+ },
127
+
128
+ getInstance: <TGenerics extends PartialGenerics>(
129
+ instance: TableInstance<TGenerics>
130
+ ): ColumnSizingInstance<TGenerics> => {
131
+ 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 ?? {}
148
+ )
149
+ },
150
+ resetColumnSize: columnId => {
151
+ instance.setColumnSizing(({ [columnId]: _, ...rest }) => {
152
+ return rest
153
+ })
154
+ },
155
+ resetHeaderSize: headerId => {
156
+ const header = instance.getHeader(headerId)
157
+
158
+ return instance.resetColumnSize(header.column.id)
159
+ },
160
+ getHeaderCanResize: headerId => {
161
+ const header = instance.getHeader(headerId)
162
+
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)
171
+
172
+ if (!column) {
173
+ throw new Error()
174
+ }
175
+
176
+ return (
177
+ column.enableResizing ??
178
+ instance.options.enableColumnResizing ??
179
+ column.defaultCanResize ??
180
+ true
181
+ )
182
+ },
183
+ getColumnIsResizing: columnId => {
184
+ const column = instance.getColumn(columnId)
185
+
186
+ if (!column) {
187
+ throw new Error()
188
+ }
189
+
190
+ return (
191
+ instance.getState().columnSizingInfo.isResizingColumn === columnId
192
+ )
193
+ },
194
+ getHeaderIsResizing: headerId => {
195
+ const header = instance.getHeader(headerId)
196
+
197
+ if (!header) {
198
+ throw new Error()
199
+ }
200
+
201
+ return instance.getColumnIsResizing(header.column.id)
202
+ },
203
+
204
+ getHeaderResizerProps: (headerId, userProps) => {
205
+ const header = instance.getHeader(headerId)
206
+ const column = instance.getColumn(header.column.id)
207
+
208
+ const canResize = column.getCanResize()
209
+
210
+ const onResizeStart = (e: ReactMouseEvent | ReactTouchEvent) => {
211
+ if (isTouchStartEvent(e)) {
212
+ // lets not respond to multiple touches (e.g. 2 or 3 fingers)
213
+ if (e.touches && e.touches.length > 1) {
214
+ return
215
+ }
216
+ }
217
+
218
+ const header = headerId ? instance.getHeader(headerId) : undefined
219
+
220
+ const startSize = header ? header.getWidth() : column.getWidth()
221
+
222
+ const columnSizingStart: [string, number][] = header
223
+ ? header.getLeafHeaders().map(d => [d.column.id, d.getWidth()])
224
+ : [[column.id, column.getWidth()]]
225
+
226
+ const clientX = isTouchStartEvent(e)
227
+ ? Math.round(e.touches[0].clientX)
228
+ : e.clientX
229
+
230
+ const updateOffset = (
231
+ eventType: 'move' | 'end',
232
+ clientXPos?: number
233
+ ) => {
234
+ if (typeof clientXPos !== 'number') {
235
+ return
236
+ }
237
+
238
+ let newColumnSizing: ColumnSizing = {}
239
+
240
+ instance.setColumnSizingInfo(old => {
241
+ const deltaOffset = clientXPos - (old?.startOffset ?? 0)
242
+ const deltaPercentage = Math.max(
243
+ deltaOffset / (old?.startSize ?? 0),
244
+ -0.999999
245
+ )
246
+
247
+ old.columnSizingStart.forEach(([columnId, headerWidth]) => {
248
+ newColumnSizing[columnId] =
249
+ Math.round(
250
+ Math.max(headerWidth + headerWidth * deltaPercentage, 0) *
251
+ 100
252
+ ) / 100
253
+ })
254
+
255
+ return {
256
+ ...old,
257
+ deltaOffset,
258
+ deltaPercentage,
259
+ }
260
+ })
261
+
262
+ if (
263
+ instance.options.columnResizeMode === 'onChange' ||
264
+ eventType === 'end'
265
+ ) {
266
+ instance.setColumnSizing(old => ({
267
+ ...old,
268
+ ...newColumnSizing,
269
+ }))
270
+ }
271
+ }
272
+
273
+ const onMove = (clientXPos?: number) =>
274
+ updateOffset('move', clientXPos)
275
+
276
+ const onEnd = (clientXPos?: number) => {
277
+ updateOffset('end', clientXPos)
278
+
279
+ instance.setColumnSizingInfo(old => ({
280
+ ...old,
281
+ isResizingColumn: false,
282
+ startOffset: null,
283
+ startSize: null,
284
+ deltaOffset: null,
285
+ deltaPercentage: null,
286
+ columnSizingStart: [],
287
+ }))
288
+ }
289
+
290
+ const mouseEvents = {
291
+ moveHandler: (e: MouseEvent) => onMove(e.clientX),
292
+ upHandler: (e: MouseEvent) => {
293
+ document.removeEventListener('mousemove', mouseEvents.moveHandler)
294
+ document.removeEventListener('mouseup', mouseEvents.upHandler)
295
+ onEnd(e.clientX)
296
+ },
297
+ }
298
+
299
+ const touchEvents = {
300
+ moveHandler: (e: TouchEvent) => {
301
+ if (e.cancelable) {
302
+ e.preventDefault()
303
+ e.stopPropagation()
304
+ }
305
+ onMove(e.touches[0].clientX)
306
+ return false
307
+ },
308
+ upHandler: (e: TouchEvent) => {
309
+ document.removeEventListener('touchmove', touchEvents.moveHandler)
310
+ document.removeEventListener('touchend', touchEvents.upHandler)
311
+ if (e.cancelable) {
312
+ e.preventDefault()
313
+ e.stopPropagation()
314
+ }
315
+ onEnd(e.touches[0].clientX)
316
+ },
317
+ }
318
+
319
+ const passiveIfSupported = passiveEventSupported()
320
+ ? { passive: false }
321
+ : false
322
+
323
+ 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
+ } else {
335
+ document.addEventListener(
336
+ 'mousemove',
337
+ mouseEvents.moveHandler,
338
+ passiveIfSupported
339
+ )
340
+ document.addEventListener(
341
+ 'mouseup',
342
+ mouseEvents.upHandler,
343
+ passiveIfSupported
344
+ )
345
+ }
346
+
347
+ instance.setColumnSizingInfo(old => ({
348
+ ...old,
349
+ startOffset: clientX,
350
+ startSize,
351
+ deltaOffset: 0,
352
+ deltaPercentage: 0,
353
+ columnSizingStart,
354
+ isResizingColumn: column.id,
355
+ }))
356
+ }
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
+ },
376
+ }
377
+ },
378
+
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>,
392
+ instance: TableInstance<TGenerics>
393
+ ): ColumnSizingHeader<TGenerics> => {
394
+ 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),
400
+ }
401
+ },
402
+ }
403
+
404
+ let passiveSupported: boolean | null = null
405
+ export function passiveEventSupported() {
406
+ if (typeof passiveSupported === 'boolean') return passiveSupported
407
+
408
+ let supported = false
409
+ try {
410
+ const options = {
411
+ get passive() {
412
+ supported = true
413
+ return false
414
+ },
415
+ }
416
+
417
+ const noop = () => {}
418
+
419
+ window.addEventListener('test', noop, options)
420
+ window.removeEventListener('test', noop)
421
+ } catch (err) {
422
+ supported = false
423
+ }
424
+ passiveSupported = supported
425
+ return passiveSupported
426
+ }
427
+
428
+ function isTouchStartEvent(
429
+ e: ReactTouchEvent | ReactMouseEvent
430
+ ): e is ReactTouchEvent {
431
+ return e.type === 'touchstart'
432
+ }