@tanstack/react-table 8.0.0-alpha.7 → 8.0.0-alpha.70

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 (113) hide show
  1. package/build/cjs/react-table/src/index.js +133 -0
  2. package/build/cjs/react-table/src/index.js.map +1 -0
  3. package/build/cjs/table-core/build/esm/index.js +4033 -0
  4. package/build/cjs/table-core/build/esm/index.js.map +1 -0
  5. package/build/esm/index.js +3342 -4072
  6. package/build/esm/index.js.map +1 -1
  7. package/build/stats-html.html +1 -1
  8. package/build/stats-react.json +24 -783
  9. package/build/types/index.d.ts +16 -8
  10. package/build/umd/index.development.js +3372 -4072
  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 +5 -1
  15. package/src/index.tsx +113 -8
  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 -552
  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 -317
  25. package/build/cjs/features/ColumnSizing.js.map +0 -1
  26. package/build/cjs/features/Expanding.js +0 -251
  27. package/build/cjs/features/Expanding.js.map +0 -1
  28. package/build/cjs/features/Filters.js +0 -445
  29. package/build/cjs/features/Filters.js.map +0 -1
  30. package/build/cjs/features/Grouping.js +0 -249
  31. package/build/cjs/features/Grouping.js.map +0 -1
  32. package/build/cjs/features/Headers.js +0 -549
  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 -198
  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 -541
  41. package/build/cjs/features/RowSelection.js.map +0 -1
  42. package/build/cjs/features/Sorting.js +0 -327
  43. package/build/cjs/features/Sorting.js.map +0 -1
  44. package/build/cjs/features/Visibility.js +0 -166
  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 -32
  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/utils/columnFilterRowsFn.js +0 -131
  53. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  54. package/build/cjs/utils/expandRowsFn.js +0 -38
  55. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  56. package/build/cjs/utils/globalFilterRowsFn.js +0 -101
  57. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  58. package/build/cjs/utils/groupRowsFn.js +0 -155
  59. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  60. package/build/cjs/utils/paginateRowsFn.js +0 -44
  61. package/build/cjs/utils/paginateRowsFn.js.map +0 -1
  62. package/build/cjs/utils/sortRowsFn.js +0 -94
  63. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  64. package/build/cjs/utils.js +0 -141
  65. package/build/cjs/utils.js.map +0 -1
  66. package/build/types/aggregationTypes.d.ts +0 -22
  67. package/build/types/core.d.ts +0 -109
  68. package/build/types/createTable.d.ts +0 -52
  69. package/build/types/features/ColumnSizing.d.ts +0 -67
  70. package/build/types/features/Expanding.d.ts +0 -53
  71. package/build/types/features/Filters.d.ts +0 -98
  72. package/build/types/features/Grouping.d.ts +0 -82
  73. package/build/types/features/Headers.d.ts +0 -41
  74. package/build/types/features/Ordering.d.ts +0 -19
  75. package/build/types/features/Pagination.d.ts +0 -44
  76. package/build/types/features/Pinning.d.ts +0 -39
  77. package/build/types/features/RowSelection.d.ts +0 -66
  78. package/build/types/features/Sorting.d.ts +0 -78
  79. package/build/types/features/Visibility.d.ts +0 -47
  80. package/build/types/filterTypes.d.ts +0 -50
  81. package/build/types/sortTypes.d.ts +0 -18
  82. package/build/types/types.d.ts +0 -127
  83. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  84. package/build/types/utils/expandRowsFn.d.ts +0 -2
  85. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  86. package/build/types/utils/groupRowsFn.d.ts +0 -2
  87. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  88. package/build/types/utils/sortRowsFn.d.ts +0 -2
  89. package/build/types/utils.d.ts +0 -24
  90. package/src/aggregationTypes.ts +0 -115
  91. package/src/core.tsx +0 -1091
  92. package/src/createTable.tsx +0 -264
  93. package/src/features/ColumnSizing.ts +0 -453
  94. package/src/features/Expanding.ts +0 -406
  95. package/src/features/Filters.ts +0 -762
  96. package/src/features/Grouping.ts +0 -466
  97. package/src/features/Headers.ts +0 -912
  98. package/src/features/Ordering.ts +0 -133
  99. package/src/features/Pagination.ts +0 -325
  100. package/src/features/Pinning.ts +0 -198
  101. package/src/features/RowSelection.ts +0 -831
  102. package/src/features/Sorting.ts +0 -547
  103. package/src/features/Visibility.ts +0 -279
  104. package/src/filterTypes.ts +0 -251
  105. package/src/sortTypes.ts +0 -159
  106. package/src/types.ts +0 -331
  107. package/src/utils/columnFilterRowsFn.ts +0 -155
  108. package/src/utils/expandRowsFn.ts +0 -50
  109. package/src/utils/globalFilterRowsFn.ts +0 -122
  110. package/src/utils/groupRowsFn.ts +0 -194
  111. package/src/utils/paginateRowsFn.ts +0 -34
  112. package/src/utils/sortRowsFn.ts +0 -115
  113. package/src/utils.tsx +0 -195
@@ -1 +1 @@
1
- {"version":3,"file":"index.production.js","sources":["../../src/utils.tsx","../../src/utils/expandRowsFn.ts","../../src/features/Visibility.ts","../../src/aggregationTypes.ts","../../src/features/Grouping.ts","../../src/features/Ordering.ts","../../src/features/Pinning.ts","../../src/features/Headers.ts","../../src/filterTypes.ts","../../src/features/Filters.ts","../../src/sortTypes.ts","../../src/features/Sorting.ts","../../src/features/Expanding.ts","../../src/features/ColumnSizing.ts","../../src/features/Pagination.ts","../../src/features/RowSelection.ts","../../src/core.tsx","../../src/utils/columnFilterRowsFn.ts","../../src/createTable.tsx","../../src/utils/globalFilterRowsFn.ts","../../src/utils/groupRowsFn.ts","../../src/utils/paginateRowsFn.ts","../../src/utils/sortRowsFn.ts"],"sourcesContent":["import React from 'react'\nimport {\n Getter,\n NoInfer,\n PropGetterValue,\n Renderable,\n TableState,\n} from './types'\n\nexport type IsAny<T> = 0 extends 1 & T ? true : false\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type RequiredKeys<T, K extends keyof T> = Omit<T, K> &\n Required<Pick<T, K>>\nexport type Overwrite<T, U> = Omit<T, keyof U> & U\n\nexport type DataUpdateFunction<TInput, TOutput> = (input: TInput) => TOutput\n\nexport type Updater<TInput, TOutput> =\n | TOutput\n | DataUpdateFunction<TInput, TOutput>\n\nexport function functionalUpdate<TInput, TOutput = TInput>(\n updater: Updater<TInput, TOutput>,\n input: TInput\n): TOutput {\n return typeof updater === 'function'\n ? (updater as DataUpdateFunction<TInput, TOutput>)(input)\n : updater\n}\n\nexport function noop() {\n //\n}\n\nexport function makeStateUpdater(key: keyof TableState, instance: unknown) {\n return (updater: Updater<any, any>) => {\n ;(instance as any).setState(<TTableState,>(old: TTableState) => {\n return {\n ...old,\n [key]: functionalUpdate(updater, (old as any)[key]),\n }\n })\n }\n}\n\ntype AnyFunction = (...args: any) => any\n\nexport function isFunction<T extends AnyFunction>(d: any): d is T {\n return d instanceof Function\n}\n\nexport function flattenBy<TNode>(\n arr: TNode[],\n getChildren: (item: TNode) => TNode[]\n) {\n const flat: TNode[] = []\n\n const recurse = (subArr: TNode[]) => {\n subArr.forEach(item => {\n flat.push(item)\n const children = getChildren(item)\n if (children?.length) {\n recurse(children)\n }\n })\n }\n\n recurse(arr)\n\n return flat\n}\n\ntype PropGetterImpl = <TBaseProps, TGetter extends Getter<TBaseProps>>(\n initial: TBaseProps,\n userProps?: TGetter\n) => PropGetterValue<TBaseProps, TGetter>\n\n// @ts-ignore // Just rely on the type, not the implementation\nexport const propGetter: PropGetterImpl = (initial, getter) => {\n if (isFunction(getter)) {\n return getter(initial)\n }\n\n return {\n ...initial,\n ...(getter ?? {}),\n }\n}\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: string\n debug?: boolean\n onChange?: (result: TResult, previousResult?: TResult) => void\n }\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (depsChanged) {\n if (opts?.debug) {\n console.info(opts?.key, {\n length: `${deps.length} -> ${newDeps.length}`,\n ...newDeps\n .map((_, index) => {\n if (deps[index] !== newDeps[index]) {\n return [index, deps[index], newDeps[index]]\n }\n\n return false\n })\n .filter(Boolean)\n .reduce(\n (accu, curr: any) => ({\n ...accu,\n [curr[0]]: curr.slice(1),\n }),\n {}\n ),\n parent,\n })\n }\n\n let oldResult = result\n result = fn(...newDeps)\n deps = newDeps\n opts?.onChange?.(result, oldResult)\n\n oldResult = undefined\n }\n\n return result!\n }\n}\n\nexport type Render = typeof flexRender\n\nexport function flexRender<TProps extends {}>(\n Comp: Renderable<TProps>,\n props: TProps\n): React.ReactNode {\n return !Comp ? null : isReactComponent(Comp) ? <Comp {...props} /> : Comp\n}\n\nfunction isReactComponent(component: unknown): component is React.FC {\n return (\n isClassComponent(component) ||\n typeof component === 'function' ||\n isExoticComponent(component)\n )\n}\n\nfunction isClassComponent(component: any) {\n return (\n typeof component === 'function' &&\n (() => {\n const proto = Object.getPrototypeOf(component)\n return proto.prototype && proto.prototype.isReactComponent\n })()\n )\n}\n\nfunction isExoticComponent(component: any) {\n return (\n typeof component === 'object' &&\n typeof component.$$typeof === 'symbol' &&\n ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description)\n )\n}\n\n// export function hashString(str: string, seed = 0): string {\n// let h1 = 0xdeadbeef ^ seed,\n// h2 = 0x41c6ce57 ^ seed\n// for (let i = 0, ch; i < str.length; i++) {\n// ch = str.charCodeAt(i)\n// h1 = Math.imul(h1 ^ ch, 2654435761)\n// h2 = Math.imul(h2 ^ ch, 1597334677)\n// }\n// h1 =\n// Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^\n// Math.imul(h2 ^ (h2 >>> 13), 3266489909)\n// h2 =\n// Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^\n// Math.imul(h1 ^ (h1 >>> 13), 3266489909)\n// return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString()\n// }\n","import { ReactTable, Row, RowModel } from '../types'\n\nexport function expandRowsFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n sortedRowModel: RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n): RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n const expandedRows: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] = []\n\n const { expandSubRows } = instance.options\n\n const handleRow = (\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => {\n expandedRows.push(row)\n\n if (\n expandSubRows &&\n row.subRows?.length &&\n instance.getIsRowExpanded(row.id)\n ) {\n row.subRows.forEach(handleRow)\n }\n }\n\n sortedRowModel.rows.forEach(handleRow)\n\n return {\n rows: expandedRows,\n flatRows: sortedRowModel.flatRows,\n rowsById: sortedRowModel.rowsById,\n }\n}\n","import {\n Cell,\n Column,\n Getter,\n OnChangeFn,\n PropGetterValue,\n ReactTable,\n Updater,\n} from '../types'\nimport { functionalUpdate, makeStateUpdater, memo, propGetter } from '../utils'\n\nexport type VisibilityOptions = {\n onColumnVisibilityChange?: OnChangeFn<VisibilityState>\n enableHiding?: boolean\n}\n\nexport type VisibilityDefaultOptions = {\n onColumnVisibilityChange: OnChangeFn<VisibilityState>\n}\n\nexport type VisibilityState = Record<string, boolean>\n\nexport type VisibilityTableState = {\n columnVisibility: VisibilityState\n}\n\nexport type VisibilityInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n getVisibleFlatColumns: () => Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getVisibleLeafColumns: () => Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n setColumnVisibility: (updater: Updater<VisibilityState>) => void\n toggleColumnVisibility: (columnId: string, value?: boolean) => void\n toggleAllColumnsVisible: (value?: boolean) => void\n getColumnIsVisible: (columId: string) => boolean\n getColumnCanHide: (columnId: string) => boolean\n getIsAllColumnsVisible: () => boolean\n getIsSomeColumnsVisible: () => boolean\n getToggleAllColumnsVisibilityProps: <\n TGetter extends Getter<ToggleAllColumnsVisibilityProps>\n >(\n userProps?: TGetter\n ) => undefined | PropGetterValue<ToggleAllColumnsVisibilityProps, TGetter>\n}\n\ntype ToggleVisibilityProps = {}\ntype ToggleAllColumnsVisibilityProps = {}\n\nexport type VisibilityColumnDef = {\n enableHiding?: boolean\n defaultCanHide?: boolean\n}\n\nexport type VisibilityRow<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n getVisibleCells: () => Cell<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n}\n\nexport type VisibilityColumn = {\n getCanHide: () => boolean\n getIsVisible: () => boolean\n toggleVisibility: (value?: boolean) => void\n getToggleVisibilityProps: <TGetter extends Getter<ToggleVisibilityProps>>(\n userProps?: TGetter\n ) => PropGetterValue<ToggleVisibilityProps, TGetter>\n}\n\n//\n\nexport function getInitialState(): VisibilityTableState {\n return {\n columnVisibility: {},\n }\n}\n\nexport function getDefaultOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): VisibilityDefaultOptions {\n return {\n onColumnVisibilityChange: makeStateUpdater('columnVisibility', instance),\n }\n}\n\nexport function getDefaultColumn() {\n return {\n defaultIsVisible: true,\n }\n}\n\nexport function createColumn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): VisibilityColumn {\n return {\n getCanHide: () => instance.getColumnCanHide(column.id),\n getIsVisible: () => instance.getColumnIsVisible(column.id),\n toggleVisibility: value =>\n instance.toggleColumnVisibility(column.id, value),\n getToggleVisibilityProps: userProps => {\n const props: ToggleVisibilityProps = {\n type: 'checkbox',\n checked: column.getIsVisible?.(),\n title: 'Toggle Column Visibility',\n onChange: (e: MouseEvent | TouchEvent) => {\n column.toggleVisibility?.((e.target as HTMLInputElement).checked)\n },\n }\n\n return propGetter(props, userProps)\n },\n }\n}\n\nexport function getInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): VisibilityInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n return {\n getVisibleFlatColumns: memo(\n () => [\n instance.getAllFlatColumns(),\n instance\n .getAllFlatColumns()\n .filter(d => d.getIsVisible?.())\n .map(d => d.id)\n .join('_'),\n ],\n allFlatColumns => {\n return allFlatColumns.filter(d => d.getIsVisible?.())\n },\n { key: 'getVisibleFlatColumns', debug: instance.options.debug }\n ),\n\n getVisibleLeafColumns: memo(\n () => [\n instance.getAllLeafColumns(),\n instance\n .getAllLeafColumns()\n .filter(d => d.getIsVisible?.())\n .map(d => d.id)\n .join('_'),\n ],\n allFlatColumns => {\n return allFlatColumns.filter(d => d.getIsVisible?.())\n },\n { key: 'getVisibleLeafColumns', debug: instance.options.debug }\n ),\n\n setColumnVisibility: updater =>\n instance.options.onColumnVisibilityChange?.(\n updater,\n functionalUpdate(updater, instance.getState().columnVisibility)\n ),\n\n toggleColumnVisibility: (columnId, value) => {\n if (!columnId) return\n\n if (instance.getColumnCanHide(columnId)) {\n instance.setColumnVisibility(old => ({\n ...old,\n [columnId]: value ?? !instance.getColumnIsVisible(columnId),\n }))\n }\n },\n\n toggleAllColumnsVisible: value => {\n value = value ?? !instance.getIsAllColumnsVisible()\n\n instance.setColumnVisibility(\n instance.getAllLeafColumns().reduce(\n (obj, column) => ({\n ...obj,\n [column.id]: !value ? !column.getCanHide?.() : value,\n }),\n {}\n )\n )\n },\n\n getColumnIsVisible: columnId => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n return (\n instance.getState().columnVisibility?.[columnId] ??\n column.defaultIsVisible ??\n true\n )\n },\n\n getColumnCanHide: columnId => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n return (\n instance.options.enableHiding ??\n column.enableHiding ??\n column.defaultCanHide ??\n true\n )\n },\n\n getIsAllColumnsVisible: () =>\n !instance.getAllLeafColumns().some(column => !column.getIsVisible?.()),\n\n getIsSomeColumnsVisible: () =>\n instance.getAllLeafColumns().some(column => column.getIsVisible?.()),\n\n getToggleAllColumnsVisibilityProps: userProps => {\n const props: ToggleAllColumnsVisibilityProps = {\n onChange: (e: MouseEvent) => {\n instance.toggleAllColumnsVisible(\n (e.target as HTMLInputElement)?.checked\n )\n },\n type: 'checkbox',\n title: 'Toggle visibility for all columns',\n checked: instance.getIsAllColumnsVisible(),\n indeterminate:\n !instance.getIsAllColumnsVisible() &&\n instance.getIsSomeColumnsVisible()\n ? 'indeterminate'\n : undefined,\n }\n\n return propGetter(props, userProps)\n },\n }\n}\n","export const aggregationTypes = {\n sum,\n min,\n max,\n extent,\n mean,\n median,\n unique,\n uniqueCount,\n count,\n}\n\nexport type BuiltInAggregationType = keyof typeof aggregationTypes\n\nfunction sum(_leafValues: unknown[], childValues: unknown[]) {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childValues.reduce(\n (sum: number, next: unknown) => sum + (typeof next === 'number' ? next : 0),\n 0\n )\n}\n\nfunction min(_leafValues: unknown[], childValues: unknown[]) {\n let min: number | undefined\n\n for (const value of childValues as number[]) {\n if (\n value != null &&\n (min! > value || (min === undefined && value >= value))\n ) {\n min = value\n }\n }\n\n return min\n}\n\nfunction max(_leafValues: unknown[], childValues: unknown[]) {\n let max: number | undefined\n\n for (const value of childValues as number[]) {\n if (\n value != null &&\n (max! < value || (max === undefined && value >= value))\n ) {\n max = value\n }\n }\n\n return max\n}\n\nfunction extent(_leafValues: unknown[], childValues: unknown[]) {\n let min: number | undefined\n let max: number | undefined\n\n for (const value of childValues as number[]) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value\n } else {\n if (min > value) min = value\n if (max! < value) max = value\n }\n }\n }\n\n return [min, max]\n}\n\nfunction mean(leafValues: unknown[]) {\n let count = 0\n let sum = 0\n\n for (let value of leafValues as number[]) {\n if (value != null && (value = +value) >= value) {\n ++count, (sum += value)\n }\n }\n\n if (count) return sum / count\n\n return\n}\n\nfunction median(values: unknown[]) {\n if (!values.length) {\n return\n }\n\n let min = 0\n let max = 0\n\n values.forEach(value => {\n if (typeof value === 'number') {\n min = Math.min(min, value)\n max = Math.max(max, value)\n }\n })\n\n return (min + max) / 2\n}\n\nfunction unique<T>(values: T[]) {\n return Array.from(new Set(values).values())\n}\n\nfunction uniqueCount(values: unknown[]) {\n return new Set(values).size\n}\n\nfunction count(values: unknown[]) {\n return values.length\n}\n","import React, { MouseEvent, TouchEvent } from 'react'\nimport { RowModel } from '..'\nimport { BuiltInAggregationType, aggregationTypes } from '../aggregationTypes'\nimport {\n Cell,\n Column,\n Getter,\n OnChangeFn,\n PropGetterValue,\n ReactTable,\n Row,\n Updater,\n} from '../types'\nimport {\n functionalUpdate,\n isFunction,\n makeStateUpdater,\n memo,\n propGetter,\n} from '../utils'\n\nexport type GroupingState = string[]\n\nexport type AggregationFn = (leafValues: any[], childValues: any[]) => any\n\nexport type AggregationType<TAggregationFns> =\n | 'auto'\n | BuiltInAggregationType\n | keyof TAggregationFns\n | AggregationFn\n\nexport type GroupingTableState = {\n grouping: GroupingState\n}\n\nexport type GroupingColumnDef<TAggregationFns> = {\n aggregationType?: AggregationType<TAggregationFns>\n aggregateValue?: (columnValue: unknown) => any\n renderAggregatedCell?: () => React.ReactNode\n enableGrouping?: boolean\n defaultCanGroup?: boolean\n}\n\nexport type GroupingColumn<\n _TData,\n _TValue,\n _TFilterFns,\n _TSortingFns,\n TAggregationFns\n> = {\n aggregationType?: AggregationType<TAggregationFns>\n getCanGroup: () => boolean\n getIsGrouped: () => boolean\n getGroupedIndex: () => number\n toggleGrouping: () => void\n getToggleGroupingProps: <TGetter extends Getter<ToggleGroupingProps>>(\n userProps?: TGetter\n ) => undefined | PropGetterValue<ToggleGroupingProps, TGetter>\n}\n\nexport type GroupingRow = {\n groupingColumnId?: string\n groupingValue?: any\n getIsGrouped: () => boolean\n}\n\nexport type GroupingCell = {\n getIsGrouped: () => boolean\n getIsPlaceholder: () => boolean\n getIsAggregated: () => boolean\n}\n\nexport type ColumnDefaultOptions = {\n // Column\n onGroupingChange: OnChangeFn<GroupingState>\n autoResetGrouping: boolean\n enableGrouping: boolean\n}\n\nexport type GroupingOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n aggregationTypes?: TAggregationFns\n onGroupingChange?: OnChangeFn<GroupingState>\n autoResetGrouping?: boolean\n enableGrouping?: boolean\n enableGroupingRemoval?: boolean\n groupRowsFn?: (\n instance: ReactTable<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >,\n rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n\n groupedColumnMode?: false | 'reorder' | 'remove'\n}\n\nexport type GroupingColumnMode = false | 'reorder' | 'remove'\n\nexport type ToggleGroupingProps = {\n title?: string\n onClick?: (event: MouseEvent | TouchEvent) => void\n}\n\nexport type GroupingInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n _notifyGroupingReset: () => void\n getColumnAutoAggregationFn: (columnId: string) => AggregationFn | undefined\n getColumnAggregationFn: (columnId: string) => AggregationFn | undefined\n setGrouping: (updater: Updater<GroupingState>) => void\n resetGrouping: () => void\n toggleColumnGrouping: (columnId: string) => void\n getColumnCanGroup: (columnId: string) => boolean\n getColumnIsGrouped: (columnId: string) => boolean\n getColumnGroupedIndex: (columnId: string) => number\n getToggleGroupingProps: <TGetter extends Getter<ToggleGroupingProps>>(\n columnId: string,\n userProps?: TGetter\n ) => undefined | PropGetterValue<ToggleGroupingProps, TGetter>\n getRowIsGrouped: (rowId: string) => boolean\n getGroupedRowModel: () => RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n getPreGroupedRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPreGroupedFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPreGroupedRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n getGroupedRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getGroupedFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getGroupedRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n}\n\n//\n\nexport function getDefaultColumn<TFilterFns>(): GroupingColumnDef<TFilterFns> {\n return {\n aggregationType: 'auto',\n }\n}\n\nexport function getInitialState(): GroupingTableState {\n return {\n grouping: [],\n }\n}\n\nexport function getDefaultOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): GroupingOptions<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n return {\n onGroupingChange: makeStateUpdater('grouping', instance),\n autoResetGrouping: true,\n groupedColumnMode: 'reorder',\n }\n}\n\nexport function createColumn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): GroupingColumn<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n return {\n aggregationType: column.aggregationType,\n getCanGroup: () => instance.getColumnCanGroup(column.id),\n getGroupedIndex: () => instance.getColumnGroupedIndex(column.id),\n getIsGrouped: () => instance.getColumnIsGrouped(column.id),\n toggleGrouping: () => instance.toggleColumnGrouping(column.id),\n getToggleGroupingProps: userProps =>\n instance.getToggleGroupingProps(column.id, userProps),\n }\n}\n\nexport function getInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): GroupingInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n let registered = false\n\n return {\n _notifyGroupingReset: () => {\n if (!registered) {\n registered = true\n return\n }\n\n if (instance.options.autoResetAll === false) {\n return\n }\n\n if (\n instance.options.autoResetAll === true ||\n instance.options.autoResetGrouping\n ) {\n instance.resetGrouping()\n }\n },\n getColumnAutoAggregationFn: columnId => {\n const firstRow = instance.getCoreFlatRows()[0]\n\n const value = firstRow?.values[columnId]\n\n if (typeof value === 'number') {\n return aggregationTypes.sum\n }\n\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return aggregationTypes.extent\n }\n\n return aggregationTypes.count\n },\n getColumnAggregationFn: columnId => {\n const column = instance.getColumn(columnId)\n const userAggregationTypes = instance.options.aggregationTypes\n\n if (!column) {\n throw new Error()\n }\n\n return isFunction(column.aggregationType)\n ? column.aggregationType\n : column.aggregationType === 'auto'\n ? instance.getColumnAutoFilterFn(columnId)\n : (userAggregationTypes as Record<string, any>)?.[\n column.aggregationType as string\n ] ??\n (aggregationTypes[\n column.aggregationType as BuiltInAggregationType\n ] as AggregationFn)\n },\n\n setGrouping: updater =>\n instance.options.onGroupingChange?.(\n updater,\n functionalUpdate(updater, instance.getState().grouping)\n ),\n\n toggleColumnGrouping: columnId => {\n instance.setGrouping(old => {\n // Find any existing grouping for this column\n if (old?.includes(columnId)) {\n return old.filter(d => d !== columnId)\n }\n\n return [...(old ?? []), columnId]\n })\n },\n\n getColumnCanGroup: columnId => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n return (\n column.enableGrouping ??\n instance.options.enableGrouping ??\n column.defaultCanGroup ??\n !!column.accessorFn\n )\n },\n\n getColumnIsGrouped: columnId => {\n return instance.getState().grouping?.includes(columnId)\n },\n\n getColumnGroupedIndex: columnId =>\n instance.getState().grouping?.indexOf(columnId),\n\n resetGrouping: () => {\n instance.setGrouping(instance.initialState?.grouping ?? [])\n },\n\n getToggleGroupingProps: (columnId, userProps) => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n return\n }\n\n const canGroup = column.getCanGroup()\n\n const initialProps: ToggleGroupingProps = {\n title: canGroup ? 'Toggle Grouping' : undefined,\n onClick: canGroup\n ? (e: MouseEvent | TouchEvent) => {\n e.persist()\n column.toggleGrouping?.()\n }\n : undefined,\n }\n\n return propGetter(initialProps, userProps)\n },\n\n getRowIsGrouped: rowId => !!instance.getRow(rowId)?.groupingColumnId,\n\n getGroupedRowModel: memo(\n () => [\n instance.getState().grouping,\n instance.getSortedRowModel(),\n instance.options.groupRowsFn,\n ],\n (grouping, rowModel, groupRowsFn) => {\n if (!groupRowsFn || !grouping.length) {\n return rowModel\n }\n\n if (process.env.NODE_ENV !== 'production' && instance.options.debug)\n console.info('Grouping...')\n\n return groupRowsFn(instance, rowModel)\n },\n {\n key: 'getGroupedRowModel',\n debug: instance.options.debug,\n onChange: () => instance._notifyExpandedReset(),\n }\n ),\n\n getPreGroupedRows: () => instance.getSortedRowModel().rows,\n getPreGroupedFlatRows: () => instance.getSortedRowModel().flatRows,\n getPreGroupedRowsById: () => instance.getSortedRowModel().rowsById,\n getGroupedRows: () => instance.getGroupedRowModel().rows,\n getGroupedFlatRows: () => instance.getGroupedRowModel().flatRows,\n getGroupedRowsById: () => instance.getGroupedRowModel().rowsById,\n }\n}\n\nexport function createRow<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): GroupingRow {\n return {\n getIsGrouped: () => instance.getRowIsGrouped(row.id),\n }\n}\n\nexport function createCell<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n cell: Cell<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> &\n GroupingCell,\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n _instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): GroupingCell {\n return {\n getIsGrouped: () =>\n column.getIsGrouped() && column.id === row.groupingColumnId,\n getIsPlaceholder: () => !cell.getIsGrouped() && column.getIsGrouped(),\n getIsAggregated: () =>\n !cell.getIsGrouped() &&\n !cell.getIsPlaceholder() &&\n row.subRows?.length > 1,\n }\n}\n\nexport function orderColumns<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n leafColumns: Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[],\n grouping: string[],\n groupedColumnMode?: GroupingColumnMode\n) {\n if (!grouping?.length || !groupedColumnMode) {\n return leafColumns\n }\n\n const nonGroupingColumns = leafColumns.filter(\n col => !grouping.includes(col.id)\n )\n\n if (groupedColumnMode === 'remove') {\n return nonGroupingColumns\n }\n\n const groupingColumns = grouping\n .map(g => leafColumns.find(col => col.id === g)!)\n .filter(Boolean)\n\n return [...groupingColumns, ...nonGroupingColumns]\n}\n","import { functionalUpdate, makeStateUpdater, memo } from '../utils'\n\nimport { ReactTable, OnChangeFn, Updater, Column } from '../types'\n\nimport * as Grouping from './Grouping'\n\nexport type ColumnOrderState = string[]\n\nexport type ColumnOrderTableState = {\n columnOrder: ColumnOrderState\n}\n\nexport type ColumnOrderOptions = {\n onColumnOrderChange?: OnChangeFn<ColumnOrderState>\n}\n\nexport type ColumnOrderDefaultOptions = {\n onColumnOrderChange: OnChangeFn<ColumnOrderState>\n}\n\nexport type ColumnOrderInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n setColumnOrder: (updater: Updater<ColumnOrderState>) => void\n resetColumnOrder: () => void\n getOrderColumnsFn: () => (\n columns: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n ) => Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n}\n\n//\n\nexport function getInitialState(): ColumnOrderTableState {\n return {\n columnOrder: [],\n }\n}\n\nexport function getDefaultOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): ColumnOrderDefaultOptions {\n return {\n onColumnOrderChange: makeStateUpdater('columnOrder', instance),\n }\n}\n\nexport function getInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): ColumnOrderInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> {\n return {\n setColumnOrder: updater =>\n instance.options.onColumnOrderChange?.(\n updater,\n functionalUpdate(updater, instance.getState().columnOrder)\n ),\n resetColumnOrder: () => {\n instance.setColumnOrder(instance.initialState.columnOrder ?? [])\n },\n getOrderColumnsFn: memo(\n () => [\n instance.getState().columnOrder,\n instance.getState().grouping,\n instance.options.groupedColumnMode,\n ],\n (columnOrder, grouping, groupedColumnMode) => columns => {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n let orderedColumns: Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] = []\n\n // If there is no order, return the normal columns\n if (!columnOrder?.length) {\n orderedColumns = columns\n } else {\n const columnOrderCopy = [...columnOrder]\n\n // If there is an order, make a copy of the columns\n const columnsCopy = [...columns]\n\n // And make a new ordered array of the columns\n\n // Loop over the columns and place them in order into the new array\n while (columnsCopy.length && columnOrderCopy.length) {\n const targetColumnId = columnOrderCopy.shift()\n const foundIndex = columnsCopy.findIndex(\n d => d.id === targetColumnId\n )\n if (foundIndex > -1) {\n orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]!)\n }\n }\n\n // If there are any columns left, add them to the end\n orderedColumns = [...orderedColumns, ...columnsCopy]\n }\n\n return Grouping.orderColumns(\n orderedColumns,\n grouping,\n groupedColumnMode\n )\n },\n { key: 'getOrderColumnsFn', debug: instance.options.debug }\n ),\n }\n}\n","import { OnChangeFn, Updater, ReactTable, Column } from '../types'\nimport { functionalUpdate, makeStateUpdater } from '../utils'\n\ntype ColumnPinningPosition = false | 'left' | 'right'\n\nexport type ColumnPinningState = {\n left?: string[]\n right?: string[]\n}\n\nexport type ColumnPinningTableState = {\n columnPinning: ColumnPinningState\n}\n\nexport type ColumnPinningOptions = {\n onColumnPinningChange?: OnChangeFn<ColumnPinningState>\n enablePinning?: boolean\n}\n\nexport type ColumnPinningDefaultOptions = {\n onColumnPinningChange: OnChangeFn<ColumnPinningState>\n}\n\nexport type ColumnPinningColumnDef = {\n enablePinning?: boolean\n defaultCanPin?: boolean\n}\n\nexport type ColumnPinningColumn = {\n getCanPin: () => boolean\n getPinnedIndex: () => number\n getIsPinned: () => ColumnPinningPosition\n pin: (position: ColumnPinningPosition) => void\n}\n\nexport type ColumnPinningInstance<\n _TData,\n _TValue,\n _TFilterFns,\n _TSortingFns,\n _TAggregationFns\n> = {\n setColumnPinning: (updater: Updater<ColumnPinningState>) => void\n resetColumnPinning: () => void\n pinColumn: (columnId: string, position: ColumnPinningPosition) => void\n getColumnCanPin: (columnId: string) => boolean\n getColumnIsPinned: (columnId: string) => ColumnPinningPosition\n getColumnPinnedIndex: (columnId: string) => number\n}\n\n//\n\nexport function getInitialState(): ColumnPinningTableState {\n return {\n columnPinning: {\n left: [],\n right: [],\n },\n }\n}\n\nexport function getDefaultOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): ColumnPinningDefaultOptions {\n return {\n onColumnPinningChange: makeStateUpdater('columnPinning', instance),\n }\n}\n\nexport function createColumn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): ColumnPinningColumn {\n return {\n getCanPin: () => instance.getColumnCanPin(column.id),\n getPinnedIndex: () => instance.getColumnPinnedIndex(column.id),\n getIsPinned: () => instance.getColumnIsPinned(column.id),\n pin: position => instance.pinColumn(column.id, position),\n }\n}\n\nexport function getInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): ColumnPinningInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> {\n return {\n setColumnPinning: updater =>\n instance.options.onColumnPinningChange?.(\n updater,\n functionalUpdate(updater, instance.getState().columnPinning)\n ),\n\n resetColumnPinning: () =>\n instance.setColumnPinning(instance.initialState?.columnPinning ?? {}),\n\n pinColumn: (columnId, position) => {\n const column = instance.getColumn(columnId)\n\n const columnIds = column\n ?.getLeafColumns()\n .map(d => d.id)\n .filter(Boolean) as string[]\n\n instance.setColumnPinning(old => {\n if (position === 'right') {\n return {\n left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),\n right: [\n ...(old?.right ?? []).filter(d => !columnIds?.includes(d)),\n ...columnIds,\n ],\n }\n }\n\n if (position === 'left') {\n return {\n left: [\n ...(old?.left ?? []).filter(d => !columnIds?.includes(d)),\n ...columnIds,\n ],\n right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),\n }\n }\n\n return {\n left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),\n right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),\n }\n })\n },\n\n getColumnCanPin: columnId => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n const leafColumns = column.getLeafColumns()\n\n return leafColumns.some(\n d =>\n d.enablePinning ??\n instance.options.enablePinning ??\n d.defaultCanPin ??\n !!d.accessorFn\n )\n },\n\n getColumnIsPinned: columnId => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n const leafColumnIds = column.getLeafColumns().map(d => d.id)\n\n const { left, right } = instance.getState().columnPinning\n\n const isLeft = leafColumnIds.some(d => left?.includes(d))\n const isRight = leafColumnIds.some(d => right?.includes(d))\n\n return isLeft ? 'left' : isRight ? 'right' : false\n },\n\n getColumnPinnedIndex: columnId => {\n const position = instance.getColumnIsPinned(columnId)\n\n return position\n ? instance.getState().columnPinning?.[position]?.indexOf(columnId) ?? -1\n : 0\n },\n }\n}\n","import {\n Cell,\n Column,\n CoreHeader,\n FooterGroupProps,\n FooterProps,\n Getter,\n Header,\n HeaderGroup,\n HeaderGroupProps,\n HeaderProps,\n PropGetterValue,\n ReactTable,\n Row,\n} from '../types'\nimport { propGetter, memo, flexRender } from '../utils'\n\nimport * as ColumnSizing from './ColumnSizing'\nimport * as Sorting from './Sorting'\n\nexport type HeadersRow<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n _getAllVisibleCells: () => Cell<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getVisibleCells: () => Cell<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getLeftVisibleCells: () => Cell<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getCenterVisibleCells: () => Cell<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getRightVisibleCells: () => Cell<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n}\n\nexport type HeadersInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n createHeader: (\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n options: {\n id?: string\n isPlaceholder?: boolean\n placeholderId?: string\n depth: number\n }\n ) => Header<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n getHeaderGroups: () => HeaderGroup<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getLeftHeaderGroups: () => HeaderGroup<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getCenterHeaderGroups: () => HeaderGroup<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getRightHeaderGroups: () => HeaderGroup<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n\n getFooterGroups: () => HeaderGroup<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getCenterFooterGroups: () => HeaderGroup<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getLeftFooterGroups: () => HeaderGroup<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getRightFooterGroups: () => HeaderGroup<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n\n getFlatHeaders: () => Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getLeftFlatHeaders: () => Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getCenterFlatHeaders: () => Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getRightFlatHeaders: () => Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n\n getLeafHeaders: () => Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getLeftLeafHeaders: () => Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getCenterLeafHeaders: () => Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getRightLeafHeaders: () => Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n\n getHeader: (\n id: string\n ) => Header<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n\n getHeaderGroupProps: <TGetter extends Getter<HeaderGroupProps>>(\n id: string,\n userProps?: TGetter\n ) => undefined | PropGetterValue<HeaderGroupProps, TGetter>\n getFooterGroupProps: <TGetter extends Getter<FooterGroupProps>>(\n id: string,\n userProps?: TGetter\n ) => undefined | PropGetterValue<FooterGroupProps, TGetter>\n getHeaderProps: <TGetter extends Getter<HeaderProps>>(\n headerId: string,\n userProps?: TGetter\n ) => undefined | PropGetterValue<HeaderProps, TGetter>\n getFooterProps: <TGetter extends Getter<FooterProps>>(\n headerId: string,\n userProps?: TGetter\n ) => undefined | PropGetterValue<FooterProps, TGetter>\n getTotalWidth: () => number\n}\n\n//\n\nexport function createRow<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): HeadersRow<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n return {\n _getAllVisibleCells: memo(\n () => [\n row\n .getAllCells()\n .filter(cell => cell.column.getIsVisible())\n .map(d => d.id)\n .join('_'),\n ],\n _ => {\n return row.getAllCells().filter(cell => cell.column.getIsVisible())\n },\n { key: 'row._getAllVisibleCells', debug: instance.options.debug }\n ),\n getVisibleCells: memo(\n () => [\n row.getLeftVisibleCells(),\n row.getCenterVisibleCells(),\n row.getRightVisibleCells(),\n ],\n (left, center, right) => [...left, ...center, ...right],\n { key: 'row.getVisibleCells', debug: instance.options.debug }\n ),\n getCenterVisibleCells: memo(\n () => [\n row._getAllVisibleCells(),\n instance.getState().columnPinning.left,\n instance.getState().columnPinning.right,\n ],\n (allCells, left, right) => {\n const leftAndRight = [...(left ?? []), ...(right ?? [])]\n\n return allCells.filter(d => !leftAndRight.includes(d.columnId))\n },\n { key: 'row.getCenterVisibleCells', debug: instance.options.debug }\n ),\n getLeftVisibleCells: memo(\n () => [\n row._getAllVisibleCells(),\n instance.getState().columnPinning.left,\n ,\n ],\n (allCells, left) => {\n const cells = (left ?? [])\n .map(columnId => allCells.find(cell => cell.columnId === columnId)!)\n .filter(Boolean)\n\n return cells\n },\n { key: 'row.getLeftVisibleCells', debug: instance.options.debug }\n ),\n getRightVisibleCells: memo(\n () => [\n row._getAllVisibleCells(),\n instance.getState().columnPinning.right,\n ],\n (allCells, right) => {\n const cells = (right ?? [])\n .map(columnId => allCells.find(cell => cell.columnId === columnId)!)\n .filter(Boolean)\n\n return cells\n },\n { key: 'row.getRightVisibleCells', debug: instance.options.debug }\n ),\n }\n}\n\nexport function getInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): HeadersInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n return {\n createHeader: (\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n options: {\n id?: string\n isPlaceholder?: boolean\n placeholderId?: string\n depth: number\n }\n ) => {\n const id = options.id ?? column.id\n\n let header: CoreHeader<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n > = {\n id,\n column,\n isPlaceholder: options.isPlaceholder,\n placeholderId: options.placeholderId,\n depth: options.depth,\n subHeaders: [],\n colSpan: 0,\n rowSpan: 0,\n getWidth: () => {\n let sum = 0\n\n const recurse = (\n header: CoreHeader<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n ) => {\n if (header.subHeaders.length) {\n header.subHeaders.forEach(recurse)\n } else {\n sum += header.column.getWidth() ?? 0\n }\n }\n\n recurse(header)\n\n return sum\n },\n getLeafHeaders: (): Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] => {\n const leafHeaders: CoreHeader<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] = []\n\n const recurseHeader = (\n h: CoreHeader<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n ) => {\n if (h.subHeaders && h.subHeaders.length) {\n h.subHeaders.map(recurseHeader)\n }\n leafHeaders.push(h)\n }\n\n recurseHeader(header)\n\n return leafHeaders as Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n },\n getHeaderProps: userProps =>\n instance.getHeaderProps(header.id, userProps)!,\n getFooterProps: userProps =>\n instance.getFooterProps(header.id, userProps)!,\n renderHeader: () =>\n flexRender(column.header, { instance, header, column }),\n renderFooter: () =>\n flexRender(column.footer, { instance, header, column }),\n }\n\n // Yes, we have to convert instance to uknown, because we know more than the compiler here.\n return header as Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n },\n\n // Header Groups\n\n getHeaderGroups: memo(\n () => [\n instance.getAllColumns(),\n instance.getVisibleLeafColumns(),\n instance.getState().columnPinning.left,\n instance.getState().columnPinning.right,\n ],\n (allColumns, leafColumns, left, right) => {\n const leftColumns = leafColumns.filter(column =>\n left?.includes(column.id)\n )\n const rightColumns = leafColumns.filter(column =>\n right?.includes(column.id)\n )\n const centerColumns = leafColumns.filter(\n column => !left?.includes(column.id) && !right?.includes(column.id)\n )\n const headerGroups = buildHeaderGroups(\n allColumns,\n [...leftColumns, ...centerColumns, ...rightColumns],\n instance\n )\n\n return headerGroups\n },\n { key: 'getHeaderGroups', debug: instance.options.debug }\n ),\n\n getCenterHeaderGroups: memo(\n () => [\n instance.getAllColumns(),\n instance.getVisibleLeafColumns(),\n instance.getState().columnPinning.left,\n instance.getState().columnPinning.right,\n ],\n (allColumns, leafColumns, left, right) => {\n leafColumns = leafColumns.filter(\n column => !left?.includes(column.id) && !right?.includes(column.id)\n )\n return buildHeaderGroups(allColumns, leafColumns, instance, 'center')\n },\n { key: 'getCenterHeaderGroups', debug: instance.options.debug }\n ),\n\n getLeftHeaderGroups: memo(\n () => [\n instance.getAllColumns(),\n instance.getVisibleLeafColumns(),\n instance.getState().columnPinning.left,\n ],\n (allColumns, leafColumns, left) => {\n leafColumns = leafColumns.filter(column => left?.includes(column.id))\n return buildHeaderGroups(allColumns, leafColumns, instance, 'left')\n },\n { key: 'getLeftHeaderGroups', debug: instance.options.debug }\n ),\n\n getRightHeaderGroups: memo(\n () => [\n instance.getAllColumns(),\n instance.getVisibleLeafColumns(),\n instance.getState().columnPinning.right,\n ],\n (allColumns, leafColumns, right) => {\n leafColumns = leafColumns.filter(column => right?.includes(column.id))\n return buildHeaderGroups(allColumns, leafColumns, instance, 'right')\n },\n { key: 'getRightHeaderGroups', debug: instance.options.debug }\n ),\n\n // Footer Groups\n\n getFooterGroups: memo(\n () => [instance.getHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n { key: 'getFooterGroups', debug: instance.options.debug }\n ),\n\n getLeftFooterGroups: memo(\n () => [instance.getLeftHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n { key: 'getLeftFooterGroups', debug: instance.options.debug }\n ),\n\n getCenterFooterGroups: memo(\n () => [instance.getCenterHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n { key: 'getCenterFooterGroups', debug: instance.options.debug }\n ),\n\n getRightFooterGroups: memo(\n () => [instance.getRightHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n { key: 'getRightFooterGroups', debug: instance.options.debug }\n ),\n\n // Flat Headers\n\n getFlatHeaders: memo(\n () => [instance.getHeaderGroups()],\n headerGroups => {\n return headerGroups\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n { key: 'getFlatHeaders', debug: instance.options.debug }\n ),\n\n getLeftFlatHeaders: memo(\n () => [instance.getLeftHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n { key: 'getLeftFlatHeaders', debug: instance.options.debug }\n ),\n\n getCenterFlatHeaders: memo(\n () => [instance.getCenterHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n { key: 'getCenterFlatHeaders', debug: instance.options.debug }\n ),\n\n getRightFlatHeaders: memo(\n () => [instance.getRightHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n { key: 'getRightFlatHeaders', debug: instance.options.debug }\n ),\n\n // Leaf Headers\n\n getCenterLeafHeaders: memo(\n () => [instance.getCenterFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n { key: 'getCenterLeafHeaders', debug: instance.options.debug }\n ),\n\n getLeftLeafHeaders: memo(\n () => [instance.getLeftFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n { key: 'getLeftLeafHeaders', debug: instance.options.debug }\n ),\n\n getRightLeafHeaders: memo(\n () => [instance.getRightFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n { key: 'getRightLeafHeaders', debug: instance.options.debug }\n ),\n\n getLeafHeaders: memo(\n () => [\n instance.getLeftHeaderGroups(),\n instance.getCenterHeaderGroups(),\n instance.getRightHeaderGroups(),\n ],\n (left, center, right) => {\n return [\n ...(left[0]?.headers ?? []),\n ...(center[0]?.headers ?? []),\n ...(right[0]?.headers ?? []),\n ]\n .map(header => {\n return header.getLeafHeaders()\n })\n .flat()\n },\n { key: 'getLeafHeaders', debug: instance.options.debug }\n ),\n\n getHeader: (id: string) => {\n const header = [\n ...instance.getFlatHeaders(),\n ...instance.getCenterFlatHeaders(),\n ...instance.getLeftFlatHeaders(),\n ...instance.getRightFlatHeaders(),\n ].find(d => d.id === id)\n\n if (!header) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Could not find header with id: ${id}`)\n }\n throw new Error()\n }\n\n return header\n },\n\n getHeaderGroupProps: (id, userProps) => {\n const headerGroup = instance.getHeaderGroups().find(d => d.id === id)\n\n if (!headerGroup) {\n return\n }\n\n return propGetter(\n {\n key: headerGroup.id,\n role: 'row',\n },\n userProps\n )\n },\n\n getFooterGroupProps: (id, userProps) => {\n const headerGroup = instance.getFooterGroups().find(d => d.id === id)\n\n if (!headerGroup) {\n return\n }\n\n const initialProps = {\n key: headerGroup.id,\n role: 'row',\n }\n\n return propGetter(initialProps, userProps)\n },\n\n getHeaderProps: (id, userProps) => {\n const header = instance.getHeader(id)\n\n if (!header) {\n throw new Error()\n }\n\n const initialProps: HeaderProps = {\n key: header.id,\n role: 'columnheader',\n colSpan: header.colSpan,\n rowSpan: header.rowSpan,\n }\n\n return propGetter(initialProps, userProps)\n },\n\n getFooterProps: (id, userProps) => {\n const header = instance.getHeader(id)\n if (!header) {\n return\n }\n\n const initialProps: FooterProps = {\n key: header.id,\n role: 'columnfooter',\n colSpan: header.colSpan,\n rowSpan: header.rowSpan,\n }\n\n return propGetter(initialProps, userProps)\n },\n\n getTotalWidth: () => {\n let width = 0\n\n instance.getVisibleLeafColumns().forEach(column => {\n width += column.getWidth() ?? 0\n })\n\n return width\n },\n }\n}\n\nexport function buildHeaderGroups<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n allColumns: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n columnsToGroup: Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[],\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n headerFamily?: 'center' | 'left' | 'right'\n) {\n // Find the max depth of the columns:\n // build the leaf column row\n // build each buffer row going up\n // placeholder for non-existent level\n // real column for existing level\n\n let maxDepth = 0\n\n const findMaxDepth = (\n columns: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n depth = 1\n ) => {\n maxDepth = Math.max(maxDepth, depth)\n\n columns\n .filter(column => column.getIsVisible())\n .forEach(column => {\n if (column.columns?.length) {\n findMaxDepth(column.columns, depth + 1)\n }\n }, 0)\n }\n\n findMaxDepth(allColumns)\n\n let headerGroups: HeaderGroup<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] = []\n\n const createHeaderGroup = (\n headersToGroup: Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[],\n depth: number\n ) => {\n // The header group we are creating\n const headerGroup: HeaderGroup<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n > = {\n depth,\n id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n headers: [],\n getHeaderGroupProps: getterValue =>\n instance.getHeaderGroupProps(`${depth}`, getterValue)!,\n getFooterGroupProps: getterValue =>\n instance.getFooterGroupProps(`${depth}`, getterValue)!,\n }\n\n // The parent columns we're going to scan next\n const parentHeaders: Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] = []\n\n // Scan each column for parents\n headersToGroup.forEach(headerToGroup => {\n // What is the latest (last) parent column?\n\n const latestParentHeader = [...parentHeaders].reverse()[0]\n\n const isLeafHeader = headerToGroup.column.depth === headerGroup.depth\n\n let column: Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n let isPlaceholder = false\n\n if (isLeafHeader && headerToGroup.column.parent) {\n // The parent header is new\n column = headerToGroup.column.parent\n } else {\n // The parent header is repeated\n column = headerToGroup.column\n isPlaceholder = true\n }\n\n const header = instance.createHeader(column, {\n id: [headerFamily, depth, column.id, headerToGroup?.id]\n .filter(Boolean)\n .join('_'),\n isPlaceholder,\n placeholderId: isPlaceholder\n ? `${parentHeaders.filter(d => d.column === column).length}`\n : undefined,\n depth,\n })\n\n if (!latestParentHeader || latestParentHeader.column !== header.column) {\n header.subHeaders.push(headerToGroup)\n parentHeaders.push(header)\n } else {\n latestParentHeader.subHeaders.push(headerToGroup)\n }\n\n // if (!headerToGroup.isPlaceholder) {\n // headerToGroup.column.header = headerToGroup;\n // }\n\n headerGroup.headers.push(headerToGroup)\n })\n\n headerGroups.push(headerGroup)\n\n if (depth > 0) {\n createHeaderGroup(parentHeaders, depth - 1)\n }\n }\n\n const bottomHeaders = columnsToGroup.map(column =>\n instance.createHeader(column, {\n depth: maxDepth,\n })\n )\n\n createHeaderGroup(bottomHeaders, maxDepth - 1)\n\n headerGroups.reverse()\n\n // headerGroups = headerGroups.filter(headerGroup => {\n // return !headerGroup.headers.every(header => header.isPlaceholder)\n // })\n\n const recurseHeadersForSpans = (\n headers: Header<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n ) => {\n const filteredHeaders = headers.filter(header =>\n header.column.getIsVisible()\n )\n\n return filteredHeaders.map(header => {\n let colSpan = 0\n let rowSpan = 0\n let childRowSpans = [0]\n\n if (header.subHeaders && header.subHeaders.length) {\n childRowSpans = []\n\n recurseHeadersForSpans(header.subHeaders).forEach(\n ({ colSpan: childColSpan, rowSpan: childRowSpan }) => {\n colSpan += childColSpan\n childRowSpans.push(childRowSpan)\n }\n )\n } else {\n colSpan = 1\n }\n\n const minChildRowSpan = Math.min(...childRowSpans)\n rowSpan = rowSpan + minChildRowSpan\n\n header.colSpan = colSpan > 0 ? colSpan : undefined\n header.rowSpan = rowSpan > 0 ? rowSpan : undefined\n\n return { colSpan, rowSpan }\n })\n }\n\n recurseHeadersForSpans(headerGroups[0]?.headers ?? [])\n\n return headerGroups\n}\n","import { AccessorFn, Row } from './types'\n\nexport const filterTypes = {\n includesString,\n includesStringSensitive,\n equalsString,\n equalsStringSensitive,\n arrIncludes,\n arrIncludesAll,\n equals,\n weakEquals,\n betweenNumberRange,\n}\n\nexport type BuiltInFilterType = keyof typeof filterTypes\n\nfunction includesString<\n TData,\n TValue,\n TAccessor extends AccessorFn<TData>,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n columnIds: string[],\n filterValue: unknown\n) {\n const search = String(filterValue).toLowerCase()\n\n rows = rows.filter(row => {\n return columnIds.some(id => {\n return String(row.values[id]).toLowerCase().includes(search)\n })\n })\n return rows\n}\n\nincludesString.autoRemove = (val: any) => testFalsey(val)\n\nfunction includesStringSensitive<\n TData,\n TValue,\n TAccessor extends AccessorFn<TData>,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n columnIds: string[],\n filterValue: unknown\n) {\n const search = String(filterValue)\n\n rows = rows.filter(row => {\n return columnIds.some(id => {\n return String(row.values[id]).includes(search)\n })\n })\n return rows\n}\n\nincludesStringSensitive.autoRemove = (val: any) => testFalsey(val)\n\nfunction equalsString<\n TData,\n TValue,\n TAccessor extends AccessorFn<TData>,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n columnIds: string[],\n filterValue: unknown\n) {\n const search = String(filterValue).toLowerCase()\n\n return rows.filter(row => {\n return columnIds.some(id => {\n const rowValue = row.values[id]\n return rowValue !== undefined\n ? String(rowValue).toLowerCase() === search\n : true\n })\n })\n}\n\nequalsString.autoRemove = (val: any) => testFalsey(val)\n\nfunction equalsStringSensitive<\n TData,\n TValue,\n TAccessor extends AccessorFn<TData>,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n columnIds: string[],\n filterValue: unknown\n) {\n const search = String(filterValue)\n return rows.filter(row => {\n return columnIds.some(id => {\n const rowValue = row.values[id]\n return rowValue !== undefined ? String(rowValue) === search : true\n })\n })\n}\n\nequalsStringSensitive.autoRemove = (val: any) => testFalsey(val)\n\nfunction arrIncludes<\n TData,\n TValue,\n TAccessor extends AccessorFn<TData>,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n columnIds: string[],\n filterValue: unknown\n) {\n return rows.filter(row => {\n return columnIds.some(id => {\n const rowValue = row.values[id]\n return rowValue.includes(filterValue)\n })\n })\n}\n\narrIncludes.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nfunction arrIncludesAll<\n TData,\n TValue,\n TAccessor extends AccessorFn<TData>,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n columnIds: string[],\n filterValue: unknown[]\n) {\n return rows.filter(row => {\n return columnIds.some(id => {\n const rowValue = row.values[id]\n return (\n rowValue &&\n rowValue.length &&\n filterValue.every(val => rowValue.includes(val))\n )\n })\n })\n}\n\narrIncludesAll.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nfunction equals<\n TData,\n TValue,\n TAccessor extends AccessorFn<TData>,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n columnIds: string[],\n filterValue: unknown\n) {\n return rows.filter(row => {\n return columnIds.some(id => {\n const rowValue = row.values[id]\n return rowValue === filterValue\n })\n })\n}\n\nequals.autoRemove = (val: any) => testFalsey(val)\n\nfunction weakEquals<\n TData,\n TValue,\n TAccessor extends AccessorFn<TData>,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n columnIds: string[],\n filterValue: unknown\n) {\n return rows.filter(row => {\n return columnIds.some(id => {\n const rowValue = row.values[id]\n // eslint-disable-next-line eqeqeq\n return rowValue == filterValue\n })\n })\n}\n\nweakEquals.autoRemove = (val: any) => testFalsey(val)\n\nfunction betweenNumberRange<\n TData,\n TValue,\n TAccessor extends AccessorFn<TData>,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n columnIds: string[],\n filterValue: [unknown, unknown]\n) {\n let [unsafeMin, unsafeMax] = filterValue || []\n\n let parsedMin =\n typeof unsafeMin !== 'number' ? parseFloat(unsafeMin as string) : unsafeMin\n let parsedMax =\n typeof unsafeMax !== 'number' ? parseFloat(unsafeMax as string) : unsafeMax\n\n let min =\n unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax\n\n if (min > max) {\n const temp = min\n min = max\n max = temp\n }\n\n return rows.filter(row => {\n return columnIds.some(id => {\n const rowValue = row.values[id]\n return rowValue >= min && rowValue <= max\n })\n })\n}\n\nbetweenNumberRange.autoRemove = (val: any) =>\n testFalsey(val) || (testFalsey(val[0]) && testFalsey(val[1]))\n\n// Utils\n\nfunction testFalsey(val: any) {\n return val === undefined || val === null || val === ''\n}\n","import { RowModel } from '..'\nimport { BuiltInFilterType, filterTypes } from '../filterTypes'\nimport {\n Column,\n Listener,\n OnChangeFn,\n ReactTable,\n Row,\n Updater,\n} from '../types'\nimport { functionalUpdate, isFunction, makeStateUpdater, memo } from '../utils'\n\nexport type ColumnFilter = {\n id: string\n value: unknown\n}\n\nexport type ColumnFiltersState = ColumnFilter[]\n\nexport type FilterFn<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> =\n {\n (\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n columnIds: string[],\n filterValue: any\n ): any\n autoRemove?: ColumnFilterAutoRemoveTestFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n }\n\nexport type ColumnFilterAutoRemoveTestFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = (\n value: unknown,\n column?: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n) => boolean\n\nexport type CustomFilterTypes<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = Record<\n string,\n FilterFn<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n>\n\nexport type FiltersTableState = {\n columnFilters: ColumnFiltersState\n globalFilter: any\n}\n\nexport type FilterType<TFilterFns> =\n | 'auto'\n | BuiltInFilterType\n | keyof TFilterFns\n | FilterFn<unknown, unknown, TFilterFns, any, any>\n\nexport type FiltersColumnDef<TFilterFns> = {\n filterType?: FilterType<TFilterFns>\n enableAllFilters?: boolean\n enableColumnFilter?: boolean\n enableGlobalFilter?: boolean\n defaultCanFilter?: boolean\n defaultCanColumnFilter?: boolean\n defaultCanGlobalFilter?: boolean\n}\n\nexport type FiltersColumn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n filterType: FilterType<TFilterFns>\n getCanColumnFilter: () => boolean\n getCanGlobalFilter: () => boolean\n getColumnFilterIndex: () => number\n getIsColumnFiltered: () => boolean\n getColumnFilterValue: () => unknown\n setColumnFilterValue: (value: any) => void\n getPreFilteredRows: () =>\n | Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n | undefined\n getPreFilteredUniqueValues: () => Map<any, number>\n getPreFilteredMinMaxValues: () => [any, any]\n}\n\nexport type FiltersOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n filterFromChildrenUp?: boolean\n filterTypes?: TFilterFns\n enableFilters?: boolean\n // Column\n onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>\n autoResetColumnFilters?: boolean\n enableColumnFilters?: boolean\n columnFilterRowsFn?: (\n instance: ReactTable<any, any, any, any, any>,\n coreRowModel: RowModel<any, any, any, any, any>\n ) => RowModel<any, any, any, any, any>\n // Global\n globalFilterType?: FilterType<TFilterFns>\n onGlobalFilterChange?: OnChangeFn<any>\n enableGlobalFilters?: boolean\n autoResetGlobalFilter?: boolean\n enableGlobalFilter?: boolean\n globalFilterRowsFn?: (\n instance: ReactTable<any, any, any, any, any>,\n rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n getColumnCanGlobalFilterFn?: (\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => boolean\n}\n\nexport type FiltersInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n _notifyFiltersReset: () => void\n getColumnAutoFilterFn: (\n columnId: string\n ) => FilterFn<any, any, any, any, any> | undefined\n\n getColumnFilterFn: (\n columnId: string\n ) => FilterFn<any, any, any, any, any> | undefined\n\n setColumnFilters: (updater: Updater<ColumnFiltersState>) => void\n setColumnFilterValue: (columnId: string, value: any) => void\n resetColumnFilters: () => void\n getColumnCanColumnFilter: (columnId: string) => boolean\n getColumnCanGlobalFilterFn?: (\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => boolean\n\n getColumnIsFiltered: (columnId: string) => boolean\n getColumnFilterValue: (columnId: string) => unknown\n getColumnFilterIndex: (columnId: string) => number\n getColumnFilteredRowModel: () => RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n getPreFilteredRowModel: () => RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n getPreFilteredRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPreFilteredFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPreFilteredRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n getPreColumnFilteredRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPreColumnFilteredFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPreColumnFilteredRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n getColumnFilteredRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getColumnFilteredFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getColumnFilteredRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n\n // Global\n setGlobalFilter: (updater: Updater<any>) => void\n resetGlobalFilter: () => void\n getGlobalAutoFilterFn: () => FilterFn<any, any, any, any, any> | undefined\n getGlobalFilterFn: () => FilterFn<any, any, any, any, any> | undefined\n getColumnCanGlobalFilter: (columnId: string) => boolean\n getGlobalFilteredRowModel: () => RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n getPreGlobalFilteredRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPreGlobalFilteredFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPreGlobalFilteredRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n getGlobalFilteredRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getGlobalFilteredFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getGlobalFilteredRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n}\n\n//\n\nexport function getDefaultColumn<TFilterFns>(): FiltersColumnDef<TFilterFns> {\n return {\n filterType: 'auto',\n }\n}\n\nexport function getInitialState(): FiltersTableState {\n return {\n columnFilters: [],\n globalFilter: undefined,\n }\n}\n\nexport function getDefaultOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): FiltersOptions<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n return {\n onColumnFiltersChange: makeStateUpdater('columnFilters', instance),\n onGlobalFilterChange: makeStateUpdater('globalFilter', instance),\n autoResetColumnFilters: true,\n filterFromChildrenUp: true,\n autoResetGlobalFilter: true,\n globalFilterType: 'auto',\n getColumnCanGlobalFilterFn: column => {\n const value = instance.getCoreFlatRows()[0]?.getAllCellsByColumnId()[\n column.id\n ]?.value\n\n return typeof value === 'string'\n },\n }\n}\n\nexport function createColumn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): FiltersColumn<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n const getFacetInfo = memo(\n () => [column.getPreFilteredRows()],\n (rows = []) => {\n let preFilteredUniqueValues = new Map<any, number>()\n\n let preFilteredMinMaxValues: [any, any] = [\n rows[0]?.values[column.id] ?? null,\n rows[0]?.values[column.id] ?? null,\n ]\n\n for (let i = 0; i < rows.length; i++) {\n const value = rows[i]?.values[column.id]\n\n if (preFilteredUniqueValues.has(value)) {\n preFilteredUniqueValues.set(\n value,\n (preFilteredUniqueValues.get(value) ?? 0) + 1\n )\n } else {\n preFilteredUniqueValues.set(value, 1)\n }\n\n if (value < preFilteredMinMaxValues[0]) {\n preFilteredMinMaxValues[0] = value\n } else if (value > preFilteredMinMaxValues[1]) {\n preFilteredMinMaxValues[1] = value\n }\n }\n\n return {\n preFilteredUniqueValues,\n preFilteredMinMaxValues,\n }\n },\n { key: 'column.getFacetInfo', debug: instance.options.debug }\n )\n\n return {\n filterType: column.filterType,\n getCanColumnFilter: () => instance.getColumnCanColumnFilter(column.id),\n getCanGlobalFilter: () => instance.getColumnCanGlobalFilter(column.id),\n getColumnFilterIndex: () => instance.getColumnFilterIndex(column.id),\n getIsColumnFiltered: () => instance.getColumnIsFiltered(column.id),\n getColumnFilterValue: () => instance.getColumnFilterValue(column.id),\n setColumnFilterValue: val => instance.setColumnFilterValue(column.id, val),\n getPreFilteredUniqueValues: () => getFacetInfo().preFilteredUniqueValues,\n getPreFilteredMinMaxValues: () => getFacetInfo().preFilteredMinMaxValues,\n getPreFilteredRows: () => undefined,\n }\n}\n\nexport function getInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): FiltersInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n let registered = false\n\n return {\n _notifyFiltersReset: () => {\n if (!registered) {\n registered = true\n return\n }\n\n if (instance.options.autoResetAll === false) {\n return\n }\n\n if (instance.options.autoResetAll === true) {\n instance.resetSorting()\n } else {\n if (instance.options.autoResetColumnFilters) {\n instance.resetColumnFilters()\n }\n if (instance.options.autoResetGlobalFilter) {\n instance.resetGlobalFilter()\n }\n }\n },\n getColumnAutoFilterFn: columnId => {\n const firstRow = instance.getCoreFlatRows()[0]\n\n const value = firstRow?.values[columnId]\n\n if (typeof value === 'string') {\n return filterTypes.includesString\n }\n\n if (typeof value === 'number') {\n return filterTypes.betweenNumberRange\n }\n\n if (value !== null && typeof value === 'object') {\n return filterTypes.equals\n }\n\n if (Array.isArray(value)) {\n return filterTypes.arrIncludes\n }\n\n return filterTypes.weakEquals\n },\n getGlobalAutoFilterFn: () => {\n return filterTypes.includesString\n },\n getColumnFilterFn: columnId => {\n const column = instance.getColumn(columnId)\n const userFilterTypes = instance.options.filterTypes\n\n if (!column) {\n throw new Error()\n }\n\n return isFunction(column.filterType)\n ? column.filterType\n : column.filterType === 'auto'\n ? instance.getColumnAutoFilterFn(columnId)\n : (userFilterTypes as Record<string, any>)?.[\n column.filterType as string\n ] ??\n (filterTypes[column.filterType as BuiltInFilterType] as FilterFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >)\n },\n\n getGlobalFilterFn: () => {\n const { filterTypes: userFilterTypes, globalFilterType } =\n instance.options\n\n return isFunction(globalFilterType)\n ? globalFilterType\n : globalFilterType === 'auto'\n ? instance.getGlobalAutoFilterFn()\n : (userFilterTypes as Record<string, any>)?.[\n globalFilterType as string\n ] ??\n (filterTypes[globalFilterType as BuiltInFilterType] as FilterFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >)\n },\n\n setColumnFilters: (updater: Updater<ColumnFiltersState>) => {\n const leafColumns = instance.getAllLeafColumns()\n\n const updateFn = (old: ColumnFiltersState) => {\n return functionalUpdate(updater, old)?.filter(filter => {\n const column = leafColumns.find(d => d.id === filter.id)\n\n if (column) {\n const filterFn = instance.getColumnFilterFn(column.id)\n\n if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n return false\n }\n }\n\n return true\n })\n }\n\n instance.options.onColumnFiltersChange?.(\n updateFn,\n updateFn(instance.getState().columnFilters)\n )\n },\n\n setGlobalFilter: updater => {\n instance.options.onGlobalFilterChange?.(\n updater,\n functionalUpdate(updater, instance.getState().globalFilter)\n )\n },\n\n resetGlobalFilter: () => {\n instance.setGlobalFilter(undefined)\n },\n\n getColumnCanColumnFilter: columnId => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n return (\n column.enableAllFilters ??\n column.enableColumnFilter ??\n instance.options.enableFilters ??\n instance.options.enableColumnFilters ??\n column.defaultCanFilter ??\n column.defaultCanColumnFilter ??\n !!column.accessorFn\n )\n },\n\n getColumnCanGlobalFilter: columnId => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n return (\n ((instance.options.enableFilters ??\n instance.options.enableGlobalFilter ??\n column.enableAllFilters ??\n column.enableGlobalFilter ??\n column.defaultCanFilter ??\n column.defaultCanGlobalFilter ??\n !!column.accessorFn) &&\n instance.options.getColumnCanGlobalFilterFn?.(column)) ??\n true\n )\n },\n\n getColumnIsFiltered: columnId =>\n instance.getColumnFilterIndex(columnId) > -1,\n\n getColumnFilterValue: columnId =>\n instance.getState().columnFilters?.find(d => d.id === columnId)?.value,\n\n getColumnFilterIndex: columnId =>\n instance.getState().columnFilters?.findIndex(d => d.id === columnId) ??\n -1,\n\n setColumnFilterValue: (columnId, value) => {\n if (!columnId) return\n\n instance.setColumnFilters(old => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `React-Table: Could not find a column with id: ${columnId}`\n )\n }\n throw new Error()\n }\n\n const filterFn = instance.getColumnFilterFn(column.id)\n const previousfilter = old?.find(d => d.id === columnId)\n\n const newFilter = functionalUpdate(\n value,\n previousfilter ? previousfilter.value : undefined\n )\n\n //\n if (\n shouldAutoRemoveFilter(\n filterFn as FilterFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >,\n newFilter,\n column\n )\n ) {\n return old?.filter(d => d.id !== columnId) ?? []\n }\n\n const newFilterObj = { id: columnId, value: newFilter }\n\n if (previousfilter) {\n return (\n old?.map(d => {\n if (d.id === columnId) {\n return newFilterObj\n }\n return d\n }) ?? []\n )\n }\n\n if (old?.length) {\n return [...old, newFilterObj]\n }\n\n return [newFilterObj]\n })\n },\n\n resetColumnFilters: () => {\n instance.setColumnFilters(instance.initialState?.columnFilters ?? [])\n },\n\n getColumnFilteredRowModel: memo(\n () => [\n instance.getState().columnFilters,\n instance.getCoreRowModel(),\n instance.options.columnFilterRowsFn,\n ],\n (columnFilters, rowModel, columnFiltersFn) => {\n const columnFilteredRowModel = (() => {\n if (!columnFilters?.length || !columnFiltersFn) {\n return rowModel\n }\n\n if (process.env.NODE_ENV !== 'production' && instance.options.debug)\n console.info('Column Filtering...')\n\n return columnFiltersFn(instance as any, rowModel)\n })()\n\n // Now that each filtered column has it's partially filtered rows,\n // lets assign the final filtered rows to all of the other columns\n const nonFilteredColumns = instance\n .getAllLeafColumns()\n .filter(\n column =>\n !instance.getState().columnFilters?.find(d => d.id === column.id)\n )\n\n // This essentially enables faceted filter options to be built easily\n // using every column's preFilteredRows value\n\n nonFilteredColumns.forEach(column => {\n column.getPreFilteredRows = () => columnFilteredRowModel.rows\n })\n\n return columnFilteredRowModel\n },\n { key: 'getColumnFilteredRowModel', debug: instance.options.debug }\n ),\n\n // These might be easier to remember than \"column\" filtered rows\n getPreFilteredRowModel: () => instance.getCoreRowModel(),\n getPreFilteredRows: () => instance.getCoreRowModel().rows,\n getPreFilteredFlatRows: () => instance.getCoreRowModel().flatRows,\n getPreFilteredRowsById: () => instance.getCoreRowModel().rowsById,\n\n // Pre Column Filter\n getPreColumnFilteredRows: () => instance.getCoreRowModel().rows,\n getPreColumnFilteredFlatRows: () => instance.getCoreRowModel().flatRows,\n getPreColumnFilteredRowsById: () => instance.getCoreRowModel().rowsById,\n getColumnFilteredRows: () => instance.getColumnFilteredRowModel().rows,\n\n getColumnFilteredFlatRows: () =>\n instance.getColumnFilteredRowModel().flatRows,\n getColumnFilteredRowsById: () =>\n instance.getColumnFilteredRowModel().rowsById,\n getGlobalFilteredRowModel: memo(\n () => [\n instance.getState().globalFilter,\n instance.getColumnFilteredRowModel(),\n instance.options.globalFilterRowsFn,\n ],\n (globalFilterValue, columnFilteredRowModel, globalFiltersFn) => {\n const globalFilteredRowModel = (() => {\n if (!globalFiltersFn || !globalFilterValue) {\n return columnFilteredRowModel\n }\n\n if (process.env.NODE_ENV !== 'production' && instance.options.debug)\n console.info('Global Filtering...')\n\n return globalFiltersFn(\n instance as ReactTable<any, any, any, any, any>,\n columnFilteredRowModel\n )\n })()\n\n // Now that each filtered column has it's partially filtered rows,\n // lets assign the final filtered rows to all of the other columns\n const nonFilteredColumns = instance\n .getAllLeafColumns()\n .filter(\n column =>\n !instance.getState().columnFilters?.find(d => d.id === column.id)\n )\n\n // This essentially enables faceted filter options to be built easily\n // using every column's preFilteredRows value\n\n nonFilteredColumns.forEach(column => {\n column.getPreFilteredRows = () => globalFilteredRowModel.rows\n })\n\n return globalFilteredRowModel\n },\n {\n key: 'getGlobalFilteredRowModel',\n debug: instance.options.debug,\n onChange: () => {\n instance._notifySortingReset()\n },\n }\n ),\n\n getPreGlobalFilteredRows: () => instance.getColumnFilteredRowModel().rows,\n getPreGlobalFilteredFlatRows: () =>\n instance.getColumnFilteredRowModel().flatRows,\n getPreGlobalFilteredRowsById: () =>\n instance.getColumnFilteredRowModel().rowsById,\n getGlobalFilteredRows: () => instance.getGlobalFilteredRowModel().rows,\n getGlobalFilteredFlatRows: () =>\n instance.getGlobalFilteredRowModel().flatRows,\n getGlobalFilteredRowsById: () =>\n instance.getGlobalFilteredRowModel().rowsById,\n }\n}\n\nexport function shouldAutoRemoveFilter(\n filterFn?: FilterFn<any, any, any, any, any>,\n value?: any,\n column?: Column<any, any, any, any, any>\n) {\n return (\n (filterFn && filterFn.autoRemove\n ? filterFn.autoRemove(value, column)\n : false) ||\n typeof value === 'undefined' ||\n (typeof value === 'string' && !value)\n )\n}\n","import { Row } from './types'\n\nexport const reSplitAlphaNumeric = /([0-9]+)/gm\n\nexport const sortTypes = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic,\n}\n\nexport type BuiltInSortType = keyof typeof sortTypes\n\nfunction alphanumeric<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>(\n rowA: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n rowB: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n columnId: string\n) {\n return compareAlphanumeric(\n toString(rowA.values[columnId]).toLowerCase(),\n toString(rowB.values[columnId]).toLowerCase()\n )\n}\n\nfunction alphanumericCaseSensitive<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n rowA: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n rowB: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n columnId: string\n) {\n return compareAlphanumeric(\n toString(rowA.values[columnId]),\n toString(rowB.values[columnId])\n )\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr: string, bStr: string) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean)\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean)\n\n // While\n while (a.length && b.length) {\n const aa = a.shift()!\n const bb = b.shift()!\n\n const an = parseInt(aa, 10)\n const bn = parseInt(bb, 10)\n\n const combo = [an, bn].sort()\n\n // Both are string\n if (isNaN(combo[0]!)) {\n if (aa > bb) {\n return 1\n }\n if (bb > aa) {\n return -1\n }\n continue\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1]!)) {\n return isNaN(an) ? -1 : 1\n }\n\n // Both are numbers\n if (an > bn) {\n return 1\n }\n if (bn > an) {\n return -1\n }\n }\n\n return a.length - b.length\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nfunction text<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>(\n rowA: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n rowB: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n columnId: string\n) {\n return compareBasic(\n toString(rowA.values[columnId]).toLowerCase(),\n toString(rowB.values[columnId]).toLowerCase()\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nfunction textCaseSensitive<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n rowA: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n rowB: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n columnId: string\n) {\n return compareBasic(\n toString(rowA.values[columnId]),\n toString(rowB.values[columnId])\n )\n}\n\nfunction datetime<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>(\n rowA: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n rowB: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n columnId: string\n) {\n return compareBasic(\n (rowA.values[columnId] as Date).getTime(),\n (rowB.values[columnId] as Date).getTime()\n )\n}\n\nfunction basic<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>(\n rowA: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n rowB: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n columnId: string\n) {\n return compareBasic(rowA.values[columnId], rowB.values[columnId])\n}\n\n// Utils\n\nfunction compareBasic(a: any, b: any) {\n return a === b ? 0 : a > b ? 1 : -1\n}\n\nfunction toString(a: any) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return ''\n }\n return String(a)\n }\n if (typeof a === 'string') {\n return a\n }\n return ''\n}\n","import { MouseEvent, TouchEvent } from 'react'\nimport { RowModel } from '..'\nimport { BuiltInSortType, reSplitAlphaNumeric, sortTypes } from '../sortTypes'\n\nimport {\n Column,\n Getter,\n Header,\n OnChangeFn,\n PropGetterValue,\n ReactTable,\n Row,\n Updater,\n} from '../types'\n\nimport {\n functionalUpdate,\n isFunction,\n makeStateUpdater,\n memo,\n propGetter,\n} from '../utils'\n\nexport type SortDirection = 'asc' | 'desc'\n\nexport type ColumnSort = {\n id: string\n desc: boolean\n}\n\nexport type SortingState = ColumnSort[]\n\nexport type SortingFn<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> =\n {\n (\n rowA: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n rowB: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n columnId: string\n ): number\n }\n\nexport type SortingTableState = {\n sorting: SortingState\n}\n\nexport type SortType<TSortingFns> =\n | 'auto'\n | BuiltInSortType\n | keyof TSortingFns\n | SortingFn<any, any, any, TSortingFns, any>\n\nexport type SortingColumnDef<TFilterFns> = {\n sortType?: SortType<TFilterFns>\n sortDescFirst?: boolean\n enableSorting?: boolean\n enableMultiSort?: boolean\n defaultCanSort?: boolean\n invertSorting?: boolean\n sortUndefined?: false | -1 | 1\n}\n\nexport type SortingColumn<\n _TData,\n _TValue,\n TFilterFns,\n _TSortingFns,\n _TAggregationFns\n> = {\n sortType: SortType<TFilterFns>\n getCanSort: () => boolean\n getCanMultiSort: () => boolean\n getSortIndex: () => number\n getIsSorted: () => false | SortDirection\n toggleSorting: (desc?: boolean, isMulti?: boolean) => void\n getToggleSortingProps: <TGetter extends Getter<ToggleSortingProps>>(\n userProps?: TGetter\n ) => undefined | PropGetterValue<ToggleSortingProps, TGetter>\n}\n\nexport type SortingOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n sortTypes?: TSortingFns\n onSortingChange?: OnChangeFn<SortingState>\n autoResetSorting?: boolean\n enableSorting?: boolean\n enableSortingRemoval?: boolean\n enableMultiRemove?: boolean\n enableMultiSort?: boolean\n sortDescFirst?: boolean\n sortRowsFn?: (\n instance: ReactTable<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >,\n rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n maxMultiSortColCount?: number\n isMultiSortEvent?: (e: MouseEvent | TouchEvent) => boolean\n}\n\nexport type ToggleSortingProps = {\n title?: string\n onClick?: (event: MouseEvent | TouchEvent) => void\n}\n\nexport type SortingInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n _notifySortingReset: () => void\n getColumnAutoSortingFn: (\n columnId: string\n ) => SortingFn<any, any, any, any, any> | undefined\n getColumnAutoSortDir: (columnId: string) => SortDirection\n\n getColumnSortingFn: (\n columnId: string\n ) => SortingFn<any, any, any, any, any> | undefined\n\n setSorting: (updater: Updater<SortingState>) => void\n toggleColumnSorting: (\n columnId: string,\n desc?: boolean,\n multi?: boolean\n ) => void\n resetSorting: () => void\n getColumnCanSort: (columnId: string) => boolean\n getColumnCanMultiSort: (columnId: string) => boolean\n getColumnIsSorted: (columnId: string) => false | 'asc' | 'desc'\n getColumnSortIndex: (columnId: string) => number\n getToggleSortingProps: <TGetter extends Getter<ToggleSortingProps>>(\n columnId: string,\n userProps?: TGetter\n ) => undefined | PropGetterValue<ToggleSortingProps, TGetter>\n getSortedRowModel: () => RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n getPreSortedRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPreSortedFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPreSortedRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n getSortedRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getSortedFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getSortedRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n}\n\n//\n\nexport function getDefaultColumn<TFilterFns>(): SortingColumnDef<TFilterFns> {\n return {\n sortType: 'auto',\n }\n}\n\nexport function getInitialState(): SortingTableState {\n return {\n sorting: [],\n }\n}\n\nexport function getDefaultOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): SortingOptions<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n return {\n onSortingChange: makeStateUpdater('sorting', instance),\n autoResetSorting: true,\n isMultiSortEvent: (e: MouseEvent | TouchEvent) => {\n return e.shiftKey\n },\n }\n}\n\nexport function createColumn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): SortingColumn<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n return {\n sortType: column.sortType,\n getCanSort: () => instance.getColumnCanSort(column.id),\n getCanMultiSort: () => instance.getColumnCanMultiSort(column.id),\n getSortIndex: () => instance.getColumnSortIndex(column.id),\n getIsSorted: () => instance.getColumnIsSorted(column.id),\n toggleSorting: (desc, isMulti) =>\n instance.toggleColumnSorting(column.id, desc, isMulti),\n getToggleSortingProps: userProps =>\n instance.getToggleSortingProps(column.id, userProps),\n }\n}\n\nexport function getInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): SortingInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n let registered = false\n\n return {\n _notifySortingReset: () => {\n if (!registered) {\n registered = true\n return\n }\n\n if (instance.options.autoResetAll === false) {\n return\n }\n\n if (\n instance.options.autoResetAll === true ||\n instance.options.autoResetSorting\n ) {\n instance.resetSorting()\n }\n },\n getColumnAutoSortingFn: columnId => {\n const firstRows = instance.getGlobalFilteredRowModel().flatRows.slice(100)\n\n let isString = false\n\n for (const row of firstRows) {\n const value = row?.values[columnId]\n\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return sortTypes.datetime\n }\n\n if (typeof value === 'string') {\n isString = true\n\n if (value.split(reSplitAlphaNumeric).length > 1) {\n return sortTypes.alphanumeric\n }\n }\n }\n\n if (isString) {\n return sortTypes.text\n }\n\n return sortTypes.basic\n },\n getColumnAutoSortDir: columnId => {\n const firstRow = instance.getGlobalFilteredRowModel().flatRows[0]\n\n const value = firstRow?.values[columnId]\n\n if (typeof value === 'string') {\n return 'asc'\n }\n\n return 'desc'\n },\n getColumnSortingFn: columnId => {\n const column = instance.getColumn(columnId)\n const userSortTypes = instance.options.sortTypes\n\n if (!column) {\n throw new Error()\n }\n\n return isFunction(column.sortType)\n ? column.sortType\n : column.sortType === 'auto'\n ? instance.getColumnAutoSortingFn(columnId)\n : (userSortTypes as Record<string, any>)?.[column.sortType as string] ??\n (sortTypes[column.sortType as BuiltInSortType] as SortingFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >)\n },\n\n setSorting: updater =>\n instance.options.onSortingChange?.(\n updater,\n functionalUpdate(updater, instance.getState().sorting)\n ),\n\n toggleColumnSorting: (columnId, desc, multi) => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // instance.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n instance.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old?.find(d => d.id === columnId)\n const existingIndex = old?.findIndex(d => d.id === columnId)\n const hasDescDefined = typeof desc !== 'undefined' && desc !== null\n\n let newSorting: SortingState = []\n\n // What should we do with this sort action?\n let sortAction\n\n if (column.getCanMultiSort() && multi) {\n if (existingSorting) {\n sortAction = 'toggle'\n } else {\n sortAction = 'add'\n }\n } else {\n // Normal mode\n if (old?.length && existingIndex !== old.length - 1) {\n sortAction = 'replace'\n } else if (existingSorting) {\n sortAction = 'toggle'\n } else {\n sortAction = 'replace'\n }\n }\n\n const sortDescFirst =\n column.sortDescFirst ??\n instance.options.sortDescFirst ??\n instance.getColumnAutoSortDir(columnId) === 'desc'\n\n // Handle toggle states that will remove the sorting\n if (\n sortAction === 'toggle' && // Must be toggling\n (instance.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n !hasDescDefined && // Must not be setting desc\n (multi ? instance.options.enableMultiRemove ?? true : true) && // If multi, don't allow if enableMultiRemove\n (existingSorting?.desc // Finally, detect if it should indeed be removed\n ? !sortDescFirst\n : sortDescFirst)\n ) {\n sortAction = 'remove'\n }\n\n if (sortAction === 'replace') {\n newSorting = [\n {\n id: columnId,\n desc: hasDescDefined ? desc! : !!sortDescFirst,\n },\n ]\n } else if (sortAction === 'add' && old?.length) {\n newSorting = [\n ...old,\n {\n id: columnId,\n desc: hasDescDefined ? desc! : !!sortDescFirst,\n },\n ]\n // Take latest n columns\n newSorting.splice(\n 0,\n newSorting.length -\n (instance.options.maxMultiSortColCount ?? Number.MAX_SAFE_INTEGER)\n )\n } else if (sortAction === 'toggle' && old?.length) {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === columnId) {\n return {\n ...d,\n desc: hasDescDefined ? desc! : !existingSorting?.desc,\n }\n }\n return d\n })\n } else if (sortAction === 'remove' && old?.length) {\n newSorting = old.filter(d => d.id !== columnId)\n }\n\n return newSorting\n })\n },\n\n getColumnCanSort: columnId => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n return (\n column.enableSorting ??\n instance.options.enableSorting ??\n column.defaultCanSort ??\n !!column.accessorFn\n // (!!column.accessorFn ||\n // column.columns?.some(c => c.id && instance.getColumnCanSort(c.id))) ??\n // false\n )\n },\n\n getColumnCanMultiSort: columnId => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n return (\n column.enableMultiSort ??\n instance.options.enableMultiSort ??\n !!column.accessorFn\n )\n },\n\n getColumnIsSorted: columnId => {\n const columnSort = instance\n .getState()\n .sorting?.find(d => d.id === columnId)\n\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n },\n\n getColumnSortIndex: columnId =>\n instance.getState().sorting?.findIndex(d => d.id === columnId) ?? -1,\n\n resetSorting: () => {\n instance.setSorting(instance.initialState?.sorting ?? [])\n },\n\n getToggleSortingProps: (columnId, userProps) => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n const canSort = column.getCanSort()\n\n const initialProps: ToggleSortingProps = {\n title: canSort ? 'Toggle Sorting' : undefined,\n onClick: canSort\n ? (e: MouseEvent | TouchEvent) => {\n e.persist()\n column.toggleSorting?.(\n undefined,\n column.getCanMultiSort()\n ? instance.options.isMultiSortEvent?.(e)\n : false\n )\n }\n : undefined,\n }\n\n return propGetter(initialProps, userProps)\n },\n\n getSortedRowModel: memo(\n () => [\n instance.getState().sorting,\n instance.getGlobalFilteredRowModel(),\n instance.options.sortRowsFn,\n ],\n (sorting, rowModel, sortingFn) => {\n if (!sortingFn || !sorting?.length) {\n return rowModel\n }\n\n if (process.env.NODE_ENV !== 'production' && instance.options.debug)\n console.info('Sorting...')\n\n return sortingFn(instance, rowModel)\n },\n {\n key: 'getSortedRowModel',\n debug: instance.options.debug,\n onChange: () => instance._notifyGroupingReset(),\n }\n ),\n\n getPreSortedRows: () => instance.getGlobalFilteredRowModel().rows,\n getPreSortedFlatRows: () => instance.getGlobalFilteredRowModel().flatRows,\n getPreSortedRowsById: () => instance.getGlobalFilteredRowModel().rowsById,\n getSortedRows: () => instance.getSortedRowModel().rows,\n getSortedFlatRows: () => instance.getSortedRowModel().flatRows,\n getSortedRowsById: () => instance.getSortedRowModel().rowsById,\n }\n}\n","import { MouseEvent, TouchEvent } from 'react'\nimport { RowModel } from '..'\nimport {\n Getter,\n OnChangeFn,\n PropGetterValue,\n ReactTable,\n Row,\n Updater,\n} from '../types'\nimport { functionalUpdate, makeStateUpdater, memo, propGetter } from '../utils'\n\nexport type ExpandedStateList = Record<string, boolean>\nexport type ExpandedState = true | Record<string, boolean>\nexport type ExpandedTableState = {\n expanded: ExpandedState\n}\n\nexport type ExpandedRow = {\n toggleExpanded: (expanded?: boolean) => void\n getIsExpanded: () => boolean\n getCanExpand: () => boolean\n getToggleExpandedProps: <TGetter extends Getter<ToggleExpandedProps>>(\n userProps?: TGetter\n ) => undefined | PropGetterValue<ToggleExpandedProps, TGetter>\n}\n\nexport type ExpandedOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n onExpandedChange?: OnChangeFn<ExpandedState>\n autoResetExpanded?: boolean\n enableExpanded?: boolean\n expandRowsFn?: (\n instance: ReactTable<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >,\n rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n expandSubRows?: boolean\n defaultCanExpand?: boolean\n getIsRowExpanded?: (\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => boolean\n getRowCanExpand?: (\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => boolean\n paginateExpandedRows?: boolean\n}\n\nexport type ToggleExpandedProps = {\n title?: string\n onClick?: (event: MouseEvent | TouchEvent) => void\n}\n\nexport type ExpandedInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n _notifyExpandedReset: () => void\n setExpanded: (updater: Updater<ExpandedState>) => void\n toggleRowExpanded: (rowId: string, expanded?: boolean) => void\n toggleAllRowsExpanded: (expanded?: boolean) => void\n resetExpanded: () => void\n getRowCanExpand: (rowId: string) => boolean\n getIsRowExpanded: (rowId: string) => boolean\n getToggleExpandedProps: <TGetter extends Getter<ToggleExpandedProps>>(\n rowId: string,\n userProps?: TGetter\n ) => undefined | PropGetterValue<ToggleExpandedProps, TGetter>\n getToggleAllRowsExpandedProps: <TGetter extends Getter<ToggleExpandedProps>>(\n userProps?: TGetter\n ) => undefined | PropGetterValue<ToggleExpandedProps, TGetter>\n getIsAllRowsExpanded: () => boolean\n getExpandedDepth: () => number\n getExpandedRowModel: () => RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n getPreExpandedRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPreExpandedFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPreExpandedRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n getExpandedRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getExpandedFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getExpandedRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n}\n\n//\n\nexport function getInitialState(): ExpandedTableState {\n return {\n expanded: {},\n }\n}\n\nexport function getDefaultOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): ExpandedOptions<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n return {\n onExpandedChange: makeStateUpdater('expanded', instance),\n autoResetExpanded: true,\n getIsRowExpanded: row => !!(row?.original as { expanded?: any }).expanded,\n expandSubRows: true,\n paginateExpandedRows: true,\n }\n}\n\nexport function getInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): ExpandedInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n let registered = false\n\n return {\n _notifyExpandedReset: () => {\n if (!registered) {\n registered = true\n return\n }\n\n if (instance.options.autoResetAll === false) {\n return\n }\n\n if (\n instance.options.autoResetAll === true ||\n instance.options.autoResetExpanded\n ) {\n instance.resetExpanded()\n }\n },\n setExpanded: updater =>\n instance.options.onExpandedChange?.(\n updater,\n functionalUpdate(updater, instance.getState().expanded)\n ),\n toggleRowExpanded: (rowId, expanded) => {\n if (!rowId) return\n\n instance.setExpanded(old => {\n const exists = old === true ? true : !!old?.[rowId]\n\n let oldExpanded: ExpandedStateList = {}\n\n if (old === true) {\n Object.keys(instance.getRowsById()).forEach(rowId => {\n oldExpanded[rowId] = true\n })\n } else {\n oldExpanded = old\n }\n\n expanded = expanded ?? !exists\n\n if (!exists && expanded) {\n return {\n ...oldExpanded,\n [rowId]: true,\n }\n }\n\n if (exists && !expanded) {\n const { [rowId]: _, ...rest } = oldExpanded\n return rest\n }\n\n return old\n })\n },\n toggleAllRowsExpanded: expanded => {\n if (expanded ?? !instance.getIsAllRowsExpanded()) {\n instance.setExpanded(true)\n } else {\n instance.setExpanded({})\n }\n },\n resetExpanded: () => {\n instance.setExpanded(instance.initialState?.expanded ?? {})\n },\n getIsRowExpanded: rowId => {\n const row = instance.getRow(rowId)\n\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[ReactTable] getIsRowExpanded: no row found with id ${rowId}`\n )\n }\n throw new Error()\n }\n\n const expanded = instance.getState().expanded\n\n return !!(\n instance.options.getIsRowExpanded?.(row) ??\n (expanded || expanded?.[rowId])\n )\n },\n getRowCanExpand: rowId => {\n const row = instance.getRow(rowId)\n\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[ReactTable] getRowCanExpand: no row found with id ${rowId}`\n )\n }\n throw new Error()\n }\n\n return (\n instance.options.getRowCanExpand?.(row) ??\n instance.options.enableExpanded ??\n instance.options.defaultCanExpand ??\n !!row.subRows?.length\n )\n },\n getToggleExpandedProps: (rowId, userProps) => {\n const row = instance.getRow(rowId)\n\n if (!row) {\n return\n }\n\n const canExpand = instance.getRowCanExpand(rowId)\n\n const initialProps: ToggleExpandedProps = {\n title: canExpand ? 'Toggle Expanded' : undefined,\n onClick: canExpand\n ? (e: MouseEvent | TouchEvent) => {\n e.persist()\n instance.toggleRowExpanded(rowId)\n }\n : undefined,\n }\n\n return propGetter(initialProps, userProps)\n },\n getToggleAllRowsExpandedProps: userProps => {\n const initialProps: ToggleExpandedProps = {\n title: 'Toggle All Expanded',\n onClick: (e: MouseEvent | TouchEvent) => {\n e.persist()\n instance.toggleAllRowsExpanded()\n },\n }\n\n return propGetter(initialProps, userProps)\n },\n getIsAllRowsExpanded: () => {\n const expanded = instance.getState().expanded\n\n // If expanded is true, save some cycles and return true\n if (expanded === true) {\n return true\n }\n\n // If any row is not expanded, return false\n if (\n Object.keys(instance.getRowsById()).some(\n id => !instance.getIsRowExpanded(id)\n )\n ) {\n return false\n }\n\n // They must all be expanded :shrug:\n return true\n },\n getExpandedDepth: () => {\n let maxDepth = 0\n\n const rowIds =\n instance.getState().expanded === true\n ? Object.keys(instance.getRowsById())\n : Object.keys(instance.getState().expanded)\n\n rowIds.forEach(id => {\n const splitId = id.split('.')\n maxDepth = Math.max(maxDepth, splitId.length)\n })\n\n return maxDepth\n },\n getExpandedRowModel: memo(\n () => [\n instance.getState().expanded,\n instance.getGroupedRowModel(),\n instance.options.expandRowsFn,\n instance.options.paginateExpandedRows,\n ],\n (expanded, rowModel, expandRowsFn, paginateExpandedRows) => {\n if (\n !expandRowsFn ||\n // Do not expand if rows are not included in pagination\n !paginateExpandedRows ||\n !Object.keys(expanded ?? {}).length\n ) {\n return rowModel\n }\n\n if (process.env.NODE_ENV !== 'production' && instance.options.debug)\n console.info('Expanding...')\n\n return expandRowsFn(instance, rowModel)\n },\n {\n key: 'getExpandedRowModel',\n debug: instance.options.debug,\n onChange: () => {\n instance._notifyPageIndexReset()\n },\n }\n ),\n\n getPreExpandedRows: () => instance.getGroupedRowModel().rows,\n getPreExpandedFlatRows: () => instance.getGroupedRowModel().flatRows,\n getPreExpandedRowsById: () => instance.getGroupedRowModel().rowsById,\n getExpandedRows: () => instance.getExpandedRowModel().rows,\n getExpandedFlatRows: () => instance.getExpandedRowModel().flatRows,\n getExpandedRowsById: () => instance.getExpandedRowModel().rowsById,\n }\n}\n\nexport function createRow<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): ExpandedRow {\n return {\n toggleExpanded: expanded =>\n void instance.toggleRowExpanded(row.id, expanded),\n getIsExpanded: () => instance.getIsRowExpanded(row.id),\n getCanExpand: () => row.subRows && !!row.subRows.length,\n getToggleExpandedProps: userProps => {\n const initialProps: ToggleExpandedProps = {\n title: 'Toggle Row Expanded',\n onClick: (e: MouseEvent | TouchEvent) => {\n e.stopPropagation()\n instance.toggleRowExpanded(row.id)\n },\n }\n return propGetter(initialProps, userProps)\n },\n }\n}\n","import React, {\n ComponentProps,\n MouseEvent as ReactMouseEvent,\n PropsWithoutRef,\n PropsWithRef,\n TouchEvent as ReactTouchEvent,\n} from 'react'\nimport {\n Column,\n Getter,\n Header,\n OnChangeFn,\n PropGetterValue,\n ReactTable,\n Updater,\n} from '../types'\nimport { functionalUpdate, makeStateUpdater, memo, propGetter } from '../utils'\n\n//\n\nexport type ColumnSizing = Record<string, number>\n\nexport type ColumnSizingInfoState = {\n startOffset: null | number\n startSize: null | number\n deltaOffset: null | number\n deltaPercentage: null | number\n isResizingColumn: false | string\n columnSizingStart: [string, number][]\n}\n\nexport type ColumnSizingTableState = {\n columnSizing: ColumnSizing\n columnSizingInfo: ColumnSizingInfoState\n}\n\nexport type ColumnResizeMode = 'onChange' | 'onEnd'\n\nexport type ColumnSizingOptions = {\n enableColumnResizing?: boolean\n columnResizeMode?: ColumnResizeMode\n onColumnSizingChange?: OnChangeFn<ColumnSizing>\n onColumnSizingInfoChange?: OnChangeFn<ColumnSizingInfoState>\n}\n\nexport type ColumnSizingDefaultOptions = {\n columnResizeMode: ColumnResizeMode\n onColumnSizingChange: OnChangeFn<ColumnSizing>\n onColumnSizingInfoChange: OnChangeFn<ColumnSizingInfoState>\n}\n\nexport type ColumnResizerProps = {\n title?: string\n onMouseDown?: (e: ReactMouseEvent) => void\n onTouchStart?: (e: ReactTouchEvent) => void\n draggable?: boolean\n role?: string\n}\n\nexport type ColumnSizingInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n setColumnSizing: (updater: Updater<ColumnSizing>) => void\n setColumnSizingInfo: (updater: Updater<ColumnSizingInfoState>) => void\n resetColumnSizing: () => void\n resetColumnSize: (columnId: string) => void\n resetHeaderSize: (headerId: string) => void\n resetHeaderSizeInfo: () => void\n getColumnCanResize: (columnId: string) => boolean\n getHeaderCanResize: (headerId: string) => boolean\n getColumnResizerProps: <TGetter extends Getter<ColumnResizerProps>>(\n columnId: string,\n userProps?: TGetter\n ) => undefined | PropGetterValue<ColumnResizerProps, TGetter>\n getColumnIsResizing: (columnId: string) => boolean\n getHeaderIsResizing: (headerId: string) => boolean\n}\n\nexport type ColumnSizingColumnDef = {\n enableResizing?: boolean\n defaultCanResize?: boolean\n}\n\nexport type ColumnSizingColumn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n getCanResize: () => boolean\n getIsResizing: () => boolean\n getResizerProps: <TGetter extends Getter<ColumnResizerProps>>(\n userProps?: TGetter\n ) => undefined | PropGetterValue<ColumnResizerProps, TGetter>\n resetSize: () => void\n}\n\n//\n\nexport const defaultColumnSizing = {\n width: 150,\n minWidth: 20,\n maxWidth: Number.MAX_SAFE_INTEGER,\n}\n\nexport function getInitialState(): ColumnSizingTableState {\n return {\n columnSizing: {},\n columnSizingInfo: {\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: [],\n },\n }\n}\n\nexport function getDefaultOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): ColumnSizingDefaultOptions {\n return {\n columnResizeMode: 'onEnd',\n onColumnSizingChange: makeStateUpdater('columnSizing', instance),\n onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', instance),\n }\n}\n\nexport function getInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): ColumnSizingInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> {\n return {\n setColumnSizing: updater =>\n instance.options.onColumnSizingChange?.(\n updater,\n functionalUpdate(updater, instance.getState().columnSizing)\n ),\n setColumnSizingInfo: updater =>\n instance.options.onColumnSizingInfoChange?.(\n updater,\n functionalUpdate(updater, instance.getState().columnSizingInfo)\n ),\n resetColumnSizing: () => {\n instance.setColumnSizing(instance.initialState.columnSizing ?? {})\n },\n resetHeaderSizeInfo: () => {\n instance.setColumnSizingInfo(instance.initialState.columnSizingInfo ?? {})\n },\n resetColumnSize: columnId => {\n instance.setColumnSizing(({ [columnId]: _, ...rest }) => {\n return rest\n })\n },\n resetHeaderSize: headerId => {\n const header = instance.getHeader(headerId)\n\n if (!header) {\n return\n }\n\n return instance.resetColumnSize(header.column.id)\n },\n getHeaderCanResize: headerId => {\n const header = instance.getHeader(headerId)\n\n if (!header) {\n throw new Error()\n }\n\n return instance.getColumnCanResize(header.column.id)\n },\n getColumnCanResize: columnId => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n return (\n column.enableResizing ??\n instance.options.enableColumnResizing ??\n column.defaultCanResize ??\n true\n )\n },\n getColumnIsResizing: columnId => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n return instance.getState().columnSizingInfo.isResizingColumn === columnId\n },\n getHeaderIsResizing: headerId => {\n const header = instance.getHeader(headerId)\n\n if (!header) {\n throw new Error()\n }\n\n return instance.getColumnIsResizing(header.column.id)\n },\n getColumnResizerProps: (headerId, userProps) => {\n const header = instance.getHeader(headerId)\n\n if (!header) {\n return\n }\n\n const column = instance.getColumn(header.column.id)\n\n if (!column) {\n return\n }\n\n const canResize = column.getCanResize()\n\n const onResizeStart = (e: ReactMouseEvent | ReactTouchEvent) => {\n if (isTouchStartEvent(e)) {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return\n }\n }\n\n const columnSizingStart: [string, number][] = header\n .getLeafHeaders()\n .map(d => [d.column.id, d.getWidth()])\n\n const clientX = isTouchStartEvent(e)\n ? Math.round(e.touches[0].clientX)\n : e.clientX\n\n const updateOffset = (\n eventType: 'move' | 'end',\n clientXPos?: number\n ) => {\n if (typeof clientXPos !== 'number') {\n return\n }\n\n let newColumnSizing: ColumnSizing = {}\n\n instance.setColumnSizingInfo(old => {\n const deltaOffset = clientXPos - (old?.startOffset ?? 0)\n const deltaPercentage = Math.max(\n deltaOffset / (old?.startSize ?? 0),\n -0.999999\n )\n\n old.columnSizingStart.forEach(([columnId, headerWidth]) => {\n newColumnSizing[columnId] = Math.max(\n headerWidth + headerWidth * deltaPercentage,\n 0\n )\n })\n\n return {\n ...old,\n deltaOffset,\n deltaPercentage,\n }\n })\n\n if (\n instance.options.columnResizeMode === 'onChange' ||\n eventType === 'end'\n ) {\n instance.setColumnSizing(old => ({\n ...old,\n ...newColumnSizing,\n }))\n }\n }\n\n const onMove = (clientXPos?: number) => updateOffset('move', clientXPos)\n\n const onEnd = (clientXPos?: number) => {\n updateOffset('end', clientXPos)\n\n instance.setColumnSizingInfo(old => ({\n ...old,\n isResizingColumn: false,\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n columnSizingStart: [],\n }))\n }\n\n const mouseEvents = {\n moveHandler: (e: MouseEvent) => onMove(e.clientX),\n upHandler: (e: MouseEvent) => {\n document.removeEventListener('mousemove', mouseEvents.moveHandler)\n document.removeEventListener('mouseup', mouseEvents.upHandler)\n onEnd(e.clientX)\n },\n }\n\n const touchEvents = {\n moveHandler: (e: TouchEvent) => {\n if (e.cancelable) {\n e.preventDefault()\n e.stopPropagation()\n }\n onMove(e.touches[0].clientX)\n return false\n },\n upHandler: (e: TouchEvent) => {\n document.removeEventListener('touchmove', touchEvents.moveHandler)\n document.removeEventListener('touchend', touchEvents.upHandler)\n if (e.cancelable) {\n e.preventDefault()\n e.stopPropagation()\n }\n onEnd(e.touches[0].clientX)\n },\n }\n\n const passiveIfSupported = passiveEventSupported()\n ? { passive: false }\n : false\n\n if (isTouchStartEvent(e)) {\n document.addEventListener(\n 'touchmove',\n touchEvents.moveHandler,\n passiveIfSupported\n )\n document.addEventListener(\n 'touchend',\n touchEvents.upHandler,\n passiveIfSupported\n )\n } else {\n document.addEventListener(\n 'mousemove',\n mouseEvents.moveHandler,\n passiveIfSupported\n )\n document.addEventListener(\n 'mouseup',\n mouseEvents.upHandler,\n passiveIfSupported\n )\n }\n\n instance.setColumnSizingInfo(old => ({\n ...old,\n startOffset: clientX,\n startSize: header.getWidth(),\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart,\n isResizingColumn: header.column.id,\n }))\n }\n\n const initialProps: ColumnResizerProps = canResize\n ? {\n title: 'Toggle Grouping',\n draggable: false,\n role: 'separator',\n onMouseDown: (e: ReactMouseEvent) => {\n e.persist()\n onResizeStart(e)\n },\n onTouchStart: (e: ReactTouchEvent) => {\n e.persist()\n onResizeStart(e)\n },\n }\n : {}\n\n return propGetter(initialProps, userProps)\n },\n }\n}\n\nexport function createColumn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): ColumnSizingColumn<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n return {\n getIsResizing: () => instance.getColumnIsResizing(column.id),\n getCanResize: () => instance.getColumnCanResize(column.id),\n resetSize: () => instance.resetColumnSize(column.id),\n getResizerProps: userProps =>\n instance.getColumnResizerProps(column.id, userProps),\n }\n}\n\nlet passiveSupported: boolean | null = null\nexport function passiveEventSupported() {\n if (typeof passiveSupported === 'boolean') return passiveSupported\n\n let supported = false\n try {\n const options = {\n get passive() {\n supported = true\n return false\n },\n }\n\n const noop = () => {}\n\n window.addEventListener('test', noop, options)\n window.removeEventListener('test', noop)\n } catch (err) {\n supported = false\n }\n passiveSupported = supported\n return passiveSupported\n}\n\nfunction isTouchStartEvent(\n e: ReactTouchEvent | ReactMouseEvent\n): e is ReactTouchEvent {\n return e.type === 'touchstart'\n}\n","import {\n Column,\n OnChangeFn,\n ReactTable,\n Row,\n RowModel,\n TableState,\n Updater,\n} from '../types'\nimport { functionalUpdate, makeStateUpdater, memo } from '../utils'\n\nexport type PageCount = undefined | null | number\n\nexport type PaginationState = {\n pageIndex: number\n pageSize: number\n pageCount?: PageCount\n}\n\nexport type PaginationTableState = {\n pagination: PaginationState\n}\n\nexport type PaginationOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n onPaginationChange?: OnChangeFn<PaginationState>\n autoResetPageIndex?: boolean\n paginateRowsFn?: (\n instance: ReactTable<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >,\n rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n}\n\nexport type PaginationDefaultOptions = {\n onPaginationChange: OnChangeFn<PaginationState>\n autoResetPageIndex: boolean\n}\n\nexport type PaginationInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n _notifyPageIndexReset: () => void\n setPagination: (updater: Updater<PaginationState>) => void\n resetPagination: () => void\n setPageIndex: (updater: Updater<number>) => void\n resetPageIndex: () => void\n setPageSize: (updater: Updater<number>) => void\n resetPageSize: () => void\n setPageCount: (updater: Updater<PageCount>) => void\n getPageOptions: () => number[]\n getCanPreviousPage: () => boolean\n getCanNextPage: () => boolean\n previousPage: () => void\n nextPage: () => void\n getPaginationRowModel: () => RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n getPrePaginationRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPrePaginationFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPrePaginationRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n getPaginationRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPaginationFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getPaginationRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n}\n\n//\n\nexport function getInitialState(): PaginationTableState {\n return {\n pagination: {\n pageIndex: 0,\n pageSize: 10,\n },\n }\n}\n\nexport function getDefaultOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): PaginationDefaultOptions {\n return {\n onPaginationChange: makeStateUpdater('pagination', instance),\n autoResetPageIndex: true,\n }\n}\n\nexport function getInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): PaginationInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n let registered = false\n return {\n _notifyPageIndexReset: () => {\n if (!registered) {\n registered = true\n return\n }\n\n if (instance.options.autoResetAll === false) {\n return\n }\n\n if (\n instance.options.autoResetAll === true ||\n instance.options.autoResetPageIndex\n ) {\n instance.resetPageSize()\n }\n },\n setPagination: updater => {\n const safeUpdater: Updater<PaginationState> = old => {\n let newState = functionalUpdate(updater, old)\n\n if (instance.options.paginateRowsFn) {\n newState.pageCount = instance.getPrePaginationRows()?.length\n ? Math.ceil(\n instance.getPrePaginationRows().length /\n instance.getState().pagination.pageSize\n )\n : 0\n }\n\n return newState\n }\n\n return instance.options.onPaginationChange?.(\n safeUpdater,\n functionalUpdate(safeUpdater, instance.getState().pagination)\n )\n },\n resetPagination: () => {\n instance.setPagination(\n instance.initialState.pagination ?? {\n pageIndex: 0,\n pageSize: 10,\n pageCount: -1,\n }\n )\n },\n setPageIndex: updater => {\n instance.setPagination(old => {\n let pageIndex = functionalUpdate(updater, old.pageIndex)\n\n const maxPageIndex =\n old.pageCount && old.pageCount > 0\n ? old.pageCount - 1\n : Number.MAX_SAFE_INTEGER\n\n pageIndex = Math.min(Math.max(0, pageIndex), maxPageIndex)\n\n return {\n ...old,\n pageIndex,\n }\n })\n },\n resetPageIndex: () => {\n instance.setPageIndex(0)\n },\n resetPageSize: () => {\n instance.setPageSize(instance.initialState?.pagination?.pageSize ?? 10)\n },\n setPageSize: updater => {\n instance.setPagination(old => {\n const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize))\n const topRowIndex = old.pageSize * old.pageIndex!\n const pageIndex = Math.floor(topRowIndex / pageSize)\n\n return {\n ...old,\n pageIndex,\n pageSize,\n }\n })\n },\n setPageCount: updater =>\n instance.setPagination(old => {\n let newPageCount = functionalUpdate(updater, old.pageCount)\n\n if (typeof newPageCount === 'number') {\n newPageCount = Math.max(-1, newPageCount)\n }\n\n return {\n ...old,\n pageCount: newPageCount,\n }\n }),\n\n getPageOptions: memo(\n () => [\n instance.getState().pagination.pageSize,\n instance.getState().pagination.pageCount,\n ],\n (pageSize, pageCount) => {\n let pageOptions: number[] = []\n if (pageCount && pageCount > 0) {\n pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i)\n }\n return pageOptions\n },\n {\n key: 'getPageOptions',\n debug: instance.options.debug,\n }\n ),\n\n getCanPreviousPage: () => instance.getState().pagination.pageIndex > 0,\n\n getCanNextPage: () => {\n const { pageIndex, pageCount, pageSize } = instance.getState().pagination\n\n if (pageCount === -1) {\n return true\n }\n\n if (pageCount === 0) {\n return false\n }\n\n return (\n pageIndex <\n Math.ceil(instance.getPrePaginationRows().length / pageSize) - 1\n )\n },\n\n previousPage: () => {\n return instance.setPageIndex(old => old - 1)\n },\n\n nextPage: () => {\n return instance.setPageIndex(old => {\n return old + 1\n })\n },\n\n getPaginationRowModel: memo(\n () => [\n instance.getState().pagination,\n instance.getExpandedRowModel(),\n instance.options.paginateRowsFn,\n ],\n (_pagination, rowModel, paginateRowsFn) => {\n if (!paginateRowsFn || !rowModel.rows.length) {\n return rowModel\n }\n\n if (process.env.NODE_ENV !== 'production' && instance.options.debug)\n console.info('Paginating...')\n\n return paginateRowsFn(instance, rowModel)\n },\n {\n key: 'getPaginationRowModel',\n debug: instance.options.debug,\n }\n ),\n\n getPrePaginationRows: () => instance.getExpandedRowModel().rows,\n getPrePaginationFlatRows: () => instance.getExpandedRowModel().flatRows,\n getPrePaginationRowsById: () => instance.getExpandedRowModel().rowsById,\n getPaginationRows: () => instance.getPaginationRowModel().rows,\n getPaginationFlatRows: () => instance.getPaginationRowModel().flatRows,\n getPaginationRowsById: () => instance.getPaginationRowModel().rowsById,\n }\n}\n","import React, { MouseEvent, TouchEvent } from 'react'\nimport {\n Getter,\n OnChangeFn,\n PropGetterValue,\n ReactTable,\n Row,\n RowModel,\n Updater,\n} from '../types'\nimport { functionalUpdate, makeStateUpdater, memo, propGetter } from '../utils'\n\nexport type RowSelectionState = Record<string, boolean>\n\nexport type RowSelectionTableState = {\n rowSelection: RowSelectionState\n}\n\nexport type RowSelectionOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n onRowSelectionChange?: OnChangeFn<RowSelectionState>\n autoResetRowSelection?: boolean\n enableRowSelection?:\n | boolean\n | ((\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => boolean)\n enableMultiRowSelection?:\n | boolean\n | ((\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => boolean)\n enableSubRowSelection?:\n | boolean\n | ((\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => boolean)\n // enableGroupingRowSelection?:\n // | boolean\n // | ((\n // row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n // ) => boolean)\n // isAdditiveSelectEvent?: (e: MouseEvent | TouchEvent) => boolean\n // isInclusiveSelectEvent?: (e: MouseEvent | TouchEvent) => boolean\n // selectRowsFn?: (\n // instance: ReactTable<\n // TData,\n // TValue,\n // TFilterFns,\n // TSortingFns,\n // TAggregationFns\n // >,\n // rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n // ) => RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n}\n\ntype ToggleRowSelectedProps = {\n onChange?: (e: MouseEvent | TouchEvent) => void\n checked?: boolean\n title?: string\n indeterminate?: boolean\n}\n\nexport type RowSelectionRow = {\n getIsSelected: () => boolean\n getIsSomeSelected: () => boolean\n getCanSelect: () => boolean\n getCanMultiSelect: () => boolean\n toggleSelected: (value?: boolean) => void\n getToggleSelectedProps: <TGetter extends Getter<ToggleRowSelectedProps>>(\n userProps?: TGetter\n ) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>\n}\n\nexport type RowSelectionInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n _notifyRowSelectionReset: () => void\n getToggleRowSelectedProps: <TGetter extends Getter<ToggleRowSelectedProps>>(\n rowId: string,\n userProps?: TGetter\n ) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>\n getToggleAllRowsSelectedProps: <\n TGetter extends Getter<ToggleRowSelectedProps>\n >(\n userProps?: TGetter\n ) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>\n getToggleAllPageRowsSelectedProps: <\n TGetter extends Getter<ToggleRowSelectedProps>\n >(\n userProps?: TGetter\n ) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>\n setRowSelection: (updater: Updater<RowSelectionState>) => void\n resetRowSelection: () => void\n toggleRowSelected: (rowId: string, value?: boolean) => void\n getRowCanSelect: (rowId: string) => boolean\n getRowCanSelectSubRows: (rowId: string) => boolean\n getRowCanMultiSelect: (rowId: string) => boolean\n // getGroupingRowCanSelect: (rowId: string) => boolean\n getRowIsSelected: (rowId: string) => boolean\n getRowIsSomeSelected: (rowId: string) => boolean\n getIsAllRowsSelected: () => boolean\n getIsAllPageRowsSelected: () => boolean\n getIsSomeRowsSelected: () => boolean\n getIsSomePageRowsSelected: () => boolean\n toggleAllRowsSelected: (value: boolean) => void\n toggleAllPageRowsSelected: (value: boolean) => void\n getSelectedRowModel: () => RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n getSelectedRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getSelectedFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getSelectedRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n getFilteredSelectedRowModel: () => RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n getFilteredSelectedRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getFilteredSelectedFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getFilteredSelectedRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n getGroupedSelectedRowModel: () => RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n getGroupedSelectedRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getGroupedSelectedFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getGroupedSelectedRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n}\n\n//\n\nexport function getInitialState(): RowSelectionTableState {\n return {\n rowSelection: {},\n }\n}\n\nexport function getDefaultOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): RowSelectionOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> {\n return {\n onRowSelectionChange: makeStateUpdater('rowSelection', instance),\n autoResetRowSelection: true,\n enableRowSelection: true,\n enableMultiRowSelection: true,\n enableSubRowSelection: true,\n // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: MouseEvent | TouchEvent) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: MouseEvent | TouchEvent) => !!e.shiftKey,\n }\n}\n\nexport function getInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): RowSelectionInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> {\n let registered = false\n\n // const pageRows = instance.getPageRows()\n\n return {\n _notifyRowSelectionReset: () => {\n if (!registered) {\n registered = true\n return\n }\n\n if (instance.options.autoResetAll === false) {\n return\n }\n\n if (\n instance.options.autoResetAll === true ||\n instance.options.autoResetRowSelection\n ) {\n instance.resetRowSelection()\n }\n },\n setRowSelection: updater =>\n instance.options.onRowSelectionChange?.(\n updater,\n functionalUpdate(updater, instance.getState().rowSelection)\n ),\n resetRowSelection: () =>\n instance.setRowSelection(getInitialState().rowSelection ?? {}),\n toggleAllRowsSelected: value => {\n instance.setRowSelection(old => {\n value =\n typeof value !== 'undefined'\n ? value\n : !instance.getIsAllRowsSelected()\n\n // Only remove/add the rows that are visible on the screen\n // Leave all the other rows that are selected alone.\n const rowSelection = Object.assign({}, old)\n\n const preGroupedFlatRows = instance.getPreGroupedFlatRows()\n\n // We don't use `mutateRowIsSelected` here for performance reasons.\n // All of the rows are flat already, so it wouldn't be worth it\n if (value) {\n preGroupedFlatRows.forEach(row => {\n rowSelection[row.id] = true\n })\n } else {\n preGroupedFlatRows.forEach(row => {\n delete rowSelection[row.id]\n })\n }\n\n return rowSelection\n })\n },\n toggleAllPageRowsSelected: value =>\n instance.setRowSelection(old => {\n const selectAll =\n typeof value !== 'undefined'\n ? value\n : !instance.getIsAllPageRowsSelected()\n\n const rowSelection: RowSelectionState = { ...old }\n\n instance.getRows().forEach(row => {\n mutateRowIsSelected(rowSelection, row.id, value, instance)\n })\n\n return rowSelection\n }),\n toggleRowSelected: (rowId, value) => {\n const row = instance.getRow(rowId)\n const isSelected = row.getIsSelected()\n\n instance.setRowSelection(old => {\n value = typeof value !== 'undefined' ? value : !isSelected\n\n if (isSelected === value) {\n return old\n }\n\n const selectedRowIds = { ...old }\n\n mutateRowIsSelected(selectedRowIds, rowId, value, instance)\n\n return selectedRowIds\n })\n },\n // addRowSelectionRange: rowId => {\n // const {\n // rows,\n // rowsById,\n // options: { selectGroupingRows, selectSubRows },\n // } = instance\n\n // const findSelectedRow = (rows: Row[]) => {\n // let found\n // rows.find(d => {\n // if (d.getIsSelected()) {\n // found = d\n // return true\n // }\n // const subFound = findSelectedRow(d.subRows || [])\n // if (subFound) {\n // found = subFound\n // return true\n // }\n // return false\n // })\n // return found\n // }\n\n // const firstRow = findSelectedRow(rows) || rows[0]\n // const lastRow = rowsById[rowId]\n\n // let include = false\n // const selectedRowIds = {}\n\n // const addRow = (row: Row) => {\n // mutateRowIsSelected(selectedRowIds, row.id, true, {\n // rowsById,\n // selectGroupingRows: selectGroupingRows!,\n // selectSubRows: selectSubRows!,\n // })\n // }\n\n // instance.rows.forEach(row => {\n // const isFirstRow = row.id === firstRow.id\n // const isLastRow = row.id === lastRow.id\n\n // if (isFirstRow || isLastRow) {\n // if (!include) {\n // include = true\n // } else if (include) {\n // addRow(row)\n // include = false\n // }\n // }\n\n // if (include) {\n // addRow(row)\n // }\n // })\n\n // instance.setRowSelection(selectedRowIds)\n // },\n getSelectedRowModel: memo(\n () => [instance.getState().rowSelection, instance.getCoreRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n if (process.env.NODE_ENV !== 'production' && instance.options.debug)\n console.info('Selecting...')\n\n return selectRowsFn(instance, rowModel)\n },\n {\n key: 'getSelectedRowModel',\n debug: instance.options.debug,\n onChange: () => instance._notifyExpandedReset(),\n }\n ),\n getSelectedRows: () => instance.getSelectedRowModel().rows,\n getSelectedFlatRows: () => instance.getSelectedRowModel().flatRows,\n getSelectedRowsById: () => instance.getSelectedRowModel().rowsById,\n\n getFilteredSelectedRowModel: memo(\n () => [\n instance.getState().rowSelection,\n instance.getGlobalFilteredRowModel(),\n ],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n if (process.env.NODE_ENV !== 'production' && instance.options.debug)\n console.info('Selecting...')\n\n return selectRowsFn(instance, rowModel)\n },\n {\n key: 'getFilteredSelectedRowModel',\n debug: instance.options.debug,\n onChange: () => instance._notifyExpandedReset(),\n }\n ),\n getFilteredSelectedRows: () => instance.getFilteredSelectedRowModel().rows,\n getFilteredSelectedFlatRows: () =>\n instance.getFilteredSelectedRowModel().flatRows,\n getFilteredSelectedRowsById: () =>\n instance.getFilteredSelectedRowModel().rowsById,\n\n getGroupedSelectedRowModel: memo(\n () => [instance.getState().rowSelection, instance.getGroupedRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n if (process.env.NODE_ENV !== 'production' && instance.options.debug)\n console.info('Selecting...')\n\n return selectRowsFn(instance, rowModel)\n },\n {\n key: 'getGroupedSelectedRowModel',\n debug: instance.options.debug,\n onChange: () => instance._notifyExpandedReset(),\n }\n ),\n getGroupedSelectedRows: () => instance.getGroupedSelectedRowModel().rows,\n getGroupedSelectedFlatRows: () =>\n instance.getGroupedSelectedRowModel().flatRows,\n getGroupedSelectedRowsById: () =>\n instance.getGroupedSelectedRowModel().rowsById,\n\n ///\n\n getRowIsSelected: rowId => {\n const { rowSelection } = instance.getState()\n const row = instance.getRow(rowId)\n\n if (!row) {\n throw new Error()\n }\n\n return isRowSelected(row, rowSelection, instance) === true\n },\n\n getRowIsSomeSelected: rowId => {\n const { rowSelection } = instance.getState()\n const row = instance.getRow(rowId)\n\n if (!row) {\n throw new Error()\n }\n\n return isRowSelected(row, rowSelection, instance) === 'some'\n },\n\n getRowCanSelect: rowId => {\n const row = instance.getRow(rowId)\n\n if (!row) {\n throw new Error()\n }\n\n if (typeof instance.options.enableRowSelection === 'function') {\n return instance.options.enableRowSelection(row)\n }\n\n return instance.options.enableRowSelection ?? true\n },\n\n getRowCanSelectSubRows: rowId => {\n const row = instance.getRow(rowId)\n\n if (!row) {\n throw new Error()\n }\n\n if (typeof instance.options.enableSubRowSelection === 'function') {\n return instance.options.enableSubRowSelection(row)\n }\n\n return instance.options.enableSubRowSelection ?? true\n },\n\n getRowCanMultiSelect: rowId => {\n const row = instance.getRow(rowId)\n\n if (!row) {\n throw new Error()\n }\n\n if (typeof instance.options.enableMultiRowSelection === 'function') {\n return instance.options.enableMultiRowSelection(row)\n }\n\n return instance.options.enableMultiRowSelection ?? true\n },\n\n // getGroupingRowCanSelect: rowId => {\n // const row = instance.getRow(rowId)\n\n // if (!row) {\n // throw new Error()\n // }\n\n // if (typeof instance.options.enableGroupingRowSelection === 'function') {\n // return instance.options.enableGroupingRowSelection(row)\n // }\n\n // return instance.options.enableGroupingRowSelection ?? false\n // },\n\n getIsAllRowsSelected: () => {\n const preFilteredFlatRows = instance.getPreGlobalFilteredFlatRows()\n const { rowSelection } = instance.getState()\n\n let isAllRowsSelected = Boolean(\n preFilteredFlatRows.length && Object.keys(rowSelection).length\n )\n\n if (isAllRowsSelected) {\n if (preFilteredFlatRows.some(row => !rowSelection[row.id])) {\n isAllRowsSelected = false\n }\n }\n\n return isAllRowsSelected\n },\n\n getIsAllPageRowsSelected: () => {\n const paginationFlatRows = instance.getPaginationFlatRows()\n const { rowSelection } = instance.getState()\n\n let isAllPageRowsSelected = !!paginationFlatRows.length\n\n if (\n isAllPageRowsSelected &&\n paginationFlatRows.some(row => !rowSelection[row.id])\n ) {\n isAllPageRowsSelected = false\n }\n\n return isAllPageRowsSelected\n },\n\n getIsSomeRowsSelected: () => {\n return (\n !instance.getIsAllRowsSelected() &&\n !!Object.keys(instance.getState().rowSelection ?? {}).length\n )\n },\n\n getIsSomePageRowsSelected: () => {\n const paginationFlatRows = instance.getPaginationFlatRows()\n return instance.getIsAllPageRowsSelected()\n ? false\n : !!paginationFlatRows?.length\n },\n\n getToggleRowSelectedProps: (rowId, userProps) => {\n const row = instance.getRow(rowId)\n\n const isSelected = row.getIsSelected()\n const isSomeSelected = row.getIsSomeSelected()\n const canSelect = row.getCanSelect()\n\n const initialProps: ToggleRowSelectedProps = {\n onChange: canSelect\n ? (e: MouseEvent | TouchEvent) => {\n row.toggleSelected((e.target as HTMLInputElement).checked)\n }\n : undefined,\n checked: isSelected,\n title: 'Toggle Row Selected',\n indeterminate: isSomeSelected,\n // onChange: forInput\n // ? (e: Event) => e.stopPropagation()\n // : (e: Event) => {\n // if (instance.options.isAdditiveSelectEvent(e)) {\n // row.toggleSelected()\n // } else if (instance.options.isInclusiveSelectEvent(e)) {\n // instance.addRowSelectionRange(row.id)\n // } else {\n // instance.setRowSelection({})\n // row.toggleSelected()\n // }\n\n // if (props.onClick) props.onClick(e)\n // },\n }\n\n return propGetter(initialProps, userProps)\n },\n\n getToggleAllRowsSelectedProps: userProps => {\n const isSomeRowsSelected = instance.getIsSomeRowsSelected()\n const isAllRowsSelected = instance.getIsAllRowsSelected()\n\n const initialProps: ToggleRowSelectedProps = {\n onChange: (e: MouseEvent | TouchEvent) => {\n instance.toggleAllRowsSelected((e.target as HTMLInputElement).checked)\n },\n checked: isAllRowsSelected,\n title: 'Toggle All Rows Selected',\n indeterminate: isSomeRowsSelected,\n }\n\n return propGetter(initialProps, userProps)\n },\n\n getToggleAllPageRowsSelectedProps: userProps => {\n const isSomePageRowsSelected = instance.getIsSomePageRowsSelected()\n const isAllPageRowsSelected = instance.getIsAllPageRowsSelected()\n\n const initialProps: ToggleRowSelectedProps = {\n onChange: (e: MouseEvent | TouchEvent) => {\n instance.toggleAllPageRowsSelected(\n (e.target as HTMLInputElement).checked\n )\n },\n checked: isAllPageRowsSelected,\n title: 'Toggle All Current Page Rows Selected',\n indeterminate: isSomePageRowsSelected,\n }\n\n return propGetter(initialProps, userProps)\n },\n }\n}\n\nexport function createRow<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): RowSelectionRow {\n return {\n getIsSelected: () => instance.getRowIsSelected(row.id),\n getIsSomeSelected: () => instance.getRowIsSomeSelected(row.id),\n toggleSelected: value => instance.toggleRowSelected(row.id, value),\n getToggleSelectedProps: userProps =>\n instance.getToggleRowSelectedProps(row.id, userProps),\n getCanMultiSelect: () => instance.getRowCanMultiSelect(row.id),\n getCanSelect: () => instance.getRowCanSelect(row.id),\n }\n}\n\nconst mutateRowIsSelected = <\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n selectedRowIds: Record<string, boolean>,\n id: string,\n value: boolean,\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n) => {\n const row = instance.getRow(id)\n\n const isGrouped = row.getIsGrouped()\n\n // if ( // TODO: enforce grouping row selection rules\n // !isGrouped ||\n // (isGrouped && instance.options.enableGroupingRowSelection)\n // ) {\n if (value) {\n selectedRowIds[id] = true\n } else {\n delete selectedRowIds[id]\n }\n // }\n\n if (row.subRows?.length && instance.getRowCanSelectSubRows(row.id)) {\n row.subRows.forEach(row =>\n mutateRowIsSelected(selectedRowIds, row.id, value, instance)\n )\n }\n}\n\nexport function selectRowsFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n const rowSelection = instance.getState().rowSelection\n\n const newSelectedFlatRows: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] = []\n const newSelectedRowsById: Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n > = {}\n\n // Filters top level and nested rows\n const recurseRows = (\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n depth = 0\n ) => {\n return rows\n .map(row => {\n const isSelected = isRowSelected(row, rowSelection, instance) === true\n\n if (isSelected) {\n newSelectedFlatRows.push(row)\n newSelectedRowsById[row.id] = row\n }\n\n if (row.subRows?.length) {\n row = {\n ...row,\n subRows: recurseRows(row.subRows, depth + 1),\n }\n }\n\n if (isSelected) {\n return row\n }\n })\n .filter(Boolean) as Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n }\n\n return {\n rows: recurseRows(rowModel.rows),\n flatRows: newSelectedFlatRows,\n rowsById: newSelectedRowsById,\n }\n}\n\nexport function isRowSelected<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n selection: Record<string, boolean>,\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): boolean | 'some' {\n if (selection[row.id]) {\n return true\n }\n\n if (row.subRows && row.subRows.length) {\n let allChildrenSelected = true\n let someSelected = false\n\n row.subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return\n }\n\n if (isRowSelected(subRow, selection, instance)) {\n someSelected = true\n } else {\n allChildrenSelected = false\n }\n })\n\n return allChildrenSelected ? true : someSelected ? 'some' : false\n }\n\n return false\n}\n","import {\n flattenBy,\n functionalUpdate,\n propGetter,\n memo,\n flexRender,\n RequiredKeys,\n} from './utils'\n\nimport {\n Updater,\n PropGetterValue,\n Options,\n TableState,\n ColumnDef,\n Row,\n Column,\n Cell,\n Header,\n AccessorFn,\n HeaderRenderProps,\n TableProps,\n TableBodyProps,\n PropGetter,\n Getter,\n RowProps,\n CellProps,\n ReactTable,\n RowValues,\n Renderable,\n} from './types'\n\nimport * as Visibility from './features/Visibility'\nimport * as Ordering from './features/Ordering'\nimport * as Pinning from './features/Pinning'\nimport * as Headers from './features/Headers'\nimport * as Filters from './features/Filters'\nimport * as Sorting from './features/Sorting'\nimport * as Grouping from './features/Grouping'\nimport * as Expanding from './features/Expanding'\nimport * as ColumnSizing from './features/ColumnSizing'\nimport * as Pagination from './features/Pagination'\nimport * as RowSelection from './features/RowSelection'\nimport { RowModel } from '.'\n\nconst features = [\n Visibility,\n Ordering,\n Pinning,\n Headers,\n Filters,\n Sorting,\n Grouping,\n Expanding,\n ColumnSizing,\n Pagination,\n RowSelection,\n]\n\nexport type CoreOptions<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n data: TData[]\n columns: ColumnDef<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n debug?: boolean\n defaultColumn?: Partial<\n ColumnDef<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n initialState?: Partial<TableState>\n state?: Partial<TableState>\n getSubRows?: (originalRow: TData, index: number) => TData[]\n getRowId?: (\n originalRow: TData,\n index: number,\n parent?: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => string\n onStateChange?: (newState: TableState) => void\n autoResetAll?: boolean\n}\n\nexport type TableCore<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> =\n {\n rerender: () => void\n initialState: TableState\n internalState: TableState\n reset: () => void\n options: RequiredKeys<\n Options<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n 'state'\n >\n updateOptions: (\n newOptions: Options<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n ) => void\n getRowId: (\n _: TData,\n index: number,\n parent?: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => string\n getState: () => TableState\n setState: (updater: Updater<TableState>) => void\n getDefaultColumn: () => Partial<\n ColumnDef<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n getColumnDefs: () => ColumnDef<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n createColumn: (\n columnDef: ColumnDef<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >,\n depth: number,\n parent?: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n getAllColumns: () => Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getAllFlatColumns: () => Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getAllFlatColumnsById: () => Record<\n string,\n Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n getAllLeafColumns: () => Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getColumn: (\n columnId: string\n ) => Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n getColumnWidth: (columnId: string) => number\n getTotalWidth: () => number\n createCell: (\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n value: any\n ) => Cell<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n createRow: (\n id: string,\n original: TData | undefined,\n rowIndex: number,\n depth: number,\n values: Record<string, any>\n ) => Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n getCoreRowModel: () => RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n getCoreRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getCoreFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getCoreRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n getRowModel: () => RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n getRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getFlatRows: () => Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getRowsById: () => Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n getRow: (\n id: string\n ) => Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n getCell: (\n rowId: string,\n columnId: string\n ) => Cell<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n getTableProps: PropGetter<TableProps>\n getTableBodyProps: PropGetter<TableBodyProps>\n getRowProps: <TGetter extends Getter<RowProps>>(\n rowId: string,\n userProps?: TGetter\n ) => undefined | PropGetterValue<RowProps, TGetter>\n getCellProps: <TGetter extends Getter<CellProps>>(\n rowId: string,\n columnId: string,\n userProps?: TGetter\n ) => undefined | PropGetterValue<CellProps, TGetter>\n getTableWidth: () => number\n getLeftTableWidth: () => number\n getCenterTableWidth: () => number\n getRightTableWidth: () => number\n }\n\nexport type CoreRow<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> = {\n id: string\n index: number\n original?: TData\n depth: number\n values: RowValues\n leafRows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n subRows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n getRowProps: PropGetter<RowProps>\n originalSubRows?: TData[]\n getAllCells: () => Cell<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getAllCellsByColumnId: () => Record<\n string,\n Cell<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n}\n\nexport type CoreColumnDef<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n id: string\n accessorKey?: string & keyof TData\n accessorFn?: AccessorFn<TData>\n header?:\n | string\n | Renderable<{\n instance: ReactTable<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n header: Header<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n }>\n __generated: true\n width?: number\n minWidth?: number\n maxWidth?: number\n columns?: ColumnDef<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n footer?: Renderable<{\n instance: ReactTable<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n header: Header<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n }>\n cell?: Renderable<{\n instance: ReactTable<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n cell: Cell<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n value: TValue\n }>\n defaultIsVisible?: boolean\n}\n\nexport type CoreColumn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n id: string\n depth: number\n accessorFn?: AccessorFn<TData>\n columnDef: ColumnDef<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n getWidth: () => number\n columns: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n parent?: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n getFlatColumns: () => Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n getLeafColumns: () => Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n}\n\nexport function createTableInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n options: Options<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n rerender: () => void\n): ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n if (process.env.NODE_ENV !== 'production' && options.debug) {\n console.info('Creating React Table Instance...')\n }\n\n let instance = {} as ReactTable<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n\n const defaultOptions = features.reduce((obj, feature) => {\n return Object.assign(obj, (feature as any).getDefaultOptions?.(instance))\n }, {})\n\n const defaultState = {}\n\n const buildOptions = (\n options: Options<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => ({\n state: defaultState,\n ...defaultOptions,\n ...options,\n })\n\n instance.options = buildOptions(options)\n\n const initialState = {\n ...features.reduce((obj, feature) => {\n return Object.assign(obj, (feature as any).getInitialState?.())\n }, {}),\n ...(options.initialState ?? {}),\n } as TableState\n\n const finalInstance: ReactTable<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n > = {\n ...instance,\n ...features.reduce((obj, feature) => {\n return Object.assign(obj, (feature as any).getInstance?.(instance))\n }, {}),\n rerender,\n initialState,\n internalState: initialState,\n reset: () => {\n instance.setState(instance.initialState)\n },\n updateOptions: newOptions => {\n instance.options = buildOptions(newOptions)\n },\n\n getRowId: (\n _: TData,\n index: number,\n parent?: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => `${parent ? [parent.id, index].join('.') : index}`,\n\n getState: () => {\n let state = {\n ...instance.internalState,\n ...instance.options.state,\n }\n\n return state\n },\n\n setState: (\n updater: Updater<TableState>,\n shouldRerender: boolean = true\n ) => {\n const onStateChange = instance.options.onStateChange\n\n let internalState = instance.internalState\n let newState = functionalUpdate(updater, internalState)\n\n instance.internalState = newState\n\n if (onStateChange) {\n onStateChange(newState)\n return\n }\n\n if (shouldRerender) {\n instance.rerender()\n }\n },\n\n getDefaultColumn: memo(\n () => [instance.options.defaultColumn],\n defaultColumn => {\n defaultColumn = (defaultColumn ?? {}) as Partial<\n ColumnDef<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n\n return {\n header: (\n props: HeaderRenderProps<\n Header<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n ) => props.header.column.id,\n footer: (\n props: HeaderRenderProps<\n Header<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n ) => props.header.column.id,\n cell: ({ value = '' }: { value: any }): JSX.Element =>\n typeof value === 'boolean' ? value.toString() : value,\n ...features.reduce((obj, feature) => {\n return Object.assign(obj, (feature as any).getDefaultColumn?.())\n }, {}),\n ...defaultColumn,\n } as Partial<\n ColumnDef<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n },\n { debug: instance.options.debug, key: 'getDefaultColumn' }\n ),\n\n getColumnDefs: () => instance.options.columns,\n\n createColumn: (columnDef, depth: number, parent) => {\n const defaultColumn = instance.getDefaultColumn()\n\n let id =\n columnDef.id ??\n columnDef.accessorKey ??\n (typeof columnDef.header === 'string' ? columnDef.header : undefined)\n\n let accessorFn: AccessorFn<TData> | undefined\n\n if (columnDef.accessorFn) {\n accessorFn = columnDef.accessorFn\n } else if (columnDef.accessorKey) {\n accessorFn = (originalRow?: TData) =>\n (originalRow as any)[columnDef.accessorKey]\n }\n\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n columnDef.accessorFn\n ? `Columns require an id when using an accessorFn`\n : `Columns require an id when using a non-string header`\n )\n }\n throw new Error()\n }\n\n let column: CoreColumn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n > = {\n ...ColumnSizing.defaultColumnSizing,\n ...defaultColumn,\n ...columnDef,\n id: `${id}`,\n accessorFn,\n parent: parent as any,\n depth,\n columnDef,\n columns: [],\n getWidth: () => instance.getColumnWidth(column.id),\n getFlatColumns: memo(\n () => [true],\n () => {\n return [\n column as Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >,\n ...column.columns?.flatMap(d => d.getFlatColumns()),\n ]\n },\n {\n key: 'column.getFlatColumns',\n debug: instance.options.debug,\n }\n ),\n getLeafColumns: memo(\n () => [instance.getOrderColumnsFn()],\n orderColumns => {\n if (column.columns?.length) {\n let leafColumns = column.columns.flatMap(column =>\n column.getLeafColumns()\n )\n\n return orderColumns(leafColumns)\n }\n\n return [\n column as Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >,\n ]\n },\n {\n key: 'column.getLeafColumns',\n debug: instance.options.debug,\n }\n ),\n }\n\n column = features.reduce((obj, feature) => {\n return Object.assign(\n obj,\n (feature as any).createColumn?.(column, instance)\n )\n }, column)\n\n // Yes, we have to convert instance to uknown, because we know more than the compiler here.\n return column as Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n },\n\n getAllColumns: memo(\n () => [instance.getColumnDefs()],\n columnDefs => {\n if (process.env.NODE_ENV !== 'production' && instance.options.debug)\n console.info('Building Columns...')\n\n const recurseColumns = (\n columnDefs: ColumnDef<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[],\n parent?: Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >,\n depth = 0\n ): Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] => {\n return columnDefs.map(columnDef => {\n const column = instance.createColumn(columnDef, depth, parent)\n\n column.columns = columnDef.columns\n ? recurseColumns(columnDef.columns, column, depth + 1)\n : []\n\n return column\n })\n }\n\n return recurseColumns(columnDefs)\n },\n { key: 'getAllColumns', debug: instance.options.debug }\n ),\n\n getAllFlatColumns: memo(\n () => [instance.getAllColumns()],\n allColumns => {\n return allColumns.flatMap(column => {\n return column.getFlatColumns()\n })\n },\n { key: 'getAllFlatColumns', debug: instance.options.debug }\n ),\n\n getAllFlatColumnsById: memo(\n () => [instance.getAllFlatColumns()],\n flatColumns => {\n return flatColumns.reduce((acc, column) => {\n acc[column.id] = column\n return acc\n }, {} as Record<string, Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>>)\n },\n { key: 'getAllFlatColumnsById', debug: instance.options.debug }\n ),\n\n getAllLeafColumns: memo(\n () => [instance.getAllColumns(), instance.getOrderColumnsFn()],\n (allColumns, orderColumns) => {\n let leafColumns = allColumns.flatMap(column => column.getLeafColumns())\n return orderColumns(leafColumns)\n },\n { key: 'getAllLeafColumns', debug: instance.options.debug }\n ),\n\n getColumn: columnId => {\n const column = instance.getAllFlatColumnsById()[columnId]\n\n if (!column) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[React Table] Column with id ${columnId} does not exist.`\n )\n }\n throw new Error()\n }\n\n return column\n },\n\n getColumnWidth: (columnId: string) => {\n const column = instance.getColumn(columnId)\n\n if (!column) {\n throw new Error()\n }\n\n const columnSize = instance.getState().columnSizing[column.id]\n\n return Math.min(\n Math.max(\n column.minWidth ?? ColumnSizing.defaultColumnSizing.minWidth,\n columnSize ?? column.width ?? ColumnSizing.defaultColumnSizing.width\n ),\n column.maxWidth ?? ColumnSizing.defaultColumnSizing.maxWidth\n )\n },\n\n createCell: (row, column, value) => {\n const cell: Cell<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n > = {\n id: `${row.id}_${column.id}`,\n rowId: row.id,\n columnId: column.id,\n row,\n column,\n value,\n getCellProps: userProps =>\n instance.getCellProps(row.id, column.id, userProps)!,\n renderCell: () =>\n flexRender(column.cell, { instance, column, row, cell, value }),\n }\n\n features.forEach(feature => {\n Object.assign(\n cell,\n (feature as any).createCell?.(\n cell as Cell<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n > &\n Grouping.GroupingCell,\n column,\n row as Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n instance\n )\n )\n }, {})\n\n return cell\n },\n\n createRow: (id, original, rowIndex, depth, values) => {\n let row: CoreRow<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n > = {\n id,\n index: rowIndex,\n original,\n depth,\n values,\n subRows: [],\n leafRows: [],\n getRowProps: userProps => instance.getRowProps(row.id, userProps)!,\n getAllCells: undefined!,\n getAllCellsByColumnId: undefined!,\n }\n\n row.getAllCells = memo(\n () => [instance.getAllLeafColumns()],\n leafColumns => {\n return leafColumns.map(column => {\n return instance.createCell(\n row as Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >,\n column,\n row.values[column.id]\n )\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' ? 'row.getAllCells' : '',\n debug: instance.options.debug,\n }\n )\n\n row.getAllCellsByColumnId = memo(\n () => [row.getAllCells()],\n allCells => {\n return allCells.reduce((acc, cell) => {\n acc[cell.columnId] = cell\n return acc\n }, {} as Record<string, Cell<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>>)\n },\n {\n key: 'row.getAllCellsByColumnId',\n debug: instance.options.debug,\n }\n )\n\n features.forEach(feature => {\n Object.assign(row, (feature as any).createRow?.(row, instance))\n })\n\n return row as Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n },\n\n getCoreRowModel: memo(\n () => [instance.options.data],\n (\n data\n ): {\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n flatRows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n rowsById: Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >\n } => {\n if (process.env.NODE_ENV !== 'production' && instance.options.debug)\n console.info('Accessing...')\n\n // Access the row model using initial columns\n const rows: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] = []\n const flatRows: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] = []\n const rowsById: Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n > = {}\n\n const leafColumns = instance.getAllLeafColumns()\n\n const accessRow = (\n originalRow: TData,\n rowIndex: number,\n depth = 0,\n parentRows: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[],\n parent?: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => {\n const id = instance.getRowId(originalRow, rowIndex, parent)\n\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`getRowId expected an ID, but got ${id}`)\n }\n }\n\n const values: Record<string, any> = {}\n\n for (let i = 0; i < leafColumns.length; i++) {\n const column = leafColumns[i]\n if (column && column.accessorFn) {\n values[column.id] = column.accessorFn(originalRow, rowIndex)\n }\n }\n\n // Make the row\n const row = instance.createRow(\n id,\n originalRow,\n rowIndex,\n depth,\n values\n )\n\n // Push instance row into the parentRows array\n parentRows.push(row)\n // Keep track of every row in a flat array\n flatRows.push(row)\n // Also keep track of every row by its ID\n rowsById[id] = row\n\n // Get the original subrows\n if (instance.options.getSubRows) {\n const originalSubRows = instance.options.getSubRows(\n originalRow,\n rowIndex\n )\n\n // Then recursively access them\n if (originalSubRows?.length) {\n row.originalSubRows = originalSubRows\n const subRows: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] = []\n\n for (let i = 0; i < row.originalSubRows.length; i++) {\n accessRow(\n row.originalSubRows[i] as TData,\n i,\n depth + 1,\n subRows,\n row\n )\n }\n // Keep the new subRows array on the row\n row.subRows = subRows\n row.leafRows = flattenBy(subRows, d => d.leafRows)\n }\n }\n }\n\n for (let i = 0; i < data.length; i++) {\n accessRow(data[i] as TData, i, 0, rows)\n }\n\n return { rows, flatRows, rowsById }\n },\n {\n key: 'getRowModel',\n debug: instance.options.debug,\n onChange: () => {\n instance._notifyRowSelectionReset()\n instance._notifyFiltersReset()\n },\n }\n ),\n\n // The standard\n\n getCoreRows: () => {\n return instance.getCoreRowModel().rows\n },\n\n getCoreFlatRows: () => {\n return instance.getCoreRowModel().flatRows\n },\n\n getCoreRowsById: () => {\n return instance.getCoreRowModel().rowsById\n },\n\n // The final calls start at the bottom of the model,\n // expanded rows, which then work their way up\n\n getRowModel: () => {\n return instance.getPaginationRowModel()\n },\n\n getRows: () => {\n return instance.getRowModel().rows\n },\n\n getFlatRows: () => {\n return instance.getRowModel().flatRows\n },\n\n getRowsById: () => {\n return instance.getRowModel().rowsById\n },\n\n getRow: (id: string) => {\n const row = instance.getRowsById()[id]\n\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`getRow expected an ID, but got ${id}`)\n }\n throw new Error()\n }\n\n return row\n },\n\n getCell: (rowId: string, columnId: string) => {\n const row = instance.getRow(rowId)\n\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`[React Table] could not find row with id ${rowId}`)\n }\n throw new Error()\n }\n\n const cell = row.getAllCellsByColumnId()[columnId]\n\n if (!cell) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n `[React Table] could not find cell ${columnId} in row ${rowId}`\n )\n }\n throw new Error()\n }\n\n return cell\n },\n\n getTableProps: userProps => {\n return propGetter(\n {\n role: 'table',\n },\n userProps\n )\n },\n\n getTableBodyProps: userProps => {\n return propGetter(\n {\n role: 'rowgroup',\n },\n userProps\n )\n },\n\n getRowProps: (rowId, userProps) => {\n const row = instance.getRow(rowId)\n if (!row) {\n return\n }\n\n return propGetter(\n {\n key: row.id,\n role: 'row',\n },\n userProps\n )\n },\n\n getCellProps: (rowId, columnId, userProps) => {\n const cell = instance.getCell(rowId, columnId)\n\n if (!cell) {\n return\n }\n\n return propGetter(\n {\n key: cell.id,\n role: 'gridcell',\n },\n userProps\n )\n },\n\n getTableWidth: () =>\n instance.getHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getWidth()\n }, 0) ?? 0,\n getLeftTableWidth: () =>\n instance.getLeftHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getWidth()\n }, 0) ?? 0,\n getCenterTableWidth: () =>\n instance.getCenterHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getWidth()\n }, 0) ?? 0,\n getRightTableWidth: () =>\n instance.getRightHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getWidth()\n }, 0) ?? 0,\n }\n\n instance = Object.assign(instance, finalInstance)\n\n // This won't trigger a rerender yet, but it will force\n // pagination derivation to run (particularly pageSize detection)\n instance.setPagination(d => d)\n\n return instance\n}\n","import { ReactTable, Row, RowModel } from '../types'\n\nexport function columnFilterRowsFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n const columnFilters = instance.getState().columnFilters\n\n const newFilteredFlatRows: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] = []\n const newFilteredRowsById: Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n > = {}\n\n const filterFromChildrenUp = instance.options.filterFromChildrenUp\n\n const filterRows = (\n rowsToFilter: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[],\n depth: number\n ) => {\n columnFilters.forEach(({ id: columnId, value: filterValue }) => {\n // Find the columnFilters column\n const column = instance.getColumn(columnId)\n\n if (!column) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `React-Table: Could not find a column with id: ${columnId}`\n )\n }\n throw new Error()\n }\n\n if (depth === 0) {\n const preFilteredRows = [...rowsToFilter]\n column.getPreFilteredRows = () => preFilteredRows\n }\n\n const filterFn = instance.getColumnFilterFn(column.id)\n\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Could not find a valid 'column.filterType' for column with the ID: ${column.id}.`\n )\n }\n return\n }\n\n // Pass the rows, id, filterValue and column to the filterFn\n // to get the filtered rows back\n rowsToFilter = filterFn(rowsToFilter, [columnId], filterValue)\n })\n\n return rowsToFilter\n }\n\n if (filterFromChildrenUp) {\n const recurseFilterRows = (\n rowsToFilter: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[],\n depth = 0\n ) => {\n // Filter from children up\n rowsToFilter = rowsToFilter.filter(row => {\n if (!row.subRows?.length) {\n return true\n }\n\n row.subRows = recurseFilterRows(row.subRows, depth + 1)\n\n return row.subRows.length\n })\n\n rowsToFilter = filterRows(rowsToFilter, depth)\n\n // Apply the filter to any subRows\n rowsToFilter.forEach(row => {\n newFilteredFlatRows.push(row)\n newFilteredRowsById[row.id] = row\n })\n\n return rowsToFilter\n }\n\n return {\n rows: recurseFilterRows(rowModel.rows),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById,\n }\n }\n\n // Filters top level and nested rows\n const recurseFilterRows = (\n rowsToFilter: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[],\n depth = 0\n ) => {\n // Filter from parents downward\n rowsToFilter = filterRows(rowsToFilter, depth)\n\n // Apply the filter to any subRows\n // We technically could do this recursively in the above loop,\n // but that would severely hinder the API for the user, since they\n // would be required to do that recursion in some scenarios\n rowsToFilter.forEach(row => {\n newFilteredFlatRows.push(row)\n newFilteredRowsById[row.id] = row\n\n if (!filterFromChildrenUp) {\n if (!row.subRows?.length) {\n return\n }\n\n row.subRows = recurseFilterRows(row.subRows, depth + 1)\n }\n })\n\n return rowsToFilter\n }\n\n return {\n rows: recurseFilterRows(rowModel.rows),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById,\n }\n}\n","import * as React from 'react'\nimport { Cell, Column, Row } from '.'\nimport { createTableInstance } from './core'\nimport {\n ReactTable,\n ColumnDef,\n AccessorFn,\n Options,\n Renderable,\n Header,\n} from './types'\nimport { Overwrite } from './utils'\n\nexport type TableHelper<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n> = {\n RowType<TTData>(): TableHelper<\n TTData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n\n FilterFns: <TTFilterFns>(\n filterFns: TTFilterFns\n ) => TableHelper<TData, TValue, TTFilterFns, TSortingFns, TAggregationFns>\n\n SortingFns: <TTSortingFns>(\n sortingFns: TTSortingFns\n ) => TableHelper<TData, TValue, TFilterFns, TTSortingFns, TAggregationFns>\n\n AggregationFns: <TTAggregationFns>(\n aggregationFns: TTAggregationFns\n ) => TableHelper<TData, TValue, TFilterFns, TSortingFns, TTAggregationFns>\n\n createColumns: (\n columns: ColumnDef<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[]\n ) => ColumnDef<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n\n createGroup: (\n column: Overwrite<\n ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>,\n | {\n __generated?: never\n accessorFn?: never\n accessorKey?: never\n header: string\n id?: string\n }\n | {\n __generated?: never\n accessorFn?: never\n accessorKey?: never\n id: string\n header?:\n | string\n | Renderable<{\n instance: ReactTable<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n header: Header<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n column: Column<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n }>\n }\n >\n ) => ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>\n\n createDisplayColumn: (\n column: Overwrite<\n ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>,\n { __generated?: never; accessorFn?: never; accessorKey?: never }\n >\n ) => ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>\n\n createDataColumn: <TAccessor extends AccessorFn<TData> | keyof TData>(\n accessor: TAccessor,\n column: TAccessor extends (...args: any[]) => any\n ? // Accessor Fn\n Overwrite<\n ColumnDef<\n TData,\n ReturnType<TAccessor>,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >,\n {\n __generated?: never\n accessorFn?: never\n accessorKey?: never\n id: string\n }\n >\n : TAccessor extends keyof TData\n ? // Accessor Key\n Overwrite<\n ColumnDef<\n TData,\n TData[TAccessor],\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >,\n {\n __generated?: never\n accessorFn?: never\n accessorKey?: never\n id?: string\n }\n >\n : never\n ) => ColumnDef<\n TData,\n TAccessor extends (...args: any[]) => any\n ? ReturnType<TAccessor>\n : TAccessor extends keyof TData\n ? TData[TAccessor]\n : never,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n\n useTable: <TData, TValue, TFilterFns, TSortingFns, TAggregationFns>(\n options: Options<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ) => ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n\n types: {\n instance: ReactTable<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n columnDef: ColumnDef<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n cell: Cell<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n }\n}\n\nexport function createTable<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(): TableHelper<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n return {\n RowType: () => createTable(),\n FilterFns: () => createTable(),\n SortingFns: () => createTable(),\n AggregationFns: () => createTable(),\n createColumns: columns => columns,\n createDisplayColumn: column => ({\n ...column,\n __generated: true,\n }),\n createGroup: column => ({\n ...column,\n __generated: true,\n }),\n createDataColumn: (accessor, column) => {\n column = {\n ...column,\n id: column.id,\n }\n\n if (typeof accessor === 'string') {\n return {\n ...column,\n id: column.id ?? accessor,\n accessorKey: accessor,\n __generated: true,\n }\n }\n\n if (typeof accessor === 'function') {\n return {\n ...column,\n accessorFn: accessor,\n __generated: true,\n }\n }\n\n throw new Error('Invalid accessor')\n },\n useTable: <TData, TValue, TFilterFns, TSortingFns, TAggregationFns>(\n options: Options<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n ): ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> => {\n const instanceRef = React.useRef<\n ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n >(undefined!)\n\n const unsafeRerender = React.useReducer(() => ({}), {})[1]\n\n const isMountedRef = React.useRef(false)\n\n const rerender = React.useCallback(() => {\n if (!isMountedRef.current) {\n return\n }\n\n unsafeRerender()\n }, [])\n\n React.useLayoutEffect(() => {\n isMountedRef.current = true\n return () => {\n isMountedRef.current = false\n }\n })\n\n if (!instanceRef.current) {\n instanceRef.current = createTableInstance<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >(options, rerender)\n }\n\n instanceRef.current.updateOptions(options)\n\n return instanceRef.current\n },\n types: undefined as any,\n } as TableHelper<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n}\n","import { ReactTable, Row, RowModel } from '../types'\n\nexport function globalFilterRowsFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n const globalFilter = instance.getState().globalFilter\n const newFilteredFlatRows: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] = []\n const newFilteredRowsById: Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n > = {}\n\n const filterFromChildrenUp = instance.options.filterFromChildrenUp\n\n const filterFn = instance.getGlobalFilterFn()\n\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Could not find a valid 'globalFilterType'`)\n }\n return rowModel\n }\n\n const filterableColumns = instance\n .getAllLeafColumns()\n .filter(column => column.getCanGlobalFilter())\n\n const filterableColumnIds = filterableColumns.map(d => d.id)\n\n if (filterFromChildrenUp) {\n const recurseFilterRows = (\n rowsToFilter: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[],\n depth = 0\n ) => {\n // Filter from children up\n rowsToFilter = rowsToFilter.filter(row => {\n if (!row.subRows?.length) {\n return true\n }\n\n row.subRows = recurseFilterRows(row.subRows, depth + 1)\n\n return row.subRows.length\n })\n\n rowsToFilter = filterFn(rowsToFilter, filterableColumnIds, globalFilter)\n\n // Apply the filter to any subRows\n rowsToFilter.forEach(row => {\n newFilteredFlatRows.push(row)\n newFilteredRowsById[row.id] = row\n })\n\n return rowsToFilter\n }\n\n return {\n rows: recurseFilterRows(rowModel.rows),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById,\n }\n }\n\n // Filters top level and nested rows\n const recurseFilterRows = (\n rowsToFilter: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[],\n depth = 0\n ) => {\n // Filter from parents downward\n rowsToFilter = filterFn(rowsToFilter, filterableColumnIds, globalFilter)\n\n // Apply the filter to any subRows\n // We technically could do this recursively in the above loop,\n // but that would severely hinder the API for the user, since they\n // would be required to do that recursion in some scenarios\n rowsToFilter.forEach(row => {\n newFilteredFlatRows.push(row)\n newFilteredRowsById[row.id] = row\n\n if (!filterFromChildrenUp) {\n if (!row.subRows?.length) {\n return\n }\n\n row.subRows = recurseFilterRows(row.subRows, depth + 1)\n }\n })\n\n return rowsToFilter\n }\n\n return {\n rows: recurseFilterRows(rowModel.rows),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById,\n }\n}\n","import { ReactTable, Row, RowModel } from '../types'\nimport { flattenBy } from '../utils'\n\nexport function groupRowsFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n sortedRowModel: RowModel<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n): RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n const groupingState = instance.getState().grouping\n // Filter the grouping list down to columns that exist\n const existingGrouping = groupingState.filter(columnId =>\n instance.getColumn(columnId)\n )\n\n // Find the columns that can or are aggregating\n // Uses each column to aggregate rows into a single value\n const aggregateRowsToValues = (\n leafRows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n groupedRows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n depth: number\n ) => {\n const values: Record<string, unknown> = {}\n\n instance.getAllLeafColumns().forEach(column => {\n // Don't aggregate columns that are in the grouping\n if (existingGrouping.includes(column.id)) {\n values[column.id] = groupedRows[0]\n ? groupedRows[0].values[column.id]\n : null\n return\n }\n\n // Aggregate the values\n const aggregateFn = instance.getColumnAggregationFn(column.id)\n\n if (aggregateFn) {\n // Get the columnValues to aggregate\n const groupedValues = groupedRows.map(row => row.values[column.id])\n\n // Get the columnValues to aggregate\n const leafValues = leafRows.map(row => {\n let columnValue = row.values[column.id]\n\n if (!depth && column.aggregateValue) {\n columnValue = column.aggregateValue(columnValue)\n }\n\n return columnValue\n })\n\n values[column.id] = aggregateFn(leafValues, groupedValues)\n } else if (column.aggregationType) {\n console.info({ column })\n throw new Error(\n process.env.NODE_ENV !== 'production'\n ? `React Table: Invalid column.aggregateType option for column listed above`\n : ''\n )\n } else {\n values[column.id] = null\n }\n })\n\n return values\n }\n\n const groupedFlatRows: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] = []\n const groupedRowsById: Record<\n string,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n > = {}\n // const onlyGroupedFlatRows: Row[] = [];\n // const onlyGroupedRowsById: Record<RowId, Row> = {};\n // const nonGroupedFlatRows: Row[] = [];\n // const nonGroupedRowsById: Record<RowId, Row> = {};\n\n // Recursively group the data\n const groupUpRecursively = (\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n depth = 0,\n parentId: string\n ) => {\n // This is the last level, just return the rows\n if (depth === existingGrouping.length) {\n return rows\n }\n\n const columnId = existingGrouping[depth]!\n\n // Group the rows together for this level\n const rowGroupsMap = groupBy(rows, columnId)\n\n // Peform aggregations for each group\n const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map(\n ([groupingValue, groupedRows], index) => {\n let id = `${columnId}:${groupingValue}`\n id = parentId ? `${parentId}>${id}` : id\n\n // First, Recurse to group sub rows before aggregation\n const subRows = groupUpRecursively(groupedRows, depth + 1, id)\n\n // Flatten the leaf rows of the rows in this group\n const leafRows = depth\n ? flattenBy(groupedRows, row => row.leafRows)\n : groupedRows\n\n const values = aggregateRowsToValues(leafRows, groupedRows, depth)\n\n const row = instance.createRow(id, undefined, index, depth, values)\n\n Object.assign(row, {\n groupingColumnId: columnId,\n groupingValue,\n subRows,\n leafRows,\n })\n\n subRows.forEach(subRow => {\n groupedFlatRows.push(subRow)\n groupedRowsById[subRow.id] = subRow\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n })\n\n return row\n }\n )\n\n return aggregatedGroupedRows\n }\n\n const groupedRows = groupUpRecursively(sortedRowModel.rows, 0, '')\n\n groupedRows.forEach(subRow => {\n groupedFlatRows.push(subRow)\n groupedRowsById[subRow.id] = subRow\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n })\n\n return {\n rows: groupedRows,\n flatRows: groupedFlatRows,\n rowsById: groupedRowsById,\n }\n}\n\nfunction groupBy<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>(\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],\n columnId: string\n) {\n const groupMap = new Map<\n any,\n Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n >()\n\n return rows.reduce((map, row) => {\n const resKey = `${row.values[columnId]}`\n const previous = map.get(resKey)\n if (!previous) {\n map.set(resKey, [row])\n } else {\n map.set(resKey, [...previous, row])\n }\n return map\n }, groupMap)\n}\n","import { ReactTable, RowModel } from '../types'\nimport { expandRowsFn } from './expandRowsFn'\n\nexport function paginateRowsFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n const { pageSize, pageIndex } = instance.getState().pagination\n let { rows, flatRows, rowsById } = rowModel\n const pageStart = pageSize * pageIndex\n const pageEnd = pageStart + pageSize\n\n rows = rows.slice(pageStart, pageEnd)\n\n if (!instance.options.paginateExpandedRows) {\n return expandRowsFn(instance, {\n rows,\n flatRows,\n rowsById,\n })\n }\n\n return {\n rows,\n flatRows,\n rowsById,\n }\n}\n","import { ReactTable, Row, RowModel } from '../types'\nimport { SortingFn } from '../features/Sorting'\n\nexport function sortRowsFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n>(\n instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,\n rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>\n): RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {\n const sortingState = instance.getState().sorting\n\n const sortedFlatRows: Row<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >[] = []\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sortingState.filter(sort =>\n instance.getColumnCanSort(sort.id)\n )\n\n const columnInfoById: Record<\n string,\n {\n sortUndefined?: false | -1 | 1\n invertSorting?: boolean\n sortingFn: SortingFn<\n TData,\n TValue,\n TFilterFns,\n TSortingFns,\n TAggregationFns\n >\n }\n > = {}\n\n availableSorting.forEach(sortEntry => {\n const column = instance.getColumn(sortEntry.id)!\n\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.sortUndefined,\n invertSorting: column.invertSorting,\n sortingFn: instance.getColumnSortingFn(sortEntry.id)!,\n }\n })\n\n const sortData = (\n rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]\n ) => {\n // This will also perform a stable sorting using the row index\n // if needed.\n const sortedData = rows.slice()\n\n sortedData.sort((rowA, rowB) => {\n for (let i = 0; i < availableSorting.length; i += 1) {\n const sortEntry = availableSorting[i]!\n const columnInfo = columnInfoById[sortEntry.id]!\n const isDesc = sortEntry?.desc ?? false\n\n if (columnInfo.sortUndefined) {\n const aValue = rowA.values[sortEntry.id]\n const bValue = rowB.values[sortEntry.id]\n\n const aUndefined = typeof aValue === 'undefined'\n const bUndefined = typeof bValue === 'undefined'\n\n if (aUndefined || bUndefined) {\n return aUndefined && bUndefined ? 0 : aUndefined ? 1 : -1\n }\n }\n\n // This function should always return in ascending order\n let sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id)\n\n if (sortInt !== 0) {\n if (isDesc) {\n sortInt *= -1\n }\n\n if (columnInfo.invertSorting) {\n sortInt *= -1\n }\n\n return sortInt\n }\n }\n\n return rowA.index - rowB.index\n })\n\n // If there are sub-rows, sort them\n sortedData.forEach(row => {\n sortedFlatRows.push(row)\n if (!row.subRows || row.subRows.length <= 1) {\n return\n }\n row.subRows = sortData(row.subRows)\n })\n\n return sortedData\n }\n\n return {\n rows: sortData(rowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: rowModel.rowsById,\n }\n}\n"],"names":["functionalUpdate","updater","input","makeStateUpdater","key","instance","setState","old","isFunction","d","Function","flattenBy","arr","getChildren","flat","recurse","subArr","forEach","item","push","children","length","propGetter","initial","getter","memo","getDeps","fn","opts","result","deps","newDeps","some","dep","index","debug","console","info","map","_","filter","Boolean","reduce","accu","curr","slice","parent","oldResult","onChange","undefined","flexRender","Comp","props","component","proto","Object","getPrototypeOf","prototype","isReactComponent","isClassComponent","$$typeof","includes","description","isExoticComponent","React","expandRowsFn","sortedRowModel","expandedRows","expandSubRows","options","rows","handleRow","row","subRows","_row$subRows","getIsRowExpanded","id","flatRows","rowsById","columnVisibility","onColumnVisibilityChange","defaultIsVisible","column","getCanHide","getColumnCanHide","getIsVisible","getColumnIsVisible","toggleVisibility","value","toggleColumnVisibility","getToggleVisibilityProps","userProps","type","checked","title","e","target","getVisibleFlatColumns","getAllFlatColumns","join","allFlatColumns","getVisibleLeafColumns","getAllLeafColumns","setColumnVisibility","getState","columnId","toggleAllColumnsVisible","getIsAllColumnsVisible","obj","getColumn","Error","_instance$getState$co2","enableHiding","defaultCanHide","getIsSomeColumnsVisible","getToggleAllColumnsVisibilityProps","_e$target","indeterminate","aggregationTypes","sum","_leafValues","childValues","next","min","max","extent","mean","leafValues","count","median","values","Math","unique","Array","from","Set","uniqueCount","size","orderColumns","leafColumns","grouping","groupedColumnMode","nonGroupingColumns","col","groupingColumns","g","find","aggregationType","onGroupingChange","autoResetGrouping","getCanGroup","getColumnCanGroup","getGroupedIndex","getColumnGroupedIndex","getIsGrouped","getColumnIsGrouped","toggleGrouping","toggleColumnGrouping","getToggleGroupingProps","registered","_notifyGroupingReset","autoResetAll","resetGrouping","getColumnAutoAggregationFn","firstRow","getCoreFlatRows","toString","call","getColumnAggregationFn","userAggregationTypes","getColumnAutoFilterFn","setGrouping","enableGrouping","defaultCanGroup","accessorFn","_instance$getState$gr","_instance$getState$gr2","indexOf","initialState","_instance$initialStat2","canGroup","onClick","persist","getRowIsGrouped","rowId","getRow","_instance$getRow","groupingColumnId","getGroupedRowModel","getSortedRowModel","groupRowsFn","rowModel","_notifyExpandedReset","getPreGroupedRows","getPreGroupedFlatRows","getPreGroupedRowsById","getGroupedRows","getGroupedFlatRows","getGroupedRowsById","cell","_instance","getIsPlaceholder","getIsAggregated","columnOrder","onColumnOrderChange","setColumnOrder","resetColumnOrder","getOrderColumnsFn","columns","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","shift","foundIndex","findIndex","splice","Grouping","columnPinning","left","right","onColumnPinningChange","getCanPin","getColumnCanPin","getPinnedIndex","getColumnPinnedIndex","getIsPinned","getColumnIsPinned","pin","position","pinColumn","setColumnPinning","resetColumnPinning","columnIds","getLeafColumns","enablePinning","defaultCanPin","leafColumnIds","isLeft","isRight","_instance$getState$co3","_instance$getState$co4","buildHeaderGroups","allColumns","columnsToGroup","headerFamily","maxDepth","findMaxDepth","depth","_column$columns","headerGroups","createHeaderGroup","headersToGroup","headerGroup","headers","getHeaderGroupProps","getterValue","getFooterGroupProps","parentHeaders","headerToGroup","latestParentHeader","reverse","isPlaceholder","header","createHeader","placeholderId","subHeaders","recurseHeadersForSpans","colSpan","rowSpan","childRowSpans","childColSpan","childRowSpan","_headerGroups$","_getAllVisibleCells","getAllCells","getVisibleCells","getLeftVisibleCells","getCenterVisibleCells","getRightVisibleCells","center","allCells","leftAndRight","getWidth","getLeafHeaders","leafHeaders","recurseHeader","h","getHeaderProps","getFooterProps","renderHeader","renderFooter","footer","getHeaderGroups","getAllColumns","leftColumns","rightColumns","centerColumns","getCenterHeaderGroups","getLeftHeaderGroups","getRightHeaderGroups","getFooterGroups","getLeftFooterGroups","getCenterFooterGroups","getRightFooterGroups","getFlatHeaders","getLeftFlatHeaders","getCenterFlatHeaders","getRightFlatHeaders","getCenterLeafHeaders","flatHeaders","_header$subHeaders","getLeftLeafHeaders","_header$subHeaders2","getRightLeafHeaders","_header$subHeaders3","_left$","_center$","_right$","getHeader","role","initialProps","getTotalWidth","width","filterTypes","includesString","includesStringSensitive","equalsString","equalsStringSensitive","arrIncludes","arrIncludesAll","equals","weakEquals","betweenNumberRange","filterValue","search","String","toLowerCase","rowValue","every","val","unsafeMin","unsafeMax","parsedMin","parseFloat","parsedMax","Number","isNaN","Infinity","temp","testFalsey","shouldAutoRemoveFilter","filterFn","autoRemove","filterType","columnFilters","globalFilter","onColumnFiltersChange","onGlobalFilterChange","autoResetColumnFilters","filterFromChildrenUp","autoResetGlobalFilter","globalFilterType","getColumnCanGlobalFilterFn","_instance$getCoreFlat","getAllCellsByColumnId","_instance$getCoreFlat2","getFacetInfo","getPreFilteredRows","preFilteredUniqueValues","Map","preFilteredMinMaxValues","_rows$","_rows$2","i","_rows$i","has","set","get","getCanColumnFilter","getColumnCanColumnFilter","getCanGlobalFilter","getColumnCanGlobalFilter","getColumnFilterIndex","getIsColumnFiltered","getColumnIsFiltered","getColumnFilterValue","setColumnFilterValue","getPreFilteredUniqueValues","getPreFilteredMinMaxValues","_notifyFiltersReset","resetSorting","resetColumnFilters","resetGlobalFilter","isArray","getGlobalAutoFilterFn","getColumnFilterFn","userFilterTypes","getGlobalFilterFn","setColumnFilters","updateFn","_functionalUpdate","setGlobalFilter","enableAllFilters","enableColumnFilter","enableFilters","enableColumnFilters","defaultCanFilter","defaultCanColumnFilter","enableGlobalFilter","defaultCanGlobalFilter","_instance$getState$co","previousfilter","newFilter","newFilterObj","getColumnFilteredRowModel","getCoreRowModel","columnFilterRowsFn","columnFiltersFn","columnFilteredRowModel","_instance$getState$co5","getPreFilteredRowModel","getPreFilteredFlatRows","getPreFilteredRowsById","getPreColumnFilteredRows","getPreColumnFilteredFlatRows","getPreColumnFilteredRowsById","getColumnFilteredRows","getColumnFilteredFlatRows","getColumnFilteredRowsById","getGlobalFilteredRowModel","globalFilterRowsFn","globalFilterValue","globalFiltersFn","globalFilteredRowModel","_instance$getState$co6","_notifySortingReset","getPreGlobalFilteredRows","getPreGlobalFilteredFlatRows","getPreGlobalFilteredRowsById","getGlobalFilteredRows","getGlobalFilteredFlatRows","getGlobalFilteredRowsById","reSplitAlphaNumeric","sortTypes","alphanumeric","rowA","rowB","compareAlphanumeric","alphanumericCaseSensitive","text","compareBasic","textCaseSensitive","datetime","getTime","basic","aStr","bStr","a","split","b","aa","bb","an","parseInt","bn","combo","sort","sortType","sorting","onSortingChange","autoResetSorting","isMultiSortEvent","shiftKey","getCanSort","getColumnCanSort","getCanMultiSort","getColumnCanMultiSort","getSortIndex","getColumnSortIndex","getIsSorted","getColumnIsSorted","toggleSorting","desc","isMulti","toggleColumnSorting","getToggleSortingProps","getColumnAutoSortingFn","isString","getColumnAutoSortDir","getColumnSortingFn","userSortTypes","setSorting","multi","sortAction","existingSorting","existingIndex","hasDescDefined","newSorting","sortDescFirst","enableSortingRemoval","enableMultiRemove","maxMultiSortColCount","MAX_SAFE_INTEGER","enableSorting","defaultCanSort","enableMultiSort","columnSort","_instance$getState$so","_instance$getState$so3","canSort","sortRowsFn","sortingFn","getPreSortedRows","getPreSortedFlatRows","getPreSortedRowsById","getSortedRows","getSortedFlatRows","getSortedRowsById","expanded","onExpandedChange","autoResetExpanded","original","paginateExpandedRows","resetExpanded","setExpanded","toggleRowExpanded","exists","oldExpanded","keys","getRowsById","toggleAllRowsExpanded","getIsAllRowsExpanded","getRowCanExpand","enableExpanded","defaultCanExpand","getToggleExpandedProps","canExpand","getToggleAllRowsExpandedProps","getExpandedDepth","splitId","getExpandedRowModel","_notifyPageIndexReset","getPreExpandedRows","getPreExpandedFlatRows","getPreExpandedRowsById","getExpandedRows","getExpandedFlatRows","getExpandedRowsById","toggleExpanded","getIsExpanded","getCanExpand","stopPropagation","defaultColumnSizing","minWidth","maxWidth","passiveSupported","passiveEventSupported","supported","passive","noop","window","addEventListener","removeEventListener","err","isTouchStartEvent","columnSizing","columnSizingInfo","startOffset","startSize","deltaOffset","deltaPercentage","isResizingColumn","columnSizingStart","columnResizeMode","onColumnSizingChange","onColumnSizingInfoChange","setColumnSizing","setColumnSizingInfo","resetColumnSizing","resetHeaderSizeInfo","resetColumnSize","resetHeaderSize","headerId","getHeaderCanResize","getColumnCanResize","enableResizing","enableColumnResizing","defaultCanResize","getColumnIsResizing","getHeaderIsResizing","getColumnResizerProps","canResize","getCanResize","onResizeStart","touches","clientX","round","updateOffset","eventType","clientXPos","newColumnSizing","headerWidth","onMove","onEnd","mouseEvents","moveHandler","upHandler","document","touchEvents","cancelable","preventDefault","passiveIfSupported","draggable","onMouseDown","onTouchStart","getIsResizing","resetSize","getResizerProps","pagination","pageIndex","pageSize","onPaginationChange","autoResetPageIndex","resetPageSize","setPagination","safeUpdater","newState","paginateRowsFn","pageCount","getPrePaginationRows","ceil","resetPagination","setPageIndex","maxPageIndex","resetPageIndex","setPageSize","_instance$initialStat3","_instance$initialStat4","topRowIndex","floor","setPageCount","newPageCount","getPageOptions","pageOptions","fill","getCanPreviousPage","getCanNextPage","previousPage","nextPage","getPaginationRowModel","_pagination","getPrePaginationFlatRows","getPrePaginationRowsById","getPaginationRows","getPaginationFlatRows","getPaginationRowsById","getInitialState","rowSelection","mutateRowIsSelected","selectedRowIds","getRowCanSelectSubRows","selectRowsFn","newSelectedFlatRows","newSelectedRowsById","recurseRows","isSelected","isRowSelected","_row$subRows2","selection","allChildrenSelected","someSelected","subRow","features","Visibility","Ordering","Pinning","Headers","Filters","Sorting","Expanding","ColumnSizing","Pagination","onRowSelectionChange","autoResetRowSelection","enableRowSelection","enableMultiRowSelection","enableSubRowSelection","_notifyRowSelectionReset","resetRowSelection","setRowSelection","toggleAllRowsSelected","getIsAllRowsSelected","assign","preGroupedFlatRows","toggleAllPageRowsSelected","getIsAllPageRowsSelected","getRows","toggleRowSelected","getIsSelected","getSelectedRowModel","getSelectedRows","getSelectedFlatRows","getSelectedRowsById","getFilteredSelectedRowModel","getFilteredSelectedRows","getFilteredSelectedFlatRows","getFilteredSelectedRowsById","getGroupedSelectedRowModel","getGroupedSelectedRows","getGroupedSelectedFlatRows","getGroupedSelectedRowsById","getRowIsSelected","getRowIsSomeSelected","getRowCanSelect","getRowCanMultiSelect","preFilteredFlatRows","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","getIsSomeRowsSelected","getIsSomePageRowsSelected","getToggleRowSelectedProps","isSomeSelected","getIsSomeSelected","canSelect","getCanSelect","toggleSelected","getToggleAllRowsSelectedProps","isSomeRowsSelected","getToggleAllPageRowsSelectedProps","isSomePageRowsSelected","getToggleSelectedProps","getCanMultiSelect","newFilteredFlatRows","newFilteredRowsById","filterRows","rowsToFilter","preFilteredRows","recurseFilterRows","createTable","RowType","FilterFns","SortingFns","AggregationFns","createColumns","createDisplayColumn","__generated","createGroup","createDataColumn","accessor","accessorKey","useTable","instanceRef","useRef","unsafeRerender","useReducer","isMountedRef","rerender","useCallback","current","useLayoutEffect","defaultOptions","feature","getDefaultOptions","defaultState","buildOptions","state","finalInstance","getInstance","internalState","reset","updateOptions","newOptions","getRowId","shouldRerender","onStateChange","getDefaultColumn","defaultColumn","getColumnDefs","createColumn","columnDef","originalRow","getColumnWidth","getFlatColumns","flatMap","_column$columns2","columnDefs","recurseColumns","getAllFlatColumnsById","flatColumns","acc","columnSize","createCell","getCellProps","renderCell","createRow","rowIndex","leafRows","getRowProps","data","accessRow","parentRows","getSubRows","originalSubRows","getCoreRows","getCoreRowsById","getRowModel","getFlatRows","getCell","getTableProps","getTableBodyProps","getTableWidth","_instance$getHeaderGr2","getLeftTableWidth","_instance$getLeftHead2","getCenterTableWidth","_instance$getCenterHe2","getRightTableWidth","_instance$getRightHea2","createTableInstance","types","filterableColumnIds","existingGrouping","groupedFlatRows","groupedRowsById","groupedRows","groupUpRecursively","parentId","rowGroupsMap","groupMap","resKey","previous","groupBy","aggregatedGroupedRows","entries","groupingValue","aggregateFn","groupedValues","columnValue","aggregateValue","aggregateRowsToValues","pageStart","pageEnd","sortingState","sortedFlatRows","availableSorting","columnInfoById","sortEntry","sortUndefined","invertSorting","sortData","sortedData","columnInfo","isDesc","aUndefined","bUndefined","sortInt"],"mappings":"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"}
1
+ {"version":3,"file":"index.production.js","sources":["../../../table-core/build/esm/index.js","../../src/index.tsx"],"sourcesContent":["/**\n * table-core\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction functionalUpdate(updater, input) {\n return typeof updater === 'function' ? updater(input) : updater;\n}\nfunction noop() {//\n}\nfunction makeStateUpdater(key, instance) {\n return updater => {\n instance.setState(old => {\n return { ...old,\n [key]: functionalUpdate(updater, old[key])\n };\n });\n };\n}\nfunction isFunction(d) {\n return d instanceof Function;\n}\nfunction flattenBy(arr, getChildren) {\n const flat = [];\n\n const recurse = subArr => {\n subArr.forEach(item => {\n flat.push(item);\n const children = getChildren(item);\n\n if (children != null && children.length) {\n recurse(children);\n }\n });\n };\n\n recurse(arr);\n return flat;\n}\nfunction memo(getDeps, fn, opts) {\n let deps = [];\n let result;\n return () => {\n let depTime;\n if (opts.key && opts.debug) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n\n if (!depsChanged) {\n return result;\n }\n\n deps = newDeps;\n let resultTime;\n if (opts.key && opts.debug) resultTime = Date.now();\n result = fn(...newDeps);\n opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);\n\n if (opts.key && opts.debug) {\n if (opts != null && opts.debug()) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n\n const pad = (str, num) => {\n str = String(str);\n\n while (str.length < num) {\n str = ' ' + str;\n }\n\n return str;\n };\n\n console.info(\"%c\\u23F1 \" + pad(resultEndTime, 5) + \" /\" + pad(depEndTime, 5) + \" ms\", \"\\n font-size: .6rem;\\n font-weight: bold;\\n color: hsl(\" + Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120)) + \"deg 100% 31%);\", opts == null ? void 0 : opts.key);\n }\n }\n\n return result;\n };\n}\n\n//\nconst Columns = {\n createInstance: instance => {\n return {\n getDefaultColumn: memo(() => [instance.options.defaultColumn], defaultColumn => {\n var _defaultColumn;\n\n defaultColumn = (_defaultColumn = defaultColumn) != null ? _defaultColumn : {};\n return {\n header: props => props.header.column.id,\n footer: props => props.header.column.id,\n cell: props => {\n var _props$getValue$toStr, _props$getValue$toStr2, _props$getValue;\n\n return (_props$getValue$toStr = (_props$getValue$toStr2 = (_props$getValue = props.getValue()).toString) == null ? void 0 : _props$getValue$toStr2.call(_props$getValue)) != null ? _props$getValue$toStr : null;\n },\n ...instance._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultColumn == null ? void 0 : feature.getDefaultColumn());\n }, {}),\n ...defaultColumn\n };\n }, {\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugColumns;\n },\n key: process.env.NODE_ENV === 'development' && 'getDefaultColumn'\n }),\n getColumnDefs: () => instance.options.columns,\n createColumn: (columnDef, depth, parent) => {\n var _ref, _columnDef$id;\n\n const defaultColumn = instance.getDefaultColumn();\n let id = (_ref = (_columnDef$id = columnDef.id) != null ? _columnDef$id : columnDef.accessorKey) != null ? _ref : typeof columnDef.header === 'string' ? columnDef.header : undefined;\n let accessorFn;\n\n if (columnDef.accessorFn) {\n accessorFn = columnDef.accessorFn;\n } else if (columnDef.accessorKey) {\n accessorFn = originalRow => originalRow[columnDef.accessorKey];\n }\n\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(columnDef.accessorFn ? \"Columns require an id when using an accessorFn\" : \"Columns require an id when using a non-string header\");\n }\n\n throw new Error();\n }\n\n let column = { ...defaultColumn,\n ...columnDef,\n id: \"\" + id,\n accessorFn,\n parent: parent,\n depth,\n columnDef,\n columnDefType: columnDef.columnDefType,\n columns: [],\n getFlatColumns: memo(() => [true], () => {\n var _column$columns;\n\n return [column, ...((_column$columns = column.columns) == null ? void 0 : _column$columns.flatMap(d => d.getFlatColumns()))];\n }, {\n key: process.env.NODE_ENV === 'production' && 'column.getFlatColumns',\n debug: () => {\n var _instance$options$deb2;\n\n return (_instance$options$deb2 = instance.options.debugAll) != null ? _instance$options$deb2 : instance.options.debugColumns;\n }\n }),\n getLeafColumns: memo(() => [instance._getOrderColumnsFn()], orderColumns => {\n var _column$columns2;\n\n if ((_column$columns2 = column.columns) != null && _column$columns2.length) {\n let leafColumns = column.columns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }\n\n return [column];\n }, {\n key: process.env.NODE_ENV === 'production' && 'column.getLeafColumns',\n debug: () => {\n var _instance$options$deb3;\n\n return (_instance$options$deb3 = instance.options.debugAll) != null ? _instance$options$deb3 : instance.options.debugColumns;\n }\n })\n };\n column = instance._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.createColumn == null ? void 0 : feature.createColumn(column, instance));\n }, column); // Yes, we have to convert instance to uknown, because we know more than the compiler here.\n\n return column;\n },\n getAllColumns: memo(() => [instance.getColumnDefs()], columnDefs => {\n const recurseColumns = function (columnDefs, parent, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n\n return columnDefs.map(columnDef => {\n const column = instance.createColumn(columnDef, depth, parent);\n column.columns = columnDef.columns ? recurseColumns(columnDef.columns, column, depth + 1) : [];\n return column;\n });\n };\n\n return recurseColumns(columnDefs);\n }, {\n key: process.env.NODE_ENV === 'development' && 'getAllColumns',\n debug: () => {\n var _instance$options$deb4;\n\n return (_instance$options$deb4 = instance.options.debugAll) != null ? _instance$options$deb4 : instance.options.debugColumns;\n }\n }),\n getAllFlatColumns: memo(() => [instance.getAllColumns()], allColumns => {\n return allColumns.flatMap(column => {\n return column.getFlatColumns();\n });\n }, {\n key: process.env.NODE_ENV === 'development' && 'getAllFlatColumns',\n debug: () => {\n var _instance$options$deb5;\n\n return (_instance$options$deb5 = instance.options.debugAll) != null ? _instance$options$deb5 : instance.options.debugColumns;\n }\n }),\n getAllFlatColumnsById: memo(() => [instance.getAllFlatColumns()], flatColumns => {\n return flatColumns.reduce((acc, column) => {\n acc[column.id] = column;\n return acc;\n }, {});\n }, {\n key: process.env.NODE_ENV === 'development' && 'getAllFlatColumnsById',\n debug: () => {\n var _instance$options$deb6;\n\n return (_instance$options$deb6 = instance.options.debugAll) != null ? _instance$options$deb6 : instance.options.debugColumns;\n }\n }),\n getAllLeafColumns: memo(() => [instance.getAllColumns(), instance._getOrderColumnsFn()], (allColumns, orderColumns) => {\n let leafColumns = allColumns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }, {\n key: process.env.NODE_ENV === 'development' && 'getAllLeafColumns',\n debug: () => {\n var _instance$options$deb7;\n\n return (_instance$options$deb7 = instance.options.debugAll) != null ? _instance$options$deb7 : instance.options.debugColumns;\n }\n }),\n getColumn: columnId => {\n const column = instance.getAllFlatColumnsById()[columnId];\n\n if (!column) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"[Table] Column with id \" + columnId + \" does not exist.\");\n }\n\n throw new Error();\n }\n\n return column;\n }\n };\n }\n};\n\n//\nconst Rows = {\n // createRow: <TGenerics extends TableGenerics>(\n // row: Row<TGenerics>,\n // instance: TableInstance<TGenerics>\n // ): CellsRow<TGenerics> => {\n // return {}\n // },\n createInstance: instance => {\n return {\n getRowId: (row, index, parent) => {\n var _instance$options$get;\n\n return (_instance$options$get = instance.options.getRowId == null ? void 0 : instance.options.getRowId(row, index, parent)) != null ? _instance$options$get : \"\" + (parent ? [parent.id, index].join('.') : index);\n },\n createRow: (id, original, rowIndex, depth, subRows) => {\n let row = {\n id,\n index: rowIndex,\n original,\n depth,\n valuesCache: {},\n getValue: columnId => {\n if (row.valuesCache.hasOwnProperty(columnId)) {\n return row.valuesCache[columnId];\n }\n\n const column = instance.getColumn(columnId);\n\n if (!column.accessorFn) {\n throw new Error();\n }\n\n row.valuesCache[columnId] = column.accessorFn(row.original, rowIndex);\n return row.valuesCache[columnId];\n },\n subRows: subRows != null ? subRows : [],\n getLeafRows: () => flattenBy(row.subRows, d => d.subRows)\n };\n\n for (let i = 0; i < instance._features.length; i++) {\n const feature = instance._features[i];\n Object.assign(row, feature == null ? void 0 : feature.createRow == null ? void 0 : feature.createRow(row, instance));\n }\n\n return row;\n },\n getCoreRowModel: () => {\n if (!instance._getCoreRowModel) {\n instance._getCoreRowModel = instance.options.getCoreRowModel(instance);\n }\n\n return instance._getCoreRowModel();\n },\n // The final calls start at the bottom of the model,\n // expanded rows, which then work their way up\n getRowModel: () => {\n return instance.getPaginationRowModel();\n },\n getRow: id => {\n const row = instance.getRowModel().rowsById[id];\n\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\"getRow expected an ID, but got \" + id);\n }\n\n throw new Error();\n }\n\n return row;\n }\n };\n }\n};\n\n//\nconst Cells = {\n createRow: (row, instance) => {\n return {\n getAllCells: memo(() => [instance.getAllLeafColumns()], leafColumns => {\n return leafColumns.map(column => {\n return instance.createCell(row, column, column.id);\n });\n }, {\n key: process.env.NODE_ENV === 'development' && 'row.getAllCells',\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugRows;\n }\n }),\n getAllCellsByColumnId: memo(() => [row.getAllCells()], allCells => {\n return allCells.reduce((acc, cell) => {\n acc[cell.columnId] = cell;\n return acc;\n }, {});\n }, {\n key: process.env.NODE_ENV === 'production' && 'row.getAllCellsByColumnId',\n debug: () => {\n var _instance$options$deb2;\n\n return (_instance$options$deb2 = instance.options.debugAll) != null ? _instance$options$deb2 : instance.options.debugRows;\n }\n })\n };\n },\n createInstance: instance => {\n return {\n createCell: (row, column, columnId) => {\n const cell = {\n id: row.id + \"_\" + column.id,\n rowId: row.id,\n columnId,\n row,\n column,\n getValue: () => row.getValue(columnId),\n renderCell: () => column.cell ? instance.render(column.cell, {\n instance,\n column,\n row,\n cell: cell,\n getValue: cell.getValue\n }) : null\n };\n\n instance._features.forEach(feature => {\n Object.assign(cell, feature.createCell == null ? void 0 : feature.createCell(cell, column, row, instance));\n }, {});\n\n return cell;\n },\n getCell: (rowId, columnId) => {\n const row = instance.getRow(rowId);\n\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\"[Table] could not find row with id \" + rowId);\n }\n\n throw new Error();\n }\n\n const cell = row.getAllCellsByColumnId()[columnId];\n\n if (!cell) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\"[Table] could not find cell \" + columnId + \" in row \" + rowId);\n }\n\n throw new Error();\n }\n\n return cell;\n }\n };\n }\n};\n\n//\nconst defaultColumnSizing = {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER\n};\n\nconst getDefaultColumnSizingInfoState = () => ({\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: []\n});\n\nconst ColumnSizing = {\n getDefaultColumn: () => {\n return defaultColumnSizing;\n },\n getInitialState: state => {\n return {\n columnSizing: {},\n columnSizingInfo: getDefaultColumnSizingInfoState(),\n ...state\n };\n },\n getDefaultOptions: instance => {\n return {\n columnResizeMode: 'onEnd',\n onColumnSizingChange: makeStateUpdater('columnSizing', instance),\n onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', instance)\n };\n },\n createColumn: (column, instance) => {\n return {\n getSize: () => {\n var _column$minSize, _ref, _column$maxSize;\n\n const columnSize = instance.getState().columnSizing[column.id];\n return Math.min(Math.max((_column$minSize = column.minSize) != null ? _column$minSize : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.size) != null ? _ref : defaultColumnSizing.size), (_column$maxSize = column.maxSize) != null ? _column$maxSize : defaultColumnSizing.maxSize);\n },\n getStart: position => {\n const columns = !position ? instance.getVisibleLeafColumns() : position === 'left' ? instance.getLeftVisibleLeafColumns() : instance.getRightVisibleLeafColumns();\n const index = columns.findIndex(d => d.id === column.id);\n\n if (index > 0) {\n const prevSiblingColumn = columns[index - 1];\n return prevSiblingColumn.getStart(position) + prevSiblingColumn.getSize();\n }\n\n return 0;\n },\n resetSize: () => {\n instance.setColumnSizing(_ref2 => {\n let {\n [column.id]: _,\n ...rest\n } = _ref2;\n return rest;\n });\n },\n getCanResize: () => {\n var _column$enableResizin, _instance$options$ena;\n\n return ((_column$enableResizin = column.enableResizing) != null ? _column$enableResizin : true) && ((_instance$options$ena = instance.options.enableColumnResizing) != null ? _instance$options$ena : true);\n },\n getIsResizing: () => {\n return instance.getState().columnSizingInfo.isResizingColumn === column.id;\n }\n };\n },\n createHeader: (header, instance) => {\n return {\n getSize: () => {\n let sum = 0;\n\n const recurse = header => {\n if (header.subHeaders.length) {\n header.subHeaders.forEach(recurse);\n } else {\n var _header$column$getSiz;\n\n sum += (_header$column$getSiz = header.column.getSize()) != null ? _header$column$getSiz : 0;\n }\n };\n\n recurse(header);\n return sum;\n },\n getStart: () => {\n if (header.index > 0) {\n const prevSiblingHeader = header.headerGroup.headers[header.index - 1];\n return prevSiblingHeader.getStart() + prevSiblingHeader.getSize();\n }\n\n return 0;\n },\n getResizeHandler: () => {\n const column = instance.getColumn(header.column.id);\n const canResize = column.getCanResize();\n return e => {\n if (!canResize) {\n return;\n }\n e.persist == null ? void 0 : e.persist();\n\n if (isTouchStartEvent(e)) {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return;\n }\n }\n\n const startSize = column.getSize();\n const columnSizingStart = header ? header.getLeafHeaders().map(d => [d.column.id, d.column.getSize()]) : [[column.id, column.getSize()]];\n const clientX = isTouchStartEvent(e) ? Math.round(e.touches[0].clientX) : e.clientX;\n\n const updateOffset = (eventType, clientXPos) => {\n if (typeof clientXPos !== 'number') {\n return;\n }\n\n let newColumnSizing = {};\n instance.setColumnSizingInfo(old => {\n var _old$startOffset, _old$startSize;\n\n const deltaOffset = clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0);\n const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999);\n old.columnSizingStart.forEach(_ref3 => {\n let [columnId, headerSize] = _ref3;\n newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100;\n });\n return { ...old,\n deltaOffset,\n deltaPercentage\n };\n });\n\n if (instance.options.columnResizeMode === 'onChange' || eventType === 'end') {\n instance.setColumnSizing(old => ({ ...old,\n ...newColumnSizing\n }));\n }\n };\n\n const onMove = clientXPos => updateOffset('move', clientXPos);\n\n const onEnd = clientXPos => {\n updateOffset('end', clientXPos);\n instance.setColumnSizingInfo(old => ({ ...old,\n isResizingColumn: false,\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n columnSizingStart: []\n }));\n };\n\n const mouseEvents = {\n moveHandler: e => onMove(e.clientX),\n upHandler: e => {\n document.removeEventListener('mousemove', mouseEvents.moveHandler);\n document.removeEventListener('mouseup', mouseEvents.upHandler);\n onEnd(e.clientX);\n }\n };\n const passiveIfSupported = passiveEventSupported() ? {\n passive: false\n } : false;\n\n if (isTouchStartEvent(e)) ; else {\n document.addEventListener('mousemove', mouseEvents.moveHandler, passiveIfSupported);\n document.addEventListener('mouseup', mouseEvents.upHandler, passiveIfSupported);\n }\n\n instance.setColumnSizingInfo(old => ({ ...old,\n startOffset: clientX,\n startSize,\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart,\n isResizingColumn: column.id\n }));\n };\n }\n };\n },\n createInstance: instance => {\n return {\n setColumnSizing: updater => instance.options.onColumnSizingChange == null ? void 0 : instance.options.onColumnSizingChange(updater),\n setColumnSizingInfo: updater => instance.options.onColumnSizingInfoChange == null ? void 0 : instance.options.onColumnSizingInfoChange(updater),\n resetColumnSizing: defaultState => {\n var _instance$initialStat;\n\n instance.setColumnSizing(defaultState ? {} : (_instance$initialStat = instance.initialState.columnSizing) != null ? _instance$initialStat : {});\n },\n resetHeaderSizeInfo: defaultState => {\n var _instance$initialStat2;\n\n instance.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_instance$initialStat2 = instance.initialState.columnSizingInfo) != null ? _instance$initialStat2 : getDefaultColumnSizingInfoState());\n },\n getTotalSize: () => {\n var _instance$getHeaderGr, _instance$getHeaderGr2;\n\n return (_instance$getHeaderGr = (_instance$getHeaderGr2 = instance.getHeaderGroups()[0]) == null ? void 0 : _instance$getHeaderGr2.headers.reduce((sum, header) => {\n return sum + header.column.getSize();\n }, 0)) != null ? _instance$getHeaderGr : 0;\n },\n getLeftTotalSize: () => {\n var _instance$getLeftHead, _instance$getLeftHead2;\n\n return (_instance$getLeftHead = (_instance$getLeftHead2 = instance.getLeftHeaderGroups()[0]) == null ? void 0 : _instance$getLeftHead2.headers.reduce((sum, header) => {\n return sum + header.column.getSize();\n }, 0)) != null ? _instance$getLeftHead : 0;\n },\n getCenterTotalSize: () => {\n var _instance$getCenterHe, _instance$getCenterHe2;\n\n return (_instance$getCenterHe = (_instance$getCenterHe2 = instance.getCenterHeaderGroups()[0]) == null ? void 0 : _instance$getCenterHe2.headers.reduce((sum, header) => {\n return sum + header.column.getSize();\n }, 0)) != null ? _instance$getCenterHe : 0;\n },\n getRightTotalSize: () => {\n var _instance$getRightHea, _instance$getRightHea2;\n\n return (_instance$getRightHea = (_instance$getRightHea2 = instance.getRightHeaderGroups()[0]) == null ? void 0 : _instance$getRightHea2.headers.reduce((sum, header) => {\n return sum + header.column.getSize();\n }, 0)) != null ? _instance$getRightHea : 0;\n }\n };\n }\n};\nlet passiveSupported = null;\nfunction passiveEventSupported() {\n if (typeof passiveSupported === 'boolean') return passiveSupported;\n let supported = false;\n\n try {\n const options = {\n get passive() {\n supported = true;\n return false;\n }\n\n };\n\n const noop = () => {};\n\n window.addEventListener('test', noop, options);\n window.removeEventListener('test', noop);\n } catch (err) {\n supported = false;\n }\n\n passiveSupported = supported;\n return passiveSupported;\n}\n\nfunction isTouchStartEvent(e) {\n return e.type === 'touchstart';\n}\n\n//\nconst Expanding = {\n getInitialState: state => {\n return {\n expanded: {},\n ...state\n };\n },\n getDefaultOptions: instance => {\n return {\n onExpandedChange: makeStateUpdater('expanded', instance),\n autoResetExpanded: true,\n expandSubRows: true,\n paginateExpandedRows: true\n };\n },\n createInstance: instance => {\n let registered = false;\n return {\n _autoResetExpanded: () => {\n if (!registered) {\n registered = true;\n return;\n }\n\n if (instance.options.autoResetAll === false) {\n return;\n }\n\n if (instance.options.autoResetAll === true || instance.options.autoResetExpanded) {\n instance.resetExpanded();\n }\n },\n setExpanded: updater => instance.options.onExpandedChange == null ? void 0 : instance.options.onExpandedChange(updater),\n toggleAllRowsExpanded: expanded => {\n if (expanded != null ? expanded : !instance.getIsAllRowsExpanded()) {\n instance.setExpanded(true);\n } else {\n instance.setExpanded({});\n }\n },\n resetExpanded: defaultState => {\n var _instance$initialStat, _instance$initialStat2;\n\n instance.setExpanded(defaultState ? {} : (_instance$initialStat = (_instance$initialStat2 = instance.initialState) == null ? void 0 : _instance$initialStat2.expanded) != null ? _instance$initialStat : {});\n },\n getCanSomeRowsExpand: () => {\n return instance.getRowModel().flatRows.some(row => row.getCanExpand());\n },\n getToggleAllRowsExpandedHandler: () => {\n return e => {\n e.persist == null ? void 0 : e.persist();\n instance.toggleAllRowsExpanded();\n };\n },\n getIsSomeRowsExpanded: () => {\n const expanded = instance.getState().expanded;\n return expanded === true || Object.values(expanded).some(Boolean);\n },\n getIsAllRowsExpanded: () => {\n const expanded = instance.getState().expanded; // If expanded is true, save some cycles and return true\n\n if (expanded === true) {\n return true;\n } // If any row is not expanded, return false\n\n\n if (instance.getRowModel().flatRows.some(row => row.getIsExpanded())) {\n return false;\n } // They must all be expanded :shrug:\n\n\n return true;\n },\n getExpandedDepth: () => {\n let maxDepth = 0;\n const rowIds = instance.getState().expanded === true ? Object.keys(instance.getRowModel().rowsById) : Object.keys(instance.getState().expanded);\n rowIds.forEach(id => {\n const splitId = id.split('.');\n maxDepth = Math.max(maxDepth, splitId.length);\n });\n return maxDepth;\n },\n getPreExpandedRowModel: () => instance.getGroupedRowModel(),\n getExpandedRowModel: () => {\n if (!instance._getExpandedRowModel && instance.options.getExpandedRowModel) {\n instance._getExpandedRowModel = instance.options.getExpandedRowModel(instance);\n }\n\n if (instance.options.manualExpanding || !instance._getExpandedRowModel) {\n return instance.getPreExpandedRowModel();\n }\n\n return instance._getExpandedRowModel();\n }\n };\n },\n createRow: (row, instance) => {\n return {\n toggleExpanded: expanded => {\n instance.setExpanded(old => {\n var _expanded;\n\n const exists = old === true ? true : !!(old != null && old[row.id]);\n let oldExpanded = {};\n\n if (old === true) {\n Object.keys(instance.getRowModel().rowsById).forEach(rowId => {\n oldExpanded[rowId] = true;\n });\n } else {\n oldExpanded = old;\n }\n\n expanded = (_expanded = expanded) != null ? _expanded : !exists;\n\n if (!exists && expanded) {\n return { ...oldExpanded,\n [row.id]: true\n };\n }\n\n if (exists && !expanded) {\n const {\n [row.id]: _,\n ...rest\n } = oldExpanded;\n return rest;\n }\n\n return old;\n });\n },\n getIsExpanded: () => {\n var _instance$options$get;\n\n const expanded = instance.getState().expanded;\n return !!((_instance$options$get = instance.options.getIsRowExpanded == null ? void 0 : instance.options.getIsRowExpanded(row)) != null ? _instance$options$get : expanded === true || (expanded == null ? void 0 : expanded[row.id]));\n },\n getCanExpand: () => {\n var _instance$options$get2, _instance$options$ena, _row$subRows;\n\n return ((_instance$options$get2 = instance.options.getRowCanExpand == null ? void 0 : instance.options.getRowCanExpand(row)) != null ? _instance$options$get2 : true) && ((_instance$options$ena = instance.options.enableExpanding) != null ? _instance$options$ena : true) && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n },\n getToggleExpandedHandler: () => {\n const canExpand = row.getCanExpand();\n return () => {\n if (!canExpand) return;\n row.toggleExpanded();\n };\n }\n };\n }\n};\n\nconst includesString = (row, columnId, filterValue) => {\n const search = filterValue.toLowerCase();\n return row.getValue(columnId).toLowerCase().includes(search);\n};\n\nincludesString.autoRemove = val => testFalsey(val);\n\nconst includesStringSensitive = (row, columnId, filterValue) => {\n return row.getValue(columnId).includes(filterValue);\n};\n\nincludesStringSensitive.autoRemove = val => testFalsey(val);\n\nconst equalsString = (row, columnId, filterValue) => {\n return row.getValue(columnId).toLowerCase() === filterValue.toLowerCase();\n};\n\nequalsString.autoRemove = val => testFalsey(val);\n\nconst arrIncludes = (row, columnId, filterValue) => {\n return row.getValue(columnId).includes(filterValue);\n};\n\narrIncludes.autoRemove = val => testFalsey(val) || !(val != null && val.length);\n\nconst arrIncludesAll = (row, columnId, filterValue) => {\n return !filterValue.some(val => !row.getValue(columnId).includes(val));\n};\n\narrIncludesAll.autoRemove = val => testFalsey(val) || !(val != null && val.length);\n\nconst arrIncludesSome = (row, columnId, filterValue) => {\n return filterValue.some(val => row.getValue(columnId).includes(val));\n};\n\narrIncludesSome.autoRemove = val => testFalsey(val) || !(val != null && val.length);\n\nconst equals = (row, columnId, filterValue) => {\n return row.getValue(columnId) === filterValue;\n};\n\nequals.autoRemove = val => testFalsey(val);\n\nconst weakEquals = (row, columnId, filterValue) => {\n return row.getValue(columnId) == filterValue;\n};\n\nweakEquals.autoRemove = val => testFalsey(val);\n\nconst inNumberRange = (row, columnId, filterValue) => {\n let [min, max] = filterValue;\n const rowValue = row.getValue(columnId);\n return rowValue >= min && rowValue <= max;\n};\n\ninNumberRange.resolveFilterValue = val => {\n let [unsafeMin, unsafeMax] = val;\n let parsedMin = typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin;\n let parsedMax = typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax;\n let min = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin;\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax;\n\n if (min > max) {\n const temp = min;\n min = max;\n max = temp;\n }\n\n return [min, max];\n};\n\ninNumberRange.autoRemove = val => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]); // Export\n\n\nconst filterFns = {\n includesString,\n includesStringSensitive,\n equalsString,\n arrIncludes,\n arrIncludesAll,\n arrIncludesSome,\n equals,\n weakEquals,\n inNumberRange\n};\n\n// Utils\nfunction testFalsey(val) {\n return val === undefined || val === null || val === '';\n}\n\n//\nconst Filters = {\n getDefaultColumn: () => {\n return {\n filterFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n columnFilters: [],\n globalFilter: undefined,\n // filtersProgress: 1,\n // facetProgress: {},\n ...state\n };\n },\n getDefaultOptions: instance => {\n return {\n onColumnFiltersChange: makeStateUpdater('columnFilters', instance),\n onGlobalFilterChange: makeStateUpdater('globalFilter', instance),\n filterFromLeafRows: false,\n globalFilterFn: 'auto',\n getColumnCanGlobalFilter: column => {\n var _instance$getCoreRowM, _instance$getCoreRowM2;\n\n const value = (_instance$getCoreRowM = instance.getCoreRowModel().flatRows[0]) == null ? void 0 : (_instance$getCoreRowM2 = _instance$getCoreRowM.getAllCellsByColumnId()[column.id]) == null ? void 0 : _instance$getCoreRowM2.getValue();\n return typeof value === 'string';\n }\n };\n },\n createColumn: (column, instance) => {\n return {\n filterFn: column.filterFn,\n getAutoFilterFn: () => {\n const firstRow = instance.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n\n if (typeof value === 'string') {\n return filterFns.includesString;\n }\n\n if (typeof value === 'number') {\n return filterFns.inNumberRange;\n }\n\n if (value !== null && typeof value === 'object') {\n return filterFns.equals;\n }\n\n if (Array.isArray(value)) {\n return filterFns.arrIncludes;\n }\n\n return filterFns.weakEquals;\n },\n getFilterFn: () => {\n var _ref;\n\n const userFilterFns = instance.options.filterFns;\n return isFunction(column.filterFn) ? column.filterFn : column.filterFn === 'auto' ? column.getAutoFilterFn() : (_ref = userFilterFns == null ? void 0 : userFilterFns[column.filterFn]) != null ? _ref : filterFns[column.filterFn];\n },\n getCanFilter: () => {\n var _column$enableColumnF, _instance$options$ena, _instance$options$ena2;\n\n return ((_column$enableColumnF = column.enableColumnFilter) != null ? _column$enableColumnF : true) && ((_instance$options$ena = instance.options.enableColumnFilters) != null ? _instance$options$ena : true) && ((_instance$options$ena2 = instance.options.enableFilters) != null ? _instance$options$ena2 : true) && !!column.accessorFn;\n },\n getCanGlobalFilter: () => {\n var _column$enableGlobalF, _instance$options$ena3, _instance$options$ena4, _instance$options$get;\n\n return ((_column$enableGlobalF = column.enableGlobalFilter) != null ? _column$enableGlobalF : true) && ((_instance$options$ena3 = instance.options.enableGlobalFilter) != null ? _instance$options$ena3 : true) && ((_instance$options$ena4 = instance.options.enableFilters) != null ? _instance$options$ena4 : true) && ((_instance$options$get = instance.options.getColumnCanGlobalFilter == null ? void 0 : instance.options.getColumnCanGlobalFilter(column)) != null ? _instance$options$get : true) && !!column.accessorFn;\n },\n getIsFiltered: () => column.getFilterIndex() > -1,\n getFilterValue: () => {\n var _instance$getState$co, _instance$getState$co2;\n\n return (_instance$getState$co = instance.getState().columnFilters) == null ? void 0 : (_instance$getState$co2 = _instance$getState$co.find(d => d.id === column.id)) == null ? void 0 : _instance$getState$co2.value;\n },\n getFilterIndex: () => {\n var _instance$getState$co3, _instance$getState$co4;\n\n return (_instance$getState$co3 = (_instance$getState$co4 = instance.getState().columnFilters) == null ? void 0 : _instance$getState$co4.findIndex(d => d.id === column.id)) != null ? _instance$getState$co3 : -1;\n },\n setFilterValue: value => {\n instance.setColumnFilters(old => {\n const filterFn = column.getFilterFn();\n const previousfilter = old == null ? void 0 : old.find(d => d.id === column.id);\n const newFilter = functionalUpdate(value, previousfilter ? previousfilter.value : undefined); //\n\n if (shouldAutoRemoveFilter(filterFn, newFilter, column)) {\n var _old$filter;\n\n return (_old$filter = old == null ? void 0 : old.filter(d => d.id !== column.id)) != null ? _old$filter : [];\n }\n\n const newFilterObj = {\n id: column.id,\n value: newFilter\n };\n\n if (previousfilter) {\n var _old$map;\n\n return (_old$map = old == null ? void 0 : old.map(d => {\n if (d.id === column.id) {\n return newFilterObj;\n }\n\n return d;\n })) != null ? _old$map : [];\n }\n\n if (old != null && old.length) {\n return [...old, newFilterObj];\n }\n\n return [newFilterObj];\n });\n },\n _getFacetedRowModel: instance.options.getFacetedRowModel && instance.options.getFacetedRowModel(instance, column.id),\n getFacetedRowModel: () => {\n if (!column._getFacetedRowModel) {\n return instance.getPreFilteredRowModel();\n }\n\n return column._getFacetedRowModel();\n },\n _getFacetedUniqueValues: instance.options.getFacetedUniqueValues && instance.options.getFacetedUniqueValues(instance, column.id),\n getFacetedUniqueValues: () => {\n if (!column._getFacetedUniqueValues) {\n return new Map();\n }\n\n return column._getFacetedUniqueValues();\n },\n _getFacetedMinMaxValues: instance.options.getFacetedMinMaxValues && instance.options.getFacetedMinMaxValues(instance, column.id),\n getFacetedMinMaxValues: () => {\n if (!column._getFacetedMinMaxValues) {\n return [NaN, NaN];\n }\n\n return column._getFacetedMinMaxValues();\n } // () => [column.getFacetedRowModel()],\n // facetedRowModel => getRowModelMinMaxValues(facetedRowModel, column.id),\n\n };\n },\n createRow: (row, instance) => {\n return {\n columnFilterMap: {},\n subRowsByFacetId: {}\n };\n },\n createInstance: instance => {\n return {\n getGlobalAutoFilterFn: () => {\n return filterFns.includesString;\n },\n getGlobalFilterFn: () => {\n var _ref2;\n\n const {\n filterFns: userFilterFns,\n globalFilterFn: globalFilterFn\n } = instance.options;\n return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === 'auto' ? instance.getGlobalAutoFilterFn() : (_ref2 = userFilterFns == null ? void 0 : userFilterFns[globalFilterFn]) != null ? _ref2 : filterFns[globalFilterFn];\n },\n setColumnFilters: updater => {\n const leafColumns = instance.getAllLeafColumns();\n\n const updateFn = old => {\n var _functionalUpdate;\n\n return (_functionalUpdate = functionalUpdate(updater, old)) == null ? void 0 : _functionalUpdate.filter(filter => {\n const column = leafColumns.find(d => d.id === filter.id);\n\n if (column) {\n const filterFn = column.getFilterFn();\n\n if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n return false;\n }\n }\n\n return true;\n });\n };\n\n instance.options.onColumnFiltersChange == null ? void 0 : instance.options.onColumnFiltersChange(updateFn);\n },\n setGlobalFilter: updater => {\n instance.options.onGlobalFilterChange == null ? void 0 : instance.options.onGlobalFilterChange(updater);\n },\n resetGlobalFilter: defaultState => {\n instance.setGlobalFilter(defaultState ? undefined : instance.initialState.globalFilter);\n },\n resetColumnFilters: defaultState => {\n var _instance$initialStat, _instance$initialStat2;\n\n instance.setColumnFilters(defaultState ? [] : (_instance$initialStat = (_instance$initialStat2 = instance.initialState) == null ? void 0 : _instance$initialStat2.columnFilters) != null ? _instance$initialStat : []);\n },\n getPreFilteredRowModel: () => instance.getCoreRowModel(),\n _getFilteredRowModel: instance.options.getFilteredRowModel && instance.options.getFilteredRowModel(instance),\n getFilteredRowModel: () => {\n if (instance.options.manualFiltering || !instance._getFilteredRowModel) {\n return instance.getPreFilteredRowModel();\n }\n\n return instance._getFilteredRowModel();\n },\n _getGlobalFacetedRowModel: instance.options.getFacetedRowModel && instance.options.getFacetedRowModel(instance, '__global__'),\n getGlobalFacetedRowModel: () => {\n if (instance.options.manualFiltering || !instance._getGlobalFacetedRowModel) {\n return instance.getPreFilteredRowModel();\n }\n\n return instance._getGlobalFacetedRowModel();\n },\n _getGlobalFacetedUniqueValues: instance.options.getFacetedUniqueValues && instance.options.getFacetedUniqueValues(instance, '__global__'),\n getGlobalFacetedUniqueValues: () => {\n if (!instance._getGlobalFacetedUniqueValues) {\n return new Map();\n }\n\n return instance._getGlobalFacetedUniqueValues();\n },\n _getGlobalFacetedMinMaxValues: instance.options.getFacetedMinMaxValues && instance.options.getFacetedMinMaxValues(instance, '__global__'),\n getGlobalFacetedMinMaxValues: () => {\n if (!instance._getGlobalFacetedMinMaxValues) {\n return [NaN, NaN];\n }\n\n return instance._getGlobalFacetedMinMaxValues();\n }\n };\n }\n};\nfunction shouldAutoRemoveFilter(filterFn, value, column) {\n return (filterFn && filterFn.autoRemove ? filterFn.autoRemove(value, column) : false) || typeof value === 'undefined' || typeof value === 'string' && !value;\n}\n\nconst aggregationFns = {\n sum,\n min,\n max,\n extent,\n mean,\n median,\n unique,\n uniqueCount,\n count\n};\n\nfunction sum(_getLeafValues, getChildValues) {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return getChildValues().reduce((sum, next) => sum + (typeof next === 'number' ? next : 0), 0);\n}\n\nfunction min(_getLeafValues, getChildValues) {\n let min;\n\n for (const value of getChildValues()) {\n if (value != null && (min > value || min === undefined && value >= value)) {\n min = value;\n }\n }\n\n return min;\n}\n\nfunction max(_getLeafValues, getChildValues) {\n let max;\n\n for (const value of getChildValues()) {\n if (value != null && (max < value || max === undefined && value >= value)) {\n max = value;\n }\n }\n\n return max;\n}\n\nfunction extent(_getLeafValues, getChildValues) {\n let min;\n let max;\n\n for (const value of getChildValues()) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n\n return [min, max];\n}\n\nfunction mean(getLeafValues) {\n let count = 0;\n let sum = 0;\n\n for (let value of getLeafValues()) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n\n if (count) return sum / count;\n return;\n}\n\nfunction median(getLeafValues) {\n const leafValues = getLeafValues();\n\n if (!leafValues.length) {\n return;\n }\n\n let min = 0;\n let max = 0;\n leafValues.forEach(value => {\n if (typeof value === 'number') {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n });\n return (min + max) / 2;\n}\n\nfunction unique(getLeafValues) {\n return Array.from(new Set(getLeafValues()).values());\n}\n\nfunction uniqueCount(getLeafValues) {\n return new Set(getLeafValues()).size;\n}\n\nfunction count(getLeafValues) {\n return getLeafValues().length;\n}\n\n//\nconst Grouping = {\n getDefaultColumn: () => {\n return {\n aggregationFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n grouping: [],\n ...state\n };\n },\n getDefaultOptions: instance => {\n return {\n onGroupingChange: makeStateUpdater('grouping', instance),\n groupedColumnMode: 'reorder'\n };\n },\n createColumn: (column, instance) => {\n return {\n toggleGrouping: () => {\n instance.setGrouping(old => {\n // Find any existing grouping for this column\n if (old != null && old.includes(column.id)) {\n return old.filter(d => d !== column.id);\n }\n\n return [...(old != null ? old : []), column.id];\n });\n },\n getCanGroup: () => {\n var _ref, _ref2, _ref3, _column$enableGroupin;\n\n return (_ref = (_ref2 = (_ref3 = (_column$enableGroupin = column.enableGrouping) != null ? _column$enableGroupin : true) != null ? _ref3 : instance.options.enableGrouping) != null ? _ref2 : true) != null ? _ref : !!column.accessorFn;\n },\n getIsGrouped: () => {\n var _instance$getState$gr;\n\n return (_instance$getState$gr = instance.getState().grouping) == null ? void 0 : _instance$getState$gr.includes(column.id);\n },\n getGroupedIndex: () => {\n var _instance$getState$gr2;\n\n return (_instance$getState$gr2 = instance.getState().grouping) == null ? void 0 : _instance$getState$gr2.indexOf(column.id);\n },\n getToggleGroupingHandler: () => {\n const canGroup = column.getCanGroup();\n return () => {\n if (!canGroup) return;\n column.toggleGrouping();\n };\n },\n getColumnAutoAggregationFn: () => {\n const firstRow = instance.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n\n if (typeof value === 'number') {\n return aggregationFns.sum;\n }\n\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return aggregationFns.extent;\n }\n\n return aggregationFns.count;\n },\n getColumnAggregationFn: () => {\n var _ref4;\n\n const userAggregationFns = instance.options.aggregationFns;\n\n if (!column) {\n throw new Error();\n }\n\n return isFunction(column.aggregationFn) ? column.aggregationFn : column.aggregationFn === 'auto' ? column.getColumnAutoAggregationFn() : (_ref4 = userAggregationFns == null ? void 0 : userAggregationFns[column.aggregationFn]) != null ? _ref4 : aggregationFns[column.aggregationFn];\n }\n };\n },\n createInstance: instance => {\n return {\n setGrouping: updater => instance.options.onGroupingChange == null ? void 0 : instance.options.onGroupingChange(updater),\n resetGrouping: defaultState => {\n var _instance$initialStat, _instance$initialStat2;\n\n instance.setGrouping(defaultState ? [] : (_instance$initialStat = (_instance$initialStat2 = instance.initialState) == null ? void 0 : _instance$initialStat2.grouping) != null ? _instance$initialStat : []);\n },\n getPreGroupedRowModel: () => instance.getSortedRowModel(),\n getGroupedRowModel: () => {\n if (!instance._getGroupedRowModel && instance.options.getGroupedRowModel) {\n instance._getGroupedRowModel = instance.options.getGroupedRowModel(instance);\n }\n\n if (instance.options.manualGrouping || !instance._getGroupedRowModel) {\n return instance.getPreGroupedRowModel();\n }\n\n return instance._getGroupedRowModel();\n }\n };\n },\n createRow: (row, instance) => {\n return {\n getIsGrouped: () => !!row.groupingColumnId,\n groupingValuesCache: {}\n };\n },\n createCell: (cell, column, row, instance) => {\n return {\n getIsGrouped: () => column.getIsGrouped() && column.id === row.groupingColumnId,\n getIsPlaceholder: () => !cell.getIsGrouped() && column.getIsGrouped(),\n getIsAggregated: () => {\n var _row$subRows;\n\n return !cell.getIsGrouped() && !cell.getIsPlaceholder() && ((_row$subRows = row.subRows) == null ? void 0 : _row$subRows.length) > 1;\n },\n renderAggregatedCell: () => {\n var _column$aggregatedCel;\n\n const template = (_column$aggregatedCel = column.aggregatedCell) != null ? _column$aggregatedCel : column.cell;\n return template ? instance.render(template, {\n instance,\n column,\n row,\n cell,\n getValue: cell.getValue\n }) : null;\n }\n };\n }\n};\nfunction orderColumns(leafColumns, grouping, groupedColumnMode) {\n if (!(grouping != null && grouping.length) || !groupedColumnMode) {\n return leafColumns;\n }\n\n const nonGroupingColumns = leafColumns.filter(col => !grouping.includes(col.id));\n\n if (groupedColumnMode === 'remove') {\n return nonGroupingColumns;\n }\n\n const groupingColumns = grouping.map(g => leafColumns.find(col => col.id === g)).filter(Boolean);\n return [...groupingColumns, ...nonGroupingColumns];\n}\n\n//\nconst Ordering = {\n getInitialState: state => {\n return {\n columnOrder: [],\n ...state\n };\n },\n getDefaultOptions: instance => {\n return {\n onColumnOrderChange: makeStateUpdater('columnOrder', instance)\n };\n },\n createInstance: instance => {\n return {\n setColumnOrder: updater => instance.options.onColumnOrderChange == null ? void 0 : instance.options.onColumnOrderChange(updater),\n resetColumnOrder: defaultState => {\n var _instance$initialStat;\n\n instance.setColumnOrder(defaultState ? [] : (_instance$initialStat = instance.initialState.columnOrder) != null ? _instance$initialStat : []);\n },\n _getOrderColumnsFn: memo(() => [instance.getState().columnOrder, instance.getState().grouping, instance.options.groupedColumnMode], (columnOrder, grouping, groupedColumnMode) => columns => {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n let orderedColumns = []; // If there is no order, return the normal columns\n\n if (!(columnOrder != null && columnOrder.length)) {\n orderedColumns = columns;\n } else {\n const columnOrderCopy = [...columnOrder]; // If there is an order, make a copy of the columns\n\n const columnsCopy = [...columns]; // And make a new ordered array of the columns\n // Loop over the columns and place them in order into the new array\n\n while (columnsCopy.length && columnOrderCopy.length) {\n const targetColumnId = columnOrderCopy.shift();\n const foundIndex = columnsCopy.findIndex(d => d.id === targetColumnId);\n\n if (foundIndex > -1) {\n orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]);\n }\n } // If there are any columns left, add them to the end\n\n\n orderedColumns = [...orderedColumns, ...columnsCopy];\n }\n\n return orderColumns(orderedColumns, grouping, groupedColumnMode);\n }, {\n key: process.env.NODE_ENV === 'development' && 'getOrderColumnsFn' // debug: () => instance.options.debugAll ?? instance.options.debugTable,\n\n })\n };\n }\n};\n\n//\nconst defaultPageIndex = 0;\nconst defaultPageSize = 10;\n\nconst getDefaultPaginationState = () => ({\n pageIndex: defaultPageIndex,\n pageSize: defaultPageSize\n});\n\nconst Pagination = {\n getInitialState: state => {\n return { ...state,\n pagination: { ...getDefaultPaginationState(),\n ...(state == null ? void 0 : state.pagination)\n }\n };\n },\n getDefaultOptions: instance => {\n return {\n onPaginationChange: makeStateUpdater('pagination', instance),\n autoResetPageIndex: true\n };\n },\n createInstance: instance => {\n let registered = false;\n return {\n _autoResetPageIndex: () => {\n if (!registered) {\n registered = true;\n return;\n }\n\n if (instance.options.autoResetAll === false) {\n return;\n }\n\n if (instance.options.autoResetAll === true || instance.options.autoResetPageIndex) {\n instance.resetPageIndex();\n }\n },\n setPagination: updater => {\n const safeUpdater = old => {\n let newState = functionalUpdate(updater, old);\n return newState;\n };\n\n return instance.options.onPaginationChange == null ? void 0 : instance.options.onPaginationChange(safeUpdater);\n },\n resetPagination: defaultState => {\n var _instance$initialStat;\n\n instance.setPagination(defaultState ? getDefaultPaginationState() : (_instance$initialStat = instance.initialState.pagination) != null ? _instance$initialStat : getDefaultPaginationState());\n },\n setPageIndex: updater => {\n instance.setPagination(old => {\n let pageIndex = functionalUpdate(updater, old.pageIndex);\n const maxPageIndex = old.pageCount && old.pageCount > 0 ? old.pageCount - 1 : Number.MAX_SAFE_INTEGER;\n pageIndex = Math.min(Math.max(0, pageIndex), maxPageIndex);\n return { ...old,\n pageIndex\n };\n });\n },\n resetPageIndex: defaultState => {\n var _instance$initialStat2, _instance$initialStat3, _instance$initialStat4;\n\n instance.setPageIndex(defaultState ? defaultPageIndex : (_instance$initialStat2 = (_instance$initialStat3 = instance.initialState) == null ? void 0 : (_instance$initialStat4 = _instance$initialStat3.pagination) == null ? void 0 : _instance$initialStat4.pageIndex) != null ? _instance$initialStat2 : defaultPageIndex);\n },\n resetPageSize: defaultState => {\n var _instance$initialStat5, _instance$initialStat6, _instance$initialStat7;\n\n instance.setPageSize(defaultState ? defaultPageSize : (_instance$initialStat5 = (_instance$initialStat6 = instance.initialState) == null ? void 0 : (_instance$initialStat7 = _instance$initialStat6.pagination) == null ? void 0 : _instance$initialStat7.pageSize) != null ? _instance$initialStat5 : defaultPageSize);\n },\n setPageSize: updater => {\n instance.setPagination(old => {\n const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize));\n const topRowIndex = old.pageSize * old.pageIndex;\n const pageIndex = Math.floor(topRowIndex / pageSize);\n return { ...old,\n pageIndex,\n pageSize\n };\n });\n },\n setPageCount: updater => instance.setPagination(old => {\n var _old$pageCount;\n\n let newPageCount = functionalUpdate(updater, (_old$pageCount = old.pageCount) != null ? _old$pageCount : -1);\n\n if (typeof newPageCount === 'number') {\n newPageCount = Math.max(-1, newPageCount);\n }\n\n return { ...old,\n pageCount: newPageCount\n };\n }),\n getPageOptions: memo(() => [instance.getState().pagination.pageSize, instance.getState().pagination.pageCount], (pageSize, pageCount) => {\n let pageOptions = [];\n\n if (pageCount && pageCount > 0) {\n pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i);\n }\n\n return pageOptions;\n }, {\n key: process.env.NODE_ENV === 'development' && 'getPageOptions',\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;\n }\n }),\n getCanPreviousPage: () => instance.getState().pagination.pageIndex > 0,\n getCanNextPage: () => {\n const {\n pageIndex\n } = instance.getState().pagination;\n const pageCount = instance.getPageCount();\n\n if (pageCount === -1) {\n return true;\n }\n\n if (pageCount === 0) {\n return false;\n }\n\n return pageIndex < pageCount - 1;\n },\n previousPage: () => {\n return instance.setPageIndex(old => old - 1);\n },\n nextPage: () => {\n return instance.setPageIndex(old => {\n return old + 1;\n });\n },\n getPrePaginationRowModel: () => instance.getExpandedRowModel(),\n getPaginationRowModel: () => {\n if (!instance._getPaginationRowModel && instance.options.getPaginationRowModel) {\n instance._getPaginationRowModel = instance.options.getPaginationRowModel(instance);\n }\n\n if (instance.options.manualPagination || !instance._getPaginationRowModel) {\n return instance.getPrePaginationRowModel();\n }\n\n return instance._getPaginationRowModel();\n },\n getPageCount: () => {\n const {\n pageCount\n } = instance.getState().pagination;\n\n if (typeof pageCount !== 'undefined') {\n return pageCount;\n }\n\n return Math.ceil(instance.getPrePaginationRowModel().rows.length / instance.getState().pagination.pageSize);\n }\n };\n }\n};\n\n//\nconst getDefaultPinningState = () => ({\n left: [],\n right: []\n});\n\nconst Pinning = {\n getInitialState: state => {\n return {\n columnPinning: getDefaultPinningState(),\n ...state\n };\n },\n getDefaultOptions: instance => {\n return {\n onColumnPinningChange: makeStateUpdater('columnPinning', instance)\n };\n },\n createColumn: (column, instance) => {\n return {\n pin: position => {\n const columnIds = column.getLeafColumns().map(d => d.id).filter(Boolean);\n instance.setColumnPinning(old => {\n var _old$left3, _old$right3;\n\n if (position === 'right') {\n var _old$left, _old$right;\n\n return {\n left: ((_old$left = old == null ? void 0 : old.left) != null ? _old$left : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: [...((_old$right = old == null ? void 0 : old.right) != null ? _old$right : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds]\n };\n }\n\n if (position === 'left') {\n var _old$left2, _old$right2;\n\n return {\n left: [...((_old$left2 = old == null ? void 0 : old.left) != null ? _old$left2 : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds],\n right: ((_old$right2 = old == null ? void 0 : old.right) != null ? _old$right2 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n }\n\n return {\n left: ((_old$left3 = old == null ? void 0 : old.left) != null ? _old$left3 : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: ((_old$right3 = old == null ? void 0 : old.right) != null ? _old$right3 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n });\n },\n getCanPin: () => {\n const leafColumns = column.getLeafColumns();\n return leafColumns.some(d => {\n var _d$enablePinning, _instance$options$ena;\n\n return ((_d$enablePinning = d.enablePinning) != null ? _d$enablePinning : true) && ((_instance$options$ena = instance.options.enablePinning) != null ? _instance$options$ena : true);\n });\n },\n getIsPinned: () => {\n const leafColumnIds = column.getLeafColumns().map(d => d.id);\n const {\n left,\n right\n } = instance.getState().columnPinning;\n const isLeft = leafColumnIds.some(d => left == null ? void 0 : left.includes(d));\n const isRight = leafColumnIds.some(d => right == null ? void 0 : right.includes(d));\n return isLeft ? 'left' : isRight ? 'right' : false;\n },\n getPinnedIndex: () => {\n var _instance$getState$co, _instance$getState$co2, _instance$getState$co3;\n\n const position = column.getIsPinned();\n return position ? (_instance$getState$co = (_instance$getState$co2 = instance.getState().columnPinning) == null ? void 0 : (_instance$getState$co3 = _instance$getState$co2[position]) == null ? void 0 : _instance$getState$co3.indexOf(column.id)) != null ? _instance$getState$co : -1 : 0;\n }\n };\n },\n createRow: (row, instance) => {\n return {\n getCenterVisibleCells: memo(() => [row._getAllVisibleCells(), instance.getState().columnPinning.left, instance.getState().columnPinning.right], (allCells, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allCells.filter(d => !leftAndRight.includes(d.columnId));\n }, {\n key: process.env.NODE_ENV === 'production' && 'row.getCenterVisibleCells',\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugRows;\n }\n }),\n getLeftVisibleCells: memo(() => [row._getAllVisibleCells(), instance.getState().columnPinning.left,,], (allCells, left) => {\n const cells = (left != null ? left : []).map(columnId => allCells.find(cell => cell.columnId === columnId)).filter(Boolean).map(d => ({ ...d,\n position: 'left'\n }));\n return cells;\n }, {\n key: process.env.NODE_ENV === 'production' && 'row.getLeftVisibleCells',\n debug: () => {\n var _instance$options$deb2;\n\n return (_instance$options$deb2 = instance.options.debugAll) != null ? _instance$options$deb2 : instance.options.debugRows;\n }\n }),\n getRightVisibleCells: memo(() => [row._getAllVisibleCells(), instance.getState().columnPinning.right], (allCells, right) => {\n const cells = (right != null ? right : []).map(columnId => allCells.find(cell => cell.columnId === columnId)).filter(Boolean).map(d => ({ ...d,\n position: 'left'\n }));\n return cells;\n }, {\n key: process.env.NODE_ENV === 'production' && 'row.getRightVisibleCells',\n debug: () => {\n var _instance$options$deb3;\n\n return (_instance$options$deb3 = instance.options.debugAll) != null ? _instance$options$deb3 : instance.options.debugRows;\n }\n })\n };\n },\n createInstance: instance => {\n return {\n setColumnPinning: updater => instance.options.onColumnPinningChange == null ? void 0 : instance.options.onColumnPinningChange(updater),\n resetColumnPinning: defaultState => {\n var _instance$initialStat, _instance$initialStat2;\n\n return instance.setColumnPinning(defaultState ? getDefaultPinningState() : (_instance$initialStat = (_instance$initialStat2 = instance.initialState) == null ? void 0 : _instance$initialStat2.columnPinning) != null ? _instance$initialStat : getDefaultPinningState());\n },\n getIsSomeColumnsPinned: () => {\n const {\n left,\n right\n } = instance.getState().columnPinning;\n return Boolean((left == null ? void 0 : left.length) || (right == null ? void 0 : right.length));\n },\n getLeftLeafColumns: memo(() => [instance.getAllLeafColumns(), instance.getState().columnPinning.left], (allColumns, left) => {\n return (left != null ? left : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, {\n key: process.env.NODE_ENV === 'development' && 'getLeftLeafColumns',\n debug: () => {\n var _instance$options$deb4;\n\n return (_instance$options$deb4 = instance.options.debugAll) != null ? _instance$options$deb4 : instance.options.debugColumns;\n }\n }),\n getRightLeafColumns: memo(() => [instance.getAllLeafColumns(), instance.getState().columnPinning.right], (allColumns, right) => {\n return (right != null ? right : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, {\n key: process.env.NODE_ENV === 'development' && 'getRightLeafColumns',\n debug: () => {\n var _instance$options$deb5;\n\n return (_instance$options$deb5 = instance.options.debugAll) != null ? _instance$options$deb5 : instance.options.debugColumns;\n }\n }),\n getCenterLeafColumns: memo(() => [instance.getAllLeafColumns(), instance.getState().columnPinning.left, instance.getState().columnPinning.right], (allColumns, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allColumns.filter(d => !leftAndRight.includes(d.id));\n }, {\n key: process.env.NODE_ENV === 'development' && 'getCenterLeafColumns',\n debug: () => {\n var _instance$options$deb6;\n\n return (_instance$options$deb6 = instance.options.debugAll) != null ? _instance$options$deb6 : instance.options.debugColumns;\n }\n })\n };\n }\n};\n\n//\nconst RowSelection = {\n getInitialState: state => {\n return {\n rowSelection: {},\n ...state\n };\n },\n getDefaultOptions: instance => {\n return {\n onRowSelectionChange: makeStateUpdater('rowSelection', instance),\n enableRowSelection: true,\n enableMultiRowSelection: true,\n enableSubRowSelection: true // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n\n };\n },\n createInstance: instance => {\n return {\n setRowSelection: updater => instance.options.onRowSelectionChange == null ? void 0 : instance.options.onRowSelectionChange(updater),\n resetRowSelection: defaultState => {\n var _instance$initialStat;\n\n return instance.setRowSelection(defaultState ? {} : (_instance$initialStat = instance.initialState.rowSelection) != null ? _instance$initialStat : {});\n },\n toggleAllRowsSelected: value => {\n instance.setRowSelection(old => {\n value = typeof value !== 'undefined' ? value : !instance.getIsAllRowsSelected();\n const rowSelection = { ...old\n };\n const preGroupedFlatRows = instance.getPreGroupedRowModel().flatRows; // We don't use `mutateRowIsSelected` here for performance reasons.\n // All of the rows are flat already, so it wouldn't be worth it\n\n if (value) {\n preGroupedFlatRows.forEach(row => {\n rowSelection[row.id] = true;\n });\n } else {\n preGroupedFlatRows.forEach(row => {\n delete rowSelection[row.id];\n });\n }\n\n return rowSelection;\n });\n },\n toggleAllPageRowsSelected: value => instance.setRowSelection(old => {\n typeof value !== 'undefined' ? value : !instance.getIsAllPageRowsSelected();\n const rowSelection = { ...old\n };\n instance.getRowModel().rows.forEach(row => {\n mutateRowIsSelected(rowSelection, row.id, value, instance);\n });\n return rowSelection;\n }),\n // addRowSelectionRange: rowId => {\n // const {\n // rows,\n // rowsById,\n // options: { selectGroupingRows, selectSubRows },\n // } = instance\n // const findSelectedRow = (rows: Row[]) => {\n // let found\n // rows.find(d => {\n // if (d.getIsSelected()) {\n // found = d\n // return true\n // }\n // const subFound = findSelectedRow(d.subRows || [])\n // if (subFound) {\n // found = subFound\n // return true\n // }\n // return false\n // })\n // return found\n // }\n // const firstRow = findSelectedRow(rows) || rows[0]\n // const lastRow = rowsById[rowId]\n // let include = false\n // const selectedRowIds = {}\n // const addRow = (row: Row) => {\n // mutateRowIsSelected(selectedRowIds, row.id, true, {\n // rowsById,\n // selectGroupingRows: selectGroupingRows!,\n // selectSubRows: selectSubRows!,\n // })\n // }\n // instance.rows.forEach(row => {\n // const isFirstRow = row.id === firstRow.id\n // const isLastRow = row.id === lastRow.id\n // if (isFirstRow || isLastRow) {\n // if (!include) {\n // include = true\n // } else if (include) {\n // addRow(row)\n // include = false\n // }\n // }\n // if (include) {\n // addRow(row)\n // }\n // })\n // instance.setRowSelection(selectedRowIds)\n // },\n getPreSelectedRowModel: () => instance.getCoreRowModel(),\n getSelectedRowModel: memo(() => [instance.getState().rowSelection, instance.getCoreRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n\n return selectRowsFn(instance, rowModel);\n }, {\n key: process.env.NODE_ENV === 'development' && 'getSelectedRowModel',\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;\n }\n }),\n getFilteredSelectedRowModel: memo(() => [instance.getState().rowSelection, instance.getFilteredRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n\n return selectRowsFn(instance, rowModel);\n }, {\n key: process.env.NODE_ENV === 'production' && 'getFilteredSelectedRowModel',\n debug: () => {\n var _instance$options$deb2;\n\n return (_instance$options$deb2 = instance.options.debugAll) != null ? _instance$options$deb2 : instance.options.debugTable;\n }\n }),\n getGroupedSelectedRowModel: memo(() => [instance.getState().rowSelection, instance.getGroupedRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n\n return selectRowsFn(instance, rowModel);\n }, {\n key: process.env.NODE_ENV === 'production' && 'getGroupedSelectedRowModel',\n debug: () => {\n var _instance$options$deb3;\n\n return (_instance$options$deb3 = instance.options.debugAll) != null ? _instance$options$deb3 : instance.options.debugTable;\n }\n }),\n ///\n // getGroupingRowCanSelect: rowId => {\n // const row = instance.getRow(rowId)\n // if (!row) {\n // throw new Error()\n // }\n // if (typeof instance.options.enableGroupingRowSelection === 'function') {\n // return instance.options.enableGroupingRowSelection(row)\n // }\n // return instance.options.enableGroupingRowSelection ?? false\n // },\n getIsAllRowsSelected: () => {\n const preFilteredFlatRows = instance.getPreFilteredRowModel().flatRows;\n const {\n rowSelection\n } = instance.getState();\n let isAllRowsSelected = Boolean(preFilteredFlatRows.length && Object.keys(rowSelection).length);\n\n if (isAllRowsSelected) {\n if (preFilteredFlatRows.some(row => !rowSelection[row.id])) {\n isAllRowsSelected = false;\n }\n }\n\n return isAllRowsSelected;\n },\n getIsAllPageRowsSelected: () => {\n const paginationFlatRows = instance.getPaginationRowModel().flatRows;\n const {\n rowSelection\n } = instance.getState();\n let isAllPageRowsSelected = !!paginationFlatRows.length;\n\n if (isAllPageRowsSelected && paginationFlatRows.some(row => !rowSelection[row.id])) {\n isAllPageRowsSelected = false;\n }\n\n return isAllPageRowsSelected;\n },\n getIsSomeRowsSelected: () => {\n var _instance$getState$ro;\n\n return !instance.getIsAllRowsSelected() && !!Object.keys((_instance$getState$ro = instance.getState().rowSelection) != null ? _instance$getState$ro : {}).length;\n },\n getIsSomePageRowsSelected: () => {\n const paginationFlatRows = instance.getPaginationRowModel().flatRows;\n return instance.getIsAllPageRowsSelected() ? false : !!(paginationFlatRows != null && paginationFlatRows.length);\n },\n getToggleAllRowsSelectedHandler: () => {\n return e => {\n instance.toggleAllRowsSelected(e.target.checked);\n };\n },\n getToggleAllPageRowsSelectedHandler: () => {\n return e => {\n instance.toggleAllPageRowsSelected(e.target.checked);\n };\n }\n };\n },\n createRow: (row, instance) => {\n return {\n toggleSelected: value => {\n const isSelected = row.getIsSelected();\n instance.setRowSelection(old => {\n value = typeof value !== 'undefined' ? value : !isSelected;\n\n if (isSelected === value) {\n return old;\n }\n\n const selectedRowIds = { ...old\n };\n mutateRowIsSelected(selectedRowIds, row.id, value, instance);\n return selectedRowIds;\n });\n },\n getIsSelected: () => {\n const {\n rowSelection\n } = instance.getState();\n return isRowSelected(row, rowSelection) === true;\n },\n getIsSomeSelected: () => {\n const {\n rowSelection\n } = instance.getState();\n return isRowSelected(row, rowSelection) === 'some';\n },\n getCanSelect: () => {\n var _instance$options$ena;\n\n if (typeof instance.options.enableRowSelection === 'function') {\n return instance.options.enableRowSelection(row);\n }\n\n return (_instance$options$ena = instance.options.enableRowSelection) != null ? _instance$options$ena : true;\n },\n getCanSelectSubRows: () => {\n var _instance$options$ena2;\n\n if (typeof instance.options.enableSubRowSelection === 'function') {\n return instance.options.enableSubRowSelection(row);\n }\n\n return (_instance$options$ena2 = instance.options.enableSubRowSelection) != null ? _instance$options$ena2 : true;\n },\n getCanMultiSelect: () => {\n var _instance$options$ena3;\n\n if (typeof instance.options.enableMultiRowSelection === 'function') {\n return instance.options.enableMultiRowSelection(row);\n }\n\n return (_instance$options$ena3 = instance.options.enableMultiRowSelection) != null ? _instance$options$ena3 : true;\n },\n getToggleSelectedHandler: () => {\n const canSelect = row.getCanSelect();\n return e => {\n var _target;\n\n if (!canSelect) return;\n row.toggleSelected((_target = e.target) == null ? void 0 : _target.checked);\n };\n }\n };\n }\n};\n\nconst mutateRowIsSelected = (selectedRowIds, id, value, instance) => {\n var _row$subRows;\n\n const row = instance.getRow(id);\n row.getIsGrouped(); // if ( // TODO: enforce grouping row selection rules\n // !isGrouped ||\n // (isGrouped && instance.options.enableGroupingRowSelection)\n // ) {\n\n if (value) {\n selectedRowIds[id] = true;\n } else {\n delete selectedRowIds[id];\n } // }\n\n\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && row.getCanSelectSubRows()) {\n row.subRows.forEach(row => mutateRowIsSelected(selectedRowIds, row.id, value, instance));\n }\n};\n\nfunction selectRowsFn(instance, rowModel) {\n const rowSelection = instance.getState().rowSelection;\n const newSelectedFlatRows = [];\n const newSelectedRowsById = {}; // Filters top level and nested rows\n\n const recurseRows = function (rows, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n\n return rows.map(row => {\n var _row$subRows2;\n\n const isSelected = isRowSelected(row, rowSelection) === true;\n\n if (isSelected) {\n newSelectedFlatRows.push(row);\n newSelectedRowsById[row.id] = row;\n }\n\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length) {\n row = { ...row,\n subRows: recurseRows(row.subRows, depth + 1)\n };\n }\n\n if (isSelected) {\n return row;\n }\n }).filter(Boolean);\n };\n\n return {\n rows: recurseRows(rowModel.rows),\n flatRows: newSelectedFlatRows,\n rowsById: newSelectedRowsById\n };\n}\nfunction isRowSelected(row, selection, instance) {\n if (selection[row.id]) {\n return true;\n }\n\n if (row.subRows && row.subRows.length) {\n let allChildrenSelected = true;\n let someSelected = false;\n row.subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return;\n }\n\n if (isRowSelected(subRow, selection)) {\n someSelected = true;\n } else {\n allChildrenSelected = false;\n }\n });\n return allChildrenSelected ? true : someSelected ? 'some' : false;\n }\n\n return false;\n}\n\nconst reSplitAlphaNumeric = /([0-9]+)/gm;\nconst sortingFns = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic\n};\n\nfunction alphanumeric(rowA, rowB, columnId) {\n return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n}\n\nfunction alphanumericCaseSensitive(rowA, rowB, columnId) {\n return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n} // Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\n\n\nfunction compareAlphanumeric(aStr, bStr) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean); // While\n\n while (a.length && b.length) {\n const aa = a.shift();\n const bb = b.shift();\n const an = parseInt(aa, 10);\n const bn = parseInt(bb, 10);\n const combo = [an, bn].sort(); // Both are string\n\n if (isNaN(combo[0])) {\n if (aa > bb) {\n return 1;\n }\n\n if (bb > aa) {\n return -1;\n }\n\n continue;\n } // One is a string, one is a number\n\n\n if (isNaN(combo[1])) {\n return isNaN(an) ? -1 : 1;\n } // Both are numbers\n\n\n if (an > bn) {\n return 1;\n }\n\n if (bn > an) {\n return -1;\n }\n }\n\n return a.length - b.length;\n} // The text filter is more basic (less numeric support)\n// but is much faster\n\n\nfunction text(rowA, rowB, columnId) {\n return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n} // The text filter is more basic (less numeric support)\n// but is much faster\n\n\nfunction textCaseSensitive(rowA, rowB, columnId) {\n return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n}\n\nfunction datetime(rowA, rowB, columnId) {\n return compareBasic(rowA.getValue(columnId).getTime(), rowB.getValue(columnId).getTime());\n}\n\nfunction basic(rowA, rowB, columnId) {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));\n} // Utils\n\n\nfunction compareBasic(a, b) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\n\nfunction toString(a) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return '';\n }\n\n return String(a);\n }\n\n if (typeof a === 'string') {\n return a;\n }\n\n return '';\n}\n\n//\nconst Sorting = {\n getInitialState: state => {\n return {\n sorting: [],\n ...state\n };\n },\n getDefaultColumn: () => {\n return {\n sortingFn: 'auto'\n };\n },\n getDefaultOptions: instance => {\n return {\n onSortingChange: makeStateUpdater('sorting', instance),\n isMultiSortEvent: e => {\n return e.shiftKey;\n }\n };\n },\n createColumn: (column, instance) => {\n return {\n getAutoSortingFn: () => {\n const firstRows = instance.getFilteredRowModel().flatRows.slice(100);\n let isString = false;\n\n for (const row of firstRows) {\n const value = row == null ? void 0 : row.getValue(column.id);\n\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return sortingFns.datetime;\n }\n\n if (typeof value === 'string') {\n isString = true;\n\n if (value.split(reSplitAlphaNumeric).length > 1) {\n return sortingFns.alphanumeric;\n }\n }\n }\n\n if (isString) {\n return sortingFns.text;\n }\n\n return sortingFns.basic;\n },\n getAutoSortDir: () => {\n const firstRow = instance.getFilteredRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n\n if (typeof value === 'string') {\n return 'asc';\n }\n\n return 'desc';\n },\n getSortingFn: () => {\n var _ref;\n\n const userSortingFn = instance.options.sortingFns;\n\n if (!column) {\n throw new Error();\n }\n\n return isFunction(column.sortingFn) ? column.sortingFn : column.sortingFn === 'auto' ? column.getAutoSortingFn() : (_ref = userSortingFn == null ? void 0 : userSortingFn[column.sortingFn]) != null ? _ref : sortingFns[column.sortingFn];\n },\n toggleSorting: (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // instance.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n instance.setSorting(old => {\n var _ref2, _column$sortDescFirst, _instance$options$ena, _instance$options$ena2;\n\n // Find any existing sorting for this column\n const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);\n const existingIndex = old == null ? void 0 : old.findIndex(d => d.id === column.id);\n const hasDescDefined = typeof desc !== 'undefined' && desc !== null;\n let newSorting = []; // What should we do with this sort action?\n\n let sortAction;\n\n if (column.getCanMultiSort() && multi) {\n if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'add';\n }\n } else {\n // Normal mode\n if (old != null && old.length && existingIndex !== old.length - 1) {\n sortAction = 'replace';\n } else if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'replace';\n }\n }\n\n const sortDescFirst = (_ref2 = (_column$sortDescFirst = column.sortDescFirst) != null ? _column$sortDescFirst : instance.options.sortDescFirst) != null ? _ref2 : column.getAutoSortDir() === 'desc'; // Handle toggle states that will remove the sorting\n\n if (sortAction === 'toggle' && ( // Must be toggling\n (_instance$options$ena = instance.options.enableSortingRemoval) != null ? _instance$options$ena : true) && // If enableSortRemove, enable in general\n !hasDescDefined && ( // Must not be setting desc\n multi ? (_instance$options$ena2 = instance.options.enableMultiRemove) != null ? _instance$options$ena2 : true : true) && ( // If multi, don't allow if enableMultiRemove\n existingSorting != null && existingSorting.desc // Finally, detect if it should indeed be removed\n ? !sortDescFirst : sortDescFirst)) {\n sortAction = 'remove';\n }\n\n if (sortAction === 'replace') {\n newSorting = [{\n id: column.id,\n desc: hasDescDefined ? desc : !!sortDescFirst\n }];\n } else if (sortAction === 'add' && old != null && old.length) {\n var _instance$options$max;\n\n newSorting = [...old, {\n id: column.id,\n desc: hasDescDefined ? desc : !!sortDescFirst\n }]; // Take latest n columns\n\n newSorting.splice(0, newSorting.length - ((_instance$options$max = instance.options.maxMultiSortColCount) != null ? _instance$options$max : Number.MAX_SAFE_INTEGER));\n } else if (sortAction === 'toggle' && old != null && old.length) {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return { ...d,\n desc: hasDescDefined ? desc : !(existingSorting != null && existingSorting.desc)\n };\n }\n\n return d;\n });\n } else if (sortAction === 'remove' && old != null && old.length) {\n newSorting = old.filter(d => d.id !== column.id);\n }\n\n return newSorting;\n });\n },\n getCanSort: () => {\n var _column$enableSorting, _instance$options$ena3;\n\n return ((_column$enableSorting = column.enableSorting) != null ? _column$enableSorting : true) && ((_instance$options$ena3 = instance.options.enableSorting) != null ? _instance$options$ena3 : true) && !!column.accessorFn;\n },\n getCanMultiSort: () => {\n var _ref3, _column$enableMultiSo;\n\n return (_ref3 = (_column$enableMultiSo = column.enableMultiSort) != null ? _column$enableMultiSo : instance.options.enableMultiSort) != null ? _ref3 : !!column.accessorFn;\n },\n getIsSorted: () => {\n var _instance$getState$so;\n\n const columnSort = (_instance$getState$so = instance.getState().sorting) == null ? void 0 : _instance$getState$so.find(d => d.id === column.id);\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc';\n },\n getSortIndex: () => {\n var _instance$getState$so2, _instance$getState$so3;\n\n return (_instance$getState$so2 = (_instance$getState$so3 = instance.getState().sorting) == null ? void 0 : _instance$getState$so3.findIndex(d => d.id === column.id)) != null ? _instance$getState$so2 : -1;\n },\n clearSorting: () => {\n //clear sorting for just 1 column\n instance.setSorting(old => old != null && old.length ? old.filter(d => d.id !== column.id) : []);\n },\n getToggleSortingHandler: () => {\n const canSort = column.getCanSort();\n return e => {\n if (!canSort) return;\n e.persist == null ? void 0 : e.persist();\n column.toggleSorting == null ? void 0 : column.toggleSorting(undefined, column.getCanMultiSort() ? instance.options.isMultiSortEvent == null ? void 0 : instance.options.isMultiSortEvent(e) : false);\n };\n }\n };\n },\n createInstance: instance => {\n return {\n setSorting: updater => instance.options.onSortingChange == null ? void 0 : instance.options.onSortingChange(updater),\n resetSorting: defaultState => {\n var _instance$initialStat, _instance$initialStat2;\n\n instance.setSorting(defaultState ? [] : (_instance$initialStat = (_instance$initialStat2 = instance.initialState) == null ? void 0 : _instance$initialStat2.sorting) != null ? _instance$initialStat : []);\n },\n getPreSortedRowModel: () => instance.getFilteredRowModel(),\n getSortedRowModel: () => {\n if (!instance._getSortedRowModel && instance.options.getSortedRowModel) {\n instance._getSortedRowModel = instance.options.getSortedRowModel(instance);\n }\n\n if (instance.options.manualSorting || !instance._getSortedRowModel) {\n return instance.getPreSortedRowModel();\n }\n\n return instance._getSortedRowModel();\n }\n };\n }\n};\n\n//\nconst Visibility = {\n getInitialState: state => {\n return {\n columnVisibility: {},\n ...state\n };\n },\n getDefaultOptions: instance => {\n return {\n onColumnVisibilityChange: makeStateUpdater('columnVisibility', instance)\n };\n },\n getDefaultColumn: () => {\n return {\n defaultIsVisible: true\n };\n },\n createColumn: (column, instance) => {\n return {\n toggleVisibility: value => {\n if (column.getCanHide()) {\n instance.setColumnVisibility(old => ({ ...old,\n [column.id]: value != null ? value : !column.getIsVisible()\n }));\n }\n },\n getIsVisible: () => {\n var _instance$getState$co, _instance$getState$co2;\n\n return (_instance$getState$co = (_instance$getState$co2 = instance.getState().columnVisibility) == null ? void 0 : _instance$getState$co2[column.id]) != null ? _instance$getState$co : true;\n },\n getCanHide: () => {\n var _column$enableHiding, _instance$options$ena;\n\n return ((_column$enableHiding = column.enableHiding) != null ? _column$enableHiding : true) && ((_instance$options$ena = instance.options.enableHiding) != null ? _instance$options$ena : true);\n },\n getToggleVisibilityHandler: () => {\n return e => {\n column.toggleVisibility == null ? void 0 : column.toggleVisibility(e.target.checked);\n };\n }\n };\n },\n createRow: (row, instance) => {\n return {\n _getAllVisibleCells: memo(() => [row.getAllCells().filter(cell => cell.column.getIsVisible()).map(d => d.id).join('_')], _ => {\n return row.getAllCells().filter(cell => cell.column.getIsVisible());\n }, {\n key: process.env.NODE_ENV === 'production' && 'row._getAllVisibleCells',\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugRows;\n }\n }),\n getVisibleCells: memo(() => [row.getLeftVisibleCells(), row.getCenterVisibleCells(), row.getRightVisibleCells()], (left, center, right) => [...left, ...center, ...right], {\n key: process.env.NODE_ENV === 'development' && 'row.getVisibleCells',\n debug: () => {\n var _instance$options$deb2;\n\n return (_instance$options$deb2 = instance.options.debugAll) != null ? _instance$options$deb2 : instance.options.debugRows;\n }\n })\n };\n },\n createInstance: instance => {\n const makeVisibleColumnsMethod = (key, getColumns) => {\n return memo(() => [getColumns(), getColumns().filter(d => d.getIsVisible()).map(d => d.id).join('_')], columns => {\n return columns.filter(d => d.getIsVisible == null ? void 0 : d.getIsVisible());\n }, {\n key,\n debug: () => {\n var _instance$options$deb3;\n\n return (_instance$options$deb3 = instance.options.debugAll) != null ? _instance$options$deb3 : instance.options.debugColumns;\n }\n });\n };\n\n return {\n getVisibleFlatColumns: makeVisibleColumnsMethod('getVisibleFlatColumns', () => instance.getAllFlatColumns()),\n getVisibleLeafColumns: makeVisibleColumnsMethod('getVisibleLeafColumns', () => instance.getAllLeafColumns()),\n getLeftVisibleLeafColumns: makeVisibleColumnsMethod('getLeftVisibleLeafColumns', () => instance.getLeftLeafColumns()),\n getRightVisibleLeafColumns: makeVisibleColumnsMethod('getRightVisibleLeafColumns', () => instance.getRightLeafColumns()),\n getCenterVisibleLeafColumns: makeVisibleColumnsMethod('getCenterVisibleLeafColumns', () => instance.getCenterLeafColumns()),\n setColumnVisibility: updater => instance.options.onColumnVisibilityChange == null ? void 0 : instance.options.onColumnVisibilityChange(updater),\n resetColumnVisibility: defaultState => {\n var _instance$initialStat;\n\n instance.setColumnVisibility(defaultState ? {} : (_instance$initialStat = instance.initialState.columnVisibility) != null ? _instance$initialStat : {});\n },\n toggleAllColumnsVisible: value => {\n var _value;\n\n value = (_value = value) != null ? _value : !instance.getIsAllColumnsVisible();\n instance.setColumnVisibility(instance.getAllLeafColumns().reduce((obj, column) => ({ ...obj,\n [column.id]: !value ? !(column.getCanHide != null && column.getCanHide()) : value\n }), {}));\n },\n getIsAllColumnsVisible: () => !instance.getAllLeafColumns().some(column => !(column.getIsVisible != null && column.getIsVisible())),\n getIsSomeColumnsVisible: () => instance.getAllLeafColumns().some(column => column.getIsVisible == null ? void 0 : column.getIsVisible()),\n getToggleAllColumnsVisibilityHandler: () => {\n return e => {\n var _target;\n\n instance.toggleAllColumnsVisible((_target = e.target) == null ? void 0 : _target.checked);\n };\n }\n };\n }\n};\n\n//\nconst Headers = {\n createInstance: instance => {\n return {\n createHeader: (column, options) => {\n var _options$id;\n\n const id = (_options$id = options.id) != null ? _options$id : column.id;\n let header = {\n id,\n column,\n index: options.index,\n isPlaceholder: options.isPlaceholder,\n placeholderId: options.placeholderId,\n depth: options.depth,\n subHeaders: [],\n colSpan: 0,\n rowSpan: 0,\n headerGroup: null,\n getLeafHeaders: () => {\n const leafHeaders = [];\n\n const recurseHeader = h => {\n if (h.subHeaders && h.subHeaders.length) {\n h.subHeaders.map(recurseHeader);\n }\n\n leafHeaders.push(h);\n };\n\n recurseHeader(header);\n return leafHeaders;\n },\n renderHeader: () => column.header ? instance.render(column.header, {\n instance,\n header: header,\n column\n }) : null,\n renderFooter: () => column.footer ? instance.render(column.footer, {\n instance,\n header: header,\n column\n }) : null\n };\n\n instance._features.forEach(feature => {\n Object.assign(header, feature.createHeader == null ? void 0 : feature.createHeader(header, instance));\n });\n\n return header;\n },\n // Header Groups\n getHeaderGroups: memo(() => [instance.getAllColumns(), instance.getVisibleLeafColumns(), instance.getState().columnPinning.left, instance.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n const leftColumns = leafColumns.filter(column => left == null ? void 0 : left.includes(column.id));\n const rightColumns = leafColumns.filter(column => right == null ? void 0 : right.includes(column.id));\n const centerColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], instance);\n return headerGroups;\n }, {\n key: process.env.NODE_ENV === 'development' && 'getHeaderGroups',\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugHeaders;\n }\n }),\n getCenterHeaderGroups: memo(() => [instance.getAllColumns(), instance.getVisibleLeafColumns(), instance.getState().columnPinning.left, instance.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n leafColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n return buildHeaderGroups(allColumns, leafColumns, instance, 'center');\n }, {\n key: process.env.NODE_ENV === 'development' && 'getCenterHeaderGroups',\n debug: () => {\n var _instance$options$deb2;\n\n return (_instance$options$deb2 = instance.options.debugAll) != null ? _instance$options$deb2 : instance.options.debugHeaders;\n }\n }),\n getLeftHeaderGroups: memo(() => [instance.getAllColumns(), instance.getVisibleLeafColumns(), instance.getState().columnPinning.left], (allColumns, leafColumns, left) => {\n leafColumns = leafColumns.filter(column => left == null ? void 0 : left.includes(column.id));\n return buildHeaderGroups(allColumns, leafColumns, instance, 'left');\n }, {\n key: process.env.NODE_ENV === 'development' && 'getLeftHeaderGroups',\n debug: () => {\n var _instance$options$deb3;\n\n return (_instance$options$deb3 = instance.options.debugAll) != null ? _instance$options$deb3 : instance.options.debugHeaders;\n }\n }),\n getRightHeaderGroups: memo(() => [instance.getAllColumns(), instance.getVisibleLeafColumns(), instance.getState().columnPinning.right], (allColumns, leafColumns, right) => {\n leafColumns = leafColumns.filter(column => right == null ? void 0 : right.includes(column.id));\n return buildHeaderGroups(allColumns, leafColumns, instance, 'right');\n }, {\n key: process.env.NODE_ENV === 'development' && 'getRightHeaderGroups',\n debug: () => {\n var _instance$options$deb4;\n\n return (_instance$options$deb4 = instance.options.debugAll) != null ? _instance$options$deb4 : instance.options.debugHeaders;\n }\n }),\n // Footer Groups\n getFooterGroups: memo(() => [instance.getHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, {\n key: process.env.NODE_ENV === 'development' && 'getFooterGroups',\n debug: () => {\n var _instance$options$deb5;\n\n return (_instance$options$deb5 = instance.options.debugAll) != null ? _instance$options$deb5 : instance.options.debugHeaders;\n }\n }),\n getLeftFooterGroups: memo(() => [instance.getLeftHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, {\n key: process.env.NODE_ENV === 'development' && 'getLeftFooterGroups',\n debug: () => {\n var _instance$options$deb6;\n\n return (_instance$options$deb6 = instance.options.debugAll) != null ? _instance$options$deb6 : instance.options.debugHeaders;\n }\n }),\n getCenterFooterGroups: memo(() => [instance.getCenterHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, {\n key: process.env.NODE_ENV === 'development' && 'getCenterFooterGroups',\n debug: () => {\n var _instance$options$deb7;\n\n return (_instance$options$deb7 = instance.options.debugAll) != null ? _instance$options$deb7 : instance.options.debugHeaders;\n }\n }),\n getRightFooterGroups: memo(() => [instance.getRightHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, {\n key: process.env.NODE_ENV === 'development' && 'getRightFooterGroups',\n debug: () => {\n var _instance$options$deb8;\n\n return (_instance$options$deb8 = instance.options.debugAll) != null ? _instance$options$deb8 : instance.options.debugHeaders;\n }\n }),\n // Flat Headers\n getFlatHeaders: memo(() => [instance.getHeaderGroups()], headerGroups => {\n return headerGroups.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, {\n key: process.env.NODE_ENV === 'development' && 'getFlatHeaders',\n debug: () => {\n var _instance$options$deb9;\n\n return (_instance$options$deb9 = instance.options.debugAll) != null ? _instance$options$deb9 : instance.options.debugHeaders;\n }\n }),\n getLeftFlatHeaders: memo(() => [instance.getLeftHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, {\n key: process.env.NODE_ENV === 'development' && 'getLeftFlatHeaders',\n debug: () => {\n var _instance$options$deb10;\n\n return (_instance$options$deb10 = instance.options.debugAll) != null ? _instance$options$deb10 : instance.options.debugHeaders;\n }\n }),\n getCenterFlatHeaders: memo(() => [instance.getCenterHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, {\n key: process.env.NODE_ENV === 'development' && 'getCenterFlatHeaders',\n debug: () => {\n var _instance$options$deb11;\n\n return (_instance$options$deb11 = instance.options.debugAll) != null ? _instance$options$deb11 : instance.options.debugHeaders;\n }\n }),\n getRightFlatHeaders: memo(() => [instance.getRightHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, {\n key: process.env.NODE_ENV === 'development' && 'getRightFlatHeaders',\n debug: () => {\n var _instance$options$deb12;\n\n return (_instance$options$deb12 = instance.options.debugAll) != null ? _instance$options$deb12 : instance.options.debugHeaders;\n }\n }),\n // Leaf Headers\n getCenterLeafHeaders: memo(() => [instance.getCenterFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders;\n\n return !((_header$subHeaders = header.subHeaders) != null && _header$subHeaders.length);\n });\n }, {\n key: process.env.NODE_ENV === 'development' && 'getCenterLeafHeaders',\n debug: () => {\n var _instance$options$deb13;\n\n return (_instance$options$deb13 = instance.options.debugAll) != null ? _instance$options$deb13 : instance.options.debugHeaders;\n }\n }),\n getLeftLeafHeaders: memo(() => [instance.getLeftFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders2;\n\n return !((_header$subHeaders2 = header.subHeaders) != null && _header$subHeaders2.length);\n });\n }, {\n key: process.env.NODE_ENV === 'development' && 'getLeftLeafHeaders',\n debug: () => {\n var _instance$options$deb14;\n\n return (_instance$options$deb14 = instance.options.debugAll) != null ? _instance$options$deb14 : instance.options.debugHeaders;\n }\n }),\n getRightLeafHeaders: memo(() => [instance.getRightFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders3;\n\n return !((_header$subHeaders3 = header.subHeaders) != null && _header$subHeaders3.length);\n });\n }, {\n key: process.env.NODE_ENV === 'development' && 'getRightLeafHeaders',\n debug: () => {\n var _instance$options$deb15;\n\n return (_instance$options$deb15 = instance.options.debugAll) != null ? _instance$options$deb15 : instance.options.debugHeaders;\n }\n }),\n getLeafHeaders: memo(() => [instance.getLeftHeaderGroups(), instance.getCenterHeaderGroups(), instance.getRightHeaderGroups()], (left, center, right) => {\n var _left$0$headers, _left$, _center$0$headers, _center$, _right$0$headers, _right$;\n\n return [...((_left$0$headers = (_left$ = left[0]) == null ? void 0 : _left$.headers) != null ? _left$0$headers : []), ...((_center$0$headers = (_center$ = center[0]) == null ? void 0 : _center$.headers) != null ? _center$0$headers : []), ...((_right$0$headers = (_right$ = right[0]) == null ? void 0 : _right$.headers) != null ? _right$0$headers : [])].map(header => {\n return header.getLeafHeaders();\n }).flat();\n }, {\n key: process.env.NODE_ENV === 'development' && 'getLeafHeaders',\n debug: () => {\n var _instance$options$deb16;\n\n return (_instance$options$deb16 = instance.options.debugAll) != null ? _instance$options$deb16 : instance.options.debugHeaders;\n }\n }),\n getHeader: id => {\n const header = [...instance.getFlatHeaders(), ...instance.getCenterFlatHeaders(), ...instance.getLeftFlatHeaders(), ...instance.getRightFlatHeaders()].find(d => d.id === id);\n\n if (!header) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"Could not find header with id: \" + id);\n }\n\n throw new Error();\n }\n\n return header;\n }\n };\n }\n};\nfunction buildHeaderGroups(allColumns, columnsToGroup, instance, headerFamily) {\n var _headerGroups$0$heade, _headerGroups$;\n\n // Find the max depth of the columns:\n // build the leaf column row\n // build each buffer row going up\n // placeholder for non-existent level\n // real column for existing level\n let maxDepth = 0;\n\n const findMaxDepth = function (columns, depth) {\n if (depth === void 0) {\n depth = 1;\n }\n\n maxDepth = Math.max(maxDepth, depth);\n columns.filter(column => column.getIsVisible()).forEach(column => {\n var _column$columns;\n\n if ((_column$columns = column.columns) != null && _column$columns.length) {\n findMaxDepth(column.columns, depth + 1);\n }\n }, 0);\n };\n\n findMaxDepth(allColumns);\n let headerGroups = [];\n\n const createHeaderGroup = (headersToGroup, depth) => {\n // The header group we are creating\n const headerGroup = {\n depth,\n id: [headerFamily, \"\" + depth].filter(Boolean).join('_'),\n headers: []\n }; // The parent columns we're going to scan next\n\n const pendingParentHeaders = []; // Scan each column for parents\n\n headersToGroup.forEach(headerToGroup => {\n // What is the latest (last) parent column?\n const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0];\n const isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n let column;\n let isPlaceholder = false;\n\n if (isLeafHeader && headerToGroup.column.parent) {\n // The parent header is new\n column = headerToGroup.column.parent;\n } else {\n // The parent header is repeated\n column = headerToGroup.column;\n isPlaceholder = true;\n }\n\n if ((latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) {\n // This column is repeated. Add it as a sub header to the next batch\n latestPendingParentHeader.subHeaders.push(headerToGroup);\n } else {\n // This is a new header. Let's create it\n const header = instance.createHeader(column, {\n id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join('_'),\n isPlaceholder,\n placeholderId: isPlaceholder ? \"\" + pendingParentHeaders.filter(d => d.column === column).length : undefined,\n depth,\n index: pendingParentHeaders.length\n }); // Add the headerToGroup as a subHeader of the new header\n\n header.subHeaders.push(headerToGroup); // Add the new header to the pendingParentHeaders to get grouped\n // in the next batch\n\n pendingParentHeaders.push(header);\n }\n\n headerGroup.headers.push(headerToGroup);\n headerToGroup.headerGroup = headerGroup;\n });\n headerGroups.push(headerGroup);\n\n if (depth > 0) {\n createHeaderGroup(pendingParentHeaders, depth - 1);\n }\n };\n\n const bottomHeaders = columnsToGroup.map((column, index) => instance.createHeader(column, {\n depth: maxDepth,\n index\n }));\n createHeaderGroup(bottomHeaders, maxDepth - 1);\n headerGroups.reverse(); // headerGroups = headerGroups.filter(headerGroup => {\n // return !headerGroup.headers.every(header => header.isPlaceholder)\n // })\n\n const recurseHeadersForSpans = headers => {\n const filteredHeaders = headers.filter(header => header.column.getIsVisible());\n return filteredHeaders.map(header => {\n let colSpan = 0;\n let rowSpan = 0;\n let childRowSpans = [0];\n\n if (header.subHeaders && header.subHeaders.length) {\n childRowSpans = [];\n recurseHeadersForSpans(header.subHeaders).forEach(_ref => {\n let {\n colSpan: childColSpan,\n rowSpan: childRowSpan\n } = _ref;\n colSpan += childColSpan;\n childRowSpans.push(childRowSpan);\n });\n } else {\n colSpan = 1;\n }\n\n const minChildRowSpan = Math.min(...childRowSpans);\n rowSpan = rowSpan + minChildRowSpan;\n header.colSpan = colSpan > 0 ? colSpan : undefined;\n header.rowSpan = rowSpan > 0 ? rowSpan : undefined;\n return {\n colSpan,\n rowSpan\n };\n });\n };\n\n recurseHeadersForSpans((_headerGroups$0$heade = (_headerGroups$ = headerGroups[0]) == null ? void 0 : _headerGroups$.headers) != null ? _headerGroups$0$heade : []);\n return headerGroups;\n}\n\n// export type Batch = {\n// id: number\n// priority: keyof CoreBatches\n// tasks: (() => void)[]\n// schedule: (cb: () => void) => void\n// cancel: () => void\n// }\n// type CoreBatches = {\n// data: Batch[]\n// facets: Batch[]\n// }\n// export type TaskPriority = keyof CoreBatches\nfunction createTableInstance(options) {\n var _options$initialState;\n\n if (options.debugAll || options.debugTable) {\n console.info('Creating Table Instance...');\n }\n\n let instance = {\n _features: [Columns, Rows, Cells, Headers, Visibility, Ordering, Pinning, Filters, Sorting, Grouping, Expanding, Pagination, RowSelection, ColumnSizing]\n };\n\n const defaultOptions = instance._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultOptions == null ? void 0 : feature.getDefaultOptions(instance));\n }, {});\n\n const mergeOptions = options => {\n if (instance.options.mergeOptions) {\n return instance.options.mergeOptions(defaultOptions, options);\n }\n\n return { ...defaultOptions,\n ...options\n };\n };\n\n const coreInitialState = {// coreProgress: 1,\n };\n let initialState = { ...coreInitialState,\n ...((_options$initialState = options.initialState) != null ? _options$initialState : {})\n };\n\n instance._features.forEach(feature => {\n var _feature$getInitialSt;\n\n initialState = (_feature$getInitialSt = feature.getInitialState == null ? void 0 : feature.getInitialState(initialState)) != null ? _feature$getInitialSt : initialState;\n });\n\n const queued = [];\n let queuedTimeout = false; // let workScheduled = false\n // let working = false\n // let latestCallback: ReturnType<typeof requestIdleCallback>\n // let batchUid = 0\n // const onProgress = () => {}\n // const getBatch = () => {\n // instance.batches.data = instance.batches.data.filter(d => d.tasks.length)\n // instance.batches.facets = instance.batches.facets.filter(\n // d => d.tasks.length\n // )\n // return (\n // instance.batches.data.find(d => d.tasks.length) ??\n // instance.batches.facets.find(d => d.tasks.length)\n // )\n // }\n // const startWorkLoop = () => {\n // working = true\n // const workLoop = (deadline: IdleDeadline) => {\n // const batch = getBatch()\n // if (!batch) {\n // working = false\n // return\n // }\n // // Prioritize tasks\n // while (deadline.timeRemaining() > 0 && batch.tasks.length) {\n // batch.tasks.shift()!()\n // }\n // onProgress()\n // if (working) {\n // latestCallback = requestIdleCallback(workLoop, { timeout: 10000 })\n // }\n // }\n // latestCallback = requestIdleCallback(workLoop, { timeout: 10000 })\n // }\n // const startWork = () => {\n // if (getBatch() && !working) {\n // if (\n // (process.env.NODE_ENV === 'development' && instance.options.debugAll) ??\n // instance.options.debugTable\n // ) {\n // console.info('Starting work...')\n // }\n // startWorkLoop()\n // }\n // }\n // const stopWork = () => {\n // if (working) {\n // if (\n // (process.env.NODE_ENV === 'development' && instance.options.debugAll) ??\n // instance.options.debugTable\n // ) {\n // console.info('Stopping work...')\n // }\n // working = false\n // cancelIdleCallback(latestCallback)\n // }\n // }\n\n const midInstance = { ...instance,\n // init: () => {\n // startWork()\n // },\n // willUpdate: () => {\n // startWork()\n // },\n // destroy: () => {\n // stopWork()\n // },\n options: { ...defaultOptions,\n ...options\n },\n initialState,\n queue: cb => {\n queued.push(cb);\n\n if (!queuedTimeout) {\n queuedTimeout = true; // Schedule a microtask to run the queued callbacks after\n // the current call stack (render, etc) has finished.\n\n Promise.resolve().then(() => {\n while (queued.length) {\n queued.shift()();\n }\n\n queuedTimeout = false;\n }).catch(error => setTimeout(() => {\n throw error;\n }));\n }\n },\n // batches: {\n // data: [],\n // facets: [],\n // },\n // createBatch: priority => {\n // const batchId = batchUid++\n // let canceled: boolean\n // const batch: Batch = {\n // id: batchId,\n // priority,\n // tasks: [],\n // schedule: cb => {\n // if (canceled) return\n // batch.tasks.push(cb)\n // if (!working && !workScheduled) {\n // workScheduled = true\n // instance.queue(() => {\n // workScheduled = false\n // instance.setState(old => ({ ...old }))\n // })\n // }\n // },\n // cancel: () => {\n // canceled = true\n // batch.tasks = []\n // instance.batches[priority] = instance.batches[priority].filter(\n // b => b.id !== batchId\n // )\n // },\n // }\n // instance.batches[priority].push(batch)\n // return batch\n // },\n reset: () => {\n instance.setState(instance.initialState);\n },\n setOptions: updater => {\n const newOptions = functionalUpdate(updater, instance.options);\n instance.options = mergeOptions(newOptions);\n },\n render: (template, props) => {\n if (typeof instance.options.render === 'function') {\n return instance.options.render(template, props);\n }\n\n if (typeof template === 'function') {\n return template(props);\n }\n\n return template;\n },\n getState: () => {\n return instance.options.state;\n },\n setState: updater => {\n instance.options.onStateChange == null ? void 0 : instance.options.onStateChange(updater);\n } // getOverallProgress: () => {\n // const { coreProgress, filtersProgress, facetProgress } =\n // instance.getState()\n // return mean(() =>\n // [coreProgress, filtersProgress].filter(d => d < 1)\n // ) as number\n // },\n // getProgressStage: () => {\n // const { coreProgress, filtersProgress, facetProgress } =\n // instance.getState()\n // if (coreProgress < 1) {\n // return 'coreRowModel'\n // }\n // if (filtersProgress < 1) {\n // return 'filteredRowModel'\n // }\n // if (Object.values(facetProgress).some(d => d < 1)) {\n // return 'facetedRowModel'\n // }\n // },\n\n };\n instance = Object.assign(instance, midInstance);\n\n instance._features.forEach(feature => {\n return Object.assign(instance, feature.createInstance == null ? void 0 : feature.createInstance(instance));\n });\n\n return instance;\n}\n\n//\nfunction createTableFactory(opts) {\n return () => createTable(undefined, undefined, opts);\n} // A lot of returns in here are `as any` for a reason. Unless you\n// can find a better way to do this, then don't worry about them\n\nfunction createTable(_, __, options) {\n const table = {\n generics: undefined,\n options: options != null ? options : {\n render: (() => {\n throw new Error('');\n })()\n },\n setGenerics: () => table,\n setRowType: () => table,\n setTableMetaType: () => table,\n setColumnMetaType: () => table,\n setOptions: newOptions => createTable(_, __, { ...options,\n ...newOptions\n }),\n createDisplayColumn: column => ({ ...column,\n columnDefType: 'display'\n }),\n createGroup: column => ({ ...column,\n columnDefType: 'group'\n }),\n createDataColumn: (accessor, column) => {\n column = { ...column,\n columnDefType: 'data',\n id: column.id\n };\n\n if (typeof accessor === 'string') {\n var _column$id;\n\n return { ...column,\n id: (_column$id = column.id) != null ? _column$id : accessor,\n accessorKey: accessor\n };\n }\n\n if (typeof accessor === 'function') {\n return { ...column,\n accessorFn: accessor\n };\n }\n\n throw new Error('Invalid accessor');\n }\n };\n return table;\n}\n\nfunction getCoreRowModel() {\n return instance => memo(() => [instance.options.data], data => {\n // Access the row model using initial columns\n const rows = [];\n const flatRows = [];\n const rowsById = {};\n const leafColumns = instance.getAllLeafColumns();\n\n const accessRow = function (originalRow, rowIndex, depth, parentRows, parent) {\n if (depth === void 0) {\n depth = 0;\n }\n\n const id = instance.getRowId(originalRow, rowIndex, parent);\n\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\"getRowId expected an ID, but got \" + id);\n }\n }\n\n const values = {};\n\n for (let i = 0; i < leafColumns.length; i++) {\n const column = leafColumns[i];\n\n if (column && column.accessorFn) {\n values[column.id] = column.accessorFn(originalRow, rowIndex);\n }\n } // Make the row\n\n\n const row = instance.createRow(id, originalRow, rowIndex, depth); // Push instance row into the parentRows array\n\n parentRows.push(row); // Keep track of every row in a flat array\n\n flatRows.push(row); // Also keep track of every row by its ID\n\n rowsById[id] = row; // Get the original subrows\n\n if (instance.options.getSubRows) {\n const originalSubRows = instance.options.getSubRows(originalRow, rowIndex); // Then recursively access them\n\n if (originalSubRows != null && originalSubRows.length) {\n row.originalSubRows = originalSubRows;\n const subRows = [];\n\n for (let i = 0; i < row.originalSubRows.length; i++) {\n accessRow(row.originalSubRows[i], i, depth + 1, subRows, row);\n }\n\n row.subRows = subRows;\n }\n }\n };\n\n for (let i = 0; i < data.length; i++) {\n accessRow(data[i], i, 0, rows);\n }\n\n return {\n rows,\n flatRows,\n rowsById\n };\n }, {\n key: process.env.NODE_ENV === 'development' && 'getRowModel',\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;\n },\n onChange: () => {\n instance.queue(() => {\n instance._autoResetPageIndex();\n });\n }\n });\n}\n\nfunction filterRows(rows, filterRowImpl, instance) {\n if (instance.options.filterFromLeafRows) {\n return filterRowModelFromLeafs(rows, filterRowImpl, instance);\n }\n\n return filterRowModelFromRoot(rows, filterRowImpl, instance);\n}\nfunction filterRowModelFromLeafs(rowsToFilter, filterRow, instance) {\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n let row;\n let newRow;\n\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n\n const rows = []; // Filter from children up first\n\n for (let i = 0; i < rowsToFilter.length; i++) {\n var _row$subRows;\n\n row = rowsToFilter[i];\n\n if ((_row$subRows = row.subRows) != null && _row$subRows.length) {\n newRow = instance.createRow(row.id, row.original, row.index, row.depth);\n newRow.columnFilterMap = row.columnFilterMap;\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n\n if (!newRow.subRows.length) {\n continue;\n }\n\n row = newRow;\n }\n\n if (filterRow(row)) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredRowsById[i] = row;\n }\n }\n\n return rows;\n };\n\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\nfunction filterRowModelFromRoot(rowsToFilter, filterRow, instance) {\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n let rows;\n let row;\n let newRow; // Filters top level and nested rows\n\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n\n // Filter from parents downward first\n rows = []; // Apply the filter to any subRows\n\n for (let i = 0; i < rowsToFilter.length; i++) {\n row = rowsToFilter[i];\n const pass = filterRow(row);\n\n if (pass) {\n var _row$subRows2;\n\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length) {\n newRow = instance.createRow(row.id, row.original, row.index, row.depth);\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n }\n\n rows.push(row);\n newFilteredFlatRows.push(row);\n newFilteredRowsById[row.id] = row;\n }\n }\n\n return rows;\n };\n\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\n\nfunction getFilteredRowModel() {\n return instance => memo(() => [instance.getPreFilteredRowModel(), instance.getState().columnFilters, instance.getState().globalFilter], (rowModel, columnFilters, globalFilter) => {\n if (!rowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n return rowModel;\n }\n\n const resolvedColumnFilters = [];\n const resolvedGlobalFilters = [];\n (columnFilters != null ? columnFilters : []).forEach(d => {\n var _filterFn$resolveFilt;\n\n const column = instance.getColumn(d.id);\n\n if (!column) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"Table: Could not find a column to filter with columnId: \" + d.id);\n }\n }\n\n const filterFn = column.getFilterFn();\n\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"Could not find a valid 'column.filterFn' for column with the ID: \" + column.id + \".\");\n }\n\n return;\n }\n\n resolvedColumnFilters.push({\n id: d.id,\n filterFn,\n resolvedValue: (_filterFn$resolveFilt = filterFn.resolveFilterValue == null ? void 0 : filterFn.resolveFilterValue(d.value)) != null ? _filterFn$resolveFilt : d.value\n });\n });\n const filterableIds = columnFilters.map(d => d.id);\n const globalFilterFn = instance.getGlobalFilterFn();\n const globallyFilterableColumns = instance.getAllLeafColumns().filter(column => column.getCanGlobalFilter());\n\n if (globalFilter && globalFilterFn && globallyFilterableColumns.length) {\n filterableIds.push('__global__');\n globallyFilterableColumns.forEach(column => {\n var _globalFilterFn$resol;\n\n resolvedGlobalFilters.push({\n id: column.id,\n filterFn: globalFilterFn,\n resolvedValue: (_globalFilterFn$resol = globalFilterFn.resolveFilterValue == null ? void 0 : globalFilterFn.resolveFilterValue(globalFilter)) != null ? _globalFilterFn$resol : globalFilter\n });\n });\n }\n\n let currentColumnFilter;\n let currentGlobalFilter; // Flag the prefiltered row model with each filter state\n\n for (let j = 0; j < rowModel.flatRows.length; j++) {\n const row = rowModel.flatRows[j];\n row.columnFilterMap = {};\n\n if (resolvedColumnFilters.length) {\n for (let i = 0; i < resolvedColumnFilters.length; i++) {\n currentColumnFilter = resolvedColumnFilters[i]; // Tag the row with the column filter state\n\n row.columnFilterMap[currentColumnFilter.id] = currentColumnFilter.filterFn(row, currentColumnFilter.id, currentColumnFilter.resolvedValue);\n }\n }\n\n if (resolvedGlobalFilters.length) {\n for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n currentGlobalFilter = resolvedGlobalFilters[i]; // Tag the row with the first truthy global filter state\n\n if (currentGlobalFilter.filterFn(row, currentGlobalFilter.id, currentGlobalFilter.resolvedValue)) {\n row.columnFilterMap.__global__ = true;\n break;\n }\n }\n\n if (row.columnFilterMap.__global__ !== true) {\n row.columnFilterMap.__global__ = false;\n }\n }\n }\n\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilterMap[filterableIds[i]] === false) {\n return false;\n }\n }\n\n return true;\n }; // Filter final rows using all of the active filters\n\n\n return filterRows(rowModel.rows, filterRowsImpl, instance);\n }, {\n key: process.env.NODE_ENV === 'development' && 'getFilteredRowModel',\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;\n },\n onChange: () => {\n instance.queue(() => {\n instance._autoResetPageIndex();\n });\n }\n });\n}\n\nfunction getFacetedRowModel() {\n return (instance, columnId) => memo(() => [instance.getPreFilteredRowModel(), instance.getState().columnFilters, instance.getState().globalFilter, instance.getFilteredRowModel()], (preRowModel, columnFilters, globalFilter) => {\n if (!preRowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n return preRowModel;\n }\n\n const filterableIds = [...columnFilters.map(d => d.id).filter(d => d !== columnId), globalFilter ? '__global__' : undefined].filter(Boolean);\n\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilterMap[filterableIds[i]] === false) {\n return false;\n }\n }\n\n return true;\n };\n\n return filterRows(preRowModel.rows, filterRowsImpl, instance);\n }, {\n key: process.env.NODE_ENV === 'development' && 'getFacetedRowModel_' + columnId,\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;\n },\n onChange: () => {}\n });\n}\n\nfunction getFacetedUniqueValues() {\n return (instance, columnId) => memo(() => [instance.getColumn(columnId).getFacetedRowModel()], facetedRowModel => {\n let facetedUniqueValues = new Map();\n\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n var _facetedRowModel$flat;\n\n const value = (_facetedRowModel$flat = facetedRowModel.flatRows[i]) == null ? void 0 : _facetedRowModel$flat.getValue(columnId);\n\n if (facetedUniqueValues.has(value)) {\n var _facetedUniqueValues$;\n\n facetedUniqueValues.set(value, ((_facetedUniqueValues$ = facetedUniqueValues.get(value)) != null ? _facetedUniqueValues$ : 0) + 1);\n } else {\n facetedUniqueValues.set(value, 1);\n }\n }\n\n return facetedUniqueValues;\n }, {\n key: process.env.NODE_ENV === 'development' && 'getFacetedUniqueValues_' + columnId,\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;\n },\n onChange: () => {}\n });\n}\n\nfunction getFacetedMinMaxValues() {\n return (instance, columnId) => memo(() => [instance.getColumn(columnId).getFacetedRowModel()], facetedRowModel => {\n var _facetedRowModel$flat, _facetedRowModel$flat2, _facetedRowModel$flat3, _facetedRowModel$flat4;\n\n let facetedMinMaxValues = [(_facetedRowModel$flat = (_facetedRowModel$flat2 = facetedRowModel.flatRows[0]) == null ? void 0 : _facetedRowModel$flat2.getValue(columnId)) != null ? _facetedRowModel$flat : null, (_facetedRowModel$flat3 = (_facetedRowModel$flat4 = facetedRowModel.flatRows[0]) == null ? void 0 : _facetedRowModel$flat4.getValue(columnId)) != null ? _facetedRowModel$flat3 : null];\n\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n var _facetedRowModel$flat5;\n\n const value = (_facetedRowModel$flat5 = facetedRowModel.flatRows[i]) == null ? void 0 : _facetedRowModel$flat5.getValue(columnId);\n\n if (value < facetedMinMaxValues[0]) {\n facetedMinMaxValues[0] = value;\n } else if (value > facetedMinMaxValues[1]) {\n facetedMinMaxValues[1] = value;\n }\n }\n\n return facetedMinMaxValues;\n }, {\n key: process.env.NODE_ENV === 'development' && 'getFacetedMinMaxValues_' + columnId,\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;\n },\n onChange: () => {}\n });\n}\n\nfunction getSortedRowModel() {\n return instance => memo(() => [instance.getState().sorting, instance.getPreSortedRowModel()], (sorting, rowModel) => {\n if (!rowModel.rows.length || !(sorting != null && sorting.length)) {\n return rowModel;\n }\n\n const sortingState = instance.getState().sorting;\n const sortedFlatRows = []; // Filter out sortings that correspond to non existing columns\n\n const availableSorting = sortingState.filter(sort => instance.getColumn(sort.id).getCanSort());\n const columnInfoById = {};\n availableSorting.forEach(sortEntry => {\n const column = instance.getColumn(sortEntry.id);\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.sortUndefined,\n invertSorting: column.invertSorting,\n sortingFn: column.getSortingFn()\n };\n });\n\n const sortData = rows => {\n // This will also perform a stable sorting using the row index\n // if needed.\n const sortedData = rows.slice();\n sortedData.sort((rowA, rowB) => {\n for (let i = 0; i < availableSorting.length; i += 1) {\n var _sortEntry$desc;\n\n const sortEntry = availableSorting[i];\n const columnInfo = columnInfoById[sortEntry.id];\n const isDesc = (_sortEntry$desc = sortEntry == null ? void 0 : sortEntry.desc) != null ? _sortEntry$desc : false;\n\n if (columnInfo.sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id);\n const bValue = rowB.getValue(sortEntry.id);\n const aUndefined = typeof aValue === 'undefined';\n const bUndefined = typeof bValue === 'undefined';\n\n if (aUndefined || bUndefined) {\n return aUndefined && bUndefined ? 0 : aUndefined ? columnInfo.sortUndefined : -columnInfo.sortUndefined;\n }\n } // This function should always return in ascending order\n\n\n let sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id);\n\n if (sortInt !== 0) {\n if (isDesc) {\n sortInt *= -1;\n }\n\n if (columnInfo.invertSorting) {\n sortInt *= -1;\n }\n\n return sortInt;\n }\n }\n\n return rowA.index - rowB.index;\n }); // If there are sub-rows, sort them\n\n sortedData.forEach(row => {\n sortedFlatRows.push(row);\n\n if (!row.subRows || row.subRows.length <= 1) {\n return;\n }\n\n row.subRows = sortData(row.subRows);\n });\n return sortedData;\n };\n\n return {\n rows: sortData(rowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: rowModel.rowsById\n };\n }, {\n key: process.env.NODE_ENV === 'development' && 'getSortedRowModel',\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;\n },\n onChange: () => {\n instance.queue(() => {\n instance._autoResetPageIndex();\n });\n }\n });\n}\n\nfunction getGroupedRowModel() {\n return instance => memo(() => [instance.getState().grouping, instance.getPreGroupedRowModel()], (grouping, rowModel) => {\n if (!rowModel.rows.length || !grouping.length) {\n return rowModel;\n } // Filter the grouping list down to columns that exist\n\n\n const existingGrouping = grouping.filter(columnId => instance.getColumn(columnId));\n const groupedFlatRows = [];\n const groupedRowsById = {}; // const onlyGroupedFlatRows: Row[] = [];\n // const onlyGroupedRowsById: Record<RowId, Row> = {};\n // const nonGroupedFlatRows: Row[] = [];\n // const nonGroupedRowsById: Record<RowId, Row> = {};\n // Recursively group the data\n\n const groupUpRecursively = function (rows, depth, parentId) {\n if (depth === void 0) {\n depth = 0;\n }\n\n // This is the last level, just return the rows\n if (depth === existingGrouping.length) {\n return rows;\n }\n\n const columnId = existingGrouping[depth]; // Group the rows together for this level\n\n const rowGroupsMap = groupBy(rows, columnId); // Peform aggregations for each group\n\n const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map((_ref, index) => {\n let [groupingValue, groupedRows] = _ref;\n let id = columnId + \":\" + groupingValue;\n id = parentId ? parentId + \">\" + id : id; // First, Recurse to group sub rows before aggregation\n\n const subRows = groupUpRecursively(groupedRows, depth + 1, id); // Flatten the leaf rows of the rows in this group\n\n const leafRows = depth ? flattenBy(groupedRows, row => row.subRows) : groupedRows;\n const row = instance.createRow(id, undefined, index, depth);\n Object.assign(row, {\n groupingColumnId: columnId,\n groupingValue,\n subRows,\n leafRows,\n getValue: columnId => {\n // Don't aggregate columns that are in the grouping\n if (existingGrouping.includes(columnId)) {\n if (row.valuesCache.hasOwnProperty(columnId)) {\n return row.valuesCache[columnId];\n }\n\n if (groupedRows[0]) {\n var _groupedRows$0$getVal;\n\n row.valuesCache[columnId] = (_groupedRows$0$getVal = groupedRows[0].getValue(columnId)) != null ? _groupedRows$0$getVal : undefined;\n }\n\n return row.valuesCache[columnId];\n }\n\n if (row.groupingValuesCache.hasOwnProperty(columnId)) {\n return row.groupingValuesCache[columnId];\n } // Aggregate the values\n\n\n const column = instance.getColumn(columnId);\n const aggregateFn = column.getColumnAggregationFn();\n\n if (aggregateFn) {\n row.groupingValuesCache[columnId] = aggregateFn(() => leafRows.map(row => {\n let columnValue = row.getValue(columnId);\n\n if (!depth && column.aggregateValue) {\n columnValue = column.aggregateValue(columnValue);\n }\n\n return columnValue;\n }), () => groupedRows.map(row => row.getValue(columnId)));\n return row.groupingValuesCache[columnId];\n } else if (column.aggregationFn) {\n console.info({\n column\n });\n throw new Error(process.env.NODE_ENV !== 'production' ? \"Table: Invalid column.aggregateType option for column listed above\" : '');\n }\n }\n });\n subRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow; // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return row;\n });\n return aggregatedGroupedRows;\n };\n\n const groupedRows = groupUpRecursively(rowModel.rows, 0, '');\n groupedRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow; // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return {\n rows: groupedRows,\n flatRows: groupedFlatRows,\n rowsById: groupedRowsById\n };\n }, {\n key: process.env.NODE_ENV === 'development' && 'getGroupedRowModel',\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;\n },\n onChange: () => {\n instance.queue(() => {\n instance._autoResetExpanded();\n\n instance._autoResetPageIndex();\n });\n }\n });\n}\n\nfunction groupBy(rows, columnId) {\n const groupMap = new Map();\n return rows.reduce((map, row) => {\n const resKey = \"\" + row.getValue(columnId);\n const previous = map.get(resKey);\n\n if (!previous) {\n map.set(resKey, [row]);\n } else {\n map.set(resKey, [...previous, row]);\n }\n\n return map;\n }, groupMap);\n}\n\nfunction getExpandedRowModel() {\n return instance => memo(() => [instance.getState().expanded, instance.getPreExpandedRowModel(), instance.options.paginateExpandedRows], (expanded, rowModel, paginateExpandedRows) => {\n if (!rowModel.rows.length || // Do not expand if rows are not included in pagination\n !paginateExpandedRows || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) {\n return rowModel;\n }\n\n return expandRows(rowModel, instance);\n }, {\n key: process.env.NODE_ENV === 'development' && 'getExpandedRowModel',\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;\n }\n });\n}\nfunction expandRows(rowModel, instance) {\n const expandedRows = [];\n\n const handleRow = row => {\n var _row$subRows;\n\n expandedRows.push(row);\n\n if (instance.options.expandSubRows && (_row$subRows = row.subRows) != null && _row$subRows.length && row.getIsExpanded()) {\n row.subRows.forEach(handleRow);\n }\n };\n\n rowModel.rows.forEach(handleRow);\n return {\n rows: expandedRows,\n flatRows: rowModel.flatRows,\n rowsById: rowModel.rowsById\n };\n}\n\nfunction getPaginationRowModel(opts) {\n return instance => memo(() => [instance.getState().pagination, instance.getPrePaginationRowModel()], (pagination, rowModel) => {\n if (!rowModel.rows.length) {\n return rowModel;\n }\n\n const {\n pageSize,\n pageIndex\n } = pagination;\n let {\n rows,\n flatRows,\n rowsById\n } = rowModel;\n const pageStart = pageSize * pageIndex;\n const pageEnd = pageStart + pageSize;\n rows = rows.slice(pageStart, pageEnd);\n\n if (!instance.options.paginateExpandedRows) {\n return expandRows({\n rows,\n flatRows,\n rowsById\n }, instance);\n }\n\n return {\n rows,\n flatRows,\n rowsById\n };\n }, {\n key: process.env.NODE_ENV === 'development' && 'getPaginationRowModel',\n debug: () => {\n var _instance$options$deb;\n\n return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;\n }\n });\n}\n\nexport { ColumnSizing, Expanding, Filters, Grouping, Headers, Ordering, Pagination, Pinning, RowSelection, Sorting, Visibility, buildHeaderGroups, createTableFactory, createTableInstance, defaultColumnSizing, expandRows, flattenBy, functionalUpdate, getCoreRowModel, getExpandedRowModel, getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, getFilteredRowModel, getGroupedRowModel, getPaginationRowModel, getSortedRowModel, isFunction, isRowSelected, makeStateUpdater, memo, noop, orderColumns, passiveEventSupported, selectRowsFn, shouldAutoRemoveFilter };\n//# sourceMappingURL=index.js.map\n","import * as React from 'react'\nexport * from '@tanstack/table-core'\n\nimport {\n createTableInstance,\n TableOptions,\n TableInstance,\n Table,\n TableGenerics,\n createTableFactory,\n Overwrite,\n PartialKeys,\n} from '@tanstack/table-core'\n\nexport type Renderable<TProps> =\n | React.ReactNode\n | React.FunctionComponent<TProps>\n | React.Component<TProps>\n\nexport type Render = <TProps extends {}>(\n Comp: Renderable<TProps>,\n props: TProps\n) => React.ReactNode | JSX.Element\n\nexport type ReactTableGenerics = Overwrite<\n TableGenerics,\n { Renderer: Render; Rendered: ReturnType<Render> }\n>\n\n//\n\nexport const render: Render = (Comp, props) =>\n !Comp ? null : isReactComponent(Comp) ? <Comp {...props} /> : Comp\n\nfunction isReactComponent(component: unknown): component is React.FC {\n return (\n isClassComponent(component) ||\n typeof component === 'function' ||\n isExoticComponent(component)\n )\n}\n\nfunction isClassComponent(component: any) {\n return (\n typeof component === 'function' &&\n (() => {\n const proto = Object.getPrototypeOf(component)\n return proto.prototype && proto.prototype.isReactComponent\n })()\n )\n}\n\nfunction isExoticComponent(component: any) {\n return (\n typeof component === 'object' &&\n typeof component.$$typeof === 'symbol' &&\n ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description)\n )\n}\n\nexport const createTable = createTableFactory({ render })\n\n// const useIsomorphicLayoutEffect =\n// typeof document !== 'undefined' ? React.useLayoutEffect : React.useEffect\n\nexport type UseTableInstanceOptions<TGenerics extends ReactTableGenerics> =\n PartialKeys<\n Omit<TableOptions<TGenerics>, 'render'>,\n 'state' | 'onStateChange'\n >\n\nexport function useTableInstance<TGenerics extends ReactTableGenerics>(\n table: Table<TGenerics>,\n options: UseTableInstanceOptions<TGenerics>\n): TableInstance<TGenerics> {\n // Compose in the generic options to the user options\n const resolvedOptions: TableOptions<TGenerics> = {\n ...table.options,\n state: {}, // Dummy state\n onStateChange: () => {}, // noop\n render,\n ...options,\n }\n\n // Create a new table instance and store it in state\n const [instanceRef] = React.useState(() => ({\n current: createTableInstance<TGenerics>(resolvedOptions),\n }))\n\n // By default, manage table state here using the instance's initial state\n const [state, setState] = React.useState(\n () => instanceRef.current.initialState\n )\n\n // Compose the default state above with any user state. This will allow the user\n // to only control a subset of the state if desired.\n instanceRef.current.setOptions(prev => ({\n ...prev,\n ...options,\n state: {\n ...state,\n ...options.state,\n },\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: updater => {\n setState(updater)\n options.onStateChange?.(updater)\n },\n }))\n\n return instanceRef.current\n}\n"],"names":["functionalUpdate","updater","input","makeStateUpdater","key","instance","setState","old","isFunction","d","Function","flattenBy","arr","getChildren","flat","recurse","subArr","forEach","item","push","children","length","memo","getDeps","fn","opts","result","deps","depTime","debug","Date","now","newDeps","some","dep","index","resultTime","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","Columns","createInstance","getDefaultColumn","options","defaultColumn","_defaultColumn","header","props","column","id","footer","cell","_props$getValue$toStr","_props$getValue$toStr2","_props$getValue","getValue","toString","call","_features","reduce","obj","feature","Object","assign","_instance$options$deb","debugAll","debugColumns","getColumnDefs","columns","createColumn","columnDef","depth","parent","_ref","_columnDef$id","accessorFn","accessorKey","undefined","originalRow","Error","columnDefType","getFlatColumns","_column$columns","flatMap","_instance$options$deb2","getLeafColumns","_getOrderColumnsFn","orderColumns","_column$columns2","leafColumns","_instance$options$deb3","getAllColumns","columnDefs","recurseColumns","map","_instance$options$deb4","getAllFlatColumns","allColumns","_instance$options$deb5","getAllFlatColumnsById","flatColumns","acc","_instance$options$deb6","getAllLeafColumns","_instance$options$deb7","getColumn","columnId","Rows","getRowId","row","_instance$options$get","join","createRow","original","rowIndex","subRows","valuesCache","hasOwnProperty","getLeafRows","i","getCoreRowModel","_getCoreRowModel","getRowModel","getPaginationRowModel","getRow","rowsById","Cells","getAllCells","createCell","debugRows","getAllCellsByColumnId","allCells","rowId","renderCell","render","getCell","defaultColumnSizing","size","minSize","maxSize","Number","MAX_SAFE_INTEGER","ColumnSizing","getInitialState","state","columnSizing","columnSizingInfo","startOffset","startSize","deltaOffset","deltaPercentage","isResizingColumn","columnSizingStart","getDefaultOptions","columnResizeMode","onColumnSizingChange","onColumnSizingInfoChange","getSize","_column$minSize","_column$maxSize","columnSize","getState","getStart","position","getLeftVisibleLeafColumns","getRightVisibleLeafColumns","getVisibleLeafColumns","findIndex","prevSiblingColumn","resetSize","setColumnSizing","_ref2","_","rest","getCanResize","_column$enableResizin","_instance$options$ena","enableResizing","enableColumnResizing","getIsResizing","createHeader","sum","_header$column$getSiz","subHeaders","prevSiblingHeader","headerGroup","headers","getResizeHandler","canResize","e","persist","isTouchStartEvent","touches","getLeafHeaders","clientX","updateOffset","eventType","clientXPos","newColumnSizing","setColumnSizingInfo","_old$startOffset","_old$startSize","_ref3","headerSize","mouseEvents","moveHandler","onMove","upHandler","document","removeEventListener","passiveIfSupported","passiveEventSupported","passive","addEventListener","resetColumnSizing","defaultState","_instance$initialStat","initialState","resetHeaderSizeInfo","_instance$initialStat2","getTotalSize","_instance$getHeaderGr","_instance$getHeaderGr2","getHeaderGroups","getLeftTotalSize","_instance$getLeftHead","_instance$getLeftHead2","getLeftHeaderGroups","getCenterTotalSize","_instance$getCenterHe","_instance$getCenterHe2","getCenterHeaderGroups","getRightTotalSize","_instance$getRightHea","_instance$getRightHea2","getRightHeaderGroups","passiveSupported","supported","noop","window","err","type","Expanding","expanded","onExpandedChange","autoResetExpanded","expandSubRows","paginateExpandedRows","registered","_autoResetExpanded","autoResetAll","resetExpanded","setExpanded","toggleAllRowsExpanded","getIsAllRowsExpanded","getCanSomeRowsExpand","flatRows","getCanExpand","getToggleAllRowsExpandedHandler","getIsSomeRowsExpanded","values","Boolean","getIsExpanded","getExpandedDepth","maxDepth","keys","splitId","split","getPreExpandedRowModel","getGroupedRowModel","getExpandedRowModel","_getExpandedRowModel","manualExpanding","toggleExpanded","_expanded","exists","oldExpanded","getIsRowExpanded","_instance$options$get2","_row$subRows","getRowCanExpand","enableExpanding","getToggleExpandedHandler","canExpand","includesString","filterValue","search","toLowerCase","includes","autoRemove","val","testFalsey","includesStringSensitive","equalsString","arrIncludes","arrIncludesAll","arrIncludesSome","equals","weakEquals","inNumberRange","rowValue","resolveFilterValue","unsafeMin","unsafeMax","parsedMin","parseFloat","parsedMax","isNaN","Infinity","temp","filterFns","Filters","filterFn","columnFilters","globalFilter","onColumnFiltersChange","onGlobalFilterChange","filterFromLeafRows","globalFilterFn","getColumnCanGlobalFilter","_instance$getCoreRowM","_instance$getCoreRowM2","getAutoFilterFn","firstRow","value","Array","isArray","getFilterFn","userFilterFns","getCanFilter","_column$enableColumnF","_instance$options$ena2","enableColumnFilter","enableColumnFilters","enableFilters","getCanGlobalFilter","_column$enableGlobalF","_instance$options$ena3","_instance$options$ena4","enableGlobalFilter","getIsFiltered","getFilterIndex","getFilterValue","_instance$getState$co","_instance$getState$co2","find","_instance$getState$co3","_instance$getState$co4","setFilterValue","setColumnFilters","previousfilter","newFilter","_old$filter","shouldAutoRemoveFilter","filter","newFilterObj","_old$map","_getFacetedRowModel","getFacetedRowModel","getPreFilteredRowModel","_getFacetedUniqueValues","getFacetedUniqueValues","Map","_getFacetedMinMaxValues","getFacetedMinMaxValues","NaN","columnFilterMap","subRowsByFacetId","getGlobalAutoFilterFn","getGlobalFilterFn","_functionalUpdate","setGlobalFilter","resetGlobalFilter","resetColumnFilters","_getFilteredRowModel","getFilteredRowModel","manualFiltering","_getGlobalFacetedRowModel","getGlobalFacetedRowModel","_getGlobalFacetedUniqueValues","getGlobalFacetedUniqueValues","_getGlobalFacetedMinMaxValues","getGlobalFacetedMinMaxValues","aggregationFns","_getLeafValues","getChildValues","next","extent","mean","getLeafValues","count","median","leafValues","unique","from","Set","uniqueCount","Grouping","aggregationFn","grouping","onGroupingChange","groupedColumnMode","toggleGrouping","setGrouping","getCanGroup","_column$enableGroupin","enableGrouping","getIsGrouped","_instance$getState$gr","getGroupedIndex","_instance$getState$gr2","indexOf","getToggleGroupingHandler","canGroup","getColumnAutoAggregationFn","prototype","getColumnAggregationFn","_ref4","userAggregationFns","resetGrouping","getPreGroupedRowModel","getSortedRowModel","_getGroupedRowModel","manualGrouping","groupingColumnId","groupingValuesCache","getIsPlaceholder","getIsAggregated","renderAggregatedCell","_column$aggregatedCel","template","aggregatedCell","nonGroupingColumns","col","g","Ordering","columnOrder","onColumnOrderChange","setColumnOrder","resetColumnOrder","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","shift","foundIndex","splice","Pagination","pagination","pageIndex","pageSize","onPaginationChange","autoResetPageIndex","_autoResetPageIndex","resetPageIndex","setPagination","resetPagination","setPageIndex","maxPageIndex","pageCount","_instance$initialStat3","_instance$initialStat4","resetPageSize","_instance$initialStat5","_instance$initialStat6","_instance$initialStat7","setPageSize","topRowIndex","floor","setPageCount","_old$pageCount","newPageCount","getPageOptions","pageOptions","fill","debugTable","getCanPreviousPage","getCanNextPage","getPageCount","previousPage","nextPage","getPrePaginationRowModel","_getPaginationRowModel","manualPagination","ceil","rows","Pinning","columnPinning","left","right","onColumnPinningChange","pin","columnIds","setColumnPinning","_old$left3","_old$right3","_old$left","_old$right","_old$left2","_old$right2","getCanPin","_d$enablePinning","enablePinning","getIsPinned","leafColumnIds","isLeft","isRight","getPinnedIndex","getCenterVisibleCells","_getAllVisibleCells","leftAndRight","getLeftVisibleCells","getRightVisibleCells","resetColumnPinning","getIsSomeColumnsPinned","getLeftLeafColumns","getRightLeafColumns","getCenterLeafColumns","RowSelection","rowSelection","onRowSelectionChange","enableRowSelection","enableMultiRowSelection","enableSubRowSelection","setRowSelection","resetRowSelection","toggleAllRowsSelected","getIsAllRowsSelected","preGroupedFlatRows","toggleAllPageRowsSelected","getIsAllPageRowsSelected","mutateRowIsSelected","getPreSelectedRowModel","getSelectedRowModel","rowModel","selectRowsFn","getFilteredSelectedRowModel","getGroupedSelectedRowModel","preFilteredFlatRows","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","getIsSomeRowsSelected","_instance$getState$ro","getIsSomePageRowsSelected","getToggleAllRowsSelectedHandler","target","checked","getToggleAllPageRowsSelectedHandler","toggleSelected","isSelected","getIsSelected","selectedRowIds","isRowSelected","getIsSomeSelected","getCanSelect","getCanSelectSubRows","getCanMultiSelect","getToggleSelectedHandler","canSelect","_target","newSelectedFlatRows","newSelectedRowsById","recurseRows","_row$subRows2","selection","allChildrenSelected","someSelected","subRow","reSplitAlphaNumeric","sortingFns","alphanumeric","rowA","rowB","compareAlphanumeric","alphanumericCaseSensitive","text","compareBasic","textCaseSensitive","datetime","getTime","basic","aStr","bStr","a","b","aa","bb","an","parseInt","bn","combo","sort","Sorting","sorting","sortingFn","onSortingChange","isMultiSortEvent","shiftKey","getAutoSortingFn","firstRows","slice","isString","getAutoSortDir","getSortingFn","userSortingFn","toggleSorting","desc","multi","setSorting","_column$sortDescFirst","existingSorting","existingIndex","hasDescDefined","sortAction","newSorting","getCanMultiSort","sortDescFirst","enableSortingRemoval","enableMultiRemove","_instance$options$max","maxMultiSortColCount","getCanSort","_column$enableSorting","enableSorting","_column$enableMultiSo","enableMultiSort","getIsSorted","_instance$getState$so","columnSort","getSortIndex","_instance$getState$so2","_instance$getState$so3","clearSorting","getToggleSortingHandler","canSort","resetSorting","getPreSortedRowModel","_getSortedRowModel","manualSorting","Visibility","columnVisibility","onColumnVisibilityChange","defaultIsVisible","toggleVisibility","getCanHide","setColumnVisibility","getIsVisible","_column$enableHiding","enableHiding","getToggleVisibilityHandler","getVisibleCells","center","makeVisibleColumnsMethod","getColumns","getVisibleFlatColumns","getCenterVisibleLeafColumns","resetColumnVisibility","toggleAllColumnsVisible","_value","getIsAllColumnsVisible","getIsSomeColumnsVisible","getToggleAllColumnsVisibilityHandler","Headers","_options$id","isPlaceholder","placeholderId","colSpan","rowSpan","leafHeaders","recurseHeader","h","renderHeader","renderFooter","leftColumns","rightColumns","buildHeaderGroups","debugHeaders","getFooterGroups","headerGroups","reverse","getLeftFooterGroups","getCenterFooterGroups","getRightFooterGroups","_instance$options$deb8","getFlatHeaders","_instance$options$deb9","getLeftFlatHeaders","_instance$options$deb10","getCenterFlatHeaders","_instance$options$deb11","getRightFlatHeaders","_instance$options$deb12","getCenterLeafHeaders","flatHeaders","_header$subHeaders","_instance$options$deb13","getLeftLeafHeaders","_header$subHeaders2","_instance$options$deb14","getRightLeafHeaders","_header$subHeaders3","_instance$options$deb15","_left$0$headers","_left$","_center$0$headers","_center$","_right$0$headers","_right$","_instance$options$deb16","getHeader","columnsToGroup","headerFamily","_headerGroups$0$heade","_headerGroups$","findMaxDepth","createHeaderGroup","headersToGroup","pendingParentHeaders","headerToGroup","latestPendingParentHeader","bottomHeaders","recurseHeadersForSpans","childRowSpans","childColSpan","childRowSpan","createTableInstance","_options$initialState","defaultOptions","_feature$getInitialSt","queued","queuedTimeout","midInstance","queue","cb","Promise","resolve","then","catch","error","setTimeout","reset","setOptions","newOptions","mergeOptions","onStateChange","createTableFactory","createTable","__","table","generics","setGenerics","setRowType","setTableMetaType","setColumnMetaType","createDisplayColumn","createGroup","createDataColumn","accessor","_column$id","filterRows","filterRowImpl","rowsToFilter","filterRow","newFilteredFlatRows","newFilteredRowsById","newRow","recurseFilterRows","filterRowModelFromLeafs","filterRowModelFromRoot","expandRows","expandedRows","handleRow","Comp","component","proto","getPrototypeOf","isReactComponent","isClassComponent","$$typeof","description","isExoticComponent","React","createElement","data","accessRow","parentRows","getSubRows","originalSubRows","facetedRowModel","_facetedRowModel$flat","_facetedRowModel$flat2","_facetedRowModel$flat3","_facetedRowModel$flat4","facetedMinMaxValues","_facetedRowModel$flat5","preRowModel","filterableIds","facetedUniqueValues","_facetedUniqueValues$","has","set","get","resolvedColumnFilters","resolvedGlobalFilters","_filterFn$resolveFilt","resolvedValue","globallyFilterableColumns","currentColumnFilter","currentGlobalFilter","_globalFilterFn$resol","j","__global__","existingGrouping","groupedFlatRows","groupedRowsById","groupUpRecursively","parentId","rowGroupsMap","groupMap","resKey","previous","groupBy","aggregatedGroupedRows","entries","groupingValue","groupedRows","leafRows","_groupedRows$0$getVal","aggregateFn","columnValue","aggregateValue","pageStart","pageEnd","sortingState","sortedFlatRows","availableSorting","columnInfoById","sortEntry","sortUndefined","invertSorting","sortData","sortedData","_sortEntry$desc","columnInfo","isDesc","aUndefined","bUndefined","sortInt","resolvedOptions","instanceRef","useState","current","prev"],"mappings":"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"}